Skip to content
On this page

询价管理

业务模板

表行编辑规则

js
{
  groupName: "询价行信息",
  groupNameI18nKey: "i18n_title_RFQLineInformation",
  groupCode: "purchaseEnquiryItemList",
  groupType: "item",
  sortOrder: "2",
  extend: {
    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 }) {
          // 询价单状态 enquiryStatus_dictText
          // 数据字典 srmEnquiryStatus (0: 新建, 1: 报价中, 2: 已报价, 3: 未报价, 4: 接受, 5: 拒绝, 6: 不能报价, 7: 议价中, 8: 重报价, 9: 已定价, 10: 已作废, 11: 已悔标, 12: 发布中, 13: 发布失败, 14: 已转单)

          // 报价项 quoteType
          // 数据字典 srmQuoteType (0: 含税价, 1: 不含税价)

          // 报价方式 quotePriceWay
          // 数据字典 srmQuotePriceWay (0: 常规报价, 1: 阶梯报价, 2: 成本报价)

          // 行状态 itemStatus
          // 数据字典 srmEnquiryStatus (0: 新建, 1: 报价中, 2: 已报价, 3: 未报价, 4: 接受, 5: 拒绝, 6: 不能报价, 7: 议价中, 8: 重报价, 9: 已定价, 10: 已作废, 11: 已悔标, 12: 发布中, 13: 发布失败, 14: 已转单)

          // 物料编码
          if (column.field === "materialNumber") {
            return false;
          }

          // 不含税价 或 当前行是 阶梯报价、成本报价时
          if (
            pageData.value.quoteType === "1" ||
            row.quotePriceWay === "1" ||
            row.quotePriceWay === "2"
          ) {
            const props = [
              "price", // 含税单价
              "netPrice", // 未税单价
            ];
            if (props.includes(column.field)) {
              return false;
            }
          } else if (
            (pageData.value.quoteType === "0" ||
              row.quotePriceWay === "1" ||
              row.quotePriceWay === "2") &&
            column.field === "netPrice"
          ) {
            return false;
          }
          // 是否报价
          if (pageData.value.enquiryStatus !== "0" && row.quotePrice === "0") {
            return false;
          }

          // 议价中 + 已悔标
          if (
            pageData.value.enquiryStatus === "7" &&
            pageData.value.enquiryStatus === "11"
          ) {
            const props = [
              "7", // 议价中
              "8", // 重报价
            ];
            if (!props.includes(row.itemStatus)) {
              return false;
            }
          }

          return true;
        },
      },
    },
  },
}

需方负责人 purchasePrincipal

json
{
  "groupCode": "baseForm",
  "fieldType": "remoteSelect",
  "fieldLabel": "需方负责人",
  "fieldName": "purchasePrincipal",
  "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.purchasePrincipal = `${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: {
    status: "1",
  },
}

询价范围 enquiryScope

json
{
  "groupCode": "baseForm",
  "fieldType": "select",
  "fieldLabel": "询价范围",
  "fieldName": "enquiryScope",
  "dictCode": "srmEnquiryScope",
  "required": "1",
  "helpText": "定向询价指系统按准入品类自动匹配供应商,无需人工选择"
}
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,
  },
) {
  // 询价范围 enquiryScope;
  // 数据字典 srmEnquiryScope (0: 邀请询价, 1: 公开询价, 2: 定向询价);

  /**
   * @description: 业务规则
   * 询价范围为'邀请询价'时, '公开范围'不可编辑, 否则取反
   * @return {*}
   */
  setItemDisabled("baseForm", "publicScope", value === "0");

  /**
   * @description: 业务规则
   * 询价范围为'公开询价'时, '报名截止时间', '资格审查'必填, 否则不可编辑
   * @return {*}
   */
  setItemRequiredOrDisabled("baseForm", "applyEndTime", value === "1");
  setItemRequiredOrDisabled("baseForm", "qualificationReview", value === "1");

  /**
   * @description: 业务规则
   * 询价范围 为'邀请询价', 表行'附件需求清单', 阶段类型数据字典为'srmEnquiry3StageType'
   * 否则设置为 srmEnquiryStageType
   * 数据字典 srmEnquiry3StageType (3: 报价阶段);
   * 数据字典 srmEnquiryStageType (1: 报名阶段, 3: 报价阶段);
   */
  customFormatItem(
    "purchaseAttachmentDemandList",
    "stageType",
    function fn(item) {
      item.options = [];
      item.dictCode =
        value === "0" || value === "2"
          ? "srmEnquiry3StageType"
          : "srmEnquiryStageType";
    },
  );

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

物料编号必填 mustMaterialNumber

json
{
  "groupCode": "baseForm",
  "fieldType": "switch",
  "fieldLabel": "物料编号必填",
  "fieldName": "mustMaterialNumber",
  "dictCode": "yn",
  "defaultValue": "1",
  "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,
  },
) {
  /**
   * @description: 业务规则
   * 物料编号必填为'是', 询价行信息 '物料编号'必填, 否则置灰
   * @return {*}
   */
  setItemRequiredOrDisabled(
    "purchaseEnquiryItemList",
    "materialNumber",
    value === "1",
  );
}

