Ver código fonte

ehsd报价单 销售合同

lxf 1 ano atrás
pai
commit
b016221b70

+ 126 - 92
src/components/process/EHSD/PriceSheet.vue

@@ -3,8 +3,8 @@
     <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="submit">
       <template #seller>
         <div style="width: 100%">
-          <el-form-item prop="sellCorporationId">
-            <el-select v-model="formData.data.sellCorporationId" style="width: 100%" disabled>
+          <el-form-item prop="companyId">
+            <el-select v-model="formData.data.companyId" style="width: 100%" disabled>
               <el-option v-for="item in corporationList" :key="item.value" :label="item.label" :value="item.value" />
             </el-select>
           </el-form-item>
@@ -49,51 +49,51 @@
       <template #buyer>
         <div style="width: 100%">
           <div style="width: 100%">
-            <el-form-item prop="buyCorporationId">
-              <el-select v-model="formData.data.buyCorporationId" style="width: 100%" @change="changeCustomer">
+            <el-form-item prop="customerId">
+              <el-select v-model="formData.data.customerId" style="width: 100%" @change="changeCustomer">
                 <el-option v-for="item in customerList" :key="item.value" :label="item.label" :value="item.value" />
               </el-select>
             </el-form-item>
             <el-row style="margin-top: 20px; width: 100%">
               <el-col :span="6">
-                <el-form-item label="地址" prop="buyCountryId">
-                  <el-select v-model="formData.data.buyCountryId" placeholder="国家" @change="(val) => getCityData(val, '20', true)">
+                <el-form-item label="地址" prop="customerCountryId">
+                  <el-select v-model="formData.data.customerCountryId" placeholder="国家" @change="(val) => getCityData(val, '20', true)">
                     <el-option v-for="item in countryData" :label="item.chineseName" :value="item.id"> </el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="6">
-                <el-form-item label=" " prop="buyProvinceId">
-                  <el-select v-model="formData.data.buyProvinceId" placeholder="省/洲" @change="(val) => getCityData(val, '30', true)">
+                <el-form-item label=" " prop="customerState">
+                  <el-select v-model="formData.data.customerState" placeholder="省/洲" @change="(val) => getCityData(val, '30', true)">
                     <el-option v-for="item in provinceData" :label="item.name" :value="item.id"> </el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="6">
-                <el-form-item label=" " prop="buyCityId">
-                  <el-select v-model="formData.data.buyCityId" placeholder="城市">
+                <el-form-item label=" " prop="customerCityId">
+                  <el-select v-model="formData.data.customerCityId" placeholder="城市">
                     <el-option v-for="item in cityData" :label="item.name" :value="item.id"> </el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="6">
-                <el-form-item label=" " prop="buyPostalCode">
-                  <el-input v-model="formData.data.buyPostalCode" placeholder="请输入邮编" />
+                <el-form-item label=" " prop="customerZipCode">
+                  <el-input v-model="formData.data.customerZipCode" placeholder="请输入邮编" />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row style="margin-top: 20px; width: 100%">
               <el-col :span="24">
-                <el-form-item prop="buyAddress">
-                  <el-input v-model="formData.data.buyAddress" type="textarea"> </el-input>
+                <el-form-item prop="customerAddr">
+                  <el-input v-model="formData.data.customerAddr" type="textarea"> </el-input>
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row style="margin-top: 20px; width: 100%">
               <el-col :span="8">
-                <el-form-item label="联系人" prop="buyContactName">
+                <el-form-item label="联系人" prop="customerName">
                   <el-autocomplete
-                    v-model="formData.data.buyContactName"
+                    v-model="formData.data.customerName"
                     :fetch-suggestions="querySearchPerson"
                     clearable
                     class="inline-input w-50"
@@ -103,8 +103,8 @@
                 </el-form-item>
               </el-col>
               <el-col :span="16">
-                <el-form-item label=" " prop="buyContactNumber">
-                  <el-input v-model="formData.data.buyContactNumber" placeholder="请输入联系人电话" />
+                <el-form-item label=" " prop="customerTel">
+                  <el-input v-model="formData.data.customerTel" placeholder="请输入联系人电话" />
                 </el-form-item>
               </el-col>
             </el-row>
