deliveryNoticeForm.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807
  1. <template>
  2. <a-spin :spinning="loading">
  3. <JFormContainer :disabled="disabled">
  4. <template #detail>
  5. <a-form v-bind="formItemLayout" name="quotationFormForm" ref="formRef">
  6. <a-row>
  7. <a-col :span="12">
  8. <a-form-item
  9. label="发货通知单号(bill code)"
  10. v-bind="validateInfos.billCode"
  11. id="quotationFormForm-billCode"
  12. name="billCode"
  13. :labelCol="formItemLayout.labelCol1"
  14. :wrapperCol="formItemLayout.wrapperCol1"
  15. >
  16. <a-input v-model:value="formData.billCode" placeholder="自动生成" disabled />
  17. </a-form-item>
  18. </a-col>
  19. <a-col :span="12">
  20. <a-form-item
  21. label="发货日期(delivery date)"
  22. v-bind="validateInfos.deliveryDate"
  23. id="quotationFormForm-deliveryDate"
  24. name="deliveryDate"
  25. >
  26. <a-date-picker
  27. placeholder="请选择发货日期(delivery date)"
  28. v-model:value="formData.deliveryDate"
  29. value-format="YYYY-MM-DD"
  30. style="width: 100%"
  31. allow-clear
  32. />
  33. </a-form-item>
  34. </a-col>
  35. <a-col :span="12">
  36. <a-form-item label="项目(project)" v-bind="validateInfos.projectName" id="quotationFormForm-projectName" name="projectName">
  37. <a-input-search
  38. v-model:value="formData.projectName"
  39. placeholder="请输入项目(project)"
  40. readonly
  41. allow-clear
  42. enter-button="Search"
  43. :disabled="notAllowEdit"
  44. @search="onSearchProject"
  45. />
  46. </a-form-item>
  47. </a-col>
  48. <a-col :span="12">
  49. <a-form-item
  50. label="客户(customer)"
  51. v-bind="validateInfos.customer"
  52. id="quotationFormForm-customer"
  53. name="customer"
  54. :labelCol="formItemLayout.labelCol1"
  55. :wrapperCol="formItemLayout.wrapperCol1"
  56. >
  57. <JSelectInput v-model:value="formData.customer" placeholder="请选择" :options="customerOption" disabled />
  58. </a-form-item>
  59. </a-col>
  60. <a-col :span="12">
  61. <a-form-item label="优先级(priority)" v-bind="validateInfos.priority" id="quotationFormForm-priority" name="priority">
  62. <JDictSelectTag v-model:value="formData.priority" placeholder="请选择" dictCode="priority" disabled />
  63. </a-form-item>
  64. </a-col>
  65. <a-col :span="12">
  66. <a-form-item
  67. label="产品分类(production class)"
  68. v-bind="validateInfos.productionClass"
  69. id="quotationFormForm-productionClass"
  70. name="productionClass"
  71. :labelCol="formItemLayout.labelCol1"
  72. :wrapperCol="formItemLayout.wrapperCol1"
  73. >
  74. <JSelectInput v-model:value="formData.productionClass" placeholder="请选择" :options="classOption" disabled />
  75. </a-form-item>
  76. </a-col>
  77. <a-col :span="12">
  78. <a-form-item label="机型(model)" v-bind="validateInfos.model" id="quotationFormForm-model" name="model">
  79. <JSelectMultiple v-model:value="formData.model" placeholder="请选择" dictCode="model_typer" disabled />
  80. </a-form-item>
  81. </a-col>
  82. <a-col :span="12">
  83. <a-form-item
  84. label="厂家(maker)"
  85. v-bind="validateInfos.maker"
  86. id="quotationFormForm-maker"
  87. name="maker"
  88. :labelCol="formItemLayout.labelCol1"
  89. :wrapperCol="formItemLayout.wrapperCol1"
  90. >
  91. <a-input v-model:value="formData.maker" placeholder="请输入厂家(maker)" allow-clear disabled />
  92. </a-form-item>
  93. </a-col>
  94. <a-col :span="12">
  95. <a-form-item label="币种(currency)" v-bind="validateInfos.currency" id="quotationFormForm-currency" name="currency">
  96. <JDictSelectTag v-model:value="formData.currency" placeholder="请选择" dictCode="currency" disabled />
  97. </a-form-item>
  98. </a-col>
  99. <a-col :span="12">
  100. <a-form-item
  101. label="交货条款(delivery terms)"
  102. v-bind="validateInfos.deliveryTerms"
  103. id="quotationFormForm-deliveryTerms"
  104. name="deliveryTerms"
  105. :labelCol="formItemLayout.labelCol1"
  106. :wrapperCol="formItemLayout.wrapperCol1"
  107. >
  108. <JDictSelectTag v-model:value="formData.deliveryTerms" placeholder="请选择" dictCode="delivery_terms" disabled />
  109. </a-form-item>
  110. </a-col>
  111. <a-col :span="12">
  112. <a-form-item label="发货方式(delivery)" v-bind="validateInfos.delivery" id="SaleOrderForm-delivery" name="delivery">
  113. <JDictSelectTag v-model:value="formData.delivery" placeholder="请选择" dictCode="delivery_methods" disabled />
  114. </a-form-item>
  115. </a-col>
  116. <a-col :span="12">
  117. <a-form-item
  118. label="交货地点(place of delivery)"
  119. v-bind="validateInfos.deliveryAddress"
  120. id="quotationFormForm-deliveryAddress"
  121. name="deliveryAddress"
  122. >
  123. <a-input v-model:value="formData.deliveryAddress" placeholder="请输入交货地点(place of delivery)" allow-clear AutoComplete="off" />
  124. </a-form-item>
  125. </a-col>
  126. <a-col :span="12">
  127. <a-form-item
  128. label="是否希望出口(isExport)"
  129. v-bind="validateInfos.isExport"
  130. id="quotationFormForm-isExport"
  131. name="isExport"
  132. :labelCol="formItemLayout.labelCol1"
  133. :wrapperCol="formItemLayout.wrapperCol1"
  134. >
  135. <JDictSelectTag v-model:value="formData.isExport" placeholder="请选择" dictCode="yes_or_no" />
  136. </a-form-item>
  137. </a-col>
  138. <a-col :span="12">
  139. <a-form-item
  140. label="质保期(warranty period)"
  141. v-bind="validateInfos.warrantyPeriod"
  142. id="SaleOrderForm-warrantyPeriod"
  143. name="warrantyPeriod"
  144. >
  145. <a-input
  146. v-model:value="formData.warrantyPeriod"
  147. placeholder="请输入"
  148. style="width: 85%; margin-right: 1%"
  149. AutoComplete="off"
  150. />月(month)
  151. </a-form-item>
  152. </a-col>
  153. <a-col :span="12">
  154. <a-form-item
  155. label="销售部门(sale department)"
  156. v-bind="validateInfos.saleDepartment"
  157. id="SaleInquiryFormForm-saleDepartment"
  158. name="saleDepartment"
  159. >
  160. <a-input v-model:value="formData.saleDepartmentName" placeholder="" allow-clear disabled />
  161. </a-form-item>
  162. </a-col>
  163. <a-col :span="12" v-if="1==0">
  164. <a-form-item
  165. label="联系人(linkMan)"
  166. v-bind="validateInfos.linkMan"
  167. id="quotationFormForm-linkMan"
  168. name="linkMan"
  169. :labelCol="formItemLayout.labelCol1"
  170. :wrapperCol="formItemLayout.wrapperCol1"
  171. >
  172. <a-input v-model:value="formData.linkMan" placeholder="请输入联系人(linkMan)" allow-clear AutoComplete="off" />
  173. </a-form-item>
  174. </a-col>
  175. <a-col :span="12">
  176. <a-form-item
  177. label="包装要求(packaging requirement)"
  178. v-bind="validateInfos.packagingRequirement"
  179. id="quotationFormForm-packagebRequirement"
  180. name="packagebRequirement"
  181. :labelCol="formItemLayout.labelCol1"
  182. :wrapperCol="formItemLayout.wrapperCol1"
  183. >
  184. <a-input
  185. v-model:value="formData.packagebRequirement"
  186. placeholder="请输入包装要求(packaging requirement)"
  187. allow-clear
  188. AutoComplete="off"
  189. />
  190. </a-form-item>
  191. </a-col>
  192. <a-col :span="12" v-if="1==0">
  193. <a-form-item label="联系电话(linkMan phone)" v-bind="validateInfos.linkNumber" id="quotationFormForm-linkNumber" name="linkNumber">
  194. <a-input v-model:value="formData.linkNumber" placeholder="" allow-clear AutoComplete="off" />
  195. </a-form-item>
  196. </a-col>
  197. <a-col :span="12">
  198. <a-form-item label="业务员(salesman)" v-bind="validateInfos.salesman" id="quotationFormForm-salesman" name="salesman">
  199. <a-input v-model:value="formData.salesmanName" placeholder="" allow-clear disabled />
  200. </a-form-item>
  201. </a-col>
  202. <a-col :span="12">
  203. <a-form-item
  204. label="F号(F number)"
  205. v-bind="validateInfos.fnumber"
  206. id="quotationFormForm-fnumber"
  207. name="fnumber"
  208. :labelCol="formItemLayout.labelCol1"
  209. :wrapperCol="formItemLayout.wrapperCol1"
  210. >
  211. <a-input v-model:value="formData.fnumber" placeholder="请选择" AutoComplete="off" />
  212. </a-form-item>
  213. </a-col>
  214. <a-col :span="12">
  215. <a-form-item label="提单号(B/L NO)" v-bind="validateInfos.blno" id="quotationFormForm-blno" name="blno">
  216. <a-input v-model:value="formData.blno" placeholder="请输入" allow-clear AutoComplete="off" />
  217. </a-form-item>
  218. </a-col>
  219. <a-col :span="12">
  220. <a-form-item
  221. label="开票抬头(invoice header)"
  222. v-bind="validateInfos.invoiceHeader"
  223. id="SaleOrderForm-invoiceHeader"
  224. name="invoiceHeader"
  225. :labelCol="formItemLayout.labelCol1"
  226. :wrapperCol="formItemLayout.wrapperCol1"
  227. >
  228. <a-textarea v-model:value="formData.invoiceHeader" placeholder="" allow-clear AutoComplete="off" :rows="3"/>
  229. </a-form-item>
  230. </a-col>
  231. <a-col :span="12">
  232. <a-form-item
  233. label="是否有第三方运费(otherFee)"
  234. v-bind="validateInfos.otherFee"
  235. id="SaleOrderForm-otherFee"
  236. name="otherFee"
  237. :labelCol="formItemLayout.labelCol1"
  238. :wrapperCol="formItemLayout.wrapperCol1"
  239. >
  240. <a-select v-model:value="formData.otherFee">
  241. <a-select-option value="是"></a-select-option>
  242. <a-select-option value="否"></a-select-option>
  243. </a-select>
  244. </a-form-item>
  245. </a-col>
  246. <a-col :span="12">
  247. <a-form-item
  248. label="是否收取客户运费(Customer shipping fee)"
  249. v-bind="validateInfos.customerFee"
  250. id="SaleOrderForm-customerFee"
  251. name="customerFee"
  252. :labelCol="formItemLayout.labelCol1"
  253. :wrapperCol="formItemLayout.wrapperCol1"
  254. >
  255. <a-select v-model:value="formData.customerFee">
  256. <a-select-option value="是"></a-select-option>
  257. <a-select-option value="否"></a-select-option>
  258. </a-select>
  259. </a-form-item>
  260. </a-col>
  261. <a-col :span="12">
  262. <a-form-item label="收货地址(address)" v-bind="validateInfos.address" id="quotationFormForm-address" name="address">
  263. <a-textarea v-model:value="formData.address" placeholder="" allow-clear AutoComplete="off" :rows="3"/>
  264. </a-form-item>
  265. </a-col>
  266. <a-col :span="12">
  267. <a-form-item
  268. label="包装详情(packingDetails))"
  269. v-bind="validateInfos.packingDetails"
  270. id="SaleOrderForm-packingDetails "
  271. name="packingDetails "
  272. >
  273. <a-textarea v-model:value="formData.packingDetails" placeholder="请输入" AutoComplete="off" :rows="3"/>
  274. </a-form-item>
  275. </a-col>
  276. <a-col :span="12">
  277. <a-form-item label="备注(notes)" v-bind="validateInfos.notes" id="quotationFormForm-notes" name="notes">
  278. <a-textarea v-model:value="formData.notes" placeholder="请输入备注(notes)" allow-clear AutoComplete="off" :rows="3"/>
  279. </a-form-item>
  280. </a-col>
  281. </a-row>
  282. <a-row>
  283. </a-row>
  284. </a-form>
  285. </template>
  286. </JFormContainer>
  287. <!-- 子表单区域 -->
  288. <a-tabs v-model:activeKey="activeKey" animated style="padding: 24px; padding-top: 0px">
  289. <a-tab-pane tab="发货通知单 - 发货明细(delivery details)" key="deliveryDetailFormProduct" :forceRender="true">
  290. <a-button type="primary" @click="selectSaleOrderList" style="margin-right: 1%; margin-bottom: 1%"> 选择销售订单(selete saleOrder)</a-button>
  291. <a-button type="primary" style="margin-right: 1%; margin-bottom: 1%" @click="selectVirtualProducts">
  292. 选择虚拟产品(select virtual products)</a-button
  293. >
  294. <j-vxe-table
  295. :keep-source="true"
  296. resizable
  297. ref="deliveryDetailFormProductTableRef"
  298. :loading="deliveryDetailFormProductTable.loading"
  299. :columns="deliveryDetailFormProductTable.columns"
  300. :dataSource="deliveryDetailFormProductTable.dataSource"
  301. :maxHeight="340"
  302. :disabled="disabled"
  303. :rowNumber="true"
  304. :rowSelection="true"
  305. asyncRemove
  306. @value-change="changeValues"
  307. >
  308. <template #action="props">
  309. <a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)">
  310. <a>删除(delete)</a>
  311. </a-popconfirm>
  312. </template>
  313. </j-vxe-table>
  314. </a-tab-pane>
  315. <a-tab-pane tab="发货通知单 - 船明细(ship details)" key="deliveryNoticeFormShip" :forceRender="true">
  316. <j-vxe-table
  317. :keep-source="true"
  318. resizable
  319. ref="deliveryNoticeFormShipTableRef"
  320. :loading="deliveryNoticeFormShipTable.loading"
  321. :columns="deliveryNoticeFormShipTable.columns"
  322. :dataSource="deliveryNoticeFormShipTable.dataSource"
  323. :maxHeight="340"
  324. :disabled="disabled"
  325. :rowNumber="true"
  326. :rowSelection="true"
  327. >
  328. <template #action="props">
  329. <a @click="viewAccessory(props)">查看配件信息(view accessory information)</a>
  330. </template>
  331. </j-vxe-table>
  332. </a-tab-pane>
  333. </a-tabs>
  334. <BaseShipArchiveAccessoriesModal ref="BaseShipArchiveAccessoriesListRef" />
  335. <SelectProjectModal ref="SelectProjectModalRef" @select-project="addProject" />
  336. <SelectPrpductModal ref="SelectPrpductModalRef" @select-product="addProduct" />
  337. <SelectSaleOrderModal ref="SelectSaleOrderModalRef" @select-sale-order="addFormSaleOrder" />
  338. </a-spin>
  339. </template>
  340. <script lang="ts">
  341. import { defineComponent, ref, reactive, computed, toRaw, onMounted } from 'vue';
  342. import { defHttp } from '/@/utils/http/axios';
  343. import { useValidateAntFormAndTable } from '/@/hooks/system/useJvxeMethods';
  344. import {
  345. querydeliveryNoticeFormShipListByMainId,
  346. querydeliveryNoticeFormProductListByMainId,
  347. queryDataById,
  348. saveOrUpdate,
  349. } from '../delivertNoticeForm.api';
  350. import { JVxeTable } from '/@/components/jeecg/JVxeTable';
  351. import { deliveryNoticeShipColumns, deliveryNoticeProductColumns } from '../delivertNoticeForm.data';
  352. import BaseShipArchiveAccessoriesModal from '../../../publicComponents/BaseShipArchiveAccessoriesModal.vue';
  353. import SelectPrpductModal from '../../../publicComponents/SelectPrpductModal.vue';
  354. import SelectProjectModal from '../../../publicComponents/SelectProjectModal.vue';
  355. import SelectSaleOrderModal from '../../../publicComponents/SelectSaleOrderModal.vue';
  356. import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
  357. import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
  358. import { JDictSelectTag, JSelectMultiple } from '/@/components/Form';
  359. import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
  360. import { Form, message } from 'ant-design-vue';
  361. import { useUserStore } from '/@/store/modules/user';
  362. import moment from 'moment';
  363. const userStore = useUserStore();
  364. const useForm = Form.useForm;
  365. export default defineComponent({
  366. name: 'DeliveryNoticeForm',
  367. components: {
  368. JVxeTable,
  369. JFormContainer,
  370. BaseShipArchiveAccessoriesModal,
  371. SelectPrpductModal,
  372. JUpload,
  373. SelectProjectModal,
  374. JDictSelectTag,
  375. JSelectInput,
  376. JSelectMultiple,
  377. SelectSaleOrderModal,
  378. },
  379. props: {
  380. formDisabled: {
  381. type: Boolean,
  382. default: false,
  383. },
  384. formData: { type: Object, default: () => {} },
  385. formBpm: { type: Boolean, default: true },
  386. },
  387. emits: ['success'],
  388. setup(props, { emit }) {
  389. const loading = ref(false);
  390. const formRef = ref();
  391. const SelectSaleOrderModalRef = ref();
  392. const SelectPrpductModalRef = ref();
  393. var SelectProjectModalRef = ref();
  394. const deliveryNoticeFormShipTableRef = ref();
  395. const deliveryNoticeFormShipTable = reactive<Record<string, any>>({
  396. loading: false,
  397. columns: deliveryNoticeShipColumns,
  398. dataSource: [],
  399. });
  400. const deliveryDetailFormProductTableRef = ref();
  401. const deliveryDetailFormProductTable = reactive<Record<string, any>>({
  402. loading: false,
  403. columns: deliveryNoticeProductColumns,
  404. dataSource: [],
  405. });
  406. var SelectShipSModalRef = ref();
  407. var BaseShipArchiveAccessoriesListRef = ref();
  408. const activeKey = ref('deliveryDetailFormProduct');
  409. var notAllowEdit = ref(false);
  410. var classOption = ref([]);
  411. var customerOption = ref([]);
  412. const formData = reactive<Record<string, any>>({
  413. id: '',
  414. status: undefined,
  415. delFlag: undefined,
  416. sourceCode: '',
  417. deliveryDate: moment(new Date()).format('YYYY-MM-DD'),
  418. billCode: '',
  419. project: '',
  420. projectName: '',
  421. customer: '',
  422. customerName: '',
  423. priority: '',
  424. productionClass: '',
  425. model: '',
  426. maker: '',
  427. currency: '',
  428. deliveryTerms: '',
  429. delivery: '',
  430. deliveryAddress: '',
  431. isExport: '',
  432. warrantyPeriod: '',
  433. saleDepartment: '',
  434. saleDepartmentName: '',
  435. packagebRequirement: '',
  436. linkMan: '',
  437. address: '',
  438. linkNumber: '',
  439. salesman: '',
  440. salesmanName: '',
  441. fnumber: '',
  442. blno: '',
  443. notes: '',
  444. invoiceHeader: '',
  445. otherFee: '',
  446. packingDetails: '',
  447. customerFee: '',
  448. });
  449. //表单验证
  450. const validatorRules = reactive({
  451. projectName: [{ required: true, message: '请选择项目(select project)' }],
  452. customerFee: [{ required: true, message: '请选择是否收取客户运费(Customer shipping fee)' }],
  453. });
  454. const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
  455. const dbData = {};
  456. const formItemLayout = {
  457. labelCol: { xs: { span: 24 }, sm: { span: 8 } },
  458. wrapperCol: { xs: { span: 24 }, sm: { span: 13 } },
  459. labelCol1: { xs: { span: 24 }, sm: { span: 8 } },
  460. wrapperCol1: { xs: { span: 24 }, sm: { span: 13 } },
  461. };
  462. // 表单禁用
  463. const disabled = computed(() => {
  464. if (props.formBpm === true) {
  465. if (props.formData.disabled === false) {
  466. return false;
  467. } else {
  468. return true;
  469. }
  470. }
  471. return props.formDisabled;
  472. });
  473. //新增方法
  474. function add() {
  475. resetFields();
  476. deliveryNoticeFormShipTable.dataSource = [];
  477. deliveryDetailFormProductTable.dataSource = [];
  478. activeKey.value = 'deliveryDetailFormProduct';
  479. getOptiom();
  480. getCustomerOptions();
  481. formData.salesman = userStore.getUserInfo.username;
  482. formData.salesmanName = userStore.getUserInfo.realname;
  483. formData.saleDepartment = userStore.getUserInfo.orgCode;
  484. formData.saleDepartmentName = userStore.getUserInfo.orgName;
  485. notAllowEdit.value = false;
  486. }
  487. //编辑方法
  488. async function edit(row) {
  489. //主表数据
  490. await queryMainData(row.id);
  491. //子表数据
  492. const deliveryNoticeFormShipDataList = await querydeliveryNoticeFormShipListByMainId(row['id']);
  493. deliveryNoticeFormShipTable.dataSource = [...deliveryNoticeFormShipDataList];
  494. const deliveryDetailFormProductDataList = await querydeliveryNoticeFormProductListByMainId(row['id']);
  495. deliveryDetailFormProductTable.dataSource = [...deliveryDetailFormProductDataList];
  496. getOptiom();
  497. getCustomerOptions();
  498. notAllowEdit.value = true;
  499. }
  500. //获取主表
  501. async function queryMainData(id) {
  502. const row = await queryDataById(id);
  503. resetFields();
  504. const tmpData = {};
  505. Object.keys(formData).forEach((key) => {
  506. if (row.hasOwnProperty(key)) {
  507. tmpData[key] = row[key];
  508. }
  509. });
  510. //赋值
  511. Object.assign(formData, tmpData);
  512. }
  513. const { getSubFormAndTableData, transformData } = useValidateAntFormAndTable(activeKey, {
  514. saleDeliveryShip: deliveryNoticeFormShipTableRef,
  515. saleDeliveryDetails: deliveryDetailFormProductTableRef,
  516. });
  517. //获取表单信息
  518. async function getFormData() {
  519. try {
  520. // 触发表单验证
  521. await validate();
  522. } catch ({ errorFields }) {
  523. if (errorFields) {
  524. const firstField = errorFields[0];
  525. if (firstField) {
  526. formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
  527. }
  528. }
  529. return Promise.reject(errorFields);
  530. }
  531. return transformData(toRaw(formData));
  532. }
  533. //保存
  534. async function submitForm() {
  535. if (formData.sourceCode == '') {
  536. message.warning('请添加产品明细');
  537. } else {
  538. deliveryDetailFormProductTableRef.value!.validateTable().then(async (errMap) => {
  539. if (errMap) {
  540. console.log('表单验证未通过:', { errMap });
  541. } else {
  542. const mainData = await getFormData();
  543. const subData = await getSubFormAndTableData();
  544. var judge = false;
  545. if (mainData.customerFee == '是') {
  546. judge = subData.saleDeliveryDetailsList.every((item) => item.sourceId && item.sourceId !== undefined && item.sourceId !== '');
  547. } else {
  548. judge = false;
  549. }
  550. if (!judge) {
  551. const values = Object.assign({}, dbData, mainData, subData);
  552. console.log('表单提交数据', values);
  553. const isUpdate = values.id ? true : false;
  554. await saveOrUpdate(values, isUpdate);
  555. //关闭弹窗
  556. emit('success');
  557. } else {
  558. message.warning('收取客户运费时,必须选择虚拟产品');
  559. }
  560. }
  561. });
  562. }
  563. }
  564. function setFieldsValue(values) {
  565. if (values) {
  566. Object.keys(values).map((k) => {
  567. formData[k] = values[k];
  568. });
  569. }
  570. }
  571. /**
  572. * 值改变事件触发-树控件回调
  573. * @param key
  574. * @param value
  575. */
  576. function handleFormChange(key, value) {
  577. formData[key] = value;
  578. }
  579. //产品明细-删除行
  580. async function handleDelete1(prop) {
  581. var xTable = deliveryDetailFormProductTableRef.value!.getXTable();
  582. var newArray = [...xTable.data];
  583. newArray.splice(prop.rowIndex, 1);
  584. deliveryDetailFormProductTable.dataSource = newArray;
  585. if (deliveryDetailFormProductTable.dataSource.length !== 0) {
  586. notAllowEdit.value = true;
  587. } else {
  588. formData.sourceCode = '';
  589. notAllowEdit.value = false;
  590. add();
  591. }
  592. }
  593. //选择项目
  594. function addProject(data) {
  595. if (data.length == 0) {
  596. formData.project = formData.projectName = '';
  597. } else {
  598. formData.project = data[0].id;
  599. formData.projectName = data[0].code;
  600. formData.customer = data[0].customerId;
  601. formData.customerName = data[0].customerId_dictText;
  602. customerOption.value.map((item) => {
  603. if (item.value == data[0].customerId) {
  604. formData.priority = item.priority;
  605. }
  606. });
  607. }
  608. }
  609. //获取客户列表
  610. function getCustomerOptions() {
  611. let params = { pageSize: '-1', status: 1 };
  612. defHttp.get({ url: '/cuspCode/cuspCustomerProfile/list', params }, { isTransformResponse: false }).then((res) => {
  613. if (res) {
  614. customerOption.value = [];
  615. res.result.records.forEach((item) => {
  616. customerOption.value.push({
  617. label: item.name,
  618. value: item.id,
  619. priority: item.priority,
  620. intermediatorCommission: item.intermediatorCommission,
  621. });
  622. });
  623. }
  624. });
  625. }
  626. //查看配件信息
  627. function viewAccessory(prop) {
  628. BaseShipArchiveAccessoriesListRef.value.getTable(prop.row);
  629. }
  630. //选择项目
  631. function onSearchProject() {
  632. SelectProjectModalRef.value.getTable();
  633. }
  634. //获取产品分类下拉框
  635. function getOptiom() {
  636. defHttp
  637. .get({ url: 'baseCode/baseProductClass/list' }, { isTransformResponse: false })
  638. .then((res) => {
  639. if (res.success) {
  640. classOption.value = [];
  641. res.result.records.forEach((element) => {
  642. var obj = {
  643. label: element.name ? element.name : '无名称请维护',
  644. value: element.id ? element.id : '',
  645. };
  646. classOption.value.push(obj);
  647. });
  648. }
  649. })
  650. .finally(() => {
  651. // loading.value = false;
  652. });
  653. }
  654. // 选择销售订单
  655. function selectSaleOrderList() {
  656. var obj = formData;
  657. obj.sourceCode2 = formData.sourceCode;
  658. SelectSaleOrderModalRef.value.getTable(obj, 'delivery');
  659. }
  660. function addFormSaleOrder(data) {
  661. data.map((item) => {
  662. item.model = item.childModel;
  663. item.sourceId = item.childId;
  664. item.orderQuantity = item.quantity;
  665. item.orderMoney = item.discountedAmount;
  666. item.money = item.discountedAmount;
  667. item.taxPrice = item.discountedPrice;
  668. });
  669. var xTable = deliveryDetailFormProductTableRef.value!.getXTable(); //关键代码 如果不更新 重新加载表格即可
  670. var arrProduct = xTable.data.concat(data);
  671. deliveryDetailFormProductTable.dataSource = arrProduct;
  672. notAllowEdit.value = true;
  673. formData.sourceCode = data[0].billCode;
  674. formData.project = data[0].project;
  675. formData.projectName = data[0].projectName;
  676. formData.customerName = data[0].customerName;
  677. formData.customer = data[0].customer;
  678. formData.priority = data[0].priority;
  679. formData.productionClass = data[0].productionClass;
  680. formData.model = data[0].headModel;
  681. formData.maker = data[0].maker;
  682. formData.currency = data[0].currency;
  683. formData.deliveryTerms = data[0].deliveryTerms;
  684. formData.delivery = data[0].delivery;
  685. formData.invoiceHeader = data[0].invoiceHeader;
  686. formData.invoiceAddress = data[0].invoiceAddress;
  687. formData.deliveryAddress = data[0].deliveryAddress;
  688. formData.isExport = data[0].isExport;
  689. formData.packagebRequirement = data[0].packagebRequirement;
  690. formData.warrantyPeriod = data[0].warrantyPeriod;
  691. formData.invoiceHeader = data[0].invoiceHeader;
  692. getShipList(data[0].headId);
  693. }
  694. function getShipList(id) {
  695. let params = { id: id };
  696. let url = '/saleCode/saleOrder/querySaleOrderShipByMainId';
  697. defHttp.get({ url: url, params }, { isTransformResponse: false }).then((res) => {
  698. if (res) {
  699. deliveryNoticeFormShipTable.dataSource = res.result;
  700. }
  701. });
  702. }
  703. function changeValues(prop) {
  704. if (prop.col.key == 'quantity') {
  705. if (prop.row.quantity) {
  706. var num = prop.row.quantity * Number(prop.row.taxPrice);
  707. prop.row.money = isNaN(num) ? '' : num.toFixed(2);
  708. }
  709. }
  710. if (prop.col.key == 'taxPrice') {
  711. if (prop.row.taxPrice) {
  712. var num = prop.row.quantity * Number(prop.row.taxPrice);
  713. prop.row.money = isNaN(num) ? '' : num.toFixed(2);
  714. }
  715. }
  716. }
  717. function selectVirtualProducts() {
  718. SelectPrpductModalRef.value.getTableVirtual();
  719. }
  720. function addProduct(data) {
  721. data.map((item) => {
  722. item.productClass = item.classId_dictText;
  723. item.productCode = item.code;
  724. item.productId = item.id;
  725. item.id = undefined;
  726. });
  727. var xTable = deliveryDetailFormProductTableRef.value!.getXTable(); //关键代码 如果不更新 重新加载表格即可
  728. var arrProduct = xTable.data.concat(data);
  729. deliveryDetailFormProductTable.dataSource = arrProduct;
  730. }
  731. return {
  732. deliveryNoticeFormShipTableRef,
  733. deliveryNoticeFormShipTable,
  734. deliveryDetailFormProductTableRef,
  735. deliveryDetailFormProductTable,
  736. validatorRules,
  737. validateInfos,
  738. activeKey,
  739. loading,
  740. formData,
  741. setFieldsValue,
  742. handleFormChange,
  743. formItemLayout,
  744. disabled,
  745. getFormData,
  746. submitForm,
  747. SelectShipSModalRef,
  748. add,
  749. edit,
  750. formRef,
  751. BaseShipArchiveAccessoriesListRef,
  752. viewAccessory,
  753. handleDelete1,
  754. SelectProjectModalRef,
  755. onSearchProject,
  756. addProject,
  757. getOptiom,
  758. classOption,
  759. getCustomerOptions,
  760. customerOption,
  761. notAllowEdit,
  762. selectSaleOrderList,
  763. SelectSaleOrderModalRef,
  764. addFormSaleOrder,
  765. changeValues,
  766. selectVirtualProducts,
  767. SelectPrpductModalRef,
  768. addProduct,
  769. };
  770. },
  771. });
  772. </script>
  773. <style lang="less" scoped>
  774. /** 时间和数字输入框样式 */
  775. :deep(.ant-input-number) {
  776. width: 100%;
  777. }
  778. :deep(.ant-calendar-picker) {
  779. width: 100%;
  780. }
  781. /deep/.vxe-table--body-wrapper {
  782. height: 100% !important;
  783. }
  784. /deep/.ant-modal-body {
  785. padding: 24px !important;
  786. }
  787. /deep/.ant-form-item {
  788. margin-bottom: 8px !important;
  789. }
  790. /deep/.vxe-cell--valid-error-msg {
  791. color: white !important;
  792. background-color: white !important;
  793. }
  794. </style>