feat(ui): unify list-page enterprise visual pattern

This commit is contained in:
Cheng Zhou
2026-03-04 16:28:41 +08:00
parent 80d9830139
commit 1b920520d6
6 changed files with 37 additions and 13 deletions
+23
View File
@@ -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);
+6 -5
View File
@@ -1,8 +1,8 @@
<template>
<div class="page">
<div v-if="study.currentStudy" class="unified-shell">
<section class="unified-section">
<div class="card-header">
<div class="page ctms-page-shell">
<div v-if="study.currentStudy" class="unified-shell ctms-table-card">
<section class="unified-action-bar">
<div class="card-header ctms-page-header-row">
<div>
<div class="card-title">{{ TEXT.modules.projectMilestones.listTitle }}</div>
<div class="card-subtitle">
@@ -21,7 +21,8 @@
<el-button size="small" @click="loadMilestones">{{ TEXT.common.actions.refresh }}</el-button>
</div>
</div>
</section>
<section class="unified-section ctms-page-content-grid">
<el-table :data="rows" v-loading="loading" class="ctms-table" style="width: 100%">
<el-table-column prop="name" :label="TEXT.modules.projectMilestones.columns.name" min-width="140" />
<el-table-column prop="planDate" :label="TEXT.modules.projectMilestones.columns.planDate" min-width="170">
@@ -1,7 +1,7 @@
<template>
<div class="page">
<div class="page ctms-page-shell">
<template v-if="study.currentStudy">
<el-card shadow="never" class="main-content-card unified-shell">
<el-card shadow="never" class="main-content-card unified-shell ctms-table-card">
<div class="filter-container unified-action-bar">
<div class="filter-left">
<el-form :inline="true" :model="filters" class="filter-form">
+2 -2
View File
@@ -1,6 +1,6 @@
<template>
<div class="page">
<el-card shadow="never" class="main-content-card unified-shell">
<div class="page ctms-page-shell">
<el-card shadow="never" class="main-content-card unified-shell ctms-table-card">
<div class="filter-container unified-action-bar">
<el-form :inline="true" class="filter-form">
<el-form-item class="filter-item-form">
+2 -2
View File
@@ -1,6 +1,6 @@
<template>
<div class="page">
<el-card shadow="never" class="main-content-card unified-shell">
<div class="page ctms-page-shell">
<el-card shadow="never" class="main-content-card unified-shell ctms-table-card">
<div class="filter-container unified-action-bar">
<el-form :inline="true" class="filter-form">
<el-form-item class="filter-item-form">
+2 -2
View File
@@ -1,6 +1,6 @@
<template>
<div class="page">
<el-card shadow="never" class="main-content-card unified-shell">
<div class="page ctms-page-shell">
<el-card shadow="never" class="main-content-card unified-shell ctms-table-card">
<div class="filter-container unified-action-bar">
<el-form :inline="true" :model="filters" class="filter-form">
<el-form-item label="" class="filter-item-form">