/** * 生产模块工具函数 * 提供数据处理、验证、转换等通用方法 */ /** * 解析煤种数组字符串 * @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 }; }