Browse Source

销售管理-增加主子表必填校验.子表增行顺序修改

jingbb 3 months ago
parent
commit
0c8b11a52e

+ 6 - 0
src/views/saleCode/advancePayment/components/advancePaymentForm.vue

@@ -139,6 +139,12 @@
 
       //表单验证
       const validatorRules = reactive({
+        projectName: [
+          { required: true, message: '请选择项目(select project)' }
+        ],
+        advanceAmount: [
+          { required: true, message: '请输入预售金额(input advanceAmount)' }
+        ],
       });
       const {resetFields, validate, validateInfos} = useForm(formData, validatorRules, {immediate: false});
       const dbData = {};

+ 28 - 13
src/views/saleCode/deliveryNotice/components/deliveryNoticeForm.vue

@@ -302,6 +302,9 @@
 
       //表单验证
       const validatorRules = reactive({
+        projectName: [
+          { required: true, message: '请选择项目(select project)' }
+        ],
       });
       const {resetFields, validate, validateInfos} = useForm(formData, validatorRules, {immediate: false});
       const dbData = {};
@@ -388,18 +391,25 @@
       }
       //保存
       async function submitForm() {
-        if(formData.sourceCode==''){
-          message.warning('请选择销售订单单')
+        var xTable = deliveryDetailFormProductTableRef.value!.getXTable()
+        if(xTable.data.length==0){
+          message.warning('请添加产品明细')
         }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');
-        }        
+          deliveryDetailFormProductTableRef.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) {
@@ -420,7 +430,8 @@
       }
       //产品明细-删除行
       async function handleDelete1(prop) {
-        var newArray = [...deliveryDetailFormProductTable.dataSource]
+        var xTable = deliveryDetailFormProductTableRef.value!.getXTable()
+        var newArray = [...xTable.data]
         newArray.splice(prop.rowIndex, 1)
         deliveryDetailFormProductTable.dataSource = newArray  
         if( deliveryDetailFormProductTable.dataSource.length!==0){
@@ -629,5 +640,9 @@
   /deep/.ant-form-item{
     margin-bottom: 8px !important;
   }
-      
+  
+  /deep/.vxe-cell--valid-error-msg{
+    color: white !important;
+    background-color: white !important;
+  }
 </style>

+ 2 - 0
src/views/saleCode/deliveryNotice/delivertNoticeForm.data.ts

@@ -266,6 +266,7 @@ export const deliveryNoticeProductColumns: JVxeColumn[] = [
       title: '数量(quantity)',
       key: 'quantity',
       type: JVxeTypes.inputNumber,
+      validateRules: [{ required: true, message: '' }],
       placeholder: '请输入${title}',
       width:"200px",
       defaultValue:'',
@@ -274,6 +275,7 @@ export const deliveryNoticeProductColumns: JVxeColumn[] = [
       title: '单价(Price)',
       key: 'taxPrice',
       type: JVxeTypes.inputNumber,
+      validateRules: [{ required: true, message: '' }],
       placeholder: '请输入${title}',
       width:"200px",
       defaultValue:'',

+ 44 - 19
src/views/saleCode/quotation/components/quotationFormForm.vue

@@ -303,6 +303,15 @@
 
       //表单验证
       const validatorRules = reactive({
+        quotationProjectName: [
+          { required: true, message: '请选择报价项目(select project)' }
+        ],
+        quotationCustomer:[
+          { required: true, message: '请选择报价客户(select customer)' }
+        ],
+        currency:[
+          { required: true, message: '请选择币种(select currency)' }
+        ],
       });
       const {resetFields, validate, validateInfos} = useForm(formData, validatorRules, {immediate: false});
       const dbData = {};
@@ -406,19 +415,26 @@
       }
       //保存
       async function submitForm() {
-        if(formData.sourceCode==''){
-          message.warning('请选择供应商报价单')
+        var xTable = saleQuotationFormProductTableRef.value!.getXTable()
+        if(xTable.data.length==0){
+          message.warning('请添加产品明细')
         }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
-          const isRevise = values.status=='1' ? true : false
-          await saveOrUpdate(values, isUpdate,isRevise);
-          //关闭弹窗
-          emit('success');
-        }        
+          saleQuotationFormProductTableRef.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
+              const isRevise = values.status=='1' ? true : false
+              await saveOrUpdate(values, isUpdate,isRevise);
+              //关闭弹窗
+              emit('success');
+            }
+          });
+        }       
       }
       
       function setFieldsValue(values) {
@@ -439,13 +455,15 @@
       }
       //传明细-删除行
       async function handleDelete(prop) {
-        var newArray = [...saleQuotationFormShipTable.dataSource]
+        var xTable = saleQuotationFormShipTableRef.value!.getXTable()
+        var newArray = [...xTable.data]
         newArray.splice(prop.rowIndex, 1)
         saleQuotationFormShipTable.dataSource = newArray 
       }
       //产品明细-删除行
       async function handleDelete1(prop) {
-        var newArray = [...saleQuotationFormProductTable.dataSource]
+        var xTable = saleQuotationFormProductTableRef.value!.getXTable()
+        var newArray = [...xTable.data]
         newArray.splice(prop.rowIndex, 1)
         saleQuotationFormProductTable.dataSource = newArray  
         if( saleQuotationFormProductTable.dataSource.length!==0){
@@ -474,7 +492,8 @@
           item.shipowner = item.relateCustomer
           item.shipId = item.id
         })
