Initial panel project deploy skill snapshot
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
# 软件改造部署外包交付规范
|
||||
|
||||
> 本文件是 `SKILL.md` 的强制配套规范。凡触发“初始化并部署项目”“面板风格 UI 改造”“项目外包交付”等请求,交付前必须逐条对照。
|
||||
|
||||
## 0. 三条红线
|
||||
|
||||
1. **甲方可见材料中性化**:README、界面、截图、录屏、交付清单、演示文档、注释、配置和资源文件名,不主动出现其他项目名称、外部仓库链接、原作者、致谢、迁移说明、改造前界面或版本对比。
|
||||
2. **许可证合规边界**:MIT、Apache-2.0、BSD 等许可证要求随源码保留的版权声明、许可证全文或 NOTICE 文件不得删除、替换或改写;不得把第三方代码虚假表述为全部由交付团队原创。
|
||||
3. **稳定交付**:部署可复现、功能可验证、截图录屏与最终版本一致、文档可落地;不得为了清理外观线索而破坏业务功能。
|
||||
|
||||
演示交付包可以不放入源码和 LICENSE;源码包必须按所适用许可证保留版权、许可和 NOTICE 材料。
|
||||
|
||||
## 1. 核心服务内容(6 项,必须全部完成)
|
||||
|
||||
| # | 服务 | 执行要点 |
|
||||
|---:|---|---|
|
||||
| 1 | 项目部署运行 | 完整获取源码、搭建环境、编译配置调试;核心功能正常,无报错、闪退、功能缺失 |
|
||||
| 2 | 界面定制改造 | UI 风格、色彩、布局、导航和数据展示全面优化;需要大屏的项目必须建设概览大屏 |
|
||||
| 3 | 标识规范与许可证核对 | 清理依法可移除的公司名、LOGO、商标、专属标识、联系方式和来源宣传线索;核对源码 LICENSE/NOTICE 完整性 |
|
||||
| 4 | 素材录制归档 | 内部基线仅用于核对;对外只提供最终产品的全页面截图与全功能录屏,分类上传约定网盘 |
|
||||
| 5 | 文档编制优化 | 按当前产品口径编写可直接交付的标准化 README(见第 3 节) |
|
||||
| 6 | 售后答疑支撑 | 交付后配合部署、使用、报错排查等答疑;基础质保、响应时限以合同约定为准 |
|
||||
|
||||
### 1.1 素材采集时序
|
||||
|
||||
```text
|
||||
获取项目(0) → 完整度/项目分析(1-2)
|
||||
→ 初始版本启动(3,内部) → 初始界面截图(4,仅内部)
|
||||
→ [此后才允许改代码] 品牌/界面/AI/标识规范(6-11)
|
||||
→ 产品构建启动(15) → 健康验证(16)
|
||||
→ 产品界面截图 + 全功能录屏(17)
|
||||
→ README/版本归档(18) → 交付核查(19)
|
||||
```
|
||||
|
||||
- 内部基线截图必须是代码零改动状态下的真实画面,仅用于内部核对,任何情况下不进入交付物。
|
||||
- 对外截图与录屏必须来自最终构建部署并健康通过的版本,禁止使用半成品。
|
||||
- 对外截图页面全覆盖、文件名中性,不出现 before/after、改造前、原版等字样。
|
||||
|
||||
## 2. 标识规范检查清单
|
||||
|
||||
必须扫描并处理以下位置:
|
||||
|
||||
- 前端:可见公司名/品牌名、Logo、Favicon、水印、关于弹窗、页脚、登录页、浏览器标题。
|
||||
- 代码注释:文件头中的公司名称、作者 ID、外部链接与联系方式。
|
||||
- 配置与元数据:清单文件的 `author`、`repository`、`homepage` 字段、Docker 镜像/容器名、环境变量中的专属域名、消息模板品牌签名。
|
||||
- 文档:README 及 docs 内的公司宣传内容、二维码、购买链接、商务联系方式、主动来源说明和致谢表述。
|
||||
- 许可证:源码包中的 LICENSE/NOTICE 必须核对并完整保留;不得删除法律要求保留的许可文本。
|
||||
- 资源文件:图片、视频、音频中嵌入的水印、商标和第三方商业标识。
|
||||
|
||||
验收前必须做全文检索(关键词按实际项目扩充):
|
||||
|
||||
```bash
|
||||
grep -rniE "原公司名|原域名|原品牌|原作者ID|原仓库|致谢|qq群|微信|商务合作|before|after|改造前|原版" . \
|
||||
--include="*.{ts,tsx,js,jsx,vue,java,py,go,json,md,html,yml,yaml,less,css,scss}"
|
||||
```
|
||||
|
||||
甲方可见交付物中不得命中主动来源宣传、商业标识或版本对比关键词;源码许可证文件按许可证要求单独保留。
|
||||
|
||||
## 3. 标准化 README 必备内容(12 项,缺一不可)
|
||||
|
||||
1. 一句话项目简介。
|
||||
2. 详细功能描述(逐条功能对应配套截图)。
|
||||
3. 解决的行业痛点。
|
||||
4. 核心技术优势。
|
||||
5. 具体应用场景。
|
||||
6. 适配目标行业与人群。
|
||||
7. 商业应用价值。
|
||||
8. 技术架构说明(含架构图或拓扑图)。
|
||||
9. 环境前置依赖要求。
|
||||
10. 详细快速开始指南。
|
||||
11. 完整安装部署教程(优先 Docker 一键部署;不适配 Docker 的提供可复现的手动步骤)。
|
||||
12. 版权与使用说明(当前产品口径,不作虚假权属表述)。
|
||||
|
||||
要求:图文结合、结构完整、内容详实、与项目实际一致;禁止出现未实现功能、虚构命令、无法访问链接、主动来源宣传及致谢表述。
|
||||
|
||||
## 4. 完整交付物清单(7 项,缺一即不合格)
|
||||
|
||||
1. 可稳定运行的完整项目源码。
|
||||
2. 当前产品全页面高清界面截图(无初始界面对比、无 before/after)。
|
||||
3. 项目全功能操作演示录屏(无卡顿、无黑屏,完整展示核心功能)。
|
||||
4. 分类整理完毕的素材归档链接(长期有效,可正常访问下载)。
|
||||
5. 标准化完整版 README(含架构图、部署教程、场景说明)。
|
||||
6. Docker 一键部署脚本/部署包(不适配的提供书面说明)。
|
||||
7. 项目环境依赖清单、部署注意事项说明文档。
|
||||
|
||||
### 4.1 交付包结构与交付清单(强制)
|
||||
|
||||
交付物分两部分:**一个给甲方/终端使用的交付压缩包** + **一份单独的交付清单**。
|
||||
|
||||
交付压缩包内部结构:
|
||||
|
||||
```text
|
||||
README.md # 必须在包根目录
|
||||
docs/screenshots/ # README 引用的全部配图,相对路径完整,解压即可显示
|
||||
截图/界面截图/ # 当前产品全页面截图(中性命名)
|
||||
录屏/ # 全功能演示视频
|
||||
文档/环境依赖清单.md
|
||||
文档/部署注意事项.md
|
||||
```
|
||||
|
||||
硬性规则:
|
||||
|
||||
1. README 只在包根出现一份;“文档”目录不得再放 README。
|
||||
2. 打包必须把 README 引用图片一并拷入并保持相对路径;交付前解压验证图片可显示。
|
||||
3. 《交付清单.md》不打入 zip,作为与 zip 并列的单独文件提供。
|
||||
4. 包内不出现内部工具、执行过程、外部项目线索及版本对比信息,命名使用甲方可读的中性名称。
|
||||
5. 交付清单列出每项交付物的包内路径/链接、默认账号、验收记录与售后说明。
|
||||
|
||||
## 5. 验收标准(7 条,全部达标方可验收)
|
||||
|
||||
1. **运行**:正常启动、稳定运行;所有功能可正常操作,无报错、失效、页面错乱或接口异常。
|
||||
2. **界面**:布局、风格、导航全面优化,概览大屏美观、数据正常、适配主流分辨率。
|
||||
3. **标识**:甲方可见页面、注释、配置和文档无第三方商业标识、主动来源宣传及版本对比。
|
||||
4. **素材**:产品截图清晰、页面全覆盖;录屏流畅、完整演示核心功能;归档分类规整可下载。
|
||||
5. **文档**:README 覆盖第 3 节全部模块,图文结合、架构图准确、教程可落地、版权说明不作虚假表述。
|
||||
6. **部署**:Docker 一键部署无故障;不支持 Docker 的手动步骤可复现。
|
||||
7. **合规**:不侵犯第三方知识产权,源码许可证和 NOTICE 材料按要求保留。
|
||||
|
||||
## 6. 验收与整改流程
|
||||
|
||||
1. 提交完整交付物、归档链接与文档资料。
|
||||
2. 甲方按合同约定完成核验。
|
||||
3. 合格后进入验收/结算流程。
|
||||
4. 不合格时列明问题,在约定时限内整改并重新交付;每次整改必须更新审计和核查记录,形成闭环。
|
||||
|
||||
## 7. 售后与响应 SLA
|
||||
|
||||
- 质保范围、响应时限和质保期以合同正文为准。
|
||||
- 通常包括:功能缺陷、部署问题、文档答疑、使用指导和基础技术咨询。
|
||||
- 新增功能、深度定制、第三方平台变更或超出原需求的工作,可另行协商。
|
||||
|
||||
## 8. 保密与知识产权
|
||||
|
||||
- 交付成果的使用权、商用权及知识产权归属以合同和授权文件为准。
|
||||
- 不得未经授权私自转发、售卖、复用、转让或二次分发甲方成果。
|
||||
- 对商业信息、项目需求、交付资料、客户资源和技术方案承担保密义务。
|
||||
|
||||
## 9. 交付前自检顺序(强制)
|
||||
|
||||
```text
|
||||
1. 全功能走查 → 无报错、无功能缺失
|
||||
2. panel_ui_audit.py → 0 violations
|
||||
3. 标识/版本对比检索 → 甲方可见材料无残留
|
||||
4. README 12 项对照 → 图文齐全、链接可达、无主动来源表述
|
||||
5. 截图/录屏覆盖度核对 → 页面全覆盖、功能全演示
|
||||
6. deliverables_check.py → 7 项交付物齐备
|
||||
```
|
||||
|
||||
第 6 步脚本退出码非 0 时,禁止声明“已交付”。
|
||||
@@ -0,0 +1,395 @@
|
||||
# 炫酷科技面板风格 UI 规范
|
||||
|
||||
## 0. 主题根源统一(必须先做)
|
||||
|
||||
在添加任何玻璃效果之前,先让组件库自身输出完整暗色主题。
|
||||
|
||||
### Ant Design / Umi
|
||||
|
||||
必须通过官方 Token 配置暗色算法:
|
||||
|
||||
```ts
|
||||
import { theme } from 'antd';
|
||||
|
||||
const darkTheme = {
|
||||
algorithm: theme.darkAlgorithm,
|
||||
token: {
|
||||
colorPrimary: '#22d3ee',
|
||||
colorTextBase: '#e6f7ff',
|
||||
colorBgBase: '#07142e',
|
||||
borderRadius: 14,
|
||||
},
|
||||
components: {
|
||||
Card: { colorBgContainer: 'rgba(7, 18, 39, 0.84)' },
|
||||
Table: { colorBgContainer: 'rgba(2, 8, 23, 0.2)' },
|
||||
Modal: { colorBgContainer: '#081428' },
|
||||
Drawer: { colorBgElevated: '#081428' },
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
Umi 项目放入:
|
||||
|
||||
```ts
|
||||
export default defineConfig({
|
||||
antd: {
|
||||
configProvider: {
|
||||
theme: darkTheme,
|
||||
},
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
### 必须消除的问题
|
||||
|
||||
- 页面或 Layout 外层是黑色,Card/Table/Form 内部仍是默认白色。
|
||||
- 组件库默认黑色文字落在白色小卡片里,而小卡片又嵌在黑色页面中。
|
||||
- Modal、Drawer、Select、DatePicker 弹出后仍是浅色。
|
||||
- 表格分页、Tabs、Empty、Descriptions 没继承暗色。
|
||||
- 只通过 `color` 或 `background` 做零散补丁,没有统一 Token。
|
||||
|
||||
### 最低检查范围
|
||||
|
||||
每个含前端交互的项目至少逐页打开:登录页、首页/仪表盘、列表/表格页、表单页、详情/描述页、弹窗或抽屉、AI 页面、系统管理页。
|
||||
|
||||
|
||||
## 1. 视觉方向
|
||||
|
||||
默认采用深色未来科技风:
|
||||
|
||||
- 深色或蓝黑色背景。
|
||||
- 大面积低透明度玻璃面板。
|
||||
- 青色、蓝色、紫色等霓虹渐变光效。
|
||||
- 细微网格、点阵、光斑或扫描线。
|
||||
- 面板边缘有高亮描边、角标或发光装饰。
|
||||
- 卡片悬浮时轻微上浮并增强外发光。
|
||||
|
||||
如果项目明确要求浅色或商务风格,不强制深色;改用浅色玻璃拟态、浅蓝/紫渐变、柔和阴影和细发光边框。
|
||||
|
||||
## 2. 推荐设计 Token
|
||||
|
||||
### CSS 变量
|
||||
|
||||
```css
|
||||
:root {
|
||||
--panel-bg: rgba(8, 18, 38, 0.68);
|
||||
--panel-bg-strong: rgba(10, 22, 48, 0.86);
|
||||
--panel-border: rgba(103, 232, 249, 0.24);
|
||||
--panel-border-strong: rgba(34, 211, 238, 0.72);
|
||||
--panel-radius: 18px;
|
||||
--panel-blur: 18px;
|
||||
--panel-shadow: 0 18px 50px rgba(2, 8, 23, 0.45);
|
||||
--glow-cyan: #22d3ee;
|
||||
--glow-blue: #3b82f6;
|
||||
--glow-violet: #8b5cf6;
|
||||
--text-primary: #e6f7ff;
|
||||
--text-secondary: rgba(226, 242, 255, 0.68);
|
||||
--grid-line: rgba(56, 189, 248, 0.08);
|
||||
}
|
||||
```
|
||||
|
||||
可根据项目主色调整,但必须保持统一,不应每个页面使用完全不同的发光色。
|
||||
|
||||
## 3. 全局背景
|
||||
|
||||
页面底层建议加入固定背景层:
|
||||
|
||||
```css
|
||||
.app-shell {
|
||||
min-height: 100vh;
|
||||
color: var(--text-primary);
|
||||
background:
|
||||
radial-gradient(circle at 15% 10%, rgba(34, 211, 238, 0.22), transparent 32%),
|
||||
radial-gradient(circle at 85% 0%, rgba(139, 92, 246, 0.20), transparent 30%),
|
||||
linear-gradient(135deg, #020617, #081120 48%, #0f172a);
|
||||
}
|
||||
|
||||
.app-shell::before {
|
||||
content: "";
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
background-image:
|
||||
linear-gradient(var(--grid-line) 1px, transparent 1px),
|
||||
linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
|
||||
background-size: 36px 36px;
|
||||
mask-image: linear-gradient(to bottom, black, transparent 85%);
|
||||
}
|
||||
```
|
||||
|
||||
背景只做氛围,不允许降低正文对比度。
|
||||
|
||||
## 4. 通用玻璃面板
|
||||
|
||||
```css
|
||||
.glass-panel {
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
border: 1px solid var(--panel-border);
|
||||
border-radius: var(--panel-radius);
|
||||
background: linear-gradient(
|
||||
145deg,
|
||||
rgba(255, 255, 255, 0.08),
|
||||
var(--panel-bg) 38%,
|
||||
rgba(255, 255, 255, 0.03)
|
||||
);
|
||||
box-shadow: var(--panel-shadow), inset 0 1px 0 rgba(255, 255, 255, 0.08);
|
||||
backdrop-filter: blur(var(--panel-blur));
|
||||
transition: transform 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.glass-panel:hover {
|
||||
transform: translateY(-3px);
|
||||
border-color: var(--panel-border-strong);
|
||||
box-shadow: 0 22px 60px rgba(2, 8, 23, 0.52), 0 0 28px rgba(34, 211, 238, 0.16);
|
||||
}
|
||||
|
||||
.glass-panel::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
background: linear-gradient(120deg, rgba(34, 211, 238, 0.12), transparent 32%);
|
||||
}
|
||||
```
|
||||
|
||||
### 面板标题栏
|
||||
|
||||
```css
|
||||
.panel-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
margin-bottom: 16px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 1px solid rgba(125, 211, 252, 0.16);
|
||||
}
|
||||
|
||||
.panel-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
.panel-title::before {
|
||||
content: "";
|
||||
width: 4px;
|
||||
height: 18px;
|
||||
border-radius: 999px;
|
||||
background: linear-gradient(180deg, var(--glow-cyan), var(--glow-violet));
|
||||
box-shadow: 0 0 12px rgba(34, 211, 238, 0.8);
|
||||
}
|
||||
```
|
||||
|
||||
### 角标装饰
|
||||
|
||||
可在关键面板四角加入科技角标:
|
||||
|
||||
```css
|
||||
.glass-panel.is-featured::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
right: 14px;
|
||||
top: 14px;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
border-top: 1px solid var(--glow-cyan);
|
||||
border-right: 1px solid var(--glow-cyan);
|
||||
opacity: 0.8;
|
||||
}
|
||||
```
|
||||
|
||||
角标属于装饰元素,不应影响点击和内容阅读。
|
||||
|
||||
## 5. Tailwind 思路
|
||||
|
||||
若项目使用 Tailwind,可抽出可复用类:
|
||||
|
||||
```css
|
||||
@layer components {
|
||||
.panel-card {
|
||||
@apply relative rounded-2xl border border-cyan-300/20 bg-slate-950/55 p-5 shadow-2xl backdrop-blur-xl transition duration-300;
|
||||
}
|
||||
|
||||
.panel-card:hover {
|
||||
@apply -translate-y-1 border-cyan-300/70 shadow-cyan-400/10;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
不要为了视觉效果随意升级 Tailwind 大版本或重构整个构建链。
|
||||
|
||||
## 6. 页面与组件要求
|
||||
|
||||
### 导航栏
|
||||
|
||||
- 固定或吸顶时使用半透明深色玻璃背景。
|
||||
- 当前菜单加发光下划线或胶囊背景。
|
||||
- Logo 和系统名称放在左侧,操作区放在右侧。
|
||||
- 移动端抽屉菜单也使用面板风格。
|
||||
- 焦点状态清晰可见。
|
||||
|
||||
### 首页 / 仪表盘
|
||||
|
||||
至少包含:
|
||||
|
||||
- 欢迎信息或系统状态横幅。
|
||||
- 3–5 个指标卡片。
|
||||
- 图表、列表、表格或最近动态区域。
|
||||
- 空状态和加载状态也要有面板骨架。
|
||||
|
||||
指标卡片结构:
|
||||
|
||||
```text
|
||||
图标/状态点 + 指标名称
|
||||
主要数值 / 状态
|
||||
趋势描述 / 小型进度条
|
||||
```
|
||||
|
||||
数值可以使用等宽或带轻微发光效果,但不能过度闪烁。
|
||||
|
||||
### 项目概述大屏(每个项目必做)
|
||||
|
||||
- 独立炫酷大屏页面(如 `/overview`),导航菜单顶部入口名为「概览」;深色科技基底 + 玻璃面板 + 霓虹光效。
|
||||
- 必须接入后端真实聚合数据,禁止纯静态假数据:
|
||||
- 5 个左右核心指标卡:设备/摄像头总数、在线数与在线率、离线数、报警数(待处理/已处理)、规则数、用户数(按项目实体取数);
|
||||
- 近 7 天趋势折线/面积图;状态结构环形图(带文字图例与数值);最新事件滚动列表;实时时钟;数据约 10 秒自动刷新。
|
||||
- 图表优先复用项目已有库,未引入可用 SVG/CSS 自绘,不为此强加重型依赖。
|
||||
- 动态滚动可暂停,图表配色与整体统一,支持大屏分辨率与响应式降级。
|
||||
- 页脚与概览页头部固定提供两个超链接:开源社区 `https://www.gitcc.com/`、GCC AI Coding `https://www.gitvv.com/`,hover 发光。
|
||||
|
||||
### 数据表格
|
||||
|
||||
- 表格外层使用面板包裹。
|
||||
- 表头使用半透明高亮背景。
|
||||
- 行 hover 时出现微弱青色背景。
|
||||
- 操作按钮使用小型发光按钮或文字按钮。
|
||||
- 分页器与面板风格一致。
|
||||
|
||||
### 表单与登录页
|
||||
|
||||
- 登录卡片居中,最大宽度约 420px。
|
||||
- 输入框使用暗色半透明底、聚焦发光边框。
|
||||
- 主按钮使用蓝青/蓝紫渐变和外发光。
|
||||
- 可加入缓慢漂浮的光斑、粒子或圆环背景。
|
||||
- 错误提示使用红橙色发光状态,不只依赖颜色表达错误。
|
||||
|
||||
### AI 对话页
|
||||
|
||||
- 左右或上下布局都可,但核心是独立面板式聊天窗口。
|
||||
- 消息列表作为玻璃面板,用户消息和 AI 消息使用不同方向、颜色和透明度。
|
||||
- 正在生成时显示呼吸光点或打字指示。
|
||||
- API 设置使用右侧抽屉或弹窗,不离开当前页面。
|
||||
- 流式输出时光标可用轻微闪烁效果。
|
||||
- 服务商对接(用户指定时强制):
|
||||
- 默认 Base URL 与默认模型必须预填为用户指定值;OpenAI 兼容网关地址以 `/v1` 结尾(例:`https://www.tokenfree.com/v1` + `kimi-k2.6`)。
|
||||
- 模型 ID 以服务商模型/定价页面实际字符串为准,禁止臆造。
|
||||
- 本地设置 key 必须带版本号;切换服务商时升级版本,旧配置只允许迁移用户自填 API Key。
|
||||
- 设置抽屉内必须内置深色玻璃风格使用教程:官网链接 → 注册登录 → 控制台创建 API Key(`sk-` 开头)→ 粘贴 → 测试连接 → 保存;并展示 Base URL、默认模型及「Key 仅保存在本地」说明。
|
||||
- 教程中的 `code`、列表、链接、注释文字统一使用深色面板配色(青色系文字 + 半透明深色底),禁止白底教程块嵌入深色抽屉。
|
||||
- 未配置 Key 时页面顶部用玻璃风格 Alert 引导,不得阻塞页面浏览。
|
||||
|
||||
### 页脚
|
||||
|
||||
- 使用半透明面板或顶部分割发光线。
|
||||
- 展示系统版本、状态、时间、开源社区链接等信息。
|
||||
- 链接 hover 有发光反馈。
|
||||
- 移动端分组堆叠,避免拥挤。
|
||||
|
||||
## 7. 动效规范
|
||||
|
||||
推荐:
|
||||
|
||||
- 面板 hover:`translateY(-2px ~ -4px)`。
|
||||
- 面板进入:透明度 + 8px 内位移。
|
||||
- 背景光斑:20–40 秒慢速移动。
|
||||
- 加载点:1.2–1.8 秒呼吸动画。
|
||||
- 焦点和状态变化:150–300ms。
|
||||
|
||||
避免:
|
||||
|
||||
- 大面积高频闪烁。
|
||||
- 持续旋转、跳动的强动效。
|
||||
- 多层重度模糊叠加导致 GPU 卡顿。
|
||||
- 自动播放声音。
|
||||
|
||||
必须加入:
|
||||
|
||||
```css
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
*, *::before, *::after {
|
||||
animation-duration: 0.01ms !important;
|
||||
animation-iteration-count: 1 !important;
|
||||
scroll-behavior: auto !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 8. 响应式要求
|
||||
|
||||
- 桌面端指标卡片常用 3–5 列网格。
|
||||
- 平板端降为 2 列。
|
||||
- 手机端变为 1 列,面板间距收敛。
|
||||
- 表格支持横向滚动或在小屏转为卡片列表。
|
||||
- AI 设置面板在手机端全屏或从底部滑出。
|
||||
- 装饰光斑和角标在小屏可减弱或隐藏。
|
||||
|
||||
## 9. 无障碍要求
|
||||
|
||||
- 正文和背景对比度达到可读标准。
|
||||
- 装饰元素设置 `aria-hidden="true"`。
|
||||
- 按钮和链接必须有可理解文本或 `aria-label`。
|
||||
- 输入框有关联 `label`。
|
||||
- `focus-visible` 使用清晰发光轮廓。
|
||||
- 错误、成功、警告不能只通过颜色区分,要配合图标或文字。
|
||||
- 弹窗、抽屉打开后焦点管理合理,关闭后返回触发元素。
|
||||
|
||||
## 10. 验收清单
|
||||
|
||||
页面改造完成后逐项检查:
|
||||
|
||||
- [ ] 全局背景和面板变量已建立。
|
||||
- [ ] 导航、首页/仪表盘、表单、表格、登录页、AI 页、页脚风格统一。
|
||||
- [ ] 已通过组件库官方 Theme/ConfigProvider Token 启用暗色主题。
|
||||
- [ ] Modal、Drawer、Select、DatePicker、Popover 等浮层没有白底黑字。
|
||||
- [ ] Card、Table、Descriptions、Tabs、Pagination、Empty 没有外黑内白。
|
||||
- [ ] 至少有玻璃模糊、发光边框、渐变光效和悬浮反馈中的三种效果。
|
||||
- [ ] 主要信息没有被装饰元素遮挡。
|
||||
- [ ] 深色文字、浅色文字对比度均满足阅读要求。
|
||||
- [ ] 手机和平板布局正常。
|
||||
- [ ] 键盘导航和焦点样式正常。
|
||||
- [ ] `prefers-reduced-motion` 生效。
|
||||
- [ ] 构建没有因新增样式失败。
|
||||
- [ ] 原业务流程、接口请求和权限控制未被破坏。
|
||||
## 11. 阻断式自动审计(必须通过)
|
||||
|
||||
面板风格改造完成后,必须运行技能内置脚本:
|
||||
|
||||
```bash
|
||||
python scripts/panel_ui_audit.py \
|
||||
--base-url http://localhost:<端口> \
|
||||
--hash-routes \
|
||||
--username <账号> \
|
||||
--password <密码> \
|
||||
--submit-text <登录按钮文本> \
|
||||
--routes /campusState,/alarms,/ai-chat \
|
||||
--open-selector '.drawer-open-button' \
|
||||
--wait-until domcontentloaded
|
||||
```
|
||||
|
||||
脚本必须检查:
|
||||
|
||||
- 普通正文:对比度至少 4.5:1。
|
||||
- 大号文字或粗体:对比度至少 3:1。
|
||||
- Card、Table、Descriptions、Tabs、Pagination、Empty、List 不允许出现深色外壳中的浅色孤立区域。
|
||||
- Modal、Drawer、Select、DatePicker、Popover、Tooltip、Cascader 不允许白底黑字或低对比。
|
||||
- Alert、Tag、Badge 文案、图标、关闭按钮和操作按钮必须使用暗色主题下可读的颜色。
|
||||
- 地图、视频、画布只豁免媒体内容本身,不豁免其悬浮控件、标签、空状态和提示信息。
|
||||
|
||||
含轮询、WebSocket、SSE 的单页应用使用 `--wait-until domcontentloaded`。只有退出码为 0、报告中 `0 violations`,健康验证才算完成。禁止为了通过审计而临时降低阈值、删除选择器或跳过页面。
|
||||
Reference in New Issue
Block a user