Skip to content
On this page

8D 改进

业务模板

8D 报告状态 eightDisciplinesStatus

json
{
  "groupCode": "baseForm",
  "fieldType": "select",
  "fieldLabel": "8D报告状态",
  "fieldName": "eightDisciplinesStatus",
  "dictCode": "srm8DStatus",
  "defaultValue": "D0",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  // 8D状态 eightDisciplinesStatus
  // 数据字典 srm8DStatus (D0: 问题提出, D1: 小组成立, D2: 问题界定, D3: 围堵措施, D4: 原因分析, D5: 纠正措施, D6: 效果验证, D7: 预防再发生, D8: 结案评价, D9: 已结案, D10: 已关闭)

  /**
   * @description: 业务规则
   * 8D状态 不是 问题提出 状态时, 表头所有字段不允许再编辑
   * @return {*}
   */
  setItemDisabled("baseForm", "***", value !== "D0", [
    "eightDisciplinesNumber", // 8D报告编号
    "eightDisciplinesStatus", // 8D报告状态
    "supplierName", // 供应商名称
    "materialDesc", // 物料描述
    "cateCode", // 物料分类编码
    "cateCode", // 物料分类编码
    "d3FinishTime", // D3实际完成时间
    "createDepartment", // 创建部门
    "publishUser", // 发布人
    "publishTime", // 发布时间
    "materialName", // 物料名称
  ]);

  // D1:小组成立
  const tableData = pageData["eightDisciplinesTeamList"];

  const arr = [
    "D0",
    "D1",
    "D2",
    "D3",
    "D4",
    "D5",
    "D6",
    "D7",
    "D8",
    "D9",
    "D10",
  ];

  const flag = value === "D0" || !value;
  // D2:问题界定
  setItemDisabled("eightDisciplinesTwo", "***", flag || value === "D1");

  // 原因分析 analysis;
  // 分组groupCode: eightDisciplinesFour;
  // 如果8D状态值不符合范围时, 置灰整个分组;
  // D4:原因分析
  setItemDisabled("eightDisciplinesFour", "***", flag);
  // 分层级控制
  if (!flag) {
    const afterD4 = arr.slice(5);
    setItemDisabled("eightDisciplinesFour", "***", afterD4.includes(value));

    if (!afterD4.includes(value)) {
      // 如果不是当前负责人时, 置灰整个分组;
      const D4Row = tableData.find((n) => n.reportFlowStep === "D4");
      if (D4Row) {
        let account = `${D4Row.toElsAccount}${D4Row.subAccount}`;
        let userAccount = `${userInfo.elsAccount}${userInfo.subAccount}`;
        setItemDisabled("eightDisciplinesFour", "***", account !== userAccount);
      }
    }
  }

  // 预防措施 precaution
  // 分组groupCode: eightDisciplinesSeven;
  // 如果8D状态值不符合范围时, 置灰整个分组;
  // D7:预防再发生
  setItemDisabled("eightDisciplinesSeven", "***", flag);
  // 分层级控制
  if (!flag) {
    const afterD7 = arr.slice(8);
    setItemDisabled("eightDisciplinesSeven", "***", afterD7.includes(value));
    if (!afterD7.includes(value)) {
      // 如果不是当前负责人时, 置灰整个分组;
      const D7Row = tableData.find((n) => n.reportFlowStep === "D7");
      if (D7Row) {
        let account = `${D7Row.toElsAccount}${D7Row.subAccount}`;
        let userAccount = `${userInfo.elsAccount}${userInfo.subAccount}`;
        setItemDisabled(
          "eightDisciplinesSeven",
          "***",
          account !== userAccount,
        );
      }
    }
  }

  // 结案评价 closedCondition
  // 分组groupCode: eightDisciplinesEight;
  // 如果8D状态值不符合范围时, 置灰整个分组;
  // D8:结案评价
  setItemDisabled("eightDisciplinesEight", "***", flag);
  // 分层级控制
  if (!flag) {
    const afterD8 = arr.slice(9);
    setItemDisabled("eightDisciplinesEight", "***", afterD8.includes(value));
    if (!afterD8.includes(value)) {
      // 如果不是当前负责人时, 置灰整个分组;
      const D8Row = tableData.find((n) => n.reportFlowStep === "D8");
      if (D8Row) {
        let account = `${D8Row.toElsAccount}${D8Row.subAccount}`;
        let userAccount = `${userInfo.elsAccount}${userInfo.subAccount}`;
        setItemDisabled(
          "eightDisciplinesEight",
          "***",
          account !== userAccount,
        );
      }
    }
  }
}

