Appearance
询价管理
表行编辑规则
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 = "";
},
}