order-delivery-update.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. <template>
  2. <el-dialog
  3. :title="this.$i18n.t('order.orderShipping')"
  4. :close-on-click-modal="false"
  5. :visible.sync="visible"
  6. width="50%"
  7. >
  8. <div class="mod-order-orderInfo">
  9. <!-- <el-alert title="*请仔细填写物流公司及快递单号,发货后72小时内仅支持做一次更正,逾期不可修改" type="warning" show-icon></el-alert> -->
  10. <el-table
  11. ref="multipleTable"
  12. :data="dataList"
  13. tooltip-effect="dark"
  14. style="width: 100%"
  15. header-cell-class-name="table-header"
  16. row-class-name="table-row"
  17. @selection-change="handleSelectionChange"
  18. >
  19. <!-- <span>{{scope.row.status === 0?status=true:status=false}}<span> -->
  20. <el-table-column
  21. type="selection"
  22. width="55"
  23. :selectable="checkSelectable"
  24. ></el-table-column>
  25. <el-table-column :label="this.$i18n.t('product.prodName')">
  26. <template slot-scope="scope">
  27. {{ scope.row.prodName }}
  28. <div
  29. class="order-status"
  30. v-if="
  31. scope.row.returnMoneySts !== null &&
  32. scope.row.returnMoneySts > 0 &&
  33. scope.row.returnMoneySts < 6
  34. "
  35. >
  36. {{ $t("order.reimburse") }}
  37. </div>
  38. </template>
  39. </el-table-column>
  40. <el-table-column
  41. prop="prodCount"
  42. :label="this.$i18n.t('order.canShipQuantity')"
  43. width="160"
  44. align="center"
  45. ></el-table-column>
  46. <el-table-column
  47. prop="status"
  48. :label="this.$i18n.t('product.status')"
  49. show-overflow-tooltip
  50. width="160"
  51. align="center"
  52. >
  53. <template slot-scope="scope">
  54. <!-- <template slot-scope="scope">{{ scope.row.status }}</template> -->
  55. <div
  56. class="default-btn text-btn"
  57. v-if="
  58. scope.row.returnMoneySts !== null &&
  59. scope.row.returnMoneySts < 6 &&
  60. scope.row.returnMoneySts > 0
  61. "
  62. >{{
  63. [
  64. "",
  65. $t("order.buyerApplication"),
  66. $t("order.sellerAccepts"),
  67. $t("order.selShipment"),
  68. $t("order.sellerReceipt"),
  69. $t("order.refundsuccessfully"),
  70. ][scope.row.returnMoneySts]
  71. }}</div
  72. >
  73. <div
  74. v-else-if="scope.row.status !== 0 && scope.row.status !== -1"
  75. >{{ $t("order.partialDelivery") }}</div
  76. >
  77. <div v-else-if="scope.row.status === 0">{{
  78. $t("order.shipmentCompleted")
  79. }}</div>
  80. <div
  81. v-else-if="scope.row.status === -1"
  82. >{{ $t("order.toBeShipped") }}</div
  83. >
  84. </template>
  85. </el-table-column>
  86. <el-table-column
  87. prop="changeNum"
  88. :label="this.$i18n.t('order.numberOfShipments')"
  89. fit
  90. align="center"
  91. width="240"
  92. >
  93. <template slot-scope="scope">
  94. <el-input-number
  95. :disabled="scope.row.prodCount <= 0"
  96. size="small"
  97. v-model="scope.row.changeNum"
  98. :precision="0"
  99. :min="0"
  100. :max="scope.row.prodCount"
  101. ></el-input-number
  102. >​
  103. </template>
  104. </el-table-column>
  105. </el-table>
  106. </div>
  107. <!-- :rules="dataRule" -->
  108. <el-form
  109. :model="dataForm"
  110. ref="dataForm"
  111. @keyup.enter.native="dataFormSubmit()"
  112. label-width="100px"
  113. size="small"
  114. >
  115. <div class="detail-cont">
  116. <div class="detail01">
  117. <div class="text-width">
  118. <el-form-item :label="this.$i18n.t('order.waitForDelivery')">
  119. <span
  120. >{{ $t("order.delType") }}:{{
  121. $t("order.expressDelivery")
  122. }}</span
  123. >
  124. </el-form-item>
  125. <el-form-item label>
  126. <span
  127. >{{ $t("publics.addressee") }}:{{
  128. dataForm.userAddrOrder.receiver
  129. }}</span
  130. >
  131. </el-form-item>
  132. <el-form-item label>
  133. <span
  134. >{{ $t("order.phoneNum") }}:{{
  135. dataForm.userAddrOrder.mobile
  136. }}</span
  137. >
  138. </el-form-item>
  139. <el-form-item label>
  140. <span
  141. >{{ $t("publics.deliveryAddr") }}:{{
  142. dataForm.userAddrOrder.province
  143. }}{{ dataForm.userAddrOrder.city
  144. }}{{ dataForm.userAddrOrder.area
  145. }}{{ dataForm.userAddrOrder.addr }}</span
  146. >
  147. </el-form-item>
  148. </div>
  149. </div>
  150. </div>
  151. <el-form-item :label="this.$i18n.t('order.deliveryMethod') + ':'">
  152. <el-radio-group v-model="dataForm.deliveryType" @change="clear()">
  153. <el-radio :label="1" :disabled="dataForm.deliveryType === 4">{{
  154. $t("order.shouldExpressDelivery")
  155. }}</el-radio>
  156. <el-radio :label="3" :disabled="dataForm.deliveryType === 4">{{
  157. $t("order.noNeedRequired")
  158. }}</el-radio>
  159. <!-- <el-radio :label="4" :disabled="dataForm.deliveryType !== 4">{{
  160. $t("order.sameCityDelivery")
  161. }}</el-radio> -->
  162. </el-radio-group>
  163. </el-form-item>
  164. <div v-if="dataForm.deliveryType === 1">
  165. <el-form-item :label="this.$i18n.t('order.courierCompany') + ':'">
  166. <!-- <span>快递公司:</span> -->
  167. <el-select
  168. v-model="dataForm.dvyId"
  169. :placeholder="this.$i18n.t('tip.select')"
  170. >
  171. <el-option
  172. v-for="item in dataForm.dvyNames"
  173. :key="item.dvyId"
  174. :label="item.dvyName"
  175. :value="item.dvyId"
  176. ></el-option>
  177. </el-select>
  178. </el-form-item>
  179. <el-form-item
  180. :label="this.$i18n.t('order.trackingNumber') + ':'"
  181. prop="dvyFlowId"
  182. >
  183. <el-input
  184. v-model="dataForm.dvyFlowId"
  185. width="80"
  186. maxlength="90"
  187. show-word-limit
  188. label="this.$i18n.t('order.trackingNumber')"
  189. ></el-input>
  190. </el-form-item>
  191. </div>
  192. </el-form>
  193. <span slot="footer">
  194. <div class="default-btn" @click="visible = false">{{
  195. $t("crud.filter.cancelBtn")
  196. }}</div>
  197. <div class="default-btn primary-btn" @click="submitProds()">{{
  198. $t("crud.filter.submitBtn")
  199. }}</div>
  200. </span>
  201. </el-dialog>
  202. </template>
  203. <script>
  204. export default {
  205. data () {
  206. return {
  207. visible: false,
  208. dataForm: {
  209. dvyId: '',
  210. userAddrOrder: {},
  211. dvyFlowId: 0,
  212. dvyNames: [],
  213. orderNumber: 0,
  214. deliveryType: 1
  215. },
  216. dataList: [],
  217. selectOrderItems: [],
  218. isSubmit: false,
  219. checkAll: false,
  220. orderItems: [],
  221. isTrue: false,
  222. errorInfo: '',
  223. orderId: 0,
  224. order: null,
  225. isIndeterminate: true,
  226. orderNumber: 0,
  227. freightAmount: 0,
  228. lossAmount: 0,
  229. dataListLoading: false,
  230. dataListSelections: [],
  231. addOrUpdateVisible: false
  232. }
  233. },
  234. components: {},
  235. mounted () { },
  236. methods: {
  237. processingStr (str) {
  238. // str = str.replace(/\u200B/g,'');
  239. // return str
  240. },
  241. /**
  242. * 获取数据列表
  243. */
  244. init (order) {
  245. this.isSubmit = false
  246. this.dataForm.userAddrOrder = {}
  247. this.visible = true
  248. this.orderNumber = order.orderNumber
  249. this.clear()
  250. // 修改
  251. this.$http({
  252. url: this.$http.adornUrl(`/platform/orderDelivery/getOrderItemUnDelivery/${order.orderNumber}`),
  253. method: 'get',
  254. params: this.$http.adornParams()
  255. }).then(({ data }) => {
  256. // console.log('data', data)
  257. // console.log('orderItems', data.orderItems)
  258. this.dataForm.userAddrOrder = data.userAddrOrder
  259. this.dataList = data.orderItems
  260. this.dataForm.deliveryType = parseInt(data.dvyType)
  261. this.dataList.forEach(element => {
  262. element.changeNum = element.prodCount
  263. })
  264. })
  265. this.getDeliveryList()
  266. },
  267. getDeliveryList () {
  268. this.$http({
  269. url: this.$http.adornUrl('/platform/delivery/list'),
  270. method: 'get',
  271. params: this.$http.adornParams()
  272. }).then(({ data }) => {
  273. this.dataForm.dvyNames = data
  274. })
  275. },
  276. /**
  277. * 修改状态
  278. */
  279. handleSelectionChange (val) {
  280. this.selectOrderItems = val
  281. },
  282. /**
  283. * 禁用多选按钮
  284. */
  285. checkSelectable (row) {
  286. return row.status !== 0 && (!row.returnMoneySts || row.returnMoneySts < 0 || row.returnMoneySts > 5)
  287. },
  288. clear () {
  289. this.dataForm.dvyFlowId = 0
  290. this.dataForm.dvyId = ''
  291. },
  292. /**
  293. * 校验数量
  294. */
  295. check () {
  296. this.isTrue = false
  297. if (this.selectOrderItems.length <= 0) {
  298. this.isTrue = true
  299. this.errorInfo = this.$i18n.t('order.seleOrd')
  300. return true
  301. }
  302. this.selectOrderItems.forEach(element => {
  303. if (element.prodCount <= 0 || element.prodCount < element.changeNum || element.changeNum <= 0) {
  304. this.isTrue = true
  305. this.errorInfo = element.prodName + this.$i18n.t('order.numNotZero') + '!'
  306. return true
  307. }
  308. if (element.changeNum <= 0) {
  309. this.isTrue = true
  310. this.errorInfo = element.prodName + this.$i18n.t('order.numNotZero') + '!'
  311. return true
  312. }
  313. if (element.changeNum == null) {
  314. this.isTrue = true
  315. this.errorInfo = element.prodName + this.$i18n.t('order.fhNumNotZero') + '!'
  316. return true
  317. }
  318. })
  319. if (this.dataForm.dvyId === '' && this.dataForm.deliveryType === 1) {
  320. this.isTrue = true
  321. this.errorInfo = this.$i18n.t('order.seleCouCom')
  322. return true
  323. }
  324. if ((this.dataForm.dvyFlowId === 0 || !this.dataForm.dvyFlowId) && this.dataForm.deliveryType === 1) {
  325. this.isTrue = true
  326. this.errorInfo = this.$i18n.t('order.entCouNum')
  327. return true
  328. }
  329. var reg = /^[a-zA-Z0-9]{4,30}$/
  330. if (!reg.test(this.dataForm.dvyFlowId) && this.dataForm.deliveryType === 1) {
  331. this.isTrue = true
  332. this.errorInfo = this.$i18n.t('order.checkDvyId')
  333. return true
  334. }
  335. },
  336. /**
  337. * 确定事件
  338. */
  339. submitProds () {
  340. if (!this.dataForm.deliveryType) {
  341. this.$message.error(this.$i18n.t('order.pledSeleMet'))
  342. return
  343. }
  344. this.check()
  345. if (this.isTrue) {
  346. this.errorMsg(this.errorInfo)
  347. return
  348. }
  349. if (this.isSubmit) {
  350. return
  351. }
  352. this.isSubmit = true
  353. // let param = this.dataForm
  354. this.$http({
  355. url: this.$http.adornUrl(`/platform/orderDelivery/orderItemsDelivery`),
  356. method: 'put',
  357. data: this.$http.adornData({
  358. orderNumber: this.orderNumber,
  359. dvyId: this.dataForm.dvyId,
  360. dvyFlowId: this.dataForm.dvyFlowId,
  361. freightAmount: this.freightAmount,
  362. selectOrderItems: this.selectOrderItems,
  363. deliveryType: this.dataForm.deliveryType
  364. })
  365. }).then(({ data }) => {
  366. this.$message({
  367. message: this.$i18n.t('publics.operation'),
  368. type: 'success',
  369. duration: 1500,
  370. onClose: () => {
  371. this.visible = false
  372. this.$emit('refreshOrderDeliveryUpdate')
  373. }
  374. })
  375. }).catch(({ e }) => {
  376. this.isSubmit = false
  377. })
  378. },
  379. errorMsg (message) {
  380. this.$message({
  381. message: message,
  382. type: 'error',
  383. duration: 1500
  384. })
  385. }
  386. }
  387. }
  388. </script>
  389. <style>
  390. .el-input__inner {
  391. border: 1px solid #dcdfe6 !important;
  392. }
  393. </style>
  394. <style scoped>
  395. .mod-order-orderInfo {
  396. height: 100%;
  397. width: 100%;
  398. font: 14px Arial, "PingFang SC", "Hiragino Sans GB", STHeiti,
  399. "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
  400. color: #495060;
  401. }
  402. .element.style {
  403. border-top: 1px solid #eeeeee;
  404. border-right: 1px solid #eeeeee;
  405. border-bottom: 1px solid #eeeeee;
  406. }
  407. .prods-select-body {
  408. height: auto;
  409. overflow: auto;
  410. border-top: 1px solid #eeeeee;
  411. border-right: 1px solid #eeeeee;
  412. border-bottom: 1px solid #eeeeee;
  413. }
  414. .mod-order-order .contprod-:last-child {
  415. border-bottom: 0;
  416. border-left: 0;
  417. }
  418. .mod-order-order .prod-cont.prod-bottom,
  419. .mod-order-order .prod-cont {
  420. border-bottom: 1px solid #dddee1;
  421. border-left: 1px solid #dddee1;
  422. }
  423. </style>