create.blade.php 45 KB

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