报告类型 eightDisciplinesType

json
{
  "groupCode": "baseForm",
  "fieldType": "select",
  "fieldLabel": "报告类型",
  "fieldName": "eightDisciplinesType",
  "dictCode": "srm8DType",
  "defaultValue": "gysgj",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  // 报告类型 eightDisciplinesType
  // 数据字典 srm8DType (gysgj: 供应商改进, nbgj: 内部改进)

  /**
   * @description: 业务规则
   * 报价类型为 供应商改进 时,对方ELS账号 必填,否则置灰
   * @return {*}
   */
  if (pageData.eightDisciplinesStatus === "D0") {
    setItemRequiredOrDisabled("baseForm", "toElsAccount", value === "gysgj");
  }

  // 本地页面处理复杂绑定函数需求
  topEmit && topEmit();
}

对方 ELS 账号 toElsAccount

json
{
  "groupCode": "baseForm",
  "fieldType": "remoteSelect",
  "fieldLabel": "对方ELS账号",
  "fieldName": "toElsAccount",
  "required": "1"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  if (!data || !data.length) {
    return;
  }
  const {
    toElsAccount = "",
    supplierCode = "",
    supplierName = "",
  } = data[0] || {};
  pageData.toElsAccount = toElsAccount;
  pageData.supplierCode = supplierCode;
  pageData.supplierName = supplierName;

  // 本地页面处理复杂绑定函数需求
  topEmit && topEmit();
}
js
{
  modalColumns: [
    {
      field: "toElsAccount",
      title: "供应商账号",
      fieldLabelI18nKey: "i18n_field_toElsAccount",
      with: 150,
    },
    {
      field: "supplierName",
      title: "供应商名称",
      fieldLabelI18nKey: "i18n_field_supplierName",
      with: 150,
    },
    {
      field: "supplierCode",
      title: "供应商编码",
      fieldLabelI18nKey: "i18n_field_supplierCode",
      with: 150,
    },
  ],
  modalUrl: "/supplier/supplierMaster/list",
  modalParams: {
    frozenFunctionValue: "0",
  },
  params: () => {
    return { frozenFunctionValue: "0" };
  },
  afterClearCallBack(parentRef, pageData, groupData, rootRef) {
    pageData.supplierName = "";
    pageData.supplierCode = "";
    let teamList =
      rootRef.$refs.businessRef.$refs.eightDisciplinesTeamListgrid[0].$refs.eightDisciplinesTeamList.getTableData()
        .fullData;
    if (teamList && teamList.length > 0) {
      for (let i = 0; i < teamList.length; i++) {
        let teamItem = teamList[i];
        if (teamItem.reportFlowStep == "D8") {
          continue;
        }
        teamItem.subAccount = teamList[7].subAccount;
        teamItem.toElsAccount = pageData.elsAccount;
        teamItem.name = null;
        teamItem.teamRole = "member";
        teamItem.phone = null;
        teamItem.mail = null;
      }
    }
  },
  handleAfter: ({ pageData, userInfo }) => {
    debugger;
    const eightDisciplinesTeamList = pageData.eightDisciplinesTeamList || [];
    if (eightDisciplinesTeamList && eightDisciplinesTeamList.length) {
      eightDisciplinesTeamList.forEach((n) => {
        if (n.reportFlowStep !== "D8") {
          n.toElsAccount = "";
          n.subAccount = userInfo.subAccount || "";
          n.phone = null;
          n.mail = null;
          n.name = null;
          n.teamRole = "member";
        }
      });
    }
  },
}

物料编码 materialNumber