税码 taxCode

json
{
  "groupCode": "baseForm",
  "fieldType": "remoteSelect",
  "fieldLabel": "税码",
  "fieldName": "taxCode",
  "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 { taxCode = "", taxRate = "" } = data[0] || {};
  pageData.taxCode = taxCode;
  pageData.taxRate = taxRate;

  /**
   * @description: 业务规则
   * 赋值表行:询价行信息税率、税码字段
   */

  if (
    pageData.purchaseEnquiryItemList &&
    pageData.purchaseEnquiryItemList.length
  ) {
    pageData.purchaseEnquiryItemList.forEach((n) => {
      n.taxCode = taxCode;
      n.taxRate = taxRate;
    });
  }
}
js
{
  modalColumns: [
    {
      field: "taxCode",
      title: "税码",
      fieldLabelI18nKey: "i18n_field_taxCode",
      with: 150,
    },
    {
      field: "taxRate",
      title: "税率(%)",
      fieldLabelI18nKey: "i18n_field_fIWWW_f03b2eb3",
      with: 150,
    },
    {
      field: "taxName",
      title: "税码名称",
      fieldLabelI18nKey: "i18n_field_taxName",
      with: 150,
    },
    {
      field: "remark",
      title: "备注",
      fieldLabelI18nKey: "i18n_field_remark",
      with: 150,
    },
  ],
  modalUrl: "/base/tax/queryTaxForTemplate",
  params: ({ pageData }) => {
    return { purchaseAccount: pageData.elsAccount || "" };
  },
  mobileModalParams(Vue, { _pageData, _cacheAllData, _form, _row }) {
    return { purchaseAccount: _row.elsAccount || "" };
  },
  selectModel: "single",
  handleAfter: ({ pageData }) => {
    pageData.taxCode = "";
    pageData.taxRate = "";
  },
}

价格生效日期 effectiveDate

json
{
  "groupCode": "baseForm",
  "fieldType": "date",
  "fieldLabel": "价格生效日期",
  "fieldName": "effectiveDate",
  "dataFormat": "YYYY-MM-DD",
  "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,
  },
) {
  /**
   * @description: 业务规则
   * 如果表行:询价行信息 价格生效日期 字段未赋,则使用表头已选价格生效日期
   */

  if (
    pageData.purchaseEnquiryItemList &&
    pageData.purchaseEnquiryItemList.length
  ) {
    pageData.purchaseEnquiryItemList.forEach((n) => {
      if (!n.effectiveDate) {
        n.effectiveDate = value;
      }
    });
  }
}

价格失效日期 expiryDate

json
{
  "groupCode": "baseForm",
  "fieldType": "date",
  "fieldLabel": "价格失效日期",
  "fieldName": "expiryDate",
  "dataFormat": "YYYY-MM-DD",
  "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,
  },
) {
  /**
   * @description: 业务规则
   * 如果表行:询价行信息 价格生效日期 字段未赋,则使用表头已选价格生效日期
   */

  if (
    pageData.purchaseEnquiryItemList &&
    pageData.purchaseEnquiryItemList.length
  ) {
    pageData.purchaseEnquiryItemList.forEach((n) => {
      if (!n.expiryDate) {
        n.expiryDate = value;
      }
    });
  }
}

