Browse Source

JLHWEB: 1、床垫报价,选择床网后由原来不含税出厂价改成返回车间成本
2、优化床垫报价的计算公式显示,报价清单显示

JohnnyChan 1 week ago
parent
commit
57c011f357

+ 70 - 21
JLHWEB/src/views/quote/bednetQuote/components/FormulaItem.vue

@@ -1,5 +1,5 @@
 <template>
-  <RenderFormulaItem :data="data" :fields="fields" />
+  <RenderFormulaItem :data="data" :fields="fields" :ifFold="ifFold" />
 </template>
 
 <script setup lang="tsx" name="BednetFormulaItem">
@@ -19,10 +19,16 @@ interface itemProps {
    * @description 字段对照表
    */
   fields: any[];
+  /**
+   * @description 是否展开公式
+   */
+  ifFold?: boolean;
   // dataValue: any;
 }
 
-const props = defineProps<itemProps>();
+const props = withDefaults(defineProps<itemProps>(), {
+  ifFold: false
+});
 
 const funcFormulaToArray = (formula: string) => {
   if (!formula) return [];
@@ -55,6 +61,8 @@ const funcFormulaToArray = (formula: string) => {
 const RenderVariable = (data: any, rprops: any) => {
   let fieldName = data.slice(1, -1); // 去掉方括号
 
+  let childrenRender = null;
+
   if (rprops.data?.children) {
     let _trgItem = rprops.data.children.find(c => {
       let _label = c.label.replace(/【/g, "[").replace(/】/g, "]").slice(1, -1);
@@ -70,24 +78,16 @@ const RenderVariable = (data: any, rprops: any) => {
         }
       });
 
-      // let _value = isFilterPrice(sumVal?.value) ?? "";
-      let _value = sumVal?.value ?? "";
-
-      return (
+      childrenRender = (
         <>
           <div class="flx-col flx-end formula-wrapper__item formula-wrapper__item-children">
             <div class="formula-wrapper__item-children-inner">
-              <el-tooltip effect="dark" content={"= " + _trgItem.value} placement="top">
-                <div class="formula-wrapper__item-children-label text-secondary-text text-body-c flx-center w-full">
-                  <el-icon>
-                    <InfoFilled />
-                  </el-icon>
-                  {fieldName} = {_value}
-                </div>
-              </el-tooltip>
               <span class="value text-primary-text text-h5-b flx-end-end">
                 (<RenderFormulaItem data={_trgItem} fields={props.fields} />)
               </span>
+              <div class="curly-brace">
+                <div class="triangle-arrow"></div>
+              </div>
             </div>
           </div>
         </>
@@ -149,9 +149,12 @@ const RenderVariable = (data: any, rprops: any) => {
   // let _value = sumVal ? isFilterPrice(sumVal.value) : "无";
   return (
     <>
-      <div class="flx-col flx-end formula-wrapper__item">
-        <span class="label text-secondary-text text-body-c">{fieldName}</span>
-        <span class="value text-primary-text text-h5-b">{_value}</span>
+      <div class="flx-col flx-end">
+        {!rprops.ifFold && childrenRender}
+        <div class="flx-col flx-start formula-wrapper__item">
+          <span class="label text-secondary-text text-body-c">{fieldName}</span>
+          <span class="value text-primary-text text-h5-b">{_value}</span>
+        </div>
       </div>
     </>
   );
@@ -213,10 +216,7 @@ const RenderFormulaItem = (rprops: any) => {
 
   &__item {
     display: flex;
-    padding: 2px 4px 0;
-    // & + & {
-    //   margin-left: 4px;
-    // }
+    padding: 2px 2px 0;
 
     .value {
       color: $color-primary-600;
@@ -237,6 +237,55 @@ const RenderFormulaItem = (rprops: any) => {
       }
     }
 
+    .formula-wrapper__item-children-inner {
+      .curly-brace {
+        position: relative;
+        width: 100%; /* 可以设置为任意宽度 */
+        height: 8px; /* 根据需要调整高度 */
+      }
+
+      .triangle-arrow {
+        position: relative;
+      }
+
+      .triangle-arrow::after {
+        content: "";
+        position: absolute;
+        bottom: -11px;
+        left: calc(50% - -2px);
+        width: 5px;
+        height: 5px;
+        transform-origin: 0 0;
+        transform: rotate(45deg) translateX(-50%);
+        border-right: 2px solid var(--lj-color-text-border);
+        border-bottom: 2px solid var(--lj-color-text-border);
+      }
+
+      .curly-brace::before,
+      .curly-brace::after {
+        content: "";
+        position: absolute;
+        width: calc(50% - 6px);
+        height: calc(100% - 2px);
+      }
+
+      .curly-brace::before {
+        left: 0;
+        top: -1px;
+        border-bottom: solid var(--lj-color-text-border);
+        border-left: solid var(--lj-color-text-border);
+        border-bottom-left-radius: 8px;
+      }
+
+      .curly-brace::after {
+        right: 0;
+        top: -1px;
+        border-bottom: solid var(--lj-color-text-border);
+        border-right: solid var(--lj-color-text-border);
+        border-bottom-right-radius: 8px;
+      }
+    }
+
     &:hover:not(.formula-wrapper__item-children) {
       background-color: $color-primary-400;
       border-radius: $br-sm;

+ 110 - 43
JLHWEB/src/views/quote/mattressQuote/components/AllFormula.vue

@@ -23,19 +23,27 @@
       </div>
     </template>
     <template #default>
-      <template v-if="iforigin">
-        <el-tabs v-model="activeName">
-          <el-tab-pane label="新公式" name="first">
-            <FormulaGroup :data="isNormalFormulas" :fields="isFieldsReplace" />
-          </el-tab-pane>
-          <el-tab-pane label="旧公式" name="second">
-            <FormulaGroup :data="isNormalFormulasOri" :fields="isFieldsReplaceOri" />
-          </el-tab-pane>
-        </el-tabs>
-      </template>
-      <template v-else>
+      <!-- <template v-if="iforigin"> -->
+      <el-tabs v-model="activeName">
+        <el-tab-pane label="新公式" name="first">
+          <FormulaGroup :data="isNormalFormulasPart1" :fields="isFieldsReplace" />
+          <FormulaGroup
+            v-for="(itm, index) in isFieldsReplaceBendet"
+            :key="index"
+            :prefix-label="'床网' + (index + 1)"
+            :data="isNormalFormulasBednet"
+            :fields="itm.replace"
+          />
+          <FormulaGroup :data="isNormalFormulasPart2" :fields="isFieldsReplace" />
+        </el-tab-pane>
+        <el-tab-pane label="旧公式" name="second" v-if="!iforigin">
+          <FormulaGroup :data="isNormalFormulasOri" :fields="isFieldsReplaceOri" />
+        </el-tab-pane>
+      </el-tabs>
+      <!-- </template> -->
+      <!-- <template v-else>
         <FormulaGroup :data="isNormalFormulas" :fields="isFieldsReplace" />
-      </template>
+      </template> -->
     </template>
   </LjDrawer>
 </template>
@@ -69,6 +77,7 @@ const LjDrawerRef = ref();
 const formulaList = ref<any>([]);
 const fieldsReplace = ref<any>([]);
 const formulaListOri = ref<any>([]);
+const formulaListBednet = ref<any>([]);
 const differ = ref<any>([]);
 // const mainData = ref<any>({});
 const formulaMxList = ref<any>([]);
@@ -77,9 +86,58 @@ const dannumValue = ref("标准");
 
 const dannumOptions = ["散单", "小单", "标准", "大单"];
 
+const getFormula = () => {
+  let _formula = formulaList.value
+    .map((item: any) => {
+      let matchArr = formulaList.value.filter((_item: any) => _item.type != 0 && item.value.indexOf(_item.label) > -1);
+
+      if (matchArr.length > 0) {
+        item.children = matchArr;
+      }
+      if (["【车间成本】"].includes(item.label)) item.ifFold = true;
+      return item;
+    })
+    .filter((item: any) => item.type == 0);
+
+  console.log(
+    "return _formula.filter((item: any) => item.type == 0); :>> ",
+    _formula.filter((item: any) => item.type == 0)
+  );
+
+  return _formula.filter((item: any) => item.type == 0);
+};
+
+const isNormalFormulasPart1 = computed(() => {
+  return getFormula().filter((item: any) => ["【车间成本】", "【总床垫车间成本】"].includes(item.label));
+});
+const isNormalFormulasPart2 = computed(() => {
+  return getFormula().filter((item: any) => !["【车间成本】", "【总床垫车间成本】"].includes(item.label));
+});
+
+const isNormalFormulasBednet = computed(() => {
+  let _formula = formulaListBednet.value
+    .map((item: any) => {
+      let matchArr = formulaListBednet.value.filter((_item: any) => _item.type != 0 && item.value.indexOf(_item.label) > -1);
+
+      if (matchArr.length > 0) {
+        item.children = matchArr;
+      }
+      // if (["【车间成本】"].includes(item.label)) item.ifFold = true;
+      return item;
+    })
+    .filter((item: any) => item.type == 0);
+
+  console.log(
+    "isNormalFormulasBednet return _formula.filter((item: any) => item.type == 0); :>> ",
+    _formula.filter((item: any) => item.type == 0)
+  );
+
+  return _formula.filter((item: any) => item.label == "【车间成本】");
+});
+
 const isNormalFormulas = computed(() => {
-  let _formula = formulaList.value.filter((item: any) => item.type == 0);
-  let _formula1 = formulaList.value.filter((item: any) => item.type == 1);
+  // let _formula = formulaList.value.filter((item: any) => item.type == 0);
+  // let _formula1 = formulaList.value.filter((item: any) => item.type == 1);
   // _formula = _formula.map((item: any) => {
   // let _val = fieldsReplace.value.find((_item: any) => _item.label == item.label);
   // if (!_val) {
@@ -97,40 +155,43 @@ const isNormalFormulas = computed(() => {
 
   // return buildTreeArr(_formula);
 
-  _formula = formulaList.value.map((item: any) => {
-    let matchArr = formulaList.value.filter((_item: any) => _item.type != 0 && item.value.indexOf(_item.label) > -1);
+  let _formula = formulaList.value
+    .map((item: any) => {
+      let matchArr = formulaList.value.filter((_item: any) => _item.type != 0 && item.value.indexOf(_item.label) > -1);
 
-    if (matchArr.length > 0) {
-      item.children = matchArr;
-    }
-    return item;
-  });
-  console.log("_formula :>> ", _formula);
-  console.log(
-    "_formula 0:>> ",
-    _formula.filter((item: any) => item.type == 0)
-  );
-  // console.log("isNormalFormulas: >>> ", buildTreeArr(_formula));
-  // return buildTreeArr(_formula);
+      if (matchArr.length > 0) {
+        item.children = matchArr;
+      }
+      if (["【车间成本】"].includes(item.label)) item.ifFold = true;
+      return item;
+    })
+    .filter((item: any) => item.type == 0);
+
+  // let bednetList = [];
+  // let bednetSum = 0
+  // let _val = fieldsReplace.value.find((_item: any) => _item.label == '【总床网车间成本】');
+  // if (_val) {
+  //   bednetSum = _val.value
+  // }
 
-  // let replaceFormula = cloneDeep(_formula.filter((item: any) => item.ifnotreplace == true));
+  // if (bednetSum > 0) {
+  //   let _mattressIdx = _formula.findIndex((item: any) => item.label == '【总床垫车间成本】');
 
-  // _formula = cloneDeep(_formula.filter((item: any) => !item.ifnotreplace));
+  //   let _differL = differ.value.find((item: any) => item.type == getDannumType.value);
+  //   console.log('isNormalFormulas _bednetL :>> ', _differL);
 
-  // replaceFormula.map((item: any) => {
-  //   let index = _formula.findIndex((_item: any) => _item.value.indexOf(item.label) > -1);
-  //   if (index > -1) {
-  //     if (!Object.keys(_formula[index]).includes("children")) {
-  //       _formula[index].children = [];
-  //     }
-  //     item.ifnotreplace = null;
-  //     _formula[index].children.push(item);
-  //   }
-  // });
-  console.log("_formula :>> ", _formula);
-  // console.log("isNormalFormulas: >>> ", buildTreeArr(_formula));
+  //   _differL.
+
+  //   let _bednetFormula = formulaListBednet.value.find(t => t.label == "【车间成本】");
+
+  //   _formula.splice(_mattressIdx, 0, _bednetFormula);
+  // }
+
+  console.log(
+    "return _formula.filter((item: any) => item.type == 0); :>> ",
+    _formula.filter((item: any) => item.type == 0)
+  );
 
-  // return buildTreeArr(_formula);
   return _formula.filter((item: any) => item.type == 0);
 });
 const isNormalFormulasOri = computed(() => {
@@ -160,6 +221,10 @@ const isFieldsReplace = computed(() => {
   let tg = differ.value.find((item: any) => item.type == getDannumType.value);
   return tg.replace;
 });
+const isFieldsReplaceBendet = computed(() => {
+  let tg = differ.value.find((item: any) => item.type == getDannumType.value);
+  return tg.replace_bednet;
+});
 const isFieldsReplaceOri = computed(() => {
   let tg = differ.value.find((item: any) => item.type == getDannumType.value);
   return tg.replace_origin;
@@ -219,9 +284,11 @@ const open = (data: any) => {
   formulaList.value = data.formula;
   fieldsReplace.value = data.replace;
   formulaListOri.value = data.formula_ori;
+  formulaListBednet.value = data.formula_bednet;
   differ.value = data.differ;
   // mainData.value = data;
 
+  console.log("formulaListBednet.value :>> ", formulaListBednet.value);
   // formulaMxList.value;
 
   nextTick(() => {

+ 3 - 1
JLHWEB/src/views/quote/mattressQuote/components/FormulaGroup.vue

@@ -3,6 +3,7 @@
     <div class="summary-wrapper__label-item flx-end-end" :style="{ width: width + 'px' }">
       <div class="summary-box_item flx-col mt-4">
         <div class="flx-1 text-secondary-text text-body-c text-right">
+          {{ prefixLabel }}
           {{ isFilterLabel(item.label) }}
         </div>
         <div class="flx-shrink ml-8 text-right text-h5-b">
@@ -11,7 +12,7 @@
       </div>
     </div>
     <div class="flx-1 overflow-auto">
-      <FormulaItem :data="item" :fields="fields" />
+      <FormulaItem :data="item" :fields="fields" :ifFold="item.ifFold" />
     </div>
   </div>
 </template>
@@ -27,6 +28,7 @@ interface WidgetProps {
    */
   fields: any[];
   width?: number;
+  prefixLabel?: string;
 }
 
 const props = withDefaults(defineProps<WidgetProps>(), {

+ 135 - 59
JLHWEB/src/views/quote/mattressQuote/components/QuoteListNew.vue

@@ -1,5 +1,5 @@
 <template>
-  <LjDrawer ref="LjDrawerRef" size="50%" :class="prefixCls">
+  <LjDrawer ref="LjDrawerRef" size="80%" :class="prefixCls">
     <template #header>
       <div class="flx-1">
         {{ $t("business.detail.quoteList") }}
@@ -13,7 +13,7 @@
           label="展开明细"
           size="small"
           style="margin-left: 20px"
-          @change="toggleRowExpansionAll(tableData2, ifExpandAll)"
+          @change="toggleRowExpansionAll()"
         ></el-checkbox>
       </div>
     </template>
@@ -21,18 +21,28 @@
     <el-descriptions :column="3">
       <template #title>
         <span class="text-body-b">报价日期:</span>
-        <span class="text-body-b" v-if="showData.data.createtime">{{ isFilterTime(showData.data.createtime) }}</span>
+        <span class="text-body-b" v-if="mainData.data.createtime">{{ isFilterTime(mainData.data.createtime) }}</span>
       </template>
-      <template #extra v-if="ifShowOrigin">
-        <span class="text-body-b">报价金额:</span>
-        <span class="text-body-b">{{ isFilterPrice(showData.data.foreign_cost) + isCurrency }}</span>
+      <template #extra>
+        <template v-if="ifShowOrigin">
+          <span class="text-body-b">报价金额:</span>
+          <span class="text-body-b">{{ isFilterPrice(mainData.data.foreign_cost) + isCurrency }}</span>
+        </template>
+        <template v-else>
+          <div class="flx-end">
+            <div class="ml-24" v-for="(itm, idx) in getStaticData" :key="idx">
+              <span class="text-body-b">{{ itm.label }}:</span>
+              <span class="text-body-b">{{ isFilterPrice(itm.value) }}</span>
+            </div>
+          </div>
+        </template>
       </template>
       <el-descriptions-item v-for="(item, idx) in fields" :key="idx" width="80">
         <template #label>
           <span class="text-secondary-text"> {{ item.label }}: </span>
         </template>
         <span class="text-body-m">{{
-          Object.keys(item).includes("value") ? item.value : isFilterPrice(showData.data[item.field])
+          Object.keys(item).includes("value") ? item.value : isFilterPrice(mainData.data[item.field])
         }}</span>
       </el-descriptions-item>
     </el-descriptions>
@@ -47,7 +57,8 @@
         :span-method="objectSpanMethod"
       >
         <el-table-column prop="level" label="类目" />
-        <el-table-column prop="group" label="二级项目" />
+        <el-table-column prop="level1" label="一级项目" />
+        <el-table-column prop="level2" label="二级项目" />
         <template v-if="ifExpandAll">
           <el-table-column prop="label" label="项目" />
           <el-table-column prop="dscrp" label="内容" width="160" />
@@ -180,53 +191,53 @@ const LjDrawerRef = ref();
 const elTableRef = ref();
 const tableRef = ref();
 const mainData = ref<any>({});
-const showData = ref<any>({});
+// const mainData = ref<any>({});
 const ifExpandAll = ref<any>(false);
 
 const isCurrency = computed(() => {
-  return showData.value.data?.moneyrate != 1 ? "美金" : "人民币";
+  return mainData.value.data?.moneyrate != 1 ? "美金" : "人民币";
 });
 
-const tableData2: any[] = [
-  {
-    id: 1,
-    label: "2016-05-02",
-    name: "wangxiaohu",
-    address: "No. 189, Grove St, Los Angeles"
-  },
-  {
-    id: 2,
-    label: "2016-05-04",
-    name: "wangxiaohu",
-    address: "No. 189, Grove St, Los Angeles"
-  },
-  {
-    id: 3,
-    label: "2016-05-01",
-    name: "wangxiaohu",
-    address: "No. 189, Grove St, Los Angeles",
-    children: [
-      {
-        id: 31,
-        label: "2016-05-01",
-        name: "wangxiaohu",
-        address: "No. 189, Grove St, Los Angeles"
-      },
-      {
-        id: 32,
-        label: "2016-05-01",
-        name: "wangxiaohu",
-        address: "No. 189, Grove St, Los Angeles"
-      }
-    ]
-  },
-  {
-    id: 4,
-    label: "2016-05-03",
-    name: "wangxiaohu",
-    address: "No. 189, Grove St, Los Angeles"
-  }
-];
+// const tableData2: any[] = [
+//   {
+//     id: 1,
+//     label: "2016-05-02",
+//     name: "wangxiaohu",
+//     address: "No. 189, Grove St, Los Angeles"
+//   },
+//   {
+//     id: 2,
+//     label: "2016-05-04",
+//     name: "wangxiaohu",
+//     address: "No. 189, Grove St, Los Angeles"
+//   },
+//   {
+//     id: 3,
+//     label: "2016-05-01",
+//     name: "wangxiaohu",
+//     address: "No. 189, Grove St, Los Angeles",
+//     children: [
+//       {
+//         id: 31,
+//         label: "2016-05-01",
+//         name: "wangxiaohu",
+//         address: "No. 189, Grove St, Los Angeles"
+//       },
+//       {
+//         id: 32,
+//         label: "2016-05-01",
+//         name: "wangxiaohu",
+//         address: "No. 189, Grove St, Los Angeles"
+//       }
+//     ]
+//   },
+//   {
+//     id: 4,
+//     label: "2016-05-03",
+//     name: "wangxiaohu",
+//     address: "No. 189, Grove St, Los Angeles"
+//   }
+// ];
 
 const treeConfig = reactive<any>({
   transform: true,
@@ -260,7 +271,7 @@ const setOriginData = () => {
       _data.data.foreign_cost = _rp.value;
     }
   }
-  showData.value = _data;
+  mainData.value = _data;
   wf_retrieve_qingdan(_data, !ifShowOrigin.value, ifExpandAll.value);
 };
 
@@ -270,7 +281,7 @@ const handleOpenOriginQuote = () => {
   console.log("handleOpenOriginQuote>>>>>  ", mainData.value);
   setOriginData();
 };
-const toggleRowExpansionAll = (data, isExpansion) => {
+const toggleRowExpansionAll = () => {
   wf_retrieve_qingdan(mainData.value, !ifShowOrigin.value, ifExpandAll.value);
   // data.forEach(async item => {
   //   // const elTableRef = await getElTableExpose()
@@ -365,7 +376,7 @@ const show = (params: any, originReplace?: any) => {
     setOriginData();
   }
   mainData.value = cloneDeep(params);
-  showData.value = cloneDeep(params);
+  // showData.value = cloneDeep(params);
   wf_retrieve_qingdan(params, !ifShowOrigin.value, ifExpandAll.value);
 
   LjDrawerRef.value.show();
@@ -382,7 +393,7 @@ const isFilterTime = time => {
 
 const fields = computed(() => {
   if (!ifShowOrigin.value) {
-    const { data } = showData.value;
+    const { data } = mainData.value;
 
     let _enum = enumMap.value.get("mattresstypeid");
     let result = "";
@@ -438,6 +449,62 @@ const fields = computed(() => {
   }
 });
 
+const statisticData = ref([
+  {
+    label: "【散单金额】",
+    value: 0,
+    origin: 0,
+    key: "【部门含税价】",
+    type: 1
+  },
+  {
+    label: "【小单金额】",
+    value: 0,
+    origin: 0,
+    key: "【部门含税价】",
+    type: 4
+  },
+  {
+    label: "【标准金额】",
+    value: 0,
+    origin: 0,
+    key: "【部门含税价】",
+    type: 2
+  },
+  {
+    label: "【大单金额】",
+    value: 0,
+    origin: 0,
+    key: "【部门含税价】",
+    type: 3
+  }
+]);
+
+const getStaticData = computed(() => {
+  let arr = statisticData.value.filter(o => {
+    // let tg = val.find(item => item.label === o.key);
+
+    let tg = mainData.value.differ.find(item => item.type === o.type);
+    if (tg) {
+      let tgRl = tg.replace.find(item => item.label === o.key);
+      o.label = o.label.replace("【", "").replace("】", "");
+      o.value = tgRl ? tgRl.value : 0;
+      console.log("tgRl,  :>> ", props.iforigin, tgRl);
+      if (props.iforigin) {
+        let tgori = tg.replace_origin.find(item => item.label === o.key);
+        o.origin = tgori ? tgori.value : 0;
+      }
+    }
+    // if (o?.power) {
+    //   return o.power();
+    // } else {
+    return true;
+    // }
+  });
+
+  return arr;
+});
+
 const getSummaries = (param: any) => {
   const { columns, data } = param;
   console.log("getSummaries param :>> ", param);
@@ -470,7 +537,9 @@ const getSummaries = (param: any) => {
 const objectSpanMethod = (data: any) => {
   const { row, column, rowIndex, columnIndex } = data;
   // console.log("objectSpanMethod row,column, rowIndex,columnIndex :>> ", data);
-  if (["level", "group", "label"].includes(column.property)) {
+  let columnsName = ["level", "level1", "label"];
+  ifExpandAll.value && columnsName.push("level2");
+  if (columnsName.includes(column.property)) {
     let rowspan = 1;
     let currentVal = row[column.property];
     let lastVal = "";
@@ -479,13 +548,20 @@ const objectSpanMethod = (data: any) => {
       lastVal = tableData.value[rowIndex - 1][column.property];
     }
 
-    console.log("objectSpanMethod lastVal rowIndex :>> ", lastVal, rowIndex, lastVal || rowIndex == 0);
-    if (currentVal && (lastVal || rowIndex == 0)) {
+    console.log(
+      "objectSpanMethod lastVal rowIndex :>> ",
+      lastVal,
+      currentVal,
+      rowIndex,
+      lastVal || rowIndex == 0,
+      currentVal && (lastVal || rowIndex == 0)
+    );
+    if (currentVal) {
       if (lastVal != currentVal) {
         // 计算合并行数
         let _span = 0;
         for (let i = rowIndex + 1; i < tableData.value.length; i++) {
-          console.log("tableData.value[i].label :>> ", tableData.value[i][column.property], currentVal, _span);
+          // console.log("tableData.value[i].label :>> ", tableData.value[i][column.property], currentVal, _span);
           if (tableData.value[i][column.property] == currentVal) {
             _span++;
           } else {
@@ -497,7 +573,7 @@ const objectSpanMethod = (data: any) => {
         rowspan = 0;
       }
     }
-    console.log("rowspan _span :>> ", lastVal, currentVal, rowspan);
+    // console.log("rowspan _span :>> ", lastVal, currentVal, rowspan);
 
     return {
       rowspan,

+ 1 - 0
JLHWEB/src/views/quote/mattressQuote/detail.vue

@@ -1599,6 +1599,7 @@ const gotoShowFormula = () => {
     formula: cmpFormulas.value,
     replace: cmpFormulaReplace.value,
     formula_ori: cmpFormulasOri.value,
+    formula_bednet: cmpFormulasBednet.value,
     differ: cmpDiffer.value
   });
 };

+ 286 - 131
JLHWEB/src/views/quote/mattressQuote/hooks/cpQuote.ts

@@ -8,7 +8,6 @@ import { useUserStore } from "@/stores/modules/user";
 import { ElButton, ElMessage, ElPopconfirm, ElMessageBox } from "element-plus";
 import { CommonDynamicSelect } from "@/api/modules/common";
 import { useHooks } from "@/views/quote/bednetQuote/hooks/index";
-import { use } from "vxe-table";
 
 interface WidgetTableItem {
   label: string;
@@ -132,19 +131,32 @@ export const useHooksCpQuote = (t?: any) => {
     return formatAmount3({ val: data });
   };
 
-  const wf_retrieve_qingdan_bednet = async (data: any, index: any) => {
+  const setResultData = (target: any, label: string, value: any) => {
+    let result = cloneDeep(target);
+    result.label = label;
+    result.costamt = value;
+    result.costamt_1 = value;
+    result.costamt_2 = value;
+    result.costamt_3 = value;
+    result.costamt_4 = value;
+    return result;
+  };
+
+  const wf_retrieve_qingdan_bednet = async (data: any, index: any, isNew = false) => {
     const { getDataMxAdd, getDataMxSpring, dataCallback } = useHooks(t);
+    const bednet = data.list[0];
     let s_bednet_qingdan = [];
     let bednet_qingdan_item = [];
     let default_bednet_qingdan = {
       level: "车间成本",
-      group: `床网${index + 1}-总材料成本`
+      level1: "总床网车间成本",
+      level2: `床网${index + 1} - 总材料成本`
     };
 
     // let bednetMxData = [];
     // let bednetMxSpringData = [];
     console.log("wf_retrieve_qingdan_bednet data :>> ", data);
-    let res = await getDataMxAdd({ arg_bednetid: data.list[0].bednetid });
+    let res = await getDataMxAdd({ arg_bednetid: bednet.bednetid });
     let mxResult = dataCallback(res);
     console.log("wf_retrieve_qingdan_bednet mxResult :>> ", mxResult);
 
@@ -166,7 +178,7 @@ export const useHooksCpQuote = (t?: any) => {
       ls_填充海绵物料 = "";
     let item: any = {};
 
-    let res2 = await getDataMxSpring({ arg_bednetid: data.list[0].bednetid });
+    let res2 = await getDataMxSpring({ arg_bednetid: bednet.bednetid });
     let springResult = dataCallback(res2);
     console.log("springResult :>> ", springResult);
 
@@ -179,7 +191,7 @@ export const useHooksCpQuote = (t?: any) => {
     console.log("bednettypeid enumItem :>> ", enumItem);
     let _pznamemx = "";
     if (enumItem) {
-      _pznamemx = enumItem.enum.find((item: any) => item.value == data.list[0].bednettypeid)?.label;
+      _pznamemx = enumItem.enum.find((item: any) => item.value == bednet.bednettypeid)?.label;
     }
 
     //床网类型
@@ -194,11 +206,11 @@ export const useHooksCpQuote = (t?: any) => {
     //规格
     s_bednet_qingdan.push({
       pzname: "规格",
-      pznamemx: data.list[0].mattress_width + "*" + data.list[0].mattress_length + "*" + data.list[0].mattress_height,
+      pznamemx: bednet.mattress_width + "*" + bednet.mattress_length + "*" + bednet.mattress_height,
       amt: 0,
       useqty: 0
     });
-    ls_规格 = data.list[0].mattress_width + "*" + data.list[0].mattress_length;
+    ls_规格 = bednet.mattress_width + "*" + bednet.mattress_length;
 
     //排列
     s_bednet_qingdan.push({
@@ -229,6 +241,24 @@ export const useHooksCpQuote = (t?: any) => {
     if (Number(mxResult.list[0].if_part) == 0) {
       item.pznamemx = mxResult.list[0].springname;
       ls_弹簧 = mxResult.list[0].springname;
+
+      let result = cloneDeep(default_bednet_qingdan);
+      result.label = "弹簧";
+      result.dscrp = ls_弹簧;
+      result.costamt = bednet.spring_mtrl_cost;
+      result.costamt_1 = isFilterPrice(
+        formatCutNumber({ val: floatMul(mxResult.list[0].spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum1_rate) })
+      );
+      result.costamt_2 = isFilterPrice(
+        formatCutNumber({ val: floatMul(mxResult.list[0].spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum2_rate) })
+      );
+      result.costamt_3 = isFilterPrice(
+        formatCutNumber({ val: floatMul(mxResult.list[0].spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum3_rate) })
+      );
+      result.costamt_4 = isFilterPrice(
+        formatCutNumber({ val: floatMul(mxResult.list[0].spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum4_rate) })
+      );
+      bednet_qingdan_item.push(result);
     } else {
       let ls_left, ls_right, ls_t_temp, ls_t_name;
       if (springResult.list.length > 0) {
@@ -253,28 +283,28 @@ export const useHooksCpQuote = (t?: any) => {
 
             console.log("ls_t_temp :>> ", ls_t_temp);
           }
+          let result = cloneDeep(default_bednet_qingdan);
+          result.label = "弹簧";
+          result.dscrp = t.springname;
+          result.costamt = t.spring_mtrl_cost;
+          result.costamt_1 = isFilterPrice(
+            formatCutNumber({ val: floatMul(t.spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum1_rate) })
+          );
+          result.costamt_2 = isFilterPrice(
+            formatCutNumber({ val: floatMul(t.spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum2_rate) })
+          );
+          result.costamt_3 = isFilterPrice(
+            formatCutNumber({ val: floatMul(t.spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum3_rate) })
+          );
+          result.costamt_4 = isFilterPrice(
+            formatCutNumber({ val: floatMul(t.spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum4_rate) })
+          );
+          bednet_qingdan_item.push(result);
         });
       }
       ls_弹簧 = ls_t_temp + "/" + ls_right;
     }
     s_bednet_qingdan.push(item);
-    let result = cloneDeep(default_bednet_qingdan);
-    result.label = "弹簧";
-    result.dscrp = ls_弹簧;
-    result.costamt = mxResult.list[0].spring_mtrl_cost;
-    result.costamt_1 = isFilterPrice(
-      formatCutNumber({ val: floatMul(mxResult.list[0].spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum1_rate) })
-    );
-    result.costamt_2 = isFilterPrice(
-      formatCutNumber({ val: floatMul(mxResult.list[0].spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum2_rate) })
-    );
-    result.costamt_3 = isFilterPrice(
-      formatCutNumber({ val: floatMul(mxResult.list[0].spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum3_rate) })
-    );
-    result.costamt_4 = isFilterPrice(
-      formatCutNumber({ val: floatMul(mxResult.list[0].spring_mtrl_cost ?? 0, 1 + mxResult.list[0].dannum4_rate) })
-    );
-    bednet_qingdan_item.push(result);
     console.log("s_bednet_qingdan ls_弹簧:>> ", ls_弹簧);
 
     //多区弹簧/高度/口径/中心直径/圈数
@@ -370,7 +400,7 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    console.log("Number(data.list[0].fabrics1_mtrlid) :>> ", Number(mxResult.list[0].fabrics1_mtrlid), mxResult.list[0]);
+    console.log("Number(bednet.fabrics1_mtrlid) :>> ", Number(mxResult.list[0].fabrics1_mtrlid), mxResult.list[0]);
     if (Number(mxResult.list[0].fabrics1_mtrlid) > 0) {
       let enumItem = mxResult.tableinfo.columns.find((item: any) => item.field == "fabrics1_mtrlid");
       let enumItem_enum = null;
@@ -411,18 +441,18 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].felt_mtrlid) > 0) {
-      item.pznamemx = data.list[0].mtrl_felt_name;
-      ls_上垫层物料 = data.list[0].mtrl_felt_name;
+    if (Number(bednet.felt_mtrlid) > 0) {
+      item.pznamemx = bednet.mtrl_felt_name;
+      ls_上垫层物料 = bednet.mtrl_felt_name;
 
       let result = cloneDeep(default_bednet_qingdan);
       result.label = "上垫层物料";
       result.dscrp = ls_上垫层物料;
-      result.costamt = data.list[0].felt_mtrl_cost;
-      result.costamt_1 = data.list[0].felt_mtrl_cost;
-      result.costamt_2 = data.list[0].felt_mtrl_cost;
-      result.costamt_3 = data.list[0].felt_mtrl_cost;
-      result.costamt_4 = data.list[0].felt_mtrl_cost;
+      result.costamt = bednet.felt_mtrl_cost;
+      result.costamt_1 = bednet.felt_mtrl_cost;
+      result.costamt_2 = bednet.felt_mtrl_cost;
+      result.costamt_3 = bednet.felt_mtrl_cost;
+      result.costamt_4 = bednet.felt_mtrl_cost;
       bednet_qingdan_item.push(result);
     } else {
       ls_上垫层物料 = "";
@@ -436,18 +466,18 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].felt_x_mtrlid) > 0) {
-      item.pznamemx = data.list[0].mtrl_felt_x_name;
-      ls_下垫层物料 = data.list[0].mtrl_felt_x_name;
+    if (Number(bednet.felt_x_mtrlid) > 0) {
+      item.pznamemx = bednet.mtrl_felt_x_name;
+      ls_下垫层物料 = bednet.mtrl_felt_x_name;
 
       let result = cloneDeep(default_bednet_qingdan);
       result.label = "下垫层物料";
       result.dscrp = ls_下垫层物料;
-      result.costamt = data.list[0].felt_mtrl_x_cost;
-      result.costamt_1 = data.list[0].felt_mtrl_x_cost;
-      result.costamt_2 = data.list[0].felt_mtrl_x_cost;
-      result.costamt_3 = data.list[0].felt_mtrl_x_cost;
-      result.costamt_4 = data.list[0].felt_mtrl_x_cost;
+      result.costamt = bednet.felt_mtrl_x_cost;
+      result.costamt_1 = bednet.felt_mtrl_x_cost;
+      result.costamt_2 = bednet.felt_mtrl_x_cost;
+      result.costamt_3 = bednet.felt_mtrl_x_cost;
+      result.costamt_4 = bednet.felt_mtrl_x_cost;
       bednet_qingdan_item.push(result);
     } else {
       ls_下垫层物料 = "";
@@ -497,18 +527,18 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (data.list[0].mtrl_sponge_name) {
-      item.pznamemx = data.list[0].mtrl_sponge_name;
-      ls_海绵包边物料 = data.list[0].sponge_thickness + "分" + data.list[0].sponge_height + "高" + data.list[0].mtrl_sponge_name;
+    if (bednet.mtrl_sponge_name) {
+      item.pznamemx = bednet.mtrl_sponge_name;
+      ls_海绵包边物料 = bednet.sponge_thickness + "分" + bednet.sponge_height + "高" + bednet.mtrl_sponge_name;
 
       let result = cloneDeep(default_bednet_qingdan);
-      result.label = "海绵包边物料:" + data.list[0].mtrl_sponge_name;
+      result.label = "海绵包边物料:" + bednet.mtrl_sponge_name;
       result.dscrp = ls_海绵包边物料;
-      result.costamt = data.list[0].sponge_mtrl_cost;
-      result.costamt_1 = data.list[0].sponge_mtrl_cost;
-      result.costamt_2 = data.list[0].sponge_mtrl_cost;
-      result.costamt_3 = data.list[0].sponge_mtrl_cost;
-      result.costamt_4 = data.list[0].sponge_mtrl_cost;
+      result.costamt = bednet.sponge_mtrl_cost;
+      result.costamt_1 = bednet.sponge_mtrl_cost;
+      result.costamt_2 = bednet.sponge_mtrl_cost;
+      result.costamt_3 = bednet.sponge_mtrl_cost;
+      result.costamt_4 = bednet.sponge_mtrl_cost;
       bednet_qingdan_item.push(result);
     }
     s_bednet_qingdan.push(item);
@@ -520,8 +550,8 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].sponge_thickness) > 0) {
-      item.pznamemx = data.list[0].sponge_thickness + "分";
+    if (Number(bednet.sponge_thickness) > 0) {
+      item.pznamemx = bednet.sponge_thickness + "分";
     }
     s_bednet_qingdan.push(item);
 
@@ -532,19 +562,18 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (data.list[0].mtrl_sponge_tc_name) {
-      item.pznamemx = data.list[0].mtrl_sponge_tc_name;
-      ls_填充海绵物料 =
-        data.list[0].sponge_tc_thickness + "分" + data.list[0].sponge_tc_height + "高" + data.list[0].mtrl_sponge_tc_name;
+    if (bednet.mtrl_sponge_tc_name) {
+      item.pznamemx = bednet.mtrl_sponge_tc_name;
+      ls_填充海绵物料 = bednet.sponge_tc_thickness + "分" + bednet.sponge_tc_height + "高" + bednet.mtrl_sponge_tc_name;
 
       let result = cloneDeep(default_bednet_qingdan);
-      result.label = "填充海绵物料:" + data.list[0].mtrl_sponge_tc_name;
+      result.label = "填充海绵物料:" + bednet.mtrl_sponge_tc_name;
       result.dscrp = ls_填充海绵物料;
-      result.costamt = data.list[0].sponge_mtrl_tc_cost;
-      result.costamt_1 = data.list[0].sponge_mtrl_tc_cost;
-      result.costamt_2 = data.list[0].sponge_mtrl_tc_cost;
-      result.costamt_3 = data.list[0].sponge_mtrl_tc_cost;
-      result.costamt_4 = data.list[0].sponge_mtrl_tc_cost;
+      result.costamt = bednet.sponge_mtrl_tc_cost;
+      result.costamt_1 = bednet.sponge_mtrl_tc_cost;
+      result.costamt_2 = bednet.sponge_mtrl_tc_cost;
+      result.costamt_3 = bednet.sponge_mtrl_tc_cost;
+      result.costamt_4 = bednet.sponge_mtrl_tc_cost;
       bednet_qingdan_item.push(result);
     } else {
       ls_填充海绵物料 = "";
@@ -558,9 +587,8 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].sponge_tc_thickness) > 0) {
-      item.pznamemx =
-        data.list[0].sponge_tc_thickness + "分厚," + data.list[0].sponge_tc_height + "分高," + data.list[0].mtrl_sponge_tc_name;
+    if (Number(bednet.sponge_tc_thickness) > 0) {
+      item.pznamemx = bednet.sponge_tc_thickness + "分厚," + bednet.sponge_tc_height + "分高," + bednet.mtrl_sponge_tc_name;
     }
     s_bednet_qingdan.push(item);
 
@@ -571,8 +599,8 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (data.list[0].mtrl_edge_name) {
-      item.pznamemx = data.list[0].mtrl_edge_name;
+    if (bednet.mtrl_edge_name) {
+      item.pznamemx = bednet.mtrl_edge_name;
     }
     s_bednet_qingdan.push(item);
 
@@ -583,8 +611,8 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].edge_height) > 0) {
-      item.pznamemx = data.list[0].edge_height + "高";
+    if (Number(bednet.edge_height) > 0) {
+      item.pznamemx = bednet.edge_height + "高";
     }
     s_bednet_qingdan.push(item);
 
@@ -595,7 +623,7 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].if_rsorwa) > 0) {
+    if (Number(bednet.if_rsorwa) > 0) {
       item.pznamemx = "有";
     }
     s_bednet_qingdan.push(item);
@@ -607,7 +635,7 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].if_sponge_drilling) > 0) {
+    if (Number(bednet.if_sponge_drilling) > 0) {
       item.pznamemx = "有";
     }
     s_bednet_qingdan.push(item);
@@ -619,10 +647,10 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    console.log("ls_弹叉  bf:>> ", ls_弹叉, data.list[0].fork_qty);
-    if (Number(data.list[0].fork_qty) > 0) {
-      item.pznamemx = data.list[0].fork_qty + "只弹叉";
-      ls_弹叉 = data.list[0].fork_qty + "只弹叉";
+    console.log("ls_弹叉  bf:>> ", ls_弹叉, bednet.fork_qty);
+    if (Number(bednet.fork_qty) > 0) {
+      item.pznamemx = bednet.fork_qty + "只弹叉";
+      ls_弹叉 = bednet.fork_qty + "只弹叉";
     }
     console.log("ls_弹叉 :>> ", ls_弹叉);
     s_bednet_qingdan.push(item);
@@ -634,7 +662,7 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].if_15strip) > 0) {
+    if (Number(bednet.if_15strip) > 0) {
       item.pznamemx = "有";
     }
     s_bednet_qingdan.push(item);
@@ -646,8 +674,8 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].snake_wire_diameter) > 0) {
-      item.pznamemx = data.list[0].snake_wire_diameter;
+    if (Number(bednet.snake_wire_diameter) > 0) {
+      item.pznamemx = bednet.snake_wire_diameter;
     }
     s_bednet_qingdan.push(item);
 
@@ -658,8 +686,8 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].pocket_around_row) > 0) {
-      item.pznamemx = data.list[0].pocket_around_row + "排";
+    if (Number(bednet.pocket_around_row) > 0) {
+      item.pznamemx = bednet.pocket_around_row + "排";
     }
     s_bednet_qingdan.push(item);
 
@@ -670,8 +698,8 @@ export const useHooksCpQuote = (t?: any) => {
       amt: 0,
       useqty: 0
     };
-    if (Number(data.list[0].if_pocket_around) > 0) {
-      item.pznamemx = data.list[0].pocket_around_springname;
+    if (Number(bednet.if_pocket_around) > 0) {
+      item.pznamemx = bednet.pocket_around_springname;
     }
     s_bednet_qingdan.push(item);
 
@@ -680,8 +708,8 @@ export const useHooksCpQuote = (t?: any) => {
     //床网类型丨规格丨排列丨高度丨单/多区丨线径丨边铁丨海绵包边丨四周加硬丨弹叉丨底面物料
     let ls_temp_name = s_bednet_qingdan[1].pznamemx + "丨" + s_bednet_qingdan[3].pznamemx + "丨" + s_bednet_qingdan[4].pznamemx; // + s_bednet_qingdan[3].pznamemx + '丨'
 
-    if (Number(data.list[0].if_part) > 0) {
-      ls_temp_name += "丨" + data.list[0].duo_qv_str + "区";
+    if (Number(bednet.if_part) > 0) {
+      ls_temp_name += "丨" + bednet.duo_qv_str + "区";
     } else {
       if (s_bednet_qingdan[5].pznamemx != "") {
         ls_temp_name += "丨" + "单区";
@@ -690,8 +718,8 @@ export const useHooksCpQuote = (t?: any) => {
       }
     }
 
-    if (Number(data.list[0].if_part) > 0) {
-      ls_区区 = data.list[0].duo_qv_str + "区";
+    if (Number(bednet.if_part) > 0) {
+      ls_区区 = bednet.duo_qv_str + "区";
     } else {
       ls_区区 = "单区";
     }
@@ -752,8 +780,8 @@ export const useHooksCpQuote = (t?: any) => {
       ls_temp_name += "丨" + s_bednet_qingdan[21].pzname + +s_bednet_qingdan[21].pznamemx;
     }
 
-    console.log("wfqingdan data.list[0].if_jb :>> ", data, data.list[0].if_jb);
-    ls_卷包 = Number(data.list[0].if_jb) > 0 ? "卷包" : "";
+    console.log("wfqingdan data.list[0].if_jb :>> ", data, bednet.if_jb);
+    ls_卷包 = Number(bednet.if_jb) > 0 ? "卷包" : "";
 
     //20231128修改
     //名称:	袋装网丨单区丨卷包丨90*180丨12*31丨20高丨2.0/16.0/5.70/6.70/5.00丨2条无边铁丨底面75g白色无纺布丨上垫层1张1100g黑毡丨下垫层物料1张100g黑毡丨入袋70g白色无纺布丨四周加硬2排丨10弹叉丨8.分20高HA3070海绵包边丨8.分20高HA3070填充海绵|erp编码:
@@ -795,9 +823,57 @@ export const useHooksCpQuote = (t?: any) => {
 
     s_bednet_qingdan[0].pzname = "床网名称";
     s_bednet_qingdan[0].pznamemx = ls_temp_name;
-    s_bednet_qingdan[0].amt = data.list[0].nottax_factory_cost;
+    s_bednet_qingdan[0].amt = bednet.nottax_factory_cost;
     s_bednet_qingdan[0].useqty = 0;
 
+    // 新公式补充显示旧公式缺失的明细
+    if (isNew) {
+      //蛇线材料成本
+      if (bednet.snake_wire_mtrl_cost > 0) {
+        bednet_qingdan_item.push(setResultData(default_bednet_qingdan, "蛇线材料成本", bednet.snake_wire_mtrl_cost));
+      }
+
+      //四周口袋弹簧成本
+      if (bednet.pocket_around_spring_cost > 0) {
+        bednet_qingdan_item.push(setResultData(default_bednet_qingdan, "四周口袋弹簧成本", bednet.pocket_around_spring_cost));
+      }
+
+      //四周口袋无纺布成本
+      if (bednet.pocket_around_fabrics_cost > 0) {
+        bednet_qingdan_item.push(setResultData(default_bednet_qingdan, "四周口袋无纺布成本", bednet.pocket_around_fabrics_cost));
+      }
+
+      //胶水材料成本
+      if (bednet.pocket_around_fabrics_cost > 0) {
+        bednet_qingdan_item.push(setResultData(default_bednet_qingdan, "胶水材料成本", bednet.pocket_around_fabrics_cost));
+      }
+
+      //C钉/夹码材料
+      if (bednet.cnail_mtrl_cost > 0) {
+        bednet_qingdan_item.push(setResultData(default_bednet_qingdan, "C钉/夹码材料", bednet.cnail_mtrl_cost));
+      }
+
+      //封边材料成本
+      if (bednet.edge_mtrl_cost > 0) {
+        bednet_qingdan_item.push(setResultData(default_bednet_qingdan, "封边材料成本", bednet.edge_mtrl_cost));
+      }
+
+      //弹叉材料成本
+      if (bednet.fork_mtrl_cost > 0) {
+        bednet_qingdan_item.push(setResultData(default_bednet_qingdan, "弹叉材料成本", bednet.fork_mtrl_cost));
+      }
+
+      //胶条/包角材料成本
+      if (bednet.rsorwa_mtrl_cost > 0) {
+        bednet_qingdan_item.push(setResultData(default_bednet_qingdan, "胶条/包角材料成本", bednet.rsorwa_mtrl_cost));
+      }
+
+      //包装总成本
+      if (bednet.packet_mtrl_cost > 0) {
+        bednet_qingdan_item.push(setResultData(default_bednet_qingdan, "包装总成本", bednet.packet_mtrl_cost));
+      }
+    }
+
     state.bednet_qingdan.push(bednet_qingdan_item);
 
     console.log("s_bednet_qingdan :>> ", s_bednet_qingdan);
@@ -805,7 +881,7 @@ export const useHooksCpQuote = (t?: any) => {
     return s_bednet_qingdan;
   };
 
-  const f_get_bednet_qingdan = async (bednetid: any, index: any) => {
+  const f_get_bednet_qingdan = async (bednetid: any, index: any, isNew = false) => {
     if (!Number(bednetid)) return [];
     let _params = {
       dsname: "web_bednet_define",
@@ -847,7 +923,7 @@ export const useHooksCpQuote = (t?: any) => {
       throw new Error(_data.bednetcode + ", pricelistid错误!");
     }
 
-    let rtStr = await wf_retrieve_qingdan_bednet(result, index);
+    let rtStr = await wf_retrieve_qingdan_bednet(result, index, isNew);
 
     //带上erpcode?
     return rtStr;
@@ -858,34 +934,32 @@ export const useHooksCpQuote = (t?: any) => {
    * @param data
    */
   const set_new_table_data = (params: any) => {
-    let { data, mxdata, fabricMx, formulakindenum, enumMap } = params;
+    let { data, mxdata, formula, fabricMx, formulakindenum, enumMap } = params;
 
     console.log("set_new_table_data params :>> ", params);
-
     let arr = [];
 
     /**
      * @description 车间成本
      */
-    arr = arr.concat(init_new_formula_item(params, "【车间成本】", "床垫-"));
-
-    let cushionsItem = mxdata.find((itm: any) => itm.field == "cushions");
-    if (cushionsItem) {
-      if (cushionsItem.data.bednet.length > 0) {
-        cushionsItem.data.bednet.map((itm: any, index: any) => {
-          if (itm.mtrlid > 0) {
-            arr = arr.concat(
-              init_new_formula_item(
-                { ...params, formula: params.formula_bednet },
-                "【车间成本】",
-                `床网${index + 1}-`,
-                "replace_bednet"
-              )
-            );
-          }
-        });
-      }
-    }
+    arr = arr.concat(init_new_formula_item(params, "【车间成本】"));
+    // let cushionsItem = mxdata.find((itm: any) => itm.field == "cushions");
+    // if (cushionsItem) {
+    //   if (cushionsItem.data.bednet.length > 0) {
+    //     cushionsItem.data.bednet.map((itm: any, index: any) => {
+    //       if (itm.mtrlid > 0) {
+    //         arr = arr.concat(
+    //           init_new_formula_item(
+    //             { ...params, formula: params.formula_bednet },
+    //             "【车间成本】",
+    //             `床网${index + 1}-`,
+    //             "replace_bednet"
+    //           )
+    //         );
+    //       }
+    //     });
+    //   }
+    // }
     // arr = arr.concat(
     //   init_new_formula_item({ ...params, formula: params.formula_bednet }, "【车间成本】", "床网-", "replace_bednet")
     // );
@@ -899,13 +973,19 @@ export const useHooksCpQuote = (t?: any) => {
     return arr;
   };
 
-  const init_new_formula_item = ({ formula, differ, dannum_type }: any, target: string, prefix = "", replaceKey = "replace") => {
+  const init_new_formula_item = (
+    { formula, differ, dannum_type, formula_bednet, mxdata }: any,
+    target: string,
+    prefix = "",
+    replaceKey = "replace"
+  ) => {
     let formulaItem = formula.find((item: any) => item.label == target);
     console.log("init_new_formula_item formulaItem :>> ", formulaItem);
     let arr = [];
     let item = {
       level: target.replace("【", "").replace("】", ""),
-      group: "",
+      level1: "",
+      level2: "",
       label: "",
       dscrp: "",
       qty: "",
@@ -925,7 +1005,8 @@ export const useHooksCpQuote = (t?: any) => {
         formulaItemArr.map(fName => {
           let _item = {
             level: target.replace("【", "").replace("】", ""),
-            group: prefix + fName.replace("【", "").replace("】", ""),
+            level1: prefix + fName.replace("【", "").replace("】", ""),
+            level2: "",
             label: "",
             dscrp: "",
             qty: "",
@@ -937,6 +1018,71 @@ export const useHooksCpQuote = (t?: any) => {
             useqty: "",
             price: ""
           };
+
+          if (target == "【车间成本】") {
+            /**
+             * @description 总床垫车间成本明细
+             */
+            if (fName.indexOf("床垫车间成本") > -1) {
+              let _formulaItem = formula.find((item: any) => item.label == fName);
+              if (_formulaItem) {
+                let _formulaItemArr = _formulaItem.value.match(reg);
+                if (_formulaItemArr.length) {
+                  console.log("formulaMattressMx _formulaItemArr:>> ", _formulaItem, _formulaItemArr);
+
+                  _formulaItemArr.map(_fName => {
+                    let _itemMattress = cloneDeep(_item);
+                    _itemMattress.level2 = _fName.replace("【", "").replace("】", "");
+
+                    differ.map((itm: any) => {
+                      let _valueReplace = itm[replaceKey].find((t: any) => t.label == _fName);
+                      _itemMattress["costamt_" + itm.type] = isFilterPrice(_valueReplace?.value ?? 0);
+                      if (dannum_type == itm.type) {
+                        _itemMattress.costamt = isFilterPrice(_valueReplace?.value ?? 0);
+                      }
+                    });
+                    arr.push(_itemMattress);
+                  });
+                }
+              }
+            } else if (fName.indexOf("床网车间成本") > -1) {
+              /**
+               * @description 总床网车间成本明细
+               */
+              let _formulaBendnet = formula_bednet.find((item: any) => item.label == target);
+              if (_formulaBendnet) {
+                let _formulaItemArr = _formulaBendnet.value.match(reg);
+                if (_formulaItemArr.length) {
+                  console.log("formulaMattressMx _formulaItemArr :>> ", _formulaItemArr);
+                  let cushionsItem = mxdata.find((itm: any) => itm.field == "cushions");
+                  if (cushionsItem) {
+                    if (cushionsItem.data.bednet.length > 0) {
+                      cushionsItem.data.bednet
+                        .filter(item => item.mtrlid > 0)
+                        .map((o: any, index: any) => {
+                          _formulaItemArr.map(_fName => {
+                            let _itemBednet = cloneDeep(_item);
+                            _itemBednet.level2 = `床网${index + 1} - ` + _fName.replace("【", "").replace("】", "");
+
+                            differ.map((itm: any) => {
+                              let _valueReplace = itm.replace_bednet[index][replaceKey].find((t: any) => t.label == _fName);
+                              console.log("formulaMattressMx _valueReplace :>> ", itm, index, _valueReplace);
+                              _itemBednet["costamt_" + itm.type] = isFilterPrice(_valueReplace?.value ?? 0);
+                              if (dannum_type == itm.type) {
+                                _itemBednet.costamt = isFilterPrice(_valueReplace?.value ?? 0);
+                              }
+                            });
+                            arr.push(_itemBednet);
+                          });
+                        });
+                    }
+                  }
+                }
+              }
+            }
+            _item.level2 = "小计";
+          }
+
           differ.map((itm: any) => {
             let _valueReplace = itm[replaceKey].find((t: any) => t.label == fName);
             _item["costamt_" + itm.type] = isFilterPrice(_valueReplace?.value ?? 0);
@@ -956,7 +1102,7 @@ export const useHooksCpQuote = (t?: any) => {
           item.costamt = isFilterPrice(_valueReplace?.value ?? 0);
         }
       });
-      item.group = "小计";
+      item.level1 = "小计";
       console.log("item :>> ", item);
       arr.push(item);
     }
@@ -991,10 +1137,12 @@ export const useHooksCpQuote = (t?: any) => {
     console.log("mxdata data:>> ", mxdata, data);
     let _mxitm = null;
     let level_mattress = "车间成本";
-    let group_mattress = "床垫-总材料成本";
+    let level1_mattress = "总床垫车间成本";
+    let level2_mattress = "总材料成本";
     let result_default: any = {
       level: level_mattress,
-      group: group_mattress
+      level1: level1_mattress,
+      level2: level2_mattress
     };
     let mattressArr: any = [];
     for (let index = 0; index < mxdata.length; index++) {
@@ -1124,7 +1272,7 @@ export const useHooksCpQuote = (t?: any) => {
                   if (item.data.bednet.length == 1) {
                     //单床网
                     ll_bednetid = item.data.bednet[0].mtrlid;
-                    let s_bednet_qingdan = await f_get_bednet_qingdan(ll_bednetid, 0);
+                    let s_bednet_qingdan = await f_get_bednet_qingdan(ll_bednetid, 0, _isNew);
                     console.log("cushions item.data.bednet s_bednet_qingdan :>> ", s_bednet_qingdan);
                     if (s_bednet_qingdan.length) {
                       result.dscrp = s_bednet_qingdan[0].pznamemx;
@@ -1139,7 +1287,7 @@ export const useHooksCpQuote = (t?: any) => {
                     //多床网
                     ll_bednetid = item.data.bednet[bendet999Index].mtrlid;
                     console.log("f_get_bednet_qingdan t ll_bednetid:>> ", bendet999Index, item.data.bednet[bendet999Index]);
-                    let s_bednet_qingdan = await f_get_bednet_qingdan(ll_bednetid, bendet999Index);
+                    let s_bednet_qingdan = await f_get_bednet_qingdan(ll_bednetid, bendet999Index, _isNew);
                     if (s_bednet_qingdan.length) {
                       result.dscrp = s_bednet_qingdan[0].pznamemx;
                       result.qty = 1;
@@ -1154,14 +1302,17 @@ export const useHooksCpQuote = (t?: any) => {
                     bendet999Index++;
                   }
 
-                  result.index = _index;
-                  // 查找数组中,从结尾数起最后出现的index=_index的元素的索引,在起后面插入result
-                  let _arrData = cloneDeep(mattressArr);
-                  let _last = _arrData.reverse().findIndex(t => t.index == _index);
-                  if (_last == -1) {
-                    mattressArr.push(result);
-                  } else {
-                    mattressArr.splice(mattressArr.length - _last, 0, result);
+                  // 旧公式添加,新公式已分离显示
+                  if (!_isNew) {
+                    result.index = _index;
+                    // 查找数组中,从结尾数起最后出现的index=_index的元素的索引,在起后面插入result
+                    let _arrData = cloneDeep(mattressArr);
+                    let _last = _arrData.reverse().findIndex(t => t.index == _index);
+                    if (_last == -1) {
+                      mattressArr.push(result);
+                    } else {
+                      mattressArr.splice(mattressArr.length - _last, 0, result);
+                    }
                   }
                 }
               }
@@ -1272,7 +1423,7 @@ export const useHooksCpQuote = (t?: any) => {
         console.log("smattressArr bf:>> ", mattressArr);
 
         // 插入床垫车间成本-总材料成本明细
-        let _idx = state.tableData.findIndex(t => t.group === "床垫-总材料成本");
+        let _idx = state.tableData.findIndex(t => t.level1.indexOf("床垫车间成本") > -1 && t.level2 === "总材料成本");
         if (_idx > -1) {
           state.tableData[_idx].label = "小计";
           state.tableData.splice(_idx, 0, ...mattressArr);
@@ -1284,7 +1435,11 @@ export const useHooksCpQuote = (t?: any) => {
           if (cushionsItem.data.bednet.length > 0) {
             cushionsItem.data.bednet.map((itm: any, index: any) => {
               if (itm.mtrlid > 0) {
-                let _idx = state.tableData.findIndex(t => t.group === `床网${index + 1}-总材料成本`);
+                let _idx = state.tableData.findIndex(
+                  t => t.level1.indexOf("床网车间成本") > -1 && t.level2 === `床网${index + 1} - 总材料成本`
+                );
+
+                console.log("smattressArr smattressArr _idx :>> ", _idx, index, state.bednet_qingdan, state.tableData);
                 if (_idx > -1) {
                   state.tableData[_idx].label = "小计";
                   state.bednet_qingdan[index] && state.tableData.splice(_idx, 0, ...state.bednet_qingdan[index]);

+ 2 - 1
JLHWEB/src/views/quote/mattressQuote/hooks/index.tsx

@@ -1247,7 +1247,8 @@ export const useHooks = (t?: any) => {
         item.mattress_height;
       data.mtrlid = item.bednetid;
       data.mtrlname = _mtrlname;
-      data.price = item.nottax_factory_cost;
+      // data.price = item.nottax_factory_cost;
+      data.price = item.total_cost;
       data.qty = 1;
 
       wf_rtr_cwdc(data, item, "set");