cz 11 сар өмнө
parent
commit
251c00317c

+ 135 - 26
src/components/process/SF/CostControl.vue

@@ -113,12 +113,14 @@
                 </el-form-item>
               </template>
             </el-table-column>
-            <el-table-column prop="balancePrepaidTax" label="结存预付款(含税)" width="140" v-if="isShowAtt('balancePrepaidTax','detailObj')">
+            <el-table-column label="税点算法" width="130" v-if="isShowAtt('taxMethod','detailObj')">
               <template #default="{ row, $index }">
-                <el-form-item :prop="'costControlDetailList.' + $index + '.balancePrepaidTax'" :rules="rules.balancePrepaidTax" :inline-message="true"
+                <el-form-item :prop="'costControlDetailList.' + $index + '.taxMethod'" :rules="rules.taxMethod" :inline-message="true"
                               class="margin-b-0">
-                  <el-input-number onmousewheel="return false;" v-model="row.balancePrepaidTax" placeholder="请输入" style="width: 100%" :precision="2"
-                                   :controls="false" :min="0" disabled />
+                  <el-select v-model="row.taxMethod" placeholder="请选择" style="width: 100%" filterable @change="()=>changeRowMoney($index)"
+                             :disabled="isDisabled">
+                    <el-option v-for="item in taxPointsData" :key="item.value" :label="item.label" :value="item.value" />
+                  </el-select>
                 </el-form-item>
               </template>
             </el-table-column>
@@ -131,13 +133,12 @@
                 </el-form-item>
               </template>
             </el-table-column>
-            <el-table-column prop="currentPrepaidTax" label="本期预付款(含税)" width="140" v-if="isShowAtt('currentPrepaidTax','detailObj')">
+            <el-table-column prop="balancePrepaidTax" label="结存预付款(含税)" width="140" v-if="isShowAtt('balancePrepaidTax','detailObj')">
               <template #default="{ row, $index }">
-                <el-form-item :prop="'costControlDetailList.' + $index + '.currentPrepaidTax'" :rules="rules.currentPrepaidTax" :inline-message="true"
+                <el-form-item :prop="'costControlDetailList.' + $index + '.balancePrepaidTax'" :rules="rules.balancePrepaidTax" :inline-message="true"
                               class="margin-b-0">
-                  <el-input-number onmousewheel="return false;" v-model="row.currentPrepaidTax" placeholder="请输入" style="width: 100%" :precision="2"
-                                   :controls="false" :min="0" @change="(val)=>handleChangeMoney(val,$index,'currentPrepaidTax')"
-                                   :disabled="isDisabled" />
+                  <el-input-number onmousewheel="return false;" v-model="row.balancePrepaidTax" placeholder="请输入" style="width: 100%" :precision="2"
+                                   :controls="false" :min="0" disabled />
                 </el-form-item>
               </template>
             </el-table-column>
@@ -151,6 +152,16 @@
                 </el-form-item>
               </template>
             </el-table-column>
+            <el-table-column prop="currentPrepaidTax" label="本期预付款(含税)" width="140" v-if="isShowAtt('currentPrepaidTax','detailObj')">
+              <template #default="{ row, $index }">
+                <el-form-item :prop="'costControlDetailList.' + $index + '.currentPrepaidTax'" :rules="rules.currentPrepaidTax" :inline-message="true"
+                              class="margin-b-0">
+                  <el-input-number onmousewheel="return false;" v-model="row.currentPrepaidTax" placeholder="请输入" style="width: 100%" :precision="2"
+                                   :controls="false" :min="0" @change="(val)=>handleChangeMoney(val,$index,'currentPrepaidTax')"
+                                   :disabled="isDisabled" />
+                </el-form-item>
+              </template>
+            </el-table-column>
             <el-table-column prop="accountPeriod" label="账期" width="150" v-if="isShowAtt('accountPeriod','detailObj')">
               <template #default="{ row, $index }">
                 <el-form-item :prop="'costControlDetailList.' + $index + '.accountPeriod'" :rules="rules.accountPeriod" :inline-message="true"
@@ -200,26 +211,27 @@
                 </el-form-item>
               </template>
             </el-table-column>
-            <el-table-column prop="deductionPrepaidTax" label="抵扣预付款(含税)" width="140" v-if="isShowAtt('deductionPrepaidTax','detailObj')">
-              <template #default="{ row, $index }">
-                <el-form-item :prop="'costControlDetailList.' + $index + '.deductionPrepaidTax'" :rules="rules.deductionPrepaidTax"
-                              :inline-message="true" class="margin-b-0">
-                  <el-input-number onmousewheel="return false;" v-model="row.deductionPrepaidTax" placeholder="请输入" style="width: 100%" :precision="2"
-                                   :controls="false" :min="0" @change="(val)=>handleChangeMoney(val,$index,'deductionPrepaidTax')"
-                                   :disabled="isDisabled" />
-                </el-form-item>
-              </template>
-            </el-table-column>
             <el-table-column prop="deductionPrepaid" label="抵扣预付款(不含税)" width="150" v-if="isShowAtt('deductionPrepaid','detailObj')">
               <template #default="{ row, $index }">
                 <el-form-item :prop="'costControlDetailList.' + $index + '.deductionPrepaid'" :rules="rules.deductionPrepaid" :inline-message="true"
                               class="margin-b-0">
                   <el-input-number onmousewheel="return false;" v-model="row.deductionPrepaid" placeholder="请输入" style="width: 100%" :precision="2"
-                                   :controls="false" :min="0" @change="(val)=>handleChangeMoney(val,$index,'deductionPrepaid')"
-                                   :disabled="isDisabled" />
+                                   :controls="false" :min="0" :max="row.balancePrepaid"
+                                   @change="(val)=>handleChangeMoney(val,$index,'deductionPrepaid')" :disabled="isDisabled" />
                 </el-form-item>
               </template>
             </el-table-column>
+            <el-table-column prop="deductionPrepaidTax" label="抵扣预付款(含税)" width="140" v-if="isShowAtt('deductionPrepaidTax','detailObj')">
+              <template #default="{ row, $index }">
+                <el-form-item :prop="'costControlDetailList.' + $index + '.deductionPrepaidTax'" :rules="rules.deductionPrepaidTax"
+                              :inline-message="true" class="margin-b-0">
+                  <el-input-number onmousewheel="return false;" v-model="row.deductionPrepaidTax" placeholder="请输入" style="width: 100%" :precision="2"
+                                   :controls="false" :min="0" :max="row.balancePrepaidTax"
+                                   @change="(val)=>handleChangeMoney(val,$index,'deductionPrepaidTax')" :disabled="isDisabled" />
+                </el-form-item>
+              </template>
+            </el-table-column>
+
             <el-table-column prop="taxation" label="税费" width="140" v-if="isShowAtt('taxation','detailObj')">
               <template #default="{ row, $index }">
                 <el-form-item :prop="'costControlDetailList.' + $index + '.taxation'" :rules="rules.taxation" :inline-message="true"
@@ -334,6 +346,18 @@
                 </el-form-item>
               </template>
             </el-table-column>
