import { ref, reactive, computed, toRefs, nextTick, inject } from "vue";
import { Table } from "@/hooks/interface";
import { ColumnProps } from "@/components/LjVxeTable/interface";
import { ALLOW_EDIT_STATE, sys_arry_formulatype } from "@/config/index";
import { CommonDynamicSelect } from "@/api/modules/common";
import { useUserStore } from "@/stores/modules/user";
import MtrldefSelect from "@/views/system/selector/mtrldef/select.vue";
import { handleRowAccordingToProp } from "@/utils";
import { ElButton, ElMessage, ElPopconfirm, ElMessageBox } from "element-plus";
import { Minus, Plus, InfoFilled } from "@element-plus/icons-vue";
import { DwnameEnum } from "@/enums/dwnameEnum";
import { isArray } from "@/utils/is";
import { calculateFormula, formulaPartsFormula, floatAdd, floatMul, formatFixedNumber } from "@/utils/index";
import { cloneDeep, defaultsDeep } from "lodash-es";
import { TYPE, useToast, POSITION } from "vue-toastification";
import ToastFormula from "@/components/ToastWidget/Formula/index.vue";
import ToastHistoryPrice from "@/components/ToastWidget/HistoryPrice/index.vue";

interface defaultState {
  /**
   * @description 单据当前状态
   */
  orderStatus: string;
  LjDetailRef: any;
  MtrldefDialogRef: any;
  MtrldefDialogProps: any;
  /**
   * @description 面料tab页拆分
   */
  fabricMxTabList: any[];
  otherMxTabList: any[];
  /**
   * @description 面料当前tab页
   */
  fabricMxTabs: any;
  // fabricMxRef: any;
  fabricMxTab8Ref: any;
  fabricMxTab9Ref: any;
  fabricMxTab10Ref: any;
  fabricMxTab11Ref: any;
  fabricMxTab12Ref: any;
  fabricMxTab13Ref: any;
  bednetMxRef: any;
  cushionsMxRef: any;
  accessoriesMxRef: any;
  packagMxRef: any;
  innerClothLayerMxRef: any;
  topCottonMxRef: any;
  fabricMxTab8: any[];
  fabricMxTab9: any[];
  fabricMxTab10: any[];
  fabricMxTab11: any[];
  fabricMxTab12: any[];
  fabricMxTab13: any[];
  /**
   * @description 面料明细数据-裥大侧 新增
   */
  fabricMx10NewMtrlGroup: any[];
  /**
   * @description 面料明细数据-裥小侧 新增
   */
  fabricMx11NewMtrlGroup: any[];
  /**
   * @description 床垫类型枚举
   */
  mattresstypeEnum: any;
  /**
   * @description 物料分类取值
   */
  mtrltypeTabList: any[];
  /**
   * @description 原始明细数据
   */
  oriMxData: any;
  initParams: any;
  /**
   * @description 垫层数据
   */
  cushionsMxData: any;
  fabricMxData: any;
  /**
   * @description 辅料数据
   */
  accessoriesMxData: any;
  /**
   * @description 床网数据
   */
  bednetMxData: any;
  /**
   * @description 包装数据
   */
  packagMxData: any;
  /**
   * @description 公式弹窗-是否展示详细公式
   */
  showFormula: boolean;
  QuoteListDrawerRef: any;
  formulaKindEnum: any;
  formulaKindDcEnum: any;
  packtypeOptions: any;
  woodpallettypeOptions: any;
  areaOptions: any;
  cabinetTypeOptions: any;
  diancengAreaEnum: any;
}