是否可提前开标 openBidBefore

json
{
  "groupCode": "baseForm",
  "fieldType": "switch",
  "fieldLabel": "是否可提前开标",
  "fieldName": "openBidBefore",
  "dictCode": "yn",
  "defaultValue": "0",
  "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,
  },
) {
  /**
   * @description: 业务规则
   * 是否可提前开标'否'时, '开标密码'不可编辑, 否则取反
   * @return {*}
   */
  setItemDisabled("baseForm", "openBidWord", value === "0");
}

定价通知 pricingNotice

json
{
  "groupCode": "baseForm",
  "fieldType": "select",
  "fieldLabel": "定价通知",
  "fieldName": "pricingNotice",
  "dictCode": "srmPricingNotice",
  "defaultValue": "1",
  "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,
  },
) {
  // 定价通知 pricingNotice;
  // 数据字典 srmPricingNotice (1: 通知中标方, 2: 通知所有应标方, 3: 不通知);

  /**
   * @description: 业务规则
   * 定价通知为'不通知'时, '定价通知方式'不可编辑, 否则取反
   * @return {*}
   */
  setItemDisabled("baseForm", "pricingNoticeWay", value === "2");
}

报价确认时间 quoteConfirmTime

json
{
  "groupCode": "baseForm",
  "fieldType": "date",
  "fieldLabel": "报价确认时间",
  "fieldName": "quoteConfirmTime",
  "dataFormat": "YYYY-MM-DD HH:mm:ss",
  "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 (!value) {
    pageData.quoteConfirmTime_DateMaps = null;
    pageData.quoteConfirmTime_timestamp = null;
  }
}

需求数量 requireQuantity 🎉

json
{
  "groupCode": "purchaseEnquiryItemList",
  "fieldType": "number",
  "title": "需求数量",
  "field": "requireQuantity",
  "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,
  },
) {
  // 报价项 quoteType;
  // 数据字典 srmQuoteType (0: 含税价, 1: 不含税价);
  const quoteType = pageData.quoteType || "0";

  // 含税单价 price
  let price = row.price || "";
  // 未税单价 netPrice
  let netPrice = row.netPrice || "";
  // 需求数量 requireQuantity
  let requireQuantity = row.requireQuantity || "";
  // 含税金额 taxAmount
  // 未税金额 netAmount
  // 税率 taxRate
  let taxRate = row.taxRate || "0";

  if (!Decimal) {
    return;
  }

  let formula = Decimal.add(1, Decimal.div(taxRate, 100));
  const DIGIT = 6;

  // 根据含税价 price, 实时计算未税单价
  if (quoteType === "0") {
    const price = row.price || "";
    if (price && taxRate) {
      let netPrice = Decimal.div(price, formula);
      // 4位小数
      row.netPrice = new Decimal(netPrice).toFixed(DIGIT);
      if (requireQuantity) {
        let taxAmount = Decimal.mul(price, requireQuantity);
        let netAmount = Decimal.div(taxAmount, formula);
        row.taxAmount = new Decimal(taxAmount).toFixed(DIGIT);
        row.netAmount = new Decimal(netAmount).toFixed(DIGIT);
      }
    }
  } else {
    // 根据未税单价价 netPrice, 实时计算含税价
    const netPrice = row.netPrice || "";
    if (netPrice && taxRate) {
      let price = Decimal.mul(netPrice, formula);
      // 4位小数
      row.price = new Decimal(price).toFixed(DIGIT);
      if (requireQuantity) {
        let netAmount = Decimal.mul(netPrice, requireQuantity);
        let taxAmount = Decimal.mul(netAmount, formula);
        row.netAmount = new Decimal(netAmount).toFixed(DIGIT);
        row.taxAmount = new Decimal(taxAmount).toFixed(DIGIT);
      }
    }
  }
}

是否报价 quotePrice 🎉

json
{
  "groupCode": "purchaseEnquiryItemList",
  "fieldType": "switch",
  "title": "是否报价",
  "field": "quotePrice",
  "dictCode": "yn",
  "defaultValue": "1",
  "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,
  },
) {
  // 本地页面处理复杂绑定函数需求
  topEmit && topEmit();
}