+            <el-table-column label="是否含税" width="100" v-if="isShowAtt('isIncludeTax','detailObj')">
+              <template #default="{ row, $index }">
+                <el-form-item :prop="'costControlDetailList.' + $index + '.isIncludeTax'" :rules="rules.isIncludeTax" :inline-message="true"
+                              class="margin-b-0">
+                  <el-select v-model="row.isIncludeTax" placeholder="请选择" style="width: 100%" filterable @change="()=>changeRowMoneyOne($index)"
+                             :disabled="route.query.processType==undefined || !isHaveFinance">
+                    <el-option v-for="item in isAfterSubmit" :key="item.value" :label="item.label" :value="item.value" />
+                  </el-select>
+                </el-form-item>
+              </template>
+            </el-table-column>
+
             <el-table-column prop="currentPayable" label="本期应付" width="140" v-if="isShowAtt('currentPayable','detailObj')">
               <template #default="{ row, $index }">
                 <el-form-item :prop="'costControlDetailList.' + $index + '.currentPayable'" :rules="rules.currentPayable" :inline-message="true"
@@ -353,6 +377,13 @@
                 </el-form-item>
               </template>
             </el-table-column>
+            <el-table-column prop="unReturnAmount" label="剩余归还金额" width="110" v-if="isShowAtt('unReturnAmount','detailObj')">
+              <template #default="{ row, $index }">
+                <div>
+                  {{row.unReturnAmount}}
+                </div>
+              </template>
+            </el-table-column>
             <el-table-column prop="costMoneyTax" label="费用金额(含税)" width="140" v-if="isShowAtt('costMoneyTax','detailObj')">
               <template #default="{ row, $index }">
                 <el-form-item :prop="'costControlDetailList.' + $index + '.costMoneyTax'" :rules="rules.costMoneyTax" :inline-message="true"
@@ -569,6 +600,17 @@ const isAfterSubmitOne = ref([
   },
 ]);
 
