/** * #26 回归: * 1) ArtSvgIcon 的 el-icon 不得带 Tailwind `inline`(生产 CSS 会覆盖 display) * 2) 运输归档列展示含 planNo,且表格列受 isColumnVisible 控制 */ import test from 'node:test' import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import { dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' import { parse } from '@vue/compiler-sfc' const root = join(dirname(fileURLToPath(import.meta.url)), '..') test('ArtSvgIcon: el-icon branch must not use Tailwind inline class', () => { const src = readFileSync(join(root, 'src/components/core/base/art-svg-icon/index.vue'), 'utf8') const { descriptor } = parse(src) const template = descriptor.template?.content || '' assert.match(template, /]*class="[^"]*art-svg-icon/) assert.doesNotMatch( template, /]*class="[^"]*\binline\b/, 'el-icon must not include Tailwind inline (breaks display:inline-flex in prod CSS order)' ) }) test('plan-archive: planNo is in column defs and table visibility gate', () => { const src = readFileSync(join(root, 'src/views/pl/plan-archive/index.vue'), 'utf8') assert.match(src, /prop:\s*'planNo',\s*label:\s*'计划编号'/) assert.match(src, /pl-plan-archive-list-columns-v17/) assert.match( src, /v-if="isColumnVisible\('planNo'\)"[\s\S]*?prop="planNo"/, 'planNo table column must be gated by isColumnVisible' ) })