export const useHooks = (t?: any) => {
  const state = reactive<defaultState>({
    orderStatus: "",
    LjDetailRef: null,
    // fabricMxRef: null,
    fabricMxTab8Ref: null,
    fabricMxTab9Ref: null,
    fabricMxTab10Ref: null,
    fabricMxTab11Ref: null,
    fabricMxTab12Ref: null,
    fabricMxTab13Ref: null,
    MtrldefDialogRef: null,
    MtrldefDialogProps: {},
    fabricMxTabs: "",
    fabricMxTabList: [
      {
        label: "裥面",
        name: "tabpage_8",
        visible: () => Number(state.mattresstypeEnum.if_top_side) == 1,
        type: [0, 80, 40, 50, 60, 70, 9000],
        ref: "fabricMxTab8Ref"
      },
      {
        label: "裥底",
        name: "tabpage_9",
        visible: () => Number(state.mattresstypeEnum.if_button_sdie) == 1,
        type: [1, 81, 41, 51, 61, 71, 9001],
        ref: "fabricMxTab9Ref"
      },
      {
        label: "裥大恻",
        name: "tabpage_10",
        visible: () => Number(state.mattresstypeEnum.if_big_side) == 1,
        type: [2, 82, 42, 52, 62, 72, 9002],
        ref: "fabricMxTab10Ref"
      },
      {
        label: "裥小恻",
        name: "tabpage_11",
        visible: () => Number(state.mattresstypeEnum.if_small_side) == 1,
        type: [3, 83, 43, 53, 63, 73, 9003],
        ref: "fabricMxTab11Ref"
      },
      {
        label: "裥V恻",
        name: "tabpage_12",
        visible: () => Number(state.mattresstypeEnum.if_v_side) == 1,
        type: [4, 84, 44, 54, 64, 74, 9004],
        ref: "fabricMxTab12Ref"
      },
      {
        label: "拉手刺绣及其他工艺",
        name: "tabpage_13",
        visible: () => true,
        type: [
          0, 80, 40, 50, 60, 70, 1, 81, 41, 51, 61, 71, 2, 82, 42, 52, 62, 72, 3, 83, 43, 53, 63, 73, 4, 84, 44, 54, 64, 74, 9000,
          9001, 9002, 9003, 9004, 9005, 9006
        ], // not in
        ref: "fabricMxTab13Ref"
      },
      {
        label: "床网",
        name: "bednetMx",
        ref: "bednetMxRef"
      },
      {
        label: "垫层",
        name: "cushionsMx",
        ref: "cushionsMxRef"
      },
      {
        label: "辅料",
        name: "accessoriesMx",
        ref: "accessoriesMxRef"
      },
      {
        label: "包装",
        name: "packagMx",
        ref: "packagMxRef"
      },
      {
        label: "内布套",
        name: "innerClothLayerMx",
        ref: "innerClothLayerMxRef"
      },
      {
        label: "顶布裥棉",
        name: "topCottonMx",
        ref: "topCottonMxRef"
      }
    ],
    otherMxTabList: [
      {
        label: "内布套",
        name: "tabpage_14",
        type: [101, 102, 103, 104, 105, 106]
      },
      {
        label: "外布套",
        name: "tabpage_15",
        type: [111, 112, 113, 114, 115, 116]
      }
    ],
    fabricMxTab8: [],
    fabricMxTab9: [],
    fabricMxTab10: [],
    fabricMxTab11: [],
    fabricMxTab12: [],
    fabricMxTab13: [],
    fabricMx10NewMtrlGroup: [
      {
        label: "普通大侧",
        value: 1
      },
      {
        label: "上下拼侧1",
        value: 2
      },
      {
        label: "上下拼侧2",
        value: 3
      },
      {
        label: "上下拼侧3",
        value: 4
      },
      {
        label: "左右拼侧1",
        value: 5
      },
      {
        label: "左右拼侧2",
        value: 6
      },
      {
        label: "左右拼侧3",
        value: 7
      },
      {
        label: "左右拼侧4",
        value: 8
      }
    ],
    fabricMx11NewMtrlGroup: [
      {
        label: "小侧1",
        value: 1
      },
      {
        label: "小侧1-上下拼侧1",
        value: 2
      },
      {
        label: "小侧1-上下拼侧2",
        value: 3
      },
      {
        label: "小侧1-上下拼侧3",
        value: 4
      }
    ],
    mattresstypeEnum: {},
    mtrltypeTabList: [
      {
        label: "选布料",
        formulakinds: [0, 1, 2, 3, 4, 101, 111],
        value: 3
      },
      {
        label: "喷胶绵",
        formulakinds: [40, 41, 42, 43, 44, 102, 112],
        value: 5
      },
      {
        label: "裥绵海绵",
        formulakinds: [50, 51, 52, 53, 54, 103, 113],
        value: 4
      },
      {
        label: "无纺布",
        formulakinds: [60, 61, 62, 63, 64, 104, 114],
        value: 30
      },
      {
        label: "裥花图案",
        formulakinds: [70, 71, 72, 73, 74, 105, 115],
        value: 26
      },
      {
        label: "布料-加工工艺",
        formulakinds: [80, 81, 82, 83, 84, 106, 116],
        value: 15
      },
      {
        label: "拉手",
        formulakinds: [5],
        value: 10
      },
      {
        label: "刺绣",
        formulakinds: [6],
        value: 11
      },
      {
        label: "大侧*压布",
        formulakinds: [7],
        value: 2
      },
      {
        label: "大侧*边带",
        formulakinds: [8, 9],
        value: 9
      },
      {
        label: "大侧*上下压线",
        formulakinds: [10],
        value: 12
      },
      {
        label: "垫层",
        formulakinds: [11, 32, 33],
        value: 6
      },
      {
        label: "顶布",
        formulakinds: [12],
        value: 3
      },
      {
        label: "毡类",
        formulakinds: [13],
        value: 7
      },
      {
        label: "打底无纺布",
        formulakinds: [14],
        value: 2
      },
      {
        label: "辅料",
        formulakinds: [15],
        value: 8
      },
      {
        label: "PE",
        formulakinds: [16],
        value: 16
      },
      {
        label: "外层PE",
        formulakinds: [17],
        value: 17
      },
      {
        label: "PVC",
        formulakinds: [18],
        value: 18
      },
      {
        label: "卷包包装",
        formulakinds: [19],
        value: 19
      },
      {
        label: "牛皮纸袋",
        formulakinds: [20],
        value: 20
      },
      {
        label: "蓝色PE护角",
        formulakinds: [21],
        value: 21
      },
      {
        label: "无纺布袋",
        formulakinds: [22],
        value: 22
      },
      {
        label: "牛皮袋护角",
        formulakinds: [23],
        value: 23
      },
      {
        label: "编织袋",
        formulakinds: [24],
        value: 24
      },
      {
        label: "外袋",
        formulakinds: [25],
        value: 13
      },
      {
        label: "内袋",
        formulakinds: [26],
        value: 14
      },
      {
        label: "无拉手脚轮",
        formulakinds: [27],
        value: -1
      },
      {
        label: "拉钮",
        formulakinds: [28],
        value: -1
      },
      {
        label: "网面布料",
        formulakinds: [29],
        value: -1
      },
      {
        label: "防火线",
        formulakinds: [30],
        value: -1
      },
      {
        label: "木托",
        formulakinds: [31],
        value: -1
      },
      {
        label: "床网",
        formulakinds: [99],
        value: -1
      }
    ],
    oriMxData: {},
    initParams: { arg_mattressid: 0 },
    fabricMxData: [],
    bednetMxData: [],
    cushionsMxData: [],
    accessoriesMxData: [],
    packagMxData: [],
    showFormula: false,
    QuoteListDrawerRef: null,
    formulaKindEnum: null,
    formulaKindDcEnum: null,
    bednetMxRef: null,
    cushionsMxRef: null,
    accessoriesMxRef: null,
    packagMxRef: null,
    innerClothLayerMxRef: null,
    topCottonMxRef: null,
    packtypeOptions: [
      {
        label: "压包",
        value: "0"
      },
      {
        label: "卷包",
        value: "1"
      },
      {
        label: "国内",
        value: "2"
      }
    ],
    woodpallettypeOptions: [
      {
        label: "普通木托",
        value: "0"
      },
      {
        label: "夹板木托",
        value: "1"
      },
      {
        label: "铁管木托",
        value: "2"
      }
    ],
    areaOptions: [
      {
        label: "普通地区",
        value: "普通地区"
      },
      {
        label: "特定地区",
        value: "特定地区"
      }
    ],
    cabinetTypeOptions: [
      {
        label: "大柜",
        value: "大柜"
      },
      {
        label: "小柜",
        value: "小柜"
      }
    ],
    diancengAreaEnum: []
  });

  const { userInfo } = useUserStore();

  state.orderStatus = inject("orderStatus", "");

  const getData_mx = (params: any) => {
    console.log("getData params :>> ", params);
    let newParams: any = {};
    params.pageNum && (newParams.pageindex = params.pageNum);
    params.pageSize && (newParams.pagesize = params.pageSize);
    delete params.pageNum;
    delete params.pageSize;
    newParams.queryParams = params;
    console.log("params :>> ", params);
    newParams.dsname = "web_mattress_mx";
    return CommonDynamicSelect(newParams, DwnameEnum.mattressQuoteMx);
    // return [];
  };

  const dataCallback = (data: any) => {
    console.log("dataCallback data :>> ", data);
    if (data.datatable.length > 0) {
      data.datatable = data.datatable.map((item: any) => {
        item.dannum_rate = Number(item.dannum_rate);
        return item;
      });
    }
    return {
      list: data.datatable,
      tableinfo: data.tableinfo,
      total: data.totalcnt,
      pageNum: data.pageindex,
      pageSize: data.pagesize
    };
  };

  const dataCallbackMx = (data: any) => {
    console.log("dataCallback data :>> ", data);
    return {
      list: data.datatable,
      tableinfo: data.tableinfo,
      total: data.totalcnt,
      pageNum: data.pageindex,
      pageSize: data.pagesize
    };
  };

  const funcMoneyrateChange = async (val: any, data) => {
    let newParams = {
      dsname: "_Mapper_deptid",
      queryparams: {
        deptid: data.deptid
      }
    };
    let res = await CommonDynamicSelect(newParams);

    let _discount = 1;
    let _moneyrate = 1;
    if (res.datatable?.length > 0) {
      _discount = res.datatable[0].discount;
      _moneyrate = res.datatable[0].moneyrate;
    }
    data.moneyrate = _moneyrate;
    data.discount = _discount;
  };

  const funcTaxrateChange = async (val: any, data) => {
    data.taxrate = val;
  };

  /**
   * @description 弹窗模块：客户选择
   * @param data 当前数据
   * @param status 当前订单状态
   * @returns Promise
   */
  const fModelChoseMtrl = (data: any, params: any, label?: string) => {
    return new Promise((resolve, reject) => {
      // if (!ALLOW_EDIT_STATE.includes(status)) return;

      let _params = {
        keyword: "",
        arg_mtrltype: params.mtrltype,
        arg_pricelistid: params.pricelistid
      };
      state.MtrldefDialogProps = {
        onSubmit: (res: any) => {
          // submit
          console.log("openCustDialog res", res);
          nextTick(() => {
            rModelSetMtrl(data, res.value[0]);
            resolve(1);
          });
        },
        onCancel: (error: any) => {
          // cancel 回调
          console.log("openCustDialog error", error);
        }
      };
      state.MtrldefDialogRef.show(_params, label);
    });
  };

  /**
   * @description 数据赋值：物料信息
   * @param data 当前数据
   * @param item 当前选择的数据
   */
  const rModelSetMtrl = (data: any, item: any) => {
    console.log("rModelSetMtrl data :>> ", data);
    console.log("rModelSetMtrl item :>> ", item);
    if (item) {
      data.mattressid = state.LjDetailRef._mainData.mattressid;
      data.mattressmxid = 0;
      data.mtrlid = item.mtrlid;
      data.price = item.pricelistprice;
      data.gram_weight = item.gram_weight;
      data.cloth_width = item.cloth_width;
      data.if_inputqty = Number(item.if_inputqty);
      data.if_areaprice = item.if_areaprice;
      data.mtrlname = item.mtrlname;
      data.priceunit = item.priceunit;
      data.shrinkage = item.price;
      Number(item.thickness) > 0 && (data.thickness = item.thickness);
      data.price_formula = item.price_formula;
    }
  };

  const rModelClearMtrl = (data: any) => {
    console.log("rModelClearMtrl data :>> ", data);
    data.mattressid = state.LjDetailRef._mainData.mattressid;
    data.mattressmxid = 0;
    data.mtrlid = 0;
    data.price = 0;
    data.gram_weight = 0;
    data.cloth_width = 0;
    data.if_inputqty = 0;
    data.if_areaprice = 0;
    data.mtrlname = "";
    data.priceunit = "";
    data.shrinkage = 0;
    data.thickness = 0;
    data.price_formula = "";
    data.qty = "";
  };

  /**
   * @description 面料-裥大、小侧，增加物料
   */
  const funcAddMxSide = async (params: any, data: any, targetRef?: any) => {
    // arg_array_formulakind
    let newParams: any = {};
    newParams.queryParams = params;
    newParams.dsname = "web_mattress_formulalist";
    let res = await CommonDynamicSelect(newParams);
    console.log("funcAddBigSide res :>> ", res);

    if (res.datatable) {
      if (targetRef) {
        const $table = targetRef.element;
        if ($table) {
          res.datatable.map(itm => {
            let records: any = {
              formulatype: itm.formulatype,
              if_mtrl: Number(itm.if_mtrl),
              formulaid: itm.formulaid,
              sortcode: data.label,
              chastr: data.label,
              formulakind: Number(itm.formulakind),
              formula: itm.formula,
              useformula: itm.useformula,
              gydscrp: itm.gydscrp
            };

            if (records.if_mtrl > 1) {
              records.addmx = "+";
              records.delmx = "-";
            }

            $table.insertAt(records, -1);
          });
        }
      } else {
        let arr = [];
        res.datatable.map(itm => {
          let records: any = {
            formulatype: itm.formulatype,
            if_mtrl: Number(itm.if_mtrl),
            formulaid: itm.formulaid,
            sortcode: data.label,
            chastr: data.label,
            formulakind: Number(itm.formulakind),
            formula: itm.formula,
            useformula: itm.useformula,
            gydscrp: itm.gydscrp
          };

          if (records.if_mtrl > 1) {
            records.addmx = "+";
            records.delmx = "-";
          }

          arr.push(records);
        });
        return arr;
      }
    } else {
      return [];
    }
  };

  const wf_mtrl_find = async (params: any) => {
    let _params: any = {
      dsname: "web_mtrl_choose",
      queryparams: params
    };
    let res = await CommonDynamicSelect(_params);

    if (res?.datatable?.length) {
      return res?.datatable;
    } else {
      return [];
    }
  };

  /**
   * @description 垫层配置  和  垫层可选项
   * @author w_mattress_add wf_add_dianceng_bytype
   */
  const wf_add_dianceng_bytype = (dianceng_sort: string) => {
    let newMxData = [];
    let _diancengSortStr = dianceng_sort.replace(/，/g, ",").replace(/~r~n/g, "").replace(/~r/g, "").replace(/~n/g, "");

    let arr = _diancengSortStr.split("/");
    let formulakindArr = [];
    arr.map(async (t, index) => {
      let result = f_pb_split(t);
      let _formulakind;
      switch (result.left) {
        case "垫层":
          _formulakind = 32;
          break;
        case "床网":
          _formulakind = 999;
          break;
        case "顶布":
          _formulakind = 12;
          break;
        case "毡类":
          _formulakind = 13;
          break;
        case "打底无纺布":
          _formulakind = 14;
          break;
        case "网面布料":
          _formulakind = 29;
          break;
        default:
          _formulakind = -1;
          break;
      }

      let _params = {
        dsname: "web_mattress_formulalist",
        queryparams: {
          arg_array_formulakind: [_formulakind],
          arg_array_formulatype: [0, 1, 2, 3],
          pageindex: 1,
          pagesize: 1
        }
      };
      let res = await CommonDynamicSelect(_params);

      if (res?.datatable?.length) {
        res?.datatable.map((item: any) => {
          let _data: any = {};
          _data.formulatype = item.formulatype;
          _data.if_mtrl = 2;
          _data.formulaid = item.formulaid;
          _data.sortcode = item.sortcode;
          _data.formulakind = item.formulakind;
          _data.formula = item.formula;
          _data.chastr = wf_set_area_text(result.right);
          _data.qty = 1;
          _data.xu = index;
          _data.useformula = item.useformula;
          _data.gydscrp = item.gydscrp;

          newMxData.push(_data);
        });
      }
    });
  };

  const wf_add_dianceng_area_bytype = (data: string) => {
    if (!data) return;

    let _dataStr = data.replace(/，/g, ",").replace(/~r~n/g, "").replace(/~r/g, "").replace(/~n/g, "");

    let result: any = _dataStr.split(",");

    result = result.map(t => {
      return { name: t };
    });

    return result;
  };

  function wf_set_area_text(arg_str) {
    let ls_rtn = "";

    if (arg_str.includes("大侧")) {
      ls_rtn = "大侧";
    } else if (arg_str.includes("小侧1")) {
      ls_rtn = "小侧1";
    } else if (arg_str.includes("小侧2")) {
      ls_rtn = "小侧2";
    } else if (arg_str.includes("小侧3")) {
      ls_rtn = "小侧3";
    } else if (arg_str.includes("V侧1")) {
      ls_rtn = "V侧1";
    } else if (arg_str.includes("V侧2")) {
      ls_rtn = "V侧2";
    } else if (arg_str.includes("V侧3")) {
      ls_rtn = "V侧3";
    } else {
      ls_rtn = "";
    }

    return ls_rtn;
  }

  /**
   * @description 包装默认物料设置
   */
  const wf_default_mtrlid = async () => {
    // 包装
    console.log("wf_default_mtrlid state.packagMxData :>> ", state.packagMxData);

    let _deptid = state.LjDetailRef._mainData.deptid;
    let deptEnum = state.LjDetailRef.enumMap.get("deptid");
    let _pricelistid = 0;
    console.log("deptEnum :>> ", deptEnum);
    if (deptEnum) {
      let depItem = deptEnum.find((item: any) => item.value == _deptid);
      console.log("depItem :>> ", depItem);
      if (depItem) {
        _pricelistid = Number(depItem.pricelistid);
      }
    }

    // 根据formulaid，获取全部设置的默认物料信息
    let defaultMtrlList = [];
    let _param_mf = {
      dsname: "web_mtrl_choose",
      queryparams: {
        arg_array_formulaid: [16, 17, 18, 19, 27],
        arg_pricelistid: _pricelistid,
        arg_array_mtrlid: [46804, 46809, 46811, 46817, 46872]
      }
    };
    let res_mf = await CommonDynamicSelect(_param_mf);
    if (res_mf?.datatable?.length) {
      defaultMtrlList = res_mf?.datatable;
    }
    // let _mtrlData = await wf_mtrl_find(_pricelistid, [46804, 46809, 46811, 46817, 46872]);

    console.log("wf_default_mtrlid  ccccc state.packagMxData :>> ", state.packagMxData);
    state.packagMxData.map(itm => {
      console.log("packagMxData itm :>> ", itm);
      let _formulakind = Number(itm.formulakind);
      let _data = null;
      if (_formulakind == 16) {
        //默认 pe    kind = 16  默认  10C PE袋  mtrlid  46804
        itm.mtrlid = 46804;
      } else if (_formulakind == 17) {
        //默认 外层pe    kind = 17  默认  20C  mtrlid  46809
        itm.mtrlid = 46809;
      } else if (_formulakind == 18) {
        //默认 pvc    kind = 18  默认  15C   mtrlid  46811
        itm.mtrlid = 46811;
      } else if (_formulakind == 19) {
        //默认 卷包外包装    kind = 19  默认  彩箱   32*32   46817
        itm.mtrlid = 46817;
      } else if (_formulakind == 27) {
        //默认 拉手脚轮    kind = 27  默认     46872
        itm.mtrlid = 46872;
      }
      _data = defaultMtrlList.find(t => t.mtrlid == itm.mtrlid);
      console.log("wf_default_mtrlid _data :>> ", _data);
      if (_data) {
        itm.mtrlname = _data.mtrlname;
        itm.price = _data.pricelistprice;
        itm.gram_weight = _data.gram_weight;
        itm.cloth_width = _data.cloth_width;
        itm.if_inputqty = _data.if_inputqty;
        itm.priceunit = _data.priceunit;
        itm.shrinkage = _data.shrinkage;
        itm.qty = 1;

        if (_data.formula != "") {
          itm.formula = _data.formula;
        }
      }
      return itm;
    });

    console.log("wf_default_mtrlid state.packagMxData :>> ", state.packagMxData);
  };

  const wf_default_mtrlid_notbz = async () => {
    console.log("state.oriMxData.list bf state.oriMxData.list :>> ", state.oriMxData.list);
    // 收集数据中各种公式的formulaid
    let _formulaids = [];
    state.oriMxData.list.forEach((itm: any) => {
      _formulaids.push(itm.formulaid);
    });
    // 数组去重
    _formulaids = Array.from(new Set(_formulaids));

    // 部门设置的报价表
    let _pricelistid = 0;
    let _deptid = state.LjDetailRef._mainData.deptid;
    let deptEnum = state.LjDetailRef.enumMap.get("deptid");
    console.log("deptEnum :>> ", deptEnum);
    if (deptEnum) {
      let depItem = deptEnum.find((item: any) => item.value == _deptid);
      console.log("depItem :>> ", depItem);
      if (depItem) {
        _pricelistid = Number(depItem.pricelistid);
      }
    }

    // 根据formulaid，获取全部设置的默认物料信息
    let defaultMtrlList = [];
    let _param_mf = {
      dsname: "web_mtrl_choose",
      queryparams: {
        arg_array_formulaid: _formulaids,
        arg_pricelistid: _pricelistid,
        arg_array_mtrlid: [46804, 46809, 46811, 46817, 46872]
      }
    };
    let res_mf = await CommonDynamicSelect(_param_mf);
    if (res_mf?.datatable?.length) {
      defaultMtrlList = res_mf?.datatable;
    }

    state.oriMxData.list.forEach((itm: any) => {
      _formulaids.push(itm.formulaid);
      let _formulakind = Number(itm.formulakind);
      let _data = defaultMtrlList.find(t => t.formulaid == itm.formulaid);

      console.log("wf_default_mtrlid_notbz 查询默认物料_data :>> ", _data);

      // 包装default
      if (itm.formulatype == "3") {
        let changeMtrl = 0;
        if (_formulakind == 16) {
          //默认 pe    kind = 16  默认  10C PE袋  mtrlid  46804
          changeMtrl = 46804;
        } else if (_formulakind == 17) {
          //默认 外层pe    kind = 17  默认  20C  mtrlid  46809
          changeMtrl = 46809;
        } else if (_formulakind == 18) {
          //默认 pvc    kind = 18  默认  15C   mtrlid  46811
          changeMtrl = 46811;
        } else if (_formulakind == 19) {
          //默认 卷包外包装    kind = 19  默认  彩箱   32*32   46817
          changeMtrl = 46817;
        } else if (_formulakind == 27) {
          //默认 拉手脚轮    kind = 27  默认     46872
          changeMtrl = 46872;
        }

        if (changeMtrl && !_data) {
          _data = defaultMtrlList.find(t => t.mtrlid == changeMtrl);
        }
      }

      if (_data) {
        itm.mtrlid = _data.mtrlid;
        itm.mtrlname = _data.mtrlname;

        itm.price = _data.pricelistprice;
        itm.gram_weight = _data.gram_weight;
        itm.cloth_width = _data.cloth_width;
        itm.if_inputqty = _data.if_inputqty;
        itm.priceunit = _data.priceunit;
        itm.shrinkage = _data.shrinkage;
        itm.qty = 1;

        if (_data.formula != "") {
          itm.formula = _data.formula;
        }
      }
    });

    console.log("state.oriMxData.list affff state.oriMxData.list :>> ", state.oriMxData.list);
  };

  function f_pb_split(arg_source) {
    // 检查输入字符串是否为空
    if (arg_source === "") {
      return;
    }

    // 查找逗号的位置
    const commaPos = arg_source.indexOf(",");
    let arg_left_str, arg_right_str;

    if (commaPos > -1) {
      // 如果存在逗号，分割字符串
      arg_left_str = arg_source.substring(0, commaPos).trim();
      arg_right_str = arg_source.substring(commaPos + 1).trim();
    } else {
      // 如果不存在逗号，整个字符串作为左部分，右部分为空字符串
      arg_left_str = arg_source.trim();
      arg_right_str = "";
    }

    // 返回结果
    return { left: arg_left_str, right: arg_right_str };
  }

  /**
   * @description 明细，新增
   */
  const funcAddMtrlMx = async (data: any) => {
    console.log("state.LjDetail. :>> ", state.LjDetailRef);
    console.log("funcAddMtrlMx data :>> ", data);
    let { tabsActive } = state.LjDetailRef;
    let { row, rowIndex, visibleData } = data;
    let nextRow = visibleData[rowIndex + 1];
    if (!nextRow) {
      nextRow = visibleData[visibleData.length - 1];
    }

    let _target = tabsActive == "fabricMx" ? state.fabricMxTabs : tabsActive;

    let currentTab = state.fabricMxTabList.find(t => t.name == _target);
    const $table = state[currentTab.ref].element;
    if ($table) {
      const records = {
        addmx: "+",
        delmx: "-",
        formulatype: row.formulatype,
        if_mtrl: row.if_mtrl,
        formulaid: row.formulaid,
        sortcode: row.sortcode,
        formulakind: row.formulakind,
        formula: row.formula,
        thickness: 0,
        mtrlid: 0
      };

      const { row: newRow } = await $table.insertAt(records, nextRow);
      await $table.setEditCell(newRow, "mtrlname");
      await $table.setCurrentRow(newRow);
    }
  };

  /**
   * @description 明细，删除
   */
  const funcDelMtrlMx = (data: any) => {
    let { row } = data;
    let { tabsActive } = state.LjDetailRef;

    let _target = tabsActive == "fabricMx" ? state.fabricMxTabs : tabsActive;

    let currentTab = state.fabricMxTabList.find(t => t.name == _target);
    const $table = state[currentTab.ref].element;
    if ($table) {
      $table.remove(row);
    }
  };

  /**
   * @description 据字符串'myRef'来获取ref
   * @param name
   * @returns
   */
  const dynamicRef = name => {
    return state[name]; // 获取ref的值
  };

  const getMattressType = () => {
    const { enumMap, _mainData } = state.LjDetailRef;
    console.log("getMattressType enumMap :>> ", enumMap, _mainData, state.LjDetailRef);
    let _enum = enumMap.get("mattresstypeid");
    console.log("_enum :>> ", _enum);
    if (_enum) {
      state.mattresstypeEnum = _enum.find(t => t.value == _mainData.mattresstypeid);
      console.log("mattresstypeEnum :>> ", state.mattresstypeEnum);
    }

    let itmshow = state.fabricMxTabList.find(t => t.visible());
    state.fabricMxTabs = itmshow.name;
  };

  const funcChaifenTab = async () => {
    const { _mainData } = state.LjDetailRef;
    // 面料
    state.fabricMxData = state.oriMxData.list.filter(
      t => t.formulatype == "0" || (_mainData.if_bcp_type == "1" && t.formulatype == "104")
    );
    let _mx8 = state.fabricMxTabList.find(t => t.name == "tabpage_8");
    state.fabricMxTab8 = state.fabricMxData.filter(t => _mx8.type.includes(Number(t.formulakind)));

    let _mx9 = state.fabricMxTabList.find(t => t.name == "tabpage_9");
    state.fabricMxTab9 = state.fabricMxData.filter(t => _mx9.type.includes(Number(t.formulakind)));

    let _mx10 = state.fabricMxTabList.find(t => t.name == "tabpage_10");
    state.fabricMxTab10 = state.fabricMxData.filter(t => _mx10.type.includes(Number(t.formulakind)));

    let _mx11 = state.fabricMxTabList.find(t => t.name == "tabpage_11");
    state.fabricMxTab11 = state.fabricMxData.filter(t => _mx11.type.includes(Number(t.formulakind)));

    console.log("funcChaifenTab state.fabricMxTab11 :>> ", state.fabricMxTab11);

    let _mx12 = state.fabricMxTabList.find(t => t.name == "tabpage_12");
    state.fabricMxTab12 = state.fabricMxData.filter(t => _mx12.type.includes(Number(t.formulakind)));

    let _mx13 = state.fabricMxTabList.find(t => t.name == "tabpage_13");
    state.fabricMxTab13 = state.fabricMxData.filter(t => !_mx13.type.includes(Number(t.formulakind)));

    // 垫层
    state.cushionsMxData = state.oriMxData.list.filter(t => t.formulatype == "1");
    // 辅料
    state.accessoriesMxData = state.oriMxData.list.filter(t => t.formulatype == "2");
    // 包装
    state.packagMxData = state.oriMxData.list.filter(t => t.formulatype == "3");
    // 床网
    state.bednetMxData = state.oriMxData.list.filter(t => t.formulatype == "99");
  };

  /**
   * @description 切换包装方式select，获取默认物料
   * @param val
   */
  const funcPacktypeChange = async (val: any) => {
    console.log("wf_import_bz val :>> ", val);
    const { _mainData, enumMap } = state.LjDetailRef;
    let newMxData = await wf_import_bz();

    if (val == "0") {
      _mainData.diameter = 0;
    } else if (val == "1") {
      _mainData.packqty = 0;
    } else {
      _mainData.diameter = 0;
      _mainData.packqty = 0;
    }

    newMxData.sort((a: any, b: any) => {
      if (a.formulatype != b.formulatype) {
        return a.formulatype - b.formulatype;
      }
      if (a.xu != b.xu) {
        return a.xu - b.xu;
      }
      if (a.sortcode != b.sortcode) {
        return a.sortcode - b.sortcode;
      }
      return a.formulaid - b.formulaid;
    });

    state.packagMxData = newMxData;

    console.log("funcPacktypeChange state.packagMxData :>> ", state.packagMxData);

    wf_default_mtrlid();
  };

  /**
   * @description 包装tabs获取默认物料
   * @returns
   */
  const wf_import_bz = async () => {
    let newMxData = [];
    const { _mainData, enumMap } = state.LjDetailRef;
    let _param_mf = {
      dsname: "web_mattress_formulalist",
      queryparams: {
        arrg_usetype: 2,
        arg_array_formulatype: sys_arry_formulatype
      }
    };
    let res_mf = await CommonDynamicSelect(_param_mf);

    if (res_mf?.datatable?.length) {
      let ll_packtype = _mainData.packtype;

      res_mf?.datatable.map((item: any) => {
        // 0-压包
        if (ll_packtype == 0 && item.if_packtype0 != 1) {
          return;
        }
        // 1-卷包
        if (ll_packtype == 1 && item.if_packtype1 != 1) {
          return;
        }
        // 2-国内
        if (ll_packtype == 2 && item.if_packtype2 != 1) {
          return;
        }

        let _data: any = {};
        if (Number(item.if_mtrl) > 1) {
          _data.addmx = "+";
          _data.delmx = "-";
        }
        _data.formulatype = item.formulatype;
        _data.if_mtrl = item.if_mtrl;
        _data.formulaid = item.formulaid;
        _data.sortcode = item.sortcode;
        _data.formulakind = item.formulakind;
        _data.formula = item.formula;
        _data.useformula = item.useformula;
        _data.gydscrp = item.gydscrp;

        newMxData.push(_data);
      });
    }
    return newMxData;
  };

  /**
   * @description 重新获取明细数据
   * @author w_mattress_add wf_import_dw_2
   */
  const funcImportMx = async () => {
    // let _biandaiqty = 0;
    let newMxData: any = [];
    /**
     * @description 床垫类别参数
     */
    let mattressTypeData: any = {};
    const { _mainData, enumMap } = state.LjDetailRef;

    let _params = {
      dsname: "web_mattress_typelist",
      queryparams: {
        arg_mattresstypeid: _mainData.mattresstypeid
      }
    };
    let res = await CommonDynamicSelect(_params);
    if (res?.datatable?.length) {
      _mainData.biandai_qty = res?.datatable[0].biandaiqty;
      mattressTypeData = res?.datatable[0];
    }

    console.log("state.LjDetailRef._mainData after :>> ", state.LjDetailRef._mainData);

    // 0
    let _param_mf = {
      dsname: "web_mattress_formulalist",
      queryparams: {
        arrg_usetype: 0,
        arg_array_formulatype: sys_arry_formulatype
      }
    };
    let res_mf = await CommonDynamicSelect(_param_mf);
    if (res_mf?.datatable?.length) {
      res_mf?.datatable.map((item: any) => {
        if (![11, 12, 32, 33, 13, 14, 29, 999, 1201].includes(item.formulakind)) {
          // 非垫层
          let _data: any = {};
          if (Number(item.if_mtrl) > 1) {
            _data.addmx = "+";
            _data.delmx = "-";
          }
          _data.formulatype = item.formulatype;
          _data.if_mtrl = item.if_mtrl;
          _data.formulaid = item.formulaid;
          _data.sortcode = item.sortcode;
          _data.formulakind = item.formulakind;
          _data.formula = item.formula;
          _data.useformula = item.useformula;
          _data.gydscrp = item.gydscrp;

          newMxData.push(_data);
        }
      });
    }
    console.log("newMxData 0:>> ", newMxData);

    // 1
    _param_mf.queryparams.arrg_usetype = 1;
    res_mf = await CommonDynamicSelect(_param_mf);

    let notBcpFormulakinds = state.fabricMxTabList
      .filter(t => t.name != "tabpage_13")
      .flatMap(t => t.type)
      .filter(t => t < 9000);

    let tabpage_8 = state.fabricMxTabList.find(t => t.name == "tabpage_8");
    let tabpage_9 = state.fabricMxTabList.find(t => t.name == "tabpage_9");
    let tabpage_10 = state.fabricMxTabList.find(t => t.name == "tabpage_10");
    let tabpage_11 = state.fabricMxTabList.find(t => t.name == "tabpage_11");
    let tabpage_12 = state.fabricMxTabList.find(t => t.name == "tabpage_12");
    let tabpage_14 = state.otherMxTabList.find(t => t.name == "tabpage_14");
    let tabpage_15 = state.otherMxTabList.find(t => t.name == "tabpage_15");

    if (res_mf?.datatable?.length) {
      res_mf?.datatable.map((item: any) => {
        let ls_chastr = "";
        console.log("web_mattress_formulalist _mainData, item :>> ", _mainData, item, Number(_mainData.if_bcp_type));
        // 半成品
        if (Number(_mainData.if_bcp_type) == 1 && notBcpFormulakinds.includes(item.formulakind)) {
          return;
        }

        let _formulakind = Number(item.formulakind);

        if (tabpage_8.type.includes(_formulakind)) {
          if (Number(mattressTypeData.if_top_side) == 0) return;
          ls_chastr = "面裥绵";
        }
        if (tabpage_9.type.includes(_formulakind)) {
          if (Number(mattressTypeData.if_button_sdie) == 0) return;
          ls_chastr = "底裥绵";
        }
        if (tabpage_10.type.includes(_formulakind)) {
          if (Number(mattressTypeData.if_big_side) == 0) return;
          ls_chastr = "普通大侧";
        }
        if (tabpage_11.type.includes(_formulakind)) {
          if (Number(mattressTypeData.if_small_side) == 0) return;
          ls_chastr = "小侧1";
        }
        if (tabpage_12.type.includes(_formulakind)) {
          if (Number(mattressTypeData.if_v_side) == 0) return;
          ls_chastr = "V侧1";
        }
        if (tabpage_14.type.includes(_formulakind)) {
          if (Number(mattressTypeData.if_in_cloth_cover) == 0) return;
        }
        if (tabpage_15.type.includes(_formulakind)) {
          if (Number(mattressTypeData.if_out_cloth_cover) == 0) return;
        }

        let _data: any = {};
        if (Number(item.if_mtrl) > 1) {
          _data.addmx = "+";
          _data.delmx = "-";
        }
        _data.formulatype = item.formulatype;
        _data.if_mtrl = item.if_mtrl;
        _data.formulaid = item.formulaid;
        _data.sortcode = item.sortcode;
        _data.formulakind = item.formulakind;
        _data.formula = item.formula;
        _data.chastr = ls_chastr;
        _data.useformula = item.useformula;
        _data.gydscrp = item.gydscrp;

        newMxData.push(_data);
      });
    }
    console.log("newMxData 1:>> ", newMxData);

    // 导入 2-按包装方式  的公式
    let _bzData = await wf_import_bz();
    newMxData = newMxData.concat(_bzData);
    // _param_mf.queryparams.arrg_usetype = 2;
    // res_mf = await CommonDynamicSelect(_param_mf);

    // if (res_mf?.datatable?.length) {
    //   let ll_packtype = _mainData.packtype;

    //   res_mf?.datatable.map((item: any) => {
    //     // 0-压包
    //     if (ll_packtype == 0 && item.if_packtype0 != 1) {
    //       return;
    //     }
    //     // 1-卷包
    //     if (ll_packtype == 1 && item.if_packtype1 != 1) {
    //       return;
    //     }
    //     // 2-国内
    //     if (ll_packtype == 2 && item.if_packtype2 != 1) {
    //       return;
    //     }

    //     let _data: any = {};
    //     if (Number(item.if_mtrl) > 1) {
    //       _data.addmx = "+";
    //       _data.delmx = "-";
    //     }
    //     _data.formulatype = item.formulatype;
    //     _data.if_mtrl = item.if_mtrl;
    //     _data.formulaid = item.formulaid;
    //     _data.sortcode = item.sortcode;
    //     _data.formulakind = item.formulakind;
    //     _data.formula = item.formula;
    //     _data.useformula = item.useformula;
    //     _data.gydscrp = item.gydscrp;

    //     newMxData.push(_data);
    //   });
    // }

    //加多一个 小侧2
    if (mattressTypeData.if_small_side2 == 1 && Number(_mainData.if_bcp_type) == 0) {
      let _params = {
        arg_array_formulakind: [3, 83, 43, 53, 63, 73],
        arg_array_formulatype: [0, 1, 2, 3]
      };
      let arr = funcAddMxSide(_params, { label: "小侧2" });
      if (isArray(arr) && arr.length) {
        newMxData = newMxData.concat(arr);
      }
    }

    //加多一个 小侧3
    if (mattressTypeData.if_small_side3 == 1 && Number(_mainData.if_bcp_type) == 0) {
      let _params = {
        arg_array_formulakind: [3, 83, 43, 53, 63, 73],
        arg_array_formulatype: [0, 1, 2, 3]
      };
      let arr = funcAddMxSide(_params, { label: "小侧3" });
      if (isArray(arr) && arr.length) {
        newMxData = newMxData.concat(arr);
      }
    }

    //加多一个 V侧2
    if (mattressTypeData.if_v_side2 == 1 && Number(_mainData.if_bcp_type) == 0) {
      let _params = {
        arg_array_formulakind: [4, 84, 44, 54, 64, 74],
        arg_array_formulatype: [0, 1, 2, 3]
      };
      let arr = funcAddMxSide(_params, { label: "V侧2" });
      if (isArray(arr) && arr.length) {
        newMxData = newMxData.concat(arr);
      }
    }

    //加多一个 V侧3
    if (mattressTypeData.if_v_side2 == 1 && Number(_mainData.if_bcp_type) == 0) {
      let _params = {
        arg_array_formulakind: [4, 84, 44, 54, 64, 74],
        arg_array_formulatype: [0, 1, 2, 3]
      };
      let arr = funcAddMxSide(_params, { label: "V侧3" });
      if (isArray(arr) && arr.length) {
        newMxData = newMxData.concat(arr);
      }
    }

    // 在 床垫类型 定义里面   按垫层默认配置  自动带出 垫层配置  和  垫层可选项
    if (mattressTypeData.dianceng_sort != "") {
      wf_add_dianceng_bytype(mattressTypeData.dianceng_sort);
    }

    state.diancengAreaEnum = wf_add_dianceng_area_bytype(mattressTypeData.dianceng_area);

    newMxData.sort((a: any, b: any) => {
      if (a.formulatype != b.formulatype) {
        return a.formulatype - b.formulatype;
      }
      if (a.xu != b.xu) {
        return a.xu - b.xu;
      }
      if (a.sortcode != b.sortcode) {
        return a.sortcode - b.sortcode;
      }
      return a.formulaid - b.formulaid;
    });

    state.oriMxData.list = newMxData;

    getMattressType();

    if (_mainData.mattressid == 0) {
      // wf_default_mtrlid();
      wf_default_mtrlid_notbz();
    }

    funcChaifenTab();
  };

  /**
   * @description 变更床垫分类时，重载明细数据 dw_1 itemchange
   * @author w_mattress_add dw_1 itemchange
   */
  const funcImportMattressMx = async () => {
    console.log("funcImportMattressMx state.LjDetailRef._mainData :>> ", state.LjDetailRef, state.orderStatus);
    const { _mainData, enumMap, baseformRef } = state.LjDetailRef;

    // let mainData = state.orderStatus == "new" ? initParam : _mainData;

    console.log("mainData :>> ", _mainData);
    if (!Number(_mainData.deptid)) {
      ElMessage.warning("请先选择部门");

      console.log("baseformRef.element :>> ", baseformRef.element);
      baseformRef.element.validateField("deptid");
      _mainData.mattresstypeid = "";
      return;
    }

    let deptEnum = enumMap.get("deptid");
    let _pricelistid = 0;
    if (deptEnum) {
      let depItem = deptEnum.find((item: any) => item.value == _mainData.deptid);
      console.log("depItem :>> ", depItem);
      if (depItem) {
        _pricelistid = Number(depItem.pricelistid);
      }
    }

    if (!_pricelistid) {
      ElMessage.warning("选择部门未设置价格表,请检查");
      return;
    }

    if (!_mainData.mattresstypeid) {
      ElMessage.warning("请先选择床垫类别");
      return;
    }

    funcImportMx();
  };

  // /**
  //  * @description 刷新报价清单
  //  */
  // const wf_retrieve_qingdan = () => {

  // }

  /**
   * @description 刷新报价清单
   */
  const wf_factory_profitrate = async () => {
    const { _mainData, enumMap } = state.LjDetailRef;

    console.log("wf_factory_profitrate enumMap :>> ", enumMap);

    let deptEnum = enumMap.get("deptid");
    console.log("deptEnum :>> ", deptEnum);
    if (deptEnum) {
      let depItem = deptEnum.find((item: any) => item.value == _mainData.deptid);
      console.log("depItem :>> ", depItem);
      if (depItem) {
        _mainData.dept_profitrate = Number(depItem.profitrate);
      }
    }

    let _params = {
      dsname: "web_factory_profitratelist",
      queryparams: {
        arg_deptid: _mainData.deptid,
        arg_bednettypeid_mattresstypeid: _mainData.mattresstypeid,
        kind: 1
      }
    };
    let res = await CommonDynamicSelect(_params);
    if (res?.datatable?.length > 0) {
      _mainData.profitrate = res?.datatable[0].profitrate;
    }
  };

  /**
   * @description 获取部门汇率 和  折扣率
   */
  const wf_get_moneyrate_discount = () => {
    const { _mainData, enumMap } = state.LjDetailRef;

    let deptEnum = enumMap.get("deptid");
    console.log("deptEnum :>> ", deptEnum);
    if (deptEnum) {
      let depItem = deptEnum.find((item: any) => item.value == _mainData.deptid);
      console.log("wf_get_moneyrate_discount depItem :>> ", depItem);
      if (depItem) {
        let _moneyrate = !depItem.moneyrate || Number(depItem.moneyrate) == 0 ? 1 : depItem.moneyrate;
        console.log("_mainData.if_moneyrate == 0 :>> ", _mainData.if_moneyrate == "0");
        if (_mainData.if_moneyrate == "0" || !_mainData.if_moneyrate) {
          _mainData.moneyrate = 1;
        } else {
          _mainData.moneyrate = _moneyrate;
        }

        _mainData.discount = depItem.discount;
      }
    }
  };

  /**
   * @description 清除运算结果
   */
  const wf_clear = () => {
    const { _mainData } = state.LjDetailRef;

    _mainData.total_fees_cost = 0;
    _mainData.total_cost = 0;
    _mainData.nottax_factory_cost = 0;
    _mainData.nottax_dept_cost = 0;
    _mainData.taxes = 0;
    _mainData.dept_cost = 0;
    _mainData.foreign_cost = 0;
    _mainData.hrcost = 0;
    _mainData.biandaicost = 0;
    _mainData.fob = 0;
    _mainData.profitrate_point = 0;
    _mainData.butao_point = 0;
    _mainData.chaizhuang_point = 0;
    _mainData.haimian_point = 0;

    state.fabricMxTabList.map(t => {
      if (t.ref && state[t.ref]) {
        console.log("t.ref?.value :>> ", t.ref, state[t.ref]);
        // console.log("state[t.ref].tableData :>> ", state[t.ref].tableData);
        // state[t.ref].tableData.map(item => {
        //   item.costamt = 0;
        //   item.replace_formula = "";
        //   item.if_success = 1;
        //   item.thickness = 1;
        // });
        let { fullData } = state[t.ref].element.getTableData();
        state[t.ref].element.setRow(fullData, {
          costamt: 0,
          replace_formula: "",
          if_success: 0
        });
        // console.log("fullData :>> ", fullData);
        // fullData = fullData.map((itm, idx) => {
        //   itm.xu = idx + 1;
        //   return itm
        // });
      }
    });
  };

  /**
   * @description 更新物料最新 单价等信息
   */
  const wf_cmp_update_mtrl = async () => {
    const { _mainData, enumMap } = state.LjDetailRef;
    let computeList = [
      "tabpage_8",
      "tabpage_9",
      "tabpage_10",
      "tabpage_11",
      "tabpage_12",
      "tabpage_13",
      "cushionsMx",
      "accessoriesMx",
      "packagMx"
    ];

    let arg_array_formulakind = [];
    state.fabricMxTabList.map(t => {
      if (!computeList.includes(t.name)) {
        return;
      }

      if (t.ref && state[t.ref]) {
        let { fullData } = state[t.ref].element.getTableData();
        fullData.map(itm => {
          arg_array_formulakind.push(itm.formulakind);
        });
      }
    });

    // 数组去重
    arg_array_formulakind = Array.from(new Set(arg_array_formulakind));

    let _param = {
      dsname: "web_mattress_formulalist",
      queryparams: {
        arg_array_formulakind: arg_array_formulakind
      }
    };
    let res = await CommonDynamicSelect(_param);
    if (res?.datatable?.length) {
      state.fabricMxTabList.map(t => {
        if (!computeList.includes(t.name)) {
          return;
        }

        if (t.ref && state[t.ref]) {
          let { fullData } = state[t.ref].element.getTableData();

          fullData.map(item => {
            let tFormula = res?.datatable.find(itm => itm.formulakind == item.formulakind);

            state[t.ref].element.setRow(item, {
              formula: tFormula.formula ?? "err",
              useformula: tFormula.useformula ?? "",
              gydscrp: tFormula.gydscrp ?? ""
            });
          });
        }
      });
    }

    //______________________________________________________
    state.fabricMxTabList.map(t => {
      if (!computeList.includes(t.name)) {
        return;
      }

      if (t.ref && state[t.ref]) {
        let { fullData } = state[t.ref].element.getTableData();

        fullData.map(async item => {
          if (item?.mtrlid && Number(item.mtrlid) > 0) {
            let res_mtrls = await wf_mtrl_find({ arg_mtrlid: item.mtrlid, arg_pricelistid: item.pricelistid });

            if (res_mtrls.length > 0) {
              let res_mtrl = res_mtrls[0];
              let _data: any = {
                mtrlname: res_mtrl.mtrlname,
                price: res_mtrl.pricelistprice,
                gram_weight: res_mtrl.gram_weight,
                cloth_width: res_mtrl.cloth_width,
                if_inputqty: res_mtrl.if_inputqty,
                priceunit: res_mtrl.priceunit,
                shrinkage: res_mtrl.shrinkage,
                if_areaprice: res_mtrl.if_areaprice
              };
              if (Number(res_mtrl.if_inputqty) == 1) {
                _data.thickness = res_mtrl.thickness;
              }
              if (!res_mtrl.formula) {
                _data.formula = res_mtrl.formula;
              }
              if (!res_mtrl.qty_formula) {
                _data.useformula = res_mtrl.qty_formula;
              }
              state[t.ref].element.setRow(item, _data);
            }
          }
        });
      }
    });
  };

  /**
   * @description 检查垫层  是否填写正确 并 更新 u_mattress_mx_mtrl_formulaid
   */
  const wf_check_dianceng_ifright = async () => {
    let arg_array_formulakind = [];
    let { fullData: dcData } = state.cushionsMxRef.element.getTableData();
    dcData.map(itm => {
      arg_array_formulakind.push(Number(itm.formulakind));
    });

    // 数组去重
    arg_array_formulakind = Array.from(new Set(arg_array_formulakind));

    let _param = {
      dsname: "web_mattress_formulalist",
      queryparams: {
        arg_array_formulakind: arg_array_formulakind
      }
    };
    let res = await CommonDynamicSelect(_param);
    if (res?.datatable?.length) {
      let { fullData } = state.cushionsMxRef.element.getTableData();

      fullData.map(item => {
        let tFormula = res?.datatable.find(itm => itm.formulakind == item.formulakind);
        state.cushionsMxRef.element.setRow(item, {
          formulaid: tFormula.formulaid
        });
      });
    }

    //检查是否 含有床网
    let lb_flag = arg_array_formulakind.includes(999);

    let lb_re_cmp = false; //批重算
    if (!lb_flag && !lb_re_cmp) {
      // ElMessageBox.confirm("垫层没有包含床网_,是否继续?", "询问", {
      //   confirmButtonText: '是',
      //   cancelButtonText: "否",
      //   type: "warning"
      // })
      //   .then(() => {

      //     return
      //   })
      //   .catch((e: TypeError) => {
      //     console.log("e :>> ", e);
      ElMessage({
        type: "info",
        message: "垫层没有包含床网_！"
      });
      //   });
    }
  };

  /**
   * @description 重算床网价格
   */
  const wf_cmp_bednet = () => {
    // bednetMxRef

    return true;
  };

  /**
   * @description 公式替换：替换大侧高度
   */
  const wf_replace_height_big_side = (arg_str: string, arg_chastr: string) => {
    if (arg_str.indexOf("【大侧高度】") <= 0) return arg_str;
    // let ls_str = arg_str;
    const { _mainData, enumMap } = state.LjDetailRef;

    let ls_seachstr = "大侧";

    let lde_sum = 0;
    state.cushionsMxRef.element.getTableData().fullData.map(itm => {
      if (itm.chastr.indexOf(ls_seachstr) > 0 && Number(itm.qty) > 0 && Number(itm.thickness) > 0) {
        lde_sum = floatAdd(lde_sum, floatMul(itm.qty, itm.thickness));
      }
    });

    let ls_temp = formatFixedNumber({ val: lde_sum }, 4);

    let ls_formula_big_side = "";
    let mtEnum = enumMap.get("mattresstypeid");
    let _mattresstypeid = _mainData?.mattresstypeid ?? 0;
    console.log("deptEnum :>> ", mtEnum);
    if (mtEnum) {
      let mtItem = mtEnum.find((item: any) => Number(item.value) == _mattresstypeid);
      console.log("wf_replace_height_big_side mtItem :>> ", mtItem);
      ls_formula_big_side = mtItem?.formula_big_side ?? "";
    }

    if (ls_formula_big_side) {
      arg_str = arg_str.replaceAll("【大侧高度】", ` ( ${ls_formula_big_side} ) `);
    }

    if (lde_sum) {
      arg_str = arg_str.replaceAll("【垫层】", ls_temp);
      arg_str = arg_str.replaceAll("【大侧高度】", ls_temp);
    }

    arg_str = arg_str.replaceAll("【位置】", `'${ls_seachstr}'`);

    return arg_str;
  };
  /**
   * @description 公式替换：小侧高度
   */
  const wf_replace_height_small_side = (arg_str: string, arg_chastr: string) => {
    if (arg_str.indexOf("【小侧高度】") <= 0) return arg_str;
    // let ls_str = arg_str;
    const { _mainData, enumMap } = state.LjDetailRef;

    let ls_seachstr = !arg_chastr || arg_chastr == "" ? "小侧1" : arg_chastr;

    let lde_sum = 0;
    state.cushionsMxRef.element.getTableData().fullData.map(itm => {
      if (itm.chastr.indexOf(ls_seachstr) > 0 && Number(itm.qty) > 0 && Number(itm.thickness) > 0) {
        lde_sum = floatAdd(lde_sum, floatMul(itm.qty, itm.thickness));
      }
    });

    let ls_temp = formatFixedNumber({ val: lde_sum }, 4);

    let ls_formula_big_side = "";
    let mtEnum = enumMap.get("mattresstypeid");
    let _mattresstypeid = _mainData?.mattresstypeid ?? 0;
    console.log("deptEnum :>> ", mtEnum);
    if (mtEnum) {
      let mtItem = mtEnum.find((item: any) => Number(item.value) == _mattresstypeid);
      console.log("wf_replace_height_big_side mtItem :>> ", mtItem);
      ls_formula_big_side = mtItem?.formula_big_side ?? "";
    }

    if (ls_formula_big_side) {
      arg_str = arg_str.replaceAll("【小侧高度】", ` ( ${ls_formula_big_side} ) `);
    }

    if (lde_sum) {
      arg_str = arg_str.replaceAll("【垫层】", ls_temp);
    }

    arg_str = arg_str.replaceAll("【位置】", `'${ls_seachstr}'`);
    arg_str = arg_str.replaceAll("【小侧高度】", ls_temp);

    return arg_str;
  };

  /**
   * @description 公式替换：V侧高度
   */
  const wf_replace_height_v_side = (arg_str: string, arg_chastr: string) => {
    if (arg_str.indexOf("【V侧高度】") <= 0) return arg_str;
    // let ls_str = arg_str;
    const { _mainData, enumMap } = state.LjDetailRef;

    let ls_seachstr = !arg_chastr || arg_chastr == "" ? "小侧1" : arg_chastr;

    let lde_sum = 0;
    state.cushionsMxRef.element.getTableData().fullData.map(itm => {
      if (itm.chastr.indexOf(ls_seachstr) > 0 && Number(itm.qty) > 0 && Number(itm.thickness) > 0) {
        lde_sum = floatAdd(lde_sum, floatMul(itm.qty, itm.thickness));
      }
    });

    let ls_temp = formatFixedNumber({ val: lde_sum }, 4);

    let ls_formula_big_side = "";
    let mtEnum = enumMap.get("mattresstypeid");
    let _mattresstypeid = _mainData?.mattresstypeid ?? 0;
    console.log("deptEnum :>> ", mtEnum);
    if (mtEnum) {
      let mtItem = mtEnum.find((item: any) => Number(item.value) == _mattresstypeid);
      console.log("wf_replace_height_big_side mtItem :>> ", mtItem);
      ls_formula_big_side = mtItem?.formula_big_side ?? "";
    }

    if (ls_formula_big_side) {
      arg_str = arg_str.replaceAll("【V侧高度】", ` ( ${ls_formula_big_side} ) `);
    }

    if (lde_sum) {
      arg_str = arg_str.replaceAll("【垫层】", ls_temp);
    }

    arg_str = arg_str.replaceAll("【位置】", `'${ls_seachstr}'`);

    ls_temp = formatFixedNumber({ val: 18 }, 4);
    arg_str = arg_str.replaceAll("【V侧高度】", ls_temp);

    return arg_str;
  };

  /**
   * @description 替换布料幅宽star
   * @returns string
   */
  const wf_replace_cloth_width = (item: any, fullData: any, formulakind: any) => {
    let ls_bl_cloth_width = "";

    // let { fullData: mlData } = state[t.ref].element.getTableData();
    fullData.find(itm => {
      if (!item?.chastr) {
        if (Number(itm.formulakind) == formulakind) {
          ls_bl_cloth_width = formatFixedNumber({ val: itm.cloth_width }, 4);
          return true;
        }
      } else {
        if (Number(itm.formulakind) == formulakind && itm.chastr == item?.chastr) {
          ls_bl_cloth_width = formatFixedNumber({ val: itm.cloth_width }, 4);
          return true;
        }
      }
    });

    // if (Number(ls_bl_cloth_width) > 0) {
    //   ls_Expression = ls_Expression.replaceAll('【布料幅宽】', ls_bl_cloth_width);
    //   ls_Use_Expression = ls_Use_Expression.replaceAll('【布料幅宽】', ls_bl_cloth_width);
    // }
    return ls_bl_cloth_width;
  };

  /**
   * @description 计算价格
   */
  const wf_cmp_cb = async () => {
    const { _mainData, enumMap, baseformRef } = state.LjDetailRef;

    //清除运算结果
    wf_clear();

    await wf_factory_profitrate();

    wf_get_moneyrate_discount();

    wf_cmp_update_mtrl();

    wf_check_dianceng_ifright();

    // 佣金
    if (_mainData?.commission == 0 || !_mainData.commission) {
      _mainData.commission = 1;
    }
    if (_mainData?.taxrate == 0 || !_mainData.taxrate) {
      _mainData.taxrate = 1;
    }
    if (_mainData?.other_rate == 0 || !_mainData.other_rate) {
      _mainData.other_rate = 1;
    }
    if (_mainData?.moneyrate == 0 || !_mainData.moneyrate) {
      _mainData.moneyrate = 1;
    }

    if (_mainData?.commission < 1) {
      ElMessage.error("佣金点数不能小于1");
      return;
    }
    if (_mainData?.taxrate < 1) {
      ElMessage.error("税率不能小于1");
      return;
    }
    if (_mainData?.other_rate < 1) {
      ElMessage.error("额外点数不能小于1");
      return;
    }
    if (_mainData?.dept_profitrate == 0) {
      ElMessage.error("部门利润率不能为0！");
      return;
    }

    // let _data = {
    //   ls_mattress_width: _mainData.mattress_width,
    //   ls_mattress_length: _mainData.mattress_length,
    //   ls_mattress_height: _mainData.mattress_height,
    //   ls_packqty: _mainData.packqty,
    //   ls_diameter: _mainData.diameter,
    //   ls_woodpallettype: _mainData.woodpallettype,
    //   ls_if_m_wbutao_way: _mainData.if_m_wbutao_way ?? "0",
    //   ls_if_db_wbutao_way: _mainData.if_db_wbutao_wa ?? "0",
    //   ls_s_cover_qty: _mainData.s_cover_qty ?? "0",
    //   ls_z_cover_qty: _mainData.z_cover_qty ?? "0",
    //   ls_x_cover_qty: _mainData.x_cover_qty ?? "0",
    //   ls_s_m_cover_qty: _mainData.s_m_cover_qty ?? "0",
    //   ls_z_m_cover_qty: _mainData.z_m_cover_qty ?? "0",
    //   ls_x_m_cover_qty: _mainData.x_m_cover_qty ?? "0",
    //   ls_if_m_chai: _mainData.if_m_chai ?? "0",
    //   ls_if_z_chai: _mainData.if_z_chai ?? "0",
    //   ls_if_d_chai: _mainData.if_d_chai ?? "0"
    // };

    // state.fabricMxTabList.map(t => {
    //   if (t.ref && state[t.ref]) {
    //     let { fullData } = state[t.ref].element.getTableData();
    //     fullData.map(item => {
    //       if ((!item.mtrlid || Number(item.mtrlid) == 0) && Number(item.formulakind) != 31) {
    //         let ls_Expression = item.formula;
    //         let ls_Use_Expression = item.useformula;

    //         let _mxData = {
    //           ls_price: item.price,
    //           ls_gram_weight: item.gram_weight,
    //           ls_cloth_width: item.cloth_width,
    //           ls_if_inputqty: item.if_inputqty,
    //           ls_qty: item.qty,
    //           ls_thickness: item.thickness,
    //           ls_shrinkage: Number(item.shrinkage) == 0 ? "1" : item.shrinkage,
    //           ls_if_areaprice: item.if_areaprice,
    //           ls_mtrlname: item.mtrlname ?? "null"
    //         };

    //         ls_Expression = wf_replace_height_big_side(ls_Expression, item.chastr);
    //         ls_Use_Expression = wf_replace_height_big_side(ls_Use_Expression, item.chastr);

    //         ls_Expression = wf_replace_height_small_side(ls_Expression, item.chastr);
    //         ls_Use_Expression = wf_replace_height_small_side(ls_Use_Expression, item.chastr);

    //         ls_Expression = wf_replace_height_v_side(ls_Expression, item.chastr);
    //         ls_Use_Expression = wf_replace_height_v_side(ls_Use_Expression, item.chastr);

    //         // 替换布料幅宽start
    //         let ls_bl_cloth_width = "";
    //         let _formulakind = Number(item.formulakind);
    //         // 大侧
    //         if (t.name == "tabpage_10" && t.type.includes(_formulakind)) {
    //           ls_bl_cloth_width = wf_replace_cloth_width(item, fullData, 2);

    //           if (Number(ls_bl_cloth_width) > 0) {
    //             ls_Expression = ls_Expression.replaceAll("【布料幅宽】", ls_bl_cloth_width);
    //             ls_Use_Expression = ls_Use_Expression.replaceAll("【布料幅宽】", ls_bl_cloth_width);
    //           }
    //         }

    //         //小侧
    //         if (t.name == "tabpage_11" && t.type.includes(_formulakind)) {
    //           ls_bl_cloth_width = wf_replace_cloth_width(item, fullData, 3);

    //           if (Number(ls_bl_cloth_width) > 0) {
    //             ls_Expression = ls_Expression.replaceAll("【布料幅宽】", ls_bl_cloth_width);
    //             ls_Use_Expression = ls_Use_Expression.replaceAll("【布料幅宽】", ls_bl_cloth_width);
    //           }
    //         }

    //         //V侧
    //         if (t.name == "tabpage_12" && t.type.includes(_formulakind)) {
    //           ls_bl_cloth_width = wf_replace_cloth_width(item, fullData, 4);

    //           if (Number(ls_bl_cloth_width) > 0) {
    //             ls_Expression = ls_Expression.replaceAll("【布料幅宽】", ls_bl_cloth_width);
    //             ls_Use_Expression = ls_Use_Expression.replaceAll("【布料幅宽】", ls_bl_cloth_width);
    //           }
    //         }

    //         //面裥绵
    //         if (t.name == "tabpage_8" && t.type.includes(_formulakind)) {
    //           ls_bl_cloth_width = wf_replace_cloth_width(item, fullData, 0);

    //           if (Number(ls_bl_cloth_width) > 0) {
    //             ls_Expression = ls_Expression.replaceAll("【布料幅宽】", ls_bl_cloth_width);
    //             ls_Use_Expression = ls_Use_Expression.replaceAll("【布料幅宽】", ls_bl_cloth_width);
    //           }
    //         }

    //         //底裥绵
    //         if (t.name == "tabpage_9" && t.type.includes(_formulakind)) {
    //           ls_bl_cloth_width = wf_replace_cloth_width(item, fullData, 1);

    //           if (Number(ls_bl_cloth_width) > 0) {
    //             ls_Expression = ls_Expression.replaceAll("【布料幅宽】", ls_bl_cloth_width);
    //             ls_Use_Expression = ls_Use_Expression.replaceAll("【布料幅宽】", ls_bl_cloth_width);
    //           }
    //         }
    //         //替换布料幅宽end

    //         //替换布套高star
    //         let ls_bl_bt_height = "";
    //         // 内布套
    //         let tabpage_14 = state.otherMxTabList.find(t => t.name == "tabpage_14");
    //         if (tabpage_14.type.includes(_formulakind)) {
    //           ls_bl_bt_height = "";

    //           let { fullData: mlData } = state[t.ref].element.getTableData();
    //           fullData.find(itm => {
    //             if (itm.formulakind == 101) {
    //               ls_bl_bt_height = formatFixedNumber({ val: itm.thickness }, 4);
    //               return t;
    //             }
    //           });

    //           if (Number(ls_bl_cloth_width) > 0) {
    //             ls_Expression = ls_Expression.replaceAll("【布套高】", ls_bl_bt_height);
    //             ls_Use_Expression = ls_Use_Expression.replaceAll("【布套高】", ls_bl_bt_height);
    //           }
    //         }
    //         // 外布套
    //         let tabpage_15 = state.otherMxTabList.find(t => t.name == "tabpage_15");
    //         if (tabpage_15.type.includes(_formulakind)) {
    //           ls_bl_bt_height = "";

    //           let { fullData: mlData } = state[t.ref].element.getTableData();
    //           fullData.find(itm => {
    //             if (itm.formulakind == 101) {
    //               ls_bl_bt_height = formatFixedNumber({ val: itm.thickness }, 4);
    //               return t;
    //             }
    //           });

    //           if (Number(ls_bl_cloth_width) > 0) {
    //             ls_Expression = ls_Expression.replaceAll("【布套高】", ls_bl_bt_height);
    //             ls_Use_Expression = ls_Use_Expression.replaceAll("【布套高】", ls_bl_bt_height);
    //           }
    //         }
    //         //替换布套高end

    //         //计算裥绵收缩率
    //         if ([50, 0, 40, 60, 70, 80].includes(_formulakind)) {
    //           //...
    //         }

    //         console.log("fullData item :>> ", item, item.formula);
    //         console.log("fullData item useformula :>> ", item.useformula);
    //         summaryMxData.value = summaryMxData.value.map(itm => {
    //           if (itm.field == "costamt") {
    //             itm.formula = ls_Expression;
    //           } else if (itm.field == "useqty") {
    //             itm.formula = ls_Use_Expression;
    //           }
    //           return itm;
    //         });

    //         let result = formulaPartsFormula(summaryMxData.value, fieldMxParams.value, { ..._data, ..._mxData });
    //         console.log(
    //           "fabricMxTabList formula result :>> ",
    //           summaryMxData.value,
    //           fieldMxParams.value,
    //           { ..._data, ..._mxData },
    //           result
    //         );
    //       }
    //     });
    //   }
    // });
  };

  /**
   * @description 展示计算公式
   * @param timeout
   */
  const gotoSummy = async (timeout = 0) => {
    if (userInfo.usermode == 1) {
      ElMessage.error("'业务员模式不可以查看计算公式！'");
      return false;
    }
    // console.log("LjDetailRef.value.mainData :>> ", LjDetailRef.value._mainData, summaryData.value);
    const { _mainData, enumMap, baseformRef } = state.LjDetailRef;
    const toast = useToast();

    let result = await calculateFormula(summaryData.value, fieldParams.value, _mainData);
    if (result.length) {
      // let _data = cloneDeep(_mainData);
      // result.map((t, i) => {
      //   _data[t.field] = t.value;
      // });
      result.map((t, i) => {
        _mainData[t.field] = t.value;
      });

      console.log("_data :>> ", _mainData, result);
      // toast.clear();
      toast(
        {
          component: ToastFormula,
          props: {
            t: t,
            formulas: summaryData.value,
            data: _mainData,
            fields: fieldParams.value,
            showFormula: state.showFormula
          },
          listeners: {
            toggleFormula: (data: any) => {
              state.showFormula = data;
              console.log("state.showFormula :>> ", state.showFormula);
            },
            refresh: () => {
              gotoSummy();
            }
          }
        },
        {
          position: POSITION.BOTTOM_RIGHT,
          icon: false,
          timeout: timeout,
          closeButton: false,
          toastClassName: "longjoe-toast"
        }
      );
    } else {
      ElMessage.error("计算公式有误");
    }
  };

  /**
   * @description 展示历史价格
   * @param timeout
   * @param params
   */
  const gotoHisprice = async (timeout = 0, params: any) => {
    const toast = useToast();
    toast(
      {
        component: ToastHistoryPrice,
        props: {
          ...params,
          t: t
        }
      },
      {
        position: POSITION.BOTTOM_RIGHT,
        icon: false,
        timeout: timeout,
        closeButton: false,
        toastClassName: "longjoe-toast"
      }
    );
  };

  const getFormulakindEnum = async () => {
    let _params = {
      dsname: "_Mapper_formulakind",
      queryparams: {}
    };
    let res = await CommonDynamicSelect(_params);
    let result = [];
    if (res?.datatable?.length > 0) {
      result = res?.datatable;
    }

    state.formulaKindEnum = result;

    _params = {
      dsname: "_Mapper_formulakind_dc",
      queryparams: {}
    };
    res = await CommonDynamicSelect(_params);
    result = [];
    if (res?.datatable?.length > 0) {
      result = res?.datatable;
      state.formulaKindDcEnum = result;
    }

    console.log("getFormulakindEnum state.formulaKindDcEnum :>> ", state.formulaKindDcEnum);
  };

  // 表格配置项
  const columns: ColumnProps<any>[] = [
    { type: "checkbox", width: 50, fixed: "left" },
    { title: "#", field: "pid", fixed: "left", width: 80 },
    {
      field: "deptid",
      title: "部门",
      search: {
        el: "select",
        key: "arg_deptid",
        props: {
          filterable: true
        },
        order: 1
      },
      basicinfo: {
        el: "select",
        editable: ALLOW_EDIT_STATE,
        rules: [{ required: true, message: "请先选择部门", trigger: "change" }],
        props: {
          filterable: true,
          clearable: false
        },
        order: 1,
        group: "单据信息"
      }
    },
    {
      field: "mattressrelcode",
      title: "床垫编码",
      basicinfo: {
        el: "input",
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "mattresstypeid",
      title: "床垫类别",
      basicinfo: {
        el: "select",
        editable: ALLOW_EDIT_STATE,
        rules: [{ required: true, message: "请先选择床垫类别", trigger: "change" }],
        props: {
          clearable: false,
          filterable: true,
          onChange: () => funcImportMattressMx()
        }
      }
    },
    {
      field: "mattressname",
      title: "床垫名称",
      align: "left",
      table: "u_mattress",
      search: {
        el: "input",
        key: "arg_search",
        titleKey: "searchKw",
        props: {
          placeholder: "唯一码/编码/名称"
        },
        order: 0
      },
      basicinfo: {
        el: "input",
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "flag",
      title: "财务审核",
      table: "u_mattress",
      search: {
        el: "select",
        key: "status_flag",
        titleKey: "status",
        props: {
          clearable: true,
          placeholder: "全部"
        },
        order: 2,
        render: scope => {
          // let _keys = Object.keys(scope);
          // let _data = _keys.includes("row") ? scope.row : _keys.includes("searchParam") ? scope.searchParam : scope;
          return (
            <el-select v-model={scope.searchParam.status_flag} placeholder="全部" clearable>
              <el-option label="待下单" value="1" />
              <el-option label="已下单" value="2" />
              <el-option label="待财务审核" value="3" />
              <el-option label="已财务审核" value="4" />
            </el-select>
          );
        }
      }
    },
    {
      field: "dept_profitrate",
      title: "部门让利点数",
      basicinfo: {
        el: "input-number",
        editable: ALLOW_EDIT_STATE,
        order: 2,
        group: "单据信息"
      }
    },
    {
      field: "fees_dscrp",
      title: "额外费用说明",
      basicinfo: {
        el: "input",
        props: { type: "textarea", rows: 2 },
        editable: ALLOW_EDIT_STATE,
        row: 2
      }
    },
    {
      field: "foreign_cost",
      table: "u_mattress",
      title: "外币价",
      basicinfo: {
        titleKey: "bi_foreign_cost"
      }
    },
    {
      field: "nottax_dept_cost",
      table: "u_mattress",
      title: "部门不含税价",
      basicinfo: {
        titleKey: "bi_nottax_dept_cost"
      }
    },
    {
      field: "if_bcp_type",
      title: "半成品",
      basicinfo: {
        labelHidden: true,
        render: (scope: any) => {
          let _disabled = !ALLOW_EDIT_STATE.includes(scope.status);
          return (
            <>
              <el-checkbox v-model={scope.searchParam.if_bcp_type} disabled={_disabled} label="半成品" class="mr-8" />
              <el-checkbox v-model={scope.searchParam.if_zhedie_type} disabled={_disabled} label="折叠款" />
            </>
          );
        }
      }
    },
    {
      field: "if_m_chai",
      title: "面拆",
      basicinfo: {
        labelHidden: true,
        render: (scope: any) => {
          let _disabled = !ALLOW_EDIT_STATE.includes(scope.status);
          return (
            <>
              <el-checkbox v-model={scope.searchParam.if_m_chai} disabled={_disabled} label="面拆" class="mr-8" />
              <el-checkbox v-model={scope.searchParam.if_z_chai} disabled={_disabled} label="中拆" class="mr-8" />
              <el-checkbox v-model={scope.searchParam.if_d_chai} disabled={_disabled} label="底拆" />
            </>
          );
        }
      }
    },
    {
      field: "mattress_width",
      title: "床垫宽/CM",
      basicinfo: {
        el: "input-number",
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "mattress_length",
      title: "床垫长/CM",
      basicinfo: {
        el: "input-number",
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "mattress_height",
      title: "床垫高/CM",
      basicinfo: {
        el: "input-number",
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "if_w_butao",
      title: "顶布裥棉",
      basicinfo: {
        el: "checkbox",
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "biandai_qty",
      title: "边带数",
      basicinfo: {
        el: "input-number",
        editable: (scope: any) => {
          let someone =
            Number(scope.searchParam.if_m_chai) + Number(scope.searchParam.if_z_chai) + Number(scope.searchParam.if_d_chai);
          if (ALLOW_EDIT_STATE.includes(scope.status) && someone > 0) {
            return true;
          }
          return false;
        }
      }
    },
    {
      field: "if_n_butao",
      title: "内布套",
      basicinfo: {
        labelHidden: true,
        render: (scope: any) => {
          let _disabled = !ALLOW_EDIT_STATE.includes(scope.status);
          return (
            <>
              <el-checkbox v-model={scope.searchParam.if_n_butao} disabled={_disabled} label="内布套" class="mr-8" />
            </>
          );
        },
        editvisible: (scope: any) => {
          let someone =
            Number(scope.searchParam.if_m_chai) + Number(scope.searchParam.if_z_chai) + Number(scope.searchParam.if_d_chai);
          if (ALLOW_EDIT_STATE.includes(scope.status) && someone > 0) {
            return true;
          }
          return false;
        }
      }
    },
    {
      field: "s_cover_qty",
      title: "内布套上覆",
      basicinfo: {
        el: "input-number",
        editable: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_n_butao)) {
            return true;
          }
          return false;
        },
        editvisible: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_n_butao)) {
            return true;
          }
          return false;
        }
      }
    },
    {
      field: "z_cover_qty",
      title: "内布套侧覆",
      basicinfo: {
        el: "input-number",
        editable: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_n_butao)) {
            return true;
          }
          return false;
        },
        editvisible: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_n_butao)) {
            return true;
          }
          return false;
        }
      }
    },
    {
      field: "x_cover_qty",
      title: "内布套下覆",
      basicinfo: {
        el: "input-number",
        editable: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_n_butao)) {
            return true;
          }
          return false;
        },
        editvisible: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_n_butao)) {
            return true;
          }
          return false;
        }
      }
    },
    {
      field: "if_m_wbutao_way",
      title: "面料外布套做法",
      basicinfo: {
        labelHidden: true,
        render: (scope: any) => {
          let _disabled = !ALLOW_EDIT_STATE.includes(scope.status);
          return (
            <>
              <el-checkbox v-model={scope.searchParam.if_m_wbutao_way} disabled={_disabled} label="面料外布套做法" class="mr-8" />
            </>
          );
        },
        editvisible: (scope: any) => {
          let someone =
            Number(scope.searchParam.if_m_chai) + Number(scope.searchParam.if_z_chai) + Number(scope.searchParam.if_d_chai);
          if (ALLOW_EDIT_STATE.includes(scope.status) && someone > 0) {
            return true;
          }
          return false;
        }
      }
    },
    {
      field: "s_m_cover_qty",
      title: "面层向大侧覆盖",
      basicinfo: {
        el: "input-number",
        editable: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_m_wbutao_way)) {
            return true;
          }
          return false;
        },
        editvisible: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_m_wbutao_way)) {
            return true;
          }
          return false;
        }
      }
    },
    {
      field: "z_m_cover_qty",
      title: "大侧向底层覆盖",
      basicinfo: {
        el: "input-number",
        editable: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_m_wbutao_way)) {
            return true;
          }
          return false;
        },
        editvisible: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_m_wbutao_way)) {
            return true;
          }
          return false;
        }
      }
    },
    {
      field: "x_m_cover_qty",
      title: "底层向大侧覆盖",
      basicinfo: {
        el: "input-number",
        editable: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_m_wbutao_way)) {
            return true;
          }
          return false;
        },
        editvisible: (scope: any) => {
          if (ALLOW_EDIT_STATE.includes(scope.status) && Number(scope.searchParam.if_m_wbutao_way)) {
            return true;
          }
          return false;
        }
      }
    },
    {
      field: "commission",
      title: "佣金点数",
      basicinfo: {
        el: "input-number",
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "other_rate",
      title: "额外点数",
      basicinfo: {
        el: "input-number",
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "extras_cost",
      title: "额外费用",
      basicinfo: {
        el: "input-number",
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "taxes",
      title: "税金",
      enum: [
        {
          label: "不含税",
          value: 1
        },
        {
          label: "含税",
          value: 1.07
        }
      ],
      basicinfo: {
        el: "select",
        editable: ALLOW_EDIT_STATE,
        render: (scope: any) => {
          let optionRender = [];
          let _disabled = !ALLOW_EDIT_STATE.includes(scope.status);
          console.log("taxrate scope.enum :>> ", scope.enum);
          scope.enum.map(item => {
            optionRender.push(<el-option label={item.label} value={item.value} />);
          });
          let slotprefix = {
            prefix: () => {
              return <>{scope.searchParam.taxrate}</>;
            }
          };

          let _taxrate = Number(scope.searchParam.taxrate);
          return (
            <el-select
              v-model={_taxrate}
              v-slots={slotprefix}
              class="select-text-right"
              disabled={_disabled}
              onChange={val => funcTaxrateChange(val, scope.searchParam)}
            >
              {optionRender}
            </el-select>
          );
        }
      }
    },
    {
      field: "moneyrate",
      title: "汇率",
      basicinfo: {
        el: "select",
        editable: ALLOW_EDIT_STATE,
        render: (scope: any) => {
          let optionRender = [];
          let _disabled = !ALLOW_EDIT_STATE.includes(scope.status);
          scope.enum.map(item => {
            optionRender.push(<el-option label={item.label} value={item.value} />);
          });
          let slotprefix = {
            prefix: () => {
              return <>{scope.searchParam.moneyrate}</>;
            }
          };

          return (
            <el-select
              v-model={scope.searchParam.if_moneyrate}
              v-slots={slotprefix}
              class="select-text-right"
              disabled={_disabled}
              onChange={val => funcMoneyrateChange(val, scope.searchParam)}
            >
              {optionRender}
            </el-select>
          );
        }
      }
    }
  ];

  const columnsMx: ColumnProps<any>[] = [
    { title: "#", type: "seq", fixed: "left", width: 80 },
    {
      title: "计算成功?",
      field: "if_success",
      datatype: "checkbox",
      limited: () => {
        const { userInfo } = useUserStore();
        return userInfo.usermode != 0;
      }
    },
    {
      title: "+",
      field: "addmx",
      width: 80,
      render: (scope: any) => {
        let _if_mtrl = Number(scope.row.if_mtrl);
        if (_if_mtrl > 1) {
          if (state.orderStatus) {
            return (
              <>
                <ElPopconfirm
                  width="220"
                  icon={InfoFilled}
                  title={t("business.tips.mattress.addMx")}
                  confirm-button-text={t("common.addText")}
                  onConfirm={() => funcAddMtrlMx(scope)}
                >
                  {{
                    reference: () => {
                      return <ElButton type="primary" plain circle icon={Plus}></ElButton>;
                    }
                  }}
                </ElPopconfirm>
              </>
            );
            // return <ElButton type="primary" plain circle icon={Plus} onClick={() => funcAddMtrlMx(scope)}></ElButton>;
          } else {
            return <>+</>;
          }
        } else {
          return <></>;
        }
      }
    },
    {
      title: "-",
      field: "delmx",
      width: 80,
      render: (scope: any) => {
        let _if_mtrl = Number(scope.row.if_mtrl);
        if (_if_mtrl > 1) {
          if (state.orderStatus) {
            return (
              <>
                <ElPopconfirm
                  width="220"
                  icon={InfoFilled}
                  title={t("business.tips.mattress.delMx")}
                  confirm-button-text={t("common.delText")}
                  confirm-button-type="danger"
                  onConfirm={() => funcDelMtrlMx(scope)}
                >
                  {{
                    reference: () => {
                      return <ElButton type="danger" plain circle icon={Minus} />;
                    }
                  }}
                </ElPopconfirm>
              </>
            );
            // return <ElButton type="danger" plain circle icon={Minus} onClick={() => funcDelMtrlMx(scope)}></ElButton>;
          } else {
            return <>-</>;
          }
        } else {
          return <></>;
        }
      }
    },
    {
      title: "位置",
      field: "chastr"
    },
    {
      title: "公式名",
      field: "formulakind",
      table: "u_mattress_formula",
      align: "left",
      isFilterEnum: true,
      fieldNames: { value: "value", label: "label" },
      // enum: async () => {
      //   let res = await CommonDynamicSelect({
      //     dsname: "_Mapper_formulakind",
      //     queryparams: {}
      //   });
      //   return { data: res.datatable };
      // }
      render: (scope: any) => {
        const { column, row, status } = scope;
        let itmName = state.formulaKindEnum.find(t => t.value == row.formulakind)?.label ?? "";
        return <>{itmName}</>;
      }
    },
    {
      title: "按物料？",
      field: "if_mtrl",
      table: "u_mattress_formula",
      enum: [
        {
          value: "0",
          label: "无物料"
        },
        {
          value: "1",
          label: "单物料"
        },
        {
          value: "2",
          label: "多物料"
        }
      ]
    },
    {
      title: "厚度cm",
      field: "thickness",
      datatype: "number",
      editRender: {
        name: "$input"
      }
    },
    {
      title: "物料",
      field: "mtrlname",
      editRender: {},
      editColRender: (scope: any) => {
        console.log("mtrlname hooks render scope :>> ", scope);
        console.log("mtrlname hooks render LjDetailRef.value._mainData :>> ", state.LjDetailRef);
        const { column, row, status } = scope;
        let field = column.field;
        let _label = column.title;
        // if (column?.format) {
        //   _label = handleRowAccordingToProp(searchParam, field, column?.format);
        // }
        let _deptid = state.LjDetailRef._mainData.deptid;
        let deptEnum = state.LjDetailRef.enumMap.get("deptid");
        let _pricelistid = 0;
        console.log("deptEnum :>> ", deptEnum);
        if (deptEnum) {
          let depItem = deptEnum.find((item: any) => item.value == _deptid);
          console.log("depItem :>> ", depItem);
          if (depItem) {
            _pricelistid = Number(depItem.pricelistid);
          }
        }
        console.log("_pricelistid :>> ", _pricelistid, row.formulakind);

        console.log("state.mtrltypeTabList :>> ", state.mtrltypeTabList);

        let _mtrltypeItem = state.mtrltypeTabList.find(t => t.formulakinds.includes(Number(row.formulakind)));
        !_mtrltypeItem && (_mtrltypeItem = { value: -1 });

        let params = {
          mtrltype: _mtrltypeItem.value,
          pricelistid: _pricelistid
        };

        return (
          <>
            <MtrldefSelect
              value={row.mtrlid}
              {...params}
              clearable
              placeholder={_label}
              onOpenModal={() => fModelChoseMtrl(row, params, _mtrltypeItem.label)}
              onSelect={(val: any) => rModelSetMtrl(row, val)}
              onClear={() => rModelClearMtrl(row)}
            />
          </>
        );
      }
    },
    {
      title: "数量/长度",
      field: "qty",
      datatype: "number",
      editRender: {
        name: "input"
      }
    },
    {
      title: "物料单价",
      field: "price",
      datatype: "number",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "单位",
      field: "priceunit"
    },
    {
      title: "收缩率",
      field: "shrinkage",
      datatype: "number",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "克重",
      field: "gram_weight",
      datatype: "number",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "幅宽",
      field: "cloth_width",
      datatype: "number",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "固定厚度?",
      field: "if_inputqty",
      datatype: "checkbox",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "按面积单价？",
      field: "if_areaprice",
      datatype: "checkbox",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "成本金额",
      field: "costamt",
      datatype: "number",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "金额文本公式",
      field: "formula",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "金额数字公式",
      field: "replace_formula",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "清单用量",
      field: "useqty",
      datatype: "number",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "用量文本公式",
      field: "useformula",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "用量数字公式",
      field: "replace_useformula",
      limited: () => {
        return userInfo.usermode != 0;
      }
    },
    {
      title: "工艺填写说明",
      field: "gydscrp"
    }
  ];

  /**
   * @description 主表计算公式
   */
  const summaryData = ref<any>([
    {
      label: "总成本",
      field: "total_cost",
      formula:
        "if([折叠款] = 1, ([总材料成本]*[大小单]+[款式费用]+[边带费用]+[额外费用]+[制造费用]) * 2, [总材料成本]*[大小单]+[款式费用]+[边带费用]+[额外费用]+[制造费用])",
      power: () => {
        if (userInfo.empid != 0 && userInfo.usermode != 0) {
          return false;
        } else {
          return true;
        }
      }
    },
    {
      label: "不含税出厂价",
      field: "nottax_factory_cost",
      formula: "[总成本] * ([工厂利润率] + [利润率点数] + [布套点数] + [拆装点数] + [海绵点数]) * [管理费点]"
    },
    {
      label: "部门售价",
      field: "nottax_dept_cost",
      formula: "[dijia_cost] / (1 - ([佣金点数] - 1)) * [额外点数] + [fob]"
    },
    {
      label: "税金",
      field: "taxes",
      formula: "([部门售价] * ([税率] - 1)) + [佣金] * 0.05"
    },
    {
      label: "部门含税价",
      field: "dept_cost",
      formula: "([部门售价] + [佣金] * 0.06) * [税率] * if([fob] = 0, 1, [折扣率])"
    },
    {
      label: "外币价",
      field: "foreign_cost",
      formula: "if([汇率] <> 0, [部门含税价] / [汇率], 0)"
    },
    {
      label: "底价 ",
      field: "dijia_cost_cp",
      formula: "if(([dept_profitrate] + [dept_profitrate_rangli] / 100) <> 0, [dijia_cost] ,0 )"
    },
    {
      label: "佣金",
      field: "commission_cp",
      formula: "[dijia_cost] / (1 - ([佣金点数] - 1 )) - [dijia_cost]"
    },
    {
      label: "FOB",
      field: "fob",
      formula: "[fob]"
    }
  ]);

  /**
   * @description 主表公式字段照表
   */
  const fieldParams = ref<any>([
    {
      label: "总成本",
      field: "total_cost"
    },
    {
      label: "不含税出厂价",
      field: "nottax_factory_cost"
    },
    {
      label: "部门售价",
      field: "nottax_dept_cost"
    },
    {
      label: "税金",
      field: "taxes"
    },
    {
      label: "部门含税价",
      field: "dept_cost"
    },
    {
      label: "外币价",
      field: "foreign_cost"
    },
    {
      label: "总材料成本",
      field: "total_material_cost"
    },
    {
      label: "大小单",
      field: "dannum_rate"
    },
    {
      label: "款式费用",
      field: "hrcost"
    },
    {
      label: "边带费用",
      field: "biandaicost"
    },
    {
      label: "额外费用",
      field: "extras_cost"
    },
    {
      label: "制造费用",
      field: "zhizao_amt"
    },
    {
      label: "折叠款",
      field: "if_zhedie_type"
    },
    {
      label: "管理费点",
      field: "guanli_rate"
    },
    {
      label: "工厂利润率",
      field: "profitrate"
    },
    {
      label: "利润率点数",
      field: "profitrate_point"
    },
    {
      label: "布套点数",
      field: "butao_point"
    },
    {
      label: "拆装点数",
      field: "chaizhuang_point"
    },
    {
      label: "海绵点数",
      field: "haimian_point"
    },
    {
      label: "部门利润率",
      field: "dept_profitrate"
    },
    {
      label: "部门让利点",
      field: "dept_profitrate_rangli"
    },
    {
      label: "额外点数",
      field: "other_rate"
    },
    {
      label: "佣金点数",
      field: "commission"
    },
    {
      label: "税率",
      field: "taxrate"
    },
    {
      label: "折扣率",
      field: "discount"
    },
    {
      label: "汇率",
      field: "moneyrate"
    },
    {
      label: "底价",
      field: "dijia_cost"
    }
  ]);

  /**
   * @description 明细公式字段照表
   */
  const fieldMxParams = ref<any>([
    {
      label: "名称前2位",
      field: "ls_temp_left_2"
    },
    {
      label: "规格宽",
      field: "ls_mattress_width"
    },
    {
      label: "规格长",
      field: "ls_mattress_length"
    },
    {
      label: "规格高",
      field: "ls_mattress_height"
    },
    {
      label: "压包数量",
      field: "ls_packqty"
    },
    {
      label: "卷包直径",
      field: "ls_diameter"
    },
    {
      label: "顶布裥棉外布套做法",
      field: "ls_if_db_wbutao_way"
    },
    {
      label: "面料外布套做法",
      field: "ls_if_m_wbutao_way"
    },
    {
      label: "内布套上覆",
      field: "ls_s_cover_qty"
    },
    {
      label: "内布套侧覆",
      field: "ls_z_cover_qty"
    },
    {
      label: "内布套下覆",
      field: "ls_x_cover_qty"
    },
    {
      label: "面料上覆",
      field: "ls_s_m_cover_qty"
    },
    {
      label: "面料侧覆",
      field: "ls_z_m_cover_qty"
    },
    {
      label: "面料下覆",
      field: "ls_x_m_cover_qty"
    },
    {
      label: "面拆",
      field: "ls_if_m_chai"
    },
    {
      label: "中拆",
      field: "ls_if_z_chai"
    },
    {
      label: "底拆",
      field: "ls_if_d_chai"
    },
    {
      label: "物料单价",
      field: "ls_price"
    },
    {
      label: "物料克重",
      field: "ls_gram_weight"
    },
    {
      label: "幅宽",
      field: "ls_cloth_width"
    },
    {
      label: "数量",
      field: "ls_qty"
    },
    {
      label: "物料厚度",
      field: "ls_if_inputqty"
    },
    {
      label: "固定厚度",
      field: "ls_if_inputqty"
    },
    {
      label: "厚度",
      field: "ls_thickness"
    },
    {
      label: "按面积单价",
      field: "ls_if_areaprice"
    },
    {
      label: "物料名称",
      field: "ls_mtrlname"
    },
    {
      label: "木托方式",
      field: "ls_woodpallettype",
      enum: [
        { label: "  '普通木托'   ", value: "0" },
        { label: "  '夹板木托'   ", value: "1" },
        { label: "  '铁管木托'   ", value: "2" }
      ]
    }
  ]);

  /**
   * @description 明细表计算公式
   */
  const summaryMxData = ref<any>([
    {
      label: "计算成本金额",
      field: "costamt",
      formula: ""
    },
    {
      label: "计算清单用量",
      field: "useqty",
      formula: ""
    }
  ]);

  const funcMergeColumn = (columns: any, target: any) => {
    return columns.map(t => {
      let itm = target.find(item => t.field === item.field);
      if (itm) {
        t = defaultsDeep(itm, t);
      }
      return t;
    });
  };

  const cushionsEdit = reactive<any>({
    name: "VxeSelect",
    options: state.formulaKindDcEnum,
    optionProps: {
      label: "label",
      value: "value"
    }
  });

  const bednetCoumns: ColumnProps<any>[] = [
    {
      title: "位置",
      field: "chastr",
      visible: false
    }
  ];
  const cushionsColumns: ColumnProps<any>[] = [
    {
      title: "位置",
      field: "chastr",
      editRender: {},
      editColRender: (scope: any) => {
        console.log("formulakind chastr scope :>> ", scope, state.diancengAreaEnum);
        return (
          <>
            <el-select v-model={scope.row.chastr}>
              {{
                default: () => {
                  let rs = [];
                  state.diancengAreaEnum.map((t: any) => {
                    rs.push(<el-option label={t.label} value={t.value} />);
                  });
                  return rs;
                }
              }}
            </el-select>
          </>
        );
      }
    },
    {
      title: "公式名",
      field: "formulakind",
      table: "u_mattress_formula",
      align: "left",
      isFilterEnum: true,
      fieldNames: { value: "value", label: "label" },
      // editRender: {
      //   name: "VxeSelect",
      //   options: state.formulaKindDcEnum
      // }
      // editRender: cushionsEdit
      // render: (scope: any) => {
      //   const { column, row, status } = scope;
      //   let itmName = state.formulaKindEnum.find(t => t.value == row.formulakind)?.label ?? "";
      //   return <>{itmName}</>;
      // },
      editRender: {},
      editColRender: (scope: any) => {
        console.log("formulakind editColRender scope :>> ", scope);
        return (
          <>
            <el-select v-model={scope.row.formulakind}>
              {{
                default: () => {
                  let rs = [];
                  state.formulaKindDcEnum.map((t: any) => {
                    rs.push(<el-option label={t.label} value={t.value} />);
                  });
                  return rs;
                }
              }}
            </el-select>
          </>
        );
      }
    },
    {
      title: "+",
      field: "addmx",
      visible: false
    },
    {
      title: "-",
      field: "delmx",
      visible: false
    },
    {
      title: "按物料?",
      field: "if_mtrl",
      visible: false
    }
  ];
  const accessoriesColumns: ColumnProps<any>[] = [
    {
      title: "位置",
      field: "chastr",
      visible: false
    }
  ];
  const packagColumns: ColumnProps<any>[] = [
    {
      title: "位置",
      field: "chastr",
      visible: false
    }
  ];
  const columnsMxInnerClothLayer: ColumnProps<any>[] = [];

  return {
    ...toRefs(state),
    columns,
    columnsMx,
    columnsMxBednet: funcMergeColumn(columnsMx, bednetCoumns),
    columnsMxCushions: funcMergeColumn(columnsMx, cushionsColumns),
    columnsMxAccessories: funcMergeColumn(columnsMx, accessoriesColumns),
    columnsMxPackag: funcMergeColumn(columnsMx, packagColumns),
    columnsMxInnerClothLayer,
    summaryData,
    fieldParams,
    funcAddMxSide,
    funcChaifenTab,
    getData_mx,
    dataCallback,
    dataCallbackMx,
    getMattressType,
    gotoSummy,
    gotoHisprice,
    getFormulakindEnum,
    funcPacktypeChange,
    dynamicRef,
    wf_cmp_cb
  };
};