@@ -113,7 +113,8 @@
       </template>
       <template #commodity>
         <div style="width: 100%">
-          <el-button @click="openProduct = true">添加商品</el-button>
+          <el-button @click="openProduct = true">标准产品库</el-button>
+          <el-button @click="openProduct = true">客户产品库</el-button>
           <el-table :data="formData.data.quotationProductList" style="width: 100%; margin-top: 16px">
             <el-table-column label="商品图片" width="80">
               <template #default="{ row }">
@@ -142,14 +143,14 @@
                 </div>
               </template>
             </el-table-column>
-            <el-table-column prop="unit" label="单位" width="100" />
-            <el-table-column label="数量" width="160">
+            <!-- <el-table-column prop="unit" label="单位" width="100" /> -->
+            <el-table-column label="订购量" width="150">
               <template #default="{ row, $index }">
                 <div style="width: 100%">
                   <el-form-item :prop="'quotationProductList.' + $index + '.quantity'" :rules="rules.quantity" :inline-message="true">
                     <el-input-number
                       v-model="row.quantity"
-                      placeholder="请输入量"
+                      placeholder="请输入订购量"
                       style="width: 100%"
                       :precision="0"
                       :controls="false"
@@ -159,6 +160,15 @@
                 </div>
               </template>
             </el-table-column>
+            <el-table-column label="每箱数量" width="150">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item :prop="'quotationProductList.' + $index + '.packagQuantity'" :rules="rules.packagQuantity" :inline-message="true">
+                    <el-input-number v-model="row.packagQuantity" placeholder="请输入每箱数量" style="width: 100%" :precision="0" :controls="false" :min="0" />
+                  </el-form-item>
+                </div>
+              </template>
+            </el-table-column>
             <el-table-column label="单价" width="160">
               <template #default="{ row, $index }">
                 <div style="width: 100%">
@@ -171,11 +181,20 @@
                       :controls="false"
                       :min="0"
                       @change="calculationAmount()" />
+                    </el-form-item>
+                  </div>
+              </template>
+            </el-table-column>
+            <el-table-column prop="sumPrice" label="小计" width="140" />
+            <el-table-column label="大货样" width="150">
+              <template #default="{ row, $index }">
+                <div style="width: 100%">
+                  <el-form-item :prop="'quotationProductList.' + $index + '.sendSampleCount'" :rules="rules.sendSampleCount" :inline-message="true">
+                    <el-input-number v-model="row.sendSampleCount" placeholder="请输入大货样" style="width: 100%" :precision="0" :controls="false" :min="0" />
                   </el-form-item>
                 </div>
               </template>
             </el-table-column>
-            <el-table-column prop="amount" label="金额" width="140" />
             <el-table-column label="操作" width="80" fixed="right">
               <template #default="{ row, $index }">
                 <el-button type="primary" link @click="handleRemove($index)">删除</el-button>
@@ -234,15 +253,20 @@
         <div style="width: 100%">
           <el-row style="margin-top: 20px; width: 100%">
             <el-col :span="4">
-              <el-form-item label="币种" prop="currency">
-                <el-select v-model="formData.data.currency" placeholder="请选择币种" style="width: 100%">
+              <el-form-item label="币种" prop="currencyType">
+                <el-select v-model="formData.data.currencyType" placeholder="请选择币种" style="width: 100%">
                   <el-option v-for="item in accountCurrency" :key="item.value" :label="item.label" :value="item.value" />
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="6">
-              <el-form-item label="合同总金额" prop="amount">
-                <el-input v-model="formData.data.amount" placeholder="合同总金额" disabled />
+              <el-form-item label="合同总金额" prop="contractPrice">
+                <el-input v-model="formData.data.contractPrice" placeholder="合同总金额" disabled />
+              </el-form-item>
+            </el-col>
+            <el-col :span="4">
+              <el-form-item label="汇率" prop="taxRate">
+                <el-input-number v-model="formData.data.taxRate" placeholder="请输入汇率" style="width: 100%" :precision="2" :controls="false" :min="0" />
               </el-form-item>
             </el-col>
             <el-col :span="4">