-        var arr = data.concat(saleQuotationFormShipTable.dataSource)
+        var xTable = saleQuotationFormShipTableRef.value!.getXTable()
+        var arr = xTable.data.concat(data)
         saleQuotationFormShipTable.dataSource=arr             
       }
       //增行-产品明细
@@ -490,7 +509,8 @@
           item.grossMargin = obj.grossMargin
           item.discount= formData.custumerDiscount
         }
-        var arrProduct = data.concat(saleQuotationFormProductTable.dataSource)
+        var xTable = saleQuotationFormProductTableRef.value!.getXTable()
+        var arrProduct = xTable.data.concat(data)
         saleQuotationFormProductTable.dataSource=arrProduct    
       }
       //选择项目
@@ -591,7 +611,7 @@
       //修改主表交期
       function changeDelivertTime(){
          if(saleQuotationFormProductTable.dataSource.length>0){
-            const xTable = saleQuotationFormProductTableRef.value!.getXTable();
+            var xTable = saleQuotationFormProductTableRef.value!.getXTable();
             var newArr = [...xTable.data]
             newArr.map(item=>{
               item.deliveryDayChild = formData.deliveryDayHead
@@ -654,7 +674,8 @@
           item.exchangeRateGys = item.exchangeRateUsd
           item.taxPriceGys = item.taxPrice
         }
-        var arrProduct = data.concat(saleQuotationFormProductTable.dataSource)
+        var xTable = saleQuotationFormProductTableRef.value!.getXTable()
+        var arrProduct = xTable.data.concat(data)
         arrProduct.map(item=>{
           customerOption.value.map(event=>{
             if(event.value==formData.quotationCustomer){
@@ -746,7 +767,7 @@
       }
       function changeDiscountOrExchangeRate(){
         if(saleQuotationFormProductTable.dataSource.length>0){
-          const xTable = saleQuotationFormProductTableRef.value!.getXTable();
+          var xTable = saleQuotationFormProductTableRef.value!.getXTable();
           var newArr = [...xTable.data]
           formData.exchangeRate = (formData.exchangeRate==''||formData.exchangeRate===null||!formData.exchangeRate)?1:formData.exchangeRate
           newArr.map(item=>{
@@ -842,5 +863,9 @@
   /deep/.ant-form-item{
     margin-bottom: 8px !important;
   }
+  /deep/.vxe-cell--valid-error-msg{
+    color: white !important;
+    background-color: white !important;
+  }
       
 </style>

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

@@ -243,6 +243,7 @@ export const saleQuotationFormProductColumns: JVxeColumn[] = [
       title: '数量(quantity)',
       key: 'quantity',
       type: JVxeTypes.inputNumber,
+      validateRules: [{ required: true, message: '' }],
       placeholder: '请输入${title}',
       width:"200px",
       defaultValue:'',
@@ -299,6 +300,7 @@ export const saleQuotationFormProductColumns: JVxeColumn[] = [
       title: '销售单价(sale price)',
       key: 'salePrice',
       type: JVxeTypes.inputNumber,
+      validateRules: [{ required: true, message: '' }],
       placeholder: '请输入${title}',
       width:"200px",
       defaultValue:'',

+ 6 - 0
src/views/saleCode/receiptOrder/components/receiptOrderForm.vue

@@ -140,6 +140,12 @@
 
       //表单验证
       const validatorRules = reactive({
+        projectName: [
+          { required: true, message: '请选择项目(select project)' }
+        ],
+        amountCollected:[
+        { required: true, message: '请选择收款金额(input amountCollected)' }
+        ],
       });
       const {resetFields, validate, validateInfos} = useForm(formData, validatorRules, {immediate: false});
       const dbData = {};

+ 3 - 0
src/views/saleCode/saleContract/SaleContract.data.ts

@@ -339,6 +339,9 @@ export const formSchema: FormSchema[] = [
     field: 'currency',
     component: 'JDictSelectTag',
     dynamicDisabled: true,
+    dynamicRules: ({ model, schema }) => {
+      return [{ required: true, message: '请输入币种!' }];
+    },
     componentProps: {
       dictCode: 'currency',
     },

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

@@ -266,6 +266,7 @@ export const saleInquiryFormProductColumns: JVxeColumn[] = [
       title: '数量(quantity)',
       key: 'quantity',
       type: JVxeTypes.inputNumber,
+      validateRules: [{ required: true}],
       placeholder: '请输入${title}',
       width:"200px",
       defaultValue:'',

+ 39 - 13
src/views/saleCode/saleInquiryForm/components/SaleInquiryFormForm.vue

@@ -174,7 +174,7 @@
   import { JDictSelectTag} 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 } from 'ant-design-vue';
+  import { Form,message } from 'ant-design-vue';
   import { useUserStore } from '/@/store/modules/user';
   import moment from 'moment';
   const userStore = useUserStore();
@@ -256,6 +256,12 @@
 
       //表单验证
       const validatorRules = reactive({
+        projectName: [
+          { required: true, message: '请选择询价项目(select project)' }
+        ],
+        inquiryCustomer: [
+          { required: true, message: '请选择询价客户(select customer)' }
+        ],
       });
       const {resetFields, validate, validateInfos} = useForm(formData, validatorRules, {immediate: false});
       const dbData = {};
@@ -339,14 +345,26 @@
       }
 
       async function submitForm() {
-        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');
+        const xTable = saleInquiryFormProductTableRef.value!.getXTable()
+        if(xTable.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) {
@@ -366,12 +384,14 @@
         formData[key] = value;
       }
       async function handleDelete(prop) {
-        var newArray = [...saleInquiryFormShipTable.dataSource]
+        var xTable = saleInquiryFormShipTableRef.value!.getXTable()
+        var newArray = [...xTable.data]
         newArray.splice(prop.rowIndex, 1)
         saleInquiryFormShipTable.dataSource = newArray 
       }
       async function handleDelete1(prop) {
-        var newArray = [...saleInquiryFormProductTable.dataSource]
+        var xTable = saleInquiryFormProductTableRef.value!.getXTable()
+        var newArray = [...xTable.data]
         newArray.splice(prop.rowIndex, 1)
         saleInquiryFormProductTable.dataSource = newArray  
       }
@@ -380,7 +400,8 @@
       }
       function addShip(data){
         data.map(item=>item.shipowner = item.relateCustomer)
-        var arr = data.concat(saleInquiryFormShipTable.dataSource)
+        var xTable = saleInquiryFormShipTableRef.value!.getXTable()
+        var arr = xTable.data.concat(data)
         saleInquiryFormShipTable.dataSource=arr        
         
       }
@@ -392,7 +413,8 @@
           item.productId = item.id
           item.qualityGrade = formData.qualityGradeHead!==''?formData.qualityGradeHead:''
         })
-        var arrProduct = saleInquiryFormProductTable.dataSource.concat(data)
+        var xTable = saleInquiryFormProductTableRef.value!.getXTable()
+        var arrProduct = xTable.data.concat(data)
         saleInquiryFormProductTable.dataSource=arrProduct      
       }
       function addProject(data) {
@@ -536,5 +558,9 @@
   /deep/.ant-form-item{
     margin-bottom: 8px !important;
   }
+  /deep/.vxe-cell--valid-error-msg{
+    color: white !important;
+    background-color: white !important;
+  }
       
 </style>

+ 24 - 11
src/views/saleCode/salesInvoice/components/saleInvoiceForm.vue

@@ -281,6 +281,9 @@
 
       //表单验证
       const validatorRules = reactive({
+        projectName: [
+          { required: true, message: '请选择项目(select project)' }
+        ],
       });
       const {resetFields, validate, validateInfos} = useForm(formData, validatorRules, {immediate: false});
       const dbData = {};
@@ -361,17 +364,25 @@
       }
       //保存
       async function submitForm() {
-        const mainData = await getFormData();
-        const subData = await getSubFormAndTableData();
-        if(!subData.saleInvoiceProductList||subData.saleInvoiceProductList.lenght==0){
+        var xTable = saleInvoiceDetailsTableRef.value!.getXTable()
+        if(xTable.data.length==0){
           message.warning('请添加发票明细')
         }else{
-          const values = Object.assign({}, dbData, mainData, subData);
-          console.log('表单提交数据', values)
-          const isUpdate = values.id ? true : false
-          await saveOrUpdate(values, isUpdate);
-          //关闭弹窗
-          emit('success');
+          saleInvoiceDetailsTableRef.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');
+            }
+          });
+          
         }        
       }
       
@@ -393,7 +404,8 @@
       }
        //产品明细-删除行
       async function handleDelete1(prop) {
-        var newArray = [...saleInvoiceDetailsTable.dataSource]
+        var xTable = saleInvoiceDetailsTableRef.value!.getXTable()
+        var newArray = [...xTable.data]
         newArray.splice(prop.rowIndex, 1)
         saleInvoiceDetailsTable.dataSource = newArray  
         if( saleInvoiceDetailsTable.dataSource.length!==0){
@@ -465,7 +477,8 @@
           item.taxAmount =item.taxMoney*item.taxRate/100
         })
         notAllowEdit.value=true
-        var arrSonFormDelivery = data.concat(saleInvoiceDetailsTable.dataSource)
+        var xTable = saleInvoiceDetailsTableRef.value!.getXTable()
+        var arrSonFormDelivery = xTable.data.concat(data)
         saleInvoiceDetailsTable.dataSource=arrSonFormDelivery     
         formData.project = data[0].project
         formData.projectName = data[0].projectName

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

@@ -164,6 +164,7 @@ export const saleInvoiceDetailColumns: JVxeColumn[] = [
       title: '数量(quantity)',
       key: 'quantity',
       type: JVxeTypes.inputNumber,
+      validateRules: [{ required: true, message: '' }],
       placeholder: '请输入${title}',
       width:"200px",
       defaultValue:'',
@@ -172,6 +173,7 @@ export const saleInvoiceDetailColumns: JVxeColumn[] = [
       title: '单价(price)',
       key: 'taxPrice',
       type: JVxeTypes.inputNumber,
+      validateRules: [{ required: true, message: '' }],
       placeholder: '请输入${title}',
       defaultValue:'',  
       width:"200px",

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

@@ -350,6 +350,12 @@
 
       //表单验证
       const validatorRules = reactive({
+        projectName: [
+          { required: true, message: '请选择项目(select project)' }
+        ],
+        currency: [
+          { required: true, message: '请选择币种(select currency)' }
+        ],
       });
       const {resetFields, validate, validateInfos} = useForm(formData, validatorRules, {immediate: false});
       const dbData = {};
@@ -530,7 +536,8 @@
           item.deliveryTime = formData.deliveryTime
           item.productId = item.id
         })
-        var arrProduct = data.concat(SaleOrderFormShipFormProductTable.dataSource)
+        var xTable = SaleOrderFormShipFormProductTableRef.value!.getXTable()
+        var arrProduct = xTable.data.concat(data)
         SaleOrderFormShipFormProductTable.dataSource=arrProduct  
       }
       async function addQuotation(data){
@@ -552,7 +559,8 @@
           item.deliveryTime=moment(formData.billDate).add(Number(item.deliveryDayChild), 'days').format('YYYY-MM-DD')
           allDiscountPrice=allDiscountPrice+Number(item.discountedAmount)
         })
-        var arrProduct = data.concat(SaleOrderFormShipFormProductTable.dataSource)
+        var xTable = SaleOrderFormShipFormProductTableRef.value!.getXTable()
+        var arrProduct = xTable.data.concat(data)
         notAllowEdit.value=true
         SaleOrderFormShipFormProductTable.dataSource=arrProduct  
         formData.sourceCode =data[0].billCode
@@ -605,7 +613,8 @@
             item.discountedAmount = (item.discountedAmount).toFixed(2)
             allDiscountPrice=allDiscountPrice+Number(item.discountedAmount)
           })
-          var arrProduct = data.concat(SaleOrderFormShipFormProductTable.dataSource)
+          var xTable = SaleOrderFormShipFormProductTableRef.value!.getXTable()
+          var arrProduct = xTable.data.concat(data)
           notAllowEdit.value=true
           SaleOrderFormShipFormProductTable.dataSource=arrProduct  
           formData.sourceCode2 =data[0].billCode
@@ -649,7 +658,8 @@
       }
       function changeMainDeliveryTime(prop){
         if(SaleOrderFormShipFormProductTable.dataSource.length>0){
-            var newArr = [...SaleOrderFormShipFormProductTable.dataSource]
+            var xTable = SaleOrderFormShipFormProductTableRef.value!.getXTable()
+            var newArr = [...xTable.data]
             newArr.map(item=>{
               item.deliveryTime = prop
             })
@@ -662,7 +672,8 @@
       }
       //产品明细-删除行
       function handleDelete(prop) {
-        var newArray = [...SaleOrderFormShipFormProductTable.dataSource]
+        var xTable = SaleOrderFormShipFormProductTableRef.value!.getXTable()
+        var newArray = [...xTable.data]
         newArray.splice(prop.rowIndex, 1)
         SaleOrderFormShipFormProductTable.dataSource = newArray  
         isSelect()