Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

apply-return-goods.vue 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <!-- 申请退货 -->
  2. <template>
  3. <view class="box">
  4. <form-builder :config="config" :formData="state.formData" @submit="submit" @radioChange="radioChange" />
  5. </view>
  6. </template>
  7. <script setup lang="ts">
  8. import { reactive } from "vue";
  9. import { onLoad } from "@dcloudio/uni-app";
  10. import { msg, confirm, getOrderStatusName } from "@/utils/utils";
  11. import { request } from "@/utils/network/request";
  12. import { getLogistics, orderReturn, outletList } from "@/utils/network/api";
  13. import { stringToJson } from "@/utils/network/encryption";
  14. import { getItem, StorageKeys } from "@/utils/storage";
  15. const config = {
  16. submitName: "申请退货",
  17. titleWidth: 160,
  18. divider: true,
  19. };
  20. const state = reactive({
  21. //订单信息
  22. orderInfo: {} as any,
  23. //退货类型: OFFLINE-线下 ON_LINE-线上
  24. returnMode: "ON_LINE",
  25. //网点列表
  26. outlets: [],
  27. //表单数据
  28. formData: [
  29. {
  30. title: "订单编号:",
  31. inputType: "number",
  32. type: 2,
  33. value: "id",
  34. hint: "订单编号",
  35. disabled: true,
  36. divider: true,
  37. },
  38. {
  39. title: "订单车牌号:",
  40. type: 2,
  41. value: "vehiclePlate",
  42. hint: "订单车牌号",
  43. disabled: true,
  44. divider: true,
  45. },
  46. {
  47. title: "订单状态:",
  48. type: 2,
  49. value: "orderStep",
  50. hint: "订单状态",
  51. disabled: true,
  52. divider: true,
  53. },
  54. {
  55. title: "退货方式:",
  56. type: 7,
  57. value: "returnMode",
  58. returnMode: "ON_LINE",
  59. star: true,
  60. required: true,
  61. divider: true,
  62. emptyHint: "请选择退货方式",
  63. itemData: [
  64. {
  65. checked: true,
  66. value: "ON_LINE",
  67. name: "线上",
  68. },
  69. {
  70. checked: false,
  71. value: "OFFLINE",
  72. name: "线下",
  73. },
  74. ],
  75. },
  76. {
  77. title: "物流公司:",
  78. type: 4,
  79. value: "returnLogisticsCompany",
  80. required: true,
  81. star: true,
  82. hint: "请输入",
  83. divider: true,
  84. itemData: [],
  85. hide: false,
  86. emptyHint: "请选择物流公司",
  87. mode: "search",
  88. searchPickerVisible: false,
  89. },
  90. {
  91. title: "物流单号:",
  92. type: 2,
  93. value: "returnLogisticsNumber",
  94. required: true,
  95. maxlength: 20,
  96. hint: "请输入",
  97. emptyHint: "请输入物流单号",
  98. star: true,
  99. divider: true,
  100. hide: false,
  101. },
  102. {
  103. title: "退货网点编号:",
  104. type: 4,
  105. value: "returnNetworkName",
  106. required: true,
  107. star: true,
  108. hint: "请输入",
  109. emptyHint: "请选择退货网点",
  110. divider: true,
  111. itemData: [],
  112. hide: true,
  113. mode: "search",
  114. searchPickerVisible: false,
  115. },
  116. {
  117. title: "退货原因:",
  118. required: true,
  119. type: 5,
  120. vertical: 2,
  121. value: "returnReason",
  122. maxlength: 50,
  123. bg: true,
  124. star: true,
  125. hint: "请输入退货原因,限制50字以内",
  126. emptyHint: "请输入退货原因",
  127. },
  128. ],
  129. });
  130. /* 获取所有的快递公司 */
  131. const getLogisticsList = () => {
  132. const options = {
  133. type: 2,
  134. data: {},
  135. method: "POST",
  136. showLoading: true,
  137. };
  138. request(getLogistics, options).then((res) => {
  139. const data = stringToJson(res.bizContent);
  140. state.formData[4].itemData = data;
  141. });
  142. };
  143. /* 获取退货网点 */
  144. const getOutletList = () => {
  145. const options = {
  146. type: 2,
  147. data: {},
  148. method: "POST",
  149. showLoading: true,
  150. };
  151. request(outletList, options).then((res) => {
  152. state.outlets = stringToJson(res.bizContent);
  153. let nameList = [];
  154. state.outlets.map((item) => {
  155. nameList.push(item.name);
  156. });
  157. state.formData[6].itemData = nameList;
  158. });
  159. };
  160. //radio改变
  161. const radioChange = (e : any, item : any) => {
  162. if (item.value === "returnMode") {
  163. //退货方式
  164. state.returnMode = item.returnMode;
  165. state.formData[4].hide = state.returnMode === "ON_LINE" ? false : true;
  166. state.formData[5].hide = state.returnMode === "ON_LINE" ? false : true;
  167. state.formData[6].hide = state.returnMode === "ON_LINE" ? true : false;
  168. }
  169. };
  170. //提交退货申请
  171. const submit = (e : any) => {
  172. confirm(
  173. "是否确认退货?",
  174. () => {
  175. const curOutlet = state.outlets.find(
  176. (out) => out.name === e.returnNetworkName
  177. );
  178. const options = {
  179. type: 2,
  180. data: {
  181. id: state.orderInfo.id,
  182. returnMode: e.returnMode,
  183. // returnNetworkId: curOutlet == null ? "" : curOutlet.servicehallId,
  184. returnNetworkId: e.returnNetworkName,
  185. returnNetworkName: e.returnNetworkName,
  186. returnLogisticsCompany: e.returnLogisticsCompany,
  187. returnLogisticsNumber: e.returnLogisticsNumber,
  188. returnReason: e.returnReason,
  189. opId: getItem(StorageKeys.OpenId),
  190. },
  191. method: "POST",
  192. showLoading: true,
  193. };
  194. request(orderReturn, options).then((res) => {
  195. confirm(
  196. "您申办的ETC订单已申请退货",
  197. () => {
  198. uni.$emit("refreshOrder");
  199. uni.navigateBack();
  200. },
  201. "申请成功",
  202. false
  203. );
  204. });
  205. },
  206. "退货确认",
  207. true
  208. );
  209. };
  210. onLoad((option) => {
  211. state.orderInfo = JSON.parse(option.data);
  212. state.formData[0].hint = state.orderInfo.orderId;
  213. state.formData[1].hint = state.orderInfo.vehiclePlate;
  214. state.formData[2].hint = getOrderStatusName(state.orderInfo.orderStep);
  215. //获取物流公司
  216. getLogisticsList();
  217. //获取退货网点
  218. getOutletList();
  219. });
  220. </script>
  221. <style>
  222. page {
  223. background-color: #f3f3f3;
  224. padding-bottom: 30rpx;
  225. }
  226. </style>
  227. <style lang="scss" scoped>
  228. .box {
  229. margin: 20rpx 0rpx;
  230. background-color: white;
  231. padding: 0 20rpx 20rpx;
  232. }
  233. </style>