+const taxPointsData = ref([
+  {
+    label: "1+税点",
+    value: "10",
+  },
+  {
+    label: "1-税点",
+    value: "20",
+  },
+]);
+
 const contractBelongTypeData = ref([
   {
     dictKey: "1",
@@ -656,6 +698,7 @@ const formConfig = computed(() => {
       itemWidth: 25,
       data: paymentTypeData.value,
       disabled: isDisabled.value,
+      clearable: false,
       fn: (val) => {
         changeCostType(val);
       },
@@ -1408,8 +1451,10 @@ const changeAccountSubjectsId = (val, index) => {
 };
 const changeCostType = (val) => {
   currentCostTypeData.value = paymentTypeData.value.find((x) => x.value == val);
-  formData.data.tradeType = currentCostTypeData.value.tradeType;
-  formData.data.costTypeName = currentCostTypeData.value.name;
+  if (currentCostTypeData.value) {
+    formData.data.tradeType = currentCostTypeData.value.tradeType;
+    formData.data.costTypeName = currentCostTypeData.value.name;
+  }
   getCheckBoxMap(val);
   checkDisabled();
   // 赋值id 以及其他相关字段
@@ -1437,7 +1482,7 @@ const changeCostType = (val) => {
   formData.data.applyTime = moment().format("yyyy-MM-DD");
   formData.data.companyId = proxy.useUserStore().user.companyId;
   if (
-    currentCostTypeData.value.name &&
+    currentCostTypeData.value &&
     currentCostTypeData.value.name == "采购货款"
   ) {
     formData.data.companyId = [proxy.useUserStore().user.companyId];
@@ -1610,7 +1655,8 @@ const handleChangeMoney = (val, index, att) => {
     if (currentCostTypeData.value.name.indexOf("其他费用") != -1) {
       // 是否预付
       if (formData.data.isAdvance == "1") {
-        row.currentPayable = row.currentPrepaidTax + row.currentPrepaid;
+        // row.currentPayable = row.currentPrepaidTax + row.currentPrepaid;
+        changeRowMoney(index);
       } else {
         row.currentPayableDeduction =
           formData.data.isPublicTransfer == "1"
@@ -1707,6 +1753,7 @@ const changeSelectData = (val, index, type) => {
           current.balancePrepaidTax;
         formData.data.costControlDetailList[index].businessName = current.label;
       }
+      changeRowMoney(index);
       break;
     default:
       break;
@@ -1741,7 +1788,7 @@ const getDict = () => {
             };
           });
           if (res.rows && res.rows.length > 0 && !route.query.businessId) {
-            formData.data.costType = res.rows[0].id;
+            formData.data.costType = paymentTypeData.value[0].value;
             changeCostType(formData.data.costType);
           }
         });
@@ -1836,6 +1883,20 @@ const getBtnDisabled = () => {
   }
 };
 
+const changeUnReturnAmount = () => {
+  for (let i = 0; i < formData.data.costControlDetailList.length; i++) {
+    const row = formData.data.costControlDetailList[i];
+    if (i == 0) {
+      row.unReturnAmount =
+        formData.data.unReturnAmount - Number(row.returnAmount);
+    } else {
+      row.unReturnAmount =
+        formData.data.costControlDetailList[i - 1].unReturnAmount -
+        Number(row.returnAmount);
+    }
+  }
+};
+
 const handleGetRemark = (index) => {
   let row = formData.data.costControlDetailList[index];
   let label = row.submitMapLabelData["职员"] || "";
@@ -1852,6 +1913,8 @@ const handleGetRemark = (index) => {
     formData.data.costControlDetailList[
       index
     ].remark = `归还备用金${formData.data.costControlDetailList[index].money}`;
+    // 冬天计算未归还的备用金
+    changeUnReturnAmount();
   } else if (currentCostTypeData.value.name.indexOf("备用金") != -1) {
     formData.data.costControlDetailList[
       index
@@ -1976,6 +2039,21 @@ const clickAdd = () => {
       },
     ];
   }
+  if (
+    currentCostTypeData.value &&
+    currentCostTypeData.value.name.includes("归还") &&
+    formData.data.costControlDetailList.length == 1
+  ) {
+    proxy
+      .post("/costControl/getImprestInfoByUserId", {
+        applyUserId: formData.data.applyUserId,
+      })
+      .then((res) => {
+        formData.data.unReturnAmount = res.unReturnAmount;
+        formData.data.costControlDetailList[0].unReturnAmount =
+          res.unReturnAmount;
+      });
+  }
 };
 
 const clickIndex = ref(-1);
@@ -2036,6 +2114,37 @@ const getLabelData = (val, key, index) => {
   }
 };
 
+const changeRowMoney = (index) => {
+  let row = formData.data.costControlDetailList[index];
+  if (row.currentPrepaid && row.taxMethod) {
+    if (row.taxMethod == "10") {
+      row.currentPrepaidTax = Number(
+        parseFloat(
+          row.currentPrepaid *
+            Number(parseFloat(1 + Number(row.invoiceTaxPoint) / 100).toFixed(4))
+        ).toFixed(2)
+      );
+    } else {
+      row.currentPrepaidTax = Number(
+        parseFloat(
+          row.currentPrepaid /
+            Number(parseFloat(1 - Number(row.invoiceTaxPoint) / 100).toFixed(4))
+        ).toFixed(2)
+      );
+    }
+  }
+};
+
+const changeRowMoneyOne = (index) => {
+  let row = formData.data.costControlDetailList[index];
+  if (row.isIncludeTax == 1) {
+    row.currentPayable = row.currentPrepaidTax;
+  } else {
+    row.currentPayable = row.currentPrepaid;
+  }
+  row.money = row.currentPayable;
+};
+
 const getOutboundFile = async () => {
   let ids = formData.data.contractOutboundInfoList.map((x) => x.id);
   const allFile = await proxy.getFileData({

+ 117 - 101
src/views/EHSD/productLibrary/companyProduct/index.vue

@@ -8,21 +8,22 @@
     <div class="content">
       <byTable :source="sourceList.data" :tableHeight="tableHeight" :pagination="sourceList.pagination" :config="config" :loading="loading"
                highlight-current-row :selectConfig="selectConfig" :action-list="[
-                 {
-                text: '导出产品BOM Excel',
-                action: () => exportBomExcel(),
-                disabled: false,
-              },
-               {
-                text: '导出Excel',
-                action: () => exportExcel(),
-                disabled: false,
-              },
-              {
-                text: '添加',
-                action: () => openModal('add'),
-                disabled: false,
-              },]" @get-list="getList">
+          {
+            text: '导出产品BOM Excel',
+            action: () => exportBomExcel(),
+            disabled: false,
+          },
+          {
+            text: '导出Excel',
+            action: () => exportExcel(),
+            disabled: false,
+          },
+          {
+            text: '添加',
+            action: () => openModal('add'),
+            disabled: false,
+          },
+        ]" @get-list="getList">
         <template #name="{ item }">
           <div>
             <span class="el-click">{{ item.name }}</span>
@@ -36,15 +37,13 @@
         </template>
         <template #size="{ item }">
           <div>
-            <span>{{ item['length'] }}</span>*
-            <span>{{ item.width }}</span>*
+            <span>{{ item['length'] }}</span>* <span>{{ item.width }}</span>*
             <span>{{ item.height }}</span>
           </div>
-
         </template>
         <template #price="{ item }">
           <div v-if="item.price">
-            <span> {{ moneyFormat(item.price ,2)}}</span>
+            <span> {{ moneyFormat(item.price, 2) }}</span>
           </div>
           <div v-else></div>
         </template>
@@ -61,20 +60,20 @@
           </template>
           <template #productionFile>
             <div style="width: 100%">
-              <span style="color:#409eff;cursor:pointer" @click="handleClickUpload('prodFilePath',true)"
+              <span style="color: #409eff; cursor: pointer" @click="handleClickUpload('prodFilePath', true)"
                     v-if="!formData.data.prodFilePath">点击上传</span>
-              <span style="color:#409eff;cursor:pointer" @click="handleClickUpload('prodFilePath',false)" v-else>点击查看</span>
+              <span style="color: #409eff; cursor: pointer" @click="handleClickUpload('prodFilePath', false)" v-else>点击查看</span>
             </div>
           </template>
           <template #productionFileOne>
             <div style="width: 100%">
-              <el-button type="primary" plain @click="handleClickUpload('prodImgPath',true)" v-if="!formData.data.prodImgPath">点击上传</el-button>
-              <el-button type="primary" plain @click="handleClickUpload('prodImgPath',false)" v-else>点击查看</el-button>
+              <el-button type="primary" plain @click="handleClickUpload('prodImgPath', true)" v-if="!formData.data.prodImgPath">点击上传</el-button>
+              <el-button type="primary" plain @click="handleClickUpload('prodImgPath', false)" v-else>点击查看</el-button>
             </div>
           </template>
 
           <template #rawMaterialIdSlot>
-            <div style="width:100%;padding-left:25px">
+            <div style="width: 100%; padding-left: 25px">
               <div>
                 <el-button type="primary" @click="openDialog(1)" plain>主材</el-button>
                 <el-button type="primary" @click="openDialog(2)" plain>工艺</el-button>
@@ -85,8 +84,14 @@
                 <el-table-column prop="materialCode" label="物料编码" width="190" />
                 <el-table-column label="规格尺寸 (cm)" width="140">
                   <template #default="{ row, $index }">
-                    <div style="width: 100%" v-if="row.materialLength&&row.materialWidth && row.materialHeight">
-                      {{row.materialLength}}*{{row.materialWidth}}*{{row.materialHeight}}
+                    <div style="width: 100%" v-if="
+                        row.materialLength &&
+                        row.materialWidth &&
+                        row.materialHeight
+                      ">
+                      {{ row.materialLength }}*{{ row.materialWidth }}*{{
+                        row.materialHeight
+                      }}
                     </div>
                   </template>
                 </el-table-column>
@@ -105,8 +110,9 @@
                 <el-table-column label="标准用量" width="120">
                   <template #default="{ row, $index }">
                     <div style="width: 100%">
-                      <el-form-item :prop="'productBomDetailList.' + $index + '.standardDosage'" :rules="rules.standardDosage" :inline-message="true"
-                                    class="margin-b-0 wid100">
+                      <el-form-item :prop="
+                          'productBomDetailList.' + $index + '.standardDosage'
+                        " :rules="rules.standardDosage" :inline-message="true" class="margin-b-0 wid100">
                         <el-input-number onmousewheel="return false;" v-model="row.standardDosage" placeholder="请输入" style="width: 100%"
                                          :precision="0" :controls="false" :min="1" />
                       </el-form-item>
@@ -129,7 +135,8 @@
                     <div style="width: 100%">
                       <el-form-item :prop="'productBomDetailList.' + $index + '.remark'" :rules="rules.remark" :inline-message="true"
                                     class="margin-b-0 wid100">
-                        <el-input v-model="row.remark" placeholder="请输入"> </el-input>
+                        <el-input v-model="row.remark" placeholder="请输入">
+                        </el-input>
                       </el-form-item>
                     </div>
                   </template>
@@ -138,9 +145,10 @@
                   <template #default="{ row, $index }">
                     <el-form-item :prop="'productBomDetailList.' + $index + '.bomFileList'" :inline-message="true" class="margin-b-0">
                       <el-upload :file-list="row.bomFileList" :action="uploadUrl" :data="row.uploadData" :limit="2" :list-type="'text'"
-                                 :before-upload="(file)=>handleBeforeUpload(file,$index)" :on-success="()=>handleFileSuccess($index)"
-                                 :on-remove="(file)=>handleRemoveFileOne(file,$index)" :on-preview="onPreviewFile"
-                                 :on-exceed="()=>msgTip(`上传文件数量不可大于2`, 2)">
+                                 :before-upload="
+                          (file) => handleBeforeUpload(file, $index)
+                        " :on-success="() => handleFileSuccess($index)" :on-remove="(file) => handleRemoveFileOne(file, $index)"
+                                 :on-preview="onPreviewFile" :on-exceed="() => msgTip(`上传文件数量不可大于2`, 2)">
                         <el-button type="primary" plain>上传</el-button>
                       </el-upload>
                     </el-form-item>
@@ -148,7 +156,7 @@
                 </el-table-column>
                 <el-table-column label="操作" width="60" align="center" fixed="right">
                   <template #default="{ row, $index }">
-                    <el-button type="primary" link @click="handleRemove($index,1)" v-if="row.type !=3">删除</el-button>
+                    <el-button type="primary" link @click="handleRemove($index, 1)" v-if="row.type != 3">删除</el-button>
                   </template>
                 </el-table-column>
               </el-table>
@@ -213,15 +221,21 @@
           </template>
 
           <template #materialDetail>
-            <div style="width: 100%;padding-left:15px">
+            <div style="width: 100%; padding-left: 15px">
               <el-button type="primary" @click="clickOpenSelectMaterial(1)" plain>选择包材/配件/辅材</el-button>
               <el-table :data="formData.data.productBomDetailList" style="width: 100%; margin-top: 16px">
                 <el-table-column prop="materialName" label="物料名称" />
                 <el-table-column prop="materialCode" label="物料编码" />
                 <el-table-column label="规格尺寸 (cm)" width="140">
                   <template #default="{ row, $index }">
-                    <div style="width: 100%" v-if="row.materialLength&&row.materialWidth && row.materialHeight">
-                      {{row.materialLength}}*{{row.materialWidth}}*{{row.materialHeight}}
+                    <div style="width: 100%" v-if="
+                        row.materialLength &&
+                        row.materialWidth &&
+                        row.materialHeight
+                      ">
+                      {{ row.materialLength }}*{{ row.materialWidth }}*{{
+                        row.materialHeight
+                      }}
                     </div>
                   </template>
                 </el-table-column>
@@ -239,7 +253,7 @@
                 </el-table-column>
                 <el-table-column label="操作" width="60" align="center" fixed="right">
                   <template #default="{ $index }">
-                    <el-button type="primary" link @click="handleRemove($index,1)">删除</el-button>
+                    <el-button type="primary" link @click="handleRemove($index, 1)">删除</el-button>
                   </template>
                 </el-table-column>
               </el-table>
@@ -247,7 +261,7 @@
           </template>
 
           <template #technology>
-            <div style="width:100%">
+            <div style="width: 100%">
               <!-- <div class="small-title">
                 ① 工艺线路
               </div>
@@ -260,13 +274,11 @@
                   </el-form-item>
                 </el-col>
               </el-row> -->
-              <div class="small-title">
-                ① LOGO
-              </div>
-              <el-row style="width:100%">
+              <div class="small-title">① LOGO</div>
+              <el-row style="width: 100%">
                 <el-col :span="12">
                   <el-form-item label="LOGO尺寸" class="wid100">
-                    <el-row style="width:100%">
+                    <el-row style="width: 100%">
                       <el-col :span="12">
                         <el-form-item prop="logoLength" label-width="0px" class="margin-b-0 wid100">
                           <el-input-number v-model="formData.data.logoLength" placeholder="长 (cm)" style="width: 100%" :precision="2"
@@ -289,81 +301,84 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">
+                  <el-form-item label="LOGO工艺包装要求" class="wid100" label-width="150px">
+                    <el-input v-model="formData.data.logoPackRemark" placeholder="请输入" />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
                   <el-form-item prop="colorCount" label="几色印刷" class="wid100">
                     <el-input-number v-model="formData.data.colorCount" placeholder="请输入" style="width: 100%" :precision="0" :controls="false"
                                      :min="1" onmousewheel="return false;" />
                   </el-form-item>
                 </el-col>
               </el-row>
-              <div class="small-title">
-                ② 折叠
-              </div>
-              <el-row style="width:100%">
+              <div class="small-title">② 折叠</div>
+              <el-row style="width: 100%">
                 <el-col :span="12">
                   <el-form-item prop="isFold" label="是否折叠" class="wid100">
-                    <el-select v-model="formData.data.isFold" placeholder="请选择" style="width:100%">
+                    <el-select v-model="formData.data.isFold" placeholder="请选择" style="width: 100%">
                       <el-option :label="'否'" :value="0" />
                       <el-option :label="'是'" :value="1" />
                     </el-select>
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">
-                  <el-form-item prop="foldWay" label="折叠数" class="wid100" v-if="formData.data.isFold==1"
-                                :rules="formData.data.isFold==1?rules.foldWay:''">
-                    <el-select v-model="formData.data.foldWay" placeholder="请选择" style="width:100%">
+                  <el-form-item prop="foldWay" label="折叠数" class="wid100" v-if="formData.data.isFold == 1"
+                                :rules="formData.data.isFold == 1 ? rules.foldWay : ''">
+                    <el-select v-model="formData.data.foldWay" placeholder="请选择" style="width: 100%">
                       <el-option v-for="item in foldWayData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
                     </el-select>
                   </el-form-item>
                 </el-col>
               </el-row>
-              <div class="small-title">
-                ③ 包装要求
-              </div>
-              <el-row style="width:100%">
+              <div class="small-title">③ 包装要求</div>
+              <el-row style="width: 100%">
                 <el-col :span="12">
                   <el-form-item prop="packAsk" label="包装要求" class="wid100">
-                    <el-select v-model="formData.data.packAsk" placeholder="请选择" style="width:100%" multiple>
+                    <el-select v-model="formData.data.packAsk" placeholder="请选择" style="width: 100%" multiple>
                       <el-option v-for="item in packAskData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
                     </el-select>
                   </el-form-item>
                 </el-col>
               </el-row>
-              <div class="small-title">
-                ④ 是否定制
-              </div>
-              <el-row style="width:100%">
+              <div class="small-title">④ 是否定制</div>
+              <el-row style="width: 100%">
                 <el-col :span="12">
                   <el-form-item prop="isCustomized" label="是否定制" class="wid100">
-                    <el-select v-model="formData.data.isCustomized" placeholder="请选择" style="width:100%" @change="handleChangeIsCustomized">
+                    <el-select v-model="formData.data.isCustomized" placeholder="请选择" style="width: 100%" @change="handleChangeIsCustomized">
                       <el-option :label="'否'" :value="0" />
                       <el-option :label="'是'" :value="1" />
                     </el-select>
                   </el-form-item>
                 </el-col>
               </el-row>
-              <el-row style="width:100%">
-                <el-form-item prop="technologyId" label="定制内容" class="wid100" v-if="formData.data.isCustomized==1">
-                  <table style="width:100%" border class="table">
+              <el-row style="width: 100%">
+                <el-form-item prop="technologyId" label="定制内容" class="wid100" v-if="formData.data.isCustomized == 1">
+                  <table style="width: 100%" border class="table">
                     <tr>
-                      <td style="width:20%">
-                      </td>
-                      <td style="width:40%">附件</td>
-                      <td style="width:40%">备注</td>
+                      <td style="width: 20%"></td>
+                      <td style="width: 40%">附件</td>
+                      <td style="width: 40%">备注</td>
                     </tr>
-                    <tr v-for="(row,index) in formData.data.productCustomInfoList" :key="index">
+                    <tr v-for="(row, index) in formData.data
+                        .productCustomInfoList" :key="index">
                       <td>
-                        <el-checkbox v-model="row.isCheckBox" label="" /> <span style="position:relative;top:-2px"> {{getLabel(row.type)}}</span>
+                        <el-checkbox v-model="row.isCheckBox" label="" />
+                        <span style="position: relative; top: -2px">
+                          {{ getLabel(row.type) }}</span>
                       </td>
                       <td>
-                        <el-upload :file-list="row.fileList" :action="uploadUrl" :data="uploadData" :limit="5" :list-type="'text'"
-                                   :before-upload="(file)=>handleBeforeUploadOne(file,index)" :on-success="()=>handleSuccessOne(index)"
-                                   :on-remove="(file)=>handleRemoveFile(file,index)" :on-preview="onPreviewFile"
-                                   :on-exceed="()=>msgTip(`上传文件数量不可大于5`, 2)">
+                        <el-upload :file-list="row.fileList" :action="uploadUrl" :data="uploadData" :limit="5" :list-type="'text'" :before-upload="
+                            (file) => handleBeforeUploadOne(file, index)
+                          " :on-success="() => handleSuccessOne(index)" :on-remove="(file) => handleRemoveFile(file, index)"
+                                   :on-preview="onPreviewFile" :on-exceed="() => msgTip(`上传文件数量不可大于5`, 2)">
                           <el-button text type="primary">上传附件</el-button>
                         </el-upload>
                       </td>
                       <td>
-                        <el-form-item :prop="'productCustomInfoList.' + index + '.remark'" :rules="row.isCheckBox?rules.remark:''"
+                        <el-form-item :prop="'productCustomInfoList.' + index + '.remark'" :rules="row.isCheckBox ? rules.remark : ''"
                                       class="margin-b-0 wid100">
                           <el-input v-model="row.remark" placeholder="请输入备注" />
                         </el-form-item>
@@ -374,7 +389,6 @@
               </el-row>
             </div>
           </template>
-
         </byForm>
       </div>
       <template #footer>
@@ -425,32 +439,38 @@
 
         <template #detail>
           <div style="width: 100%">
-            <div style="text-align:center;margin-bottom:10px">
-              【{{formData.bomData.name}} {{formData.bomData.code}}】BOM单
+            <div style="text-align: center; margin-bottom: 10px">
+              【{{ formData.bomData.name }} {{ formData.bomData.code }}】BOM单
             </div>
-            <table border class="table" style="width:100%">
+            <table border class="table" style="width: 100%">
               <tbody>
                 <tr>
-                  <td style="width:90px">原材料</td>
-                  <td style="padding:10px">
-                    <el-select v-model="formData.bomData.rawMaterialId" filterable placeholder="请选择原材料" style="width:100%">
+                  <td style="width: 90px">原材料</td>
+                  <td style="padding: 10px">
+                    <el-select v-model="formData.bomData.rawMaterialId" filterable placeholder="请选择原材料" style="width: 100%">
                       <el-option v-for="item in rawMaterialData" :key="item.value" :label="item.label" :value="item.value" />
                     </el-select>
                   </td>
                 </tr>
                 <tr>
-                  <td>
-                    包材/配件/辅材
-                  </td>
-                  <td style="padding:20px 20px 20px">
-                    <div style="text-align:left"><el-button type="primary" @click="clickOpenSelectMaterial(2)" plain>选择</el-button></div>
-                    <el-table :data="formData.bomData.productBomDetailList" style="width: 100%;">
+                  <td>包材/配件/辅材</td>
+                  <td style="padding: 20px 20px 20px">
+                    <div style="text-align: left">
+                      <el-button type="primary" @click="clickOpenSelectMaterial(2)" plain>选择</el-button>
+                    </div>
+                    <el-table :data="formData.bomData.productBomDetailList" style="width: 100%">
                       <el-table-column prop="materialName" label="物料名称" min-width="130" />
                       <el-table-column prop="materialCode" label="物料编码" width="150" />
                       <el-table-column label="规格尺寸 (cm)" width="140">
                         <template #default="{ row, $index }">
-                          <div style="width: 100%" v-if="row.materialLength&&row.materialWidth && row.materialHeight">
-                            {{row.materialLength}}*{{row.materialWidth}}*{{row.materialHeight}}
+                          <div style="width: 100%" v-if="
+                              row.materialLength &&
+                              row.materialWidth &&
+                              row.materialHeight
+                            ">
+                            {{ row.materialLength }}*{{ row.materialWidth }}*{{
+                              row.materialHeight
+                            }}
                           </div>
                         </template>
                       </el-table-column>
@@ -458,8 +478,9 @@
                       <el-table-column label="数量" width="100">
                         <template #default="{ row, $index }">
                           <div style="width: 100%">
-                            <el-form-item :prop="'productBomDetailList.' + $index + '.quantity'" :rules="bomRules.quantity" :inline-message="true"
-                                          class="margin-b-0 wid100">
+                            <el-form-item :prop="
+                                'productBomDetailList.' + $index + '.quantity'
+                              " :rules="bomRules.quantity" :inline-message="true" class="margin-b-0 wid100">
                               <el-input-number onmousewheel="return false;" v-model="row.quantity" placeholder="请输入" style="width: 100%"
                                                :precision="0" :controls="false" :min="1" />
                             </el-form-item>
@@ -468,7 +489,7 @@
                       </el-table-column>
                       <el-table-column label="操作" width="60" align="center" fixed="right">
                         <template #default="{ $index }">
-                          <el-button type="primary" link @click="handleRemove($index,2)">删除</el-button>
+                          <el-button type="primary" link @click="handleRemove($index, 2)">删除</el-button>
                         </template>
                       </el-table-column>
                     </el-table>
@@ -476,11 +497,9 @@
                 </tr>
 
                 <tr>
-                  <td>
-                    生产工序
-                  </td>
-                  <td style="padding:0 20px 20px">
-                    <el-table :data="formData.bomData.processesList" style="width: 100%; ">
+                  <td>生产工序</td>
+                  <td style="padding: 0 20px 20px">
+                    <el-table :data="formData.bomData.processesList" style="width: 100%">
                       <el-table-column label="序号" type="index" width="80" />
                       <el-table-column prop="code" label="工序编码" />
                       <el-table-column prop="name" label="工序名称" />
@@ -488,11 +507,9 @@
                   </td>
                 </tr>
               </tbody>
-
             </table>
           </div>
         </template>
-
       </byForm>
       <!-- </div> -->
       <template #footer>
@@ -533,7 +550,6 @@
         <el-button @click="openExcelDialog = false" size="default" v-debounce>取 消</el-button>
       </template>
     </el-dialog>
-
   </div>
 </template>
 

+ 12 - 2
src/views/EHSD/productLibrary/waitCreateProduct/index.vue

@@ -265,6 +265,13 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">
+                  <el-form-item label="LOGO工艺包装要求" class="wid100" label-width="150px">
+                    <el-input v-model="formData.data.logoPackRemark" placeholder="请输入" />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
                   <el-form-item prop="colorCount" label="几色印刷" class="wid100">
                     <el-input-number v-model="formData.data.colorCount" placeholder="请输入" style="width: 100%" :precision="0" :controls="false"
                                      :min="1" onmousewheel="return false;" />
@@ -1247,8 +1254,8 @@ const getDtl = (row) => {
     extQuotationProductId: row.id,
     ...row,
     companyId: proxy.useUserStore().user.companyId,
-    productClassifyId: "",
-    name: "",
+    productClassifyId: row.productClassifyId || "",
+    name: row.productName || "",
     customCode: row.productCode,
     nameEnglish: "",
     price: row.price || null,
@@ -1266,6 +1273,9 @@ const getDtl = (row) => {
     length: row.productLength,
     width: row.productWidth,
     height: row.productHeight,
+    frontalTexture: row.frontalTexture || "",
+    reverseTexture: row.reverseTexture || "",
+    logoPackRemark: row.logoPackRemark,
     productBomDetailList: row.quotationProductBomList.map((x) => ({
       id: x.id,
       type: x.type,

+ 54 - 0
src/views/EHSD/saleContract/PriceSheetDetail.vue

@@ -192,6 +192,22 @@
                   </div>
                   <div style="width: 100%;padding-left:15px">
                     <el-row>
+                      <el-col :span="12">
+                        <el-form-item :prop="'quotationProductList.' +index + '.productClassifyId'" :rules="rules.productClassifyId"
+                                      :inline-message="true" label="产品分类" class="wid100">
+                          <el-tree-select v-model="product.productClassifyId" :data="productTreeData" style="width: 100%" placeholder="请选择"
+                                          default-expand-all value-key="id" check-strictly
+                                          :props="{ value:  'id', label:  'name', children: 'children', disabled: 'disabled' }" />
+                        </el-form-item>
+                      </el-col>
+                      <el-col :span="12">
+                        <el-form-item :prop="'quotationProductList.' +index + '.productName'" :rules="rules.productName" :inline-message="true"
+                                      label="产品名称" class="wid100">
+                          <el-input v-model="product.productName" placeholder="请输入"></el-input>
+                        </el-form-item>
+                      </el-col>
+                    </el-row>
+                    <el-row>
                       <!-- <el-col :span="12">
                         <el-form-item :prop="'quotationProductList.' +index + '.rawMaterialId'" :rules="rules.rawMaterialId" :inline-message="true"
                                       label="原材料" class="wid100">
@@ -245,6 +261,24 @@
                       </el-col>
                     </el-row>
                     <el-row>
+                      <el-col :span="12">
+                        <el-form-item :prop="'quotationProductList.' +index + '.frontalTexture'" :rules="rules.frontalTexture" :inline-message="true"
+                                      label="正面纹路" class="wid100">
+                          <el-select v-model="product.frontalTexture" placeholder="请选择" filterable style="width: 100%">
+                            <el-option v-for="item in frontLinesData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+                          </el-select>
+                        </el-form-item>
+                      </el-col>
+                      <el-col :span="12">
+                        <el-form-item :prop="'quotationProductList.' +index + '. reverseTexture'" :rules="rules. reverseTexture"
+                                      :inline-message="true" label="背面纹路" class="wid100">
+                          <el-select v-model="product.reverseTexture" placeholder="请选择" filterable style="width: 100%">
+                            <el-option v-for="item in backLinesData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+                          </el-select>
+                        </el-form-item>
+                      </el-col>
+                    </el-row>
+                    <el-row>
 
                       <el-col :span="12">
                         <el-form-item label="净重(kg)" prop="netWeight" class="margin-b-0 wid100">
@@ -344,6 +378,13 @@
                         </el-form-item>
                       </el-col>
                       <el-col :span="12">
+                        <el-form-item label="LOGO工艺包装要求" class="wid100" label-width="200px">
+                          <el-input v-model="product.logoPackRemark" placeholder="请输入" />
+                        </el-form-item>
+                      </el-col>
+                    </el-row>
+                    <el-row>
+                      <el-col :span="12">
                         <el-form-item label="几色印刷" class="wid100">
                           <el-input-number v-model="product.colorCount" style="width: 100%" :precision="0" :controls="false" :min="1"
                                            onmousewheel="return false;" />
@@ -446,6 +487,12 @@ const foldWayData = computed(() => proxy.useUserStore().allDict["fold_way"]);
 const qualityLevel = computed(
   () => proxy.useUserStore().allDict["quality_level"]
 );
+const backLinesData = computed(
+  () => proxy.useUserStore().allDict["back_lines"]
+);
+const frontLinesData = computed(
+  () => proxy.useUserStore().allDict["front_lines"]
+);
 const props = defineProps({
   rowData: Object,
   dataType: {
@@ -465,6 +512,7 @@ const typeData = ref([
   },
 ]);
 const treeData = ref([]);
+const productTreeData = ref([]);
 const countryData = ref([]);
 const provinceData = ref([]);
 const cityData = ref([]);
@@ -637,6 +685,12 @@ const getDict = () => {
     .then((res) => {
       treeData.value = proxy.handleTree(res.data, "deptId");
     });
+
+  proxy
+    .post("/productClassify/tree", { parentId: "", name: "", definition: "1" })
+    .then((res) => {
+      productTreeData.value = res;
+    });
 };
 const rawMaterialData = ref([]);
 const technologyData = ref([]);

+ 147 - 0
src/views/EHSD/saleContract/priceSheetEHSD/index.vue

@@ -221,6 +221,22 @@
                     </div>
                     <div style="width: 100%;padding-left:15px">
                       <el-row>
+                        <el-col :span="12">
+                          <el-form-item :prop="'quotationProductList.' +index + '.productClassifyId'" :rules="rules.productClassifyId"
+                                        :inline-message="true" label="产品分类" class="wid100">
+                            <el-tree-select v-model="product.productClassifyId" :data="productTreeData" style="width: 100%" placeholder="请选择"
+                                            default-expand-all value-key="id" check-strictly
+                                            :props="{ value:  'id', label:  'name', children: 'children', disabled: 'disabled' }" />
+                          </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                          <el-form-item :prop="'quotationProductList.' +index + '.productName'" :rules="rules.productName" :inline-message="true"
+                                        label="产品名称" class="wid100">
+                            <el-input v-model="product.productName" placeholder="请输入"></el-input>
+                          </el-form-item>
+                        </el-col>
+                      </el-row>
+                      <el-row>
                         <!-- <el-col :span="12">
                           <el-form-item :prop="'quotationProductList.' +index + '.rawMaterialId'" :rules="rules.rawMaterialId" :inline-message="true"
                                         label="原材料" class="wid100">
@@ -275,6 +291,24 @@
                       </el-row>
                       <el-row>
                         <el-col :span="12">
+                          <el-form-item :prop="'quotationProductList.' +index + '.frontalTexture'" :rules="rules.frontalTexture"
+                                        :inline-message="true" label="正面纹路" class="wid100">
+                            <el-select v-model="product.frontalTexture" placeholder="请选择" filterable style="width: 100%">
+                              <el-option v-for="item in frontLinesData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+                            </el-select>
+                          </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                          <el-form-item :prop="'quotationProductList.' +index + '. reverseTexture'" :rules="rules. reverseTexture"
+                                        :inline-message="true" label="背面纹路" class="wid100">
+                            <el-select v-model="product.reverseTexture" placeholder="请选择" filterable style="width: 100%">
+                              <el-option v-for="item in backLinesData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+                            </el-select>
+                          </el-form-item>
+                        </el-col>
+                      </el-row>
+                      <el-row>
+                        <el-col :span="12">
                           <el-form-item label="净重(kg)" prop="netWeight" class="margin-b-0 wid100">
                             <el-input-number v-model="product.netWeight" placeholder="请输入" style="width: 100%" :precision="2" :controls="false"
                                              :min="0" onmousewheel="return false;" />
@@ -426,6 +460,13 @@
                           </el-form-item>
                         </el-col>
                         <el-col :span="12">
+                          <el-form-item label="LOGO工艺包装要求" class="wid100" label-width="200px">
+                            <el-input v-model="product.logoPackRemark" placeholder="请输入" />
+                          </el-form-item>
+                        </el-col>
+                      </el-row>
+                      <el-row>
+                        <el-col :span="12">
                           <el-form-item label="几色印刷" class="wid100">
                             <el-input-number v-model="product.colorCount" placeholder="请输入" style="width: 100%" :precision="0" :controls="false"
                                              :min="1" onmousewheel="return false;" />
@@ -656,6 +697,22 @@
                       </div>
                       <div style="width: 100%;padding-left:15px">
                         <el-row>
+                          <el-col :span="12">
+                            <el-form-item :prop="'quotationProductList.' +index + '.productClassifyId'" :rules="rules.productClassifyId"
+                                          :inline-message="true" label="产品分类" class="wid100">
+                              <el-tree-select v-model="product.productClassifyId" :data="productTreeData" style="width: 100%" placeholder="请选择"
+                                              default-expand-all value-key="id" check-strictly
+                                              :props="{ value:  'id', label:  'name', children: 'children', disabled: 'disabled' }" />
+                            </el-form-item>
+                          </el-col>
+                          <el-col :span="12">
+                            <el-form-item :prop="'quotationProductList.' +index + '.productName'" :rules="rules.productName" :inline-message="true"
+                                          label="产品名称" class="wid100">
+                              <el-input v-model="product.productName" placeholder="请输入"></el-input>
+                            </el-form-item>
+                          </el-col>
+                        </el-row>
+                        <el-row>
                           <!-- <el-col :span="12">
                             <el-form-item :prop="'quotationProductList.' +index + '.rawMaterialId'" :rules="rules.rawMaterialId"
                                           :inline-message="true" label="原材料" class="wid100">
@@ -708,6 +765,26 @@
                             </el-form-item>
                           </el-col>
                         </el-row>
+
+                        <el-row>
+                          <el-col :span="12">
+                            <el-form-item :prop="'quotationProductList.' +index + '.frontalTexture'" :rules="rules.frontalTexture"
+                                          :inline-message="true" label="正面纹路" class="wid100">
+                              <el-select v-model="product.frontalTexture" placeholder="请选择" filterable style="width: 100%">
+                                <el-option v-for="item in frontLinesData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+                              </el-select>
+                            </el-form-item>
+                          </el-col>
+                          <el-col :span="12">
+                            <el-form-item :prop="'quotationProductList.' +index + '. reverseTexture'" :rules="rules. reverseTexture"
+                                          :inline-message="true" label="背面纹路" class="wid100">
+                              <el-select v-model="product.reverseTexture" placeholder="请选择" filterable style="width: 100%">
+                                <el-option v-for="item in backLinesData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+                              </el-select>
+                            </el-form-item>
+                          </el-col>
+                        </el-row>
+
                         <el-row>
 
                           <el-col :span="12">
@@ -792,6 +869,14 @@
                             </el-form-item>
                           </el-col>
                           <el-col :span="12">
+                            <el-form-item label="LOGO工艺包装要求" class="wid100" label-width="200px">
+                              <el-input v-model="product.logoPackRemark" placeholder="请输入" />
+                            </el-form-item>
+                          </el-col>
+
+                        </el-row>
+                        <el-row>
+                          <el-col :span="12">
                             <el-form-item label="几色印刷" class="wid100">
                               <el-input-number v-model="product.colorCount" style="width: 100%" :precision="0" :controls="false" :min="1"
                                                onmousewheel="return false;" />
@@ -960,6 +1045,23 @@
                       </div>
                       <div style="width: 100%;padding-left:15px">
                         <el-row>
+                          <el-col :span="12">
+                            <el-form-item :prop="'quotationProductList.' +index + '.productClassifyId'" :rules="rules.productClassifyId"
+                                          :inline-message="true" label="产品分类" class="wid100">
+                              <el-tree-select v-model="product.productClassifyId" :data="productTreeData" style="width: 100%" placeholder="请选择"
+                                              default-expand-all value-key="id" check-strictly
+                                              :props="{ value:  'id', label:  'name', children: 'children', disabled: 'disabled' }" />
+                            </el-form-item>
+                          </el-col>
+                          <el-col :span="12">
+                            <el-form-item :prop="'quotationProductList.' +index + '.productName'" :rules="rules.productName" :inline-message="true"
+                                          label="产品名称" class="wid100">
+                              <el-input v-model="product.productName" placeholder="请输入"></el-input>
+                            </el-form-item>
+                          </el-col>
+                        </el-row>
+
+                        <el-row>
                           <!-- <el-col :span="12">
                             <el-form-item :prop="'quotationProductList.' +index + '.rawMaterialId'" :rules="rules.rawMaterialId"
                                           :inline-message="true" label="原材料" class="wid100">
@@ -1012,6 +1114,26 @@
                             </el-form-item>
                           </el-col>
                         </el-row>
+
+                        <el-row>
+                          <el-col :span="12">
+                            <el-form-item :prop="'quotationProductList.' +index + '.frontalTexture'" :rules="rules.frontalTexture"
+                                          :inline-message="true" label="正面纹路" class="wid100">
+                              <el-select v-model="product.frontalTexture" placeholder="请选择" filterable style="width: 100%">
+                                <el-option v-for="item in frontLinesData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+                              </el-select>
+                            </el-form-item>
+                          </el-col>
+                          <el-col :span="12">
+                            <el-form-item :prop="'quotationProductList.' +index + '. reverseTexture'" :rules="rules. reverseTexture"
+                                          :inline-message="true" label="背面纹路" class="wid100">
+                              <el-select v-model="product.reverseTexture" placeholder="请选择" filterable style="width: 100%">
+                                <el-option v-for="item in backLinesData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+                              </el-select>
+                            </el-form-item>
+                          </el-col>
+                        </el-row>
+
                         <el-row>
 
                           <el-col :span="12">
@@ -1111,6 +1233,13 @@
                             </el-form-item>
                           </el-col>
                           <el-col :span="12">
+                            <el-form-item label="LOGO工艺包装要求" class="wid100" label-width="200px">
+                              <el-input v-model="product.logoPackRemark" placeholder="请输入" />
+                            </el-form-item>
+                          </el-col>
+                        </el-row>
+                        <el-row>
+                          <el-col :span="12">
                             <el-form-item label="几色印刷" class="wid100">
                               <el-input-number v-model="product.colorCount" style="width: 100%" :precision="0" :controls="false" :min="1"
                                                onmousewheel="return false;" />
@@ -1284,12 +1413,20 @@ const foldWayData = computed(() => proxy.useUserStore().allDict["fold_way"]);
 const qualityLevel = computed(
   () => proxy.useUserStore().allDict["quality_level"]
 );
+const backLinesData = computed(
+  () => proxy.useUserStore().allDict["back_lines"]
+);
+const frontLinesData = computed(
+  () => proxy.useUserStore().allDict["front_lines"]
+);
+
 const companyId = ref("");
 const accountList = ref([]);
 const corporationList = ref([]);
 const tradeMethods = ref([]);
 const accountCurrency = ref([]);
 const companyData = ref([]);
+const productTreeData = ref([]);
 const deptData = ref([]);
 const statusData = ref([
   {
@@ -1534,6 +1671,12 @@ const getDict = () => {
       }));
       treeData.value = proxy.handleTree(res.data, "deptId");
     });
+
+  proxy
+    .post("/productClassify/tree", { parentId: "", name: "", definition: "1" })
+    .then((res) => {
+      productTreeData.value = res;
+    });
 };
 const getList = async (req) => {
   sourceList.value.pagination = { ...sourceList.value.pagination, ...req };
@@ -1944,6 +2087,10 @@ const rules = ref({
   buyCorporationId: [
     { required: true, message: "请选择客户公司", trigger: "change" },
   ],
+  productClassifyId: [
+    { required: true, message: "请选择产品分类", trigger: "change" },
+  ],
+  productName: [{ required: true, message: "请输入产品名称", trigger: "blur" }],
   quantity: [{ required: true, message: "请输入数量", trigger: "blur" }],
   standardDosage: [
     { required: true, message: "请输入标准用量", trigger: "blur" },

+ 54 - 0
src/views/EHSD/saleContract/priceSheetEstimate/index.vue

@@ -150,6 +150,22 @@
                     </div>
                     <div style="width: 100%;padding-left:15px">
                       <el-row>
+                        <el-col :span="12">
+                          <el-form-item :prop="'quotationProductList.' +index + '.productClassifyId'" :rules="rules.productClassifyId"
+                                        :inline-message="true" label="产品分类" class="wid100">
+                            <el-tree-select v-model="product.productClassifyId" :data="productTreeData" style="width: 100%" placeholder="请选择"
+                                            default-expand-all value-key="id" check-strictly
+                                            :props="{ value:  'id', label:  'name', children: 'children', disabled: 'disabled' }" />
+                          </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                          <el-form-item :prop="'quotationProductList.' +index + '.productName'" :rules="rules.productName" :inline-message="true"
+                                        label="产品名称" class="wid100">
+                            <el-input v-model="product.productName" placeholder="请输入"></el-input>
+                          </el-form-item>
+                        </el-col>
+                      </el-row>
+                      <el-row>
                         <!-- <el-col :span="12">
                           <el-form-item :prop="'quotationProductList.' +index + '.rawMaterialId'" :rules="rules.rawMaterialId" :inline-message="true"
                                         label="原材料" class="wid100">
@@ -203,6 +219,24 @@
                         </el-col>
                       </el-row>
                       <el-row>
+                        <el-col :span="12">
+                          <el-form-item :prop="'quotationProductList.' +index + '.frontalTexture'" :rules="rules.frontalTexture"
+                                        :inline-message="true" label="正面纹路" class="wid100">
+                            <el-select v-model="product.frontalTexture" placeholder="请选择" filterable style="width: 100%">
+                              <el-option v-for="item in frontLinesData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+                            </el-select>
+                          </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                          <el-form-item :prop="'quotationProductList.' +index + '. reverseTexture'" :rules="rules. reverseTexture"
+                                        :inline-message="true" label="背面纹路" class="wid100">
+                            <el-select v-model="product.reverseTexture" placeholder="请选择" filterable style="width: 100%">
+                              <el-option v-for="item in backLinesData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+                            </el-select>
+                          </el-form-item>
+                        </el-col>
+                      </el-row>
+                      <el-row>
 
                         <el-col :span="12">
                           <el-form-item label="净重(kg)" prop="netWeight" class="margin-b-0 wid100">
@@ -286,6 +320,13 @@
                           </el-form-item>
                         </el-col>
                         <el-col :span="12">
+                          <el-form-item label="LOGO工艺包装要求" class="wid100" label-width="200px">
+                            <el-input v-model="product.logoPackRemark" placeholder="请输入" />
+                          </el-form-item>
+                        </el-col>
+                      </el-row>
+                      <el-row>
+                        <el-col :span="12">
                           <el-form-item label="几色印刷" class="wid100">
                             <el-input-number v-model="product.colorCount" style="width: 100%" :precision="0" :controls="false" :min="1"
                                              onmousewheel="return false;" />
@@ -923,6 +964,13 @@ import $bus from "@/bus/index.js";
 const { proxy } = getCurrentInstance();
 const packAskData = computed(() => proxy.useUserStore().allDict["pack_ask"]);
 const foldWayData = computed(() => proxy.useUserStore().allDict["fold_way"]);
+const backLinesData = computed(
+  () => proxy.useUserStore().allDict["back_lines"]
+);
+const frontLinesData = computed(
+  () => proxy.useUserStore().allDict["front_lines"]
+);
+const productTreeData = ref([]);
 const sourceList = ref({
   data: [],
   pagination: {
@@ -1603,6 +1651,12 @@ const getDict = () => {
           x.moldName + `(${x.moldLength}*${x.moldWidth}*${x.moldHeight})`,
       }));
     });
+
+  proxy
+    .post("/productClassify/tree", { parentId: "", name: "", definition: "1" })
+    .then((res) => {
+      productTreeData.value = res;
+    });
 };
 getDict();
 

+ 4 - 4
src/views/customer/addCustomer.vue

@@ -598,7 +598,7 @@ const formConfig = computed(() => {
     {
       type: "input",
       prop: "annualQuantity",
-      label: "要求年订单量",
+      label: "预计年订单量",
       itemWidth: 25,
       itemType: "text",
     },
@@ -936,9 +936,9 @@ const rules = ref({
     { required: true, message: "请输入维系级别", trigger: "blur" },
   ],
   newOld: [{ required: true, message: "请选择新老客户", trigger: "change" }],
-  annualQuantity: [
-    { required: true, message: "请输入要求年订单量", trigger: "blur" },
-  ],
+  // annualQuantity: [
+  //   { required: true, message: "请输入预计年订单量", trigger: "blur" },
+  // ],
   followUpAsk: [{ required: true, message: "请输入回访要求", trigger: "blur" }],
   remind: [{ required: true, message: "请输入提醒设定", trigger: "blur" }],
   createGroupTime: [