json
{
  "groupCode": "baseForm",
  "fieldType": "remoteSelect",
  "fieldLabel": "物料编码",
  "fieldName": "materialNumber",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  if (!data || !data.length) {
    return;
  }
  const {
    materialNumber = "",
    materialDesc = "",
    materialSpec = "",
    materialGroup = "",
    materialName = "",
    cateCode = "",
    cateName = "",
  } = data[0] || {};
  pageData.materialNumber = materialNumber;
  pageData.materialDesc = materialDesc;
  pageData.materialSpec = materialSpec;
  pageData.materialGroup = materialGroup;
  pageData.materialName = materialName;
  pageData.cateCode = cateCode;
  pageData.cateName = cateName;
}
js
{
  modalColumns: [
    {
      field: "materialNumber",
      title: "物料编号",
      fieldLabelI18nKey: "i18n_title_materialNumber",
      with: 150,
    },
    {
      field: "materialDesc",
      fieldLabelI18nKey: "i18n_field_materialDesc",
      title: "物料描述",
      with: 150,
    },
    {
      field: "materialName",
      fieldLabelI18nKey: "i18n_field_materialName",
      title: "物料名称",
      with: 150,
    },
    {
      field: "materialSpec",
      title: "物料规格",
      fieldLabelI18nKey: "i18n_title_materialSpec",
      with: 150,
    },
    {
      field: "materialGroup",
      title: "物料组",
      fieldLabelI18nKey: "i18n_field_materialGroup",
      with: 150,
    },
    {
      field: "cateCode",
      title: "物料分类编码",
      fieldLabelI18nKey: "i18n_field_materialClassificationCode",
      with: 150,
    },
    {
      field: "cateName",
      title: "物料分类名称",
      fieldLabelI18nKey: "i18n_field_cateName",
      with: 150,
    },
  ],
  modalUrl: "/material/purchaseMaterialHead/list",
  modalParams: { blocDel: "0" },
  handleAfter: function ({ pageData: form }) {
    form.materialNumber = "";
    form.materialDesc = "";
    form.materialSpec = "";
    form.materialGroup = "";
    form.materialName = "";
    form.cateCode = "";
    form.cateName = "";
  },
}

发布人 publishUser

json
{
  "groupCode": "baseForm",
  "fieldType": "remoteSelect",
  "fieldLabel": "发布人",
  "fieldName": "publishUser",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  if (!data || !data.length) {
    return;
  }
  const { subAccount = "", realname = "" } = data[0] || {};
  pageData.publishUser = `${subAccount}_${realname}`;
}
js
{
  modalColumns: [
    {
      field: "subAccount",
      title: "子账号",
      fieldLabelI18nKey: "i18n_field_subAccount",
      with: 150,
    },
    {
      field: "realname",
      title: "姓名",
      fieldLabelI18nKey: "i18n_field_realname",
      with: 150,
    },
  ],
  modalUrl: "/account/elsSubAccount/page",
  modalParams: {},
}

问题描述 questionDesc

json
{
  "groupCode": "eightDisciplinesTwo",
  "fieldType": "textArea",
  "fieldLabel": "问题描述",
  "fieldName": "questionDesc",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  const eightDisciplinesTeamList = pageData.eightDisciplinesTeamList;

  if (pageData.eightDisciplinesStatus == "D8") {
    setItemDisabled("eightDisciplinesTwo", "questionDesc", true);
    return;
  }
  if (
    eightDisciplinesTeamList &&
    eightDisciplinesTeamList.length &&
    eightDisciplinesTeamList[1]
  ) {
    if (eightDisciplinesTeamList[1].subAccount != userInfo.subAccount) {
      setItemDisabled("eightDisciplinesTwo", "questionDesc", true);
    } else {
      setItemDisabled("eightDisciplinesTwo", "questionDesc", false);
    }
  }
}

\

子账号 subAccount 🎉

json
{
  "groupCode": "eightDisciplinesTeamList",
  "fieldType": "remoteSelect",
  "title": "子账号",
  "field": "subAccount",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  if (!data || !data.length) {
    return;
  }
  const {
    subAccount = "",
    phone = "",
    email = "",
    realname = "",
  } = data[0] || {};

  row.subAccount = subAccount;
  row.phone = phone;
  row.mail = email;
  row.name = realname;

  const eightDisciplinesTeamList = pageData.eightDisciplinesTeamList;

  if (pageData.eightDisciplinesStatus == "D8") {
    setItemDisabled("eightDisciplinesTwo", "questionDesc", true);
  }

  if (
    eightDisciplinesTeamList &&
    eightDisciplinesTeamList.length &&
    eightDisciplinesTeamList[1]
  ) {
    if (eightDisciplinesTeamList[1].subAccount != userInfo.subAccount) {
      setItemDisabled("eightDisciplinesTwo", "questionDesc", true);
    } else {
      setItemDisabled("eightDisciplinesTwo", "questionDesc", false);
    }
  }
}
js
{
  modalColumns: [
    {
      field: "subAccount",
      title: "子账号",
      fieldLabelI18nKey: "i18n_field_subAccount",
      with: 150,
    },
    {
      field: "realname",
      title: "姓名",
      fieldLabelI18nKey: "i18n_field_realname",
      with: 150,
    },
    {
      field: "phone",
      title: "电话",
      fieldLabelI18nKey: "i18n_field_telephone",
      with: 150,
    },
    {
      field: "email",
      title: "邮箱",
      fieldLabelI18nKey: "i18n_field_email",
      with: 150,
    },
  ],
  modalUrl: "account/elsSubAccount/list",

  params: ({ pageData, userInfo }) => {
    return { status: "1" };
  },
  beforeCheckedCallBack(Vue, row, column) {
    return new Promise((resolve, reject) => {
      row.elsAccount == row.toElsAccount
        ? resolve("success")
        : reject("当前行只能由相应的执行方进行修改");
    });
  },
  mobileHandleBefore(Vue, { _pageData, _form, _row, _cacheAllData, _value }) {
    return new Promise((resolve, reject) => {
      _row.elsAccount == _row.toElsAccount
        ? resolve("success")
        : reject("当前行只能由相应的执行方进行修改");
    });
  },
  handleBefore: ({ row, userInfo }) => {
    row.tempSubAccount = row.subAccount;
    if (!row.toElsAccount || userInfo.elsAccount != row.toElsAccount) {
      return Promise.reject("当前行只能由相应的执行方进行修改");
    } else {
      return Promise.resolve();
    }
  },
  afterRowClearCallBack: function (Vue, row) {
    if (row.elsAccount != row.toElsAccount) {
      Vue.$message.error("当前行只能由相应的执行方进行删除");
      return;
    }
    row.subAccount = "";
    row.phone = "";
    row.mail = "";
    row.name = "";
  },
  handleAfter: ({ row, userInfo }) => {
    if (userInfo.elsAccount != row.toElsAccount) {
      row.subAccount = row.tempSubAccount;
      return Promise.reject("当前行只能由相应的执行方进行修改");
    } else {
      row.subAccount = "";
      row.phone = "";
      row.mail = "";
      row.name = "";
    }
  },
}

