yuansh 8 ヶ月 前
コミット
d1ae6f8983
64 ファイル変更1890 行追加886 行削除
  1. 1 0
      src/views/baseCode/ExchangeRate/BaseExchangeRate.data.ts
  2. 19 1
      src/views/cuspCode/SupplierProfile/CuspSupplierProfile.data.ts
  3. 2 0
      src/views/inventiry/inventoryCheck/components/inventoryCheckForm.vue
  4. 2 0
      src/views/inventiry/otherIn/components/otherInForm.vue
  5. 2 0
      src/views/inventiry/otherOut/components/otherOutForm.vue
  6. 39 21
      src/views/inventiry/purInAbnormal/components/purInAbnormalForm.vue
  7. 1 1
      src/views/inventiry/purInAbnormal/purInAbnormalForm.api.ts
  8. 23 11
      src/views/inventiry/purInAbnormal/purInAbnormalForm.data.ts
  9. 2 0
      src/views/inventiry/purchaseIn/components/purchaseInForm.vue
  10. 7 0
      src/views/inventiry/salesOutbound/components/SelectDeliveryModal.vue
  11. 10 0
      src/views/platformBusiness/commissionOrder/commissionOrder.vue
  12. 6 0
      src/views/platformBusiness/commissionOrder/commissionOrderForm.data.ts
  13. 10 0
      src/views/platformBusiness/commissionOrder/components/commissionOrderFormForm.vue
  14. 8 3
      src/views/publicComponents/SelectSaleOrderMianModal.vue
  15. 19 0
      src/views/publicComponents/SelectSupplierQuotation.vue
  16. 7 0
      src/views/publicComponents/selectArrivalList.vue
  17. 2 0
      src/views/purchase/advancePayment/components/PurAdvancePaymentForm.vue
  18. 3 3
      src/views/purchase/arrivedGoods/ArriveGoodsList.vue
  19. 2 0
      src/views/purchase/arrivedGoods/components/ArriveGoodsFormForm.vue
  20. 2 2
      src/views/purchase/commissionPayRequest/commissionPayRequestList.vue
  21. 2 0
      src/views/purchase/commissionPayRequest/components/commissionPayRequestForm.vue
  22. 4 4
      src/views/purchase/freightPurchaseOrder/FreightPurchaseOrderList.vue
  23. 2 0
      src/views/purchase/freightPurchaseOrder/components/FreightPurOrderForm.vue
  24. 2 2
      src/views/purchase/payment/paymentList.vue
  25. 2 0
      src/views/purchase/purPaymentRequest/components/purPaymentRequestForm.vue
  26. 2 0
      src/views/purchase/purchaseInquiryForm/components/PurchaseInquiryFormForm.vue
  27. 35 4
      src/views/purchase/purchaseInquiryForm/purchaseInquiryFormList.vue
  28. 7 0
      src/views/purchase/purchaseOrder/PurchaseOrderForm.data.ts
  29. 83 3
      src/views/purchase/purchaseOrder/PurchaseOrderFormList.vue
  30. 2 0
      src/views/purchase/purchaseOrder/components/AfterPurchaseOrderFormForm.vue
  31. 109 19
      src/views/purchase/purchaseOrder/components/PurchaseOrderFormForm.vue
  32. 3 4
      src/views/purchase/purchaseOrderB2B/PurchaseOrderFormB2BList.vue
  33. 16 0
      src/views/purchase/purchaseQuotationFrm/PurchaseQuotationForm.api.ts
  34. 3 2
      src/views/purchase/purchaseQuotationFrm/PurchaseQuotationForm.data.ts
  35. 19 0
      src/views/purchase/purchaseQuotationFrm/components/PurchaseQuotationFormForm.vue
  36. 120 0
      src/views/purchase/purchaseQuotationFrm/components/ViewHistoryQuotationModal.vue
  37. 45 4
      src/views/purchase/purchaseQuotationFrm/purchaseQuotationFormList.vue
  38. 18 0
      src/views/purchase/selectionQuotationForm/SelectionQuotationForm.api.ts
  39. 30 1
      src/views/purchase/selectionQuotationForm/SelectionQuotationForm.data.ts
  40. 1 0
      src/views/purchase/selectionQuotationForm/components/SelectQuotationFormForm.vue
  41. 137 0
      src/views/purchase/selectionQuotationForm/components/ViewFileListModal.vue
  42. 26 4
      src/views/purchase/selectionQuotationForm/selectionQuotationFormList.vue
  43. 5 2
      src/views/saleCode/advancePayment/components/advancePaymentForm.vue
  44. 4 1
      src/views/saleCode/deliveryNotice/components/deliveryNoticeForm.vue
  45. 8 1
      src/views/saleCode/deliveryNotice/delivertNoticeForm.data.ts
  46. 22 11
      src/views/saleCode/quotation/components/quotationFormForm.vue
  47. 19 2
      src/views/saleCode/quotation/quotation.vue
  48. 9 2
      src/views/saleCode/quotation/quotationForm.data.ts
  49. 12 7
      src/views/saleCode/receiptOrder/components/SelectInvoiceModal.vue
  50. 30 8
      src/views/saleCode/receiptOrder/components/receiptOrderForm.vue
  51. 20 19
      src/views/saleCode/receiptOrder/receiptOrderForm.data.ts
  52. 2 0
      src/views/saleCode/saleContract/components/SaleContractForm.vue
  53. 7 0
      src/views/saleCode/saleInquiryForm/SaleInquiryForm.data.ts
  54. 47 0
      src/views/saleCode/saleInquiryForm/SaleInquiryFormList.vue
  55. 664 703
      src/views/saleCode/saleInquiryForm/components/SaleInquiryFormForm.vue
  56. 145 27
      src/views/saleCode/saleInterfaceSync/SaleInterfaceSync.data.ts
  57. 8 0
      src/views/saleCode/saleInterfaceSync/SaleInterfaceSyncList.vue
  58. 3 0
      src/views/saleCode/salesInvoice/components/saleInvoiceForm.vue
  59. 10 0
      src/views/saleCode/salesInvoice/salesInvoiceForm.data.ts
  60. 17 0
      src/views/saleCode/salesInvoice/salesInvoiceList.vue
  61. 12 12
      src/views/saleCode/salesOrder/SaleOrderForm.data.ts
  62. 2 1
      src/views/saleCode/salesOrder/SaleOrderFormList.vue
  63. 4 0
      src/views/saleCode/salesOrder/components/AfterSlaeOrderFormForm.vue
  64. 5 1
      src/views/saleCode/salesOrder/components/SlaeOrderFormForm.vue

+ 1 - 0
src/views/baseCode/ExchangeRate/BaseExchangeRate.data.ts

