orderOutbound.vue 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061
  1. <template>
  2. <div>
  3. <div class="bg-in">
  4. <div>
  5. <el-form
  6. :model="deliveryForms"
  7. :rules="rules"
  8. ref="ruleForm"
  9. label-width="120px"
  10. >
  11. <el-row>
  12. <el-col>
  13. <el-form-item label="预约类型:" prop="appointment_type">
  14. <el-select
  15. v-model="deliveryForms.appointment_type"
  16. :disabled="disabledType"
  17. >
  18. <el-option
  19. v-for="(item, index) in appointmentList"
  20. :key="index"
  21. :label="item.label"
  22. :value="item.value"
  23. ></el-option>
  24. </el-select>
  25. </el-form-item>
  26. </el-col>
  27. <el-col>
  28. <el-form-item
  29. label="预约时间:"
  30. prop=""
  31. v-if="deliveryForms.appointment_type != 0"
  32. >
  33. <el-date-picker
  34. v-model="deliveryForms.appointment_time"
  35. type="datetime"
  36. placeholder="选择日期时间"
  37. :disabled="disabledType"
  38. value-format="yyyy-MM-dd HH:mm:ss"
  39. ></el-date-picker>
  40. </el-form-item>
  41. </el-col>
  42. </el-row>
  43. <el-divider></el-divider>
  44. <h3>发货人信息:</h3>
  45. <el-row>
  46. <el-col :span="12">
  47. <el-form-item label="发货人姓名:" prop="sender.name">
  48. <!-- <el-select v-model="deliveryForms.sender.name"> </el-select> -->
  49. <el-input
  50. v-model="deliveryForms.sender.name"
  51. :minlength="1"
  52. :maxlength="20"
  53. placeholder="请输入发货人姓名"
  54. :disabled="disabledType"
  55. ></el-input>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="12">
  59. <el-form-item label="手机号:" prop="sender.phone">
  60. <el-input
  61. v-model="deliveryForms.sender.phone"
  62. :minlength="1"
  63. :maxlength="20"
  64. :disabled="disabledType"
  65. placeholder="请输入手机号"
  66. ></el-input> </el-form-item
  67. ></el-col>
  68. <el-col :span="12">
  69. <el-form-item label="发货地址:" prop="sender.address">
  70. <el-cascader
  71. size="large"
  72. :options="options"
  73. clearable
  74. :disabled="disabledType"
  75. v-model="selectedOptions"
  76. @change="sendHandleChange"
  77. >
  78. </el-cascader>
  79. <el-input
  80. :disabled="disabledType"
  81. v-model="deliveryForms.sender.address"
  82. placeholder="请输入"
  83. ></el-input> </el-form-item
  84. ></el-col>
  85. <!-- <el-col :span="12">
  86. <el-form-item label="配送仓库:" prop="freight_price">
  87. <el-select>
  88. </el-select>
  89. </el-form-item></el-col
  90. >
  91. <el-col :span="12">
  92. <el-form-item label="物流公司:" prop="logistics_company_id">
  93. <el-select v-model="deliveryForms.logistics_company_id">
  94. </el-select>
  95. </el-form-item></el-col
  96. >
  97. <el-col :span="12">
  98. <el-form-item label="配送地址" prop="address">
  99. <el-input
  100. v-model="deliveryForms.address"
  101. :minlength="1"
  102. :maxlength="20"
  103. clearable
  104. placeholder="请输入提货人"
  105. ></el-input> </el-form-item
  106. ></el-col> -->
  107. </el-row>
  108. <el-divider></el-divider>
  109. <h3>收货人信息:</h3>
  110. <!-- --><el-row>
  111. <el-col :span="12">
  112. <el-form-item label="收货人姓名:" prop="receiver.name">
  113. <el-input
  114. v-model="deliveryForms.receiver.name"
  115. :minlength="1"
  116. :maxlength="20"
  117. :disabled="disabledType"
  118. placeholder="请输入收货人姓名"
  119. ></el-input>
  120. </el-form-item>
  121. </el-col>
  122. <el-col :span="12">
  123. <el-form-item label="手机号:" prop="receiver.phone">
  124. <el-input
  125. v-model="deliveryForms.receiver.phone"
  126. :minlength="1"
  127. :maxlength="20"
  128. :disabled="disabledType"
  129. placeholder="请输入手机号"
  130. ></el-input> </el-form-item
  131. ></el-col>
  132. <el-col :span="12">
  133. <el-form-item label="配送地址:" prop="receiver.address">
  134. <el-cascader
  135. size="large"
  136. :options="options"
  137. clearable
  138. :disabled="disabledType"
  139. v-model="receiverOptions"
  140. @change="receiverChange"
  141. >
  142. </el-cascader>
  143. <el-input
  144. v-model="deliveryForms.receiver.address"
  145. size="medium"
  146. :disabled="disabledType"
  147. placeholder="请输入"
  148. ></el-input> </el-form-item
  149. ></el-col>
  150. </el-row>
  151. <el-divider></el-divider>
  152. <!-- <el-row :gutter="20">
  153. <el-col :span="8" :offset="6">
  154. <el-form-item label="物流单号:" prop="tracking_number">
  155. <el-input
  156. v-model="tracking_number"
  157. :minlength="1"
  158. :maxlength="20"
  159. clearable
  160. placeholder="请输入物流单号"
  161. ></el-input>
  162. <el-button>自动获取单号</el-button>
  163. </el-form-item
  164. ></el-col>
  165. </el-row> -->
  166. <h3>商品信息:</h3>
  167. <el-table
  168. :data="product_list"
  169. border
  170. :cell-style="{ textAlign: 'center' }"
  171. :header-cell-style="{ textAlign: 'center' }"
  172. style="width: 95%"
  173. >
  174. <el-table-column type="selection" width="40" align="center" />
  175. <el-table-column label="商品编号">
  176. <template slot-scope="scope">
  177. {{ scope.row.goods_vo.sn }}
  178. </template>
  179. </el-table-column>
  180. <el-table-column label="商品名称">
  181. <template slot-scope="scope">
  182. {{ scope.row.goods_vo.name }}
  183. </template>
  184. </el-table-column>
  185. <el-table-column label="条码">
  186. <template slot-scope="scope">
  187. {{ scope.row.product_vo.bar_code }}
  188. </template>
  189. </el-table-column>
  190. <el-table-column label="序列号">
  191. <template slot-scope="scope">
  192. {{ scope.row.product_vo.sn_code }}
  193. </template>
  194. </el-table-column>
  195. <el-table-column label="规格型号">
  196. <template slot-scope="scope">
  197. {{ scope.row.product_vo.spec_name}}
  198. </template>
  199. </el-table-column>
  200. <el-table-column label="单位">
  201. <template slot-scope="scope">
  202. {{ scope.row.product_vo.unit }}
  203. </template>
  204. </el-table-column>
  205. <el-table-column label="订单数量">
  206. <template slot-scope="scope">
  207. {{ scope.row.num }}
  208. </template>
  209. </el-table-column>
  210. <el-table-column label="库存数量">
  211. <template slot-scope="scope">
  212. {{ scope.row.use_able_stock }}
  213. </template>
  214. </el-table-column>
  215. </el-table>
  216. <el-divider></el-divider>
  217. <h3></h3>
  218. <el-row>
  219. <el-col :span="8">
  220. <el-form-item label="物品总重量:" prop="total_weight">
  221. <el-input
  222. v-model.number="deliveryForms.total_weight"
  223. :minlength="1"
  224. :maxlength="20"
  225. type="number"
  226. max="50"
  227. clearable
  228. :disabled="disabledType"
  229. placeholder="请输入物品总重量"
  230. ><template slot="append">KG</template></el-input
  231. >
  232. </el-form-item>
  233. </el-col>
  234. <el-col :span="12">
  235. <el-form-item label="物品总体积:" prop="total_volume">
  236. <el-input
  237. v-model="deliveryForms.total_volume"
  238. :minlength="1"
  239. :maxlength="20"
  240. clearable
  241. :disabled="disabledType"
  242. placeholder="请输入物品总体积"
  243. ><template slot="append">m³</template></el-input
  244. >
  245. </el-form-item>
  246. </el-col>
  247. <el-col :span="8">
  248. <el-form-item label="物品价格:" prop="declared_value">
  249. <el-input
  250. v-model="deliveryForms.declared_value"
  251. :minlength="1"
  252. :maxlength="20"
  253. clearable
  254. :disabled="disabledType"
  255. placeholder="请输入物品价格"
  256. ><template slot="append">元</template></el-input
  257. >
  258. </el-form-item>
  259. </el-col>
  260. <el-col :span="16">
  261. <el-form-item label="备注:" prop="remark">
  262. <el-input
  263. v-model="deliveryForms.remark"
  264. type="textarea"
  265. clearable
  266. :disabled="disabledType"
  267. :autosize="{ minRows: 2, maxRows: 4 }"
  268. placeholder="请输入备注"
  269. ></el-input>
  270. </el-form-item>
  271. </el-col>
  272. </el-row>
  273. <el-divider></el-divider>
  274. <el-row :gutter="20">
  275. <el-col :span="8" :offset="6">
  276. <el-form-item label="物流单号:" prop="tracking_number">
  277. <el-input
  278. v-model="kdnCode"
  279. :minlength="1"
  280. :maxlength="20"
  281. :disabled="true"
  282. placeholder="请输入物流单号"
  283. ></el-input>
  284. <el-button
  285. @click="obtainOrder"
  286. v-if="kdnCode == '' || kdnCode == undefined"
  287. :disabled="btnType"
  288. >获取单号</el-button
  289. >
  290. </el-form-item></el-col
  291. >
  292. </el-row>
  293. </el-form>
  294. </div>
  295. <div
  296. v-if="
  297. outType !== undefined &&
  298. (JSON.stringify(deliveryForms.create_order_fail) !== '{}' ||
  299. JSON.stringify(deliveryForms.create_order_success) !== '{}')
  300. "
  301. >
  302. <h3>物流状态:</h3>
  303. <div
  304. class="steps-wrap"
  305. v-if="JSON.stringify(deliveryForms.create_order_fail) !== '{}'"
  306. >
  307. <el-steps class="steps" direction="vertical" process-status="finish">
  308. <el-step
  309. icon="el-icon-error"
  310. :title="
  311. deliveryForms.create_order_fail && deliveryForms.create_order_fail.orderStatus == 600
  312. ? '下单失败'
  313. : ''
  314. "
  315. >
  316. <div slot="description">
  317. <p class="row-remark">
  318. {{ safeAccess(deliveryForms.create_order_fail, 'remark') }}
  319. </p>
  320. <div slot="description" v-if="deliveryForms.create_order_fail">
  321. <p class="row-remark">
  322. {{ deliveryForms.create_order_fail.remark }}
  323. </p>
  324. <p class="row-time" v-if="deliveryForms.create_order_fail.requestTime">
  325. {{ (deliveryForms.create_order_fail.requestTime / 1000) | unixToDate }}
  326. </p>
  327. </div>
  328. </div>
  329. </el-step>
  330. </el-steps>
  331. </div>
  332. <div class="steps-wrap" v-else>
  333. <el-steps
  334. class="steps"
  335. direction="vertical"
  336. process-status="finish"
  337. :active="activeStep"
  338. >
  339. <el-step
  340. icon="el-icon-success"
  341. v-if="JSON.stringify(deliveryForms.sign_in) !== '{}'&&deliveryForms.sign_in.orderStatus == 402"
  342. :title="deliveryForms.sign_in.orderStatus == 402 ? '退回' : ''"
  343. >
  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
  358. icon="el-icon-success"
  359. v-if="JSON.stringify(deliveryForms.sign_in) !== '{}'"
  360. :title="deliveryForms.sign_in.orderStatus == 401 ? '签收' : ''"
  361. >
  362. <div slot="description">
  363. <p class="row-remark">
  364. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  365. </p>
  366. <p class="row-remark">
  367. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  368. </p>
  369. <p class="row-remark">{{ deliveryForms.sign_in.remark }}</p>
  370. <p class="row-time">
  371. {{ (deliveryForms.sign_in.requestTime / 1000) | unixToDate }}
  372. </p>
  373. </div>
  374. </el-step>
  375. <el-step
  376. icon="el-icon-success"
  377. v-if="JSON.stringify(deliveryForms.user_sending) !== '{}'"
  378. :title="
  379. deliveryForms.user_sending.orderStatus == 300 ? '配送中' : ''
  380. "
  381. >
  382. <div slot="description">
  383. <p class="row-remark">
  384. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  385. </p>
  386. <p class="row-remark">
  387. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  388. </p>
  389. <p class="row-remark">
  390. {{ deliveryForms.user_sending.remark }}
  391. </p>
  392. <p class="row-time">
  393. {{
  394. (deliveryForms.user_sending.requestTime / 1000) | unixToDate
  395. }}
  396. </p>
  397. </div>
  398. </el-step>
  399. <el-step
  400. icon="el-icon-success"
  401. v-if="JSON.stringify(deliveryForms.user_arrives) !== '{}'"
  402. :title="
  403. deliveryForms.user_arrives.orderStatus == 202 ? '已取件' : ''
  404. "
  405. >
  406. <div slot="description">
  407. <p class="row-remark">
  408. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  409. </p>
  410. <p class="row-remark">
  411. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  412. </p>
  413. <p class="row-remark">
  414. {{ deliveryForms.user_arrives.remark }}
  415. </p>
  416. <p class="row-time">
  417. {{
  418. (deliveryForms.user_arrives.requestTime / 1000) | unixToDate
  419. }}
  420. </p>
  421. </div>
  422. </el-step>
  423. <el-step
  424. icon="el-icon-success"
  425. v-if="JSON.stringify(deliveryForms.user_take_order) !== '{}'"
  426. :title="
  427. deliveryForms.user_take_order.orderStatus == 201 ? '已接单' : ''
  428. "
  429. >
  430. <div slot="description">
  431. <p class="row-remark">
  432. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  433. </p>
  434. <p class="row-remark">
  435. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  436. </p>
  437. <p class="row-remark">
  438. {{ deliveryForms.user_take_order.remark }}
  439. </p>
  440. <p class="row-time">
  441. {{
  442. (deliveryForms.user_take_order.requestTime / 1000)
  443. | unixToDate
  444. }}
  445. </p>
  446. </div>
  447. </el-step>
  448. <el-step
  449. icon="el-icon-success"
  450. v-if="JSON.stringify(deliveryForms.create_order_success) !== '{}'"
  451. :title="
  452. deliveryForms.create_order_success.orderStatus == 100
  453. ? '待接单'
  454. : ''
  455. "
  456. >
  457. <div slot="description">
  458. <p class="row-remark">
  459. 订单号:{{ deliveryForms.create_order_success.orderCode }}
  460. </p>
  461. <p class="row-remark">
  462. 物流单号:{{ deliveryForms.create_order_success.channelOrderCode }}
  463. </p>
  464. <p class="row-remark">
  465. {{ deliveryForms.create_order_success.remark }}
  466. </p>
  467. <p class="row-time">
  468. {{
  469. (deliveryForms.create_order_success.requestTime / 1000)
  470. | unixToDate
  471. }}
  472. </p>
  473. </div>
  474. </el-step>
  475. </el-steps>
  476. </div>
  477. </div>
  478. <!-- <el-divider></el-divider>
  479. <el-form
  480. :model="deliveryForms"
  481. ref="deliveryForms"
  482. label-width="120px"
  483. >
  484. <el-row>
  485. <el-col :span="12">
  486. <el-form-item label="出库单号:" prop="name">
  487. <el-select v-model="deliveryForms.sn">
  488. </el-select>
  489. </el-form-item>
  490. </el-col>
  491. <el-col :span="12">
  492. <el-form-item label="订单编号:" prop="sn">
  493. <el-select v-model="deliveryForms.order_sn_list">
  494. </el-select>
  495. </el-form-item></el-col
  496. >
  497. <el-col :span="12">
  498. <el-form-item label="配送方式:" prop="category_id">
  499. <el-select>
  500. </el-select>
  501. </el-form-item></el-col
  502. >
  503. <el-col :span="12">
  504. <el-form-item label="配送仓库:" prop="freight_price">
  505. <el-select>
  506. </el-select>
  507. </el-form-item></el-col
  508. >
  509. <el-col :span="12">
  510. <el-form-item label="物流公司:" prop="logistics_company_id">
  511. <el-select v-model="deliveryForms.logistics_company_id">
  512. </el-select>
  513. </el-form-item></el-col
  514. >
  515. <el-col :span="8" >
  516. <el-form-item label="配送地址" prop="address">
  517. <el-input
  518. v-model="deliveryForms.address"
  519. :minlength="1"
  520. :maxlength="20"
  521. clearable
  522. placeholder="请输入提货人"
  523. ></el-input>
  524. </el-form-item
  525. ></el-col>
  526. </el-row>
  527. <el-row :gutter="20">
  528. <el-col :span="8" :offset="6">
  529. <el-form-item label="物流单号:" prop="tracking_number">
  530. <el-input
  531. v-model="tracking_number"
  532. :minlength="1"
  533. :maxlength="20"
  534. clearable
  535. placeholder="请输入物流单号"
  536. ></el-input>
  537. <el-button>自动获取单号</el-button>
  538. </el-form-item
  539. ></el-col>
  540. </el-row>
  541. </el-form> -->
  542. <div class="footer">
  543. <!-- <el-button type="primary"> 获取全部单号 </el-button> -->
  544. <el-button
  545. type="primary"
  546. @click="saveErpWarehouseOut"
  547. :disabled="outType == 'check'"
  548. v-if="kdnCode !== ''"
  549. >发货
  550. </el-button>
  551. <el-button @click="roBack2()">返回</el-button>
  552. </div>
  553. </div>
  554. </div>
  555. </template>
  556. <script>
  557. import * as API_BasicSetting from "@/api/basicSetting";
  558. import * as API_order from "@/api/order";
  559. import * as API_Setting from "@/api/setting";
  560. import * as API_Auth from "@/api/auth";
  561. import { RegExp } from "~/ui-utils";
  562. import { Foundation } from "~/ui-utils";
  563. import {
  564. provinceAndCityData,
  565. pcTextArr,
  566. regionData,
  567. pcaTextArr,
  568. codeToText,
  569. } from "element-china-area-data";
  570. import { mapGetters } from "vuex";
  571. export default {
  572. name: "orderOutbound",
  573. data() {
  574. return {
  575. btnType: false,
  576. disabledType: false,
  577. // 列表loading状态
  578. loading: false,
  579. appointmentList: [
  580. {
  581. label: "立即单",
  582. value: 0,
  583. },
  584. {
  585. label: "预约上门",
  586. value: 1,
  587. },
  588. ],
  589. deptList: [],
  590. orderIds: "",
  591. orderOutboundInfo: {
  592. warehouse_consignee_id: "",
  593. },
  594. id: "",
  595. adminList: [],
  596. kdnCode: "",
  597. deliveryForms: {
  598. remark: "",
  599. declared_value: "",
  600. appointment_type: "",
  601. total_weight: "",
  602. //发货人
  603. sender: {
  604. name: "",
  605. phone: "",
  606. address: "",
  607. },
  608. //收货人
  609. receiver: {
  610. name: "",
  611. phone: "",
  612. address: "",
  613. },
  614. //商品信息列表
  615. goods_list: [],
  616. },
  617. product_list: [],
  618. options: regionData,
  619. selectedOptions: [],
  620. receiverOptions: [],
  621. rules: {
  622. appointment_type: [
  623. { required: true, message: "请选择预约类型", trigger: "change" },
  624. ],
  625. appointment_time: [
  626. { required: true, message: "请选择上门时间", trigger: "blur" },
  627. ],
  628. sender: {
  629. name: [
  630. { required: true, message: "请输入发货人姓名", trigger: "blur" },
  631. ],
  632. phone: [
  633. this.MixinRequired("请输入手机号码!"),
  634. {
  635. validator: (rule, value, callback) => {
  636. if (!RegExp.mobile.test(value)) {
  637. callback(new Error("手机号码格式有误!"));
  638. } else {
  639. callback();
  640. }
  641. },
  642. trigger: ["change", "blur"],
  643. },
  644. ],
  645. },
  646. receiver: {
  647. name: [
  648. { required: true, message: "请输入收货人姓名", trigger: "blur" },
  649. ],
  650. phone: [
  651. this.MixinRequired("请输入手机号码!"),
  652. {
  653. validator: (rule, value, callback) => {
  654. if (!RegExp.mobile.test(value)) {
  655. callback(new Error("手机号码格式有误!"));
  656. } else {
  657. callback();
  658. }
  659. },
  660. trigger: ["change", "blur"],
  661. },
  662. ],
  663. },
  664. total_weight: [
  665. { required: true, message: "请输入物品总重量", trigger: "blur" },
  666. /**/ {
  667. type: "number",
  668. min: 0,
  669. max: 50,
  670. message: "物品总重量不能超过50kg",
  671. trigger: "blur",
  672. },
  673. ],
  674. total_volume: [
  675. { required: true, message: "请输入物品总体积", trigger: "blur" },
  676. ],
  677. declared_value: [
  678. { required: true, message: "请输入物品价格", trigger: "blur" },
  679. ],
  680. },
  681. outType: "",
  682. send_address: "",
  683. receive_address: "",
  684. detailData: [], // 物流详情
  685. /* nameToCodeMap:{} */
  686. };
  687. },
  688. watch: {
  689. $route: {
  690. immediate: true,
  691. handler(newVal) {
  692. if (this.$route.name === "orderOutboundAdd") {
  693. /* this.id = this.$route.params.id;
  694. this.GET_WarehouseOutDetail(); */
  695. } else {
  696. this.orderIds = this.$route.params.orderIds;
  697. /* this.GET_WarehouseOutPreview(); */
  698. }
  699. },
  700. },
  701. },
  702. computed: {
  703. ...mapGetters(["user"]),
  704. activeStep() {
  705. // 定义步骤数组,每个元素对应一个步骤的条件
  706. const steps = [
  707. this.deliveryForms.sign_in && this.deliveryForms.sign_in.orderStatus === 402,
  708. this.deliveryForms.sign_in && this.deliveryForms.sign_in.orderStatus === 401,
  709. this.deliveryForms.user_sending && this.deliveryForms.user_sending.orderStatus === 300,
  710. this.deliveryForms.user_arrives && this.deliveryForms.user_arrives.orderStatus === 202,
  711. this.deliveryForms.user_take_order && this.deliveryForms.user_take_order.orderStatus === 201,
  712. this.deliveryForms.create_order_success && this.deliveryForms.create_order_success.orderStatus === 100
  713. ];
  714. // 找出最后一个为真的步骤的索引
  715. for (let i = steps.length - 1; i >= 0; i--) {
  716. if (steps[i]) return i;
  717. }
  718. // 如果没有任何步骤是激活的,返回-1或者你可以选择返回0显示第一步
  719. return -1;
  720. }
  721. },
  722. mounted() {
  723. /**/ this.id = this.$route.params.id;
  724. this.GET_WarehouseOutDetail();
  725. this.GET_AdministratorList();
  726. this.outType = this.$route.params.type;
  727. /* this.generateMap(regionData); */
  728. },
  729. methods: {
  730. safeAccess(obj, key) {
  731. return obj ? obj[key] : '';
  732. },
  733. /* 收获地址 */
  734. receiverChange(val) {
  735. this.deliveryForms.receiver.province_name =
  736. codeToText[this.receiverOptions[0]];
  737. this.deliveryForms.receiver.city_name =
  738. codeToText[this.receiverOptions[1]];
  739. this.deliveryForms.receiver.area_name =
  740. codeToText[this.receiverOptions[2]];
  741. this.receive_address = val.join(",");
  742. },
  743. /* 发货地址 */
  744. sendHandleChange(val) {
  745. this.deliveryForms.sender.province_name =
  746. codeToText[this.selectedOptions[0]];
  747. this.deliveryForms.sender.city_name = codeToText[this.selectedOptions[1]];
  748. this.deliveryForms.sender.area_name = codeToText[this.selectedOptions[2]];
  749. this.send_address = val.join(",");
  750. },
  751. obtainOrder() {
  752. this.$refs["ruleForm"].validate((valid) => {
  753. if (valid) {
  754. this.btnType = true;
  755. const params = this.MixinClone(this.deliveryForms);
  756. //发货详细地址
  757. params.receiver.province_city_area_address =
  758. params.receiver.province_name +
  759. params.receiver.city_name +
  760. params.receiver.area_name +
  761. params.receiver.address;
  762. //收货详细地址
  763. params.sender.province_city_area_address =
  764. params.sender.province_name +
  765. params.sender.city_name +
  766. params.sender.area_name +
  767. params.sender.address;
  768. //商品信息
  769. const item = {};
  770. this.product_list.map((el) => {
  771. item.goods_name = el.goods_vo.name;
  772. /* item.goods_price = el.product_vo.price; */
  773. item.quantity = el.num;
  774. item.unit = el.product_vo.unit;
  775. return params.goods_list.push(item);
  776. });
  777. params.goods_num = this.product_list.reduce(
  778. (sum, e) => sum + Number(e.num || 0),
  779. 0
  780. );
  781. params.total_weight = Number(params.total_weight);
  782. params.total_volume = Number(params.total_volume);
  783. params.declared_value = Number(params.declared_value);
  784. //地址
  785. params.send_address = this.send_address;
  786. params.receive_address = this.receive_address;
  787. params.order_code = this.id;
  788. API_order.getKdShip(this.id, params).then((res) => {
  789. this.kdnCode = res;
  790. this.btnType = false;
  791. });
  792. } else {
  793. console.log("error submit!!");
  794. return false;
  795. }
  796. });
  797. },
  798. //获取地址
  799. handleChange(value) {},
  800. /** 获取人员列表 */
  801. GET_AdministratorList() {
  802. API_Auth.getAdministratorList({
  803. page_no: 1,
  804. page_size: 9999,
  805. user_state: 0,
  806. }).then((response) => {
  807. this.adminList = response.data;
  808. });
  809. },
  810. saveErpWarehouseOut() {
  811. API_order.outOrderSend(this.id).then((res) => {
  812. this.$router.push({ name: "warehouseOut" });
  813. });
  814. return;
  815. /* {
  816. send_address: this.send_address,
  817. receive_address: this.receive_address,
  818. } */
  819. API_order.addErpWarehouseOut({
  820. order_list: this.orderOutboundInfo.order_list,
  821. warehouse_consignee_id: this.orderOutboundInfo.warehouse_consignee_id,
  822. out_time: this.orderOutboundInfo.out_time / 1000,
  823. }).then((response) => {
  824. this.$message.success("出库成功!");
  825. const { callback } = this.$route.params;
  826. if (typeof callback === "function") callback();
  827. this.$store.dispatch("delCurrentViews", {
  828. view: this.$route,
  829. $router: this.$router,
  830. });
  831. this.$router.push({ name: "order" });
  832. });
  833. },
  834. // 选择批次
  835. async handleSelectWarehouseEntryBatch(items) {
  836. const goodsData = await this.$EnwarehouseEntryBatch({
  837. goodsApi: "admin/erp/warehouseEntryBatch",
  838. selectedIds: items.batch_list
  839. ? items.batch_list.map((item) => item.id)
  840. : [],
  841. purchasePlanApiParams: {
  842. warehouse_id: this.orderOutboundInfo.warehouse_id,
  843. product_id: items.product_id,
  844. },
  845. showWarehouseSearch: false,
  846. });
  847. items.batch_list = goodsData.purchasePlans.map((item) => {
  848. item.batch_id = item.id;
  849. item.batch_sn = item.sn;
  850. return item;
  851. });
  852. },
  853. roBack2() {
  854. const { callback } = this.$route.params;
  855. if (typeof callback === "function") callback();
  856. this.$store.dispatch("delCurrentViews", {
  857. view: this.$route,
  858. $router: this.$router,
  859. });
  860. this.$router.push({ name: "warehouseOut" });
  861. },
  862. roBack() {
  863. const { callback } = this.$route.params;
  864. if (typeof callback === "function") callback();
  865. this.$store.dispatch("delCurrentViews", {
  866. view: this.$route,
  867. $router: this.$router,
  868. });
  869. this.$router.push({ name: "order" });
  870. },
  871. /** 获取发货单详情*/
  872. GET_WarehouseOutDetail() {
  873. API_order.getSendOrderDetail(this.id).then((res) => {
  874. res.product_list = res.order_item_vos;
  875. this.product_list = res.order_item_vos;
  876. console.log(JSON.stringify(res.create_order_fail)=='{}');
  877. if (this.outType !== undefined || res.kdn_order_code !== undefined) {
  878. this.disabledType = true;
  879. this.deliveryForms.appointment_type = res.appointment_type;
  880. this.deliveryForms.appointment_time = res.appointment_time;
  881. this.deliveryForms.sender.name = res.sender_name;
  882. this.deliveryForms.sender.phone = res.sender_phone;
  883. this.deliveryForms.sender.address = res.sender_address;
  884. this.deliveryForms.receiver.name = res.receiver_name;
  885. this.deliveryForms.receiver.phone = res.receiver_phone;
  886. this.deliveryForms.receiver.address = res.receiver_address;
  887. this.deliveryForms.total_volume = res.total_volume;
  888. this.deliveryForms.declared_value = res.order_vo.real_price;
  889. this.deliveryForms.remark = res.remark;
  890. this.kdnCode = res.kdn_order_code;
  891. if (
  892. JSON.stringify(res.create_order_fail) == "{}" ||
  893. JSON.stringify(res.create_order_success) == "{}" ||
  894. JSON.stringify(res.user_take_order) == "{}" ||
  895. JSON.stringify(res.user_arrives) == "{}" ||
  896. JSON.stringify(res.user_sending) == "{}" ||
  897. JSON.stringify(res.order_fee) == "{}" ||
  898. JSON.stringify(res.sign_in) == "{}"
  899. ) {
  900. /* let arr =[]
  901. arr.push(res.create_order_fail)
  902. arr.push(res.create_order_success)
  903. arr.push(res.user_take_order)
  904. arr.push(res.user_arrives)
  905. arr.push(res.user_sending)
  906. arr.push(res.order_fee)
  907. arr.push(res.sign_in)
  908. console.log(arr);*/
  909. this.deliveryForms.sign_in = res.sign_in;
  910. this.deliveryForms.create_order_fail = res.create_order_fail;
  911. this.deliveryForms.create_order_success = res.create_order_success;
  912. this.deliveryForms.user_take_order = res.user_take_order;
  913. this.deliveryForms.user_arrives = res.user_arrives;
  914. this.deliveryForms.user_sending = res.user_sending;
  915. this.deliveryForms.order_fee = res.order_fee;
  916. }
  917. }
  918. res.order_item_vos.map((el) => {
  919. this.deliveryForms.total_weight = Number(
  920. el.product_vo.weight * el.num
  921. );
  922. });
  923. this.deliveryForms.declared_value = Number(res.order_vo.real_price);
  924. if (res.send_address && res.receiver_address) {
  925. this.selectedOptions = res.send_address.split(",");
  926. this.receiverOptions = res.receive_address.split(",");
  927. }
  928. console.log(this.deliveryForms);
  929. /* this.deliveryForms.sender=res.sender_province_name */
  930. });
  931. },
  932. /** 出库前预览 */
  933. GET_WarehouseOutPreview() {
  934. API_order.getWarehouseOutPreview({ order_id_list: this.orderIds }).then(
  935. (response) => {
  936. this.dept_id = response.dept_id;
  937. this.orderOutboundInfo = response;
  938. this.orderOutboundInfo.out_time = new Date().getTime();
  939. this.$set(
  940. this.orderOutboundInfo,
  941. "warehouse_consignee_id",
  942. this.user.uid
  943. );
  944. }
  945. );
  946. },
  947. },
  948. };
  949. </script>
  950. <style type="text/scss" lang="scss" scoped>
  951. /deep/.el-card {
  952. margin-top: 30px;
  953. }
  954. .el-row {
  955. // border-bottom: 1px solid #ebeef5;
  956. position: relative;
  957. }
  958. .el-col {
  959. padding: 10px;
  960. position: relative;
  961. &:not(:first-child)::before {
  962. content: "";
  963. position: absolute;
  964. top: 0;
  965. left: 0;
  966. // width: 1px;
  967. height: 100%;
  968. background-color: #ebeef5;
  969. }
  970. }
  971. /deep/ .el-card__body {
  972. margin: 10px;
  973. padding: 0;
  974. border: 1px solid #ebeef5;
  975. border-bottom: 0;
  976. font-size: 12px;
  977. }
  978. .bg-in {
  979. background-color: #fff;
  980. margin: 10px;
  981. padding: 55px;
  982. }
  983. .flex {
  984. display: flex;
  985. align-items: center;
  986. justify-content: center;
  987. margin-top: 20px;
  988. div {
  989. flex: 1;
  990. color: #909399;
  991. font-size: 15px;
  992. }
  993. }
  994. .font {
  995. color: #606266;
  996. padding: 0 12px 0 0;
  997. }
  998. .order-item {
  999. margin-top: 30px;
  1000. }
  1001. .footer {
  1002. width: 100%;
  1003. padding: 10px;
  1004. bottom: 0px;
  1005. text-align: center;
  1006. z-index: 999;
  1007. margin-top: 30px;
  1008. }
  1009. /deep/ .el-form-item__content {
  1010. display: flex;
  1011. align-items: center;
  1012. .el-input {
  1013. width: 300px;
  1014. }
  1015. }
  1016. /* 覆盖步骤条的数字为圆点 */
  1017. /deep/.el-steps__icon {
  1018. background-color: #409eff; /* 蓝色背景 */
  1019. color: #409eff; /* 蓝色文字,与背景同色,使数字不可见 */
  1020. }
  1021. /* 调整圆点的大小 */
  1022. /deep/.el-steps__icon-inner {
  1023. width: 10px;
  1024. height: 10px;
  1025. border-radius: 50%;
  1026. background-color: white; /* 白色圆点 */
  1027. transform: translate(-50%, -50%);
  1028. position: absolute;
  1029. top: 50%;
  1030. left: 50%;
  1031. }
  1032. </style>