Skip to content
On this page

价格申请

业务模板

表行编辑规则

js
{
  groupName: "价格申请行",
  groupNameI18nKey: "i18n_field_umUVc_89ed4963",
  groupCode: "informationRecordsRequestItemList",
  groupType: "item",
  sortOrder: "2",
  extend: {
    editConfig: {
      trigger: "click",
      mode: "cell",
      showStatus: false,
      activeMethod: function (that, row, _rowIndex, column, _columnIndex) {
        let formData = that.pageConfig.groups[0].formModel;
        let requestOptType = row.requestOptType;

        // 0 新增  1 变更  2扩充
        if (requestOptType === "2") {
          return (
            column.property === "requestPurchaseOrg" ||
            column.property === "requestPurchaseFactory"
          );
        }

        if (requestOptType === "1") {
          let flag =
            column.property === "requestPrice" ||
            column.property === "requestLadderPriceJson" ||
            column.property === "requestEffectiveDate" ||
            column.property === "requestExpiryDate";
          return flag;
        }

        if (requestOptType === "0") {
          let flag =
            column.property === "requestPrice" ||
            column.property === "requestLadderPriceJson" ||
            column.property === "requestEffectiveDate" ||
            column.property === "requestExpiryDate" ||
            column.property === "requestNetPrice" ||
            column.property === "requestPurchaseOrg" ||
            column.property === "requestPurchaseFactory" ||
            column.property === "materialNumber";
          return !flag;
        }
        return true;
      },
    },
    vxeGridConfig: {
      editConfig: {
        trigger: "click", // 点击触发编辑
        mode: "cell", // 单元格编辑模式
        /**
         * @description: 表行编辑规则
         * @param {Object} pageData 页面所有数据, ref响应对象,注意在使用时须带上.value
         * @param {Object} row 表行数据
         * @param {number} rowIndex 表行索引值
         * @param {Object} column 列配置
         * @param {number} columnIndex 列索引
         * @return {boolean} 返回布尔值, 为 true 时允许编辑
         */
        beforeEditMethod(pageData, { row, rowIndex, column, columnIndex }) {
          debugger;
          // 操作类型 requestOptType
          // 数据字典 priceRequestOptType (0: 新增, 1: 变更, 2: 扩充)
          if (row.requestOptType === "2") {
            const props = [
              "requestPurchaseOrg", // 扩充采购组织
              "requestPurchaseFactory", // 扩充工厂
            ];
            if (props.includes(column.field)) {
              return true;
            }
          }
          if (row.requestOptType === "1") {
            const props = [
              "requestPrice", // 调整后含税价
              "requestLadderPriceJson", // 调整后阶梯价格
              "requestEffectiveDate", // 调整后有效起始日期
              "requestExpiryDate", // 调整后有效截止日期
            ];
            if (props.includes(column.field)) {
              return true;
            }
          }
          if (row.requestOptType === "0") {
            const props = [
              "requestPrice", // 调整后含税价
              "requestLadderPriceJson", // 调整后阶梯价格
              "requestEffectiveDate", // 调整后有效起始日期
              "requestExpiryDate", // 调整后有效截止日期
              "requestNetPrice", // 调整后不含税价
              "requestPurchaseOrg", // 扩充采购组织
              "requestPurchaseFactory", // 扩充工厂
              "materialNumber", // 物料编码
            ];
            if (!props.includes(column.field)) {
              return true;
            }
          }
          return false;
        },
      },
    },
  },
}

对方 ELS 账号 toElsAccount

json
{
  "groupCode": "baseForm",
  "fieldType": "remoteSelect",
  "fieldLabel": "对方ELS账号",
  "fieldName": "toElsAccount",
  "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 {
    toElsAccount = "",
    supplierName = "",
    supplierCode = "",
  } = data[0] || {};
  pageData.toElsAccount = toElsAccount;
  pageData.supplierName = supplierName;
  pageData.supplierCode = supplierCode;

  // 本地页面处理复杂绑定函数需求
  topEmit && topEmit();
}
js
{
  modalColumns: [
    {
      field: "toElsAccount",
      fieldLabelI18nKey: "i18n_title_supplierAccount",
      title: "供应商账号",
      with: 150,
    },
    {
      field: "supplierName",
      fieldLabelI18nKey: "i18n_title_supplierName",
      title: "供应商名称",
      with: 150,
    },
    {
      field: "supplierCode",
      fieldLabelI18nKey: "i18n_title_supplierCode",
      title: "供应商编码",
      with: 150,
    },
  ],
  modalUrl: "/supplier/supplierMaster/list",
  modalParams: {},
  handleAfter: function ({ pageData }) {
    pageData.toElsAccount = "";
    pageData.supplierName = "";
    pageData.supplierCode = "";
  },
}

