orderOutbound.vue 51 KB

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