纠正措施 improvementProgram 🎉

json
{
  "groupCode": "eightDisciplinesSixList",
  "fieldType": "richEditorModel",
  "title": "纠正措施",
  "field": "improvementProgram",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  let SetupZeroD6Row = (pageData.eightDisciplinesTeamList || []).find(
    (item) => item.reportFlowStep == "D6",
  );
  if (
    pageData.eightDisciplinesStatus == "D8" ||
    (SetupZeroD6Row &&
      SetupZeroD6Row.toElsAccount + SetupZeroD6Row.subAccount !=
        userInfo.elsAccount + userInfo.subAccount)
  ) {
    setItemDisabled("eightDisciplinesSixList", "improvementProgram", true);
    return;
  }
}

效果验证描述 resultValidate 🎉

json
{
  "groupCode": "eightDisciplinesSixList",
  "fieldType": "richEditorModel",
  "title": "效果验证描述",
  "field": "resultValidate",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  let SetupZeroD6Row = (pageData.eightDisciplinesTeamList || []).find(
    (item) => item.reportFlowStep == "D6",
  );
  if (
    pageData.eightDisciplinesStatus == "D8" ||
    (SetupZeroD6Row &&
      SetupZeroD6Row.toElsAccount + SetupZeroD6Row.subAccount !=
        userInfo.elsAccount + userInfo.subAccount)
  ) {
    setItemDisabled("eightDisciplinesSixList", "resultValidate", true);
    return;
  }
}

验证人 validatePerson 🎉

json
{
  "groupCode": "eightDisciplinesSixList",
  "fieldType": "remoteSelect",
  "title": "验证人",
  "field": "validatePerson",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  if (!data || !data.length) {
    return;
  }
  const { subAccount = "", realname = "" } = data[0] || {};
  row.validatePerson = `${subAccount}_${realname}`;
}
js
{
  modalColumns: [
    {
      field: "subAccount",
      title: "子账号",
      fieldLabelI18nKey: "i18n_field_subAccount",
      with: 150,
    },
    {
      field: "realname",
      title: "姓名",
      fieldLabelI18nKey: "i18n_field_realname",
      with: 150,
    },
    {
      field: "email",
      title: "邮箱",
      fieldLabelI18nKey: "i18n_field_email",
      with: 150,
    },
    {
      field: "telephone",
      title: "电话",
      fieldLabelI18nKey: "i18n_field_telephone",
      with: 150,
    },
  ],
  modalUrl: "/account/elsSubAccount/page",
  modalParams: {},
  afterRowClearCallBack: function (Vue, row) {
    row.validatePerson = "";
  },
}

改进方案 improvementProgram 🎉

json
{
  "groupCode": "eightDisciplinesFiveList",
  "fieldType": "richEditorModel",
  "title": "改进方案",
  "field": "improvementProgram",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  if (pageData.eightDisciplinesStatus == "D8") {
    setItemDisabled("eightDisciplinesFiveList", "improvementProgram", true);
    return;
  }
}

