addOrEditDialog.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684
  1. <template>
  2. <ele-modal
  3. custom-class="ele-dialog-form long-dialog-form"
  4. :centered="true"
  5. :visible.sync="addOrEditDialogFlag"
  6. :title="title"
  7. :append-to-body="false"
  8. :close-on-click-modal="false"
  9. :maxable="true"
  10. :resizable="true"
  11. width="50%"
  12. :before-close="cancel"
  13. >
  14. <el-form ref="form" :rules="rules" :model="form" label-width="120px">
  15. <headerTitle title="基础信息"></headerTitle>
  16. <el-row>
  17. <el-col :span="12">
  18. <el-form-item label="任务类型" prop="taskType">
  19. <DictSelection
  20. clearable
  21. dictName="派车任务类型"
  22. v-model="form.taskType"
  23. :disabled="dialogType === 'view'"
  24. @itemChange="(val) => handleChangeFinLink(val)"
  25. ></DictSelection>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="12">
  29. <el-row>
  30. <el-col :span="20">
  31. <el-form-item label="车牌号" prop="trakNumber">
  32. <el-input v-model="form.trakNumber"></el-input>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="4" style="display: flex; justify-content: flex-end">
  36. <el-button type="primary" @click="handleCar">选择</el-button>
  37. </el-col>
  38. </el-row>
  39. </el-col>
  40. </el-row>
  41. <el-row>
  42. <el-col :span="12">
  43. <el-row>
  44. <el-col :span="20">
  45. <el-form-item label="司机" prop="driverName">
  46. <el-input v-model="form.driverName"></el-input>
  47. </el-form-item>
  48. </el-col>
  49. <el-col :span="4" style="display: flex; justify-content: flex-end">
  50. <el-button type="primary" @click="handleDriver">选择</el-button>
  51. </el-col>
  52. </el-row>
  53. </el-col>
  54. <el-col :span="12">
  55. <el-form-item label="里程" prop="mileage">
  56. <el-input type="number" :min="0" v-model="form.mileage" clearable>
  57. <template slot="append">KM</template>
  58. </el-input>
  59. </el-form-item>
  60. </el-col>
  61. </el-row>
  62. <el-row>
  63. <el-col :span="12">
  64. <el-form-item label="电话" prop="mileage">
  65. <el-input v-model="form.phone" clearable> </el-input>
  66. </el-form-item>
  67. </el-col>
  68. <el-col :span="12">
  69. <el-form-item label="计费方式" prop="billingMethod">
  70. <el-select
  71. v-model="form.billingMethod"
  72. placeholder="请选择"
  73. style="width: 100%"
  74. >
  75. <el-option
  76. v-for="item in billingMethodList"
  77. :label="item.label"
  78. :value="item.value"
  79. ></el-option>
  80. </el-select>
  81. </el-form-item>
  82. </el-col>
  83. </el-row>
  84. <el-row>
  85. <el-col :span="12">
  86. <el-form-item label="数量" prop="quantity">
  87. <el-input
  88. type="number"
  89. :controls="false"
  90. style="width: 100%"
  91. :min="0"
  92. v-model="form.quantity"
  93. @change="handleGetTotalCost"
  94. >
  95. <template v-if="form.billingMethod == 1" slot="append"
  96. >m³</template
  97. >
  98. <template v-else-if="form.billingMethod == 2" slot="append"
  99. >KG</template
  100. >
  101. <template v-else slot="append">辆车</template>
  102. </el-input>
  103. </el-form-item>
  104. </el-col>
  105. <el-col :span="12">
  106. <el-form-item label="单价" prop="price">
  107. <el-input-number
  108. :controls="false"
  109. style="width: 100%"
  110. :min="0"
  111. v-model="form.price"
  112. @change="handleGetTotalCost"
  113. ></el-input-number>
  114. </el-form-item>
  115. </el-col>
  116. </el-row>
  117. <el-row>
  118. <el-col :span="12">
  119. <el-form-item label="出发地" prop="startPlace">
  120. <el-input v-model="form.startPlace"></el-input>
  121. </el-form-item>
  122. </el-col>
  123. <el-col :span="12">
  124. <el-form-item label="目的地" prop="endPlace">
  125. <el-input v-model="form.endPlace"></el-input>
  126. </el-form-item>
  127. </el-col>
  128. </el-row>
  129. <el-row>
  130. <el-col :span="12">
  131. <el-form-item label="开始时间" prop="realStartTime">
  132. <el-date-picker
  133. v-model="form.realStartTime"
  134. :picker-options="{
  135. disabledDate: (time) => {
  136. return (
  137. form.realEndTime &&
  138. time.getTime() > new Date(form.realEndTime)
  139. );
  140. }
  141. }"
  142. type="datetime"
  143. style="width: 100%"
  144. value-format="yyyy-MM-dd HH:mm:ss"
  145. placeholder="选择日期时间"
  146. >
  147. </el-date-picker>
  148. </el-form-item>
  149. </el-col>
  150. <el-col :span="12">
  151. <el-form-item label="完成时间" prop="realEndTime">
  152. <el-date-picker
  153. v-model="form.realEndTime"
  154. :picker-options="{
  155. disabledDate: (time) => {
  156. return (
  157. form.realStartTime &&
  158. time.getTime() < new Date(form.realStartTime)
  159. );
  160. }
  161. }"
  162. type="datetime"
  163. style="width: 100%"
  164. value-format="yyyy-MM-dd HH:mm:ss"
  165. placeholder="选择日期时间"
  166. >
  167. </el-date-picker>
  168. </el-form-item>
  169. </el-col>
  170. </el-row>
  171. <el-row>
  172. <el-col :span="24">
  173. <el-form-item label="总费用" prop="totalCost">
  174. <el-input v-model="form.totalCost" disabled></el-input>
  175. </el-form-item>
  176. </el-col>
  177. </el-row>
  178. <el-row>
  179. <el-col :span="24">
  180. <el-form-item label="备注" prop="remark">
  181. <el-input type="textarea" v-model="form.remark"></el-input>
  182. </el-form-item>
  183. </el-col>
  184. </el-row>
  185. <el-row>
  186. <el-col :span="12">
  187. <el-form-item label="单据来源" required>
  188. <!-- <el-input
  189. v-model="form.taskCode"
  190. @click.native="(val) => handleSelectData(val)"
  191. clearable
  192. ></el-input> -->
  193. <el-button type="primary" @click="handleSelectData">选择</el-button>
  194. </el-form-item>
  195. </el-col>
  196. </el-row>
  197. <el-row>
  198. <ele-pro-table
  199. ref="table"
  200. :columns="documentList"
  201. :datasource="tableList"
  202. row-key="id"
  203. class="dict-table"
  204. >
  205. </ele-pro-table>
  206. </el-row>
  207. </el-form>
  208. <div slot="footer">
  209. <el-button type="primary" @click="handleSave" v-if="dialogType != 'view'"
  210. >保存</el-button
  211. >
  212. <el-button @click="cancel">返回</el-button>
  213. </div>
  214. <!-- 选择司机 -->
  215. <select-driver-dialog
  216. ref="selectDriverDialogRef"
  217. :selectDriverDialogFlag.sync="selectDriverDialogFlag"
  218. v-if="selectDriverDialogFlag"
  219. @changeParent="getDriverInfo"
  220. ></select-driver-dialog>
  221. <select-car-dialog
  222. ref="selectCarDialogRef"
  223. :selectCarDialogFlag.sync="selectCarDialogFlag"
  224. v-if="selectCarDialogFlag"
  225. @changeParent="getCarInfo"
  226. ></select-car-dialog>
  227. <!-- 销售发货单 -->
  228. <sendListDialog
  229. v-if="sendListDialogVisible"
  230. :sendListDialogVisible.sync="sendListDialogVisible"
  231. ref="sendListDialogRef"
  232. @changeParent="changeOrder"
  233. ></sendListDialog>
  234. <!-- 委外发货单 -->
  235. <out-source-send-dialog
  236. :out-source-send-dialog-flag.sync="outSourceSendDialogFlag"
  237. v-if="outSourceSendDialogFlag"
  238. ref="outSourceSendDialogRef"
  239. @changeParent="getOutSourceInfo"
  240. ></out-source-send-dialog>
  241. <!-- 采购收货单 -->
  242. <purchaseReceivingGoodsDialog
  243. ref="purchaseReceivingGoodsRef"
  244. @changeParent="getPurchaseReceivingGoodsInfo"
  245. ></purchaseReceivingGoodsDialog>
  246. <!-- 受托发货单 -->
  247. <entrusted-receive-dialog
  248. :entrusted-receive-dialog-flag.sync="entrustedReceiveDialogFlag"
  249. v-if="entrustedReceiveDialogFlag"
  250. @changeParent="getEntrustedReceiveInfo"
  251. ref="entrustedReceiveDialogRef"
  252. ></entrusted-receive-dialog>
  253. <!-- 销售退货 -->
  254. <return-order-dialog
  255. :returnOrderDialogFlag.sync="returnOrderDialogFlag"
  256. v-if="returnOrderDialogFlag"
  257. @changeParent="getSReturnOrderInfo"
  258. ref="returnOrderDialogRef"
  259. >
  260. </return-order-dialog>
  261. <!-- 采购退货 -->
  262. <purchase-return-order-dialog
  263. :purchaseReturnOrderDialogFlag.sync="purchaseReturnOrderDialogFlag"
  264. v-if="purchaseReturnOrderDialogFlag"
  265. @changeParent="getPReturnOrderInfo"
  266. ref="returnOrderDialogRef"
  267. ></purchase-return-order-dialog>
  268. <!-- 调拨发货 -->
  269. <inventory-allocation-dialog
  270. ref="inventoryAllocationDialogRef"
  271. :inventoryAllocationDialogFlag.sync="inventoryAllocationDialogFlag"
  272. v-if="inventoryAllocationDialogFlag"
  273. @changeParent="getTransferSendInfo"
  274. ></inventory-allocation-dialog>
  275. </ele-modal>
  276. </template>
  277. <script>
  278. import { logistictraklistnoteSaveAPI } from '@/api/transportManager/shipManage/taskWork';
  279. import selectCarDialog from '@/views/transportManager/shipManage/dispatchManage/components/selectCarDialog.vue';
  280. import selectDriverDialog from '@/views/transportManager/shipManage/dispatchManage/components/selectDriverDialog.vue';
  281. import returnOrderDialog from '@/views/saleManage/saleOrder/customerReturnOrder/returnOrderDialog.vue';
  282. import entrustedReceiveDialog from '@/views/saleManage/saleOrder/invoice/components/entrustedReceiveDialog.vue';
  283. import outSourceSendDialog from '@/views/purchasingManage/purchaseOrder/invoice/components/outSourceSendDialog.vue';
  284. import sendListDialog from '@/views/transportManager/shipManage/taskWorkManage/components/sendListDialog.vue';
  285. import purchaseReceivingGoodsDialog from '@/views/purchasingManage/purchaseOrder/returnGoods/components/sendListDialog.vue';
  286. import purchaseReturnOrderDialog from '@/views/transportManager/shipManage/dispatchManage/components/purchaseReturnOrderDialog.vue';
  287. import inventoryAllocationDialog from '@/views/transportManager/shipManage/dispatchManage/components/inventoryAllocationDialog.vue';
  288. export default {
  289. name: 'addOrEditDialog',
  290. components: {
  291. selectCarDialog,
  292. selectDriverDialog,
  293. returnOrderDialog,
  294. entrustedReceiveDialog,
  295. outSourceSendDialog,
  296. sendListDialog,
  297. purchaseReceivingGoodsDialog,
  298. purchaseReturnOrderDialog,
  299. inventoryAllocationDialog
  300. },
  301. props: {
  302. addOrEditDialogFlag: {
  303. type: Boolean,
  304. default: false
  305. }
  306. },
  307. data() {
  308. return {
  309. editIndex: undefined, //当前修改数据的下标
  310. selectCarDialogFlag: false,
  311. selectDriverDialogFlag: false,
  312. outSourceSendDialogFlag: false,
  313. entrustedReceiveDialogFlag: false,
  314. returnOrderDialogFlag: false,
  315. purchaseReturnOrderDialogFlag: false,
  316. inventoryAllocationDialogFlag: false,
  317. billingMethodList: [
  318. {
  319. label: '按方计费',
  320. value: 1
  321. },
  322. {
  323. label: '按重量计费',
  324. value: 2
  325. },
  326. {
  327. label: '专车计费',
  328. value: 3
  329. }
  330. ],
  331. title: '',
  332. form: {
  333. // id: '',
  334. trakId: '',
  335. trakNumber: '',
  336. driverId: '',
  337. driverName: '',
  338. phone: '',
  339. taskType: '',
  340. // taskCode: '',
  341. realStartTime: '',
  342. realEndTime: '',
  343. startPlace: '',
  344. endPlace: '',
  345. billingMethod: 1,
  346. totalCost: '',
  347. price: undefined,
  348. quantity: '',
  349. remark: '',
  350. type: 1
  351. },
  352. dialogType: '',
  353. rules: {
  354. taskType: { required: true, message: '请选择', trigger: 'change' },
  355. // taskCode: { required: true, message: '请选择', trigger: 'change' },
  356. trakNumber: { required: true, message: '请选择', trigger: 'change' },
  357. billingMethod: {
  358. required: true,
  359. message: '请选择',
  360. trigger: 'change'
  361. },
  362. price: {
  363. required: true,
  364. message: '请输入',
  365. trigger: ['change', 'blur']
  366. },
  367. quantity: {
  368. required: true,
  369. message: '请输入',
  370. trigger: ['change', 'blur']
  371. },
  372. driverName: { required: true, message: '请选择', trigger: 'change' }
  373. },
  374. currentRow: {},
  375. sendListDialogVisible: false,
  376. tableList: [],
  377. documentList: [
  378. {
  379. columnKey: 'index',
  380. label: '序号',
  381. type: 'index',
  382. width: 55,
  383. align: 'center',
  384. showOverflowTooltip: true
  385. },
  386. {
  387. prop: 'code',
  388. label: '单据编码',
  389. align: 'center',
  390. showOverflowTooltip: true
  391. },
  392. {
  393. prop: 'orderNo',
  394. label: '订单编码',
  395. align: 'center',
  396. showOverflowTooltip: true
  397. },
  398. {
  399. prop: 'contactName',
  400. label: '名称',
  401. align: 'center',
  402. showOverflowTooltip: true
  403. }
  404. ]
  405. };
  406. },
  407. mounted() {},
  408. methods: {
  409. //初始化
  410. async init(row = {}, type) {
  411. this.currentRow = row;
  412. this.dialogType = type;
  413. this.title = type == 'add' ? '新增' : '修改';
  414. this.form.id = this.currentRow.id;
  415. },
  416. handleGetTotalCost(val) {
  417. if (this.form.quantity && this.form.price) {
  418. this.form.totalCost =
  419. Number(this.form.quantity) * Number(this.form.price);
  420. } else {
  421. this.form.totalCost = '';
  422. }
  423. },
  424. //选择司机
  425. handleDriver(row, index) {
  426. this.selectDriverDialogFlag = true;
  427. },
  428. //选择司机回调
  429. getDriverInfo(row) {
  430. this.form.driverId = row.driverId;
  431. this.form.driverName = row.driverName;
  432. this.form.phone = row.phone;
  433. },
  434. //选择车辆
  435. handleCar(row, index) {
  436. this.selectCarDialogFlag = true;
  437. },
  438. //选择车辆回调
  439. getCarInfo(row) {
  440. this.form.driverId = row.defaultDriverId;
  441. this.form.driverName = row.defaultDriver;
  442. this.form.phone = row.phone;
  443. this.form.trakNumber = row.trakNumber;
  444. this.form.trakId = row.id;
  445. },
  446. cancel() {
  447. this.$emit('update:addOrEditDialogFlag', false);
  448. },
  449. //修改任务类型
  450. handleChangeFinLink(val, row, index) {
  451. // this.setSelectData({
  452. // id: '',
  453. // code: ''
  454. // });
  455. this.tableList = [];
  456. },
  457. setSelectData(val) {
  458. // this.$set(this.form, 'taskId', val.id);
  459. // this.$set(this.form, 'taskCode', val.code);
  460. console.log(val, 'val ++++++++++');
  461. },
  462. handleSelectData(val, row, index) {
  463. // if (val.target.nodeName == 'I') {
  464. // this.form.taskId = '';
  465. // this.form.taskCode = '';
  466. // return;
  467. // }
  468. if (!this.form.taskType) {
  469. this.$message.warning('请先选择任务类型');
  470. return;
  471. }
  472. switch (this.form.taskType) {
  473. case '1': //销售发货
  474. this.handleOrderBtn(row);
  475. break;
  476. case '2': //委外发货
  477. this.handleOutsourceSend(row);
  478. break;
  479. case '3': //采购收货
  480. this.handlePurchaseReceivingGoods(row);
  481. break;
  482. case '4': //受托发货
  483. this.handleEntrustedReceive(row);
  484. break;
  485. case '5': //销售退货
  486. this.handleSaleReturnOrder(row);
  487. break;
  488. case '6': //采购退货
  489. this.handlePurchaseReturnOrder(row);
  490. break;
  491. case '7': //调拨发货
  492. this.handleTransferSend(row);
  493. break;
  494. }
  495. },
  496. //选择调拨发货单
  497. handleTransferSend() {
  498. this.inventoryAllocationDialogFlag = true;
  499. },
  500. //调拨发货单回调
  501. getTransferSendInfo(params) {
  502. console.log(params, 'params ++++++++++');
  503. let row = {
  504. id: params.id,
  505. code: params.allotCode,
  506. orderNo: params.saleOrderNos,
  507. contactName: params.name
  508. };
  509. this.tableList = [row];
  510. // this.tableList = params.map((item) => {
  511. // return {
  512. // id: item.id, // id
  513. // code: item.allotCode, // 发货编码
  514. // orderNo: item.saleOrderNos,
  515. // contactName: item.name
  516. // };
  517. // });
  518. },
  519. //选择发货单
  520. handleOrderBtn() {
  521. // this.$refs.sendListDialogRef.open();
  522. this.sendListDialogVisible = true;
  523. },
  524. //选择发货单回调 ****
  525. changeOrder(params) {
  526. // let row = {
  527. // id: params.id,
  528. // code: params.docNo
  529. // }
  530. // this.setSelectData(row)
  531. // this.setSelectData(params);
  532. this.tableList = params.map((item) => {
  533. return {
  534. id: item.id, // id
  535. code: item.docNo, // 发货编码
  536. orderNo: item.orderNo,
  537. contactName: item.contactName
  538. };
  539. });
  540. },
  541. //选择采购收货单
  542. handlePurchaseReceivingGoods() {
  543. this.$refs.purchaseReceivingGoodsRef.open();
  544. },
  545. //选择采购收货单回调 ****
  546. getPurchaseReceivingGoodsInfo(params) {
  547. // let row = {
  548. // id: params.id,
  549. // code: params.receiveNo
  550. // };
  551. // this.setSelectData(row);
  552. let row = {
  553. id: params.id,
  554. code: params.receiveNo,
  555. orderNo: params.orderNo,
  556. contactName: params.supplierName
  557. };
  558. this.tableList = [row];
  559. },
  560. //选择委外发货单弹框
  561. handleOutsourceSend() {
  562. this.outSourceSendDialogFlag = true;
  563. this.$nextTick(() => {
  564. this.$refs.outSourceSendDialogRef.init();
  565. });
  566. },
  567. //选择委外发货单回调
  568. getOutSourceInfo(params) {
  569. // let row = {
  570. // id: params.id,
  571. // code: params.code
  572. // };
  573. // this.setSelectData(row);
  574. let row = {
  575. id: params.id,
  576. code: params.code,
  577. orderNo: params.orderNo,
  578. contactName: params.supplierName
  579. };
  580. this.tableList = [row];
  581. },
  582. //选择受托收货单弹框
  583. handleEntrustedReceive(e) {
  584. this.entrustedReceiveDialogFlag = true;
  585. this.$nextTick(() => {
  586. this.$refs.entrustedReceiveDialogRef.init();
  587. });
  588. },
  589. //获取受托收货单数据回调
  590. async getEntrustedReceiveInfo(params) {
  591. // let row = {
  592. // id: params.id,
  593. // code: params.code
  594. // };
  595. // this.setSelectData(row);
  596. let row = {
  597. id: params.id,
  598. code: params.code,
  599. orderNo: params.orderNo,
  600. contactName: params.contactName
  601. };
  602. this.tableList = [row];
  603. },
  604. //选择销售退货单
  605. handleSaleReturnOrder() {
  606. this.returnOrderDialogFlag = true;
  607. // this.$nextTick(() => {
  608. // this.$refs.returnOrderDialogRef.init()
  609. // })
  610. },
  611. //销售退货单回调
  612. getSReturnOrderInfo(params) {
  613. // let row = {
  614. // id: params.id,
  615. // code: params.returnNo
  616. // };
  617. // this.setSelectData(row);
  618. let row = {
  619. id: params.id,
  620. code: params.returnNo,
  621. orderNo: params.orderNo,
  622. contactName: params.contactName
  623. };
  624. this.tableList = [row];
  625. },
  626. //选择采购退货单
  627. handlePurchaseReturnOrder() {
  628. this.purchaseReturnOrderDialogFlag = true;
  629. },
  630. //采购退货单回调
  631. getPReturnOrderInfo(params) {
  632. // let row = {
  633. // id: params.id,
  634. // code: params.returnNo
  635. // };
  636. // this.setSelectData(row);
  637. let row = {
  638. id: params.id,
  639. code: params.returnNo,
  640. orderNo: params.orderNo,
  641. contactName: params.contactName
  642. };
  643. this.tableList = [row];
  644. },
  645. //
  646. handleSave() {
  647. if (this.tableList.length == 0) {
  648. return this.$message.warning('请选择单据来源数据');
  649. }
  650. this.$refs.form.validate(async (valid) => {
  651. if (!valid) return this.$message.warning('有必填项未填,请检查');
  652. let params = {
  653. ...this.form
  654. };
  655. // ***** 新增需求 销售发货可以选择多个 其它的还是一个
  656. if (this.form.taskType == 1) {
  657. params.orderSendIds = this.tableList.map((item) => item.id);
  658. } else {
  659. params.taskCode = this.tableList[0].code;
  660. params.taskId = this.tableList[0].id;
  661. }
  662. await logistictraklistnoteSaveAPI(params);
  663. this.$message.success('操作成功');
  664. this.$emit('reload');
  665. this.cancel();
  666. });
  667. }
  668. }
  669. };
  670. </script>
  671. <style scoped lang="scss">
  672. :deep(.el-form-item) {
  673. margin-bottom: 20px;
  674. }
  675. </style>