style: 全局 UI 主题皮肤重构与样式模块化

引入 Element Plus 主题定制和主题皮肤 composable,将全局
样式拆分为组件级独立 CSS 文件(侧边栏、顶栏、工作台等),
统一色彩变量和间距规范,重构所有视图和组件样式以适配新
主题系统,优化图表和知识图谱组件视觉表现,提取审计和差
旅报销相关子组件。
This commit is contained in:
caoxiaozhu
2026-05-27 09:17:57 +08:00
parent df49103f23
commit 2dcc72102d
112 changed files with 10983 additions and 8996 deletions

View File

@@ -149,11 +149,12 @@ test('documents center rows show NEW marker until the row is opened', () => {
assert.doesNotMatch(documentsCenterStyles, /newDocumentPulse/)
})
test('documents center empty states stay emerald across all scope tabs', () => {
test('documents center empty states follow theme tone across all scope tabs', () => {
const emptyStateBlock = documentsCenterView.match(/const emptyState = computed\(\(\) => \{[\s\S]*?\n\}\)/)?.[0] || ''
assert.match(emptyStateBlock, /eyebrow: '申请单'[\s\S]*tone: 'emerald'/)
assert.match(emptyStateBlock, /title: filtered \? '没有符合当前条件的单据'[\s\S]*tone: 'emerald'/)
assert.match(emptyStateBlock, /eyebrow: '申请单'[\s\S]*tone: 'theme'/)
assert.match(emptyStateBlock, /title: filtered \? '没有符合当前条件的单据'[\s\S]*tone: 'theme'/)
assert.doesNotMatch(emptyStateBlock, /tone:\s*'emerald'/)
assert.doesNotMatch(emptyStateBlock, /tone:\s*'sky'/)
assert.doesNotMatch(emptyStateBlock, /tone:\s*'slate'/)
assert.doesNotMatch(emptyStateBlock, /tone:\s*'amber'/)
@@ -199,8 +200,10 @@ test('documents center switches filter conditions by category tab', () => {
assert.doesNotMatch(documentsCenterView, /class="status-filter-label"/)
assert.match(
documentsCenterView,
/watch\(activeFilterConfig, \(\) => \{[\s\S]*openFilterKey\.value = ''[\s\S]*datePopover\.value = false[\s\S]*pageSizeOpen\.value = false/
/watch\(activeFilterConfig, \(\) => \{[\s\S]*openFilterKey\.value = ''[\s\S]*datePopover\.value = false/
)
assert.match(documentsCenterView, /<EnterpriseSelect v-model="pageSize"[\s\S]*:options="pageSizeOptions"/)
assert.doesNotMatch(documentsCenterView, /pageSizeOpen/)
})
test('documents center status dropdown derives labels and closes after selection', () => {