orderOutbound.vue 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447
  1. <template>
  2. <div>
  3. <div class="bg-in">
  4. <div>
  5. <el-form :model="deliveryForms" :rules="rules" ref="ruleForm" label-width="120px">
  6. <el-row>
  7. <el-col>
  8. <el-form-item label="预约类型:" prop="appointment_type">
  9. <el-select v-model="deliveryForms.appointment_type" :disabled="disabledType">
  10. <el-option v-for="(item, index) in appointmentList" :key="index" :label="item.label"
  11. :value="item.value"></el-option>
  12. </el-select>
  13. </el-form-item>
  14. </el-col>
  15. <el-col>
  16. <el-form-item label="预约时间:" prop="" v-if="deliveryForms.appointment_type != 0">
  17. <el-date-picker v-model="deliveryForms.appointment_time" type="datetime" placeholder="选择日期时间"
  18. :disabled="disabledType" value-format="yyyy-MM-dd HH:mm:ss" :picker-options="{
  19. disabledDate(time) {
  20. return (
  21. time.getTime() <=
  22. new Date(
  23. new Date().getFullYear(),
  24. new Date().getMonth(),
  25. new Date().getDate()
  26. ).getTime() -
  27. 86400000
  28. );
  29. },
  30. }"></el-date-picker>
  31. </el-form-item>
  32. </el-col>
  33. </el-row>
  34. <el-divider></el-divider>
  35. <div style="display: flex;">
  36. <div>
  37. <h3 style="margin-top: 0;">发货人信息:</h3>
  38. <el-row class="el-row">
  39. <el-col :span="12">
  40. <el-form-item label="发货人姓名:" prop="sender.name">
  41. {{ deliveryForms.sender.name }}
  42. <!-- <el-input v-model="deliveryForms.sender.name" :minlength="1" :maxlength="20" placeholder="请输入发货人姓名"
  43. :disabled="true"></el-input> -->
  44. </el-form-item>
  45. </el-col>
  46. <el-col :span="12">
  47. <el-form-item label="手机号:" prop="sender.phone">
  48. {{ deliveryForms.sender.phone }}
  49. <!-- <el-input v-model="deliveryForms.sender.phone" :minlength="1" :maxlength="20" :disabled="true"
  50. placeholder="请输入手机号"></el-input> --> </el-form-item></el-col>
  51. <el-col :span="18">
  52. <el-form-item label="发货地址:" prop="sender.address">
  53. {{
  54. fullSenderAddress
  55. }}
  56. <!-- <el-cascader size="large" :options="options" clearable :disabled="true" v-model="selectedOptions"
  57. @change="sendHandleChange">
  58. </el-cascader>
  59. <el-input :disabled="true" v-model="deliveryForms.sender.address" placeholder="请输入"></el-input> -->
  60. </el-form-item></el-col>
  61. <!-- <el-col :span="12">
  62. <el-form-item label="配送仓库:" prop="freight_price">
  63. <el-select>
  64. </el-select>
  65. </el-form-item></el-col
  66. >
  67. <el-col :span="12">
  68. <el-form-item label="物流公司:" prop="logistics_company_id">
  69. <el-select v-model="deliveryForms.logistics_company_id">
  70. </el-select>
  71. </el-form-item></el-col
  72. >
  73. <el-col :span="12">
  74. <el-form-item label="配送地址" prop="address">
  75. <el-input
  76. v-model="deliveryForms.address"
  77. :minlength="1"
  78. :maxlength="20"
  79. clearable
  80. placeholder="请输入提货人"
  81. ></el-input> </el-form-item
  82. ></el-col> -->
  83. </el-row>
  84. </div>
  85. <div>
  86. <h3 style="margin-top: 0;">收货人信息:</h3>
  87. <el-row>
  88. <el-col :span="12">
  89. <el-form-item label="收货人姓名:" prop="receiver.name">
  90. {{ deliveryForms.receiver.name }}
  91. <!-- <el-input v-model="deliveryForms.receiver.name" :minlength="1" :maxlength="20" :disabled="true"
  92. placeholder="请输入收货人姓名"></el-input> -->
  93. </el-form-item>
  94. </el-col>
  95. <el-col :span="12">
  96. <el-form-item label="手机号:" prop="receiver.phone">
  97. {{ deliveryForms.receiver.phone }}
  98. <!-- <el-input v-model="deliveryForms.receiver.phone" :minlength="1" :maxlength="20" :disabled="true"
  99. placeholder="请输入手机号"></el-input> --></el-form-item></el-col>
  100. <el-col :span="18">
  101. <el-form-item label="配送地址:" prop="receiver.address">
  102. {{
  103. fullReceiverAddress
  104. }}
  105. <!-- <el-cascader size="large" :options="options" clearable :disabled="true" v-model="receiverOptions"
  106. @change="receiverChange">
  107. </el-cascader>
  108. <el-input v-model="deliveryForms.receiver.address" size="medium" :disabled="true"
  109. placeholder="请输入"></el-input> --> </el-form-item></el-col>
  110. </el-row>
  111. </div>
  112. </div>
  113. <!-- <el-divider></el-divider>
  114. <h3>商品信息:</h3>
  115. <el-table :data="product_list" border :cell-style="{ textAlign: 'center' }"
  116. :header-cell-style="{ textAlign: 'center' }" style="width: 100%">
  117. <el-table-column type="selection" width="40" align="center" />
  118. <el-table-column label="商品编号">
  119. <template slot-scope="scope">
  120. {{ scope.row.goods_vo.sn }}
  121. </template>
  122. </el-table-column>
  123. <el-table-column label="商品名称">
  124. <template slot-scope="scope">
  125. {{ scope.row.goods_vo.name }}
  126. </template>
  127. </el-table-column>
  128. <el-table-column label="sku">
  129. <template slot-scope="scope">
  130. {{ scope.row.product_vo.sku }}
  131. </template>
  132. </el-table-column>
  133. <el-table-column label="序列号" v-if="sn_code_list">
  134. <template slot-scope="scope">
  135. <span v-for="(item, index) in scope.row.sn_code_list" :key="item.id"><span v-if="index !== 0">,</span>{{
  136. item.sn_code }}</span>
  137. </template>
  138. </el-table-column>
  139. <el-table-column label="规格型号">
  140. <template slot-scope="scope">
  141. {{ scope.row.product_vo.spec_name }}
  142. </template>
  143. </el-table-column>
  144. <el-table-column label="单位">
  145. <template slot-scope="scope">
  146. {{ scope.row.product_vo.unit }}
  147. </template>
  148. </el-table-column>
  149. <el-table-column label="订单数量">
  150. <template slot-scope="scope">
  151. {{ scope.row.num }}
  152. </template>
  153. </el-table-column>
  154. <el-table-column label="可用库存">
  155. <template slot-scope="scope">
  156. {{ scope.row.use_able_stock }}
  157. </template>
  158. </el-table-column>
  159. <el-table-column label="实际库存">
  160. <template slot-scope="scope">
  161. {{ scope.row.actual_stock }}
  162. </template>
  163. </el-table-column>
  164. </el-table> -->
  165. <el-divider></el-divider>
  166. <h3>商品明细</h3>
  167. <el-button class="button" size="mini" type="primary" @click="scanCode"
  168. v-if="deliveryForms.status == 'TO_BE_SEND'">扫码出库</el-button>
  169. <div style="width: 100%; display: block">
  170. <el-table border :data="goodsExchangeAddForm.product_list" :cell-style="{ textAlign: 'center' }"
  171. :header-cell-style="{ textAlign: 'center' }" style="width: 100%; margin-top: 20px">
  172. <el-table-column label="商品编号">
  173. <template slot-scope="scope">
  174. <span>{{ scope.row.goods_vo.sn }}</span>
  175. </template>
  176. </el-table-column>
  177. <el-table-column label="商品名称">
  178. <template slot-scope="scope">
  179. <span>{{ scope.row.goods_vo.name }}</span>
  180. </template>
  181. </el-table-column>
  182. <el-table-column label="sku">
  183. <template slot-scope="scope">
  184. <span>{{ scope.row.product_vo.sku }}</span>
  185. </template>
  186. </el-table-column>
  187. <el-table-column label="库位号">
  188. <template slot-scope="scope">
  189. <el-popover placement="right" trigger="click" v-if="scope.row.area_stock_list">
  190. <div>
  191. <p v-for="item in scope.row.area_stock_list" :key="item.id">{{ item.warehouse_area_name }}</p>
  192. </div>
  193. <span slot="reference" v-if="scope.row.area_stock_list.length!==0">{{ scope.row.area_stock_list[0].warehouse_area_name }}</span>
  194. </el-popover>
  195. </template>
  196. </el-table-column>
  197. <el-table-column label="序列号" v-if="sn_code_list">
  198. <template slot-scope="scope">
  199. <div class="sn-code-container">
  200. <span v-for="item in scope.row.sn_code_list" :key="item.id">
  201. <p>{{ item.sn_code }}</p>
  202. </span>
  203. </div>
  204. </template>
  205. </el-table-column>
  206. <el-table-column prop="product_vo.spec_name" label="规格型号">
  207. </el-table-column>
  208. <el-table-column label="单位">
  209. <template slot-scope="scope">
  210. <span>{{ scope.row.product_vo.unit }}</span>
  211. </template>
  212. </el-table-column>
  213. <el-table-column label="出库数量">
  214. <template slot-scope="scope">
  215. {{ scope.row.num }}
  216. <!-- <el-input v-model="scope.row.out_num" type="number" :min="0" :maxlength="20"></el-input> -->
  217. </template>
  218. </el-table-column>
  219. <el-table-column label="订单数量">
  220. <template slot-scope="scope">
  221. {{ scope.row.orderNum }}
  222. </template>
  223. </el-table-column>
  224. <el-table-column label="实际库存">
  225. <template slot-scope="scope">
  226. <span>{{ scope.row.actual_stock }}</span>
  227. <!-- <span>{{ scope.row.use_able_stock }}</span> -->
  228. </template>
  229. </el-table-column>
  230. <el-table-column width="200" label="操作" v-if="!disabledType">
  231. <template slot-scope="scope">
  232. <!-- <el-button
  233. size="mini"
  234. @click="addSnCode(scope.row,scope.$index)"
  235. >添加序列号</el-button
  236. > -->
  237. <el-button size="mini" @click="
  238. goodsExchangeAddForm.product_list.splice(scope.$index, 1)
  239. ">删除</el-button>
  240. </template>
  241. </el-table-column>
  242. </el-table>
  243. </div>
  244. <el-divider></el-divider>
  245. <h3></h3>
  246. <el-row>
  247. <el-col :span="8">
  248. <el-form-item label="物品总重量:" prop="total_weight">
  249. <el-input v-model.number="deliveryForms.total_weight" :minlength="1" :maxlength="20" type="number"
  250. max="50" clearable :disabled="disabledType" placeholder="请输入物品总重量"><template
  251. slot="append">KG</template></el-input>
  252. </el-form-item>
  253. </el-col>
  254. <el-col :span="12">
  255. <el-form-item label="物品总体积:" prop="total_volume">
  256. <el-input v-model="deliveryForms.total_volume" :minlength="1" :maxlength="20" clearable
  257. :disabled="disabledType" placeholder="请输入物品总体积"><template slot="append">m³</template></el-input>
  258. </el-form-item>
  259. </el-col>
  260. <el-col :span="8">
  261. <el-form-item label="物品价格:" prop="declared_value">
  262. <el-input v-model="deliveryForms.declared_value" :minlength="1" :maxlength="20" clearable
  263. :disabled="disabledType" placeholder="请输入物品价格"><template slot="append">元</template></el-input>
  264. </el-form-item>
  265. </el-col>
  266. <el-col :span="16">
  267. <el-form-item label="备注:" prop="remark">
  268. <el-input v-model="deliveryForms.remark" type="textarea" clearable :disabled="disabledType"
  269. :autosize="{ minRows: 2, maxRows: 4 }" placeholder="请输入备注"></el-input>
  270. </el-form-item>
  271. </el-col>
  272. </el-row>
  273. <el-divider></el-divider>
  274. <el-row :gutter="20" v-if="send_type !== 'EXPRESS_DELIVERY'">
  275. <el-col :span="8" :offset="6">
  276. <el-form-item label="物流单号:" prop="tracking_number" v-if="deliveryForms.send_type !== 'SELF_PICKUP'">
  277. <el-input v-model="kdnCode" :minlength="1" :maxlength="20" :disabled="true"
  278. placeholder="请输入物流单号"></el-input>
  279. <el-button @click="obtainOrder" v-if="kdnCode == '' || kdnCode == undefined"
  280. :disabled="btnType">获取单号</el-button>
  281. </el-form-item>
  282. <el-form-item label="自提单号:" prop="tracking_number" v-else>
  283. {{ deliveryForms.selfPickupNum }}
  284. </el-form-item>
  285. </el-col>
  286. </el-row>
  287. <el-row :gutter="20" v-else>
  288. <el-col :span="8">
  289. <el-form-item label="快递公司:" prop="logistics_type">
  290. <el-select v-model="deliveryForms.logistics_type" clearable :disabled="disabledType">
  291. <el-option v-for="(item, index) in expressList" :key="index" :label="item.name"
  292. :value="item.code"></el-option>
  293. </el-select>
  294. </el-form-item>
  295. </el-col>
  296. <el-col :span="8">
  297. <el-form-item label="物流单号:" prop="logistics_code">
  298. <el-input v-model="deliveryForms.logistics_code" :minlength="1" :maxlength="20" :disabled="disabledType"
  299. placeholder="请输入物流单号"></el-input>
  300. </el-form-item>
  301. </el-col>
  302. <el-col :span="8">
  303. <el-form-item label="寄件人手机号:" prop="logistics_phone">
  304. <el-input v-model="deliveryForms.logistics_phone" :minlength="1" :maxlength="20"
  305. :disabled="disabledType" placeholder="请输入寄件人手机号后四位"></el-input>
  306. </el-form-item>
  307. </el-col>
  308. </el-row>
  309. </el-form>
  310. </div>
  311. <div v-if="
  312. outType !== undefined &&
  313. (JSON.stringify(deliveryForms.create_order_fail) !== '{}' ||
  314. JSON.stringify(deliveryForms.create_order_success) !== '{}')
  315. ">
  316. <h3>物流状态:</h3>
  317. <div class="steps-wrap" v-if="JSON.stringify(deliveryForms.create_order_fail) !== '{}'">
  318. <el-steps class="steps" direction="vertical" process-status="finish">
  319. <el-step icon="el-icon-error" :title="deliveryForms.create_order_fail && deliveryForms.create_order_fail.orderStatus == 600
  320. ? '下单失败'
  321. : ''
  322. ">
  323. <div slot="description">
  324. <p class="row-remark">
  325. {{ safeAccess(deliveryForms.create_order_fail, 'remark') }}
  326. </p>
  327. <div slot="description" v-if="deliveryForms.create_order_fail">
  328. <p class="row-remark">
  329. {{ deliveryForms.create_order_fail.remark }}
  330. </p>
  331. <p class="row-time" v-if="deliveryForms.create_order_fail.requestTime">
  332. {{ (deliveryForms.create_order_fail.requestTime / 1000) | unixToDate }}
  333. </p>
  334. </div>
  335. </div>
  336. </el-step>
  337. </el-steps>
  338. </div>
  339. <div class="steps-wrap" v-else>
  340. <el-steps class="steps" direction="vertical" process-status="finish" :active="activeStep">
  341. <el-step icon="el-icon-success"
  342. v-if="JSON.stringify(deliveryForms.sign_in) !== '{}' && deliveryForms.sign_in.orderStatus == 402"
  343. :title="deliveryForms.sign_in.orderStatus == 402 ? '退回' : ''">
  344. <div slot="description">
  345. <p class="row-remark">
  346. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  347. </p>
  348. <p class="row-remark">
  349. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  350. </p>
  351. <p class="row-remark">{{ deliveryForms.sign_in.remark }}</p>
  352. <p class="row-time">
  353. {{ (deliveryForms.sign_in.requestTime / 1000) | unixToDate }}
  354. </p>
  355. </div>
  356. </el-step>
  357. <el-step icon="el-icon-success" v-if="JSON.stringify(deliveryForms.sign_in) !== '{}'"
  358. :title="deliveryForms.sign_in.orderStatus == 401 ? '签收' : ''">
  359. <div slot="description">
  360. <p class="row-remark">
  361. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  362. </p>
  363. <p class="row-remark">
  364. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  365. </p>
  366. <p class="row-remark">{{ deliveryForms.sign_in.remark }}</p>
  367. <p class="row-time">
  368. {{ (deliveryForms.sign_in.requestTime / 1000) | unixToDate }}
  369. </p>
  370. </div>
  371. </el-step>
  372. <el-step icon="el-icon-success" v-if="JSON.stringify(deliveryForms.user_sending) !== '{}'" :title="deliveryForms.user_sending.orderStatus == 300 ? '配送中' : ''
  373. ">
  374. <div slot="description">
  375. <p class="row-remark">
  376. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  377. </p>
  378. <p class="row-remark">
  379. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  380. </p>
  381. <p class="row-remark">
  382. 快递员名称:{{ deliveryForms.user_arrives.courierInfo.courierName }}
  383. </p>
  384. <p class="row-remark">
  385. 快递员电话:{{ deliveryForms.user_arrives.courierInfo.courierMobile }}
  386. </p>
  387. <p class="row-remark">
  388. {{ deliveryForms.user_sending.remark }}
  389. </p>
  390. <p class="row-time">
  391. {{
  392. (deliveryForms.user_sending.requestTime / 1000) | unixToDate
  393. }}
  394. </p>
  395. </div>
  396. </el-step>
  397. <el-step icon="el-icon-success" v-if="JSON.stringify(deliveryForms.user_arrives) !== '{}'" :title="deliveryForms.user_arrives.orderStatus == 202 ? '已到店' : ''
  398. ">
  399. <div slot="description">
  400. <p class="row-remark">
  401. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  402. </p>
  403. <p class="row-remark">
  404. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  405. </p>
  406. <p class="row-remark">
  407. {{ deliveryForms.user_arrives.remark }}
  408. </p>
  409. <p class="row-remark">
  410. 快递员名称:{{ deliveryForms.user_arrives.courierInfo.courierName }}
  411. </p>
  412. <p class="row-remark">
  413. 快递员电话:{{ deliveryForms.user_arrives.courierInfo.courierMobile }}
  414. </p>
  415. <p class="row-time">
  416. {{
  417. (deliveryForms.user_arrives.requestTime / 1000) | unixToDate
  418. }}
  419. </p>
  420. </div>
  421. </el-step>
  422. <el-step icon="el-icon-success" v-if="JSON.stringify(deliveryForms.user_take_order) !== '{}'" :title="deliveryForms.user_take_order.orderStatus == 201 ? '已接单' : ''
  423. ">
  424. <div slot="description">
  425. <p class="row-remark">
  426. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  427. </p>
  428. <p class="row-remark">
  429. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  430. </p>
  431. <p class="row-remark">
  432. {{ deliveryForms.user_take_order.remark }}
  433. </p>
  434. <p class="row-time">
  435. {{
  436. (deliveryForms.user_take_order.requestTime / 1000)
  437. | unixToDate
  438. }}
  439. </p>
  440. </div>
  441. </el-step>
  442. <el-step icon="el-icon-success" v-if="JSON.stringify(deliveryForms.create_order_success) !== '{}'" :title="deliveryForms.create_order_success.orderStatus == 100
  443. ? '待接单'
  444. : ''
  445. ">
  446. <div slot="description">
  447. <p class="row-remark">
  448. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  449. </p>
  450. <p class="row-remark">
  451. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  452. </p>
  453. <p class="row-remark">
  454. {{ deliveryForms.create_order_success.remark }}
  455. </p>
  456. <p class="row-time">
  457. {{
  458. (deliveryForms.create_order_success.requestTime / 1000)
  459. | unixToDate
  460. }}
  461. </p>
  462. </div>
  463. </el-step>
  464. <el-step icon="el-icon-success" v-if="JSON.stringify(deliveryForms.cancel_order_kdn) !== '{}'" :title="deliveryForms.create_order_success.orderStatus == 500
  465. ? '拒绝接单'
  466. : ''
  467. ">
  468. <div slot="description">
  469. <p class="row-remark">
  470. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  471. </p>
  472. <p class="row-remark">
  473. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  474. </p>
  475. <p class="row-remark">
  476. {{ deliveryForms.create_order_success.remark }}
  477. </p>
  478. <p class="row-time">
  479. {{
  480. (deliveryForms.create_order_success.requestTime / 1000)
  481. | unixToDate
  482. }}
  483. </p>
  484. </div>
  485. </el-step>
  486. </el-steps>
  487. </div>
  488. </div>
  489. <div v-if="send_type == 'EXPRESS_DELIVERY' && logistics.length !== 0">
  490. <h3>快递状态:</h3>
  491. <el-timeline :reverse="reverse">
  492. <el-timeline-item v-for="(activity, index) in logistics" :key="index" :timestamp="activity.AcceptTime">
  493. {{ activity.AcceptStation }}
  494. </el-timeline-item>
  495. </el-timeline>
  496. </div>
  497. <el-dialog title="扫码出库" :visible.sync="scanDialogVisible" width="30%" :close-on-click-modal="false">
  498. <el-form ref="scanGoodsForm" :model="scanGoodsForm" inline>
  499. <el-form-item label="sku" prop="bar_code">
  500. <el-input v-model="scanGoodsForm.bar_code" ref="input" @keyup.enter.native="toSearch()" :minlength="0"
  501. :maxlength="100"></el-input>
  502. </el-form-item>
  503. <el-form-item label="序列号" prop="sn_code">
  504. <el-input v-model="sn_code" ref="sn_input" @keyup.enter.native="toSnCode()" :minlength="0"
  505. :maxlength="100"></el-input>
  506. </el-form-item>
  507. </el-form>
  508. <span slot="footer" class="dialog-footer">
  509. <!-- <el-button @click="dialogVisible = false">取 消</el-button>
  510. <el-button type="primary" @click="handleRejectGoodsExchange()">确 定</el-button> -->
  511. </span>
  512. </el-dialog>
  513. <!-- <el-divider></el-divider>
  514. <el-form
  515. :model="deliveryForms"
  516. ref="deliveryForms"
  517. label-width="120px"
  518. >
  519. <el-row>
  520. <el-col :span="12">
  521. <el-form-item label="出库单号:" prop="name">
  522. <el-select v-model="deliveryForms.sn">
  523. </el-select>
  524. </el-form-item>
  525. </el-col>
  526. <el-col :span="12">
  527. <el-form-item label="订单编号:" prop="sn">
  528. <el-select v-model="deliveryForms.order_sn_list">
  529. </el-select>
  530. </el-form-item></el-col
  531. >
  532. <el-col :span="12">
  533. <el-form-item label="配送方式:" prop="category_id">
  534. <el-select>
  535. </el-select>
  536. </el-form-item></el-col
  537. >
  538. <el-col :span="12">
  539. <el-form-item label="配送仓库:" prop="freight_price">
  540. <el-select>
  541. </el-select>
  542. </el-form-item></el-col
  543. >
  544. <el-col :span="12">
  545. <el-form-item label="物流公司:" prop="logistics_company_id">
  546. <el-select v-model="deliveryForms.logistics_company_id">
  547. </el-select>
  548. </el-form-item></el-col
  549. >
  550. <el-col :span="8" >
  551. <el-form-item label="配送地址" prop="address">
  552. <el-input
  553. v-model="deliveryForms.address"
  554. :minlength="1"
  555. :maxlength="20"
  556. clearable
  557. placeholder="请输入提货人"
  558. ></el-input>
  559. </el-form-item
  560. ></el-col>
  561. </el-row>
  562. <el-row :gutter="20">
  563. <el-col :span="8" :offset="6">
  564. <el-form-item label="物流单号:" prop="tracking_number">
  565. <el-input
  566. v-model="tracking_number"
  567. :minlength="1"
  568. :maxlength="20"
  569. clearable
  570. placeholder="请输入物流单号"
  571. ></el-input>
  572. <el-button>自动获取单号</el-button>
  573. </el-form-item
  574. ></el-col>
  575. </el-row>
  576. </el-form> -->
  577. <div class="footer" v-if="send_type !== 'EXPRESS_DELIVERY'">
  578. <!-- <el-button type="primary"> 获取全部单号 </el-button> -->
  579. <el-button type="primary" @click="saveErpWarehouseOut" :disabled="outType == 'check'"
  580. v-if="kdnCode !== '' || deliveryForms.send_type == 'SELF_PICKUP'">发货
  581. </el-button>
  582. <el-button @click="roBack2()">保存</el-button>
  583. </div>
  584. <div class="footer" v-else>
  585. <!-- <el-button type="primary"> 获取全部单号 </el-button> -->
  586. <el-button type="primary" @click="saveDelivery" :disabled="outType == 'check'">发货
  587. </el-button>
  588. <el-button @click="roBack2()">保存</el-button>
  589. </div>
  590. </div>
  591. </div>
  592. </template>
  593. <script>
  594. import * as API_BasicSetting from "@/api/basicSetting";
  595. import * as API_order from "@/api/order";
  596. import * as API_Setting from "@/api/setting";
  597. import * as API_Auth from "@/api/auth";
  598. import { RegExp } from "~/ui-utils";
  599. import * as API_GoodsExchange from "@/api/goodsExchange";
  600. import * as API_Express from '@/api/express'
  601. import { Foundation } from "~/ui-utils";
  602. import {
  603. provinceAndCityData,
  604. pcTextArr,
  605. regionData,
  606. pcaTextArr,
  607. codeToText,
  608. } from "element-china-area-data";
  609. import { mapGetters } from "vuex";
  610. export default {
  611. name: "orderOutbound",
  612. data() {
  613. return {
  614. reverse: true,
  615. btnType: false,
  616. disabledType: false,
  617. // 列表loading状态
  618. loading: false,
  619. appointmentList: [
  620. {
  621. label: "立即单",
  622. value: 0,
  623. },
  624. {
  625. label: "预约上门",
  626. value: 1,
  627. },
  628. ],
  629. deptList: [],
  630. orderIds: "",
  631. orderOutboundInfo: {
  632. warehouse_consignee_id: "",
  633. },
  634. id: "",
  635. adminList: [],
  636. kdnCode: "",
  637. deliveryForms: {
  638. logistics_type: "",
  639. logistics_code: "",
  640. logistics_phone: "",
  641. send_type: '',
  642. selfPickupNum: '',
  643. remark: "",
  644. declared_value: "",
  645. total_volume: "",
  646. appointment_type: 0,
  647. total_weight: "",
  648. status: '',
  649. //发货人
  650. sender: {
  651. name: "",
  652. phone: "",
  653. address: "",
  654. },
  655. //收货人
  656. receiver: {
  657. name: "",
  658. phone: "",
  659. address: "",
  660. },
  661. //商品信息列表
  662. goods_list: [],
  663. },
  664. product_list: [],
  665. options: regionData,
  666. selectedOptions: [],
  667. receiverOptions: [],
  668. rules: {
  669. appointment_type: [
  670. { required: true, message: "请选择预约类型", trigger: "change" },
  671. ],
  672. appointment_time: [
  673. { required: true, message: "请选择上门时间", trigger: "blur" },
  674. ],
  675. logistics_type: [
  676. { required: true, message: "请选择快递公司", trigger: "change" },
  677. ],
  678. logistics_code: [
  679. { required: true, message: "请选填写快递单号", trigger: "blur" },
  680. ],
  681. logistics_phone: [
  682. { required: true, message: "请选输入寄件人手机号后四位", trigger: "blur" },
  683. ],
  684. sender: {
  685. name: [
  686. { required: true, message: "请输入发货人姓名", trigger: "blur" },
  687. ],
  688. phone: [
  689. this.MixinRequired("请输入手机号码!"),
  690. {
  691. validator: (rule, value, callback) => {
  692. if (!RegExp.mobile.test(value)) {
  693. callback(new Error("手机号码格式有误!"));
  694. } else {
  695. callback();
  696. }
  697. },
  698. trigger: ["change", "blur"],
  699. },
  700. ],
  701. },
  702. receiver: {
  703. name: [
  704. { required: true, message: "请输入收货人姓名", trigger: "blur" },
  705. ],
  706. phone: [
  707. this.MixinRequired("请输入手机号码!"),
  708. {
  709. validator: (rule, value, callback) => {
  710. if (!RegExp.mobile.test(value)) {
  711. callback(new Error("手机号码格式有误!"));
  712. } else {
  713. callback();
  714. }
  715. },
  716. trigger: ["change", "blur"],
  717. },
  718. ],
  719. },
  720. total_weight: [
  721. { required: true, message: "请输入物品总重量", trigger: "blur" },
  722. /**/ {
  723. type: "number",
  724. min: 0,
  725. max: 50,
  726. message: "物品总重量不能超过50kg",
  727. trigger: "blur",
  728. },
  729. ],
  730. total_volume: [
  731. { required: true, message: "请输入物品总体积", trigger: "blur" },
  732. ],
  733. declared_value: [
  734. { required: true, message: "请输入物品价格", trigger: "blur" },
  735. ],
  736. },
  737. outType: "",
  738. send_address: "",
  739. receive_address: "",
  740. detailData: [], // 物流详情
  741. /* nameToCodeMap:{} */
  742. sn_code: "",
  743. sku: "",
  744. sn_code_list: [],
  745. index: "",
  746. scanDialogVisible: false,
  747. goodsExchangeAddForm: {
  748. product_list: [],
  749. type: "",
  750. },
  751. scanGoodsForm: {},
  752. send_type: '',
  753. expressList: [],//物流公司列表
  754. logistics: [],
  755. };
  756. },
  757. watch: {
  758. $route: {
  759. immediate: true,
  760. handler(newVal) {
  761. if (this.$route.name === "orderOutboundAdd") {
  762. /* this.id = this.$route.params.id;
  763. this.GET_WarehouseOutDetail(); */
  764. } else {
  765. this.orderIds = this.$route.params.orderIds;
  766. /* this.GET_WarehouseOutPreview(); */
  767. }
  768. },
  769. },
  770. },
  771. computed: {
  772. ...mapGetters(["user"]),
  773. activeStep() {
  774. // 定义步骤数组,每个元素对应一个步骤的条件
  775. const steps = [
  776. this.deliveryForms.sign_in && this.deliveryForms.sign_in.orderStatus === 402,
  777. this.deliveryForms.sign_in && this.deliveryForms.sign_in.orderStatus === 401,
  778. this.deliveryForms.user_sending && this.deliveryForms.user_sending.orderStatus === 300,
  779. this.deliveryForms.user_arrives && this.deliveryForms.user_arrives.orderStatus === 202,
  780. this.deliveryForms.user_take_order && this.deliveryForms.user_take_order.orderStatus === 201,
  781. this.deliveryForms.create_order_success && this.deliveryForms.create_order_success.orderStatus === 100
  782. ];
  783. // 找出最后一个为真的步骤的索引
  784. for (let i = steps.length - 1; i >= 0; i--) {
  785. if (steps[i]) return i;
  786. }
  787. // 如果没有任何步骤是激活的,返回-1或者你可以选择返回0显示第一步
  788. return -1;
  789. },
  790. fullSenderAddress() {
  791. console.log(this.deliveryForms.sender);
  792. const { province_name, city_name, area_name, address } = this.deliveryForms.sender;
  793. return [province_name, city_name, area_name, address].filter(Boolean).join("");
  794. },
  795. fullReceiverAddress() {
  796. console.log(this.deliveryForms.receiver);
  797. const { province_name, city_name, area_name, address } = this.deliveryForms.receiver;
  798. return [province_name, city_name, area_name, address].filter(Boolean).join("");
  799. }
  800. },
  801. mounted() {
  802. /**/ this.id = this.$route.params.id;
  803. this.send_type = this.$route.params.send_type
  804. this.GET_WarehouseOutDetail();
  805. this.GET_AdministratorList();
  806. this.GET_ExpressList()
  807. this.outType = this.$route.params.type;
  808. /* this.generateMap(regionData); */
  809. },
  810. methods: {
  811. /* 扫sku */
  812. toSearch() {
  813. API_GoodsExchange.getProduct(
  814. this.deliveryForms.warehouse_id,
  815. this.scanGoodsForm.bar_code.replace(/\s+/g, '')
  816. ).then((res) => {
  817. res.sn_code_list = []
  818. this.sku = res.product_vo.sku;
  819. // 查找当前商品是否已存在于列表中
  820. const indexs = this.goodsExchangeAddForm.product_list.findIndex((el) => {
  821. return (
  822. el.goods_id === res.goods_id &&
  823. el.product_id === res.product_id &&
  824. el.product_vo.sku === res.product_vo.sku
  825. );
  826. });
  827. // 如果商品不存在,则添加到列表
  828. if (indexs === -1) {
  829. // 检查是否有相同商品在product_list中
  830. const existingProduct = this.product_list.find(el => (
  831. el.goods_id === res.goods_id &&
  832. el.product_id === res.product_id &&
  833. el.product_vo.sku === res.product_vo.sku
  834. ));
  835. if (!existingProduct) {
  836. this.$message.error('订单内没有该商品,请重新录入');
  837. this.$nextTick(() => {
  838. this.$refs.input.focus();
  839. });
  840. return; // 退出函数,不继续执行
  841. }
  842. this.index = this.goodsExchangeAddForm.product_list.length
  843. this.goodsExchangeAddForm.product_list.push(res);
  844. } else {
  845. this.index = indexs
  846. }
  847. if (res.product_vo.have_sn) {
  848. this.$nextTick(() => {
  849. this.$refs.sn_input.focus();
  850. });
  851. } else {
  852. if (this.goodsExchangeAddForm.product_list[this.index].num >= this.goodsExchangeAddForm.product_list[this.index].orderNum) return this.$message.warning('录入完成,请录入下一条!')
  853. this.goodsExchangeAddForm.product_list[this.index].num += 1
  854. /* this.scanDialogVisible = false; */
  855. }
  856. });
  857. },
  858. // 扫码出库
  859. scanCode() {
  860. this.scanDialogVisible = true;
  861. this.$nextTick(() => {
  862. this.$refs.input.focus();
  863. });
  864. },
  865. //扫序列号goodsExchangeAddForm.product_list[this.index].sn_code_list
  866. toSnCode() {
  867. if (this.sku == '') return this.$message.error('请录入正确的sku')
  868. API_GoodsExchange.getSnCode("out", this.sku, this.sn_code.replace(/\s+/g, '')).then((res) => {
  869. this.sn_code = "";
  870. // 假设res是一个对象,我们根据res的某个属性(如sn)来检查重复
  871. let exists = this.goodsExchangeAddForm.product_list[
  872. this.index
  873. ].sn_code_list.find(
  874. (item) => item.sn_code === res.sn_code && item.sku === res.sku
  875. );
  876. if (!exists) {
  877. API_GoodsExchange.skuRedis({
  878. send_order_id: this.id, item_id: this.goodsExchangeAddForm.product_list[
  879. this.index
  880. ].id, sku: res
  881. }).then(response => {
  882. this.goodsExchangeAddForm.product_list[this.index].sn_code_list.push(
  883. res
  884. );
  885. })
  886. }
  887. this.goodsExchangeAddForm.product_list[this.index].num = this.goodsExchangeAddForm.product_list[this.index].sn_code_list.length
  888. const indexs = this.product_list.findIndex((el) => {
  889. return (
  890. el.goods_id === res.goods_id &&
  891. el.product_id === res.product_id &&
  892. el.product_vo.sku === res.sku
  893. );
  894. });
  895. this.goodsExchangeAddForm.product_list[this.index].id = this.product_list[indexs].id
  896. if (this.goodsExchangeAddForm.product_list[this.index].num == this.product_list[indexs].num) {
  897. this.scanGoodsForm.bar_code = "";
  898. return this.$message.warning('录入完成,请录入下一条!')
  899. /* this.scanDialogVisible = false; */
  900. } else {
  901. this.scanGoodsForm.bar_code = "";
  902. this.$nextTick(() => {
  903. this.$refs.input.focus();
  904. });
  905. }
  906. });
  907. },
  908. addSnCode(row, index) {
  909. this.sku = row.product_vo.sku;
  910. this.index = index;
  911. this.snCodeVisible = true;
  912. },
  913. safeAccess(obj, key) {
  914. return obj ? obj[key] : '';
  915. },
  916. /* 收获地址 */
  917. receiverChange(val) {
  918. this.deliveryForms.receiver.province_name =
  919. codeToText[this.receiverOptions[0]];
  920. this.deliveryForms.receiver.city_name =
  921. codeToText[this.receiverOptions[1]];
  922. this.deliveryForms.receiver.area_name =
  923. codeToText[this.receiverOptions[2]];
  924. this.receive_address = val.join(",");
  925. },
  926. /* 发货地址 */
  927. sendHandleChange(val) {
  928. this.deliveryForms.sender.province_name =
  929. codeToText[this.selectedOptions[0]];
  930. this.deliveryForms.sender.city_name = codeToText[this.selectedOptions[1]];
  931. this.deliveryForms.sender.area_name = codeToText[this.selectedOptions[2]];
  932. this.send_address = val.join(",");
  933. },
  934. obtainOrder() {
  935. this.$refs["ruleForm"].validate((valid) => {
  936. if (valid) {
  937. this.btnType = true;
  938. const params = this.MixinClone(this.deliveryForms);
  939. if (params.receiver.city_name === '市辖区') {
  940. params.receiver.city_name = params.receiver.province_name;
  941. }
  942. if (params.sender.city_name === '市辖区') {
  943. params.sender.city_name = params.sender.province_name;
  944. }
  945. //发货详细地址
  946. params.receiver.province_city_area_address =
  947. params.receiver.province_name +
  948. params.receiver.city_name +
  949. params.receiver.area_name +
  950. params.receiver.address;
  951. //收货详细地址
  952. params.sender.province_city_area_address =
  953. params.sender.province_name +
  954. params.sender.city_name +
  955. params.sender.area_name +
  956. params.sender.address;
  957. //商品信息
  958. const item = {};
  959. this.product_list.map((el) => {
  960. item.goods_name = el.goods_vo.name;
  961. /* item.goods_price = el.product_vo.price; */
  962. item.quantity = el.orderNum;
  963. item.unit = el.product_vo.unit;
  964. return params.goods_list.push(item);
  965. });
  966. params.goods_num = this.product_list.reduce(
  967. (sum, e) => sum + Number(e.orderNum || 0),
  968. 0
  969. );
  970. params.total_weight = Number(params.total_weight);
  971. params.total_volume = Number(params.total_volume);
  972. params.declared_value = Number(params.declared_value);
  973. //地址
  974. params.send_address = this.send_address;
  975. params.receive_address = this.receive_address;
  976. params.order_code = this.id;
  977. API_order.getKdShip(this.id, params).then((res) => {
  978. this.kdnCode = res;
  979. this.btnType = false;
  980. }).catch(() => { this.btnType = false; })
  981. } else {
  982. this.$message.error("表单填写有误,请检查")
  983. return false;
  984. }
  985. });
  986. },
  987. //获取地址
  988. handleChange(value) { },
  989. /** 获取人员列表 */
  990. GET_AdministratorList() {
  991. API_Auth.getAdministratorList({
  992. page_no: 1,
  993. page_size: 9999,
  994. user_state: 0,
  995. }).then((response) => {
  996. this.adminList = response.data;
  997. });
  998. },
  999. //发货
  1000. saveErpWarehouseOut() {
  1001. this.$refs["ruleForm"].validate((valid) => {
  1002. if (valid) {
  1003. this.btnType = true;
  1004. const params = this.MixinClone(this.deliveryForms);
  1005. //发货详细地址
  1006. params.receiver.province_city_area_address =
  1007. params.receiver.province_name +
  1008. params.receiver.city_name +
  1009. params.receiver.area_name +
  1010. params.receiver.address;
  1011. //收货详细地址
  1012. params.sender.province_city_area_address =
  1013. params.sender.province_name +
  1014. params.sender.city_name +
  1015. params.sender.area_name +
  1016. params.sender.address;
  1017. //商品信息
  1018. const item = {};
  1019. this.product_list.map((el) => {
  1020. item.goods_name = el.goods_vo.name;
  1021. /* item.goods_price = el.product_vo.price; */
  1022. item.quantity = el.num;
  1023. item.unit = el.product_vo.unit;
  1024. return params.goods_list.push(item);
  1025. });
  1026. params.goods_num = this.product_list.reduce(
  1027. (sum, e) => sum + Number(e.orderNum || 0),
  1028. 0
  1029. );
  1030. params.total_weight = Number(params.total_weight);
  1031. params.total_volume = Number(params.total_volume);
  1032. params.declared_value = Number(params.declared_value);
  1033. //地址
  1034. params.send_address = this.send_address;
  1035. params.receive_address = this.receive_address;
  1036. params.order_code = this.id;
  1037. if (this.goodsExchangeAddForm.product_list.length == 0) {
  1038. return this.$message.error("请录入出库商品")
  1039. }
  1040. params.order_item_vos = this.goodsExchangeAddForm.product_list
  1041. API_order.outOrderSend(this.id, params).then((res) => {
  1042. this.$router.push({ name: "sendOrder" });
  1043. });
  1044. } else {
  1045. console.log(this.deliveryForms);
  1046. this.$message.error("表单填写有误,请检查")
  1047. return false;
  1048. }
  1049. });
  1050. },
  1051. //快递发货
  1052. saveDelivery() {
  1053. this.$refs["ruleForm"].validate((valid) => {
  1054. if (valid) {
  1055. this.btnType = true;
  1056. const params = this.MixinClone(this.deliveryForms);
  1057. //发货详细地址
  1058. params.receiver.province_city_area_address =
  1059. params.receiver.province_name +
  1060. params.receiver.city_name +
  1061. params.receiver.area_name +
  1062. params.receiver.address;
  1063. //收货详细地址
  1064. params.sender.province_city_area_address =
  1065. params.sender.province_name +
  1066. params.sender.city_name +
  1067. params.sender.area_name +
  1068. params.sender.address;
  1069. //商品信息
  1070. const item = {};
  1071. this.product_list.map((el) => {
  1072. item.goods_name = el.goods_vo.name;
  1073. /* item.goods_price = el.product_vo.price; */
  1074. item.quantity = el.num;
  1075. item.unit = el.product_vo.unit;
  1076. return params.goods_list.push(item);
  1077. });
  1078. params.goods_num = this.product_list.reduce(
  1079. (sum, e) => sum + Number(e.orderNum || 0),
  1080. 0
  1081. );
  1082. params.total_weight = Number(params.total_weight);
  1083. params.total_volume = Number(params.total_volume);
  1084. params.declared_value = Number(params.declared_value);
  1085. //地址
  1086. params.send_address = this.send_address;
  1087. params.receive_address = this.receive_address;
  1088. params.order_code = this.id;
  1089. if (this.goodsExchangeAddForm.product_list.length == 0) {
  1090. return this.$message.error("请录入出库商品")
  1091. }
  1092. params.order_item_vos = this.goodsExchangeAddForm.product_list
  1093. API_order.outOrderSend(this.id, params).then((res) => {
  1094. this.$router.push({ name: "sendOrder" });
  1095. });
  1096. API_order.queryLogistics({ shipper_code: params.logistics_type, logistic_code: params.logistics_code, customer_name: params.logistics_phone }).then(res => {
  1097. })
  1098. } else {
  1099. console.log(this.deliveryForms);
  1100. this.$message.error("表单填写有误,请检查")
  1101. return false;
  1102. }
  1103. });
  1104. },
  1105. // 选择批次
  1106. async handleSelectWarehouseEntryBatch(items) {
  1107. const goodsData = await this.$EnwarehouseEntryBatch({
  1108. goodsApi: "admin/erp/warehouseEntryBatch",
  1109. selectedIds: items.batch_list
  1110. ? items.batch_list.map((item) => item.id)
  1111. : [],
  1112. purchasePlanApiParams: {
  1113. warehouse_id: this.orderOutboundInfo.warehouse_id,
  1114. product_id: items.product_id,
  1115. },
  1116. showWarehouseSearch: false,
  1117. });
  1118. items.batch_list = goodsData.purchasePlans.map((item) => {
  1119. item.batch_id = item.id;
  1120. item.batch_sn = item.sn;
  1121. return item;
  1122. });
  1123. },
  1124. roBack2() {
  1125. this.btnType = true;
  1126. const params = this.MixinClone(this.deliveryForms);
  1127. //发货详细地址
  1128. params.receiver.province_city_area_address =
  1129. params.receiver.province_name +
  1130. params.receiver.city_name +
  1131. params.receiver.area_name +
  1132. params.receiver.address;
  1133. //收货详细地址
  1134. params.sender.province_city_area_address =
  1135. params.sender.province_name +
  1136. params.sender.city_name +
  1137. params.sender.area_name +
  1138. params.sender.address;
  1139. //商品信息
  1140. const item = {};
  1141. this.product_list.map((el) => {
  1142. item.goods_name = el.goods_vo.name;
  1143. /* item.goods_price = el.product_vo.price; */
  1144. item.quantity = el.num;
  1145. item.unit = el.product_vo.unit;
  1146. return params.goods_list.push(item);
  1147. });
  1148. params.goods_num = this.product_list.reduce(
  1149. (sum, e) => sum + Number(e.num || 0),
  1150. 0
  1151. );
  1152. params.total_weight = Number(params.total_weight);
  1153. params.total_volume = Number(params.total_volume);
  1154. params.declared_value = Number(params.declared_value);
  1155. //地址
  1156. params.send_address = this.send_address;
  1157. params.receive_address = this.receive_address;
  1158. params.order_code = this.id;
  1159. params.order_item_vos = this.goodsExchangeAddForm.product_list
  1160. API_order.saveOrderSend(this.id, params).then((res) => {
  1161. this.$router.push({ name: "sendOrder" });
  1162. });
  1163. /* const { callback } = this.$route.params;
  1164. if (typeof callback === "function") callback();
  1165. this.$store.dispatch("delCurrentViews", {
  1166. view: this.$route,
  1167. $router: this.$router,
  1168. });
  1169. this.$router.push({ name: "warehouseOut" }); */
  1170. },
  1171. roBack() {
  1172. const { callback } = this.$route.params;
  1173. if (typeof callback === "function") callback();
  1174. this.$store.dispatch("delCurrentViews", {
  1175. view: this.$route,
  1176. $router: this.$router,
  1177. });
  1178. this.$router.push({ name: "order" });
  1179. },
  1180. /** 获取发货单详情*/
  1181. GET_WarehouseOutDetail() {
  1182. API_order.getSendOrderDetail(this.id).then((res) => {
  1183. res.product_list = res.order_item_vos;
  1184. this.product_list = res.order_item_vos;
  1185. this.deliveryForms.send_type = res.order_vo.send_type
  1186. this.deliveryForms.selfPickupNum = res.self_pickup_num
  1187. if (res.warehouse_vo && res.warehouse_vo.ware_pro_city_area) {
  1188. this.selectedOptions = res.warehouse_vo.ware_pro_city_area.split(",");
  1189. }
  1190. if (res.order_vo && res.order_vo.province_city_area) {
  1191. this.receiverOptions = res.order_vo.province_city_area.split(",");
  1192. }
  1193. if (this.outType !== undefined || res.kdn_order_code !== undefined) {
  1194. this.goodsExchangeAddForm.product_list = res.order_item_vos
  1195. this.disabledType = true;
  1196. this.deliveryForms.appointment_type = res.appointment_type;
  1197. this.deliveryForms.appointment_time = res.appointment_time;
  1198. this.deliveryForms.sender.name = res.sender_name;
  1199. this.deliveryForms.sender.phone = res.sender_phone;
  1200. this.deliveryForms.sender.address = res.sender_address;
  1201. this.deliveryForms.receiver.name = res.receiver_name;
  1202. this.deliveryForms.receiver.phone = res.receiver_phone;
  1203. this.deliveryForms.receiver.address = res.receiver_address;
  1204. this.deliveryForms.total_volume = res.total_volume;
  1205. this.deliveryForms.declared_value = res.order_vo.real_price;
  1206. this.deliveryForms.remark = res.remark;
  1207. this.kdnCode = res.kdn_order_code;
  1208. if (
  1209. JSON.stringify(res.create_order_fail) == "{}" ||
  1210. JSON.stringify(res.create_order_success) == "{}" ||
  1211. JSON.stringify(res.user_take_order) == "{}" ||
  1212. JSON.stringify(res.user_arrives) == "{}" ||
  1213. JSON.stringify(res.user_sending) == "{}" ||
  1214. JSON.stringify(res.order_fee) == "{}" ||
  1215. JSON.stringify(res.sign_in) == "{}"
  1216. ) {
  1217. this.deliveryForms.sign_in = res.sign_in;
  1218. this.deliveryForms.create_order_fail = res.create_order_fail;
  1219. this.deliveryForms.create_order_success = res.create_order_success;
  1220. this.deliveryForms.user_take_order = res.user_take_order;
  1221. this.deliveryForms.user_arrives = res.user_arrives;
  1222. this.deliveryForms.user_sending = res.user_sending;
  1223. this.deliveryForms.order_fee = res.order_fee;
  1224. }
  1225. } else {
  1226. const params = this.deliveryForms
  1227. params.sender.name = res.warehouse_vo.user_name;
  1228. params.sender.phone = res.warehouse_vo.phone;
  1229. //this.selectedOptions = res.warehouse_vo.ware_pro_city_area.split(",")
  1230. params.sender.province_name =
  1231. codeToText[this.selectedOptions[0]];
  1232. params.sender.city_name = codeToText[this.selectedOptions[1]];
  1233. params.sender.area_name = codeToText[this.selectedOptions[2]];
  1234. params.sender.address = res.warehouse_vo.warehouse_address;
  1235. params.receiver.name = res.order_vo.customer_name;
  1236. params.receiver.phone = res.order_vo.customer_phone;
  1237. //this.receiverOptions = res.order_vo.province_city_area.split(",");
  1238. params.receiver.province_name =
  1239. codeToText[this.receiverOptions[0]];
  1240. params.receiver.city_name =
  1241. codeToText[this.receiverOptions[1]];
  1242. params.receiver.area_name =
  1243. codeToText[this.receiverOptions[2]];
  1244. params.receiver.address = res.order_vo.address;
  1245. }
  1246. /* 获取缓存数据 */
  1247. API_GoodsExchange.skuRedis({ send_order_id: this.id, type: 'enter' }).then(response => {
  1248. res.order_item_vos.map((el) => {
  1249. el.orderNum = el.num
  1250. if (res.kdn_order_code == undefined || res.kdn_order_code == '') {
  1251. el.num = 0
  1252. }
  1253. Object.keys(response).map(item => {
  1254. if (el.id == item) {
  1255. el.sn_code_list = response[item]
  1256. el.num = el.sn_code_list.length
  1257. }
  1258. })
  1259. if (!el.sn_code_list) {
  1260. el.sn_code_list = []
  1261. } else {
  1262. el.num = el.sn_code_list.length
  1263. }
  1264. this.deliveryForms.total_weight = Number(
  1265. el.product_vo.weight * el.num
  1266. );
  1267. console.log(el.orderNum);
  1268. });
  1269. })
  1270. this.deliveryForms.status = res.status
  1271. this.deliveryForms.warehouse_id = res.warehouse_id
  1272. this.deliveryForms.declared_value = Number(res.order_vo.real_price);
  1273. this.goodsExchangeAddForm.product_list = res.order_item_vos
  1274. if (this.send_type == 'EXPRESS_DELIVERY') {
  1275. this.deliveryForms.logistics_type = res.logistics_type
  1276. this.deliveryForms.logistics_code = res.logistics_code
  1277. this.deliveryForms.logistics_phone = res.logistics_phone
  1278. }
  1279. if (this.send_type == 'EXPRESS_DELIVERY' && res.logistics.length !== 0) {
  1280. this.logistics = res.logistics
  1281. }
  1282. });
  1283. },
  1284. /** 出库前预览 */
  1285. GET_WarehouseOutPreview() {
  1286. API_order.getWarehouseOutPreview({ order_id_list: this.orderIds }).then(
  1287. (response) => {
  1288. this.dept_id = response.dept_id;
  1289. this.orderOutboundInfo = response;
  1290. this.orderOutboundInfo.out_time = new Date().getTime();
  1291. this.$set(
  1292. this.orderOutboundInfo,
  1293. "warehouse_consignee_id",
  1294. this.user.uid
  1295. );
  1296. }
  1297. );
  1298. },
  1299. /** 获取物流公司列表 */
  1300. GET_ExpressList() {
  1301. API_Express.getExpressList(this.params).then(response => {
  1302. this.expressList = response.data
  1303. })
  1304. }
  1305. },
  1306. };
  1307. </script>
  1308. <style type="text/scss" lang="scss" scoped>
  1309. /deep/.el-card {
  1310. margin-top: 30px;
  1311. }
  1312. .el-row {
  1313. // border-bottom: 1px solid #ebeef5;
  1314. position: relative;
  1315. }
  1316. .el-col {
  1317. position: relative;
  1318. &:not(:first-child)::before {
  1319. content: "";
  1320. position: absolute;
  1321. top: 0;
  1322. left: 0;
  1323. // width: 1px;
  1324. height: 100%;
  1325. background-color: #ebeef5;
  1326. }
  1327. }
  1328. /deep/ .el-card__body {
  1329. margin: 10px;
  1330. padding: 0;
  1331. border: 1px solid #ebeef5;
  1332. border-bottom: 0;
  1333. font-size: 12px;
  1334. }
  1335. .bg-in {
  1336. background-color: #fff;
  1337. margin: 10px;
  1338. padding: 20px 55px 55px;
  1339. }
  1340. .flex {
  1341. display: flex;
  1342. align-items: center;
  1343. justify-content: center;
  1344. margin-top: 20px;
  1345. div {
  1346. flex: 1;
  1347. color: #909399;
  1348. font-size: 15px;
  1349. }
  1350. }
  1351. .font {
  1352. color: #606266;
  1353. padding: 0 12px 0 0;
  1354. }
  1355. .order-item {
  1356. margin-top: 30px;
  1357. }
  1358. .sn-code-container {
  1359. max-height: 100px;
  1360. /* 设置最大高度,超过这个高度将显示滚动条 */
  1361. overflow-y: auto;
  1362. /* 垂直方向上溢出时显示滚动条 */
  1363. }
  1364. .footer {
  1365. width: 100%;
  1366. padding: 10px;
  1367. bottom: 0px;
  1368. text-align: center;
  1369. z-index: 999;
  1370. margin-top: 30px;
  1371. }
  1372. .el-form-item {
  1373. margin-bottom: 15px
  1374. }
  1375. /deep/ .el-form-item__content {
  1376. display: flex;
  1377. align-items: center;
  1378. .el-input {
  1379. width: 300px;
  1380. }
  1381. }
  1382. /* 覆盖步骤条的数字为圆点 */
  1383. /deep/.el-steps__icon {
  1384. background-color: #409eff;
  1385. /* 蓝色背景 */
  1386. color: #409eff;
  1387. /* 蓝色文字,与背景同色,使数字不可见 */
  1388. }
  1389. /* 调整圆点的大小 */
  1390. /deep/.el-steps__icon-inner {
  1391. width: 10px;
  1392. height: 10px;
  1393. border-radius: 50%;
  1394. background-color: white;
  1395. /* 白色圆点 */
  1396. transform: translate(-50%, -50%);
  1397. position: absolute;
  1398. top: 50%;
  1399. left: 50%;
  1400. }
  1401. /deep/.el-divider--horizontal {
  1402. margin: 15px 0;
  1403. }
  1404. </style>