From 1b920520d6aca0fcf27703fc62a3ec2c9e02b9f2 Mon Sep 17 00:00:00 2001 From: Cheng Zhou Date: Wed, 4 Mar 2026 16:28:41 +0800 Subject: [PATCH] feat(ui): unify list-page enterprise visual pattern --- frontend/scripts/verify-ui-contract.mjs | 23 +++++++++++++++++++ frontend/src/views/ia/ProjectMilestones.vue | 11 +++++---- .../views/ia/RiskIssueMonitoringVisits.vue | 4 ++-- frontend/src/views/ia/RiskIssuePd.vue | 4 ++-- frontend/src/views/ia/RiskIssueSae.vue | 4 ++-- frontend/src/views/ia/SubjectManagement.vue | 4 ++-- 6 files changed, 37 insertions(+), 13 deletions(-) diff --git a/frontend/scripts/verify-ui-contract.mjs b/frontend/scripts/verify-ui-contract.mjs index 0a19f1a0..52d3c5fa 100644 --- a/frontend/scripts/verify-ui-contract.mjs +++ b/frontend/scripts/verify-ui-contract.mjs @@ -31,6 +31,29 @@ const missing = [ ...requiredUnifiedTokens.filter((t) => !unified.includes(t)) ]; +const pageContractChecks = [ + "src/views/ia/ProjectMilestones.vue", + "src/views/ia/SubjectManagement.vue", + "src/views/ia/RiskIssueSae.vue", + "src/views/ia/RiskIssuePd.vue", + "src/views/ia/RiskIssueMonitoringVisits.vue" +]; + +const requiredPageClasses = [ + "ctms-page-shell", + "unified-action-bar", + "ctms-table-card" +]; + +for (const file of pageContractChecks) { + const content = readFileSync(file, "utf8"); + for (const className of requiredPageClasses) { + if (!content.includes(className)) { + missing.push(`${file}:${className}`); + } + } +} + if (missing.length) { console.error("UI contract check failed. Missing:", missing.join(", ")); process.exit(1); diff --git a/frontend/src/views/ia/ProjectMilestones.vue b/frontend/src/views/ia/ProjectMilestones.vue index 01472fdd..9837e4d2 100644 --- a/frontend/src/views/ia/ProjectMilestones.vue +++ b/frontend/src/views/ia/ProjectMilestones.vue @@ -1,8 +1,8 @@