报价方式 quotePriceWay 🎉

json
{
  "groupCode": "purchaseEnquiryItemList",
  "fieldType": "select",
  "title": "报价方式",
  "field": "quotePriceWay",
  "dictCode": "srmQuotePriceWay",
  "defaultValue": "0",
  "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,
  },
) {
  // 本地页面处理复杂绑定函数需求
  topEmit && topEmit();
}

含税单价 price 🎉

json
{
  "groupCode": "purchaseEnquiryItemList",
  "fieldType": "currency",
  "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,
  },
) {
  // 报价项 quoteType;
  // 数据字典 srmQuoteType (0: 含税价, 1: 不含税价);
  const quoteType = pageData.quoteType || "0";

  // 含税单价 price
  let price = row.price || "";
  // 未税单价 netPrice
  let netPrice = row.netPrice || "";
  // 需求数量 requireQuantity
  let requireQuantity = row.requireQuantity || "";
  // 含税金额 taxAmount
  // 未税金额 netAmount
  // 税率 taxRate
  let taxRate = row.taxRate || "0";

  if (!Decimal) {
    return;
  }

  let formula = Decimal.add(1, Decimal.div(taxRate, 100));
  const DIGIT = 6;

  // 根据含税价 price, 实时计算未税单价
  if (quoteType === "0") {
    const price = row.price || "";
    if (price && taxRate) {
      let netPrice = Decimal.div(price, formula);
      // 4位小数
      row.netPrice = new Decimal(netPrice).toFixed(DIGIT);
      if (requireQuantity) {
        let taxAmount = Decimal.mul(price, requireQuantity);
        let netAmount = Decimal.div(taxAmount, formula);
        row.taxAmount = new Decimal(taxAmount).toFixed(DIGIT);
        row.netAmount = new Decimal(netAmount).toFixed(DIGIT);
      }
    }
  } else {
    // 根据未税单价价 netPrice, 实时计算含税价
    const netPrice = row.netPrice || "";
    if (netPrice && taxRate) {
      let price = Decimal.mul(netPrice, formula);
      // 4位小数
      row.price = new Decimal(price).toFixed(DIGIT);
      if (requireQuantity) {
        let netAmount = Decimal.mul(netPrice, requireQuantity);
        let taxAmount = Decimal.mul(netAmount, formula);
        row.netAmount = new Decimal(netAmount).toFixed(DIGIT);
        row.taxAmount = new Decimal(taxAmount).toFixed(DIGIT);
      }
    }
  }
}
js
{
  symbol: "",
  decimals: "6",
}

未税单价 netPrice 🎉

json
{
  "groupCode": "purchaseEnquiryItemList",
  "fieldType": "currency",
  "title": "未税单价",
  "field": "netPrice",
  "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,
  },
) {
  // 报价项 quoteType;
  // 数据字典 srmQuoteType (0: 含税价, 1: 不含税价);
  const quoteType = pageData.quoteType || "0";

  // 含税单价 price
  let price = row.price || "";
  // 未税单价 netPrice
  let netPrice = row.netPrice || "";
  // 需求数量 requireQuantity
  let requireQuantity = row.requireQuantity || "";
  // 含税金额 taxAmount
  // 未税金额 netAmount
  // 税率 taxRate
  let taxRate = row.taxRate || "0";

  if (!Decimal) {
    return;
  }

  let formula = Decimal.add(1, Decimal.div(taxRate, 100));
  const DIGIT = 6;

  // 根据含税价 price, 实时计算未税单价
  if (quoteType === "0") {
    const price = row.price || "";
    if (price && taxRate) {
      let netPrice = Decimal.div(price, formula);
      // 4位小数
      row.netPrice = new Decimal(netPrice).toFixed(DIGIT);
      if (requireQuantity) {
        let taxAmount = Decimal.mul(price, requireQuantity);
        let netAmount = Decimal.div(taxAmount, formula);
        row.taxAmount = new Decimal(taxAmount).toFixed(DIGIT);
        row.netAmount = new Decimal(netAmount).toFixed(DIGIT);
      }
    }
  } else {
    // 根据未税单价价 netPrice, 实时计算含税价
    const netPrice = row.netPrice || "";
    if (netPrice && taxRate) {
      let price = Decimal.mul(netPrice, formula);
      // 4位小数
      row.price = new Decimal(price).toFixed(DIGIT);
      if (requireQuantity) {
        let netAmount = Decimal.mul(netPrice, requireQuantity);
        let taxAmount = Decimal.mul(netAmount, formula);
        row.netAmount = new Decimal(netAmount).toFixed(DIGIT);
        row.taxAmount = new Decimal(taxAmount).toFixed(DIGIT);
      }
    }
  }
}
js
{
  symbol: "",
  decimals: "6",
}

