Appearance
价格申请
表行编辑规则
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 = "";
},
}