選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

apply-ex-goods.vue 16KB

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