导出时状态字段需手动映射为字符串,因templet仅影响渲染、不作用于导出;必须提取cache数据遍历转换status等字段,推荐用string(v)===‘0’安全判断类型,并封装tostatustext函数复用逻辑。
导出时状态字段仍是原始数字(0/1),templet只影响表格渲染,对导出无效——必须手动映射后再传给 exportfile。
导出前必须过滤并转换状态字段
直接调用 table.exportFile('id') 会原样导出 table.cache 中的原始值。要让 Excel 里显示“禁用”“正常”,得先提取数据、遍历转换、再导出。
- 不能依赖
done回调里用 jQuery 改 DOM 文本——导出不读 DOM,只读cache - 不能在列配置里用
templet期望它影响导出——它只控制渲染层 - 必须显式构造新数组,把
d.status替换为映射后的字符串
示例逻辑:
const cacheData = layui.table.cache['userTable'] || [];
const exportData = cacheData.map(d => ({
...d,
status: d.status == 0 ? '禁用' : d.status == 1 ? '正常' : '未知'
}));
layui.table.exportFile('userTable', exportData);
后端返回类型不一致时怎么安全判断
d.status 可能是 number、string 甚至 boolean,用 == 容易误判(比如 true == 1 成立,但你只想匹配数字 1)。
- 推荐用
String(d.status) === '0'或Number(d.status) === 0,类型明确 - 如果后端可能返回
null/undefined,加兜底:status: ['0', '1'].includes(String(d.status)) ? (d.status == 0 ? '禁用' : '正常') : '未知' - 避免写
d.status === true——布尔值和数字 1 不等价,且后端未必返回布尔
多个状态字段要复用转换逻辑
如果表格里有 status、is_active、enabled 等多个字段都要转,别重复写三段三元表达式。
- 抽成函数:
const toStatusText = v => ({ '0': '禁用', '1': '正常' }[String(v)] || '未知') - 导出时统一调用:
status: toStatusText(d.status), is_active: toStatusText(d.is_active) - 后续加新状态(如
'2': '审核中')只需改一个地方
最常被忽略的是:导出数据必须和 cols 定义的字段顺序无关,但 key 名必须完全一致;一旦字段名拼错或大小写不符,那一列就会导出空值。