计划执行人 planPerson 🎉

json
{
  "groupCode": "eightDisciplinesFiveList",
  "fieldType": "remoteSelect",
  "title": "计划执行人",
  "field": "planPerson",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  if (!data || !data.length) {
    return;
  }
  const { subAccount = "", realname = "" } = data[0] || {};
  row.planPerson = `${subAccount}_${realname}`;
}
js
{
  modalColumns: [
    {
      field: "subAccount",
      title: "子账号",
      fieldLabelI18nKey: "i18n_field_subAccount",
      with: 150,
    },
    {
      field: "realname",
      title: "姓名",
      fieldLabelI18nKey: "i18n_field_realname",
      with: 150,
    },
    {
      field: "email",
      title: "邮箱",
      fieldLabelI18nKey: "i18n_field_email",
      with: 150,
    },
    {
      field: "telephone",
      title: "电话",
      fieldLabelI18nKey: "i18n_field_telephone",
      with: 150,
    },
  ],
  modalUrl: "/account/elsSubAccount/page",
  modalParams: {},
  afterRowClearCallBack: function (Vue, row) {
    row.planPerson = "";
  },
}

措施内容 solutionContent 🎉

json
{
  "groupCode": "eightDisciplinesThreeList",
  "fieldType": "richEditorModel",
  "title": "措施内容",
  "field": "solutionContent",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  let SetupZeroD3Row = (pageData.eightDisciplinesTeamList || []).find(
    (item) => item.reportFlowStep == "D3",
  );
  if (
    pageData.eightDisciplinesStatus == "D8" ||
    (SetupZeroD3Row &&
      SetupZeroD3Row.toElsAccount + SetupZeroD3Row.subAccount !=
        userInfo.elsAccount + userInfo.subAccount)
  ) {
    setItemDisabled("eightDisciplinesThreeList", "solutionContent", true);
    return;
  }
}

措施负责人 solutionResponsibility 🎉

json
{
  "groupCode": "eightDisciplinesThreeList",
  "fieldType": "selectModal",
  "title": "措施负责人",
  "field": "solutionResponsibility",
  "required": "0"
}
js
/**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {boolean} _isFill 填充、粘贴操作判断标识
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} userInfo 当前登录人信息
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 * @param {() => void} topEmit 用于处理复杂绑定函数需求
 * @param {Constructor} Decimal构造函数, 适用于js小数位数精度计算
 * https://github.com/MikeMcl/decimal.js
 */
function callback(
  ctx,
  {
    value,
    data,
    _isFill,
    row,
    idx,
    pageData,
    layoutConfig,
    userInfo,
    customFormatItem,
    setItemRequired,
    setItemDisabled,
    setItemRequiredOrDisabled,
    topEmit,
    Decimal,
  },
) {
  if (!data || !data.length) {
    return;
  }
  const { subAccount = "", realname = "" } = data[0] || {};
  row.solutionResponsibility = `${subAccount}_${realname}`;
}
js
{
  modalColumns: [
    {
      field: "subAccount",
      title: "子账号",
      fieldLabelI18nKey: "i18n_field_subAccount",
      with: 150,
    },
    {
      field: "realname",
      title: "姓名",
      fieldLabelI18nKey: "i18n_field_realname",
      with: 150,
    },
    {
      field: "email",
      title: "邮箱",
      fieldLabelI18nKey: "i18n_field_email",
      with: 150,
    },
    {
      field: "telephone",
      title: "电话",
      fieldLabelI18nKey: "i18n_field_telephone",
      with: 150,
    },
  ],
  modalUrl: "/account/elsSubAccount/page",
  modalParams: {},
  beforeCheckedCallBack(Vue, row, column, form) {
    let that = this;
    let toElsAccount = Vue.form.eightDisciplinesTeamList[2].toElsAccount;
    let elsAccount = Vue.$ls.get("Login_elsAccount");
    return new Promise((resolve, reject) => {
      elsAccount == toElsAccount
        ? resolve("success")
        : reject("当前行只能由相应的执行方进行修改");
    });
  },
  mobileHandleBefore(Vue, { _pageData, _form, _row, _cacheAllData, _value }) {
    return new Promise((resolve, reject) => {
      _row.elsAccount == _row.toElsAccount
        ? resolve("success")
        : reject("当前行只能由相应的执行方进行修改");
    });
  },
  afterRowClearCallBack: function (Vue, row) {
    if (row.elsAccount != row.toElsAccount) {
      Vue.$message.error("当前行只能由相应的执行方进行删除");
      return;
    }
    row.solutionResponsibility = "";
  },
}