create.blade.php 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852
  1. @extends('layouts.app')
  2. @section('title')开单入库-创建@endsection
  3. @section('head')
  4. <link href="{{ mix('css/element-ui.css') }}" rel="stylesheet">
  5. <link rel="stylesheet" href="{{ mix('css/element/index.css') }}">
  6. @endsection
  7. @section('content')
  8. <div id="list" class="d-none">
  9. <div class="container-fluid ">
  10. <div class="card">
  11. <div class="card-body">
  12. <form name="receiving-task-form" id="receiving-task-form">
  13. <div class="form-group row">
  14. <div class="form-inline col-4 row">
  15. <label class="col-4 col-form-label text-right d-inline-block text-primary"
  16. for="warehouse_id">
  17. <span class="text-danger">*</span>
  18. 仓库
  19. </label>
  20. <div class="form-inline col-8">
  21. <select class="form-control form-control-sm col-12" name="warehouse_id"
  22. @change="clearError('warehouse_id')"
  23. id="warehouse_id"
  24. :class="{'is-invalid':errors.warehouse_id}"
  25. v-model="receiving_task.warehouse_id">
  26. <option v-for="item in ware_house"
  27. :value="item.value"
  28. v-text="item.name"></option>
  29. </select>
  30. <div id="validation-warehouse" class="invalid-feedback"
  31. v-show="errors.warehouse_id">
  32. <span v-text="errors.warehouse_id"></span>
  33. </div>
  34. </div>
  35. </div>
  36. <div class="form-inline col-4 row">
  37. <label class="col-4 col-form-label text-right d-inline-block text-primary"
  38. for="for_single_member">
  39. <span class="text-danger">*</span>
  40. 投单员</label>
  41. <div class="form-inline col-8">
  42. <input type="text" class="form-control form-control-sm col-12" placeholder=""
  43. id="for_single_member" name="for_single_member"
  44. :class="{'is-invalid':errors.for_single_member}"
  45. @change="clearError('for_single_member')"
  46. v-model="receiving_task.for_single_member">
  47. <div id="validation-for-single-member" class="invalid-feedback"
  48. v-show="errors.for_single_member">
  49. <span v-text="errors.for_single_member"></span>
  50. </div>
  51. </div>
  52. </div>
  53. <div class="form-inline col-4 row">
  54. <label class="col-4 col-form-label text-right d-inline-block text-primary"
  55. for="owner_id">
  56. <span class="text-danger">*</span>
  57. 货主</label>
  58. <div class="form-inline col-8">
  59. <select class="form-control form-control-sm col-8" name="owner_id" id="owner_id"
  60. :class="{'is-invalid':errors.owner_id}"
  61. @change="getASNDetails"
  62. @input="clearError('owner_id')"
  63. v-model="receiving_task.owner_id">
  64. <option v-for="item in filterOwners" :value="item.id" v-text="item.name"></option>
  65. </select>
  66. <div id="validation-owner-id" class="invalid-feedback" v-show="errors.owner_id">
  67. <span v-text="errors.owner_id"></span>
  68. </div>
  69. <div class="form-inline col-3">
  70. <input type="text" name="owner_search" id="owner_search" v-model="owner_search" class="form-control form-control-sm">
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. <div class="form-group row">
  76. <div class="form-inline col-4 row">
  77. <label class="col-4 col-form-label text-right d-inline-block text-primary"
  78. for="driver_name">
  79. <span class="text-danger">*</span>
  80. 司机姓名</label>
  81. <div class="form-inline col-8">
  82. <input type="text" class="form-control form-control-sm col-12" placeholder=""
  83. name="driver_name" id="driver_name"
  84. :class="{'is-invalid':errors.driver_name}"
  85. @change="clearError('driver_name')"
  86. v-model="receiving_task.driver_name">
  87. <div id="validation-driver-name" class="invalid-feedback"
  88. v-show="errors.driver_name">
  89. <span v-text="errors.driver_name"></span>
  90. </div>
  91. </div>
  92. </div>
  93. <div class="form-inline col-4 row">
  94. <label class="col-4 col-form-label text-right d-inline-block text-primary"
  95. for="driver-phone">
  96. <span class="text-danger">*</span>
  97. 司机电话</label>
  98. <div class="form-inline col-8">
  99. <input type="text" class="form-control form-control-sm col-12" placeholder=""
  100. name="driver_phone" id="driver-phone"
  101. :class="{'is-invalid':errors.driver_phone}"
  102. @change="clearError('driver_phone')"
  103. v-model="receiving_task.driver_phone">
  104. <div id="validation-driver-phone" class="invalid-feedback"
  105. v-show="errors.driver_name">
  106. <span v-text="errors.driver_phone"></span>
  107. </div>
  108. </div>
  109. </div>
  110. <div class="form-inline col-4 row">
  111. <label class="col-4 col-form-label text-right d-inline-block text-primary"
  112. for="appointment_number">
  113. <span class="text-danger">*</span>
  114. 预约单号</label>
  115. <div class="form-inline col-8">
  116. <input type="text" class="form-control form-control-sm col-12" placeholder=""
  117. name="appointment_number" id="appointment_number"
  118. :class="{'is-invalid':errors.appointment_number}"
  119. {{-- @keydown.enter="getAnsNo"--}}
  120. @change="clearError('appointment_number')"
  121. v-model="receiving_task.appointment_number">
  122. <div id="validation-delivery-appointment-number" class="invalid-feedback"
  123. v-show="errors.appointment_number">
  124. <span v-text="errors.appointment_number"></span>
  125. </div>
  126. </div>
  127. </div>
  128. </div>
  129. <div class="form-group row">
  130. <div class="form-inline col-4 row">
  131. <label class="col-4 col-form-label text-right d-inline-block" for="plate_number">
  132. <span class="text-danger">*</span>
  133. 车牌号</label>
  134. <div class="form-inline col-8">
  135. <input type="text" class="form-control form-control-sm col-12" placeholder=""
  136. name="plate_number" id="plate_number"
  137. :class="{'is-invalid':errors.plate_number}"
  138. @change="clearError('plate_number')"
  139. :disabled="receiving_task.logistics_single_number"
  140. v-model="receiving_task.plate_number">
  141. <div id="validation-plate-number" class="invalid-feedback"
  142. v-show="errors.plate_number">
  143. <span v-text="errors.plate_number"></span>
  144. </div>
  145. </div>
  146. </div>
  147. <div class="form-inline col-4 row">
  148. <label class="col-4 col-form-label text-right d-inline-block" for="driving_license_no">
  149. <span class="text-danger">*</span>
  150. 驾驶证号</label>
  151. <div class="form-inline col-8">
  152. <input type="text" class="form-control form-control-sm col-12" placeholder=""
  153. name="driving_license_no" id="driving_license_no"
  154. :class="{'is-invalid':errors.driving_license_no}"
  155. @change="clearError('driving_license_no')"
  156. :disabled="receiving_task.logistics_single_number"
  157. v-model="receiving_task.driving_license_no">
  158. <div id="validation-driving-license-no" class="invalid-feedback"
  159. v-show="errors.driving_license_no">
  160. <span v-text="errors.driving_license_no"></span>
  161. </div>
  162. </div>
  163. </div>
  164. <div class="form-inline col-4 row">
  165. <label class="col-4 col-form-label text-right d-inline-block"
  166. for="logistics_single_number">
  167. <span class="text-danger">*</span>
  168. 物流单号</label>
  169. <div class="form-inline col-8">
  170. <input type="text" class="form-control form-control-sm col-12" placeholder=""
  171. name="logistics_single_number" id="logistics_single_number"
  172. :class="{'is-invalid':errors.logistics_single_number}"
  173. @change="clearError('logistics_single_number')"
  174. :disabled="checkLogisticsSingleIsWrite()"
  175. v-model="receiving_task.logistics_single_number">
  176. <div id="validation-driving-license-no" class="invalid-feedback"
  177. v-show="errors.logistics_single_number">
  178. <span v-text="errors.logistics_single_number"></span>
  179. </div>
  180. </div>
  181. </div>
  182. </div>
  183. <div class="form-group row">
  184. <div class="form-inline col-4 row">
  185. <label class="col-4 col-form-label text-right d-inline-block text-primary"
  186. for="plate_number">
  187. <span class="text-danger">*</span>
  188. 是否提供清单</label>
  189. <div class="form-inline col-8">
  190. <select name="provide_list" id="provide_list"
  191. class="form-control form-control-sm col-12"
  192. :class="{'is-invalid':errors.provide_list}"
  193. @change="clearError('provide_list')"
  194. v-model="receiving_task.provide_list">
  195. <option v-for="item in provide_lists" :value="item" v-text="item"></option>
  196. </select>
  197. <div id="validation-provide_list" class="invalid-feedback"
  198. v-show="errors.provide_list">
  199. <span v-text="errors.provide_list"></span>
  200. </div>
  201. </div>
  202. </div>
  203. <div class="form-inline col-4 row">
  204. <label class="col-4 col-form-label text-right d-inline-block text-primary"
  205. for="receiving_type">
  206. <span class="text-danger">*</span>
  207. 收货类型</label>
  208. <div class="form-inline col-8">
  209. <select name="receiving_type" id="receiving_type"
  210. class="form-control form-control-sm col-12"
  211. :class="{'is-invalid':errors.receiving_type}"
  212. @change="clearError('provide_list')"
  213. v-model="receiving_task.receiving_type">
  214. <option v-for="item in receiving_types" :value="item" v-text="item"></option>
  215. </select>
  216. <div id="validation-receiving-type" class="invalid-feedback"
  217. v-show="errors.receiving_type">
  218. <span v-text="errors.receiving_type"></span>
  219. </div>
  220. </div>
  221. </div>
  222. </div>
  223. <div class="form-group row">
  224. <div class="form-inline col-4 row">
  225. <label class="col-4 col-form-label text-right d-inline-block text-primary"
  226. for="driving_license_image">
  227. <span class="text-danger">*</span>
  228. 驾驶证扫描件</label>
  229. <div class="form-inline col-8">
  230. <input type="file" class="form-control form-control-file col-12" placeholder=""
  231. name="driving_license_image" id="driving_license_image">
  232. </div>
  233. </div>
  234. </div>
  235. </form>
  236. </div>
  237. <div class="card-body mb-0 pt-0 pm-0">
  238. <el-table
  239. :key="asn_headers_table_key"
  240. size="small"
  241. highlight-current-row
  242. ref="asn_headers_table"
  243. :data="asn_headers"
  244. height="350"
  245. border
  246. @row-click="showAsnDetails"
  247. row-key="asn_no"
  248. @selection-change="handleSelectionChange"
  249. style="width: 100%">
  250. <el-table-column
  251. type="selection"
  252. width="55">
  253. </el-table-column>
  254. <el-table-column
  255. prop="customer_id" label="货主">
  256. </el-table-column>
  257. <el-table-column
  258. sortable
  259. prop="asn_no" label="ASN号">
  260. </el-table-column>
  261. <el-table-column
  262. prop="asn_type" label="ASN类型">
  263. </el-table-column>
  264. <el-table-column
  265. sortable
  266. prop="asn_status" label="订单状态">
  267. </el-table-column>
  268. <el-table-column
  269. prop="up_stream_number"
  270. label="上游单号">
  271. </el-table-column>
  272. <el-table-column
  273. prop="anticipated_sum_number"
  274. label="预期总数">
  275. </el-table-column>
  276. <el-table-column
  277. prop="number1"
  278. label="参考编号1"
  279. >
  280. </el-table-column>
  281. <el-table-column
  282. prop="number2"
  283. label="参考编号2">
  284. </el-table-column>
  285. <el-table-column
  286. prop="number3"
  287. label="参考编号3">
  288. </el-table-column>
  289. <el-table-column
  290. sortable
  291. prop="receiving_time"
  292. label="接收时间">
  293. </el-table-column>
  294. </el-table>
  295. <div class="block">
  296. <el-pagination
  297. @size-change="handleSizeChange"
  298. @current-change="handleCurrentChange"
  299. :current-page="current_page"
  300. :page-sizes="['50',100, 200, 300, 400]"
  301. :page-size="50"
  302. layout="total, sizes, prev, pager, next, jumper"
  303. :total="total">
  304. </el-pagination>
  305. </div>
  306. </div>
  307. <div class="card-body mt-0 pt-0 pm-0">
  308. <el-table
  309. ref="asn_details_table"
  310. size="small"
  311. border
  312. :data="asn_details"
  313. style="width: 100%"
  314. height="300">
  315. <el-table-column
  316. prop="line_status"
  317. label="行状态"
  318. width="180">
  319. </el-table-column>
  320. <el-table-column
  321. prop="name"
  322. label="产品名称">
  323. </el-table-column>
  324. <el-table-column
  325. prop="code1"
  326. label="条码1"
  327. width="180">
  328. </el-table-column>
  329. <el-table-column
  330. prop="code2"
  331. label="条码2"
  332. width="180">
  333. </el-table-column>
  334. <el-table-column
  335. prop="code3"
  336. label="条码3">
  337. </el-table-column>
  338. <el-table-column
  339. prop="anticipated_number"
  340. label="预期数量"
  341. width="180">
  342. </el-table-column>
  343. <el-table-column
  344. prop="number"
  345. label="已收取"
  346. width="180">
  347. </el-table-column>
  348. </el-table>
  349. </div>
  350. <div class="form-group">
  351. <el-button type="primary" class="col-12" @click="submit" v-if="!submit_loading">提 交</el-button>
  352. <el-button type="primary" class="col-12" :loading="true" v-if="submit_loading">提 交 中</el-button>
  353. </div>
  354. <div class="form-group">
  355. @can('入库管理-开单入库-打印任务单')
  356. <el-button type="primary" class="col-12" @click="printLodop"
  357. v-show="receiving_task_print.number">
  358. <span v-text="receiving_task_print.number + '打 印'"></span>
  359. </el-button>
  360. @endcan
  361. </div>
  362. @include("store.receivingTasks._receiving_task_print")
  363. @include("store.receivingTasks._clodop_print")
  364. </div>
  365. </div>
  366. </div>
  367. @endsection
  368. @section('lastScript')
  369. <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
  370. <script type="text/javascript" src="{{ mix('js/element-ui.js') }}"></script>
  371. <script type="text/javascript" src="{{mix('js/element/index.js') }}"></script>
  372. <script type="text/javascript" src="{{mix('js/lodop/LodopFuncs.js')}}"></script>
  373. <script src='http://localhost:18000/CLodopfuncs.js?name=CLODOPA'></script>
  374. <script>
  375. let vue = new Vue({
  376. el: "#list",
  377. data: {
  378. receiving_task: {
  379. warehouse_id: null,
  380. owner_id: null,
  381. appointment_number: null,
  382. driver_name: null,
  383. driver_phone: null,
  384. for_single_member: '{{ Auth::user()->name }}',
  385. plate_number: null,
  386. driving_license_no: null,
  387. logistics_single_number: null,
  388. provide_list: null,
  389. receiving_type: null,
  390. },
  391. provide_lists: ['是', '否'],
  392. receiving_types: ['正常', '盲收'],
  393. owners: [
  394. @foreach($owners as $owner)
  395. {
  396. name: '{{$owner->name}}', value: '{{$owner->code}}', id: '{{$owner->id}}'
  397. },
  398. @endforeach
  399. ],
  400. ware_house: [
  401. @foreach($wareHouse as $item)
  402. {
  403. name: '{{$item->name}}', value: '{{$item->id}}'
  404. },
  405. @endforeach
  406. ],
  407. driving_license_image: null,
  408. owner_search:null,
  409. page_size: 20,
  410. pager_count: 0,
  411. current_page: 0,
  412. total: 0,
  413. asn_headers: [],
  414. asn_details: [],
  415. asn_detail: [],
  416. loading_tag: false,
  417. not_found_tag: false,
  418. asn_headers_table_key: 1,
  419. errors: {
  420. warehouse_id: '',
  421. owner_id: '',
  422. appointment_number: '',
  423. driver_name: '',
  424. driver_phone: '',
  425. for_single_member: '',
  426. plate_number: '',
  427. driving_license_no: '',
  428. logistics_single_number: '',
  429. provide_list: '',
  430. receiving_type: '',
  431. },
  432. error_message: null,
  433. selected_asn_nos: [],
  434. submit_loading: false,
  435. receiving_task_print: {
  436. number: null, // 收货任务号
  437. warehouse: null, // 仓库
  438. for_single_member: null, // 投单员
  439. driver_name: null, // 司机姓名
  440. driver_phone: null, // 司机电话
  441. plate_number: null, // 车号牌
  442. driving_license_no: null, // 驾驶证号
  443. provide_list: null, // 是否提供清单
  444. receiving_type: null, // 收货类型
  445. owner: null, // 货主
  446. appointment_number: null, // 预约号
  447. },
  448. clodop: null,
  449. clodopPrintDialogVisible: false,
  450. printerList: [],
  451. print_setting: {
  452. printer_index: 0,
  453. },
  454. appointment_number_asn_nos:[], // 预约号对应的ans号
  455. },
  456. mounted() {
  457. $("#list").removeClass('d-none');
  458. },
  459. computed:{
  460. filterOwners(){
  461. let owners = JSON.parse(JSON.stringify(this.owners));
  462. let owner_name = this.owner_search ? this.owner_search.trim() : '';
  463. if (owner_name === '') return owners;
  464. owners = owners.filter(e=>{
  465. return e.name.includes(owner_name);
  466. });
  467. setTimeout(()=>{
  468. let owner = owners.find(e=>e);
  469. owner ? this.$set(this.receiving_task,'owner_id',owner.id) : null;
  470. },200);
  471. return owners;
  472. },
  473. },
  474. methods: {
  475. waitingTempTip(message) {
  476. window.tempTip.setIndex(2005);
  477. window.tempTip.waitingTip(message);
  478. },
  479. successTempTip(message) {
  480. window.tempTip.setDuration(1500);
  481. window.tempTip.setIndex(2005);
  482. window.tempTip.showSuccess(message);
  483. },
  484. errorTempTip(message) {
  485. window.tempTip.setDuration(2000);
  486. window.tempTip.setIndex(2005);
  487. window.tempTip.show(message);
  488. },
  489. submit() {
  490. let result = this.checkSubmitData();
  491. if (!result.success) {
  492. this.error_message = result.message;
  493. this.errors[result.field] = result.message;
  494. this.errorTempTip(result.message);
  495. this.scrollToTop();
  496. return;
  497. }
  498. let url = "{{route("store.receivingMask.storeApi")}}";
  499. let form = document.getElementById("receiving-task-form");
  500. let formData = new FormData(form);
  501. this.selected_asn_nos.forEach(e => {
  502. if (e) formData.append('asn_nos[]', e);
  503. });
  504. this.submit_loading = true;
  505. window.axios.post(url, formData, {
  506. 'Content-Type': 'multipart/form-data'
  507. }).then(res => {
  508. this.submit_loading = false;
  509. if (res.data.success) {
  510. this.successTempTip("创建成功");
  511. this.conversion(res.data.data);
  512. } else {
  513. if (res.data.errors) {
  514. let error = null;
  515. for (const key in res.data.errors) {
  516. this.errors[key] = res.data.errors[key].find(e => e);
  517. if (!error) error = res.data.errors[key].find(e => e);
  518. }
  519. this.errorTempTip(error ? error : "创建异常请检查后提交");
  520. this.scrollToTop();
  521. } else if (res.data.message) {
  522. this.errorTempTip(res.data.message ? res.data.message : '提交异常,请刷新重试');
  523. }
  524. }
  525. }).catch(err => {
  526. this.errorTempTip(err);
  527. this.submit_loading = false;
  528. })
  529. },
  530. nextPage() {
  531. this.getASNDetails(false,this.current_page + 1,this.pager_count);
  532. },
  533. prevPage(){
  534. this.getASNDetails(false,this.current_page - 1,this.pager_count);
  535. },
  536. handleSizeChange(val){
  537. this.getASNDetails(false,0,val);
  538. },
  539. handleCurrentChange(val){
  540. this.getASNDetails(false,val,this.pager_count);
  541. },
  542. changeCurrent(val){
  543. this.getASNDetails(false,val,this.pager_count);
  544. },
  545. getASNDetails(isChange,page, prePage) {
  546. let {owner_id} = this.receiving_task;
  547. let owner = this.owners.filter(e => e.id === owner_id).find(e => e);
  548. if (!owner) return;
  549. let url = '{{route('oracle.asn.getToBeProcessApi')}}';
  550. page = page ? page : this.current_page;
  551. prePage = prePage ? prePage : this.prevPage;
  552. if (isChange){
  553. this.current_page = 0;
  554. this.pager_count = 20;
  555. this.sum = 0;
  556. }
  557. let data = {
  558. customer_id: owner.value,
  559. page: page,
  560. prePage: prePage
  561. };
  562. window.axios.post(url, data).then(res => {
  563. if (res.data.success) {
  564. this.total = res.data.total;
  565. this.pager_count = res.data.pager_count;
  566. this.current_page = res.data.current_page;
  567. this.asn_headers = this.formatAsnHeaderDetails(res.data.data);
  568. this.selected_asn_nos = [];
  569. }
  570. }).catch(err => {
  571. this.errorTempTip(err);
  572. });
  573. },
  574. getAnsNo(){
  575. let url = "{{route('store.receivingMask.getAsnNumberApi')}}";
  576. this.appointment_number_asn_nos = [];
  577. let data = {
  578. 'appointment_number':this.receiving_task.appointment_number,
  579. };
  580. window.axios.post(url,data).then(res => {
  581. if (res.data.success) {
  582. this.appointment_number_asn_nos = res.data.data;
  583. return;
  584. }
  585. this.errorTempTip(res.data.message ? res.data.message : '校验预约号出现异常');
  586. }).catch(err => {
  587. this.errorTempTip(err);
  588. });
  589. },
  590. formatAsnHeaderDetails(asnHeaderDetails) {
  591. return asnHeaderDetails.map(e => this.formatAsnHeaderDetail(e));
  592. },
  593. formatAsnHeaderDetail(asnHeaderDetail) {
  594. let asn_details = asnHeaderDetail.asn_details ? asnHeaderDetail.asn_details : [];
  595. let anticipated_sum_number = this.getAnticipatedSumNumber(asn_details);
  596. return {
  597. customer_id: asnHeaderDetail.bas_customer ? asnHeaderDetail.bas_customer.descr_c : '',
  598. asn_no: asnHeaderDetail.asnno ? asnHeaderDetail.asnno : '',
  599. asn_type: asnHeaderDetail.asn_type ? asnHeaderDetail.asn_type.codename_c : '',
  600. asn_status: asnHeaderDetail.asn_status ? asnHeaderDetail.asn_status.codename_c : '',
  601. up_stream_number: asnHeaderDetail.asnreference1 ? asnHeaderDetail.asnreference1 : '',
  602. anticipated_sum_number: anticipated_sum_number,
  603. number1: asnHeaderDetail.asnreference1 ? asnHeaderDetail.asnreference1 : '',
  604. number2: asnHeaderDetail.asnreference2 ? asnHeaderDetail.asnreference2 : '',
  605. number3: asnHeaderDetail.asnreference3 ? asnHeaderDetail.asnreference3 : '',
  606. receiving_time: asnHeaderDetail.asncreationtime ? asnHeaderDetail.asncreationtime : '',
  607. details: this.formatAsnDetails(asn_details),
  608. };
  609. },
  610. formatAsnDetails(asnDetails) {
  611. return asnDetails.map(e => this.formatAsnDetail(e));
  612. },
  613. formatAsnDetail(asnDetail) {
  614. return {
  615. line_status: asnDetail.line_status ? asnDetail.line_status.codename_c : '',
  616. name: asnDetail.bas_sku ? asnDetail.bas_sku.descr_c : '',
  617. code1: asnDetail.bas_sku ? asnDetail.bas_sku.alternate_sku1 : '',
  618. code2: asnDetail.bas_sku ? asnDetail.bas_sku.alternate_sku2 : '',
  619. code3: asnDetail.bas_sku ? asnDetail.bas_sku.alternate_sku3 : '',
  620. anticipated_number: asnDetail.expectedqty ? asnDetail.expectedqty : '',
  621. number: asnDetail.receivedqty ? asnDetail.receivedqty : 0,
  622. }
  623. },
  624. getAnticipatedSumNumber(asnDetails) {
  625. if (asnDetails.length === 0) return 0;
  626. let sum = asnDetails.reduce((total, e) => {
  627. return total + Number(e.expectedqty);
  628. }, 0);
  629. return sum ? sum : 0;
  630. },
  631. showAsnDetails(row, column, event) {
  632. this.$refs.asn_headers_table.setCurrentRow(row);
  633. this.asn_details = row.details;
  634. },
  635. handleSelectionChange(val) {
  636. this.selected_asn_nos = val.map(e => e.asn_no);
  637. },
  638. checkSubmitData() {
  639. let result = {success: true, message: '', field: '',};
  640. let {
  641. warehouse_id, owner_id,
  642. driver_name, driver_phone, for_single_member,
  643. plate_number, driving_license_no, logistics_single_number,
  644. provide_list, receiving_type, appointment_number
  645. } = this.receiving_task;
  646. if (!warehouse_id) {
  647. result = {success: false, message: "仓库为必选项", field: 'warehouse_id'};
  648. } else if (!for_single_member) {
  649. result = {success: false, message: "投单员不能为空", field: 'for_single_member'};
  650. } else if (!owner_id) {
  651. result = {success: false, message: "货主为必选项", field: 'owner_id'};
  652. } else if (!driver_name) {
  653. result = {success: false, message: "司机姓名不能为空", field: 'driver_name'};
  654. } else if (!driver_phone) {
  655. result = {success: false, message: "司机电话不能为空", field: 'driver_phone'};
  656. } else if (!appointment_number) {
  657. result = {success: false, message: "预约单号不能为空", field: 'appointment_number'};
  658. }
  659. if (!result.success) return result;
  660. if (!logistics_single_number) {
  661. if (!plate_number) {
  662. result = {success: false, message: "车牌号不能为空", field: 'plate_number'};
  663. } else if (!driving_license_no) {
  664. result = {success: false, message: "驾驶证号", field: 'driving_license_no'};
  665. }
  666. }
  667. if (!result.success) return result;
  668. if (!provide_list) {
  669. result = {success: false, message: "是否提供清单为必填项", field: 'provide_list'};
  670. } else if (!receiving_type) {
  671. result = {success: false, message: "收货类型不能为空", field: 'provide_list'};
  672. }
  673. return result;
  674. },
  675. clearError(field) {
  676. this.errors[field] ? this.errors[field] = '' : null;
  677. },
  678. checkLogisticsSingleIsWrite() {
  679. if (this.receiving_task.plate_number) return true;
  680. else if (this.receiving_task.driving_license_no) return true;
  681. return false;
  682. },
  683. checkLogisticsSingleNumber() {
  684. if (this.receiving_task.plate_number) return true;
  685. else if (this.receiving_task.driving_license_no) return true;
  686. return false;
  687. },
  688. scrollToTop() {
  689. const c = document.documentElement.scrollTop || document.body.scrollTop;
  690. if (c > 0) {
  691. window.requestAnimationFrame(this.scrollToTop);
  692. window.scrollTo(0, c - c / 8);
  693. }
  694. },
  695. conversion(receivingTask) {
  696. this.receiving_task_print = {
  697. number: receivingTask.number,
  698. warehouse: receivingTask.warehouse ? receivingTask.warehouse.name : '',
  699. for_single_member: receivingTask.for_single_member,
  700. driver_name: receivingTask.driver_name,
  701. driver_phone: receivingTask.driver_phone,
  702. plate_number: receivingTask.plate_number,
  703. driving_license_no: receivingTask.driving_license_no,
  704. provide_list: receivingTask.provide_list,
  705. receiving_type: receivingTask.receiving_type,
  706. owner: receivingTask.owner ? receivingTask.owner.name : '',
  707. appointment_number: receivingTask.delivery_appointment_car ? receivingTask.delivery_appointment_car.appointment_number : ''
  708. };
  709. },
  710. printLodop() {
  711. this.clodop = null;
  712. try {
  713. this.clodop = getLodop();
  714. if ((this.clodop != null) && (typeof (this.clodop.VERSION) != "undefined")) {
  715. this.showPrintDialog();
  716. } else {
  717. this.downloadClodopConfirm();
  718. }
  719. } catch (err) {
  720. this.errorTempTip('getLodop error');
  721. }
  722. },
  723. downloadClodopConfirm() {
  724. this.$confirm('打印组件不存在,是否下载?', '提示', {
  725. confirmButtonText: '确定',
  726. cancelButtonText: '取消',
  727. type: 'warning'
  728. }).then(() => {
  729. // 下载
  730. this.downloadLodop();
  731. }).catch(() => {
  732. // 取消下载
  733. });
  734. },
  735. downloadLodop() {
  736. let url = "{{mix('/js/lodop/CLodop_Setup_for_Win32NT.exe')}}"
  737. window.open(url, '_target');
  738. },
  739. showPrintDialog() { //
  740. this.getPrinterList();
  741. this.clodopPrintDialogVisible = true;
  742. },
  743. getPrinterList() { // 获取打印机列表
  744. this.printerList = [];
  745. let count = this.clodop.GET_PRINTER_COUNT();
  746. for (let i = 0; i < count; i++) {
  747. this.printerList.push({
  748. name: this.clodop.GET_PRINTER_NAME(i),
  749. value: i,
  750. });
  751. }
  752. },
  753. clodopPrint() {
  754. let {
  755. number, // 收货任务号
  756. warehouse, // 仓库
  757. for_single_member, // 投单员
  758. driver_name, // 司机姓名
  759. driver_phone, // 司机电话
  760. plate_number, // 车号牌
  761. driving_license_no, // 驾驶证号
  762. provide_list, // 是否提供清单
  763. receiving_type, // 收货类型
  764. owner, // 货主
  765. appointment_number, // 预约号
  766. } = this.receiving_task_print;
  767. this.clodop.PRINT_INITA(2, 0, 0, 0, "");
  768. this.clodop.SET_PRINT_PAGESIZE(2, '76mm', '130mm');
  769. this.clodop.ADD_PRINT_BARCODE(20, 70, 350, 50, "Code39", number);
  770. this.clodop.SET_PRINT_STYLEA(0, "FontSize", 10);
  771. this.clodop.ADD_PRINT_TEXT(100, 15, 100, 20, "收货任务号");
  772. this.clodop.SET_PRINT_STYLEA(0, "FontSize", 10);
  773. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  774. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  775. this.clodop.ADD_PRINT_TEXT(130, 15, 100, 20, "仓库");
  776. this.clodop.SET_PRINT_STYLEA(0, "FontSize", 10);
  777. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  778. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  779. this.clodop.ADD_PRINT_TEXT(160, 15, 100, 20, "司机姓名");
  780. this.clodop.SET_PRINT_STYLEA(0, "FontSize", 10);
  781. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  782. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  783. this.clodop.ADD_PRINT_TEXT(190, 15, 100, 20, "车牌号");
  784. this.clodop.SET_PRINT_STYLEA(0, "FontSize", 10);
  785. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  786. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  787. this.clodop.ADD_PRINT_TEXT(220, 15, 100, 20, "是否提供清单");
  788. this.clodop.SET_PRINT_STYLEA(0, "FontSize", 10);
  789. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  790. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  791. this.clodop.ADD_PRINT_TEXT(250, 15, 100, 20, "货主");
  792. this.clodop.SET_PRINT_STYLEA(0, "FontSize", 10);
  793. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  794. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  795. this.clodop.ADD_PRINT_TEXT(130, 245, 100, 20, "投单员");
  796. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  797. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  798. this.clodop.ADD_PRINT_TEXT(160, 245, 100, 20, "司机电话");
  799. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  800. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  801. this.clodop.ADD_PRINT_TEXT(190, 245, 100, 20, "驾驶证号");
  802. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  803. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  804. this.clodop.ADD_PRINT_TEXT(220, 245, 100, 20, "收货类型");
  805. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  806. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  807. this.clodop.ADD_PRINT_TEXT(250, 245, 100, 20, "预约号");
  808. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  809. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  810. this.clodop.ADD_PRINT_TEXT(100, 115, 250, 20, number); // number
  811. this.clodop.SET_PRINT_STYLEA(0, "FontSize", 10);
  812. this.clodop.SET_PRINT_STYLEA(0, "Alignment", 2);
  813. this.clodop.SET_PRINT_STYLEA(0, "Bold", 1);
  814. this.clodop.ADD_PRINT_TEXT(130, 115, 130, 20, warehouse); // warehouse
  815. this.clodop.ADD_PRINT_TEXT(160, 115, 100, 20, driver_name); //driver_name
  816. this.clodop.ADD_PRINT_TEXT(190, 115, 130, 20, plate_number); //plate_number
  817. this.clodop.ADD_PRINT_TEXT(220, 115, 100, 20, provide_list); //provide_list
  818. this.clodop.ADD_PRINT_TEXT(250, 115, 130, 20, owner); // owner
  819. this.clodop.ADD_PRINT_TEXT(130, 345, 100, 20, for_single_member); // for_single_member
  820. this.clodop.ADD_PRINT_TEXT(160, 345, 140, 20, driver_phone); // driver_phone
  821. this.clodop.ADD_PRINT_TEXT(190, 345, 140, 20, driving_license_no); // driving_license_no
  822. this.clodop.ADD_PRINT_TEXT(220, 345, 100, 20, receiving_type); // receiving_type
  823. this.clodop.ADD_PRINT_TEXT(250, 345, 140, 20, appointment_number); //appointment_number
  824. this.clodop.PREVIEW();
  825. }
  826. }
  827. })
  828. </script>
  829. <object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0>
  830. <embed id="LODOP_EM" type="application/x-print-lodop" width=0 height=0></embed>
  831. </object>
  832. @endsection