@@ -253,16 +277,16 @@
           </el-row>
           <el-row style="margin-top: 20px; width: 100%">
             <el-col :span="7">
-              <el-form-item label="付款方式" prop="paymentMethod">
-                <el-select v-model="formData.data.paymentMethod" placeholder="请选择付款方式" style="width: 100%">
+              <el-form-item label="付款方式" prop="payWay">
+                <el-select v-model="formData.data.payWay" placeholder="请选择付款方式" style="width: 100%">
                   <el-option v-for="item in fundsPaymentMethod" :key="item.value" :label="item.label" :value="item.value" />
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="7">
-              <el-form-item label="预付比例 (%)" prop="advanceRatio">
+              <el-form-item label="预付比例 (%)" prop="prePayRatio">
                 <el-input-number
-                  v-model="formData.data.advanceRatio"
+                  v-model="formData.data.prePayRatio"
                   placeholder="请输入预付比例"
                   style="width: 100%"
                   :precision="2"
@@ -278,8 +302,8 @@
         <div style="width: 100%">
           <el-row style="margin-top: 20px; width: 100%">
             <el-col :span="7">
-              <el-form-item label="贸易方式" prop="tradeMethods">
-                <el-select v-model="formData.data.tradeMethods" placeholder="请选择贸易方式" style="width: 100%">
+              <el-form-item label="贸易方式" prop="tradeModeId">
+                <el-select v-model="formData.data.tradeModeId" placeholder="请选择贸易方式" style="width: 100%">
                   <el-option v-for="item in tradeMethods" :key="item.value" :label="item.label" :value="item.value" />
                 </el-select>
               </el-form-item>
@@ -287,29 +311,34 @@
           </el-row>
           <el-row style="margin-top: 20px; width: 100%">
             <el-col :span="7">
-              <el-form-item label="运输方式" prop="transportMethod">
-                <el-select v-model="formData.data.transportMethod" placeholder="请选择运输方式" style="width: 100%">
+              <el-form-item label="运输方式" prop="shippingType">
+                <el-select v-model="formData.data.shippingType" placeholder="请选择运输方式" style="width: 100%">
                   <el-option v-for="item in shippingMethod" :key="item.value" :label="item.label" :value="item.value" />
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="7">
-              <el-form-item label="运输说明" prop="transportRemark">
-                <el-input v-model="formData.data.transportRemark" placeholder="请输入运输说明" />
+              <el-form-item label="运输说明" prop="wharf">
+                <el-input v-model="formData.data.wharf" placeholder="请输入运输说明" />
               </el-form-item>
             </el-col>
           </el-row>
           <el-row style="margin-top: 20px; width: 100%">
             <el-col :span="14">
-              <el-form-item label="付款条件" prop="remark">
-                <el-input v-model="formData.data.remark" :rows="2" type="textarea" placeholder="请输入付款条件" />
+              <el-form-item label="付款条件" prop="paymentRemark">
+                <el-input v-model="formData.data.paymentRemark" :rows="2" type="textarea" placeholder="请输入付款条件" />
               </el-form-item>
             </el-col>
           </el-row>
           <el-row style="margin-top: 20px; width: 100%">
             <el-col :span="7">
-              <el-form-item label="质保期 (天)" prop="warranty">
-                <el-input-number v-model="formData.data.warranty" placeholder="请输入质保期" style="width: 100%" :precision="0" :controls="false" :min="0" />
+              <el-form-item label="交货时间 (天)" prop="deliveryDay">
+                <el-input-number v-model="formData.data.deliveryDay" placeholder="请输入交货时间" style="width: 100%" :precision="0" :controls="false" :min="0" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="7">
+              <el-form-item label="质保期 (天)" prop="warrantyDay">
+                <el-input-number v-model="formData.data.warrantyDay" placeholder="请输入质保期" style="width: 100%" :precision="0" :controls="false" :min="0" />
               </el-form-item>
             </el-col>
           </el-row>