调整后含税价 requestPrice 🎉

json
{
  "groupCode": "informationRecordsRequestItemList",
  "fieldType": "float",
  "title": "调整后含税价",
  "field": "requestPrice",
  "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,
  },
) {
  // 税率 taxRate;
  let taxRate = row.taxRate || "0";
  // 调整后含税价 requestPrice;
  let requestPrice = row.requestPrice || "";

  // 计算未税单价 netPrice
  if (taxRate && requestPrice) {
    if (Decimal) {
      let formula = Decimal.add(1, Decimal.div(taxRate, 100));
      let netPrice = Decimal.div(requestPrice, formula);
      // 4位小数
      row.requestNetPrice = new Decimal(netPrice).toFixed(4);
    }
  }
}

对方 ELS 账号 toElsAccount 🎉

json
{
  "groupCode": "informationRecordsRequestItemList",
  "fieldType": "remoteSelect",
  "title": "对方ELS账号",
  "field": "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 = "",
    supplierName = "",
    supplierCode = "",
  } = data[0] || {};
  row.toElsAccount = toElsAccount;
  row.supplierName = supplierName;
  row.supplierCode = supplierCode;
}
js
{
  modalColumns: [
    {
      field: "toElsAccount",
      fieldLabelI18nKey: "i18n_title_supplierAccount",
      title: "供应商账号",
      with: 150,
    },
    {
      field: "supplierName",
      fieldLabelI18nKey: "i18n_title_supplierName",
      title: "供应商名称",
      with: 150,
    },
    {
      field: "supplierCode",
      fieldLabelI18nKey: "i18n_title_supplierCode",
      title: "供应商编码",
      with: 150,
    },
  ],
  modalUrl: "/supplier/supplierMaster/list",
  modalParams: {},
  handleBefore: ({ row }) => {
    debugger;
    if (row.requestOptType !== "0") {
      return Promise.reject("当前变更类型不可编辑");
    } else {
      return Promise.resolve();
    }
  },
  beforeCheckedCallBack: function __beforeCheckedCallBack(
    Vue,
    { _pageData, _row, _cacheAllData, _value },
  ) {
    return new Promise((resolve, reject) => {
      _row.requestOptType === "0"
        ? resolve("success")
        : reject("当前变更类型不可编辑");
    });
  },
  mobileHandleBefore(Vue, { _pageData, _row, _cacheAllData, _value }) {
    return new Promise((resolve, reject) => {
      _row.requestOptType === "0"
        ? resolve("success")
        : reject("当前变更类型不可编辑");
    });
  },
  afterRowClearCallBack: function (Vue, row) {
    row.toElsAccount = "";
  },
}

物料编码 materialNumber 🎉

json
{
  "groupCode": "informationRecordsRequestItemList",
  "fieldType": "selectModal",
  "title": "物料编码",
  "field": "materialNumber",
  "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 {
    materialNumber = "",
    materialDesc = "",
    purchaseUnit = "",
    materialName = "",
  } = data[0] || {};
  row.materialNumber = materialNumber;
  row.materialDesc = materialDesc;
  row.materialName = materialName;
  row.purchaseUnit = purchaseUnit;
}
js
{
  modalColumns: [
    {
      field: "materialNumber",
      title: "物料编码",
      fieldLabelI18nKey: "i18n_field_materialNumber",
      with: 150,
    },
    {
      field: "materialDesc",
      title: "物料描述",
      fieldLabelI18nKey: "i18n_field_materialDesc",
      with: 150,
    },
    {
      field: "materialName",
      title: "物料名称",
      fieldLabelI18nKey: "i18n_field_materialName",
      with: 150,
    },
    {
      field: "materialSpec",
      title: "物料规格",
      fieldLabelI18nKey: "i18n_field_materialSpec",
      with: 150,
    },
  ],
  modalUrl: "/material/purchaseMaterialHead/list",
  modalParams: {
    blocDel: "0",
  },
}

物料分类 cateCode 🎉

