// 根据内容设置列表宽度 function flexColumnWidth(str, arr1, fontNum = 4, flag = 'max') { // str为该列的字段名(传字符串);tableData为该表格的数据源(传变量); // fontNum为该列标题字体个数(默认为4); // flag为可选值,可不传该参数,传参时可选'max'或'equal',默认为'max' // flag为'max'则设置列宽适配该列中宽度最大的内容,flag为'equal'则设置列宽适配该列中第一行内容的宽度。 str = str + ''; // 验证输入参数 if (!arr1 || !arr1.length) return fontNum * 14 + 5; if (!str || !str.length) return fontNum * 14 + 5; // 计算单个内容的宽度 const calculateContentWidth = (content) => { let width = 0; const contentStr = content + ''; if (contentStr.includes('长') && contentStr.includes('宽') && contentStr.includes('高')) { width += 23; } for (const char of contentStr) { if ((char >= 'A' && char <= 'Z') || (char >= 'a' && char <= 'z') || (char >= '0' && char <= '9')) { // 英文字符,分配8个单位宽度 width += 8; } else if ((char >= '\u4e00' && char <= '\u9fa5') || (char >= '\uff00' && char <= '\uffef') || char === '×' || char === 'Φ' || char === '(' || char === ')' || char === ',' || char === '。' || char === '!' || char === '?' || char === ':' || char === ';' || char === '、' || char === '“' || char === '”' || char === '‘' || char === '’' || char === '《' || char === '》') { // 中文字符、全角标点及特定符号,分配13个单位宽度 width += 13; } else if (char === ' ' || char === ',' || char === '.') { // 空格,分配4个单位宽度 width += 4; } else { // 其他字符,分配4个单位宽度 width += 8; } } return width; }; let targetWidth = 0; if (flag === 'equal') { // 获取该列中第一个不为空的数据并计算其宽度 for (let i = 0; i < arr1.length; i++) { if (arr1[i][str] !== null && arr1[i][str] !== undefined) { targetWidth = calculateContentWidth(arr1[i][str]); break; } } } else { // 计算每一项的宽度,找出最大宽度 let maxWidth = 0; for (let i = 0; i < arr1.length; i++) { if (arr1[i][str] === null) return; const currentWidth = calculateContentWidth(arr1[i][str]); if (currentWidth > maxWidth) { maxWidth = currentWidth; } if (currentWidth > maxWidth) { maxWidth = currentWidth; } } targetWidth = maxWidth; } // 计算标题最小宽度 const titleMinWidth = fontNum * 14; // 比较内容宽度和标题最小宽度,取较大值 const flexWidth = Math.max(targetWidth, titleMinWidth); // 返回最终宽度,加上额外的5px return flexWidth + 5; } window.flexColumnWidth = flexColumnWidth