您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

1年前
1年前
1年前
1年前
1年前
1年前
10 个月前
1年前
10 个月前
10 个月前
10 个月前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
10 个月前
1年前
10 个月前
10 个月前
10 个月前
1年前
1年前
1年前
1年前
10 个月前
1年前
1年前
1年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768
  1. <template>
  2. <view class="oderPage">
  3. <view class="addr-box">
  4. <view class="addr-box-left" v-if="form.consignee">
  5. <view class="text-image">{{form.consignee.charAt(0)}} </view>
  6. <view class="content">
  7. <view class="">
  8. <text class="item1">{{form.consignee}}</text>
  9. <text class="item2">{{form.consigneeTel}}</text>
  10. <text class="item3" v-if="form.defaultAddress ==1">默认</text>
  11. </view>
  12. <view class=""> {{form.region +form.address}}</view>
  13. </view>
  14. </view>
  15. <view v-else class="editAddress">请先编辑地址</view>
  16. <view class="edit" @click="address.show = true">
  17. <image :src="`${$imgUrl}applyCard/edit.png`" mode=""></image>
  18. </view>
  19. </view>
  20. <u-form ref="myForm">
  21. <view class="from">
  22. <u-form-item prop="cardState">
  23. <view class="from_item">
  24. <text><text style="color: red">*</text>是否寄回设备:</text>
  25. <radio-group @change="sendChange" class="radios">
  26. <block v-for="(item, index) in radiolist1" :key="item.val">
  27. <view class="radio-box">
  28. <radio :value="item.val" :checked="form.sendStatus == item.val" color="#13e7c1"
  29. style="transform:scale(0.75)" />
  30. <view>{{item.name}}</view>
  31. </view>
  32. </block>
  33. </radio-group>
  34. </view>
  35. </u-form-item>
  36. <u-form-item prop="logistics" v-if="form.sendStatusName == '寄回'">
  37. <view class="from_item">
  38. <text><text style="color: red">*</text>退货物流公司:</text>
  39. <view style="display: flex">
  40. <u-input v-model="form.courierCompany" class="input" @click="showPicker" placeholder="请选择"
  41. disabled />
  42. <u-icon name="arrow-right" style="margin-left: 10px;display: flex;"></u-icon>
  43. </view>
  44. </view>
  45. </u-form-item>
  46. <u-form-item prop="returnNum" v-if="form.sendStatusName == '寄回'">
  47. <view class="from_item">
  48. <text><text style="color: red"></text>退货单号:</text>
  49. <u-input v-model="form.courierOrderId" class="input" maxlength="32" />
  50. </view>
  51. </u-form-item>
  52. <u-form-item prop="cardState">
  53. <view class="from_item">
  54. <text><text style="color: red">*</text>收货方式:</text>
  55. <radio-group @change="receiveChange" class="radios">
  56. <block v-for="(item, index) in radiolist2" :key="item.val">
  57. <view class="radio-box">
  58. <radio :value="item.val" :checked="form.receiveMethod == item.val" color="#13e7c1"
  59. style="transform:scale(0.75)" />
  60. <view>{{item.name}}</view>
  61. </view>
  62. </block>
  63. </radio-group>
  64. </view>
  65. </u-form-item>
  66. <u-form-item prop="remark">
  67. <view class="from_item">
  68. <text><text style="color: red"></text>更换原因:</text>
  69. <view style="display: flex">
  70. <u-input v-model="form.applyRes" @click="showApplyResPicker()" class="input" disabled
  71. placeholder="请选择" />
  72. <u-icon name="arrow-right" style="margin-left: 10px;display: flex;"></u-icon>
  73. </view>
  74. </view>
  75. </u-form-item>
  76. <u-form-item >
  77. <view class="from_item">
  78. <text><text style="color: red"></text>邮寄地址:</text>
  79. <u-input v-model="form.goodsAddress" class="input" disabled/>
  80. </view>
  81. </u-form-item>
  82. </view>
  83. </u-form>
  84. <view class="attention">{{params.msg}}</view>
  85. <view class="no_pay"><text>*</text>不支持货到付款</view>
  86. <!-- 物流弹窗 -->
  87. <view>
  88. <!-- 物流 -->
  89. <u-select v-model="show" mode="single-column" :list="list" @confirm="confirm"></u-select>
  90. <!-- 原因 -->
  91. <u-select v-model="showApplyRes" mode="single-column" :list="applyResList" @confirm="applyResConfirm">
  92. </u-select>
  93. </view>
  94. <view class="buttonWrap">
  95. <button class="default button" @click="changeCardQueryCancleAction()" type="default">撤回申请</button>
  96. <button class="submit" @click="submit">下一步</button>
  97. </view>
  98. </view>
  99. <!-- 地址弹窗 -->
  100. <u-popup mode="bottom" v-model="address.show">
  101. <view class="address-line">
  102. <view v-if="address.list" v-for="(item, index) in address.list" :key="index" @click="addressSelected(item)"
  103. style="margin-bottom: 40rpx" class="flex-bettwen">
  104. <view class="flex">
  105. <view class="xing">
  106. {{ item.consignee.charAt(0) }}
  107. </view>
  108. <view class="content">
  109. <view class="flex">
  110. <view class="name">
  111. {{ item.consignee }}
  112. </view>
  113. <view class="phone">
  114. {{ item.consigneeTel }}
  115. </view>
  116. </view>
  117. <view class="address">
  118. {{ item.region + item.address }}
  119. </view>
  120. </view>
  121. </view>
  122. <view @click.stop="editAddress(item)" style="margin-left: 80rpx" class="picture">
  123. <image :showLoading="true" :src="`${$imgUrl}applyCard/edit.png`"
  124. style="width: 48rpx; height: 48rpx"></image>
  125. </view>
  126. </view>
  127. <view :style="address.list ? 'margin-top: 60rpx;' : ''" class="action-bottom">
  128. <button type="default" class="button" @click="goToAddAddress()">
  129. 添加收货地址
  130. </button>
  131. </view>
  132. </view>
  133. </u-popup>
  134. </template>
  135. <script setup lang="ts">
  136. import {
  137. reactive,
  138. ref
  139. } from "vue";
  140. import {
  141. onLoad,
  142. onShow
  143. } from "@dcloudio/uni-app";
  144. import {
  145. navTo
  146. } from "@/utils/utils";
  147. import { requestNew} from "@/utils/network/request.js";
  148. import {
  149. commQueryCourier,
  150. addressQueryNew,
  151. changeCardObuFill,
  152. changeCardObuCancel
  153. } from "@/utils/network/api.js";
  154. import {
  155. getItem,
  156. StorageKeys
  157. } from "@/utils/storage";
  158. import {
  159. getMailingAddress
  160. } from "@/subpackage/after-sale/js/publicRequest";
  161. import {
  162. wechatPayConfigId,
  163. } from "@/utils/network/api";
  164. import {
  165. msg, noticeUser
  166. } from "@/utils/utils";
  167. const list = reactive([]); //物流数据
  168. const apply = reactive({
  169. data: {
  170. status: undefined,
  171. id: ''
  172. }
  173. });
  174. const address = reactive({
  175. list: [],
  176. show: false
  177. }); //地址list
  178. const form = reactive({
  179. consignee: '',
  180. consigneeTel: '',
  181. address: '',
  182. region: '',
  183. sendStatusName: '寄回',
  184. sendStatus: '1', //0 --- 不邮寄 1 --- 邮寄
  185. courierCompany: '',
  186. courierOrderId: '',
  187. receiveMethod: '1',
  188. postalCode: '',
  189. receiveMethodName: '邮寄', //0 --- 不邮寄 1 --- 邮寄
  190. applyRes: '',
  191. defaultAddress: 2,
  192. goodsAddress:""
  193. });
  194. //入参
  195. const params = reactive({
  196. orderId: '',
  197. id: '',
  198. msg: "",
  199. cardExpire: "", //1:质保期过了 0:在质保期内
  200. obuExpire: "" //1:质保期过了 0:在质保期内
  201. });
  202. const applyResList = reactive([{
  203. //原因
  204. value: "损坏",
  205. label: "损坏",
  206. },
  207. {
  208. value: "其它",
  209. label: "其它",
  210. },
  211. ]);
  212. const radiolist2 = reactive([{
  213. name: "邮寄",
  214. val: "1",
  215. },
  216. ]);
  217. // 单选数据列表
  218. const radiolist1 = reactive([]);
  219. onLoad((option) => {
  220. console.log("option", option)
  221. params.orderId = option.orderId
  222. params.id = option.id
  223. params.msg = option.msg == "undefined" ? "" : option.msg
  224. params.cardExpire = option.cardExpire == "undefined" ? "" : option.cardExpire
  225. params.obuExpire = option.obuExpire == "undefined" ? "" : option.obuExpire
  226. if (option.damageMode == "0") {
  227. var data = {
  228. name: "寄回",
  229. val: "1",
  230. }
  231. var data1 = {
  232. name: "不寄回",
  233. val: "0",
  234. }
  235. radiolist1.push(data)
  236. radiolist1.push(data1)
  237. } else {
  238. var data = {
  239. name: "寄回",
  240. val: "1",
  241. }
  242. radiolist1.push(data)
  243. }
  244. console.log("radiolist1.value", radiolist1.value)
  245. getexpresslist();
  246. getAddressList();
  247. getMailingAddress(option.orderId).then((address) => {
  248. console.log("address",address)
  249. form.goodsAddress=address
  250. })
  251. });
  252. const goToAddAddress = () => {
  253. uni.navigateTo({
  254. url: "/subpackage/orders/addAddress",
  255. });
  256. };
  257. const editAddress = (val) => {
  258. uni.navigateTo({
  259. url: `/subpackage/orders/editAddress?content=` + JSON.stringify(val),
  260. });
  261. };
  262. const addressSelected = (val : any) => {
  263. console.log(val);
  264. form.consignee = val.consignee
  265. form.consigneeTel = val.consigneeTel
  266. form.address = val.address
  267. form.region = val.region
  268. form.postalCode = val.postalCode
  269. form.defaultAddress = val.defaultAddress
  270. address.show = false
  271. console.log("form.address", form.region, form.address)
  272. };
  273. // 寄回单选
  274. const sendChange = (e : any) => {
  275. console.log(e);
  276. form.sendStatus = e.detail.value
  277. };
  278. // 邮寄单选
  279. const receiveChange = (e : any) => {
  280. console.log(e);
  281. form.receiveMethod = e.detail.value
  282. };
  283. //撤销订单
  284. const changeCardQueryCancleAction = () => {
  285. var data = {
  286. id: params.id,
  287. cancelRes: '取消申请单'
  288. };
  289. const options = {
  290. type: 2,
  291. data: data,
  292. method: "POST",
  293. showLoading: true,
  294. };
  295. return new Promise(async (resolve, reject) => {
  296. const res = await requestNew(changeCardObuCancel, options);
  297. console.log("取消申请成功", data)
  298. msg('取消申请成功');
  299. setTimeout(() => {
  300. uni.navigateBack({
  301. delta: 2
  302. })
  303. }, 1000)
  304. }).catch((error) => {
  305. reject(error);
  306. });
  307. }
  308. let showApplyRes = ref(false);
  309. // 打开物流先择器
  310. const showApplyResPicker = function () {
  311. showApplyRes.value = true;
  312. };
  313. const applyResConfirm = (e) => {
  314. form.applyRes = e[0].value;
  315. console.log(e[0].value);
  316. };
  317. let show = ref(false);
  318. // 打开物流先择器
  319. const showPicker = function () {
  320. show.value = true;
  321. };
  322. const confirm = (e) => {
  323. form.courierCompany = e[0].value;
  324. console.log(e[0].value);
  325. };
  326. onShow(() => {
  327. getexpresslist();
  328. getAddressList();
  329. });
  330. const getexpresslist = () => {
  331. //参数说明
  332. let options = {
  333. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  334. data: {}, //请求参数
  335. method: "POST", //提交方式(默认POST)
  336. showLoading: true, //是否显示加载中(默认显示)
  337. };
  338. //调用方式
  339. requestNew(commQueryCourier, options)
  340. .then((res) => {
  341. console.log("物流", res)
  342. res.forEach((item) => {
  343. list.push({
  344. value: item,
  345. label: item,
  346. });
  347. });
  348. })
  349. .catch((err) => {
  350. console.log(err);
  351. });
  352. };
  353. const getAddressList = () => {
  354. var data = {
  355. openId: getItem(StorageKeys.OpenId),
  356. };
  357. const options = {
  358. type: 2,
  359. data: data,
  360. method: "POST",
  361. showLoading: true,
  362. };
  363. requestNew(addressQueryNew, options).then((res) => {
  364. const data = res;
  365. address.list = data.data;
  366. if (address.list.length > 0) {
  367. var defaultAddress = address.list[0]
  368. form.consignee = defaultAddress.consignee
  369. form.consigneeTel = defaultAddress.consigneeTel
  370. form.address = defaultAddress.address
  371. form.region = defaultAddress.region
  372. form.postalCode = defaultAddress.postalCode
  373. form.defaultAddress = defaultAddress.defaultAddress
  374. }
  375. console.log("form.address", form.address)
  376. });
  377. };
  378. let isClickable = true;
  379. const submit = () => {
  380. if (!isClickable) return;
  381. isClickable = false;
  382. noticeUser(() => {
  383. queryCckChangejzCardInfo().then(val => {
  384. navTo(
  385. `/subpackage/after-sale/replace-equipment/result`
  386. )
  387. })
  388. });
  389. setTimeout(() => {
  390. isClickable = true;
  391. }, 2000); // 1秒钟后可再次点击
  392. };
  393. const queryCckChangejzCardInfo = () => {
  394. if (!form.address) {
  395. msg("请编辑收货详细地址");
  396. return;
  397. }
  398. var data = {
  399. id: params.id,
  400. sendStatus: form.sendStatus,
  401. configId: wechatPayConfigId,
  402. courierCompany: form.courierCompany,
  403. courierOrderId: form.courierOrderId,
  404. receiveMethod: form.receiveMethod,
  405. consignee: form.consignee,
  406. consigneeTel: form.consigneeTel,
  407. address: form.address,
  408. region: form.region,
  409. postalCode: form.postalCode,
  410. applyRes: form.applyRes,
  411. cardExpire: params.cardExpire,
  412. obuExpire: params.obuExpire,
  413. goodsAddress:form.goodsAddress
  414. };
  415. const options = {
  416. type: 2,
  417. data: data,
  418. method: "POST",
  419. showLoading: true,
  420. };
  421. console.log("data", data)
  422. return new Promise(async (resolve, reject) => {
  423. const res = await requestNew(changeCardObuFill, options);
  424. console.log("res", res.errorMsg)
  425. const data = res.errorMsg;
  426. resolve(data);
  427. }).catch((error) => {
  428. reject(error);
  429. });
  430. }
  431. </script>
  432. <style>
  433. page {
  434. width: 100%;
  435. height: 100%;
  436. display: flex;
  437. flex-direction: column;
  438. background-color: #f3f3f3;
  439. }
  440. </style>
  441. <style lang="scss" scoped>
  442. .radios {
  443. display: flex;
  444. }
  445. .radio-box {
  446. display: flex;
  447. align-items: center;
  448. padding-left: 20rpx;
  449. }
  450. .oderPage {
  451. flex: 1;
  452. width: 100%;
  453. .addr-box {
  454. margin-top: 20rpx;
  455. display: flex;
  456. background: #fff;
  457. padding: 30rpx;
  458. justify-content: space-between;
  459. align-items: center;
  460. .addr-box-left {
  461. display: flex;
  462. .text-image {
  463. width: 68rpx;
  464. height: 68rpx;
  465. background: #00b38b;
  466. border-radius: 50%;
  467. text-align: center;
  468. font-size: 26rpx;
  469. font-family: Microsoft YaHei;
  470. font-weight: 400;
  471. color: #ffffff;
  472. line-height: 68rpx;
  473. margin-right: 30rpx;
  474. }
  475. .content {
  476. view {
  477. font-size: 26rpx;
  478. font-family: Microsoft YaHei;
  479. font-weight: 400;
  480. color: #333333;
  481. .item1 {
  482. font-size: 30rpx;
  483. font-family: Microsoft YaHei;
  484. font-weight: 400;
  485. color: #333333;
  486. }
  487. .item2 {
  488. font-size: 24rpx;
  489. font-family: Microsoft YaHei;
  490. font-weight: 400;
  491. color: #999999;
  492. margin-left: 10rpx;
  493. }
  494. .item3 {
  495. width: 71rpx;
  496. height: 37rpx;
  497. background: #ffffff;
  498. border: 1px solid #ff8000;
  499. border-radius: 6rpx;
  500. font-size: 22rpx;
  501. font-family: Microsoft YaHei;
  502. font-weight: 400;
  503. color: #ff8000;
  504. padding: 3rpx 6rpx;
  505. margin-left: 10rpx;
  506. }
  507. }
  508. }
  509. }
  510. .edit {
  511. image {
  512. width: 50rpx;
  513. height: 50rpx;
  514. }
  515. }
  516. }
  517. .from {
  518. background-color: #fff;
  519. margin-top: 30rpx;
  520. padding: 0 30rpx;
  521. ::v-deep .u-form-item {
  522. padding: 0;
  523. line-height: normal;
  524. .u-form-item__message {
  525. margin-bottom: 12rpx;
  526. }
  527. }
  528. .from_item {
  529. display: flex;
  530. flex-wrap: nowrap;
  531. justify-content: space-between;
  532. align-items: center;
  533. height: 80rpx;
  534. border-bottom: 1rpx solid #dcdcdc;
  535. .btn {
  536. font-size: 24rpx;
  537. font-family: Microsoft YaHei;
  538. font-weight: 400;
  539. color: #ffffff;
  540. background: #00b38b;
  541. border-radius: 10rpx;
  542. padding: 10rpx 15rpx;
  543. }
  544. ::v-deep .input {
  545. text-align: right;
  546. flex: 1;
  547. background: transparent;
  548. input {
  549. text-align: right;
  550. }
  551. }
  552. }
  553. .from_item1 {
  554. display: flex;
  555. flex-wrap: nowrap;
  556. flex-direction: column;
  557. justify-content: space-between;
  558. padding: 30rpx 0;
  559. border-bottom: #dcdcdc 1px solid;
  560. input {
  561. text-align: right;
  562. }
  563. .textarea {
  564. background-color: #f1f1f1;
  565. width: 100%;
  566. border-radius: 20rpx;
  567. margin-top: 10rpx;
  568. text-indent: 1rem;
  569. height: 180rpx;
  570. padding: 20rpx;
  571. box-sizing: border-box;
  572. }
  573. }
  574. }
  575. }
  576. .address-line {
  577. padding: 20px;
  578. .flex-bettwen {
  579. display: flex;
  580. align-items: center;
  581. justify-content: space-between;
  582. }
  583. .xing {
  584. width: 68rpx;
  585. height: 68rpx;
  586. background: rgba(0, 179, 139, 0.2);
  587. border-radius: 50%;
  588. font-size: 26rpx;
  589. font-weight: 400;
  590. color: #00b38b;
  591. line-height: 68rpx;
  592. text-align: center;
  593. }
  594. .content {
  595. margin-left: 20px;
  596. .name {
  597. font-size: 30rpx;
  598. font-family: Microsoft YaHei;
  599. font-weight: 500;
  600. color: #333333;
  601. }
  602. .phone {
  603. margin-left: 10rpx;
  604. font-size: 24rpx;
  605. font-family: Microsoft YaHei;
  606. font-weight: 400;
  607. color: #999999;
  608. line-height: 36rpx;
  609. }
  610. .address {
  611. margin-top: 10rpx;
  612. font-size: 26rpx;
  613. font-family: Microsoft YaHei;
  614. font-weight: 400;
  615. color: #333333;
  616. line-height: 36rpx;
  617. }
  618. .picture {
  619. width: 48rpx;
  620. height: 48rpx;
  621. }
  622. .editIcon {
  623. width: 48rpx;
  624. height: 48rpx;
  625. }
  626. }
  627. }
  628. .action {
  629. padding-bottom: 100rpx;
  630. .button {
  631. height: 80rpx;
  632. background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
  633. border-radius: 40rpx;
  634. font-size: 32rpx;
  635. font-weight: 400;
  636. color: #ffffff;
  637. line-height: 80rpx;
  638. }
  639. }
  640. .action-bottom {
  641. padding-bottom: 30rpx;
  642. .button {
  643. height: 80rpx;
  644. background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
  645. border-radius: 40rpx;
  646. font-size: 32rpx;
  647. font-weight: 400;
  648. color: #ffffff;
  649. line-height: 80rpx;
  650. }
  651. }
  652. .flex {
  653. display: flex;
  654. align-items: center;
  655. }
  656. .submit {
  657. width: 45%;
  658. height: 80rpx;
  659. background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
  660. box-shadow: 0rpx 4rpx 11rpx 1rpx rgba(223, 223, 223, 0.5);
  661. border-radius: 40rpx;
  662. font-size: 32rpx;
  663. font-family: Microsoft YaHei;
  664. font-weight: 400;
  665. color: #ffffff;
  666. line-height: 80rpx;
  667. // margin-top: 60rpx;
  668. }
  669. .default {
  670. height: 80rpx;
  671. background: rgba(0, 179, 139, .1);
  672. border-radius: 40rpx;
  673. font-size: 32rpx;
  674. font-weight: 400;
  675. color: #00B38B;
  676. line-height: 80rpx;
  677. width: 45%;
  678. border: 1px solid #00B38B;
  679. }
  680. .button::after {
  681. border: none;
  682. }
  683. .buttonWrap {
  684. display: flex;
  685. justify-content: space-evenly;
  686. align-items: center;
  687. margin-top: 60rpx;
  688. }
  689. .editAddress {
  690. font-size: 30rpx;
  691. }
  692. .attention {
  693. padding: 20rpx;
  694. font-size: 30rpx;
  695. }
  696. .no_pay{
  697. font-size: 28rpx;
  698. padding: 0 20rpx;
  699. }
  700. .no_pay>text{
  701. color: red;
  702. margin-right: 10rpx;
  703. }
  704. </style>