@@ -344,7 +373,7 @@ const customerUserList = ref([]);
 const openProduct = ref(false);
 const formData = reactive({
   data: {
-    amount: undefined,
+    contractPrice: undefined,
     quotationProductList: [],
     quotationPayList: [],
   },
@@ -406,26 +435,29 @@ const formConfig = computed(() => {
 });
 const rules = ref({
   contractTemplateId: [{ required: true, message: "请选择合同模板", trigger: "change" }],
-  buyCorporationId: [{ required: true, message: "请选择公司", trigger: "change" }],
-  buyCountryId: [{ required: true, message: "请选择国家", trigger: "change" }],
-  buyProvinceId: [{ required: true, message: "请选择省/州", trigger: "change" }],
-  buyCityId: [{ required: true, message: "请选择城市", trigger: "change" }],
-  // buyAddress: [{ required: true, message: "请输入详细地址", trigger: "blur" }],
-  buyContactName: [{ required: true, message: "请输入联系人", trigger: ["change", "blur"] }],
-  buyContactNumber: [{ required: true, message: "请输入联系电话", trigger: "blur" }],
+  customerId: [{ required: true, message: "请选择公司", trigger: "change" }],
+  customerCountryId: [{ required: true, message: "请选择国家", trigger: "change" }],
+  customerState: [{ required: true, message: "请选择省/州", trigger: "change" }],
+  customerCityId: [{ required: true, message: "请选择城市", trigger: "change" }],
+  // customerAddr: [{ required: true, message: "请输入详细地址", trigger: "blur" }],
+  customerName: [{ required: true, message: "请输入联系人", trigger: ["change", "blur"] }],
+  customerTel: [{ required: true, message: "请输入联系电话", trigger: "blur" }],
   productName: [{ required: true, message: "请输入商品名称", trigger: "blur" }],
   productModel: [{ required: true, message: "请输入规格型号", trigger: "blur" }],
-  quantity: [{ required: true, message: "请输入数量", trigger: "blur" }],
+  quantity: [{ required: true, message: "请输入订购量", trigger: "blur" }],
+  packagQuantity: [{ required: true, message: "请输入每箱数量", trigger: "blur" }],
+  sendSampleCount: [{ required: true, message: "请输入大货样", trigger: "blur" }],
   amount: [{ required: true, message: "请输入金额", trigger: "blur" }],
   payName: [{ required: true, message: "请输入收费项目", trigger: ["change", "blur"] }],
-  currency: [{ required: true, message: "请选择币种", trigger: "change" }],
+  currencyType: [{ required: true, message: "请选择币种", trigger: "change" }],
+  taxRate: [{ required: true, message: "请输入汇率", trigger: "blur" }],
   effective: [{ required: true, message: "请输入报价有效期", trigger: "blur" }],
-  paymentMethod: [{ required: true, message: "请选择付款方式", trigger: "change" }],
-  advanceRatio: [{ required: true, message: "请输入预付比例", trigger: "blur" }],
-  tradeMethods: [{ required: true, message: "请选择贸易方式", trigger: "change" }],
-  transportMethod: [{ required: true, message: "请选择运输方式", trigger: "change" }],
-  transportRemark: [{ required: true, message: "请输入运输说明", trigger: "blur" }],
-  remark: [{ required: true, message: "请输入付款条件", trigger: "blur" }],
+  payWay: [{ required: true, message: "请选择付款方式", trigger: "change" }],
+  prePayRatio: [{ required: true, message: "请输入预付比例", trigger: "blur" }],
+  tradeModeId: [{ required: true, message: "请选择贸易方式", trigger: "change" }],
+  shippingType: [{ required: true, message: "请选择运输方式", trigger: "change" }],
+  wharf: [{ required: true, message: "请输入运输说明", trigger: "blur" }],
+  paymentRemark: [{ required: true, message: "请输入付款条件", trigger: "blur" }],
 });
 const getDict = () => {
   proxy
@@ -561,14 +593,14 @@ const changeTemplate = (val) => {
         } else {
           formData.data.sellCityId = "";
         }
-        formData.data.sellCorporationId = res.corporationId;
+        formData.data.companyId = res.corporationId;
         formData.data.sellContactName = res.contactName;
         formData.data.sellContactNumber = res.contactNumber;
         formData.data.sellAddress = res.address;
       },
       (err) => {
         console.log(err);
-        formData.data.sellCorporationId = "";
+        formData.data.companyId = "";
         formData.data.sellContactName = "";
         formData.data.sellContactNumber = "";
         formData.data.sellCountryId = "";
@@ -578,7 +610,7 @@ const changeTemplate = (val) => {
       }
     );
   } else {
-    formData.data.sellCorporationId = "";
+    formData.data.companyId = "";
     formData.data.sellContactName = "";
     formData.data.sellContactNumber = "";
     formData.data.sellCountryId = "";
@@ -592,13 +624,13 @@ const getCityData = (id, type, isChange) => {
     if (type === "20") {
       provinceData.value = res;
       if (isChange) {
-        formData.data.buyProvinceId = "";
-        formData.data.buyCityId = "";
+        formData.data.customerState = "";
+        formData.data.customerCityId = "";
       }
     } else if (type === "30") {
       cityData.value = res;
       if (isChange) {
-        formData.data.buyCityId = "";
+        formData.data.customerCityId = "";
       }
     } else {
       countryData.value = res;
@@ -607,14 +639,14 @@ const getCityData = (id, type, isChange) => {
 };
 getCityData("0");
 const changeCustomer = (val) => {
-  formData.data.buyContactName = "";
-  formData.data.buyContactNumber = "";
+  formData.data.customerName = "";
+  formData.data.customerTel = "";
   if (val) {
     proxy.post("/customer/detail", { id: val }).then(
       (res) => {
         if (res.customerUserList && res.customerUserList.length > 0) {
-          formData.data.buyContactName = res.customerUserList[0].name;
-          formData.data.buyContactNumber = res.customerUserList[0].phone;
+          formData.data.customerName = res.customerUserList[0].name;
+          formData.data.customerTel = res.customerUserList[0].phone;
           customerUserList.value = res.customerUserList.map((item) => {
             return {
               ...item,
@@ -622,29 +654,29 @@ const changeCustomer = (val) => {
             };
           });
         }
-        formData.data.buyCountryId = res.countryId;
-        formData.data.buyProvinceId = res.provinceId;
-        formData.data.buyCityId = res.cityId;
-        formData.data.buyPostalCode = res.zipCode;
-        formData.data.buyAddress = res.address;
-        getCityData(formData.data.buyCountryId, "20");
-        getCityData(formData.data.buyProvinceId, "30");
+        formData.data.customerCountryId = res.countryId;
+        formData.data.customerState = res.provinceId;
+        formData.data.customerCityId = res.cityId;
+        formData.data.customerZipCode = res.zipCode;
+        formData.data.customerAddr = res.address;
+        getCityData(formData.data.customerCountryId, "20");
+        getCityData(formData.data.customerState, "30");
       },
       (err) => {
         console.log(err);
-        formData.data.buyCountryId = "";
-        formData.data.buyProvinceId = "";
-        formData.data.buyCityId = "";
-        formData.data.buyPostalCode = "";
-        formData.data.buyAddress = "";
+        formData.data.customerCountryId = "";
+        formData.data.customerState = "";
+        formData.data.customerCityId = "";
+        formData.data.customerZipCode = "";
+        formData.data.customerAddr = "";
       }
     );
   } else {
-    formData.data.buyCountryId = "";
-    formData.data.buyProvinceId = "";
-    formData.data.buyCityId = "";
-    formData.data.buyPostalCode = "";
-    formData.data.buyAddress = "";
+    formData.data.customerCountryId = "";
+    formData.data.customerState = "";
+    formData.data.customerCityId = "";
+    formData.data.customerZipCode = "";
+    formData.data.customerAddr = "";
   }
 };
 const createFilter = (queryString) => {
@@ -657,7 +689,7 @@ const querySearchPerson = (queryString, callback) => {
   callback(results);
 };
 const handlePerson = (item) => {
-  formData.data.buyContactNumber = item.phone;
+  formData.data.customerTel = item.phone;
 };
 const pushGoods = (goods) => {
   if (goods && goods.length > 0) {
@@ -675,8 +707,10 @@ const pushGoods = (goods) => {
           productModel: item.spec,
           unit: item.unit,
           quantity: undefined,
+          packagQuantity: undefined,
+          sendSampleCount: undefined,
           price: undefined,
-          amount: "",
+          sumPrice: "",
           remark: item.remark,
         };
       })
@@ -704,7 +738,7 @@ const calculationAmount = () => {
         if (formData.data.quotationProductList[i].quantity && formData.data.quotationProductList[i].price) {
           money = parseFloat(Number(formData.data.quotationProductList[i].quantity) * Number(formData.data.quotationProductList[i].price)).toFixed(2);
         }
-        formData.data.quotationProductList[i].amount = money;
+        formData.data.quotationProductList[i].sumPrice = money;
       }
     }
     nextTick(() => {
@@ -716,8 +750,8 @@ const totalAmount = () => {
   let money = 0;
   if (formData.data.quotationProductList && formData.data.quotationProductList.length > 0) {
     for (let i = 0; i < formData.data.quotationProductList.length; i++) {
-      if (formData.data.quotationProductList[i].amount) {
-        money = parseFloat(Number(money) + Number(formData.data.quotationProductList[i].amount)).toFixed(2);
+      if (formData.data.quotationProductList[i].sumPrice) {
+        money = parseFloat(Number(money) + Number(formData.data.quotationProductList[i].sumPrice)).toFixed(2);
       }
     }
   }
@@ -728,7 +762,7 @@ const totalAmount = () => {
       }
     }
   }
-  formData.data.amount = money;
+  formData.data.contractPrice = money;
 };
 const clickAdd = () => {
   if (formData.data.quotationPayList && formData.data.quotationPayList.length > 0) {
@@ -783,8 +817,8 @@ onMounted(() => {
       }
       delete formData.data.id;
       delete formData.data.code;
-      getCityData(formData.data.buyCountryId, "20");
-      getCityData(formData.data.buyProvinceId, "30");
+      getCityData(formData.data.customerCountryId, "20");
+      getCityData(formData.data.customerState, "30");
       if (formData.data.quotationProductList && formData.data.quotationProductList.length > 0) {
         formData.data.quotationProductList = formData.data.quotationProductList.map((item) => {
           delete item.id;

+ 36 - 0
src/components/process/EHSD/index.vue

@@ -0,0 +1,36 @@
+<template>
+    <div>
+        <!-- companyId  买方公司 -->
+        <!-- customerId  卖方公司 -->
+        <!-- customerCountryId  卖方国家 -->
+        <!-- customerState  卖方省/州 -->
+        <!-- customerCityId  卖方城市 -->
+        <!-- customerZipCode  卖方邮编 -->
+        <!-- customerAddr  卖方详细地址 -->
+        <!-- customerName  卖方联系人 -->
+        <!-- customerTel  卖方联系电话 -->
+
+
+        <!-- packagQuantity  每箱数量 -->
+        <!-- sumPrice  小计 -->
+        <!-- sendSampleCount  大货样 -->
+
+
+        <!-- contractPrice  合同金额 -->
+        <!-- tradeModeId  贸易方式 -->
+        <!-- currencyType  货币类型 -->
+        <!-- payWay  付款方式 -->
+        <!-- shippingType  运输方式 -->
+        <!-- wharf  运输说明/起运港 -->
+        <!-- taxRate  汇率 -->
+        <!-- prePayRatio  预付比例 -->
+        <!-- deliveryDay  交货时间 -->
+        <!-- warrantyDay  质保期 -->
+        <!-- paymentRemark  付款条件 -->
+        
+        <!-- customerState  卖方国家 -->
+        <!-- customerState  卖方国家 -->
+        <!-- customerState  卖方国家 -->
+        <!-- customerState  卖方国家 -->
+    </div>
+</template>