create.blade.php 42 KB

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