税码 taxCode 🎉

json
{
  "groupCode": "purchaseEnquiryItemList",
  "fieldType": "remoteSelect",
  "title": "税码",
  "field": "taxCode",
  "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 { taxCode = "", taxRate = "", taxName = "" } = data[0] || {};
  row.taxCode = taxCode;
  row.taxCode_dictText = taxCode + "_" + taxName;
  row.taxRate = taxRate;

  // 报价项 quoteType;
  // 数据字典 srmQuoteType (0: 含税价, 1: 不含税价);
  const quoteType = pageData.quoteType || "0";

  // 含税单价 price
  let price = row.price || "";
  // 未税单价 netPrice
  let netPrice = row.netPrice || "";
  // 需求数量 requireQuantity
  let requireQuantity = row.requireQuantity || "";
  // 含税金额 taxAmount
  // 未税金额 netAmount
  // 税率 taxRate
  // let taxRate = row.taxRate || "0";

  if (!Decimal) {
    return;
  }

  let formula = Decimal.add(1, Decimal.div(taxRate, 100));
  const DIGIT = 6;

  // 根据含税价 price, 实时计算未税单价
  if (quoteType === "0") {
    const price = row.price || "";
    if (price && taxRate) {
      let netPrice = Decimal.div(price, formula);
      // 4位小数
      row.netPrice = new Decimal(netPrice).toFixed(DIGIT);
      if (requireQuantity) {
        let taxAmount = Decimal.mul(price, requireQuantity);
        let netAmount = Decimal.div(taxAmount, formula);
        row.taxAmount = new Decimal(taxAmount).toFixed(DIGIT);
        row.netAmount = new Decimal(netAmount).toFixed(DIGIT);
      }
    }
  } else {
    // 根据未税单价价 netPrice, 实时计算含税价
    const netPrice = row.netPrice || "";
    if (netPrice && taxRate) {
      let price = Decimal.mul(netPrice, formula);
      // 4位小数
      row.price = new Decimal(price).toFixed(DIGIT);
      if (requireQuantity) {
        let netAmount = Decimal.mul(netPrice, requireQuantity);
        let taxAmount = Decimal.mul(netAmount, formula);
        row.netAmount = new Decimal(netAmount).toFixed(DIGIT);
        row.taxAmount = new Decimal(taxAmount).toFixed(DIGIT);
      }
    }
  }
}
js
{
  modalColumns: [
    {
      field: "taxCode",
      title: "税码",
      fieldLabelI18nKey: "i18n_field_taxCode",
      with: 150,
    },
    {
      field: "taxRate",
      title: "税率(%)",
      fieldLabelI18nKey: "i18n_field_fIW_1d82c0c",
      with: 150,
    },
    {
      field: "taxName",
      title: "税码名称",
      fieldLabelI18nKey: "i18n_field_taxName",
      with: 150,
    },
    {
      field: "remark",
      title: "备注",
      fieldLabelI18nKey: "i18n_field_remark",
      with: 150,
    },
  ],
  modalUrl: "/base/tax/queryTaxForTemplate",
  modalParams(Vue, form, row) {
    return { purchaseAccount: form.busAccount || "" };
  },
  params({ row = {} }) {
    return { purchaseAccount: row.elsAccount || "" };
  },
  mobileModalParams(Vue, { _pageData, _cacheAllData, _form, _row }) {
    return { purchaseAccount: _form.busAccount || "" };
  },
  handleAfter: ({ row }) => {
    row.taxCode = "";
    row.taxCode_dictText = "";
    row.taxRate = "";
  },
  handleClear: ({ row }) => {
    row.taxCode = "";
    row.taxRate = "";
  },
}