json
{
  "groupCode": "informationRecordsRequestItemList",
  "fieldType": "remoteSelect",
  "title": "物料分类",
  "field": "cateCode",
  "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 { cateCode = "", cateName = "" } = data[0] || {};
  row.cateCode = cateCode;
  row.cateName = cateName;
}
js
{
  modalColumns: [
    {
      field: "cateCode",
      title: "物料分类编码",
      fieldLabelI18nKey: "i18n_field_cateCode",
      with: 150,
    },
    {
      field: "cateName",
      title: "物料分类名称",
      fieldLabelI18nKey: "i18n_field_cateName",
      with: 150,
    },
  ],
  modalUrl: "/material/purchaseMaterialCode/list",
  modalParams: {},
  handleBefore: ({ pageData }) => {
    if (!pageData.requestOptType !== "0") {
      return Promise.reject("当前变更类型不可编辑");
    } else {
      return Promise.resolve();
    }
  },
  beforeCheckedCallBack: function __beforeCheckedCallBack(
    Vue,
    { _pageData, _row, _cacheAllData, _value },
  ) {
    debugger;
    return new Promise((resolve, reject) => {
      _row.requestOptType === "0"
        ? resolve("success")
        : reject("当前变更类型不可编辑");
    });
  },
  mobileHandleBefore(Vue, { _pageData, _row, _cacheAllData, _value }) {
    return new Promise((resolve, reject) => {
      _row.requestOptType === "0"
        ? resolve("success")
        : reject("当前变更类型不可编辑");
    });
  },
}

含税单价 price 🎉

json
{
  "groupCode": "informationRecordsRequestItemList",
  "fieldType": "float",
  "title": "含税单价",
  "field": "price",
  "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 && Array.isArray(data)) {
    const { taxCode = "", taxRate = "" } = data[0] || {};
    row.taxCode = taxCode;
    row.taxRate = taxRate;
  }

  // 税率 taxRate;
  let taxRate = row.taxRate || "0";
  // 含税单价 price;
  let price = row.price || "";

  // 计算未税单价 netPrice
  if (taxRate && price) {
    if (Decimal) {
      let formula = Decimal.add(1, Decimal.div(taxRate, 100));
      let netPrice = Decimal.div(price, formula);
      // 4位小数
      row.netPrice = new Decimal(netPrice).toFixed(4);
    }
  }
}

税码 taxCode 🎉

json
{
  "groupCode": "informationRecordsRequestItemList",
  "fieldType": "remoteSelect",
  "title": "税码",
  "field": "taxCode",
  "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 && Array.isArray(data)) {
    const { taxCode = "", taxRate = "" } = data[0] || {};
    row.taxCode = taxCode;
    row.taxRate = taxRate;
  }

  // 税率 taxRate;
  let taxRate = row.taxRate || "0";
  // 含税单价 price;
  let price = row.price || "";

  // 计算未税单价 netPrice
  if (taxRate && price) {
    if (Decimal) {
      let formula = Decimal.add(1, Decimal.div(taxRate, 100));
      let netPrice = Decimal.div(price, formula);
      // 4位小数
      row.netPrice = new Decimal(netPrice).toFixed(4);
    }
  }
}
js
{
  modalColumns: [
    {
      field: "taxCode",
      title: "税码",
      fieldLabelI18nKey: "i18n_field_taxCode",
      width: 150,
    },
    {
      field: "taxRate",
      title: "税率(%)",
      fieldLabelI18nKey: "i18n_field_fIW_1d82c0c",
      width: 150,
    },
    {
      field: "taxName",
      title: "税码名称",
      fieldLabelI18nKey: "i18n_field_taxName",
      width: 150,
    },
    {
      field: "remark",
      title: "备注",
      fieldLabelI18nKey: "i18n_field_remark",
      width: 150,
    },
  ],
  modalUrl: "/base/tax/queryTaxForTemplate",
  modalParams: {},
  handleBefore: ({ pageData, row }) => {
    return new Promise((resolve, reject) => {
      row.requestOptType === "0"
        ? resolve("success")
        : reject("当前变更类型不可编辑");
    });
  },
  beforeCheckedCallBack: function __beforeCheckedCallBack(
    Vue,
    { _pageData, _row, _cacheAllData, _value },
  ) {
    debugger;
    return new Promise((resolve, reject) => {
      _row.requestOptType === "0"
        ? resolve("success")
        : reject("当前变更类型不可编辑");
    });
  },
  mobileHandleBefore(Vue, { _pageData, _row, _cacheAllData, _value }) {
    return new Promise((resolve, reject) => {
      _row.requestOptType === "0"
        ? resolve("success")
        : reject("当前变更类型不可编辑");
    });
  },
  afterRowClearCallBack: function (Vue, row) {
    row.taxCode = "";
    row.taxRate = "";
  },
}