returnDetail.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. <template>
  2. <div>
  3. <el-card class="box-card">
  4. <!-- 基本信息-->
  5. <el-descriptions
  6. :title="$t('title.basicInformation')"
  7. :colon="false"
  8. border
  9. >
  10. <el-descriptions-item :label="$t('label.shopName')"
  11. >{{ returnInfo.storeName }}
  12. <i
  13. style="color:blue;"
  14. class="el-icon-document-copy"
  15. :title="$t('title.copy')"
  16. :copy-value="returnInfo.storeName"
  17. v-on:click="copy"
  18. ></i
  19. ></el-descriptions-item>
  20. <el-descriptions-item :label="$t('label.onlineShopOrder')">{{
  21. returnInfo.ormorder
  22. }}</el-descriptions-item>
  23. <el-descriptions-item :label="$t('label.documentStatus')">{{
  24. returnInfo.status | statusFilter
  25. }}</el-descriptions-item>
  26. <el-descriptions-item :label="$t('label.creator')">{{
  27. returnInfo.createBy
  28. }}</el-descriptions-item>
  29. <el-descriptions-item :label="$t('label.createTime')" span="2">{{
  30. returnInfo.createTime
  31. }}</el-descriptions-item>
  32. <el-descriptions-item label="退件目的仓">{{
  33. returnInfo.warehouseName
  34. }}</el-descriptions-item>
  35. <el-descriptions-item label="退件目的仓编码"
  36. >{{ returnInfo.warehouseCode }}
  37. <i
  38. style="color:blue;"
  39. class="el-icon-document-copy"
  40. :title="$t('title.copy')"
  41. :copy-value="returnInfo.ormorder"
  42. v-on:click="copy"
  43. ></i
  44. ></el-descriptions-item>
  45. <el-descriptions-item label="退件物流单号"
  46. >{{ returnInfo.shippingNo }}
  47. <i
  48. style="color:blue;"
  49. class="el-icon-document-copy"
  50. :title="$t('title.copy')"
  51. :copy-value="returnInfo.ordersNo"
  52. v-on:click="copy"
  53. ></i
  54. ></el-descriptions-item>
  55. <el-descriptions-item :label="$t('noheadFlag')" span="1"
  56. >
  57. <div style="color: red" v-if="
  58. returnInfo.noheadFlag == 1
  59. "
  60. >
  61. {{ $t("yes") }}
  62. </div>
  63. <div style="color: red"
  64. v-if="
  65. returnInfo.noheadFlag == 0
  66. "
  67. >
  68. {{ $t("no") }}
  69. </div>
  70. </el-descriptions-item>
  71. <el-descriptions-item :label="$t('label.isSelfPickupOrder')" span="1">
  72. <span v-if="returnInfo.isSelfPickupOrder === false">{{ $t("no") }}</span>
  73. <span v-else>{{ $t("yes") }}</span>
  74. </el-descriptions-item>
  75. <el-descriptions-item :label="$t('label.shopifyNumber')" span="1"
  76. >{{ returnInfo.cutUser }}
  77. </el-descriptions-item>
  78. </el-descriptions>
  79. </el-card>
  80. <el-card class="box-card">
  81. <!-- 基本信息-->
  82. <el-descriptions :title="$t('sender')" :colon="false" border>
  83. <el-descriptions-item :label="$t('country')" span="3">{{
  84. returnInfo.orderReceiverCountry
  85. }}</el-descriptions-item>
  86. <el-descriptions-item :label="$t('state')">{{
  87. returnInfo.orderReceiverState
  88. }}</el-descriptions-item>
  89. <el-descriptions-item :label="$t('city')">{{
  90. returnInfo.orderReceiverCity
  91. }}</el-descriptions-item>
  92. <el-descriptions-item :label="$t('suburb')">{{
  93. returnInfo.orderReceiverDistrict
  94. }}</el-descriptions-item>
  95. <el-descriptions-item :label="$t('street')" span="3">{{
  96. returnInfo.orderReceiverStreet
  97. }}</el-descriptions-item>
  98. <el-descriptions-item :label="$t('address')" span="3">{{
  99. returnInfo.orderReceiverAddress1
  100. }}</el-descriptions-item>
  101. <el-descriptions-item :label="$t('dooeNo')" span="2">{{
  102. returnInfo.orderReceiverAddress2
  103. }}</el-descriptions-item>
  104. <el-descriptions-item :label="$t('senders')">{{
  105. returnInfo.orderReceiverName
  106. }}</el-descriptions-item>
  107. </el-descriptions>
  108. </el-card>
  109. <el-card class="box-card">
  110. <el-descriptions
  111. :title="$t('returnItem') + '-' + (index + 1)"
  112. v-for="(item, index) in returnOrderItemInfo"
  113. :key="index"
  114. :colon="false"
  115. border
  116. >
  117. <el-descriptions-item
  118. :label="$t('onlyCode')"
  119. span="3"
  120. v-if="item.uniqueCode"
  121. >{{ item.uniqueCode }}
  122. <!-- <el-input-->
  123. <!-- style="width: 450px;"-->
  124. <!-- class="filter-item"-->
  125. <!-- v-model="item.uniqueCode"-->
  126. <!-- />-->
  127. </el-descriptions-item>
  128. <el-descriptions-item :label="$t('sku')"
  129. >{{ item.skuCode }}
  130. <i
  131. style="color:blue;"
  132. class="el-icon-document-copy"
  133. :title="$t('title.copy')"
  134. :copy-value="item.skuCode"
  135. v-on:click="copy"
  136. ></i
  137. ></el-descriptions-item>
  138. <el-descriptions-item :label="$t('goodsName')" span="2">{{
  139. item.tittle
  140. }}</el-descriptions-item>
  141. <el-descriptions-item :label="$t('status')"
  142. >{{ item.status | statusFiltr2 }}
  143. </el-descriptions-item>
  144. <el-descriptions-item :label="$t('update')" span="2">{{
  145. item.updateTime
  146. }}</el-descriptions-item>
  147. <el-descriptions-item
  148. v-if="confirmSh == 2"
  149. :label="$t('returngoodsType')"
  150. span="1"
  151. >
  152. {{ item.receiveType | receiveTypeFilter }}
  153. </el-descriptions-item>
  154. <el-descriptions-item
  155. v-if="confirmSh == 2"
  156. :label="$t('inboundStatus')"
  157. span="2"
  158. >
  159. {{ item.inboundStatusShow | inboundStatusFilter }}
  160. </el-descriptions-item>
  161. <el-descriptions-item :label="$t('appAmount')"
  162. >{{ item.applyQuantity }}
  163. </el-descriptions-item>
  164. <el-descriptions-item :label="$t('recAmount')" span="2"
  165. >{{ item.receiveQuantity }}
  166. </el-descriptions-item>
  167. <el-descriptions-item
  168. v-if="confirmSh == 1"
  169. :label="$t('returngoodsType')"
  170. >
  171. <el-select
  172. :placeholder="$t('place.pleaseSelect')"
  173. clearable
  174. size="mini"
  175. style="width: 100px;"
  176. class="filter-item"
  177. v-model="item.receiveType"
  178. >
  179. <el-option
  180. v-for="re in receiveTypeList"
  181. :key="re.value"
  182. :label="re.label"
  183. :value="re.value"
  184. >
  185. </el-option>
  186. </el-select>
  187. </el-descriptions-item>
  188. <el-descriptions-item
  189. v-if="confirmSh == 1"
  190. :label="$t('enterAmount')"
  191. span="2"
  192. >
  193. <el-input-number
  194. v-model="item.confirmShNum"
  195. size="mini"
  196. :min="1"
  197. :max="item.applyQuantity + item.receiveQuantity"
  198. ></el-input-number>
  199. </el-descriptions-item>
  200. <el-descriptions-item
  201. v-if="confirmSh == 1"
  202. :label="$t('inboundStatus')"
  203. >
  204. <el-select
  205. size="mini"
  206. style="width: 100px;"
  207. class="filter-item"
  208. v-model="item.inboundStatus"
  209. >
  210. <el-option value="success_manual" :label="$t('label.manualReturn')" />
  211. <el-option value="returning" :label="$t('label.inReturnTransit')" />
  212. <el-option value="shipLost" :label="$t('label.shipmentLost')" />
  213. <el-option value="returnLost" :label="$t('label.returnLost')" />
  214. </el-select>
  215. </el-descriptions-item>
  216. <el-descriptions-item v-if="confirmSh == 1" :label="$t('actions')">
  217. <!-- <template slot="label"> -->
  218. <el-button
  219. type="success"
  220. @click="confirmShClick(item)"
  221. v-if="item.status != '01'"
  222. v-loading="btnLoading"
  223. >{{ $t("receives") }}</el-button
  224. >
  225. <!-- </template> -->
  226. </el-descriptions-item>
  227. </el-descriptions>
  228. </el-card>
  229. <el-card class="box-card">
  230. <el-descriptions :title="$t('title.operationLog')"> </el-descriptions>
  231. <el-timeline>
  232. <el-timeline-item
  233. type="primary"
  234. v-for="(log, index) in logs"
  235. :key="index"
  236. :timestamp="log.createTime"
  237. >
  238. {{ log.operator }} :{{ log.statusNotes }}
  239. </el-timeline-item>
  240. </el-timeline>
  241. </el-card>
  242. </div>
  243. </template>
  244. <script>
  245. import { handleClipboard } from "@/api/oms/copy";
  246. import { getReturnInfo, updateConfirmSh } from "@/api/oms/return/return";
  247. import global from "@/views/oms/global";
  248. import { queryByOrdersId } from "@/api/oms/order/address";
  249. import { dcmAdd, dcmSub, accDiv, accMul } from "@/utils/toolUtil";
  250. export default {
  251. name: "returnInfoDialog",
  252. props: ["returnId", "confirmSh"],
  253. components: {},
  254. data() {
  255. return {
  256. afterSaleStatusSuccess: global.afterSaleStatusSuccess,
  257. returnInfo: {},
  258. returnOrderItemInfo: {},
  259. checkData: {},
  260. btndisabled: true,
  261. receiveTypeList: global.receiveType,
  262. btnLoading: false,
  263. logs: []
  264. };
  265. },
  266. filters: {
  267. statusFilter(key) {
  268. var value = "";
  269. global.returnStatus.forEach(status => {
  270. if (status.value == key) {
  271. console.log(status.label);
  272. value = status.label;
  273. }
  274. });
  275. return value;
  276. },
  277. statusFiltr2(key) {
  278. var value = "";
  279. global.returnDeatilStatus.forEach(status => {
  280. if (status.value == key) {
  281. console.log(status.label);
  282. value = status.label;
  283. }
  284. });
  285. return value;
  286. },
  287. receiveTypeFilter(key) {
  288. var value = "";
  289. global.receiveType.forEach(type => {
  290. if (type.value == key) {
  291. // console.log(type.label);
  292. value = type.label;
  293. }
  294. });
  295. return value;
  296. },
  297. inboundStatusFilter(key) {
  298. var value = "";
  299. global.inboundStatus.forEach(type => {
  300. if (type.value == key) {
  301. // console.log(type.label);
  302. value = type.label;
  303. }
  304. });
  305. return value;
  306. }
  307. },
  308. created() {
  309. this.getReturnInfo();
  310. },
  311. methods: {
  312. getReturnInfo() {
  313. getReturnInfo(this.returnId).then(res => {
  314. if (200 == res.code) {
  315. this.returnInfo = res.data;
  316. this.returnOrderItemInfo = res.data.items;
  317. for(var i=0;i<this.returnOrderItemInfo.length;i++){
  318. if("00" == this.returnOrderItemInfo[i].status){
  319. this.returnOrderItemInfo[i].inboundStatus = '';
  320. }
  321. }
  322. this.logs = res.data.logItems;
  323. }
  324. });
  325. },
  326. //复制
  327. copy(event) {
  328. console.log(event.target.attributes["copy-value"].value);
  329. var text = event.target.attributes["copy-value"].value;
  330. handleClipboard(text, event);
  331. },
  332. confirmShClick(row) {
  333. this.btnLoading = true;
  334. if (!row.receiveType) {
  335. this.$message.error("请选择签收货品类型!");
  336. this.btnLoading = false;
  337. return false;
  338. }
  339. if (!row.confirmShNum) {
  340. this.$message.error("请输入收货数量!");
  341. this.btnLoading = false;
  342. return false;
  343. }
  344. if (!row.inboundStatus) {
  345. this.$message.error("请选择入库状态!");
  346. this.btnLoading = false;
  347. return false;
  348. }
  349. // if (!row.uniqueCode) {
  350. // this.$message.error("请输入唯一码!");
  351. // this.btnLoading = false;
  352. // return false;
  353. // }
  354. this.$confirm("是否确认收货?", "提示", {
  355. confirmButtonText: "确定",
  356. cancelButtonText: "取消",
  357. type: "warning"
  358. })
  359. .then(() => {
  360. updateConfirmSh(row).then(
  361. res => {
  362. if (200 == res.code) {
  363. this.$message({
  364. message: "操作成功",
  365. type: "success"
  366. });
  367. if (row.receiveQuantity > 0) {
  368. row.receiveQuantity = dcmAdd(
  369. row.receiveQuantity,
  370. row.confirmShNum
  371. );
  372. } else {
  373. row.receiveQuantity = row.confirmShNum;
  374. }
  375. this.btnLoading = false;
  376. }
  377. },
  378. error => {
  379. this.btnLoading = false;
  380. }
  381. );
  382. })
  383. .catch(() => {
  384. this.$message({
  385. type: "info",
  386. message: "已取消操作"
  387. });
  388. this.btnLoading = false;
  389. });
  390. }
  391. }
  392. };
  393. </script>
  394. <style lang="scss" scoped></style>