/**
|
* 生产模块工具函数
|
* 提供数据处理、验证、转换等通用方法
|
*/
|
|
/**
|
* 解析煤种数组字符串
|
* @param {string|array} coalString - 煤种字符串或数组
|
* @returns {array} 解析后的煤种数组
|
*/
|
export function parseCoalArray(coalString) {
|
if (!coalString) return [];
|
|
if (Array.isArray(coalString)) return coalString;
|
|
return String(coalString)
|
.replace(/^\[|\]$/g, '')
|
.split(',')
|
.map(item => item.trim())
|
.filter(Boolean);
|
}
|
|
/**
|
* 根据ID匹配列表中的项目
|
* @param {array} list - 数据列表
|
* @param {string|number} value - 要匹配的值
|
* @param {string} keyField - 键字段名,默认为'id'
|
* @param {string} valueField - 值字段名,默认为'fieldName'
|
* @returns {string} 匹配到的值或原值
|
*/
|
export function matchItemById(list, value, keyField = 'id', valueField = 'fieldName') {
|
if (!Array.isArray(list) || !value) return value;
|
|
const found = list.find(item => item[keyField] == value);
|
return found ? found[valueField] : value;
|
}
|
|
/**
|
* 计算总成本
|
* @param {object} row - 数据行
|
* @param {array} fields - 需要计算的字段数组
|
* @returns {string} 格式化后的总成本
|
*/
|
export function calculateTotalCost(row, fields = ['laborCost', 'energyConsumptionCost', 'equipmentDepreciation', 'purchasePrice']) {
|
const total = fields.reduce((sum, field) => {
|
return sum + (parseFloat(row[field]) || 0);
|
}, 0);
|
|
return total.toFixed(2);
|
}
|
|
/**
|
* 验证表单数据
|
* @param {array} data - 表单数据数组
|
* @param {array} requiredFields - 必填字段
|
* @returns {object} 验证结果 { isValid, message }
|
*/
|
export function validateFormData(data, requiredFields) {
|
if (!data || data.length === 0) {
|
return { isValid: false, message: '请添加数据' };
|
}
|
|
for (let i = 0; i < data.length; i++) {
|
const item = data[i];
|
for (const field of requiredFields) {
|
if (item[field] === '' || item[field] === null || item[field] === undefined) {
|
return {
|
isValid: false,
|
message: `第${i + 1}行的${field}字段不能为空`
|
};
|
}
|
}
|
}
|
|
return { isValid: true, message: '验证通过' };
|
}
|
|
/**
|
* 数值验证
|
* @param {any} value - 要验证的值
|
* @param {number} min - 最小值
|
* @param {number} max - 最大值
|
* @returns {object} 验证结果 { isValid, message, value }
|
*/
|
export function validateNumber(value, min = 0, max = Infinity) {
|
const numValue = Number(value);
|
|
if (isNaN(numValue)) {
|
return { isValid: false, message: '请输入有效数字', value: 0 };
|
}
|
|
if (numValue < min) {
|
return { isValid: false, message: `数值不能小于${min}`, value: min };
|
}
|
|
if (numValue > max) {
|
return { isValid: false, message: `数值不能大于${max}`, value: max };
|
}
|
|
return { isValid: true, message: '验证通过', value: numValue };
|
}
|
|
/**
|
* 深拷贝对象
|
* @param {any} obj - 要拷贝的对象
|
* @returns {any} 拷贝后的对象
|
*/
|
export function deepClone(obj) {
|
if (obj === null || typeof obj !== 'object') return obj;
|
if (obj instanceof Date) return new Date(obj.getTime());
|
if (obj instanceof Array) return obj.map(item => deepClone(item));
|
if (typeof obj === 'object') {
|
const clonedObj = {};
|
for (const key in obj) {
|
if (obj.hasOwnProperty(key)) {
|
clonedObj[key] = deepClone(obj[key]);
|
}
|
}
|
return clonedObj;
|
}
|
}
|
|
/**
|
* 生成默认的生产明细行数据
|
* @param {object} userData - 用户数据
|
* @param {object} extraData - 额外数据
|
* @returns {object} 默认行数据
|
*/
|
export function createDefaultProductionRow(userData = {}, extraData = {}) {
|
return {
|
coal: "",
|
productionQuantity: "",
|
laborCost: "",
|
energyConsumptionCost: "",
|
equipmentDepreciation: "",
|
purchasePrice: "",
|
totalCost: "0.00",
|
producer: userData?.user?.nickName || "",
|
...extraData
|
};
|
}
|