@@ -79,6 +79,7 @@ export const formSchema: FormSchema[] = [
   {
     label: '月度(month)',
     field: 'month',
+    required: true,
     component: 'JSelectInput',
       componentProps:{
         options: [

+ 19 - 1
src/views/cuspCode/SupplierProfile/CuspSupplierProfile.data.ts

@@ -282,6 +282,7 @@ export const formSchema: FormSchema[] = [
   {
     label: '简称(abbreviation)',
     field: 'abbreviation',
+    required: true,
     colProps: { span: 12 },
     labelWidth: 200,
     component: 'Input',
@@ -328,6 +329,7 @@ export const formSchema: FormSchema[] = [
     field: 'legalPerson',
     colProps: { span: 12 },
     component: 'Input',
+    required: true,
     labelWidth: 200,
     componentProps: {
       AutoComplete: 'off',
@@ -338,6 +340,7 @@ export const formSchema: FormSchema[] = [
     field: 'contacts',
     colProps: { span: 12 },
     labelWidth: 200,
+    required: true,
     component: 'Input',
     componentProps: {
       AutoComplete: 'off',
@@ -348,6 +351,7 @@ export const formSchema: FormSchema[] = [
     field: 'phone',
     colProps: { span: 12 },
     component: 'Input',
+    required: true,
     labelWidth: 200,
     componentProps: {
       AutoComplete: 'off',
@@ -358,6 +362,7 @@ export const formSchema: FormSchema[] = [
     field: 'email',
     colProps: { span: 12 },
     labelWidth: 200,
+    required: true,
     component: 'Input',
     componentProps: {
       AutoComplete: 'off',
@@ -369,6 +374,7 @@ export const formSchema: FormSchema[] = [
     colProps: { span: 12 },
     component: 'Input',
     labelWidth: 200,
+    required: true,
     componentProps: {
       AutoComplete: 'off',
     },
@@ -379,6 +385,7 @@ export const formSchema: FormSchema[] = [
     colProps: { span: 12 },
     labelWidth: 200,
     component: 'Input',
+    required: true,
     componentProps: {
       AutoComplete: 'off',
     },
@@ -389,6 +396,7 @@ export const formSchema: FormSchema[] = [
     colProps: { span: 12 },
     labelWidth: 200,
     component: 'JDictSelectTag',
+    required: true,
     componentProps: {
       dictCode: 'supplier_nature',
     },
@@ -399,6 +407,7 @@ export const formSchema: FormSchema[] = [
     colProps: { span: 12 },
     labelWidth: 200,
     component: 'JDictSelectTag',
+    required: true,
     componentProps: {
       dictCode: 'country',
 	  showSearch: true,
@@ -409,6 +418,7 @@ export const formSchema: FormSchema[] = [
     field: 'abroadSupplier',
     colProps: { span: 12 },
     component: 'JDictSelectTag',
+    required: true,
     componentProps: {
       dictCode: 'yes_or_no',
       stringToNumber: true,
@@ -421,8 +431,9 @@ export const formSchema: FormSchema[] = [
     colProps: { span: 12 },
     labelWidth: 200,
     component: 'JDictSelectTag',
+    required: true,
     componentProps: {
-      dictCode: 'currency	',
+      dictCode: 'currency',
     },
   },
   {
@@ -431,6 +442,7 @@ export const formSchema: FormSchema[] = [
     colProps: { span: 12 },
     labelWidth: 200,
     component: 'JDictSelectTag',
+    required: true,
     componentProps: {
       dictCode: 'yes_or_no',
       stringToNumber: true,
@@ -441,6 +453,7 @@ export const formSchema: FormSchema[] = [
     field: 'openingBank',
     labelWidth: 200,
     colProps: { span: 12 },
+    required: true,
     component: 'Input',
     componentProps: {
       AutoComplete: 'off',
@@ -450,6 +463,7 @@ export const formSchema: FormSchema[] = [
     label: '付款条件(payment terms)',
     field: 'paymentTerms',
     colProps: { span: 12 },
+    required: true,
     labelWidth: 200,
     component: 'JDictSelectTag',
     componentProps: {
@@ -461,6 +475,7 @@ export const formSchema: FormSchema[] = [
     field: 'openingName',
     colProps: { span: 12 },
     labelWidth: 200,
+    required: true,
     component: 'Input',
     componentProps: {
       AutoComplete: 'off',
@@ -481,6 +496,7 @@ export const formSchema: FormSchema[] = [
     label: '银行帐号(bank account)',
     field: 'bankAccount',
     colProps: { span: 12 },
+    required: true,
     labelWidth: 200,
     component: 'Input',
     componentProps: {
@@ -493,6 +509,7 @@ export const formSchema: FormSchema[] = [
     colProps: { span: 12 },
     labelWidth: 200,
     component: 'JDictSelectTag',
+    required: true,
     defaultValue: 1,
     componentProps: {
       dictCode: 'valid_status',
@@ -527,6 +544,7 @@ export const formSchema: FormSchema[] = [
     field: 'subordinateDepart',
     colProps: { span: 12 },
     labelWidth: 200,
+    required: true,
     component: 'ApiSelect',
     componentProps: {
       mode: 'multiple',//multiple: 多选;不填写为单选

+ 2 - 0
src/views/inventiry/inventoryCheck/components/inventoryCheckForm.vue

@@ -74,6 +74,8 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           @value-change="changeValues"
         >
           <template #action="props">

+ 2 - 0
src/views/inventiry/otherIn/components/otherInForm.vue

@@ -122,6 +122,8 @@
           :rowNumber="true"
           :rowSelection="false"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
         >
           <template #action="props">
             <a-popconfirm title="确定删除吗?" @confirm="handleDelete(props)" v-if="!disabled">

+ 2 - 0
src/views/inventiry/otherOut/components/otherOutForm.vue

@@ -70,6 +70,8 @@
           :dataSource="otherOutTable.dataSource"
           :disabled="disabled"
           :rowNumber="true"
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           :rowSelection="true"
           asyncRemove
         >

+ 39 - 21
src/views/inventiry/purInAbnormal/components/purInAbnormalForm.vue

@@ -42,7 +42,19 @@
                 id="SaleOrderForm-productionClass"
                 name="productionClass"
               >
-                <a-input v-model:value="formData.productionClass" placeholder="请输入" allow-clear disabled />
+			  
+			    <ApiSelect
+			      :api="ClassList"
+			      showSearch
+			      v-model:value="formData.productionClass"
+			      optionFilterProp="label"
+			      resultField="records"
+			      labelField="name"
+			      valueField="id"
+			      :params="{ pageSize: -1 }"
+			      disabled
+			    />
+               <!-- <a-input v-model:value="formData.productionClass" placeholder="请输入" allow-clear disabled /> -->
               </a-form-item>
             </a-col>
             <a-col :span="12">
@@ -97,23 +109,7 @@
 
     <!-- 子表单区域 -->
     <a-tabs v-model:activeKey="activeKey" animated style="padding: 24px; padding-top: 0px">
-      <a-tab-pane tab="船明细(ship details)" key="purInAbnormalShip" :forceRender="true">
-        <j-vxe-table
-          :keep-source="true"
-          resizable
-          ref="purInAbnormalShipTableRef"
-          :loading="purInAbnormalShipTable.loading"
-          :columns="purInAbnormalShipTable.columns"
-          :dataSource="purInAbnormalShipTable.dataSource"
-          :disabled="disabled"
-          :rowNumber="true"
-          :rowSelection="true"
-        >
-          <template #action="props">
-            <a @click="viewAccessory(props)">查看配件信息(view accessory information)</a>
-          </template>
-        </j-vxe-table>
-      </a-tab-pane>
+      
       <a-tab-pane tab="入库明细(stock in details)" key="stockIn" :forceRender="true">
         <j-vxe-table
           :keep-source="true"
@@ -126,8 +122,27 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
         />
       </a-tab-pane>
+	  <a-tab-pane tab="船明细(ship details)" key="purInAbnormalShip" :forceRender="true">
+	    <j-vxe-table
+	      :keep-source="true"
+	      resizable
+	      ref="purInAbnormalShipTableRef"
+	      :loading="purInAbnormalShipTable.loading"
+	      :columns="purInAbnormalShipTable.columns"
+	      :dataSource="purInAbnormalShipTable.dataSource"
+	      :disabled="disabled"
+	      :rowNumber="true"
+	      :rowSelection="true"
+	    >
+	      <template #action="props">
+	        <a @click="viewAccessory(props)">查看配件信息(view accessory information)</a>
+	      </template>
+	    </j-vxe-table>
+	  </a-tab-pane>
     </a-tabs>
     <BaseShipArchiveAccessoriesModal ref="BaseShipArchiveAccessoriesModalRef" />
   </a-spin>
@@ -137,7 +152,7 @@
   import { defineComponent, ref, reactive, computed, toRaw } from 'vue';
   import { defHttp } from '/@/utils/http/axios';
   import { useValidateAntFormAndTable } from '/@/hooks/system/useJvxeMethods';
-  import { queryPurInAbnormalFormShip, querystockInByMainId, queryDataById } from '../purInAbnormalForm.api';
+  import { queryPurInAbnormalFormShip, querystockInByMainId, ClassList, queryDataById } from '../purInAbnormalForm.api';
   import { JVxeTable } from '/@/components/jeecg/JVxeTable';
   import { purInAbnormalShipColumns, stockInColumns } from '../purInAbnormalForm.data';
   import BaseShipArchiveAccessoriesModal from '../../../publicComponents/BaseShipArchiveAccessoriesModal.vue';
@@ -146,6 +161,7 @@
   import { JDictSelectTag } from '/@/components/Form';
   import { Form, message } from 'ant-design-vue';
   import { useGlobSetting } from '/@/hooks/setting';
+  import { ApiSelect } from '/@/components/Form/index';
   import moment from 'moment';
   const useForm = Form.useForm;
   export default defineComponent({
@@ -156,6 +172,7 @@
       JUpload,
       JDictSelectTag,
       BaseShipArchiveAccessoriesModal,
+	  ApiSelect
     },
     props: {
       formDisabled: {
@@ -184,7 +201,7 @@
         columns: stockInColumns,
         dataSource: [],
       });
-      const activeKey = ref('purInAbnormalShip');
+      const activeKey = ref('stockIn');
       const formData = reactive<Record<string, any>>({
         id: '',
         status: undefined,
@@ -234,7 +251,7 @@
         resetFields();
         purInAbnormalShipTable.dataSource = [];
         stockInTable.dataSource = [];
-        activeKey.value = 'purInAbnormalShip';
+        activeKey.value = 'stockIn';
       }
       async function edit(row) {
         //主表数据
@@ -337,6 +354,7 @@
         BaseShipArchiveAccessoriesModalRef,
         viewAccessory,
         baseUrl,
+        ClassList,
       };
     },
   });

+ 1 - 1
src/views/inventiry/purInAbnormal/purInAbnormalForm.api.ts

@@ -11,8 +11,8 @@ enum Api {
   purInFormShipList = '/storeCode/storePurchaseIn/queryStorePurchaseInShipByMainId',
   stockInFormProductList = '/storeCode/storePurchaseIn/queryStorePurchaseInDetailsByMainId',
   Processed='/storeCode/storePurchaseIn/hasDeal',
-  supplierList='/cuspCode/cuspSupplierProfile/list',
   classList='baseCode/baseProductClass/list',
+  supplierList='/cuspCode/cuspSupplierProfile/list',
   projectList='/baseCode/baseProjectArchive/list'
 }
 /**

+ 23 - 11
src/views/inventiry/purInAbnormal/purInAbnormalForm.data.ts

@@ -221,17 +221,29 @@ export const stockInColumns: JVxeColumn[] = [
       defaultValue:'',  
       width:"200px",
     },
-    {
-      title: '合格(qualified)',
-      key: 'qualified',
-      width:"200px",
-      placeholder: '请输入${title}',
-      defaultValue:'',
-      type: JVxeTypes.normal,
-      options: [],
-      dictCode: 'yes_or_no',
-      stringToNumber:true,
-    },
+    // {
+    //   title: '合格(qualified)',
+    //   key: 'qualified',
+    //   width:"200px",
+    //   placeholder: '请输入${title}',
+    //   defaultValue:'',
+    //   type: JVxeTypes.normal,
+    //   options: [],
+    //   dictCode: 'yes_or_no',
+    //   stringToNumber:true,
+    // },
+	
+	{
+	  title: '合格(qualified)',
+	  key: 'qualified',
+	  width:"200px",
+	  placeholder: '请输入${title}',
+	  defaultValue:'',
+	  type: JVxeTypes.select,
+	  options: [],
+	  dictCode: 'yes_or_no',
+	  
+	},
     // {
     //   title: '批号(batch code)',
     //   key: 'batchCode',

+ 2 - 0
src/views/inventiry/purchaseIn/components/purchaseInForm.vue

@@ -127,6 +127,8 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
         >
           <template #action="props">
             <a-popconfirm title="确定删除吗?" @confirm="handleDelete(props)" v-if="!disabled">

+ 7 - 0
src/views/inventiry/salesOutbound/components/SelectDeliveryModal.vue

@@ -249,6 +249,13 @@
             align:"center",
             width:250,
         },
+        {
+            title: '制单时间(createTime)',
+            key: 'createTime',
+            dataIndex: 'createTime',
+            align:"center",
+            width:250,
+        },
         // {
         //     title: '数量(quantity)',
         //     key: 'quantity',

+ 10 - 0
src/views/platformBusiness/commissionOrder/commissionOrder.vue

@@ -58,6 +58,16 @@
                 <JDictSelectTag v-model:value="queryParam.close" placeholder="请选择" dictCode="yes_or_no" style="width: 100%" />
               </a-form-item>
             </a-col>
+            <a-col :lg="8">
+              <a-form-item name="organize" :label-col="{ style: 'width: 200px' }">
+                <template #label><span title="组织(organize)">组织(organize)</span></template>
+                <a-select v-model:value="queryParam.organize">
+                  <a-select-option value="">请选择</a-select-option>
+                  <a-select-option value="上海">上海</a-select-option>
+                  <a-select-option value="香港">香港</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
           </template>
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">

+ 6 - 0
src/views/platformBusiness/commissionOrder/commissionOrderForm.data.ts

@@ -8,6 +8,7 @@ export const columns: BasicColumn[] = [
    {
     title: '订单编号(bill code)',
     align:"center",
+	width:150,
     dataIndex: 'billCode'
    },   
    {
@@ -67,6 +68,11 @@ export const columns: BasicColumn[] = [
     align:"center",
     dataIndex: 'supplierPayment'
    },
+   {
+    title: '组织(organize)',
+    align:"center",
+    dataIndex: 'organize'
+   },
 ];
 
 

+ 10 - 0
src/views/platformBusiness/commissionOrder/components/commissionOrderFormForm.vue

@@ -4,6 +4,14 @@
       <template #detail>
         <a-form v-bind="formItemLayout" name="commissionOrderForm" ref="formRef">
           <a-row>
+			<a-col :span="12">
+			    <a-form-item label="组织(organize)" v-bind="validateInfos.organize" id="SaleOrderForm-organize" name="organize">
+			      <a-select v-model:value="formData.organize" :disabled="formData.id !== '' && formData.submit == '1'">
+			        <a-select-option value="上海">上海</a-select-option>
+			        <a-select-option value="香港">香港</a-select-option>
+			      </a-select>
+			    </a-form-item>
+			</a-col>
             <a-col :span="12">
               <a-form-item label="订单编号(bill code)" v-bind="validateInfos.billCode" id="commissionOrderForm-billCode" name="billCode">
                 <a-input v-model:value="formData.billCode" placeholder="自动生成" disabled />
@@ -211,6 +219,7 @@
         customerId: '',
         customerName: '',
         currency: '',
+        organize: '',
         salesman: '',
         salesmanName: '',
         saleDepartmen: '',
@@ -226,6 +235,7 @@
       const validatorRules = reactive({
         supplierId: [{ required: true, message: '请选择供应商(supplier)' }],
         currency: [{ required: true, message: '请选择币种(currency)' }],
+        organize: [{ required: true, message: '请选择组织(organize)' }],
       });
       const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
       const dbData = {};

+ 8 - 3
src/views/publicComponents/SelectSaleOrderMianModal.vue

@@ -28,11 +28,11 @@
                                 <ApiSelect
                                     :api="projectListList"
                                     showSearch
-                                    v-model:value="queryParams.project"
+                                    v-model:value="queryParams.projectName"
                                     optionFilterProp="label"
                                     resultField="records"
                                     labelField="code"
-                                    valueField="id"
+                                    valueField="code"
                                     />
                             </a-form-item>
                         </a-col>                 
@@ -292,7 +292,12 @@
         pagination.value.pageSize = 100; 
     }
     //预收款节点和收款单节点
-    function getTable(){
+    function getTable(project){
+		
+		if(project !=null  && project != ''){
+			queryParams.value.projectName = project;
+		}
+		
         visible.value = true
         getListUrl.value='/saleCode/saleOrder/list'
         loadData()

+ 19 - 0
src/views/publicComponents/SelectSupplierQuotation.vue

@@ -140,6 +140,9 @@
     import { JDictSelectTag,JInput} from '/@/components/Form';
     import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
     import {ProjectOption,ClassList,supplierOption} from '../saleCode/deliveryNotice/delivertNoticeForm.api';
+	
+	import moment from 'moment';
+
     const emit = defineEmits([ 'selectSupplierQuatationConfirm']); //定义emit
     var visible = ref(false)
     var fatherProject = ref('')
@@ -260,6 +263,10 @@
     const queryParams = ref({
         billCode:'',
         billDate:'',
+		// billDate: [
+		//           moment().subtract(30, 'days').format('YYYY-MM-DD'),  // 一个月前
+		//           moment().format('YYYY-MM-DD')                     // 当前日期
+		//         ],
         selectionSupplier:'',
         priority:'',
         productionClass:'',
@@ -419,6 +426,18 @@
        pagination.value.pageSize = 100; 
     }
     function getTable(formData,data){
+		
+		// // 获取当前日期
+		// const currentDate = new Date();
+		
+		// // 获取一个月前的日期
+		// const oneMonthAgo = new Date(currentDate);
+		// oneMonthAgo.setMonth(currentDate.getMonth() - 1);
+		
+		// // 获取一个月后的日期  
+		// const oneMonthLater = new Date(currentDate);
+		// oneMonthLater.setMonth(currentDate.getMonth() + 1);
+
         visible.value = true
         if(data){
             if(formData.projectName&&formData.projectName!==''){

+ 7 - 0
src/views/publicComponents/selectArrivalList.vue

@@ -221,6 +221,13 @@
             align:"center",
             width:250,
         },
+        {
+            title: '制单时间(createTime)',
+            key: 'createTime',
+            dataIndex: 'createTime',
+            align:"center",
+            width:250,
+        },
     ];
     const labelCol = ref({
     xs: { span: 24 },

+ 2 - 0
src/views/purchase/advancePayment/components/PurAdvancePaymentForm.vue

@@ -99,6 +99,8 @@
           :disabled="disabled"
           :rowNumber="false"
           :rowSelection="true"
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           >
             <template #action="props">
               <a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)" v-if="!disabled">

+ 3 - 3
src/views/purchase/arrivedGoods/ArriveGoodsList.vue

@@ -138,9 +138,9 @@
         <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" v-auth="'purCode:pur_delivery_note:exportXls'">
           导出(export)</a-button
         >
-        <a-button type="primary" @click="submit"> 提交(submit)</a-button>
-        <a-button type="primary" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
-        <a-button type="primary" @click="close" auth="'purCode:pur_delivery_note:close'"> 关闭(close)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_delivery_note:add'" @click="submit"> 提交(submit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_delivery_note:add'" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_delivery_note:close'" @click="close"> 关闭(close)</a-button>
         <!-- <a-button type="primary" @click="cancelClose"> 取消关闭(cancel close)</a-button> -->
         <a-dropdown v-if="selectedRowKeys.length > 0">
           <template #overlay>

+ 2 - 0
src/views/purchase/arrivedGoods/components/ArriveGoodsFormForm.vue

@@ -193,6 +193,8 @@
           :disabled="disabled"
           :rowNumber="true"
           :rowSelection="true"
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           asyncRemove
         >
           <template #action="props">

+ 2 - 2
src/views/purchase/commissionPayRequest/commissionPayRequestList.vue

@@ -83,8 +83,8 @@
         <a-button type="primary" v-auth="'purCode:pur_commission_request:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls">
           导出(export)</a-button
         >
-        <a-button type="primary" @click="submit"> 提交(submit)</a-button>
-        <a-button type="primary" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_commission_request:add'" @click="submit"> 提交(submit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_commission_request:add'" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
         <a-dropdown v-if="selectedRowKeys.length > 0">
           <template #overlay>
             <a-menu>

+ 2 - 0
src/views/purchase/commissionPayRequest/components/commissionPayRequestForm.vue

@@ -102,6 +102,8 @@
           :disabled="disabled"
           :rowNumber="true"
           :rowSelection="true"
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           asyncRemove
         >
           <template #action="props">

+ 4 - 4
src/views/purchase/freightPurchaseOrder/FreightPurchaseOrderList.vue

@@ -53,12 +53,12 @@
         <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" v-auth="'purCode:pur_shipping_fee:exportXls'">
           导出(export)</a-button
         >
-        <a-button type="primary" @click="submit"> 提交(submit)</a-button>
-        <a-button type="primary" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_shipping_fee:add'" @click="submit"> 提交(submit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_shipping_fee:add'" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
         <a-button type="primary" @click="close" v-auth="'purCode:pur_shipping_fee:close'"> 关闭(close)</a-button>
         <!-- <a-button type="primary" @click="cancelClose"> 取消关闭(cancel close)</a-button> -->
-        <a-button type="primary" @click="confirm"> 确认(confirm)</a-button>
-        <a-button type="primary" @click="cancelConfirm"> 取消确认(cancel confirm)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_shipping_fee:add'" @click="confirm"> 确认(confirm)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_shipping_fee:add'" @click="cancelConfirm"> 取消确认(cancel confirm)</a-button>
         <a-dropdown v-if="selectedRowKeys.length > 0">
           <template #overlay>
             <a-menu>

+ 2 - 0
src/views/purchase/freightPurchaseOrder/components/FreightPurOrderForm.vue

@@ -84,6 +84,8 @@
           :disabled="disabled"
           :rowNumber="true"
           :rowSelection="true"
+		  :maxHeight="540"
+		  :keyboardEdit="true"
         >
           <template #action="props" v-if="!disabled">
             <a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)">

+ 2 - 2
src/views/purchase/payment/paymentList.vue

@@ -59,8 +59,8 @@
         <a-button type="primary" v-auth="'purCode:pur_payment:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls">
           导出(export)</a-button
         >
-        <a-button type="primary" @click="submit"> 提交(submit)</a-button>
-        <a-button type="primary" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_payment:add'" @click="submit"> 提交(submit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_payment:add'" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
         <a-dropdown v-if="selectedRowKeys.length > 0">
           <template #overlay>
             <a-menu>

+ 2 - 0
src/views/purchase/purPaymentRequest/components/purPaymentRequestForm.vue

@@ -104,6 +104,8 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           @value-change="changeValues"
         >
           <template #action="props">

+ 2 - 0
src/views/purchase/purchaseInquiryForm/components/PurchaseInquiryFormForm.vue

@@ -272,6 +272,8 @@
           :dataSource="PuechaseInquiryFormProductTable.dataSource"
           :disabled="disabled"
           :rowNumber="true"
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           :rowSelection="true"
           asyncRemove
         >

+ 35 - 4
src/views/purchase/purchaseInquiryForm/purchaseInquiryFormList.vue

@@ -143,8 +143,8 @@
         <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" v-auth="'purCode:pur_inquiry_form:exportXls'">
           导出(export)</a-button
         >
-        <a-button type="primary" @click="submit"> 提交(submit)</a-button>
-        <a-button type="primary" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_inquiry_form:add'" @click="submit"> 提交(submit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_inquiry_form:add'" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
         <a-dropdown v-if="selectedRowKeys.length > 0">
           <template #overlay>
             <a-menu>
@@ -162,10 +162,13 @@
       </template>
       <!--附件-->
       <template #saleAttachs="{ record }">
-        <a-dropdown v-if="record.saleAttachs !== ''">
+        <a-dropdown v-if="record.saleAttachs != '' && record.saleAttachs != null">
           <template #overlay>
             <a-menu>
-              <a-menu-item key="1" v-for="(item, index) in record.saleAttachs.split(',')" :key="index">
+				<a-menu-item key="2">
+				  <a style="color:blue" @click="downloadAll(record.saleAttachs.split(','))">下载全部</a>
+				</a-menu-item>
+              <a-menu-item v-for="(item, index) in record.saleAttachs.split(',')" :key="index">
                 <a :href="baseUrl + item">{{ item }}</a>
               </a-menu-item>
             </a-menu>
@@ -301,6 +304,34 @@
   async function batchHandleDelete() {
     await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
   }
+  /**
+   * 批量下载
+   */
+  async function downloadAll(itemList) {
+ 
+	for (const item of itemList) {
+	    await this.downloadImage(item);
+	    // 添加短暂延迟避免请求过于频繁
+	    await new Promise(resolve => setTimeout(resolve, 100));
+	  }
+  }
+  
+  function downloadImage(url) {
+    return new Promise((resolve, reject) => {
+      const link = document.createElement('a');
+      link.href = baseUrl + url;
+      link.download = ''; // 可以设置文件名
+      link.style.display = 'none';
+      
+      document.body.appendChild(link);
+      link.click();
+      document.body.removeChild(link);
+      
+      // 给浏览器一点时间处理下载
+      setTimeout(resolve, 50);
+    });
+  }
+  
   /**
    * 成功回调
    */

+ 7 - 0
src/views/purchase/purchaseOrder/PurchaseOrderForm.data.ts

@@ -157,6 +157,13 @@ export const columns: BasicColumn[] = [
       align:"center",
       dataIndex: 'createBy',
     },
+	{
+	   title: '销售附件(attachs)',
+	   align:"center",
+	   dataIndex: 'sourceCode2_dictText',
+	   width:350,
+	   slots: { customRender: 'saleAttachs' },
+	 },
 ];
 
 //子表表格配置

+ 83 - 3
src/views/purchase/purchaseOrder/PurchaseOrderFormList.vue

@@ -151,9 +151,13 @@
       <!--插槽:table标题-->
       <template #tableTitle>
         <a-button type="primary" v-auth="'purCode:pur_order:add'" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增(add)</a-button>
-        <a-button type="primary" v-auth="'purCode:pur_order:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls">
-          导出(export)</a-button
-        >
+       
+		<a-button type="primary" v-auth="'purCode:pur_order:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls2">
+		  导出(export)</a-button
+		>
+		<a-button type="primary" v-auth="'purCode:pur_order:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls">
+		  导出明细(export)</a-button
+		>
         <a-button type="primary" v-auth="'purCode:pur_order:add'" @click="submit"> 提交(submit)</a-button>
         <a-button type="primary" v-auth="'purCode:pur_order:add'" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
         <a-button type="primary" @click="close" v-auth="'purCode:pur_order:close'"> 关闭(close)</a-button>
@@ -187,6 +191,24 @@
       <template #viewFile="props">
         <a @click="viewFileDetail(props)">查看(view)</a>
       </template>
+	  
+	  
+	  <template #saleAttachs="{ record }">
+	    <a-dropdown v-if="record.sourceCode2_dictText != '' && record.sourceCode2_dictText != null">
+	      <template #overlay>
+	        <a-menu>
+	  				<a-menu-item key="2">
+	  				  <a @click="downloadAll(record.sourceCode2_dictText.split(','))">下载全部</a>
+	  				</a-menu-item>
+	          <a-menu-item v-for="(item, index) in record.sourceCode2_dictText.split(',')" :key="index">
+	            <a :href="baseUrl + item">{{ item }}</a>
+	          </a-menu-item>
+	        </a-menu>
+	      </template>
+	      <a>查看<a-icon type="down" /></a>
+	    </a-dropdown>
+	  </template>
+	  
     </BasicTable>
     <!-- 表单区域 -->
     <PurchaseOrderFormModal @register="registerModal" @success="handleSuccess" />
@@ -239,6 +261,9 @@
   const ViewHistoryVersionModallRef = ref();
   const queryParam = reactive<any>({});
   var SetCloseReasonModalRef = ref();
+  import { useGlobSetting } from '/@/hooks/setting';
+  const { domainUrl } = useGlobSetting();
+  const baseUrl = domainUrl + '/sys/common/static/';
   var showField = ref('currency_dictText+name');
   //注册model
   const [registerModal, { openModal }] = useModal();
@@ -291,6 +316,34 @@
   }
   
   
+  //注册table数据
+  const { onExportXls: onExportXls2 } = useListPage({
+    tableProps: {
+      title: '采购订单列表',
+      api: list,
+      columns,
+      canResize: false,
+      useSearchForm: false,
+      actionColumn: {
+        width: 300,
+        fixed: 'right',
+      },
+      scroll: {
+        x: '4000px',
+        y:'calc(100vh - 400px)',
+      },
+      beforeFetch: async (params) => {
+        let rangerQuery = await setRangeQuery();
+        return Object.assign(params, rangerQuery);
+      },
+    },
+    exportConfig: {
+      name: '采购订单列表',
+      url: '/purCode/purOrder/exportXls2',
+      params: queryParam,
+    }
+  });
+  
   /**
    * 新增事件(售后)
    */
@@ -599,6 +652,33 @@
 
   let rangeField = 'billDate,';
 
+  /**
+   * 批量下载
+   */
+  async function downloadAll(itemList) {
+   
+  	for (const item of itemList) {
+  	    await this.downloadImage(item);
+  	    // 添加短暂延迟避免请求过于频繁
+  	    await new Promise(resolve => setTimeout(resolve, 100));
+  	  }
+  }
+  
+  function downloadImage(url) {
+    return new Promise((resolve, reject) => {
+      const link = document.createElement('a');
+      link.href = baseUrl + url;
+      link.download = ''; // 可以设置文件名
+      link.style.display = 'none';
+      
+      document.body.appendChild(link);
+      link.click();
+      document.body.removeChild(link);
+      
+      // 给浏览器一点时间处理下载
+      setTimeout(resolve, 50);
+    });
+  }
   /**
    * 设置范围查询条件
    */

+ 2 - 0
src/views/purchase/purchaseOrder/components/AfterPurchaseOrderFormForm.vue

@@ -333,6 +333,8 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           @value-change="changeValues"
         >
           <template #action="props">

+ 109 - 19
src/views/purchase/purchaseOrder/components/PurchaseOrderFormForm.vue

@@ -194,7 +194,8 @@
             </a-col>
             <a-col :span="12">
               <a-form-item label="币种(currency)" v-bind="validateInfos.currency" id="PurchaseOrderFormModal-currency" name="currency">
-                <JDictSelectTag :disabled="!hasPermission('purCode:pur_order:editBZ')" :showChooseOption='false' v-model:value="formData.currency"  dictCode="currency" @change="handleChangeCurrency" />
+                <!-- <JDictSelectTag :disabled="!hasPermission('purCode:pur_order:editBZ')" :showChooseOption='false' v-model:value="formData.currency"  dictCode="currency" @change="handleChangeCurrency" /> -->
+                <JDictSelectTag :disabled="!hasPermission('purCode:pur_order:editBZ')" :showChooseOption='false' v-model:value="formData.currency"  dictCode="currency" />
               </a-form-item>
             </a-col>
             <a-col :span="12">
@@ -214,7 +215,8 @@
 				  id="PurchaseOrderFormModal-exchangeRate"
 				  name="exchangeRate"
 				>
-				  <a-input v-model:value="formData.exchangeRate" placeholder="请输入" allow-clear AutoComplete="off" disabled />
+				  <a-input-number :disabled="!hasPermission('purCode:pur_order:editHL')" :min="0.0000001" v-model:value="formData.exchangeRate" @focus="handleFocus" title="失去焦点时自动计算"
+						@blur="handleBlur"  placeholder="请输入" allow-clear AutoComplete="off"  />
 				</a-form-item>
             </a-col>
             <a-col :span="12">
@@ -334,6 +336,8 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           @value-change="changeValues"
         >
           <template #action="props">
@@ -436,6 +440,7 @@
       const { hasPermission } = usePermission();
       const userStore = useUserStore();
       const loading = ref(false);
+      const actionListen = ref(true);
       const formRef = ref();
       const PurOrderFormShipFormShipTableRef = ref();
       const SelectPrpductModalRef = ref();
@@ -443,6 +448,7 @@
       const SelectSupplierQuotationRef = ref();
       const BaseShipArchiveAccessoriesModalRef = ref();
       const SelectSaleOrderModalRef = ref();
+      let oldNum = ref();
 	  
 	  const modalVisible = ref(false);
 	  const confirmLoading = ref(false);
@@ -492,6 +498,7 @@
 			inputValue.value = '';
 	        confirmLoading.value = false; // 无论成功失败都关闭加载
 	        modalVisible.value = false;
+	        actionListen.value = false;
 	      }
 	  };
 	  
@@ -774,7 +781,7 @@
           item.taxPrice = item.taxPriceGys;
           item.taxAmount = (item.taxPrice * item.quantity).toFixed(2);
           formData.notes = data[0].notes;
-          item.notes = '';
+          item.notes = item.childNotes;
           // item.productClass =data[0].productClass
         });
         var xTable = purOrderFormShipFormProductTableRef.value!.getXTable();
@@ -986,30 +993,110 @@
         },
         { deep: true }
       );
-   //    // 监听币种变化,获取汇率
-   //    watch(() => formData.currency, 
+      // 监听币种变化,获取汇率
+      watch(() => formData.currency, 
+        async (newVal, oldVal) => {
+			// console.log("==================1================");
+			// console.log(confirmLoading.value);
+			// console.log("===================2===============");
+          if (newVal && newVal !== oldVal && oldVal!=null && oldVal!='' && actionListen.value) {
+            // setExchangeRate();
+            await handleChangeCurrency(newVal, oldVal);
+          }else{
+			  
+			  actionListen.value = true;
+		  }
+        },
+        { immediate: false }
+      );
+      // 监听汇率
+   //    watch(() => formData.exchangeRate, 
    //      async (newVal, oldVal) => {
-			
+			// console.log(oldVal+"===========第一步==============="+newVal,"========"+oldNum.value)
+		  
    //        if (newVal && newVal !== oldVal && oldVal!=null && oldVal!='') {
-   //          // setExchangeRate();
-   //          await handleChangeCurrency(newVal, oldVal);
+			// handleChangeCurrency2(oldVal,newVal);
    //        }
    //      },
    //      { immediate: true }
    //    );
-   //    // 监听日期变化,获取汇率
-   //    watch(() => formData.billDate,
-   //      async (newDate, oldDate) => {
-   //      const currentCurrency = formData.currency;
-   //      if (currentCurrency && newDate !== oldDate) {
-   //        // 保留当前币种不变,但重新获取汇率并刷新子表
+      // 监听日期变化,获取汇率
+     //  watch(() => formData.billDate,
+     //    async (newDate, oldDate) => {
+     //    const currentCurrency = formData.currency;
+     //    if (currentCurrency && newDate !== oldDate) {
+     //      // 保留当前币种不变,但重新获取汇率并刷新子表
 		   
-   //        await handleChangeCurrency(currentCurrency, currentCurrency);
-   //      }
-   //    },
-   //    { immediate: false }
-   //    );
+     //      await handleChangeCurrency(currentCurrency, currentCurrency);
+     //    }
+     //  },
+     //  { immediate: false }
+     //  );
+	 
+	  async function handleFocus(event) {
+		   oldNum.value = event.target.value	  
+	       console.log('元素聚焦', event.target.value);
+	  }
+	  async function handleBlur(event) {
+		   // console.log('元素失去焦点', event.target.value);
+		   // console.log('元素失去焦点',isNaN(Number(event.target.value)));
+		  if(event.target.value == null || event.target.value == '' || event.target.value == 0){
+			  formData.exchangeRate = oldNum.value;
+			  message.warning('汇率不能为空或0,请重新输入');
+			  return
+		  }
+		  
+		  if(isNaN(Number(event.target.value))){
+			  formData.exchangeRate = oldNum.value;
+			  message.warning('输入汇率不合法,请重新输入');
+			  return
+		  }
+		   await handleChangeCurrency2(oldNum.value,event.target.value);
+	  }
+      async function handleChangeCurrency2 (oldExchangeRate?: number, newExchangeRate?: number) {
+		  // console.log("==========================newCurrency",oldExchangeRate)
+		  // console.log("==========================oldCurrency",newExchangeRate)
+		  if(newExchangeRate <= 0){
+			   formData.exchangeRate = oldExchangeRate;
+			   
+			   message.warning('汇率不合法,请重新输入');
+			   return
+		  }
+
+          try {
+			
+            formData.exchangeRate = isNaN(newExchangeRate) ? '' : newExchangeRate;
+            purOrderFormShipFormProductTable.dataSource = purOrderFormShipFormProductTable.dataSource.map(item => {
+              const originalTaxPriceOriginal = item.taxPriceOriginal;
+              if (!originalTaxPriceOriginal) return item;
+              // 换算逻辑:原币种金额 × 原汇率 ÷ 新汇率
+              const convertedTaxPriceOriginal = originalTaxPriceOriginal * oldExchangeRate / newExchangeRate;
+              return {
+                ...item,
+                taxPriceOriginal: convertedTaxPriceOriginal.toFixed(4).replace(/\.?0+$/, '') || '',
+                _needUpdate: true // 标记需要更新的行
+              };
+            });
+            // 手动触发 changeValues 计算其他字段
+              const updatedDataSource = purOrderFormShipFormProductTable.dataSource;
+              updatedDataSource.forEach((row,index) => {
+              if (row._needUpdate) {
+                changeValues({
+                  col: { key: 'taxPriceOriginal' },
+                  row: row,
+                  rowIndex: index
+                });
+              }
+            });
+          } catch (err) {
+            console.error('汇率换算失败:', err);
+            // formData.exchangeRate = '';
+          }
+      };
       async function handleChangeCurrency (newCurrency?: string, oldCurrency?: string) {
+		  // console.log("==========================newCurrency",newCurrency)
+		  // console.log("==========================oldCurrency",oldCurrency)
+		  
 		  if (!newCurrency || !oldCurrency){
 			  
 			  formData.exchangeRate = '';
@@ -1106,6 +1193,9 @@
         SelectSupplierQuotationList,
         addFromQuotation,
         handleChangeCurrency,
+        handleChangeCurrency2,
+        handleFocus,
+        handleBlur,
         showModal,
 		modalVisible,
 		inputValue,

+ 3 - 4
src/views/purchase/purchaseOrderB2B/PurchaseOrderFormB2BList.vue

@@ -141,13 +141,13 @@
         <a-button type="primary" v-auth="'b2bCode:pur_order_b2b:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls">
           导出(export)</a-button
         >
-        <a-button type="primary" @click="submit">
+        <a-button type="primary" v-auth="'b2bCode:pur_order_b2b:add'" @click="submit">
           提交(submit)</a-button
         >
-        <a-button type="primary" @click="cancelSubmit">
+        <a-button type="primary" v-auth="'b2bCode:pur_order_b2b:add'" @click="cancelSubmit">
           取消提交(cancel submit)</a-button
         >
-        <a-button type="primary" @click="close">
+        <a-button type="primary" v-auth="'b2bCode:pur_order_b2b:add'" @click="close">
           关闭(close)</a-button
         >
         <a-dropdown v-if="selectedRowKeys.length > 0">
@@ -171,7 +171,6 @@
       </template>
       <!--字段回显插槽-->
       <template #bodyCell="{ column, record, index, text }"> </template>
-      //
       <template #viewFile="props">
         <a @click="viewFileDetail(props)">查看(view)</a>
       </template>

+ 16 - 0
src/views/purchase/purchaseQuotationFrm/PurchaseQuotationForm.api.ts

@@ -16,6 +16,7 @@ enum Api {
   purCodeQuotationFormProductList = '/purCode/purPurchaseQuotation/queryPurPurchaseInquiryProductByMainId',
   submitBatch='/purCode/purPurchaseQuotation/submitBatch',
   cancelSubmitBatch='/purCode/purPurchaseQuotation/returnSubmitBatch',
+  approvalBatch='/purCode/purPurchaseQuotation/approvalBatch',
   classList='baseCode/baseProductClass/list',
   supplierList='/cuspCode/cuspSupplierProfile/list',
   projectList='/baseCode/baseProjectArchive/list',
@@ -96,6 +97,21 @@ export const saveOrUpdate = (params, isUpdate) => {
 */
 export const queryDataById = (id) => defHttp.get({url: Api.queryDataById, params:{ id }});
 
+// 审批
+export const approvalBatch = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认审批',
+    content: '是否审批选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.get({url: Api.approvalBatch, params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}
 // 提交
 export const batchSubmit = (params, handleSuccess) => {
   createConfirm({

+ 3 - 2
src/views/purchase/purchaseQuotationFrm/PurchaseQuotationForm.data.ts

@@ -330,10 +330,11 @@ export const PuechaseQuotationFormProductColumns: JVxeColumn[] = [
     {
       title: '上次报价(last price)',
       key: 'lastPice',
-      type: JVxeTypes.normal,
+      type: JVxeTypes.slot,
       placeholder: '请输入${title}',
-      defaultValue:'',  
+      defaultValue:'查看',  
       width:"200px",
+      slotName: 'lastPrice',
     },
     {
       title: '金额(amount)',

+ 19 - 0
src/views/purchase/purchaseQuotationFrm/components/PurchaseQuotationFormForm.vue

@@ -252,8 +252,13 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           @value-change="changeValues"
         >
+			<template #lastPrice="props">
+			  <a @click="viewHistory(props.row.productId)">查看历史</a>
+			</template>
           <template #action="props">
             <a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)" v-if="!disabled">
               <a>删除(delete)</a>
@@ -282,6 +287,7 @@
     <BaseShipArchiveAccessoriesModal ref="BaseShipArchiveAccessoriesListRef" />
     <SelectPrpductModal ref="SelectPrpductModalRef" @select-product="addProduct" />
     <SelectProjectModal ref="SelectProjectModalRef" @select-project="addProject" />
+    <ViewHistoryQuotationModal ref="ViewHistoryQuotationModalRef" />
     <SelectSupplierInquiryModal ref="SelectSupplierInquiryModalRef" @select-customer-inquiry="addProductFromCustomer" />
     <SetSonList ref="SetSonListRef" @success="setSonListFiled" />
   </a-spin>
@@ -305,6 +311,7 @@
   import SelectPrpductModal from '../../../publicComponents/SelectPrpductModal.vue';
   import SelectProjectModal from '../../../publicComponents/SelectProjectModal.vue';
   import SelectSupplierInquiryModal from './SelectSupplierInquiryModal.vue';
+  import ViewHistoryQuotationModal from './ViewHistoryQuotationModal.vue';
   import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
   import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
   import { JDictSelectTag, ApiSelect, JSelect } from '/@/components/Form';
@@ -329,6 +336,7 @@
       ApiSelect,
       JSelect,
       SetSonList,
+      ViewHistoryQuotationModal,
     },
     props: {
       formDisabled: {
@@ -347,6 +355,7 @@
       var SetSonListRef = ref();
       var SelectPrpductModalRef = ref();
       var SelectProjectModalRef = ref();
+      var ViewHistoryQuotationModalRef = ref();
       var SelectSupplierInquiryModalRef = ref();
       const PuechaseQuotationFormShipTableRef = ref();
       const PuechaseQuotationFormShipTable = reactive<Record<string, any>>({
@@ -496,6 +505,14 @@
         }
       }
 
+
+      //查看上次报价
+      function viewHistory(id) {
+        // console.log("sssssssssssssss"+formData.quotationCustomer);
+        console.log("sssssssssssssss"+id);
+        ViewHistoryQuotationModalRef.value.getTable(formData.quotationSuppiler,id);
+      }
+	  
       function setFieldsValue(values) {
         if (values) {
           Object.keys(values).map((k) => {
@@ -734,6 +751,8 @@
         SetSonListRef,
         setSonListFiled,
         getSupplierCurreny,
+        ViewHistoryQuotationModalRef,
+        viewHistory,
       };
     },
   });

+ 120 - 0
src/views/purchase/purchaseQuotationFrm/components/ViewHistoryQuotationModal.vue

@@ -0,0 +1,120 @@
+<template>
+  <a-modal
+    title="历史报价查看(view historical quotations)"
+    width="70%"
+    :visible="visible"
+    :maskClosable="false"
+    switchFullscreen
+    @cancel="handleCancel">
+      <template #footer>
+        <a-button  @click="handleCancel" >关闭(close)</a-button>
+      </template>
+      <div>
+        <a-card  :body-style="{ padding: '10px' }" :bordered="false" style="margin: 10px;">
+            
+            <a-table
+                :columns="columns"
+                :row-key="record => record.id"
+                :data-source="dataSource"
+                bordered
+                size="small"
+                @change="handleTableChange"
+                :pagination="pagination"
+                :scroll="{ x: 1000, y: 300 }"
+            >
+            </a-table>
+        </a-card>
+      </div>
+  </a-modal>
+</template>
+<script lang="ts" setup>
+  import {ref, reactive } from 'vue';
+  import { defHttp } from '/@/utils/http/axios';
+  import { message } from 'ant-design-vue';
+  import { filterObj, getFileAccessHttpUrl } from '/@/utils/common/compUtils';
+  import { JDictSelectTag} from '/@/components/Form';
+  const emit = defineEmits([ 'selectProduct']); //定义emit
+  let classOption = ref([])
+  var visible = ref(false)
+  const columns = [
+      {
+          title: '项目号(project code)',
+          dataIndex: 'projectName',
+          key: 'projectName',
+          align:"center",
+          width:150
+      },
+      {
+          title: '报价时间(quotation date)',
+          dataIndex: 'billDate',
+          key: 'billDate',
+          align:"center",
+          width:150
+      },
+      {
+          title: '价格(price)',
+          dataIndex: 'totalAmount',
+          key: 'totalAmount',
+          align:"center",
+          width:100
+      },
+  ];
+  const dataSource =ref([]);
+  let selectedRowKeys = ref([]);
+  let selectedRows = ref([]);
+  let pagination = ref({
+    current: 1,
+    pageSize: 10,
+    total: '', // 假设总共有100条数据
+    showSizeChanger: true,
+    showQuickJumper: true,
+    showTotal: (total, range) => {
+        return range[0] + "-" + range[1] + " 共" + total + "条"
+    },
+    size:'small'
+  });
+  
+  function loadData(quotationSuppiler,productId){
+     let params={quotationSuppiler:quotationSuppiler,productId:productId}
+     defHttp.get({url:"/purCode/purPurchaseQuotation/queryHisByInfo",params}).then(res=>{
+       console.log("ssssssssssssss");
+       console.log(res);
+       console.log(res.result);
+         if(res){
+           dataSource.value = res
+         }
+     })
+  };
+
+  function handleTableChange(paginations, filters, sorter){
+      pagination.value.total = paginations.total;
+      pagination.value.current = paginations.current;
+      pagination.value.pageSize = paginations.pageSize;
+      // loadData()
+  };
+  function onSelectChange(keys,rows){
+      selectedRowKeys.value = keys
+      selectedRows.value = rows
+  }
+  function handleCancel(){
+    visible.value = false
+    selectedRowKeys.value = []
+    selectedRows.value=[]
+  }
+  function getTable(quotationSuppiler,productId){
+      visible.value = true
+      loadData(quotationSuppiler,productId)
+  }
+  defineExpose({
+    getTable
+  });
+</script>
+<style scoped lang="less">
+/deep/.ant-form-item{
+  margin-bottom: 8px !important;
+}
+// /deep/.ant-table-wrapper .ant-table-thead > tr > th, .ant-table-wrapper .ant-table-thead > tr > td{
+//     padding: 8px !important;
+// }
+
+</style>

+ 45 - 4
src/views/purchase/purchaseQuotationFrm/purchaseQuotationFormList.vue

@@ -121,12 +121,16 @@
         <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined" v-auth="'purCode:pur_purchase_quotation:add'">
           新增(add)</a-button
         >
+		<a-button type="primary" v-auth="'purCode:pur_purchase_quotation:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls2">
+		  导出(export)</a-button
+		>
         <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" v-auth="'purCode:pur_purchase_quotation:exportXls'">
-          导出(export)</a-button
+          导出明细(export)</a-button
         >
-        <a-button type="primary" @click="submit"> 提交(submit)</a-button>
-        <a-button type="primary" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-button type="primary" v-auth="'purCode:pur_purchase_quotation:add'" @click="submit"> 提交(submit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_purchase_quotation:add'" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
+      <!--  <a-button type="primary" v-auth="'purCode:pur_purchase_quotation:approval'" @click="approval"> 审批(approval)</a-button> -->
+        <a-dropdown v-if="selectedRowKeys.length > 0" v-auth="'purCode:pur_purchase_quotation:deleteBatch'">
           <template #overlay>
             <a-menu>
               <a-menu-item key="1" @click="batchHandleDelete" v-auth="'purCode:pur_purchase_quotation:deleteBatch'">
@@ -175,6 +179,7 @@
     ProjectOption,
     supplierOption,
     ClassList,
+    approvalBatch,
   } from './PurchaseQuotationForm.api';
   import { cloneDeep } from 'lodash-es';
   import { defHttp } from '/@/utils/http/axios';
@@ -222,6 +227,34 @@
 
   const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
 
+  //注册table数据
+  const { onExportXls: onExportXls2 } = useListPage({
+    tableProps: {
+      title: '采购报价单列表',
+      api: list,
+      columns,
+      canResize: false,
+      useSearchForm: false,
+      actionColumn: {
+        width: 300,
+        fixed: 'right',
+      },
+      scroll: {
+        x: '4000px',
+        y:'calc(100vh - 400px)',
+      },
+      beforeFetch: async (params) => {
+        let rangerQuery = await setRangeQuery();
+        return Object.assign(params, rangerQuery);
+      },
+    },
+    exportConfig: {
+      name: '采购报价单列表',
+      url: '/purCode/purPurchaseQuotation/exportXls2',
+      params: queryParam,
+    }
+  });
+  
   /**
    * 新增事件
    */
@@ -303,6 +336,14 @@
       },
     ];
   }
+  function approval() {
+    if (selectedRowKeys.value.length == 0) {
+      message.warning('请选择数据');
+    } else {
+      var ids = selectedRowKeys.value.join(',');
+      approvalBatch({ ids: ids }, handleSuccess);
+    }
+  }
   function submit() {
     if (selectedRowKeys.value.length == 0) {
       message.warning('请选择数据');

+ 18 - 0
src/views/purchase/selectionQuotationForm/SelectionQuotationForm.api.ts

@@ -18,6 +18,7 @@ enum Api {
   cancelSubmitBatch='/purCode/purQuotationSelection/returnSubmitBatch',
   classList='baseCode/baseProductClass/list',
   projectList='/baseCode/baseProjectArchive/list',
+  approvalBatch='/purCode/purQuotationSelection/approvalBatch',
 }
 /**
  * 导出api
@@ -119,6 +120,23 @@ export const cancelBatchSubmit = (params, handleSuccess) => {
     }
   });
 }
+
+// 审批
+export const approvalBatch = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认审批',
+    content: '是否审批选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.get({url: Api.approvalBatch, params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}
+
 //获取项目下拉框列表
 export const ProjectOption = (params) => defHttp.get({ url: Api.projectList, params });
 /**

+ 30 - 1
src/views/purchase/selectionQuotationForm/SelectionQuotationForm.data.ts

@@ -53,6 +53,7 @@ export const columns: BasicColumn[] = [
     align:"center",
     dataIndex: 'maker'
    },
+  
    {
       title: '提交(submit)',
       align:"center",
@@ -62,10 +63,29 @@ export const columns: BasicColumn[] = [
           text = '未提交'
         }else if(record.submit=='1'){
           text = '已提交'
+        }else if(record.submit=='2'){
+          text = '待审批'
         }
         return text;
       },
-    },
+    }, 
+	{
+    title: '总金额(美元)',
+    align:"center",
+    dataIndex: 'totalAmountUsd'
+   },
+   {
+      title: '审批人',
+      align:"center",
+      dataIndex: 'approvalBy',
+    },
+	{
+	 title: '技术资料',
+	 align:"center",
+	 dataIndex: 'baseProtocaol',
+	 // width:150,
+	 slots: { customRender: 'viewFile' },
+	},
    {
       title: '制单人',
       align:"center",
@@ -234,6 +254,7 @@ export const SelectQuotationFormProductColumns: JVxeColumn[] = [
       placeholder: '请输入${title}',
       defaultValue:'',  
       width:"200px",
+      statistics:['sum'],
     },
     {
       title: '美元汇率(exchangeRate)',
@@ -607,4 +628,12 @@ export const SelectQuotationFormProductColumns: JVxeColumn[] = [
       defaultValue:'',  
       width:"200px",
     },
+    {
+      title: '报价备注(notes)',
+      key: 'quotationNotes',
+      type: JVxeTypes.quotationNotes,
+      placeholder: '请输入${title}',
+      defaultValue:'',  
+      width:"200px",
+    },
   ]

+ 1 - 0
src/views/purchase/selectionQuotationForm/components/SelectQuotationFormForm.vue

@@ -86,6 +86,7 @@
           :columns="SelectQuotationFormProductTable.columns"
           :dataSource="SelectQuotationFormProductTable.dataSource"
           :maxHeight="340"
+		  :keyboardEdit="true"
           :disabled="disabled"
           :rowNumber="true"
           :rowSelection="true"

+ 137 - 0
src/views/purchase/selectionQuotationForm/components/ViewFileListModal.vue

@@ -0,0 +1,137 @@
+<template>
+  <div ref="viewFileDetailRef">
+    <a-modal
+      :title="title"
+      width="80%"
+      :visible="visible"
+      :maskClosable="false"
+      :getContainer="() => $refs.viewFileDetailRef"
+      switchFullscreen
+      :footer="false"
+      @cancel="handleCancel"
+    >
+      <div>
+        <a-table
+          :columns="columns"
+          :row-key="(record) => record.id"
+          :data-source="dataSource"
+          bordered
+          size="small"
+          height="500"
+          :pagination="false"
+          :scroll="{ x: 1000, y: 500 }"
+        >
+          <template #saleAttachs="{ text, record, index }">
+            <a-dropdown v-if="record.technicalInformation != '' && record.technicalInformation != null">
+              <template #overlay>
+                <a-menu>
+                  <a-menu-item key="1" v-for="(item, index) in record.technicalInformation.split(',')" :key="index">
+                    <a :href="baseUrl + item">{{ item }}</a>
+                  </a-menu-item>
+                </a-menu>
+              </template>
+              <a>查看下载<a-icon type="down" /></a>
+            </a-dropdown>
+          </template> 
+        </a-table>
+      </div>
+    </a-modal>
+  </div>
+</template>
+
+<script lang="ts" setup>
+  import { ref } from 'vue';
+  import { defHttp } from '/@/utils/http/axios';
+  import { message } from 'ant-design-vue';
+  import { useGlobSetting } from '/@/hooks/setting';
+  const { domainUrl } = useGlobSetting();
+  const baseUrl = domainUrl + '/sys/common/static/';
+  var visible = ref(false);
+  var title = ref('');
+  var fatherId = ref('');
+  var fatherTitle = ref('');
+  var params = ref({
+    id: '',
+    pageSize: '-1',
+  });
+  var columns = ref([
+    {
+      title: '项目',
+      align: 'center',
+      dataIndex: 'projectName',
+      key: 'projectName',
+    },{
+      title: '供应商',
+      align: 'center',
+      dataIndex: 'suppilerName',
+      key: 'suppilerName',
+    },
+    {
+      title: '报价单号',
+      align: 'center',
+      dataIndex: 'billCode',
+      key: 'billCode',
+    },
+    {
+      title: '技术资料',
+      align: 'center',
+      dataIndex: 'technicalInformation',
+      key: 'technicalInformation',
+	  slots: { customRender: 'saleAttachs' },
+    },
+    // {
+    //   title: '操作(operation)',
+    //   align: 'center',
+    //   dataIndex: 'operation',
+    //   key: 'operation',
+    //   slots: { customRender: 'operation' },
+    // },
+  ]);
+  var dataSource = ref([]);
+  function loadData() {
+    defHttp.get({ url: '/purCode/purPurchaseQuotation/queryByFileList', params: params.value }).then((res) => {
+      if (res) {
+        dataSource.value = res.records;
+      }
+    });
+  }
+  function getTable(dataIndex, record) {
+    visible.value = true;
+    title.value = '报价单技术资料';
+    fatherId.value = record.id;
+    fatherTitle.value = dataIndex;
+    params.value.id = record.id;
+    // params.value.type = dataIndex == 'scanProtocaol' ? '1' : '2';
+    loadData();
+  }
+  function handleCancel() {
+    visible.value = false;
+  }
+  function handleDelete(record) {
+    let params = { id: record.id };
+    defHttp.delete({ url: '/saleCode/saleOrderFiles/delete', params }, { joinParamsToUrl: true, isTransformResponse: false }).then((res) => {
+      if (res) {
+        loadData();
+      } else {
+        message.warning(res.message);
+      }
+    });
+  }
+  defineExpose({
+    getTable,
+  });
+</script>
+
+<style lang="less" scoped>
+  /** 时间和数字输入框样式 */
+  :deep(.ant-input-number) {
+    width: 100%;
+  }
+
+  :deep(.ant-calendar-picker) {
+    width: 100%;
+  }
+  /deep/.ant-modal-body {
+    padding: 14px !important;
+  }
+</style>

+ 26 - 4
src/views/purchase/selectionQuotationForm/selectionQuotationFormList.vue

@@ -76,7 +76,7 @@
             <a-col :lg="8">
               <a-form-item name="submit">
                 <template #label><span title="提交(submit)">提交(submit)</span></template>
-                <JDictSelectTag v-model:value="queryParam.submit" placeholder="请选择" dictCode="yes_or_no" />
+                <JDictSelectTag v-model:value="queryParam.submit" placeholder="请选择" dictCode="new_yes_or_no" />
               </a-form-item>
             </a-col>
           </template>
@@ -105,9 +105,11 @@
         <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" v-auth="'purCode:pur_quotation_selection:exportXls'">
           导出(export)</a-button
         >
-        <a-button type="primary" @click="submit"> 提交(submit)</a-button>
-        <a-button type="primary" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-button type="primary" v-auth="'purCode:pur_quotation_selection:add'" @click="submit"> 提交(submit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_quotation_selection:add'" @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
+        <a-button type="primary" v-auth="'purCode:pur_quotation_selection:approval'" @click="approval"> 审批(approval)</a-button>
+        
+		<a-dropdown v-if="selectedRowKeys.length > 0">
           <template #overlay>
             <a-menu>
               <a-menu-item key="1" @click="batchHandleDelete" v-auth="'purCode:pur_quotation_selection:deleteBatch'">
@@ -132,9 +134,13 @@
       </template>
       <!--字段回显插槽-->
       <template #bodyCell="{ column, record, index, text }"> </template>
+	  <template #viewFile="props">
+	    <a @click="viewFileDetail(props)">查看(view)</a>
+	  </template>
     </BasicTable>
     <!-- 表单区域 -->
     <SelectQuotationFormModal @register="registerModal" @success="handleSuccess" />
+    <ViewFileListModal ref="ViewFileListModalRef" />
   </div>
 </template>
 
@@ -144,6 +150,7 @@
   import { useListPage } from '/@/hooks/system/useListPage';
   import { useModal } from '/@/components/Modal';
   import SelectQuotationFormModal from './components/SelectQuotationFormModal.vue';
+  import ViewFileListModal from './components/ViewFileListModal.vue';
   import { columns } from './SelectionQuotationForm.data';
   import {
     list,
@@ -155,6 +162,7 @@
     cancelBatchSubmit,
     ProjectOption,
     ClassList,
+    approvalBatch,
   } from './SelectionQuotationForm.api';
   import { cloneDeep } from 'lodash-es';
   import { defHttp } from '/@/utils/http/axios';
@@ -165,6 +173,7 @@
   const baseUrl = domainUrl + '/sys/common/static/';
   const formRef = ref();
   const queryParam = reactive<any>({});
+  const ViewFileListModalRef = ref();
   //注册model
   const [registerModal, { openModal }] = useModal();
   //注册table数据
@@ -281,6 +290,16 @@
       },
     ];
   }
+  
+  function approval() {
+    if (selectedRowKeys.value.length == 0) {
+      message.warning('请选择数据');
+    } else {
+      var ids = selectedRowKeys.value.join(',');
+      approvalBatch({ ids: ids }, handleSuccess);
+    }
+  }
+  
   function submit() {
     if (selectedRowKeys.value.length == 0) {
       message.warning('请选择数据');
@@ -298,6 +317,9 @@
     }
   }
 
+  function viewFileDetail(props) {
+    ViewFileListModalRef.value.getTable(props.column.dataIndex, props.record);
+  }
   /* ----------------------以下为原生查询需要添加的-------------------------- */
   const toggleSearchStatus = ref<boolean>(false);
   const labelCol = reactive({

+ 5 - 2
src/views/saleCode/advancePayment/components/advancePaymentForm.vue

@@ -26,7 +26,7 @@
 						</a-col>
 						<a-col :span="24">
 							<a-form-item label="客户(customer)" v-bind="validateInfos.customer" id="saleInvoiceForm-customer" name="customer" >
-                <JSelect   v-model:value="formData.customer" :get-option-url="CustomerOption" :showField="showField" @change="changeCustomer" :param="{status:1}"></JSelect>
+                <JSelect style="pointer-events: none;"  v-model:value="formData.customer" :get-option-url="CustomerOption" :showField="showField" @change="changeCustomer" :param="{status:1}"></JSelect>
                 <!-- <ApiSelect
                   :api="CustomerOption"
                   showSearch
@@ -271,7 +271,10 @@
       function changeAdvanceAmount(prop){
 
         if(prop.data&&prop.data!==''){
-          formData.advanceRatio = Number(prop.data) / Number(formData.orderAmount)*100
+			console.log(prop.data)
+			console.log(formData.orderAmount)
+			console.log("==========================")
+          formData.advanceRatio = ((Number(formData.advanceAmount) / Number(formData.orderAmount))*100).toFixed(2);
         }
       }
       async function changeCustomer(value){

+ 4 - 1
src/views/saleCode/deliveryNotice/components/deliveryNoticeForm.vue

@@ -305,6 +305,8 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           @value-change="changeValues"
         >
           <template #action="props">
@@ -707,7 +709,8 @@
           item.orderMoney = item.discountedAmount;
           item.money = item.discountedAmount;
           item.taxPrice = item.discountedPrice;
-          item.notes = '';
+          item.notes = item.childNotes;
+         
 		  
 		  allNum.value = allNum.value+item.quantity;
 		  allMoney.value = allMoney.value+item.money;

+ 8 - 1
src/views/saleCode/deliveryNotice/delivertNoticeForm.data.ts

@@ -305,7 +305,14 @@ export const deliveryNoticeProductColumns: JVxeColumn[] = [
       width:"200px",
       defaultValue:'',
     },
-
+    {
+      title: '备注(notes)',
+      key: 'notes',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
     {
       title: '操作(operation)',
       key: 'action',

+ 22 - 11
src/views/saleCode/quotation/components/quotationFormForm.vue

@@ -122,7 +122,8 @@
                 :labelCol="formItemLayout.labelCol1"
                 :wrapperCol="formItemLayout.wrapperCol1"
               >
-                <JDictSelectTag v-model:value="formData.maker" placeholder="请选择" dictCode="factory" />
+			   <a-input v-model:value="formData.maker"  disabled />
+               <!-- <JDictSelectTag v-model:value="formData.maker" placeholder="请选择" dictCode="factory" /> -->
               </a-form-item>
             </a-col>
             <a-col :span="12">
@@ -338,11 +339,13 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           @value-change="changeValues"
         >
           <template #lastPrice="props">
             <!-- <a @click="viewHistory(props.row.productId)">{{ props.row.lastPrice }}</a> -->
-            <a @click="viewHistory(props.row.productId)">查看</a>
+            <a @click="viewHistory(props.row.productId)">查看历史</a>
           </template>
           <template #action="props">
             <a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)" v-if="!(formData.id !== '' && formData.status == '1') && !disabled">
@@ -643,7 +646,7 @@
 		        purchasePrice: purchasePriceNew.toFixed(4).replace(/\.?0+$/, '') || '',
 		        purchaseAmount: purchaseAmountNew.toFixed(2).replace(/\.?0+$/, '') || '',
 		        taxPriceOriginal: taxPriceOriginalNew.toFixed(4).replace(/\.?0+$/, '') || '',
-		        salePrice: salePriceNew.toFixed(4).replace(/\.?0+$/, '') || '',
+		        salePrice: salePriceNew.toFixed(2).replace(/\.?0+$/, '') || '',
 		        taxAmount: taxAmount.toFixed(2).replace(/\.?0+$/, '') || '',
 		        _needUpdate: true // 标记需要更新的行
 		      };
@@ -831,6 +834,8 @@
           item.taxRate = obj.rateNumber;
           item.grossMargin = obj.grossMargin;
           item.discount = formData.custumerDiscount;
+          item.purchasePrice = 0;
+          item.purchaseAmount = 0;
           item.id = undefined;
           item.notes = '';
         }
@@ -1029,8 +1034,10 @@
         formData.priority = data[0].priority;
         formData.model = data[0].fatherModel;
         formData.maker = data[0].maker;
+        formData.quotationNotes = data[0].selectionNotes;
         formData.productionClass = data[0].productionClass;
         formData.deliveryDayHead = data[0].deliveryDayChild;
+        formData.supplierAttachs = data[0].attachs;
         // formData.currency = '美元';
         // formData.exchangeRate = '1';
         await getShipList(data[0].headId);
@@ -1097,10 +1104,11 @@
         ) {
           // var num =((prop.row.purchasePrice / Number(formData.exchangeRate)) *(1 + prop.row.taxRate / 100) *(1 + prop.row.tariff / 100) *(1 - prop.row.discount / 100)) /(1 - prop.row.grossMargin / 100 - prop.row.customerCommision / 100 - prop.row.intermediatorCommission / 100);
           var num =
-            ((prop.row.purchasePrice * Number(formData.exchangeRate) * (1 + prop.row.tariff / 100)) /
+            ((prop.row.purchasePrice * (1 + prop.row.tariff / 100)) /
+           //去除毛利率汇率  ((prop.row.purchasePrice * Number(formData.exchangeRate) * (1 + prop.row.tariff / 100)) /
               (1 - prop.row.grossMargin / 100 - prop.row.customerCommision / 100 - prop.row.intermediatorCommission / 100)) *
             (1 + prop.row.taxRate / 100);
-          prop.row.salePrice = !isNaN(num) ? num.toFixed(4) : '';
+          prop.row.salePrice = !isNaN(num) ? num.toFixed(2) : '';
           prop.row.taxPriceOriginal = (prop.row.salePrice / (1 - prop.row.discount / 100)).toFixed(4);
           if (prop.row.quantity) {
             prop.row.taxAmount = (prop.row.salePrice * prop.row.quantity).toFixed(2); //计算金额
@@ -1108,7 +1116,7 @@
           }
         }
         if (prop.col.key == 'discount' && prop.row.taxPriceOriginal) {
-          prop.row.salePrice = (Number(prop.row.taxPriceOriginal) * (1 - prop.row.discount / 100)).toFixed(4);
+          prop.row.salePrice = (Number(prop.row.taxPriceOriginal) * (1 - prop.row.discount / 100)).toFixed(2);
 		  if (prop.row.quantity) {
 		    prop.row.taxAmount = (prop.row.salePrice * prop.row.quantity).toFixed(2);
 		  }
@@ -1123,13 +1131,14 @@
         }
         //计算毛利率/金额
         if (prop.col.key == 'taxPriceOriginal') {
-          prop.row.salePrice = (Number(prop.row.taxPriceOriginal) * (1 - prop.row.discount / 100)).toFixed(4);
+          prop.row.salePrice = (Number(prop.row.taxPriceOriginal) * (1 - prop.row.discount / 100)).toFixed(2);
           // var num =1 - prop.row.customerCommision / 100 - prop.row.intermediatorCommission / 100-((prop.row.purchasePrice / Number(formData.exchangeRate)) *(1 + prop.row.taxRate / 100) *(1 + prop.row.tariff / 100) *(1 - prop.row.discount / 100)) /prop.row.salePrice;
           var num =
             1 -
             prop.row.customerCommision / 100 -
             prop.row.intermediatorCommission / 100 -
-            (prop.row.purchasePrice * Number(formData.exchangeRate) * (1 + prop.row.tariff / 100) * (1 + prop.row.tariff / 100)) / prop.row.salePrice;
+            (prop.row.purchasePrice * (1 + prop.row.tariff / 100) * (1 + prop.row.tariff / 100)) / prop.row.salePrice;
+            //去除毛利率汇率  (prop.row.purchasePrice * Number(formData.exchangeRate) * (1 + prop.row.tariff / 100) * (1 + prop.row.tariff / 100)) / prop.row.salePrice;
           num = (Number(num) * 100).toFixed(2);
           prop.row.grossMargin = !isNaN(num) && isFinite(num) ? num : '';
           if (prop.row.quantity) {
@@ -1156,10 +1165,11 @@
                 : item.intermediatorCommission;
             //汇率默认为1
             var num =
-              ((item.purchasePrice * Number(formData.exchangeRate) * (1 + item.tariff / 100)) /
+              ((item.purchasePrice * (1 + item.tariff / 100)) /
+             //去除毛利率汇率 ((item.purchasePrice * Number(formData.exchangeRate) * (1 + item.tariff / 100)) /
                 (1 - item.grossMargin / 100 - item.customerCommision / 100 - item.intermediatorCommission / 100)) *
               (1 + item.taxRate / 100);
-            item.salePrice = !isNaN(num) ? num.toFixed(4) : '';
+            item.salePrice = !isNaN(num) ? num.toFixed(2) : '';
             item.taxPriceOriginal = (item.salePrice / (1 - item.discount / 100)).toFixed(4);
             if (item.quantity) {
               item.taxAmount = (item.salePrice * item.quantity).toFixed(2);
@@ -1203,7 +1213,8 @@
           purchasePriceAll += Number(item.purchaseAmount || 0);
         });
         formData.grossMarginHead =
-          (salePriceAll - customerCommisionAll - platformCommisionAll - purchasePriceAll / Number(formData.exchangeRate)) / salePriceAll || 0;
+          (salePriceAll - customerCommisionAll - platformCommisionAll - purchasePriceAll) / salePriceAll || 0;
+          //去除毛利率汇率 (salePriceAll - customerCommisionAll - platformCommisionAll - purchasePriceAll / Number(formData.exchangeRate)) / salePriceAll || 0;
         formData.grossMarginHead = (Number(formData.grossMarginHead) * 100).toFixed(2);
 		formData.grossMarginHead = !isNaN(formData.grossMarginHead) && isFinite(formData.grossMarginHead) ? formData.grossMarginHead : '';
       }

+ 19 - 2
src/views/saleCode/quotation/quotation.vue

@@ -74,7 +74,8 @@
             <a-col :lg="8">
               <a-form-item name="maker" :label-col="{ style: 'width: 200px' }">
                 <template #label><span title="厂家(maker)">厂家(maker)</span></template>
-                <JDictSelectTag v-model:value="queryParam.maker" placeholder="请选择" dictCode="factory" />
+               <!-- <JDictSelectTag v-model:value="queryParam.maker" placeholder="请选择" dictCode="factory" /> -->
+                <JInput placeholder="请输入厂家(maker)" v-model:value="queryParam.maker" allow-clear ></JInput>
               </a-form-item>
             </a-col>
             <a-col :lg="8">
@@ -188,6 +189,19 @@
           </a-button>
         </a-dropdown>
       </template>
+	  <!--附件-->
+	  <template #supplierAttachs="{ record }">
+	    <a-dropdown v-if="record.supplierAttachs != '' && record.supplierAttachs != null">
+	      <template #overlay>
+	        <a-menu>
+	          <a-menu-item key="1" v-for="(item, index) in record.supplierAttachs.split(',')" :key="index">
+	            <a :href="baseUrl + item">{{ item }}</a>
+	          </a-menu-item>
+	        </a-menu>
+	      </template>
+	      <a>查看<a-icon type="down" /></a>
+	    </a-dropdown>
+	  </template>
       <!--操作栏-->
       <template #action="{ record }">
         <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
@@ -208,6 +222,9 @@
   import { useListPage } from '/@/hooks/system/useListPage';
   import { useModal } from '/@/components/Modal';
   import { columns, superQuerySchema } from './quotationForm.data';
+  import { useGlobSetting } from '/@/hooks/setting';
+  const { domainUrl } = useGlobSetting();
+  const baseUrl = domainUrl + '/sys/common/static/';
   import {
     list,
     deleteOne,
@@ -457,7 +474,7 @@
     var obj ={
       id:record.id
     }
-    handleExportXlsx(record.billCode, getExportUrl2,obj)
+    handleExportXlsx("Q - "+record.quotationProjectName, getExportUrl2,obj)
   }
 
   /* ----------------------以下为原生查询需要添加的-------------------------- */

+ 9 - 2
src/views/saleCode/quotation/quotationForm.data.ts

@@ -151,6 +151,13 @@ export const columns: BasicColumn[] = [
       }
     }
    },
+   {
+      title: '供应商技术资料(attachs)',
+      align:"center",
+      dataIndex: 'supplierAttachs',
+      width:200,
+      slots: { customRender: 'supplierAttachs' },
+    },
    {
     title: '版本号(version)',
     align:"center",
@@ -331,7 +338,7 @@ export const saleQuotationFormProductColumns: JVxeColumn[] = [
     {
       title: '采购单价(purchase price)',
       key: 'purchasePrice',
-      type: JVxeTypes.inputNumber,
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
       width:"200px",
       defaultValue:'',
@@ -339,7 +346,7 @@ export const saleQuotationFormProductColumns: JVxeColumn[] = [
     {
       title: '采购金额(purchase amount)',
       key: 'purchaseAmount',
-      type: JVxeTypes.inputNumber,
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
       width:"200px",
       defaultValue:'',

+ 12 - 7
src/views/saleCode/receiptOrder/components/SelectInvoiceModal.vue

@@ -28,11 +28,11 @@
                                 <ApiSelect
                                     :api="projectListList"
                                     showSearch
-                                    v-model:value="queryParams.project"
+                                    v-model:value="queryParams.projectName"
                                     optionFilterProp="label"
                                     resultField="records"
-                                    labelField="name"
-                                    valueField="id"
+                                    labelField="code"
+                                    valueField="code"
                                     />
                             </a-form-item>
                         </a-col>
@@ -133,8 +133,8 @@
         },
         {
             title: '购方(buyer)',
-            dataIndex: 'customer',
-            key: 'customer',
+            dataIndex: 'customerName',
+            key: 'customerName',
             align:"center",
             ellipsis: true,
         },
@@ -195,7 +195,7 @@
     });
     function loadData(){
         let params = getQueryParams();
-        defHttp.get({ url: '/saleCode/saleInvoice/list',params}, { isTransformResponse: false })
+        defHttp.get({ url: '/saleCode/saleInvoice/list2',params}, { isTransformResponse: false })
         .then((res) => {
             if (res.success) {
                 dataSource.value = res.result.records;
@@ -269,7 +269,12 @@
         pagination.value.current =1;
         pagination.value.pageSize = 100; 
     }
-    function getTable(){
+    function getTable(project){
+		
+		if(project !=null  && project != ''){
+			queryParams.value.projectName = project;
+		}
+		
         visible.value = true
         loadData()
     }

+ 30 - 8
src/views/saleCode/receiptOrder/components/receiptOrderForm.vue

@@ -31,7 +31,7 @@
 						</a-col>
             <a-col :span="24">
 							<a-form-item label="购方(buyer)" v-bind="validateInfos.customer" id="saleInvoiceForm-customer" name="customer" >
-                <JSelect   v-model:value="formData.customer" :get-option-url="CustomerOption" :showField="showField" @change="changeCustomer" :param="{status:1}"></JSelect>
+                <JSelect style="pointer-events: none;"  v-model:value="formData.customer" :get-option-url="CustomerOption" :showField="showField" @change="changeCustomer" :param="{status:1}"></JSelect>
 							</a-form-item>
 						</a-col>
 						<a-col :span="24">
@@ -134,6 +134,9 @@
         projectName: [
           { required: true, message: '请选择项目(select project)' }
         ],
+        invoice: [
+          { required: true, message: '请选择销售发票(select invoice)' }
+        ],
         amountCollected:[
         { required: true, message: '请选择收款金额(input amountCollected)' }
         ],
@@ -229,31 +232,50 @@
         formData[key] = value;
       }
       function addSaleOrderMain(data) {
+		  
         formData.saleOrder = data[0].billCode
+        formData.saleOrderId = data[0].id
         formData.project = data[0].project
         formData.projectName = data[0].projectName
         formData.customer = data[0].customer
         formData.customerName = data[0].customerName
-        formData.saleOrderId = data[0].id
+		
+        formData.advanceAmount = data[0].collectedMoney
+		formData.advanceRatio = ((Number(formData.advanceAmount) / Number(formData.invoiceAmount))*100).toFixed(2);
+		
       }
       function addInvoice(data){
+		  // console.log("============================")
+		  // console.log(data[0])
+		  // console.log(data[0].organize)
+		  
         formData.invoice = data[0].invoiceCode
         formData.invoiceId = data[0].id
+		
+        formData.project = data[0].project
+        formData.projectName = data[0].projectName
+		
         formData.invoiceAmount = data[0].taxMoney
         formData.customer = data[0].customer
-        formData.customer =  data[0].buyerTaxNumber
+        formData.customerName =  data[0].customerName
+		
+        formData.organize =  data[0].organize
+		if(formData.advanceAmount !=null || formData.advanceAmount != ''){
+			formData.advanceRatio = ((Number(formData.advanceAmount) / Number(formData.invoiceAmount))*100).toFixed(2);
+		}
+		
       }
       //选择项目  
       function onSearchSaleOrderMianModal(){
-        SelectSaleOrderMianModalModalRef.value.getTable()
+        SelectSaleOrderMianModalModalRef.value.getTable(formData.projectName)
       }
       function onSearchInvoice(){
-        SelectInvoiceModalRef.value.getTable()
+        SelectInvoiceModalRef.value.getTable(formData.projectName)
       }
       async function changeCustomer(value){
-        var params={id:value}
-        var obj = await CustomerOption(params)
-        formData.customerName = obj.records[0].name
+        // var params={id:value}
+        // var obj = await CustomerOption(params)
+        // formData.customerName = obj.records[0].name
       }
       return {
         validatorRules,

+ 20 - 19
src/views/saleCode/receiptOrder/receiptOrderForm.data.ts

@@ -5,31 +5,13 @@ import { render } from '/@/utils/common/renderUtils';
 import {JVxeTypes,JVxeColumn} from '/@/components/jeecg/JVxeTable/types'
 //列表数据
 export const columns: BasicColumn[] = [
-  {
-    title: '公司(company)',
-    align:"center",
-    dataIndex: 'company',
-    ellipsis:true
-   }, 
+  
    {
     title: '收款编号(bill code)',
     align:"center",
     dataIndex: 'billCode',
     ellipsis:true
    },  
-   {
-    title: '购方(buyer)',
-    align:"center",
-    ellipsis:true,
-    dataIndex: 'customerName'
-   },
-   {
-    title: '购方税号(buyer tax number)',
-    align:"center",
-    ellipsis:true,
-    width:200,
-    dataIndex: 'buyer'
-   },
    {
     title: '单据日期(bill date)',
     align:"center",
@@ -70,10 +52,29 @@ export const columns: BasicColumn[] = [
     dataIndex: 'amountCollected',
     ellipsis:true,
    },
+   {
+    title: '购方(buyer)',
+    align:"center",
+    ellipsis:true,
+    dataIndex: 'customerName'
+   },
+   {
+    title: '购方税号(buyer tax number)',
+    align:"center",
+    ellipsis:true,
+    width:200,
+    dataIndex: 'customer_dictText'
+   },
    {
     title: '提交(submit)',
     align:"center",
     dataIndex: 'submit_dictText',
    },
+   {
+    title: '组织(organize)',
+    align:"center",
+    dataIndex: 'organize',
+    ellipsis:true
+   }, 
 ];
 

+ 2 - 0
src/views/saleCode/saleContract/components/SaleContractForm.vue

@@ -31,6 +31,8 @@
           :rowSelection="true"
           :disabled="formDisabled"
           :toolbar="true"
+		  :maxHeight="540"
+		  :keyboardEdit="true"
         />
       </a-tab-pane>
     </a-tabs>

+ 7 - 0
src/views/saleCode/saleInquiryForm/SaleInquiryForm.data.ts

@@ -164,6 +164,13 @@ export const columns: BasicColumn[] = [
       }
     }
    },
+   {
+      title: '附件(attachs)',
+      align:"center",
+      dataIndex: 'attachs',
+      width:350,
+      slots: { customRender: 'saleAttachs' },
+    },
 ];
 
 //子表表格配置

+ 47 - 0
src/views/saleCode/saleInquiryForm/SaleInquiryFormList.vue

@@ -208,6 +208,22 @@
       <template #action="{ record }">
         <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
       </template>
+	  <template #saleAttachs="{ record }">
+	    <a-dropdown v-if="record.attachs != '' && record.attachs != null">
+	      <template #overlay>
+	        <a-menu>
+	  				<a-menu-item key="2">
+	  				  <a @click="downloadAll(record.attachs.split(','))">下载全部</a>
+	  				</a-menu-item>
+	          <a-menu-item v-for="(item, index) in record.attachs.split(',')" :key="index">
+	            <a :href="baseUrl + item">{{ item }}</a>
+	          </a-menu-item>
+	        </a-menu>
+	      </template>
+	      <a>查看<a-icon type="down" /></a>
+	    </a-dropdown>
+	  </template>
+	  
       <!--字段回显插槽-->
       <template #bodyCell="{ column, record, index, text }"> </template>
     </BasicTable>
@@ -247,6 +263,9 @@
   import SelecSaleInquiryModal from './components/SelecSaleInquiryModal.vue';
   import SetOtherStatus from './components/SetOtherStatus.vue';
   import { message } from 'ant-design-vue';
+  import { useGlobSetting } from '/@/hooks/setting';
+  const { domainUrl } = useGlobSetting();
+  const baseUrl = domainUrl + '/sys/common/static/';
   const formRef = ref();
   const queryParam = reactive<any>({});
   const checkedKeys = ref<Array<string | number>>([]);
@@ -454,6 +473,34 @@
   }
   
   
+  /**
+   * 批量下载
+   */
+  async function downloadAll(itemList) {
+   
+  	for (const item of itemList) {
+  	    await this.downloadImage(item);
+  	    // 添加短暂延迟避免请求过于频繁
+  	    await new Promise(resolve => setTimeout(resolve, 100));
+  	  }
+  }
+  
+  function downloadImage(url) {
+    return new Promise((resolve, reject) => {
+      const link = document.createElement('a');
+      link.href = baseUrl + url;
+      link.download = ''; // 可以设置文件名
+      link.style.display = 'none';
+      
+      document.body.appendChild(link);
+      link.click();
+      document.body.removeChild(link);
+      
+      // 给浏览器一点时间处理下载
+      setTimeout(resolve, 50);
+    });
+  }
+  
   function onChangequotationPeriod(data) {
   	  
   	  if(data == null){

+ 664 - 703
src/views/saleCode/saleInquiryForm/components/SaleInquiryFormForm.vue

@@ -1,724 +1,685 @@
 <template>
-  <a-spin :spinning="loading">
-    <JFormContainer :disabled="disabled">
-      <template #detail>
-        <a-form v-bind="formItemLayout" name="SaleInquiryFormForm" ref="formRef">
-          <a-row>
-            <a-col :span="12">
-              <a-form-item label="询价单号(bill code)" v-bind="validateInfos.billCode" id="SaleInquiryFormForm-billCode" name="billCode">
-                <a-input v-model:value="formData.billCode" placeholder="自动生成" disabled />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item label="单据日期(bill date)" v-bind="validateInfos.billDate" id="SaleInquiryFormForm-billDate" name="billDate">
-                <a-date-picker disabled
-                  placeholder="请选择单据日期(bill date)"
-                  v-model:value="formData.billDate"
-                  value-format="YYYY-MM-DD"
-                  style="width: 100%"
-                  allow-clear
-                />
-              </a-form-item>
-            </a-col>
+	<a-spin :spinning="loading">
+		<JFormContainer :disabled="disabled">
+			<template #detail>
+				<a-form v-bind="formItemLayout" name="SaleInquiryFormForm" ref="formRef">
+					<a-row>
+						<a-col :span="12">
+							<a-form-item label="询价单号(bill code)" v-bind="validateInfos.billCode"
+								id="SaleInquiryFormForm-billCode" name="billCode">
+								<a-input v-model:value="formData.billCode" placeholder="自动生成" disabled />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="单据日期(bill date)" v-bind="validateInfos.billDate"
+								id="SaleInquiryFormForm-billDate" name="billDate">
+								<a-date-picker disabled placeholder="请选择单据日期(bill date)"
+									v-model:value="formData.billDate" value-format="YYYY-MM-DD" style="width: 100%"
+									allow-clear />
+							</a-form-item>
+						</a-col>
 
-            <a-col :span="12">
-              <a-form-item
-                label="询价项目(inquiry project)"
-                v-bind="validateInfos.projectName"
-                id="SaleInquiryFormForm-inquiryProject"
-                name="inquiryProject"
-              >
-                <a-input-search
-                  v-model:value="formData.projectName"
-                  placeholder="请选择询价项目(inquiry project)"
-                  readonly
-                  allow-clear
-                  enter-button="Search"
-                  @search="onSearchProject"
-                />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item
-                label="询价客户(inquiry customer)"
-                v-bind="validateInfos.inquiryCustomer"
-                id="SaleInquiryFormForm-inquiryCustomer"
-                name="inquiryCustomer"
-              >
-                <!-- <JSelect   v-model:value="formData.inquiryCustomer" :get-option-url="customerOption" :showField="showField" ></JSelect> -->
-                <JSelectInput v-model:value="formData.inquiryCustomer" placeholder="请选择" :options="customerOption" disabled />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item
-                label="询价平台(inquiry platform)"
-                v-bind="validateInfos.inquiryPlatform"
-                id="SaleInquiryFormForm-inquiryPlatform"
-                name="inquiryPlatform"
-              >
-                <JDictSelectTag v-model:value="formData.inquiryPlatform" placeholder="请选择" dictCode="inquiry_platform" />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item label="客户联系人(inquiry liaisonId)" v-bind="validateInfos.liaisonId" id="SaleInquiryFormForm-liaisonId" name="liaisonId">
-                <a-select v-model:value="formData.liaisonId" labelInValue @change="onChangeLiaison" allowClear>
+						<a-col :span="12">
+							<a-form-item label="询价项目(inquiry project)" v-bind="validateInfos.projectName"
+								id="SaleInquiryFormForm-inquiryProject" name="inquiryProject">
+								<a-input-search v-model:value="formData.projectName"
+									placeholder="请选择询价项目(inquiry project)" readonly allow-clear enter-button="Search"
+									@search="onSearchProject" />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="询价客户(inquiry customer)" v-bind="validateInfos.inquiryCustomer"
+								id="SaleInquiryFormForm-inquiryCustomer" name="inquiryCustomer">
+								<!-- <JSelect   v-model:value="formData.inquiryCustomer" :get-option-url="customerOption" :showField="showField" ></JSelect> -->
+								<JSelectInput v-model:value="formData.inquiryCustomer" placeholder="请选择"
+									:options="customerOption" disabled />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="询价平台(inquiry platform)" v-bind="validateInfos.inquiryPlatform"
+								id="SaleInquiryFormForm-inquiryPlatform" name="inquiryPlatform">
+								<JDictSelectTag v-model:value="formData.inquiryPlatform" placeholder="请选择"
+									dictCode="inquiry_platform" />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="客户联系人(inquiry liaisonId)" v-bind="validateInfos.liaisonId"
+								id="SaleInquiryFormForm-liaisonId" name="liaisonId">
+								<!-- <a-select showSearch v-model:value="formData.liaisonId" labelInValue @change="onChangeLiaison" allowClear>
                   <a-select-option v-for="item in linkOption" :key="item.id" :value="item.id">{{ item.name }}</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item
-                label="客户询价单号(customer inquiry number)"
-                v-bind="validateInfos.customerInquiryNumber"
-                id="SaleInquiryFormForm-customerInquiryNumber"
-                name="customerInquiryNumber"
-              >
-                <a-input v-model:value="formData.customerInquiryNumber" placeholder="请输入客户询价单号(customer inquiry number)" allow-clear />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item
-                label="客户询价日期(customer inquiry time)"
-                v-bind="validateInfos.inquiryTime"
-                id="SaleInquiryFormForm-inquiryTime"
-                name="inquiryTime"
-              >
-                <a-date-picker
-                  placeholder="请选择客户询价日期(customer inquiry time)"
-                  v-model:value="formData.inquiryTime"
-                  value-format="YYYY-MM-DD"
-                  style="width: 100%"
-                  allow-clear
-                />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item
-                label="询价有效期(inquiry period)"
-                v-bind="validateInfos.inquiryPeriodEnd"
-                id="SaleInquiryFormForm-inquiryPeriodEnd"
-                name="inquiryPeriodEnd"
-              >
-                <a-range-picker
-                  v-model:value="inquiryPeriod"
-                  :format="['YYYY-MM-DD', 'YYYY-MM-DD']"
-                  @change="onChangeInquiryPeriod"
-                  style="width: 100%"
-                />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item label="优先级(priority)" v-bind="validateInfos.priority" id="SaleInquiryFormForm-priority" name="priority">
-                <JDictSelectTag v-model:value="formData.priority" placeholder="请选择" dictCode="priority" />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item
-                label="产品分类(production class)"
-                v-bind="validateInfos.productionClass"
-                id="SaleInquiryFormForm-productionClass"
-                name="productionClass"
-              >
-                <JDictSelectTag
-                  v-model:value="formData.productionClass"
-                  placeholder=""
-                  dictCode="base_product_class,name,id,del_flag=0 and parent_id is null"
-                  page="false"
-                  showSearch
-                />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item label="机型(model)" v-bind="validateInfos.model" id="SaleInquiryFormForm-model" name="model">
-                <JDictSelectTag v-model:value="formData.model" placeholder="请选择" dictCode="model_typer" showSearch />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item label="厂家(maker)" v-bind="validateInfos.maker" id="SaleInquiryFormForm-maker" name="maker">
-                <a-input v-model:value="formData.maker" placeholder="请输入厂家(maker)" allow-clear AutoComplete="off" />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item
-                label="销售部门(sale department)"
-                v-bind="validateInfos.saleDepartment"
-                id="SaleInquiryFormForm-saleDepartment"
-                name="saleDepartment"
-              >
-                <a-input v-model:value="formData.saleDepartmentName" placeholder="" allow-clear disabled />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item label="业务员(salesman)" v-bind="validateInfos.salesman" id="SaleInquiryFormForm-salesman" name="salesman">
-                <a-input v-model:value="formData.salesmanName" placeholder="" allow-clear disabled />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item
-                label="采购询价组(procurement inquiry team)"
-                v-bind="validateInfos.inquiryTeam"
-                id="SaleInquiryFormForm-inquiryTeam"
-                name="inquiryTeam"
-              >
-                <JSelectDept v-model:value="formData.inquiryTeam" :multiple="false" />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item
-                label="质量等级(quality grade)"
-                v-bind="validateInfos.qualityGradeHead"
-                id="SaleInquiryFormForm-qualityGradeHead"
-                name="qualityGradeHead"
-              >
-                <JDictSelectTag
-                  v-model:value="formData.qualityGradeHead"
-                  placeholder="请选择"
-                  dictCode="quality_grade"
-                  @change="handleChangeQualityGrade"
-                />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item
-                label="询价备注(inquiry notes)"
-                v-bind="validateInfos.inquiryNotes"
-                id="SaleInquiryFormForm-inquiryNotes"
-                name="inquiryNotes"
-              >
-                <a-input v-model:value="formData.inquiryNotes" placeholder="请输入询价备注(inquiry notes)" allow-clear AutoComplete="off" />
-              </a-form-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-item label="附件(attachs)" v-bind="validateInfos.attachs" id="SaleInquiryFormForm-attachs" name="attachs">
-                <JUpload v-model:value="formData.attachs" />
-              </a-form-item>
-            </a-col>
-          </a-row>
-        </a-form>
-      </template>
-    </JFormContainer>
+                </a-select> -->
 
-    <!-- 子表单区域 -->
-    <a-tabs v-model:activeKey="activeKey" animated style="padding: 24px; padding-top: 0px">
-      <a-tab-pane tab="销售询价单 - 产品明细(product details)" key="saleInquiryFormProduct" :forceRender="true">
-        <a-button type="primary" @click="selectProducts" style="margin-right: 1%; margin-bottom: 1%" :disabled="disabled">
-          选择产品(select product)</a-button
-        >
-        <a-button type="primary" @click="setNeed" style="margin-right: 1%" :disabled="disabled">
-          设置需要船检证书(set need ship inspection certificate)</a-button
-        >
-        <a-button type="primary" @click="setNotNeed" :disabled="disabled"> 设置不需要船检证书(set need not ship inspection certificate)</a-button>
-        <j-vxe-table
-          :keep-source="true"
-          resizable
-          ref="saleInquiryFormProductTableRef"
-          :loading="saleInquiryFormProductTable.loading"
-          :columns="saleInquiryFormProductTable.columns"
-          :dataSource="saleInquiryFormProductTable.dataSource"
-          :disabled="disabled"
-          :rowNumber="true"
-          :rowSelection="true"
-          asyncRemove
-        >
-          <template #action="props">
-            <a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)" v-if="!disabled">
-              <a>删除(delete)</a>
-            </a-popconfirm>
-          </template>
-        </j-vxe-table>
-      </a-tab-pane>
-      <a-tab-pane tab="销售询价单 - 船明细(ship details)" key="saleInquiryFormShip" :forceRender="true">
-        <a-button type="primary" @click="selectShip" :disabled="disabled"> 选择船(select ship)</a-button>
-        <j-vxe-table
-          :keep-source="true"
-          resizable
-          ref="saleInquiryFormShipTableRef"
-          :loading="saleInquiryFormShipTable.loading"
-          :columns="saleInquiryFormShipTable.columns"
-          :dataSource="saleInquiryFormShipTable.dataSource"
-          :disabled="disabled"
-          :rowNumber="true"
-          :rowSelection="true"
-        >
-          <template #action="props">
-            <a @click="viewAccessory(props)">查看配件信息(view accessory information)</a>
-            <a-divider type="vertical" />
-            <a-popconfirm title="确定删除吗?" @confirm="handleDelete(props)" v-if="!disabled">
-              <a>删除(delete)</a>
-            </a-popconfirm>
-          </template>
-        </j-vxe-table>
-      </a-tab-pane>
-    </a-tabs>
-    <SelectShipSModal ref="SelectShipSModalRef" @select="addShip" />
-    <BaseShipArchiveAccessoriesModal ref="BaseShipArchiveAccessoriesListRef" />
-    <SelectPrpductModal ref="SelectPrpductModalRef" @select-product="addProduct" />
-    <SelectProjectModal ref="SelectProjectModalRef" @select-project="addProject" />
-  </a-spin>
+								<a-select showSearch v-model:value="formData.liaisonInfo" @change="onChangeLiaison"
+									:options="linkOption.map(item=>{ return {id:item.id,name:item.name}})"
+									:field-names="{ label: 'name', value: 'name', options: 'children' }">
+								</a-select> 
+
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="客户询价单号(customer inquiry number)"
+								v-bind="validateInfos.customerInquiryNumber"
+								id="SaleInquiryFormForm-customerInquiryNumber" name="customerInquiryNumber">
+								<a-input v-model:value="formData.customerInquiryNumber"
+									placeholder="请输入客户询价单号(customer inquiry number)" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="客户询价日期(customer inquiry time)" v-bind="validateInfos.inquiryTime"
+								id="SaleInquiryFormForm-inquiryTime" name="inquiryTime">
+								<a-date-picker placeholder="请选择客户询价日期(customer inquiry time)"
+									v-model:value="formData.inquiryTime" value-format="YYYY-MM-DD" style="width: 100%"
+									allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="询价有效期(inquiry period)" v-bind="validateInfos.inquiryPeriodEnd"
+								id="SaleInquiryFormForm-inquiryPeriodEnd" name="inquiryPeriodEnd">
+								<a-range-picker v-model:value="inquiryPeriod" :format="['YYYY-MM-DD', 'YYYY-MM-DD']"
+									@change="onChangeInquiryPeriod" style="width: 100%" />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="优先级(priority)" v-bind="validateInfos.priority"
+								id="SaleInquiryFormForm-priority" name="priority">
+								<JDictSelectTag v-model:value="formData.priority" placeholder="请选择"
+									dictCode="priority" />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="产品分类(production class)" v-bind="validateInfos.productionClass"
+								id="SaleInquiryFormForm-productionClass" name="productionClass">
+								<JDictSelectTag v-model:value="formData.productionClass" placeholder=""
+									dictCode="base_product_class,name,id,del_flag=0 and parent_id is null" page="false"
+									showSearch />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="机型(model)" v-bind="validateInfos.model" id="SaleInquiryFormForm-model"
+								name="model">
+								<JDictSelectTag v-model:value="formData.model" placeholder="请选择" dictCode="model_typer"
+									showSearch />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="厂家(maker)" v-bind="validateInfos.maker" id="SaleInquiryFormForm-maker"
+								name="maker">
+								<a-input v-model:value="formData.maker" placeholder="请输入厂家(maker)" allow-clear
+									AutoComplete="off" />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="销售部门(sale department)" v-bind="validateInfos.saleDepartmentName"
+								id="SaleInquiryFormForm-saleDepartmentName" name="saleDepartmentName">
+								<a-input v-model:value="formData.saleDepartmentName" placeholder="" allow-clear
+									disabled />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="业务员(salesman)" v-bind="validateInfos.salesman"
+								id="SaleInquiryFormForm-salesman" name="salesman">
+								<a-input v-model:value="formData.salesmanName" placeholder="" allow-clear disabled />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="采购询价组(procurement inquiry team)" v-bind="validateInfos.inquiryTeam"
+								id="SaleInquiryFormForm-inquiryTeam" name="inquiryTeam">
+								<JSelectDept v-model:value="formData.inquiryTeam" :multiple="false" />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="质量等级(quality grade)" v-bind="validateInfos.qualityGradeHead"
+								id="SaleInquiryFormForm-qualityGradeHead" name="qualityGradeHead">
+								<JDictSelectTag v-model:value="formData.qualityGradeHead" placeholder="请选择"
+									dictCode="quality_grade" @change="handleChangeQualityGrade" />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="询价备注(inquiry notes)" v-bind="validateInfos.inquiryNotes"
+								id="SaleInquiryFormForm-inquiryNotes" name="inquiryNotes">
+								<a-input v-model:value="formData.inquiryNotes" placeholder="请输入询价备注(inquiry notes)"
+									allow-clear AutoComplete="off" />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="附件(attachs)" v-bind="validateInfos.attachs"
+								id="SaleInquiryFormForm-attachs" name="attachs">
+								<JUpload v-model:value="formData.attachs" />
+							</a-form-item>
+						</a-col>
+					</a-row>
+				</a-form>
+			</template>
+		</JFormContainer>
+
+		<!-- 子表单区域 -->
+		<a-tabs v-model:activeKey="activeKey" animated style="padding: 24px; padding-top: 0px">
+			<a-tab-pane tab="销售询价单 - 产品明细(product details)" key="saleInquiryFormProduct" :forceRender="true">
+				<a-button type="primary" @click="selectProducts" style="margin-right: 1%; margin-bottom: 1%"
+					:disabled="disabled">
+					选择产品(select product)</a-button>
+				<a-button type="primary" @click="setNeed" style="margin-right: 1%" :disabled="disabled">
+					设置需要船检证书(set need ship inspection certificate)</a-button>
+				<a-button type="primary" @click="setNotNeed" :disabled="disabled"> 设置不需要船检证书(set need not ship
+					inspection certificate)</a-button>
+				<j-vxe-table :keep-source="true" resizable ref="saleInquiryFormProductTableRef"
+					:loading="saleInquiryFormProductTable.loading" :columns="saleInquiryFormProductTable.columns"
+					:dataSource="saleInquiryFormProductTable.dataSource" :disabled="disabled" :rowNumber="true"
+					:rowSelection="true" asyncRemove  :maxHeight="540"
+		  :keyboardEdit="true">
+					<template #action="props">
+						<a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)" v-if="!disabled">
+							<a>删除(delete)</a>
+						</a-popconfirm>
+					</template>
+				</j-vxe-table>
+			</a-tab-pane>
+			<a-tab-pane tab="销售询价单 - 船明细(ship details)" key="saleInquiryFormShip" :forceRender="true">
+				<a-button type="primary" @click="selectShip" :disabled="disabled"> 选择船(select ship)</a-button>
+				<j-vxe-table :keep-source="true" resizable ref="saleInquiryFormShipTableRef"
+					:loading="saleInquiryFormShipTable.loading" :columns="saleInquiryFormShipTable.columns"
+					:dataSource="saleInquiryFormShipTable.dataSource" :disabled="disabled" :rowNumber="true"
+					:rowSelection="true">
+					<template #action="props">
+						<a @click="viewAccessory(props)">查看配件信息(view accessory information)</a>
+						<a-divider type="vertical" />
+						<a-popconfirm title="确定删除吗?" @confirm="handleDelete(props)" v-if="!disabled">
+							<a>删除(delete)</a>
+						</a-popconfirm>
+					</template>
+				</j-vxe-table>
+			</a-tab-pane>
+		</a-tabs>
+		<SelectShipSModal ref="SelectShipSModalRef" @select="addShip" />
+		<BaseShipArchiveAccessoriesModal ref="BaseShipArchiveAccessoriesListRef" />
+		<SelectPrpductModal ref="SelectPrpductModalRef" @select-product="addProduct" />
+		<SelectProjectModal ref="SelectProjectModalRef" @select-project="addProject" />
+	</a-spin>
 </template>
 
 <script lang="ts">
-  import { defineComponent, ref, reactive, computed, toRaw } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { useValidateAntFormAndTable } from '/@/hooks/system/useJvxeMethods';
-  import {
-    querySaleInquiryFormShipListByMainId,
-    querySaleInquiryFormProductListByMainId,
-    queryDataById,
-    saveOrUpdate,
-    LinkOption,
-  } from '../SaleInquiryForm.api';
-  import { JVxeTable } from '/@/components/jeecg/JVxeTable';
-  import { saleInquiryFormShipColumns, saleInquiryFormProductColumns } from '../SaleInquiryForm.data';
-  import SelectShipSModal from '../../../publicComponents/SelectShipSModal.vue';
-  import BaseShipArchiveAccessoriesModal from '../../../publicComponents/BaseShipArchiveAccessoriesModal.vue';
-  import SelectPrpductModal from '../../../publicComponents/SelectPrpductModal.vue';
-  import SelectProjectModal from '../../../publicComponents/SelectProjectModal.vue';
-  import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
-  import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
-  import { JDictSelectTag, JSelect } from '/@/components/Form';
-  import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
-  import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue';
-  import { Form, message } from 'ant-design-vue';
-  import { useUserStore } from '/@/store/modules/user';
-  import dayjs from 'dayjs';
-  const userStore = useUserStore();
-  const useForm = Form.useForm;
-  export default defineComponent({
-    name: 'SaleInquiryFormForm',
-    components: {
-      JVxeTable,
-      JFormContainer,
-      SelectShipSModal,
-      BaseShipArchiveAccessoriesModal,
-      SelectPrpductModal,
-      JUpload,
-      SelectProjectModal,
-      JDictSelectTag,
-      JSelectInput,
-      JSelectDept,
-    },
-    props: {
-      formDisabled: {
-        type: Boolean,
-        default: false,
-      },
-      formData: { type: Object, default: () => {} },
-      formBpm: { type: Boolean, default: true },
-    },
-    emits: ['success'],
-    setup(props, { emit }) {
-      const loading = ref(false);
-      const formRef = ref();
-      var linkOption = ref([]);
-      var SelectPrpductModalRef = ref();
-      var SelectProjectModalRef = ref();
-      var inquiryPeriod = ref([]);
-      const saleInquiryFormShipTableRef = ref();
-      const saleInquiryFormShipTable = reactive<Record<string, any>>({
-        loading: false,
-        columns: saleInquiryFormShipColumns,
-        dataSource: [],
-      });
-      const saleInquiryFormProductTableRef = ref();
-      const saleInquiryFormProductTable = reactive<Record<string, any>>({
-        loading: false,
-        columns: saleInquiryFormProductColumns,
-        dataSource: [],
-      });
-      var SelectShipSModalRef = ref();
-      var BaseShipArchiveAccessoriesListRef = ref();
-      const activeKey = ref('saleInquiryFormProduct');
-      var customerOption = ref([]);
-      const formData = reactive<Record<string, any>>({
-        id: '',
-        status: undefined,
-        delFlag: undefined,
-        otherStatus: '',
-        billDate: dayjs(new Date()).format('YYYY-MM-DD'),
-        billCode: '',
-        inquiryProject: '',
-        projectName: '',
-        inquiryCustomer: '',
-        customerName: '',
-        inquiryPlatform: '',
-        customerInquiryNumber: '',
-        inquiryPeriodEnd: '',
-        inquiryPeriodBegin: '',
-        priority: '',
-        productionClass: '',
-        model: '',
-        maker: '',
-        saleDepartment: '',
-        saleDepartmentName: '',
-        salesman: '',
-        salesmanName: '',
-        inquiryTeam: '',
-        attachs: '',
-        inquiryNotes: '',
-        inquiryTime: dayjs(new Date()).format('YYYY-MM-DD'),
-        qualityGradeHead: '',
-        liaisonId: '',
-        liaisonInfo: '',
-      });
+	import { defineComponent, ref, reactive, computed, toRaw } from 'vue';
+	import { defHttp } from '/@/utils/http/axios';
+	import { useValidateAntFormAndTable } from '/@/hooks/system/useJvxeMethods';
+	import {
+		querySaleInquiryFormShipListByMainId,
+		querySaleInquiryFormProductListByMainId,
+		queryDataById,
+		saveOrUpdate,
+		LinkOption,
+	} from '../SaleInquiryForm.api';
+	import { JVxeTable } from '/@/components/jeecg/JVxeTable';
+	import { saleInquiryFormShipColumns, saleInquiryFormProductColumns } from '../SaleInquiryForm.data';
+	import SelectShipSModal from '../../../publicComponents/SelectShipSModal.vue';
+	import BaseShipArchiveAccessoriesModal from '../../../publicComponents/BaseShipArchiveAccessoriesModal.vue';
+	import SelectPrpductModal from '../../../publicComponents/SelectPrpductModal.vue';
+	import SelectProjectModal from '../../../publicComponents/SelectProjectModal.vue';
+	import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
+	import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
+	import { JDictSelectTag, JSelect } from '/@/components/Form';
+	import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
+	import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue';
+	import { Form, message } from 'ant-design-vue';
+	import { useUserStore } from '/@/store/modules/user';
+	import dayjs from 'dayjs';
+	const userStore = useUserStore();
+	const useForm = Form.useForm;
+	export default defineComponent({
+		name: 'SaleInquiryFormForm',
+		components: {
+			JVxeTable,
+			JFormContainer,
+			SelectShipSModal,
+			BaseShipArchiveAccessoriesModal,
+			SelectPrpductModal,
+			JUpload,
+			SelectProjectModal,
+			JDictSelectTag,
+			JSelectInput,
+			JSelectDept,
+		},
+		props: {
+			formDisabled: {
+				type: Boolean,
+				default: false,
+			},
+			formData: { type: Object, default: () => { } },
+			formBpm: { type: Boolean, default: true },
+		},
+		emits: ['success'],
+		setup(props, { emit }) {
+			const loading = ref(false);
+			const formRef = ref();
+			var linkOption = ref([]);
+			var SelectPrpductModalRef = ref();
+			var SelectProjectModalRef = ref();
+			var inquiryPeriod = ref([]);
+			const saleInquiryFormShipTableRef = ref();
+			const saleInquiryFormShipTable = reactive<Record<string, any>>({
+				loading: false,
+				columns: saleInquiryFormShipColumns,
+				dataSource: [],
+			});
+			const saleInquiryFormProductTableRef = ref();
+			const saleInquiryFormProductTable = reactive<Record<string, any>>({
+				loading: false,
+				columns: saleInquiryFormProductColumns,
+				dataSource: [],
+			});
+			var SelectShipSModalRef = ref();
+			var BaseShipArchiveAccessoriesListRef = ref();
+			const activeKey = ref('saleInquiryFormProduct');
+			var customerOption = ref([]);
+			const formData = reactive<Record<string, any>>({
+				id: '',
+				status: undefined,
+				delFlag: undefined,
+				otherStatus: '',
+				billDate: dayjs(new Date()).format('YYYY-MM-DD'),
+				billCode: '',
+				inquiryProject: '',
+				projectName: '',
+				inquiryCustomer: '',
+				customerName: '',
+				inquiryPlatform: '',
+				customerInquiryNumber: '',
+				inquiryPeriodEnd: '',
+				inquiryPeriodBegin: '',
+				priority: '',
+				productionClass: '',
+				model: '',
+				maker: '',
+				saleDepartment: '',
+				saleDepartmentName: '',
+				salesman: '',
+				salesmanName: '',
+				inquiryTeam: '',
+				attachs: '',
+				inquiryNotes: '',
+				inquiryTime: dayjs(new Date()).format('YYYY-MM-DD'),
+				qualityGradeHead: '',
+				liaisonId: '',
+				liaisonInfo: '',
+			});
+
+			//表单验证
+			const validatorRules = reactive({
+				projectName: [{ required: true, message: '请选择询价项目(select project)' }],
+				inquiryCustomer: [{ required: true, message: '请选择询价客户(select customer)' }],
+				inquiryPlatform: [{ required: true, message: '请选择询价平台(select platform)' }],
+				// liaisonInfo: [{ required: true, message: '请选择客户联系人(select liaison)' }],
+				customerInquiryNumber: [{ required: true, message: '请输入客户询价单号(input customerInquiryNumber)' }],
+				inquiryTime: [{ required: true, message: '请选择客户询价日期(select inquiryTime)' }],
+				model: [{ required: true, message: '请选择机型(model)' }],
+				maker: [{ required: true, message: '请输入厂家(input maker)' }],
+				qualityGradeHead: [{ required: true, message: '请选择质量等级(select qualityGradeHead)' }],
+			});
+			const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
+			const dbData = {};
+			const formItemLayout = {
+				labelCol: { xs: { span: 24 }, sm: { span: 5 } },
+				wrapperCol: { xs: { span: 24 }, sm: { span: 16 } },
+			};
+
+			// 表单禁用
+			const disabled = computed(() => {
+				if (props.formBpm === true) {
+					if (props.formData.disabled === false) {
+						return false;
+					} else {
+						return true;
+					}
+				}
+				return props.formDisabled;
+			});
+
+			async function add() {
+				await resetFields();
+				linkOption.value = [];
+				saleInquiryFormShipTable.dataSource = [];
+				saleInquiryFormProductTable.dataSource = [];
+				activeKey.value = 'saleInquiryFormProduct';
+				await getCustomerOptions();
+				inquiryPeriod.value = [];
+				formData.salesman = userStore.getUserInfo.username;
+				formData.salesmanName = userStore.getUserInfo.realname;
+				formData.saleDepartment = userStore.getUserInfo.orgCode;
+				formData.saleDepartmentName = userStore.getUserInfo.orgName;
+			}
 
-      //表单验证
-      const validatorRules = reactive({
-        projectName: [{ required: true, message: '请选择询价项目(select project)' }],
-        inquiryCustomer: [{ required: true, message: '请选择询价客户(select customer)' }],
-        inquiryPlatform: [{ required: true, message: '请选择询价平台(select platform)' }],
-        liaisonId: [{ required: true, message: '请选择客户联系人(select liaison)' }],
-        customerInquiryNumber: [{ required: true, message: '请输入客户询价单号(input customerInquiryNumber)' }],
-        inquiryTime: [{ required: true, message: '请选择客户询价日期(select inquiryTime)' }],
-        model: [{ required: true, message: '请选择机型(model)' }],
-        maker: [{ required: true, message: '请输入厂家(input maker)' }],
-        qualityGradeHead: [{ required: true, message: '请选择质量等级(select qualityGradeHead)' }],
-      });
-      const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
-      const dbData = {};
-      const formItemLayout = {
-        labelCol: { xs: { span: 24 }, sm: { span: 5 } },
-        wrapperCol: { xs: { span: 24 }, sm: { span: 16 } },
-      };
+			async function edit(row) {
+				linkOption.value = [];
+				//主表数据
+				await queryMainData(row.id);
+				//子表数据
+				const saleInquiryFormShipDataList = await querySaleInquiryFormShipListByMainId(row['id']);
+				saleInquiryFormShipTable.dataSource = [...saleInquiryFormShipDataList];
+				const saleInquiryFormProductDataList = await querySaleInquiryFormProductListByMainId(row['id']);
+				saleInquiryFormProductTable.dataSource = [...saleInquiryFormProductDataList];
+				getCustomerOptions();
+				inquiryPeriod.value[0] = formData.inquiryPeriodBegin ? dayjs(formData.inquiryPeriodBegin, 'YYYY-MM-DD') : '';
+				inquiryPeriod.value[1] = formData.inquiryPeriodEnd ? dayjs(formData.inquiryPeriodEnd, 'YYYY-MM-DD') : '';
+				if (formData.inquiryCustomer != null && formData.inquiryCustomer != '') {
 
-      // 表单禁用
-      const disabled = computed(() => {
-        if (props.formBpm === true) {
-          if (props.formData.disabled === false) {
-            return false;
-          } else {
-            return true;
-          }
-        }
-        return props.formDisabled;
-      });
+					getLinkOptionsArr(formData.inquiryCustomer);
+				}
+			}
+			async function copy(data, id) {
+				//主表数据
+				await queryMainData(id);
+				formData.id = '';
+				formData.billCode = '';
+				formData.submit = undefined;
+				formData.inquiryProject = '';
+				formData.projectName = '';
+				formData.customerInquiryNumber = '';
+				formData.attachs = '';
+				formData.salesman = userStore.getUserInfo.username;
+				formData.salesmanName = userStore.getUserInfo.realname;
+				formData.saleDepartment = userStore.getUserInfo.orgCode;
+				formData.saleDepartmentName = userStore.getUserInfo.orgName;
+				//子表数据
+				const saleInquiryFormShipDataList = await querySaleInquiryFormShipListByMainId(id);
+				saleInquiryFormShipTable.dataSource = [...saleInquiryFormShipDataList];
+				saleInquiryFormProductTable.dataSource = [...data];
+				getCustomerOptions();
+				inquiryPeriod.value[0] = formData.inquiryPeriodBegin ? dayjs(formData.inquiryPeriodBegin, 'YYYY-MM-DD') : '';
+				inquiryPeriod.value[1] = formData.inquiryPeriodEnd ? dayjs(formData.inquiryPeriodEnd, 'YYYY-MM-DD') : '';
+				getLinkOptionsArr(formData.inquiryCustomer);
+			}
+			async function queryMainData(id) {
+				const row = await queryDataById(id);
+				resetFields();
+				const tmpData = {};
+				Object.keys(formData).forEach((key) => {
+					if (row.hasOwnProperty(key)) {
+						tmpData[key] = row[key];
+					}
+				});
+				//赋值
+				Object.assign(formData, tmpData);
+			}
 
-      async function add() {
-        await resetFields();
-        saleInquiryFormShipTable.dataSource = [];
-        saleInquiryFormProductTable.dataSource = [];
-        activeKey.value = 'saleInquiryFormProduct';
-        await getCustomerOptions();
-        inquiryPeriod.value = [];
-        formData.salesman = userStore.getUserInfo.username;
-        formData.salesmanName = userStore.getUserInfo.realname;
-        formData.saleDepartment = userStore.getUserInfo.orgCode;
-        formData.saleDepartmentName = userStore.getUserInfo.orgName;
-      }
+			const { getSubFormAndTableData, transformData } = useValidateAntFormAndTable(activeKey, {
+				saleInquiryFormShip: saleInquiryFormShipTableRef,
+				saleInquiryFormProduct: saleInquiryFormProductTableRef,
+			});
 
-      async function edit(row) {
-        //主表数据
-        await queryMainData(row.id);
-        //子表数据
-        const saleInquiryFormShipDataList = await querySaleInquiryFormShipListByMainId(row['id']);
-        saleInquiryFormShipTable.dataSource = [...saleInquiryFormShipDataList];
-        const saleInquiryFormProductDataList = await querySaleInquiryFormProductListByMainId(row['id']);
-        saleInquiryFormProductTable.dataSource = [...saleInquiryFormProductDataList];
-        getCustomerOptions();
-        inquiryPeriod.value[0] = formData.inquiryPeriodBegin ? dayjs(formData.inquiryPeriodBegin, 'YYYY-MM-DD') : '';
-        inquiryPeriod.value[1] = formData.inquiryPeriodEnd ? dayjs(formData.inquiryPeriodEnd, 'YYYY-MM-DD') : '';
-        getLinkOptionsArr(formData.inquiryCustomer);
-      }
-      async function copy(data, id) {
-        //主表数据
-        await queryMainData(id);
-        formData.id = '';
-        formData.billCode = '';
-        formData.submit = undefined;
-        formData.inquiryProject = '';
-        formData.projectName = '';
-        formData.customerInquiryNumber = '';
-        formData.attachs = '';
-        formData.salesman = userStore.getUserInfo.username;
-        formData.salesmanName = userStore.getUserInfo.realname;
-        formData.saleDepartment = userStore.getUserInfo.orgCode;
-        formData.saleDepartmentName = userStore.getUserInfo.orgName;
-        //子表数据
-        const saleInquiryFormShipDataList = await querySaleInquiryFormShipListByMainId(id);
-        saleInquiryFormShipTable.dataSource = [...saleInquiryFormShipDataList];
-        saleInquiryFormProductTable.dataSource = [...data];
-        getCustomerOptions();
-        inquiryPeriod.value[0] = formData.inquiryPeriodBegin ? dayjs(formData.inquiryPeriodBegin, 'YYYY-MM-DD') : '';
-        inquiryPeriod.value[1] = formData.inquiryPeriodEnd ? dayjs(formData.inquiryPeriodEnd, 'YYYY-MM-DD') : '';
-        getLinkOptionsArr(formData.inquiryCustomer);
-      }
-      async function queryMainData(id) {
-        const row = await queryDataById(id);
-        resetFields();
-        const tmpData = {};
-        Object.keys(formData).forEach((key) => {
-          if (row.hasOwnProperty(key)) {
-            tmpData[key] = row[key];
-          }
-        });
-        //赋值
-        Object.assign(formData, tmpData);
-      }
+			async function getFormData() {
+				try {
+					// 触发表单验证
+					await validate();
+				} catch ({ errorFields }) {
+					if (errorFields) {
+						const firstField = errorFields[0];
+						if (firstField) {
+							formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
+						}
+					}
+					return Promise.reject(errorFields);
+				}
+				return transformData(toRaw(formData));
+			}
 
-      const { getSubFormAndTableData, transformData } = useValidateAntFormAndTable(activeKey, {
-        saleInquiryFormShip: saleInquiryFormShipTableRef,
-        saleInquiryFormProduct: saleInquiryFormProductTableRef,
-      });
+			async function submitForm() {
+				let deptName = "备件,销售一组,销售二组,销售三组,销售四组,采购一组,采购二组,采购三组,SG1,SG2,SG3,SG4,PG1,PG2,PG3"
+				let saleDepartmentName = formData.saleDepartmentName;
+				if (deptName.includes(saleDepartmentName) && (formData.liaisonInfo == null || formData.liaisonInfo == '')) {
+					message.warning('请填写客户联系人');
+					return;
+				}
 
-      async function getFormData() {
-        try {
-          // 触发表单验证
-          await validate();
-        } catch ({ errorFields }) {
-          if (errorFields) {
-            const firstField = errorFields[0];
-            if (firstField) {
-              formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
-            }
-          }
-          return Promise.reject(errorFields);
-        }
-        return transformData(toRaw(formData));
-      }
+				const xTable = saleInquiryFormProductTableRef.value!.getXTable();
+				const xTable2 = saleInquiryFormShipTableRef.value!.getXTable();
+				if (xTable.data.length == 0) {
+					message.warning('请添加产品明细');
+				} else if (xTable2.data.length == 0) {
+					message.warning('请添加船明细');
+				} else {
+					saleInquiryFormProductTableRef.value!.validateTable().then(async (errMap) => {
+						if (errMap) {
+							console.log('表单验证未通过:', { errMap });
+						} else {
+							const mainData = await getFormData();
+							const subData = await getSubFormAndTableData();
+							const values = Object.assign({}, dbData, mainData, subData);
+							console.log('表单提交数据', values);
+							const isUpdate = values.id ? true : false;
+							await saveOrUpdate(values, isUpdate);
+							//关闭弹窗
+							emit('success');
+						}
+					});
+				}
+			}
 
-      async function submitForm() {
-        const xTable = saleInquiryFormProductTableRef.value!.getXTable();
-        const xTable2 = saleInquiryFormShipTableRef.value!.getXTable();
-        if (xTable.data.length == 0) {
-          message.warning('请添加产品明细');
-        } else if (xTable2.data.length == 0) {
-          message.warning('请添加船明细');
-        } else {
-          saleInquiryFormProductTableRef.value!.validateTable().then(async (errMap) => {
-            if (errMap) {
-              console.log('表单验证未通过:', { errMap });
-            } else {
-              const mainData = await getFormData();
-              const subData = await getSubFormAndTableData();
-              const values = Object.assign({}, dbData, mainData, subData);
-              console.log('表单提交数据', values);
-              const isUpdate = values.id ? true : false;
-              await saveOrUpdate(values, isUpdate);
-              //关闭弹窗
-              emit('success');
-            }
-          });
-        }
-      }
+			function setFieldsValue(values) {
+				if (values) {
+					Object.keys(values).map((k) => {
+						formData[k] = values[k];
+					});
+				}
+			}
 
-      function setFieldsValue(values) {
-        if (values) {
-          Object.keys(values).map((k) => {
-            formData[k] = values[k];
-          });
-        }
-      }
+			/**
+			 * 值改变事件触发-树控件回调
+			 * @param key
+			 * @param value
+			 */
+			function handleFormChange(key, value) {
+				formData[key] = value;
+			}
+			async function handleDelete(prop) {
+				var xTable = saleInquiryFormShipTableRef.value!.getXTable();
+				var newArray = [...xTable.data];
+				newArray.splice(prop.rowIndex, 1);
+				saleInquiryFormShipTable.dataSource = newArray;
+			}
+			async function handleDelete1(prop) {
+				var xTable = saleInquiryFormProductTableRef.value!.getXTable();
+				var newArray = [...xTable.data];
+				newArray.splice(prop.rowIndex, 1);
+				saleInquiryFormProductTable.dataSource = newArray;
+			}
+			function selectShip() {
+				SelectShipSModalRef.value.getTable();
+			}
+			function addShip(data) {
+				data.map((item) => {
+					item.shipowner = item.relateCustomer;
+					item.shipId = item.id;
+					item.id = undefined;
+				});
+				var xTable = saleInquiryFormShipTableRef.value!.getXTable();
+				var arr = xTable.data.concat(data);
+				saleInquiryFormShipTable.dataSource = arr;
+			}
+			function addProduct(data) {
+				data.map((item) => {
+					item.productClass = item.classId_dictText;
+					item.productCode = item.code;
+					item.unit = item.measurementUnit;
+					item.productId = item.id;
+					item.qualityGrade = formData.qualityGradeHead !== '' ? formData.qualityGradeHead : '';
+					item.id = undefined;
+					item.notes = '';
+				});
+				var xTable = saleInquiryFormProductTableRef.value!.getXTable();
+				var arrProduct = xTable.data.concat(data);
+				saleInquiryFormProductTable.dataSource = arrProduct;
+			}
+			function addProject(data) {
+				if (data.length == 0) {
+					formData.inquiryProject = '';
+					formData.projectName = '';
+				} else {
+					formData.inquiryProject = data[0].id;
+					formData.projectName = data[0].code;
+					formData.inquiryCustomer = data[0].customerId;
+					formData.customerName = data[0].customerId_dictText;
+					customerOption.value.map((item) => {
+						if (item.value == data[0].customerId) {
+							formData.priority = item.priority;
+						}
+					});
+					getLinkOptionsArr(formData.inquiryCustomer);
+				}
+			}
+			function getCustomerOptions() {
+				let params = { pageSize: '-1', status: 1 };
+				defHttp.get({ url: '/cuspCode/cuspCustomerProfile/list', params }, { isTransformResponse: false }).then((res) => {
+					if (res) {
+						customerOption.value = [];
+						res.result.records.forEach((item) => {
+							customerOption.value.push({
+								label: item.name,
+								value: item.id,
+								priority: item.priority,
+							});
+						});
+					}
+				});
+			}
+			function viewAccessory(prop) {
+				BaseShipArchiveAccessoriesListRef.value.getTable(prop.row);
+			}
+			function selectProducts() {
+				SelectPrpductModalRef.value.getTable();
+			}
+			function setNeed() {
+				const values = saleInquiryFormProductTableRef.value.getSelectionData();
+				var arr = saleInquiryFormProductTableRef.value.getXTable();
+				values.map((item) => {
+					arr.data.map((event) => {
+						if (item.id == event.id) {
+							event.needShip = 1;
+						}
+					});
 
-      /**
-       * 值改变事件触发-树控件回调
-       * @param key
-       * @param value
-       */
-      function handleFormChange(key, value) {
-        formData[key] = value;
-      }
-      async function handleDelete(prop) {
-        var xTable = saleInquiryFormShipTableRef.value!.getXTable();
-        var newArray = [...xTable.data];
-        newArray.splice(prop.rowIndex, 1);
-        saleInquiryFormShipTable.dataSource = newArray;
-      }
-      async function handleDelete1(prop) {
-        var xTable = saleInquiryFormProductTableRef.value!.getXTable();
-        var newArray = [...xTable.data];
-        newArray.splice(prop.rowIndex, 1);
-        saleInquiryFormProductTable.dataSource = newArray;
-      }
-      function selectShip() {
-        SelectShipSModalRef.value.getTable();
-      }
-      function addShip(data) {
-        data.map((item) => {
-          item.shipowner = item.relateCustomer;
-          item.shipId = item.id;
-          item.id = undefined;
-        });
-        var xTable = saleInquiryFormShipTableRef.value!.getXTable();
-        var arr = xTable.data.concat(data);
-        saleInquiryFormShipTable.dataSource = arr;
-      }
-      function addProduct(data) {
-        data.map((item) => {
-          item.productClass = item.classId_dictText;
-          item.productCode = item.code;
-          item.unit = item.measurementUnit;
-          item.productId = item.id;
-          item.qualityGrade = formData.qualityGradeHead !== '' ? formData.qualityGradeHead : '';
-          item.id = undefined;
-          item.notes = '';
-        });
-        var xTable = saleInquiryFormProductTableRef.value!.getXTable();
-        var arrProduct = xTable.data.concat(data);
-        saleInquiryFormProductTable.dataSource = arrProduct;
-      }
-      function addProject(data) {
-        if (data.length == 0) {
-          formData.inquiryProject = '';
-          formData.projectName = '';
-        } else {
-          formData.inquiryProject = data[0].id;
-          formData.projectName = data[0].code;
-          formData.inquiryCustomer = data[0].customerId;
-          formData.customerName = data[0].customerId_dictText;
-          customerOption.value.map((item) => {
-            if (item.value == data[0].customerId) {
-              formData.priority = item.priority;
-            }
-          });
-          getLinkOptionsArr(formData.inquiryCustomer);
-        }
-      }
-      function getCustomerOptions() {
-        let params = { pageSize: '-1', status: 1 };
-        defHttp.get({ url: '/cuspCode/cuspCustomerProfile/list', params }, { isTransformResponse: false }).then((res) => {
-          if (res) {
-            customerOption.value = [];
-            res.result.records.forEach((item) => {
-              customerOption.value.push({
-                label: item.name,
-                value: item.id,
-                priority: item.priority,
-              });
-            });
-          }
-        });
-      }
-      function viewAccessory(prop) {
-        BaseShipArchiveAccessoriesListRef.value.getTable(prop.row);
-      }
-      function selectProducts() {
-        SelectPrpductModalRef.value.getTable();
-      }
-      function setNeed() {
-        const values = saleInquiryFormProductTableRef.value.getSelectionData();
-        var arr = saleInquiryFormProductTableRef.value.getXTable();
-        values.map((item) => {
-          arr.data.map((event) => {
-            if (item.id == event.id) {
-              event.needShip = 1;
-            }
-          });
+					saleInquiryFormProductTable.dataSource = [...arr.data];
+				});
+			}
+			function setNotNeed() {
+				const values = saleInquiryFormProductTableRef.value.getSelectionData();
+				var arr = saleInquiryFormProductTableRef.value.getXTable();
+				values.map((item) => {
+					arr.data.map((event) => {
+						if (item.id == event.id) {
+							event.needShip = 0;
+						}
+					});
+					saleInquiryFormProductTable.dataSource = [...arr.data];
+				});
+			}
+			function onSearchProject() {
+				SelectProjectModalRef.value.getTable('allowAdd');
+			}
+			function onChangeInquiryPeriod(data) {
+				inquiryPeriod.value = data;
+				formData.inquiryPeriodBegin = data[0].format('YYYY-MM-DD');
+				formData.inquiryPeriodEnd = data[1].format('YYYY-MM-DD');
+			}
+			function handleChangeQualityGrade(data) {
+				var xTable = saleInquiryFormProductTableRef.value!.getXTable(); //关键代码 如果不更新 重新加载表格即可
+				xTable.data.map((item) => {
+					item.qualityGrade = data;
+				});
+				saleInquiryFormProductTable.dataSource = xTable.data;
+			}
+			async function getLinkOptionsArr(customerId) {
+				var obj = await LinkOption({ id: customerId });
+				linkOption.value = obj;
+				if (obj.lenght !== 0 && typeof obj === 'undefined') {
+					formData.liaisonId = obj[0].id;
+					formData.liaisonInfo = obj[0].name;
+				}
+			}
+			function onChangeLiaison(data) {
 
-          saleInquiryFormProductTable.dataSource = [...arr.data];
-        });
-      }
-      function setNotNeed() {
-        const values = saleInquiryFormProductTableRef.value.getSelectionData();
-        var arr = saleInquiryFormProductTableRef.value.getXTable();
-        values.map((item) => {
-          arr.data.map((event) => {
-            if (item.id == event.id) {
-              event.needShip = 0;
-            }
-          });
-          saleInquiryFormProductTable.dataSource = [...arr.data];
-        });
-      }
-      function onSearchProject() {
-        SelectProjectModalRef.value.getTable('allowAdd');
-      }
-      function onChangeInquiryPeriod(data) {
-        inquiryPeriod.value = data;
-        formData.inquiryPeriodBegin = data[0].format('YYYY-MM-DD');
-        formData.inquiryPeriodEnd = data[1].format('YYYY-MM-DD');
-      }
-      function handleChangeQualityGrade(data) {
-        var xTable = saleInquiryFormProductTableRef.value!.getXTable(); //关键代码 如果不更新 重新加载表格即可
-        xTable.data.map((item) => {
-          item.qualityGrade = data;
-        });
-        saleInquiryFormProductTable.dataSource = xTable.data;
-      }
-      async function getLinkOptionsArr(customerId) {
-        var obj = await LinkOption({ id: customerId });
-        linkOption.value = obj;
-        if (obj.lenght !== 0 && typeof obj === 'undefined') {
-          formData.liaisonId = obj[0].id;
-          formData.liaisonInfo = obj[0].name;
-        }
-      }
-      function onChangeLiaison(data) {
-        if (data && data !== undefined) {
-          formData.liaisonId = data.key;
-          formData.liaisonInfo = data.label[0].children;
-        } else {
-          formData.liaisonId = '';
-          formData.liaisonInfo = '';
-        }
-      }
-      return {
-        saleInquiryFormShipTableRef,
-        saleInquiryFormShipTable,
-        saleInquiryFormProductTableRef,
-        saleInquiryFormProductTable,
-        validatorRules,
-        validateInfos,
-        activeKey,
-        loading,
-        formData,
-        setFieldsValue,
-        handleFormChange,
-        formItemLayout,
-        disabled,
-        getFormData,
-        submitForm,
-        SelectShipSModalRef,
-        add,
-        edit,
-        formRef,
-        selectShip,
-        addShip,
-        addProduct,
-        BaseShipArchiveAccessoriesListRef,
-        viewAccessory,
-        handleDelete,
-        handleDelete1,
-        selectProducts,
-        setNeed,
-        setNotNeed,
-        SelectPrpductModalRef,
-        SelectProjectModalRef,
-        onSearchProject,
-        addProject,
-        getCustomerOptions,
-        customerOption,
-        inquiryPeriod,
-        onChangeInquiryPeriod,
-        handleChangeQualityGrade,
-        copy,
-        linkOption,
-        getLinkOptionsArr,
-        onChangeLiaison,
-      };
-    },
-  });
+				const selectedOption = linkOption.value.find(item => item.name === data);
+				if (selectedOption) {
+					formData.liaisonId = selectedOption.id;
+				}
+
+				//       if (data && data !== undefined) {
+				//         formData.liaisonId = data.key;
+				//         formData.liaisonInfo = data.children;
+				//       } else {
+				//         formData.liaisonId = '';
+				//         formData.liaisonInfo = '';
+				//       }
+			}
+			return {
+				saleInquiryFormShipTableRef,
+				saleInquiryFormShipTable,
+				saleInquiryFormProductTableRef,
+				saleInquiryFormProductTable,
+				validatorRules,
+				validateInfos,
+				activeKey,
+				loading,
+				formData,
+				setFieldsValue,
+				handleFormChange,
+				formItemLayout,
+				disabled,
+				getFormData,
+				submitForm,
+				SelectShipSModalRef,
+				add,
+				edit,
+				formRef,
+				selectShip,
+				addShip,
+				addProduct,
+				BaseShipArchiveAccessoriesListRef,
+				viewAccessory,
+				handleDelete,
+				handleDelete1,
+				selectProducts,
+				setNeed,
+				setNotNeed,
+				SelectPrpductModalRef,
+				SelectProjectModalRef,
+				onSearchProject,
+				addProject,
+				getCustomerOptions,
+				customerOption,
+				inquiryPeriod,
+				onChangeInquiryPeriod,
+				handleChangeQualityGrade,
+				copy,
+				linkOption,
+				getLinkOptionsArr,
+				onChangeLiaison,
+			};
+		},
+	});
 </script>
 <style lang="less" scoped>
-  /** 时间和数字输入框样式 */
-  :deep(.ant-input-number) {
-    width: 100%;
-  }
+	/** 时间和数字输入框样式 */
+	:deep(.ant-input-number) {
+		width: 100%;
+	}
+
+	:deep(.ant-calendar-picker) {
+		width: 100%;
+	}
+
+	/deep/.vxe-table--body-wrapper {
+		height: 100% !important;
+	}
+
+	/deep/.ant-modal-body {
+		padding: 24px !important;
+	}
 
-  :deep(.ant-calendar-picker) {
-    width: 100%;
-  }
-  /deep/.vxe-table--body-wrapper {
-    height: 100% !important;
-  }
-  /deep/.ant-modal-body {
-    padding: 24px !important;
-  }
+	/deep/.ant-form-item {
+		margin-bottom: 8px !important;
+	}
 
-  /deep/.ant-form-item {
-    margin-bottom: 8px !important;
-  }
-  /deep/.vxe-cell--valid-error-msg {
-    color: white !important;
-    background-color: white !important;
-  }
-</style>
+	/deep/.vxe-cell--valid-error-msg {
+		color: white !important;
+		background-color: white !important;
+	}
+</style>

+ 145 - 27
src/views/saleCode/saleInterfaceSync/SaleInterfaceSync.data.ts

@@ -4,6 +4,7 @@ import { rules} from '/@/utils/helper/validator';
 import { render } from '/@/utils/common/renderUtils';
 import {JVxeTypes,JVxeColumn} from '/@/components/jeecg/JVxeTable/types'
 import { getWeekMonthQuarterYear } from '/@/utils';
+import {defHttp} from '/@/utils/http/axios';
 //列表数据
 export const columns: BasicColumn[] = [
    // {
@@ -314,7 +315,17 @@ export const searchFormSchema: FormSchema[] = [
           showTime:true
       },
       //colProps: {span: 6},
-	},
+	},{
+      label: "vesselCode",
+      field: "vesselCode",
+      component: 'JInput',
+      //colProps: {span: 6},
+ 	},{
+      label: "vesselImo",
+      field: "vesselImo",
+      component: 'JInput',
+      //colProps: {span: 6},
+ 	},
 ];
 //表单数据
 export const formSchema: FormSchema[] = [
@@ -323,27 +334,58 @@ export const formSchema: FormSchema[] = [
   //   field: 'transactionId',
   //   component: 'Input',
   // },
+  // {
+  //   label: '客户号',
+  //   field: 'buyerTnId',
+  //   component: 'Input',
+  //   // dynamicRules: ({model,schema}) => {
+  //   //       return [
+  //   //              { required: true, message: '请输入客户号!'},
+  //   //       ];
+  //   //  },
+  // },
+  // {
+  //   label: '客户(customer)',
+  //   field: 'buyerName',
+  //   component: 'JSelect',
+  //   componentProps: {
+  //     getOptionUrl: () => defHttp.get({ url: '/cuspCode/cuspCustomerProfile/list?pageSize=-1&status=1'}),
+  //     showField:'name',
+  //     getPopupContainer: (node) => document.body,
+  //   }
+  // },
   {
-    label: '客户号',
-    field: 'buyerTnId',
-    component: 'Input',
-    // dynamicRules: ({model,schema}) => {
-    //       return [
-    //              { required: true, message: '请输入客户号!'},
-    //       ];
-    //  },
-  },
-  {
-    label: '客户名称',
+    label: '客户(customer)',
     field: 'buyerName',
-    component: 'Input',
-    // dynamicRules: ({model,schema}) => {
-    //       return [
-    //              { required: true, message: '请输入客户名称!'},
-    //       ];
-    //  },
+    component: 'ApiSelect',
+    // labelWidth: 180,
+    componentProps: {
+       // mode: 'multiple',//multiple: 多选;不填写为单选
+      api: () => defHttp.get({ url: 'cuspCode/cuspCustomerProfile/list',params:{pageSize: -1,status:1}}),
+      //数值转成String
+      numberToString: false,
+      //标题字段
+      labelField: 'name',
+      //值字段
+      valueField: 'name',
+      //返回结果字段
+      resultField: 'records',
+      filterOption: 'true',
+      optionFilterProp: 'label',
+      showSearch: 'true',
+    },
   },
   // {
+  //   label: '客户名称',
+  //   field: 'buyerName',
+  //   component: 'Input',
+  //   // dynamicRules: ({model,schema}) => {
+  //   //       return [
+  //   //              { required: true, message: '请输入客户名称!'},
+  //   //       ];
+  //   //  },
+  // },
+  // {
   //   label: '供应商号',
   //   field: 'supplierTnId',
   //   component: 'Input',
@@ -439,6 +481,81 @@ export const formSchema: FormSchema[] = [
     field: 'paymentTerms',
     component: 'Input',
   },
+  // {
+  //   label: 'vesselImo',
+  //   field: 'vesselImo',
+  //   component: 'ApiSelect',
+  //   componentProps: {
+  //     api: () => defHttp.get({ url: 'baseCode/baseShipArchive/list', params: { pageSize: 10, status: 1 } }),
+  //     numberToString: false,
+  //     labelField: 'imo',
+  //     valueField: 'imo',
+  //     resultField: 'records',
+  //     filterOption: true,
+  //     showSearch: true,
+  //     onSelect: (value, option) => {
+		//   console.log('sssssssssssssssssssssssssss',value)
+  //       // 获取当前选择的船舶信息
+  //       // const selectedShip = option.data;
+  //       // // 自动设置vesselCode字段值
+  //       // formModel.value.vesselCode = selectedShip.name;
+  //       // 如果需要可以同时更新其他相关字段
+  //       // formModel.value.otherField = selectedShip.otherField;
+  //     }
+  //   }
+  // },
+  // {
+  //   label: 'vesselCode',
+  //   field: 'vesselCode',
+  //   component: 'Input', // 改为普通输入框,因为值会自动带出
+  //   componentProps: {
+  //     disabled: true // 禁用编辑,因为值从IMO选择自动带出
+  //   }
+  // },
+
+  // {
+  //   label: 'vesselCode',
+  //   field: 'vesselCode',
+  //   component: 'ApiSelect',
+  //   // labelWidth: 180,
+  //   componentProps: {
+  //      // mode: 'multiple',//multiple: 多选;不填写为单选
+  //     api: () => defHttp.get({ url: 'baseCode/baseShipArchive/list',params:{pageSize: -1,status:1}}),
+  //     //数值转成String
+  //     numberToString: false,
+  //     //标题字段
+  //     labelField: 'shipName',
+  //     //值字段
+  //     valueField: 'shipName',
+  //     //返回结果字段
+  //     resultField: 'records',
+  //     filterOption: 'true',
+  //     optionFilterProp: 'label',
+  //     showSearch: 'true',
+  //   },
+  // },
+  // {
+  //   label: 'vesselImo',
+  //   field: 'vesselImo',
+  //   component: 'ApiSelect',
+  //   // labelWidth: 180,
+  //   componentProps: {
+  //      // mode: 'multiple',//multiple: 多选;不填写为单选
+  //     api: () => defHttp.get({ url: 'baseCode/baseShipArchive/list',params:{pageSize: -1,status:1}}),
+  //     //数值转成String
+  //     numberToString: false,
+  //     //标题字段
+  //     labelField: 'imo',
+  //     //值字段
+  //     valueField: 'imo',
+  //     //返回结果字段
+  //     resultField: 'records',
+  //     filterOption: 'true',
+  //     optionFilterProp: 'label',
+  //     showSearch: 'true',
+  //   },
+  // },
+  
   {
     label: 'vesselCode',
     field: 'vesselCode',
@@ -608,18 +725,19 @@ export const saleInterfaceItemColumns: JVxeColumn[] = [
     {
       title: 'comment',
       key: 'comment',
-      type: JVxeTypes.input,
-      width:"200px",
-      placeholder: '请输入${title}',
-      defaultValue:'',
-    },{
-      title: '内容',
-      key: 'content',
       type: JVxeTypes.textarea,
-      width:"200px",
+      width:"600px",
       placeholder: '请输入${title}',
       defaultValue:'',
-    },
+    }
+	// ,{
+ //      title: '内容',
+ //      key: 'content',
+ //      type: JVxeTypes.textarea,
+ //      width:"200px",
+ //      placeholder: '请输入${title}',
+ //      defaultValue:'',
+ //    },
   ]
 
 

+ 8 - 0
src/views/saleCode/saleInterfaceSync/SaleInterfaceSyncList.vue

@@ -48,6 +48,9 @@
               <a-menu-item key="11">
                 <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="handleImportExcel11">11-产品导入</j-upload-button>
               </a-menu-item>
+              <a-menu-item key="12">
+                <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="handleImportExcel12">12-OMAN导入</j-upload-button>
+              </a-menu-item>
             </a-menu>
           </template>
           <a-button v-auth="'saleCode:sale_interface_sync:importClass'"
@@ -365,6 +368,11 @@
       handleSuccess();
     });
   }
+  function handleImportExcel12(file) {
+    handleImportXls(file, '/saleCode/saleInterfaceSync/importPdf?type=12', '').then(() => {
+      handleSuccess();
+    });
+  }
 
   /**
    * 下拉操作栏

+ 3 - 0
src/views/saleCode/salesInvoice/components/saleInvoiceForm.vue

@@ -262,6 +262,8 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           @value-change="changeValues"
         >
           <template #action="props">
@@ -650,6 +652,7 @@
         var arrDeliverSon = await queryDeliverDataById(data[0].id);
         arrDeliverSon.map((item) => {
           item.sourceId = item.id;
+          item.nodes = item.childNotes;
           item.quantity = item.quantity && item.quantity !== '' ? item.quantity : 0;
           item.taxPrice = item.taxPrice && item.taxPrice !== '' ? item.taxPrice : 0;
           item.taxMoney = item.money && item.money !== '' ? item.money : 0;

+ 10 - 0
src/views/saleCode/salesInvoice/salesInvoiceForm.data.ts

@@ -121,6 +121,16 @@ export const columns: BasicColumn[] = [
     align: 'center',
     dataIndex: 'close_dictText',
   },
+  {
+    title: '组织(organize)',
+    align: 'center',
+    dataIndex: 'organize',
+  },
+  {
+    title: 'F号(F number)',
+    align: 'center',
+    dataIndex: 'fnumber',
+  },
 ];
 
 //子表表格配置

+ 17 - 0
src/views/saleCode/salesInvoice/salesInvoiceList.vue

@@ -67,6 +67,23 @@
 								</a-select>
 							</a-form-item>
 						</a-col>
+						<a-col :lg="8">
+							<a-form-item name="busynessType">
+								<template #label><span title="业务类型(busynessType)">业务类型(busynessType)</span></template>
+								<a-select  v-model:value="queryParam.busynessType">
+									<a-select-option value="">请选择</a-select-option>
+									<a-select-option value="普通业务">普通业务</a-select-option>
+									<a-select-option value="佣金业务">佣金业务</a-select-option>
+								</a-select>
+							</a-form-item>
+						</a-col>
+						<a-col :lg="8">
+							<a-form-item name="fnumber">
+								<template #label><span title="F号(F number)">F号(F number)</span></template>
+								<JInput placeholder="请输入" v-model:value="queryParam.fnumber" allow-clear
+									AutoComplete="off" />
+							</a-form-item>
+						</a-col>
 						<a-col :lg="8">
 							<a-form-item name="submit">
 								<template #label><span title="提交(submit)">提交(submit)</span></template>

+ 12 - 12
src/views/saleCode/salesOrder/SaleOrderForm.data.ts

@@ -211,18 +211,18 @@ export const columns: BasicColumn[] = [
     align:"center",
     dataIndex: 'notified',
    },
-   {
-    title: '发票金额(invoice money)',
-    align:"center",
-    dataIndex: 'invoiceMoney',
-    width:250
-   },
-   {
-    title: '收款金额(collected money)',
-    align:"center",
-    dataIndex: 'collectedMoney',
-    width:250
-   },
+   // {
+   //  title: '发票金额(invoice money)',
+   //  align:"center",
+   //  dataIndex: 'invoiceMoney',
+   //  width:250
+   // },
+   // {
+   //  title: '收款金额(collected money)',
+   //  align:"center",
+   //  dataIndex: 'collectedMoney',
+   //  width:250
+   // },
 ];
 
 //子表表格配置

+ 2 - 1
src/views/saleCode/salesOrder/SaleOrderFormList.vue

@@ -78,7 +78,8 @@
             <a-col :lg="8">
               <a-form-item name="maker">
                 <template #label><span title="厂家(maker)">厂家(maker)</span></template>
-                <JDictSelectTag v-model:value="queryParam.maker" placeholder="请选择" dictCode="factory" />
+               <!-- <JDictSelectTag v-model:value="queryParam.maker" placeholder="请选择" dictCode="factory" /> -->
+                <JInput placeholder="请输入厂家(maker)" v-model:value="queryParam.maker" allow-clear ></JInput>
               </a-form-item>
             </a-col>
             <a-col :lg="8">

+ 4 - 0
src/views/saleCode/salesOrder/components/AfterSlaeOrderFormForm.vue

@@ -327,6 +327,8 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           @value-change="changeValues"
         >
           <template #action="props" v-if="!(formData.id !== '' && formData.submit == '1')">
@@ -347,6 +349,8 @@
           :disabled="disabled"
           :rowNumber="true"
           :rowSelection="true"
+		  :maxHeight="540"
+		  :keyboardEdit="true"
         >
           <template #action="props">
             <a @click="viewAccessory(props)">查看配件信息(view accessory information)</a>

+ 5 - 1
src/views/saleCode/salesOrder/components/SlaeOrderFormForm.vue

@@ -340,6 +340,8 @@
           :rowNumber="true"
           :rowSelection="true"
           asyncRemove
+		  :maxHeight="540"
+		  :keyboardEdit="true"
           @value-change="changeValues"
         >
           <template #action="props" v-if="!(formData.id !== '' && formData.submit == '1')">
@@ -359,7 +361,9 @@
           :dataSource="SaleOrderFormShipFormShipTable.dataSource"
           :disabled="disabled"
           :rowNumber="true"
-          :rowSelection="true"
+          :rowSelection="true"  
+		  :maxHeight="540"
+		  :keyboardEdit="true"
         >
           <template #action="props">
             <a @click="viewAccessory(props)">查看配件信息(view accessory information)</a>