PurchaseInquiryFormForm.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  1. <template>
  2. <a-spin :spinning="loading">
  3. <JFormContainer :disabled="disabled">
  4. <template #detail>
  5. <a-form v-bind="formItemLayout" name="PuechaseInquiryFormForm" ref="formRef">
  6. <a-row>
  7. <a-col :span="12">
  8. <a-form-item label="询价单号(bill code)" v-bind="validateInfos.billCode" id="PuechaseInquiryFormForm-billCode" name="billCode">
  9. <a-input v-model:value="formData.billCode" placeholder="自动生成" disabled />
  10. </a-form-item>
  11. </a-col>
  12. <a-col :span="12">
  13. <a-form-item
  14. label="单据日期(bill date)"
  15. v-bind="validateInfos.billDate"
  16. id="PuechaseInquiryFormForm-billDate"
  17. name="billDate"
  18. :label-col="formItemLayout.labelCol1"
  19. :wrapper-col="formItemLayout.wrapperCol1"
  20. >
  21. <a-date-picker
  22. placeholder="请选择单据日期(bill date)"
  23. v-model:value="formData.billDate"
  24. value-format="YYYY-MM-DD"
  25. style="width: 100%"
  26. allow-clear
  27. />
  28. </a-form-item>
  29. </a-col>
  30. <a-col :span="12">
  31. <a-form-item
  32. label="询价项目(inquiry project)"
  33. v-bind="validateInfos.projectName"
  34. id="PuechaseInquiryFormForm-projectName"
  35. name="projectName"
  36. >
  37. <a-input-search
  38. v-model:value="formData.projectName"
  39. placeholder="请输入询价项目(inquiry project)"
  40. readonly
  41. AutoComplete="off"
  42. :disabled="notAllowEdit"
  43. allow-clear
  44. enter-button="Search"
  45. @search="onSearchProject"
  46. />
  47. </a-form-item>
  48. </a-col>
  49. <a-col :span="12">
  50. <a-form-item
  51. label="询价供应商(inquiry supplier)"
  52. v-bind="validateInfos.inquirySuppiler"
  53. id="PuechaseInquiryFormForm-inquirySuppiler"
  54. name="inquirySuppiler"
  55. :label-col="formItemLayout.labelCol1"
  56. :wrapper-col="formItemLayout.wrapperCol1"
  57. >
  58. <ApiSelect
  59. :api="supplierOption"
  60. showSearch
  61. v-model:value="formData.inquirySuppiler"
  62. :filterOption="true"
  63. resultField="records"
  64. labelField="name"
  65. valueField="id"
  66. :params="{ pageSize: -1 }"
  67. @change="changeSupplier"
  68. optionFilterProp="label"
  69. />
  70. </a-form-item>
  71. </a-col>
  72. <a-col :span="12">
  73. <a-form-item
  74. label="询价有效期(inquiry period)"
  75. v-bind="validateInfos.inquiryPeriodEnd"
  76. id="PuechaseInquiryFormForm-inquiryPeriodEnd"
  77. name="inquiryPeriodEnd"
  78. >
  79. <a-range-picker
  80. v-model:value="inquiryPeriod"
  81. value-format="YYYY-MM-DD"
  82. :format="['YYYY-MM-DD', 'YYYY-MM-DD']"
  83. @change="onChangeInquiryPeriod"
  84. style="width: 100%"
  85. />
  86. </a-form-item>
  87. </a-col>
  88. <a-col :span="12">
  89. <a-form-item
  90. label="优先级(priority)"
  91. v-bind="validateInfos.priority"
  92. id="PuechaseInquiryFormForm-priority"
  93. name="priority"
  94. :label-col="formItemLayout.labelCol1"
  95. :wrapper-col="formItemLayout.wrapperCol1"
  96. >
  97. <JDictSelectTag v-model:value="formData.priority" placeholder="请选择" dictCode="priority" />
  98. </a-form-item>
  99. </a-col>
  100. <a-col :span="12">
  101. <a-form-item
  102. label="产品分类(production class)"
  103. v-bind="validateInfos.productionClass"
  104. id="PuechaseInquiryFormForm-productionClass"
  105. name="productionClass"
  106. >
  107. <JDictSelectTag
  108. v-model:value="formData.productionClass"
  109. placeholder=""
  110. dictCode="base_product_class,name,id,del_flag=0 and parent_id is null"
  111. page="false"
  112. showSearch
  113. />
  114. </a-form-item>
  115. </a-col>
  116. <a-col :span="12">
  117. <a-form-item
  118. label="机型(model)"
  119. v-bind="validateInfos.model"
  120. id="PuechaseInquiryFormForm-model"
  121. name="model"
  122. :label-col="formItemLayout.labelCol1"
  123. :wrapper-col="formItemLayout.wrapperCol1"
  124. >
  125. <JDictSelectTag v-model:value="formData.model" placeholder="请选择" dictCode="model_typer" disabled />
  126. </a-form-item>
  127. </a-col>
  128. <a-col :span="12">
  129. <a-form-item label="厂家(maker)" v-bind="validateInfos.maker" id="PuechaseInquiryFormForm-maker" name="maker">
  130. <a-input v-model:value="formData.maker" placeholder="请输入厂家(maker)" allow-clear disabled />
  131. </a-form-item>
  132. </a-col>
  133. <a-col :span="12">
  134. <a-form-item
  135. label="交货地点(place of delivery)"
  136. v-bind="validateInfos.placeDelivery"
  137. id="PuechaseInquiryFormForm-placeDelivery"
  138. name="placeDelivery"
  139. :label-col="formItemLayout.labelCol1"
  140. :wrapper-col="formItemLayout.wrapperCol1"
  141. >
  142. <a-input v-model:value="formData.placeDelivery" placeholder="" allow-clear AutoComplete="off" />
  143. </a-form-item>
  144. </a-col>
  145. <a-col :span="12">
  146. <a-form-item
  147. label="付款条件(payment terms)"
  148. v-bind="validateInfos.paymentTerms"
  149. id="quotationFormForm-paymentTerms"
  150. name="paymentTerms"
  151. >
  152. <JDictSelectTag
  153. v-model:value="formData.paymentTerms"
  154. placeholder="请选择"
  155. dictCode="payment_terms"
  156. style="width: 100%; margin-right: 1%"
  157. />
  158. </a-form-item>
  159. </a-col>
  160. <!-- <a-col :span="12">
  161. <a-form-item label="报价有效期(quotation validity period)" v-bind="validateInfos.quotationValidity" id="PuechaseInquiryFormForm-quotationValidity" name="quotationValidity" :label-col="formItemLayout.labelCol1" :wrapper-col="formItemLayout.wrapperCol1">
  162. <a-input v-model:value="formData.quotationValidity" placeholder="请输入" />
  163. </a-form-item>
  164. </a-col> -->
  165. <a-col :span="12">
  166. <a-form-item
  167. label="发货方式(delivery)"
  168. v-bind="validateInfos.delivery"
  169. id="PuechaseInquiryFormForm-delivery"
  170. name="delivery"
  171. :label-col="formItemLayout.labelCol1"
  172. :wrapper-col="formItemLayout.wrapperCol1"
  173. >
  174. <JDictSelectTag v-model:value="formData.delivery" placeholder="请选择" dictCode="delivery_methods" />
  175. </a-form-item>
  176. </a-col>
  177. <a-col :span="12">
  178. <a-form-item
  179. label="采购询价组(procurement inquiry team)"
  180. v-bind="validateInfos.inquiryTeamName"
  181. id="PuechaseInquiryFormForm-inquiryTeamName"
  182. name="inquiryTeam"
  183. >
  184. <!-- <JDictSelectTag v-model:value="formData.inquiryTeam" placeholder="请选择" dictCode="procurement_inquiry_team" disabled/> -->
  185. <a-input v-model:value="formData.inquiryTeamName" disabled />
  186. </a-form-item>
  187. </a-col>
  188. <a-col :span="12">
  189. <a-form-item
  190. label="询价备注(inquiry notes)"
  191. v-bind="validateInfos.inquiryNotes"
  192. id="PuechaseInquiryFormForm-inquiryNotes"
  193. name="inquiryNotes"
  194. :label-col="formItemLayout.labelCol1"
  195. :wrapper-col="formItemLayout.wrapperCol1"
  196. >
  197. <a-input v-model:value="formData.inquiryNotes" placeholder="请输入询价备注(inquiry notes)" allow-clear AutoComplete="off" />
  198. </a-form-item>
  199. </a-col>
  200. <a-col :span="12">
  201. <a-form-item label="销售说明(sale notes)" v-bind="validateInfos.saleNotes" id="SaleOrderForm-saleNotes" name="saleNotes">
  202. <a-textarea v-model:value="formData.saleNotes" AutoComplete="off" :rows="2" />
  203. </a-form-item>
  204. </a-col>
  205. <a-col :span="12">
  206. <a-form-item
  207. label="协议条款(agreement terms)"
  208. v-bind="validateInfos.agreementTerms"
  209. id="SaleOrderForm-agreementTerms"
  210. name="agreementTerms"
  211. :label-col="formItemLayout.labelCol1"
  212. :wrapper-col="formItemLayout.wrapperCol1"
  213. >
  214. <a-textarea v-model:value="formData.agreementTerms" AutoComplete="off" :rows="2" />
  215. </a-form-item>
  216. </a-col>
  217. <a-col :span="12">
  218. <a-form-item label="附件(attachs)" v-bind="validateInfos.attachs" id="PuechaseInquiryFormForm-attachs" name="attachs">
  219. <JUpload v-model:value="formData.attachs" />
  220. </a-form-item>
  221. </a-col>
  222. </a-row>
  223. </a-form>
  224. </template>
  225. </JFormContainer>
  226. <!-- 子表单区域 -->
  227. <a-tabs v-model:activeKey="activeKey" animated style="padding: 24px; padding-top: 0px">
  228. <a-tab-pane tab="采购询价单 - 产品明细(product details)" key="PuechaseInquiryFormProduct" :forceRender="true">
  229. <a-button type="primary" @click="SelectCustomerInquiry" style="margin-right: 1%; margin-bottom: 1%">
  230. 选择客户询价单(select customer inquiry form)</a-button
  231. >
  232. <a-button type="primary" @click="selectProducts" style="margin-right: 1%; margin-bottom: 1%"> 选择产品(select product)</a-button>
  233. <j-vxe-table
  234. :keep-source="true"
  235. resizable
  236. ref="PuechaseInquiryFormProductTableRef"
  237. :loading="PuechaseInquiryFormProductTable.loading"
  238. :columns="PuechaseInquiryFormProductTable.columns"
  239. :dataSource="PuechaseInquiryFormProductTable.dataSource"
  240. :maxHeight="340"
  241. :disabled="disabled"
  242. :rowNumber="true"
  243. :rowSelection="true"
  244. asyncRemove
  245. >
  246. <template #action="props">
  247. <a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)">
  248. <a>删除(delete)</a>
  249. </a-popconfirm>
  250. </template>
  251. </j-vxe-table>
  252. </a-tab-pane>
  253. <a-tab-pane tab="采购询价单 - 船明细(ship details)" key="PuechaseInquiryFormShip" :forceRender="true">
  254. <j-vxe-table
  255. :keep-source="true"
  256. resizable
  257. ref="PuechaseInquiryFormShipTableRef"
  258. :loading="PuechaseInquiryFormShipTable.loading"
  259. :columns="PuechaseInquiryFormShipTable.columns"
  260. :dataSource="PuechaseInquiryFormShipTable.dataSource"
  261. :maxHeight="340"
  262. :disabled="disabled"
  263. :rowNumber="true"
  264. :rowSelection="true"
  265. >
  266. <template #action="props">
  267. <a @click="viewAccessory(props)">查看配件信息(view accessory information)</a>
  268. </template>
  269. </j-vxe-table>
  270. </a-tab-pane>
  271. </a-tabs>
  272. <BaseShipArchiveAccessoriesModal ref="BaseShipArchiveAccessoriesListRef" />
  273. <SelectPrpductModal ref="SelectPrpductModalRef" @select-product="addProduct" />
  274. <SelectProjectModal ref="SelectProjectModalRef" @select-project="addProject" />
  275. <SelectCustomerInquiryModal ref="SelectCustomerInquiryModalRef" @select-customer-inquiry="addProductFromCustomer" />
  276. </a-spin>
  277. </template>
  278. <script lang="ts">
  279. import { defineComponent, ref, reactive, computed, toRaw, onMounted } from 'vue';
  280. import { defHttp } from '/@/utils/http/axios';
  281. import { useValidateAntFormAndTable } from '/@/hooks/system/useJvxeMethods';
  282. import {
  283. queryQurcodeInquiryFormShipListByMainId,
  284. queryPurcodeInquiryFormProductListByMainId,
  285. queryDataById,
  286. saveOrUpdate,
  287. supplierOption,
  288. } from '../purchaseInquiryForm.api';
  289. import { JVxeTable } from '/@/components/jeecg/JVxeTable';
  290. import { PuechaseInquiryFormShipColumns, PuechaseInquiryFormProductColumns } from '../PurchaseInquiryForm.data';
  291. import BaseShipArchiveAccessoriesModal from '../../../publicComponents/BaseShipArchiveAccessoriesModal.vue';
  292. import SelectPrpductModal from '../../../publicComponents/SelectPrpductModal.vue';
  293. import SelectProjectModal from '../../../publicComponents/SelectProjectModal.vue';
  294. import SelectCustomerInquiryModal from './SelectCustomerInquiryModal.vue';
  295. import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
  296. import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
  297. import { JDictSelectTag, ApiSelect } from '/@/components/Form';
  298. import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
  299. import { Form, message } from 'ant-design-vue';
  300. import moment from 'moment';
  301. const useForm = Form.useForm;
  302. export default defineComponent({
  303. name: 'PuechaseInquiryFormForm',
  304. components: {
  305. JVxeTable,
  306. JFormContainer,
  307. BaseShipArchiveAccessoriesModal,
  308. SelectPrpductModal,
  309. JUpload,
  310. SelectProjectModal,
  311. JDictSelectTag,
  312. JSelectInput,
  313. SelectCustomerInquiryModal,
  314. ApiSelect,
  315. },
  316. props: {
  317. formDisabled: {
  318. type: Boolean,
  319. default: false,
  320. },
  321. formData: { type: Object, default: () => {} },
  322. formBpm: { type: Boolean, default: true },
  323. },
  324. emits: ['success'],
  325. setup(props, { emit }) {
  326. const loading = ref(false);
  327. const formRef = ref();
  328. var SelectPrpductModalRef = ref();
  329. var SelectProjectModalRef = ref();
  330. var SelectCustomerInquiryModalRef = ref();
  331. var inquiryPeriod = ref([]);
  332. const PuechaseInquiryFormShipTableRef = ref();
  333. const PuechaseInquiryFormShipTable = reactive<Record<string, any>>({
  334. loading: false,
  335. columns: PuechaseInquiryFormShipColumns,
  336. dataSource: [],
  337. });
  338. const PuechaseInquiryFormProductTableRef = ref();
  339. const PuechaseInquiryFormProductTable = reactive<Record<string, any>>({
  340. loading: false,
  341. columns: PuechaseInquiryFormProductColumns,
  342. dataSource: [],
  343. });
  344. var BaseShipArchiveAccessoriesListRef = ref();
  345. const activeKey = ref('PuechaseInquiryFormProduct');
  346. var notAllowEdit = ref(false);
  347. const formData = reactive<Record<string, any>>({
  348. id: '',
  349. status: undefined,
  350. delFlag: undefined,
  351. otherStatus: '',
  352. submit: '',
  353. billDate: moment(new Date()).format('YYYY-MM-DD'),
  354. billCode: '',
  355. inquiryProject: '',
  356. inquirySuppiler: '',
  357. inquiryPeriodEnd: '',
  358. inquiryPeriodBegin: ' ',
  359. inquiryCustomer: '',
  360. priority: '',
  361. productionClass: '',
  362. model: '',
  363. maker: '',
  364. paymentTerms: '',
  365. delivery: '',
  366. deliveryTime: '',
  367. inquiryTeam: '',
  368. inquiryTeamName: '',
  369. quotationValidity: '',
  370. attachs: '',
  371. inquiryNotes: '',
  372. sourceCode: '',
  373. projectName: '',
  374. placeDelivery: '',
  375. suppilerName: '',
  376. saleAttachs: '',
  377. paymentTermsInfo: '',
  378. sourceId: '',
  379. agreementTerms: '',
  380. saleNotes: '',
  381. });
  382. //表单验证
  383. const validatorRules = reactive({
  384. projectName: [
  385. { required: true, message: '请选择项目(select project)' }
  386. ],
  387. inquirySuppiler: [
  388. { required: true, message: '请选择供应商(select supplier)' }
  389. ],
  390. });
  391. const {resetFields, validate, validateInfos} = useForm(formData, validatorRules, {immediate: false});
  392. const dbData = {};
  393. const formItemLayout = {
  394. labelCol: { xs: { span: 24 }, sm: { span: 7 } },
  395. wrapperCol: { xs: { span: 24 }, sm: { span: 16 } },
  396. labelCol1: { xs: { span: 24 }, sm: { span: 9 } },
  397. wrapperCol1: { xs: { span: 24 }, sm: { span: 14 } },
  398. };
  399. // 表单禁用
  400. const disabled = computed(() => {
  401. if (props.formBpm === true) {
  402. if (props.formData.disabled === false) {
  403. return false;
  404. } else {
  405. return true;
  406. }
  407. }
  408. return props.formDisabled;
  409. });
  410. function add() {
  411. resetFields();
  412. PuechaseInquiryFormShipTable.dataSource = [];
  413. PuechaseInquiryFormProductTable.dataSource = [];
  414. activeKey.value = 'PuechaseInquiryFormProduct';
  415. inquiryPeriod.value = [];
  416. notAllowEdit.value = false;
  417. }
  418. async function edit(row) {
  419. //主表数据
  420. await queryMainData(row.id);
  421. //子表数据
  422. const PuechaseInquiryFormShipDataList = await queryQurcodeInquiryFormShipListByMainId(row['id']);
  423. PuechaseInquiryFormShipTable.dataSource = [...PuechaseInquiryFormShipDataList];
  424. const PuechaseInquiryFormProductDataList = await queryPurcodeInquiryFormProductListByMainId(row['id']);
  425. PuechaseInquiryFormProductTable.dataSource = [...PuechaseInquiryFormProductDataList];
  426. inquiryPeriod.value[0] = formData.inquiryPeriodBegin ? moment(formData.inquiryPeriodBegin).format('YYYY-MM-DD') : '';
  427. inquiryPeriod.value[1] = formData.inquiryPeriodEnd ? moment(formData.inquiryPeriodEnd).format('YYYY-MM-DD') : '';
  428. notAllowEdit.value = true;
  429. }
  430. async function queryMainData(id) {
  431. const row = await queryDataById(id);
  432. resetFields();
  433. const tmpData = {};
  434. Object.keys(formData).forEach((key) => {
  435. if (row.hasOwnProperty(key)) {
  436. tmpData[key] = row[key];
  437. }
  438. });
  439. //赋值
  440. Object.assign(formData, tmpData);
  441. }
  442. const { getSubFormAndTableData, transformData } = useValidateAntFormAndTable(activeKey, {
  443. purInquiryFormShip: PuechaseInquiryFormShipTableRef,
  444. purInquiryFormProduct: PuechaseInquiryFormProductTableRef,
  445. });
  446. async function getFormData() {
  447. try {
  448. // 触发表单验证
  449. await validate();
  450. } catch ({ errorFields }) {
  451. if (errorFields) {
  452. const firstField = errorFields[0];
  453. if (firstField) {
  454. formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
  455. }
  456. }
  457. return Promise.reject(errorFields);
  458. }
  459. return transformData(toRaw(formData));
  460. }
  461. async function submitForm() {
  462. var xTable = PuechaseInquiryFormProductTableRef.value!.getXTable()
  463. if(xTable.data.length==0){
  464. message.warning('请添加产品明细')
  465. }else{
  466. PuechaseInquiryFormProductTableRef.value!.validateTable().then(async (errMap) => {
  467. if (errMap) {
  468. console.log('表单验证未通过:', { errMap });
  469. } else {
  470. const mainData = await getFormData();
  471. const subData = await getSubFormAndTableData();
  472. const values = Object.assign({}, dbData, mainData, subData);
  473. console.log('表单提交数据', values)
  474. const isUpdate = values.id ? true : false
  475. await saveOrUpdate(values, isUpdate);
  476. //关闭弹窗
  477. emit('success');
  478. }
  479. });
  480. }
  481. }
  482. function setFieldsValue(values) {
  483. if (values) {
  484. Object.keys(values).map((k) => {
  485. formData[k] = values[k];
  486. });
  487. }
  488. }
  489. /**
  490. * 值改变事件触发-树控件回调
  491. * @param key
  492. * @param value
  493. */
  494. function handleFormChange(key, value) {
  495. formData[key] = value;
  496. }
  497. async function handleDelete(prop) {
  498. var newArray = [...PuechaseInquiryFormShipTable.dataSource];
  499. newArray.splice(prop.rowIndex, 1);
  500. PuechaseInquiryFormShipTable.dataSource = newArray;
  501. }
  502. async function handleDelete1(prop) {
  503. var newArray = [...PuechaseInquiryFormProductTable.dataSource];
  504. newArray.splice(prop.rowIndex, 1);
  505. PuechaseInquiryFormProductTable.dataSource = newArray;
  506. if (PuechaseInquiryFormProductTable.dataSource.length !== 0) {
  507. var arr = [];
  508. PuechaseInquiryFormProductTable.dataSource.map((item) => {
  509. if (item.sourceId) {
  510. arr.push(item.sourceId);
  511. }
  512. });
  513. if (arr.length == 0) {
  514. formData.sourceCode = '';
  515. notAllowEdit.value = false;
  516. }
  517. } else {
  518. notAllowEdit.value = false;
  519. formData.sourceCode = '';
  520. add();
  521. }
  522. }
  523. function addShip(data) {
  524. var arr = data.concat(PuechaseInquiryFormShipTable.dataSource);
  525. arr.map((item) => (item.shipowner = item.relateCustomer));
  526. PuechaseInquiryFormShipTable.dataSource = arr;
  527. }
  528. function addProduct(data) {
  529. data.map((item) => {
  530. item.productClass = item.classId_dictText;
  531. item.productCode = item.code;
  532. item.productId = item.id;
  533. item.unit = item.measurementUnit;
  534. item.needShip = '0';
  535. item.shipInspection = '';
  536. });
  537. var arrProduct = data.concat(PuechaseInquiryFormProductTable.dataSource);
  538. PuechaseInquiryFormProductTable.dataSource = arrProduct;
  539. }
  540. function addProject(data) {
  541. if (data.length !== 0) {
  542. formData.inquiryProject = data[0].id;
  543. formData.projectName = data[0].code;
  544. } else {
  545. formData.inquiryProject = '';
  546. formData.projectName = '';
  547. }
  548. }
  549. function addProductFromCustomer(data) {
  550. data.map((item) => {
  551. item.productClass = item.productClass;
  552. item.productCode = item.productCode;
  553. item.unit = item.unit;
  554. item.sourceId = item.childId;
  555. item.model = item.childModel;
  556. item.deliveryTime = formData.deliveryTime;
  557. });
  558. var arrProduct = data.concat(PuechaseInquiryFormProductTable.dataSource);
  559. notAllowEdit.value = true;
  560. inquiryPeriod.value[0] = data[0].inquiryPeriodBegin ? moment(data[0].inquiryPeriodBegin).format('YYYY-MM-DD') : '';
  561. inquiryPeriod.value[1] = data[0].inquiryPeriodEnd ? moment(data[0].inquiryPeriodEnd).format('YYYY-MM-DD') : '';
  562. formData.inquiryPeriodBegin = data[0].inquiryPeriodBegin ? moment(data[0].inquiryPeriodBegin).format('YYYY-MM-DD') : '';
  563. formData.inquiryPeriodEnd = data[0].inquiryPeriodEnd ? moment(data[0].inquiryPeriodEnd).format('YYYY-MM-DD') : '';
  564. PuechaseInquiryFormProductTable.dataSource = arrProduct;
  565. formData.inquiryProject = data[0].inquiryProject;
  566. formData.projectName = data[0].projectName;
  567. formData.sourceCode = data[0].billCode;
  568. formData.priority = data[0].priority;
  569. formData.model = data[0].headModel;
  570. formData.maker = data[0].maker;
  571. formData.inquiryTeam = data[0].inquiryTeam;
  572. formData.inquiryTeamName = data[0].inquiryTeam_dictText;
  573. formData.productionClass = data[0].productionClass;
  574. formData.saleAttachs = data[0].attachs;
  575. formData.saleNotes = data[0].inquiryNotes;
  576. getShipList(data[0].headId);
  577. }
  578. function getShipList(id) {
  579. let params = { id: id };
  580. defHttp.get({ url: '/saleCode/saleInquiryForm/querySaleInquiryFormShipByMainId', params }, { isTransformResponse: false }).then((res) => {
  581. if (res) {
  582. PuechaseInquiryFormShipTable.dataSource = res.result;
  583. }
  584. });
  585. }
  586. function viewAccessory(prop) {
  587. BaseShipArchiveAccessoriesListRef.value.getTable(prop.row);
  588. }
  589. function selectProducts() {
  590. SelectPrpductModalRef.value.getTable();
  591. }
  592. function setNeed() {
  593. const values = PuechaseInquiryFormProductTableRef.value.getSelectionData();
  594. values.map((item) => {
  595. PuechaseInquiryFormProductTable.dataSource.map((event) => {
  596. if (item.id == event.id) {
  597. event.needShip = 1;
  598. }
  599. });
  600. const xTable = PuechaseInquiryFormProductTableRef.value!.getXTable(); //关键代码 如果不更新 重新加载表格即可
  601. xTable.loadData(PuechaseInquiryFormProductTable.dataSource);
  602. });
  603. }
  604. function setNotNeed() {
  605. const values = PuechaseInquiryFormProductTableRef.value.getSelectionData();
  606. values.map((item) => {
  607. PuechaseInquiryFormProductTable.dataSource.map((event) => {
  608. if (item.id == event.id) {
  609. event.needShip = 0;
  610. }
  611. });
  612. const xTable = PuechaseInquiryFormProductTableRef.value!.getXTable(); //关键代码 如果不更新 重新加载表格即可
  613. xTable.loadData(PuechaseInquiryFormProductTable.dataSource);
  614. });
  615. }
  616. function onSearchProject() {
  617. SelectProjectModalRef.value.getTable();
  618. }
  619. function onChangeInquiryPeriod(data) {
  620. inquiryPeriod.value = data;
  621. formData.inquiryPeriodBegin = data[0];
  622. formData.inquiryPeriodEnd = data[1];
  623. }
  624. function SelectCustomerInquiry() {
  625. SelectCustomerInquiryModalRef.value.getTable(formData);
  626. }
  627. async function changeSupplier(prop) {
  628. if (prop) {
  629. var params = { id: formData.inquirySuppiler };
  630. var obj = await supplierOption(params);
  631. formData.suppilerName = obj.records[0].name;
  632. formData.paymentTerms = obj.records[0].paymentTerms;
  633. } else {
  634. formData.inquirySuppiler = '';
  635. formData.suppilerName = '';
  636. }
  637. }
  638. return {
  639. PuechaseInquiryFormShipTableRef,
  640. PuechaseInquiryFormShipTable,
  641. PuechaseInquiryFormProductTableRef,
  642. PuechaseInquiryFormProductTable,
  643. validatorRules,
  644. validateInfos,
  645. activeKey,
  646. loading,
  647. formData,
  648. setFieldsValue,
  649. handleFormChange,
  650. formItemLayout,
  651. disabled,
  652. getFormData,
  653. submitForm,
  654. add,
  655. edit,
  656. formRef,
  657. addShip,
  658. addProduct,
  659. BaseShipArchiveAccessoriesListRef,
  660. viewAccessory,
  661. handleDelete,
  662. handleDelete1,
  663. selectProducts,
  664. setNeed,
  665. setNotNeed,
  666. SelectPrpductModalRef,
  667. SelectProjectModalRef,
  668. SelectCustomerInquiryModalRef,
  669. onSearchProject,
  670. addProject,
  671. inquiryPeriod,
  672. onChangeInquiryPeriod,
  673. SelectCustomerInquiry,
  674. addProductFromCustomer,
  675. changeSupplier,
  676. notAllowEdit,
  677. supplierOption,
  678. };
  679. },
  680. });
  681. </script>
  682. <style lang="less" scoped>
  683. /** 时间和数字输入框样式 */
  684. :deep(.ant-input-number) {
  685. width: 100%;
  686. }
  687. :deep(.ant-calendar-picker) {
  688. width: 100%;
  689. }
  690. /deep/.vxe-table--body-wrapper {
  691. height: 100% !important;
  692. }
  693. /deep/.ant-modal-body {
  694. padding: 24px !important;
  695. }
  696. /deep/.ant-form-item {
  697. margin-bottom: 8px !important;
  698. }
  699. /deep/.vxe-cell--valid-error-msg{
  700. color: white !important;
  701. background-color: white !important;
  702. }
  703. </style>