city-life-line 前端仓库;不涉及 pipe-ner-server 后端与 UE Pipelines。供水设施管理下的五个查询页面——管网信息查询、泵站信息查询、水厂信息查询、水源地信息查询、用水户信息查询——目前是 RuoYi 经典 CRUD 外观:根容器 app-container、裸 el-form 筛选、裸 el-table、right-toolbar,无任何自有 <style> 块,全部依赖全局 src/assets/styles/index.scss 的 facility-* / detail-drawer 类。
而同系统的管网数据统计分析(WaterFacilityDashboard.vue)、设备台账管理(WaterDevicePage.vue)等页面已采用“供水运行指挥台”蓝白风格:water-page 渐变浅灰蓝底、42px 蓝→青渐变图标页头、filter-card 筛选卡、table-card 表格卡、右侧抽屉。两套视觉并存,供水系统观感不一致。
另有两处小缺陷:五个页面共用的 facility-error 类在全仓无任何样式定义;right-toolbar 的搜索开关交互与新页面语言不一致。
数据、接口、权限、测试契约均已稳定,本任务只对齐视觉外壳。
将五个页面改造为统一的 water-page 外壳,与参照页同构:
getList);移除 right-toolbar,筛选区常显。el-card.shadow="never".filter-card,卡头 .card-title(“筛选”)+ 右侧操作按钮(新增/删除/导出/导入)。el-card.shadow="never".table-card,卡头 .card-title(“XX 清单”)+ 表格 + 分页。waterFacilityPageTheme.scss 承载 chrome 样式,五个页面各以 @use 引用;页级差异仅在 scoped 块内少量补充。<script> 逻辑、API 调用、权限指令、字段与列。src/views/subSystem/waterSupply/components/waterFacilityPageTheme.scss<template> 与 <style>,<script> 块零改动):
src/views/subSystem/basic/pipeInfo/index.vue(管网信息查询)src/views/subSystem/basic/pumpStation/index.vue(泵站信息查询)src/views/subSystem/basic/waterPlant/index.vue(水厂信息查询)src/views/subSystem/basic/waterSource/index.vue(水源地信息查询)src/views/subSystem/basic/waterUserInfo/index.vue(用水户信息查询)tests/waterFacilityPageTheme.test.mjs(源契约测试,见 Testing Decisions)已确认影响面:五个 basic/*/index.vue 仅被 waterSupply/facility/{pipe,pumpStation,plant,source,user}.vue 单行壳引用,改造不外溢到其他模块。壳组件本身不改。
<div class="app-container"> → <div class="water-page facility-page">新增页头:
<div class="page-heading">
<div class="page-title">
<span class="page-title-icon"><el-icon><House /></el-icon></span>
<div><h2>水厂信息查询</h2><span class="muted">水厂档案、能力与运行状态维护</span></div>
</div>
<el-button class="heading-refresh" :icon="Refresh" :loading="loading" @click="getList">刷新</el-button>
</div>
src/components/SvgIcon/svgicon.js + main.js 全局注册,模板直接写组件名,无需任何 script 改动。Share、泵站 Odometer、水厂 House、水源地 Water、用水户 User。移除 right-toolbar(全局组件,直接删除标签即可);showSearch 变量保留在 script 不动,筛选表单 v-show 改为常显(去掉 v-show 或保持 true 语义)。
筛选区套 el-card.shadow="never".filter-card,卡头 <div class="card-title"><el-icon><Search/></el-icon><span>筛选</span></div>;新增/删除/导出/导入按钮移入卡头右侧(沿用原 v-hasPermi 指令与事件绑定,逐字保留)。
表格 + 分页套 el-card.shadow="never".table-card,卡头 <div class="card-title"><el-icon><List/></el-icon><span>水厂清单</span></div>(“XX 清单”按各页业务名);表格列、fixed="right" 操作列、分页组件属性全部不变。
新增/修改抽屉:保留 class="facility-form-drawer"、:title="dialogTitle"、direction="rtl" 及尺寸(720/760px)原样。
详情抽屉:保留 class="detail-drawer"、direction="rtl" 及尺寸(600/650px)原样。
操作列:保留 facility-row-actions 与 facility-row-action is-detail/is-edit/is-delete 原样。
回收站 el-dialog、导入弹窗 WaterFacilityImportDialog:结构、类名、视觉(EP 默认)均不变。
错误横幅:模板不变;.facility-error 在页级 scoped 补样式(如 margin-bottom: 16px),el-alert + 重试逻辑不动。
从以下已验证实现中提取,逐值对齐,不新增设计变量:
src/views/subSystem/waterSupply/components/WaterDevicePage.vue scoped(约 896–1130 行)src/views/subSystem/waterSupply/components/WaterFacilityDashboard.vue scoped(约 388–658 行)src/views/subSystem/waterSupply/components/waterSupplyPageTheme.scss(既有 28 行)关键 token(已与参照页核对):
| 元素 | 值 |
|---|---|
| 页面背景 | linear-gradient(135deg, #eff6ff 0%, #f8fafc 45%, #eef2f7 100%) |
| 页面容器 | min-height: calc(100vh - 84px); padding: 20px |
| 页头图标块 | 42×42,linear-gradient(135deg, #2563eb 0%, #06b6d4 100%),白图标,圆角 8,box-shadow: 0 8px 16px rgba(37, 99, 235, .2) |
| 标题 / 副题 | h2 20px #1e293b;.muted 13px #64748b |
| 刷新按钮 | 白底、border: 1px solid #bfdbfe、color: #2563eb |
| 卡片(filter/table) | border: 1px solid #e2e8f0、圆角 8、box-shadow: 0 6px 14px rgba(15, 23, 42, .04)、白底 |
| 筛选卡头 | padding: 14px 18px、background: #fbfdff、border-bottom: 1px solid #e2e8f0 |
| 筛选表单项 | margin: 8px 16px 8px 0;label #475569 |
| 卡标题图标 | #2563eb |
| 过渡 | 120–180ms |
设计文档红线(docs/design/2026-08-22-water-supply-work-order-ui.md 视觉规范):圆角 6–8px、细边框 + 轻阴影;不用大圆角胶囊、装饰性渐变、嵌套卡片;状态文字 + 颜色双表达;768px 以下抽屉占满可用宽度、页头纵向堆叠。
<style scoped lang="scss">
@use '../../waterSupply/components/waterFacilityPageTheme.scss';
/* 仅页级差异(背景类名微调、个别间距) */
</style>
.water-page、.facility-page、.page-heading、.page-title、.page-title-icon、.muted、.heading-refresh、.filter-card(含 :deep 卡头/表单项)、.table-card(含 :deep 表头)、.card-title、.facility-error、768px 响应式。append-to-body 传送,scoped 不生效:.facility-form-drawer / .detail-drawer 视觉继续由全局 src/assets/styles/index.scss 现有规则承担,不移植、不修改、不删除;如确需抽屉微调,放页级非 scoped <style lang="scss"> 块(参照 WaterDevicePage 1323 行起的模式)。@use 同一文件会产生 5 份相同 CSS,与现有主题文件的 5 处 @use 模式一致,接受。既有测试零修改通过(类名保留决策的直接原因):
tests/detailDrawerRule.test.mjs:
:title="dialogTitle" + class="facility-form-drawer" + direction="rtl"、facility-row-actions、facility-row-action is-detail/is-edit/is-delete —— 模板改造必须逐字保留这些类名与属性顺序;el-dialog 禁止、所有 el-drawer 必须 rtl、非 facility-form-drawer 抽屉类名须含 detail-drawer —— 保持现状即通过;tests/waterFacilityQuery.test.mjs 第 48–57 行:五页 handleDetail 内 .catch + this.errorMessage = getRequestErrorMessage( 错误保留语义必须原样保留。node --test tests:无新增失败(当前既有失败仅限 monitor/job 只读详情规则等已知非本任务问题,不得恶化)。新增源契约测试(推荐)tests/waterFacilityPageTheme.test.mjs,沿用项目“读源文件断言”风格:
water-page 类;@use 共享主题文件;right-toolbar;page-heading、filter-card、table-card。验证门禁:
node --test tests 全量通过;npm run build:prod 成功;git diff --check 干净;<script> 块的任何改动(查询构造、CRUD、导入导出、回收站、权限指令、API 调用、错误处理逻辑);pipe-ner-server)与 UE 仓库(Pipelines)的任何改动;src/assets/styles/*)与其他模块页面的改动;WaterFacilityImportDialog、回收站弹窗的视觉改动(保持 Element Plus 默认);basic 模块,但已确认仅供水菜单壳引用,影响面封闭在五个供水菜单。svgicon.js 遍历 @element-plus/icons-vue 注册组件名),模板零 script 改动即可用图标;图标名拼写错误会在运行时产生 Vue 警告,T-A 打样时必须人工验证五个图标正常渲染。index.scss 中 .facility-* 规则是五页唯一致用方;改造后页内 scoped 类(water-page/filter-card/table-card 等)与全局类无命名冲突,全局规则原样保留,清理另行任务处理。memory/sessions/2026-09-05.md。