feat: 风险可见性控制与差旅详情页交互优化
- 新增风险可见性工具函数与风险日趋势图表组件 - 优化差旅请求详情页费用模型与视图交互 - 完善顶部导航栏样式与应用壳路由逻辑 - 补充风险可见性、风险看板与差旅详情测试覆盖
This commit is contained in:
@@ -16,6 +16,10 @@ const dashboardComponent = readFileSync(
|
||||
fileURLToPath(new URL('../src/components/dashboard/RiskObservationDashboard.vue', import.meta.url)),
|
||||
'utf8'
|
||||
)
|
||||
const riskDailyTrendChart = readFileSync(
|
||||
fileURLToPath(new URL('../src/components/charts/RiskDailyTrendChart.vue', import.meta.url)),
|
||||
'utf8'
|
||||
)
|
||||
const overviewViewModel = readFileSync(
|
||||
fileURLToPath(new URL('../src/composables/useOverviewView.js', import.meta.url)),
|
||||
'utf8'
|
||||
@@ -24,6 +28,18 @@ const overviewTemplate = readFileSync(
|
||||
fileURLToPath(new URL('../src/views/OverviewView.vue', import.meta.url)),
|
||||
'utf8'
|
||||
)
|
||||
const topBarComponent = readFileSync(
|
||||
fileURLToPath(new URL('../src/components/layout/TopBar.vue', import.meta.url)),
|
||||
'utf8'
|
||||
)
|
||||
const appShellComposable = readFileSync(
|
||||
fileURLToPath(new URL('../src/composables/useAppShell.js', import.meta.url)),
|
||||
'utf8'
|
||||
)
|
||||
const legacyAppScript = readFileSync(
|
||||
fileURLToPath(new URL('../src/scripts/App.js', import.meta.url)),
|
||||
'utf8'
|
||||
)
|
||||
const riskLabels = readFileSync(
|
||||
fileURLToPath(new URL('../src/utils/riskLabels.js', import.meta.url)),
|
||||
'utf8'
|
||||
@@ -118,6 +134,28 @@ test('risk dashboard follows the top overview range without card-level selectors
|
||||
assert.match(dashboardComponent, /RiskDailyTrendChart/)
|
||||
})
|
||||
|
||||
test('overview custom date defaults use current year instead of hard-coded legacy dates', () => {
|
||||
assert.match(topBarComponent, /createCurrentYearDateRange/)
|
||||
assert.match(topBarComponent, /formatDateValue/)
|
||||
assert.match(appShellComposable, /createCurrentYearDateRange\(\)/)
|
||||
assert.match(legacyAppScript, /createCurrentYearDateRange\(\)/)
|
||||
assert.doesNotMatch(topBarComponent, /2024-07-06|2024-07-12/)
|
||||
assert.doesNotMatch(appShellComposable, /2024-07-06|2024-07-12/)
|
||||
assert.doesNotMatch(legacyAppScript, /2024-07-06|2024-07-12/)
|
||||
})
|
||||
|
||||
test('risk daily trend is bucketed for long ranges and keeps chart labels readable', () => {
|
||||
assert.match(overviewViewModel, /RISK_DAILY_TREND_MAX_BUCKETS = 14/)
|
||||
assert.match(overviewViewModel, /aggregateRiskDailyTrendRows/)
|
||||
assert.match(overviewViewModel, /Math\.ceil\(normalizedRows\.length \/ maxBuckets\)/)
|
||||
assert.match(overviewViewModel, /buildRiskTrendBucketLabel/)
|
||||
assert.doesNotMatch(overviewViewModel, /rows\.slice\(-7\)/)
|
||||
assert.match(riskDailyTrendChart, /const barWidth = computed/)
|
||||
assert.match(riskDailyTrendChart, /barMaxWidth: 14/)
|
||||
assert.match(riskDailyTrendChart, /bottomGridSize/)
|
||||
assert.match(riskDailyTrendChart, /replace\('~', '\\n~'\)/)
|
||||
})
|
||||
|
||||
test('risk dashboard shows loading overlay and realtime refresh status', () => {
|
||||
assert.match(overviewTemplate, /dashboard-loading-state/)
|
||||
assert.match(overviewTemplate, /floating/)
|
||||
|
||||
Reference in New Issue
Block a user