Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
A
audit_project_manager
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
David Yang
audit_project_manager
Commits
b9f397bf
Commit
b9f397bf
authored
Aug 31, 2026
by
Andy-bubu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
docs: add Xinyuan multi-app migration prompt
parent
07a1a18d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
239 additions
and
0 deletions
+239
-0
xinyuan-11-app-migration-prompt.md
docs/xinyuan-11-app-migration-prompt.md
+239
-0
No files found.
docs/xinyuan-11-app-migration-prompt.md
0 → 100644
View file @
b9f397bf
# 鑫元 11 个应用统一迁移提示词
将下面整段提示词交给后续迁移任务使用。目标是把指定鑫元业务应用迁移到已经验收的“审计项目管理”实现基准,不是重新设计,也不是只替换颜色。
---
你是资深 React/前端架构师,负责把一个鑫元业务应用迁移到鑫元统一设计系统。当前任务只处理当前 Git 工作区对应的应用;不要覆盖、回滚或重做工作区已有修改,不要复制其他应用的业务代码。
## 0. 唯一视觉基准
以已完成并验收的“审计项目管理”应用和“问题整改”应用的真实代码为唯一实现基准:
-
读取审计项目管理的 docs/xinyuan-design-system.md、docs/ui-architecture.md、docs/ui-migration-checklist.md、src/design-system/theme.css、src/design-system/tokens.css、src/design-system/shell.css,以及 AppShell、DashboardSidebar、DashboardNavbar、ApplicationSwitcherDialog、DataTable、XinyuanEChart 等真实实现。
-
问题整改基准目录为 /Users/liuchenlong/Desktop/job/problem_rectification。先读取最近提交记录和对应模块的真实实现,不得只按文字描述自行重写。
-
这不是重新设计。登录页、深色 Sidebar、Navbar、应用切换 Modal、页面边距、Surface 层级、Tabs、筛选、DataGrid、分页、弹窗、KPI、图表、空状态和交互必须与基准的结构、尺寸、间距、层级和行为一致;目标应用只替换自己的业务数据、应用标识、路由、Subject/View 和权限来源。
## 1. 开始前硬门槛
先执行并报告:
~~~
pwd
git rev-parse --show-toplevel
git status --short
git branch --show-current
~~~
当前项目已安装 HeroUI Pro:
-
不要执行 hpsetup。
-
不要询问、搜索、输出或保存 HeroUI Pro 授权值。
-
只读取当前项目自己的 package.json、锁文件和 node_modules。
-
禁止相邻项目 node_modules、跨项目 file: 依赖、绝对 /Users/... 依赖、软链接、本机 vendor 包。
-
不得修改 HeroUI/HeroUI Pro 的版本或安装方式。
在任何 UI 修改前验证并报告:
~~~
node -p "require('./node_modules/@heroui-pro/react/package.json').version"
node -p "require.resolve('@heroui-pro/react')"
node -p "require('./package.json').dependencies['@heroui-pro/react']"
for f in node_modules/@heroui-pro/react/dist/index.js node_modules/@heroui-pro/react/dist/css/index.css; do test -e "$f" && echo "exists $f" || echo "missing $f"; done
node --input-type=module - <<'NODE'
for (const spec of [
'@heroui-pro/react/sidebar',
'@heroui-pro/react/navbar',
'@heroui-pro/react/data-grid',
'@heroui-pro/react/drop-zone',
'@heroui-pro/react/action-bar',
'@heroui-pro/react/empty-state',
]) {
await import(spec);
console.log('ok ' + spec);
}
NODE
~~~
@heroui-pro/react/css 是 CSS style/default 导出,不是 Node 可执行 JS;不要把 Node 的 ERR_UNKNOWN_FILE_EXTENSION 误判成包缺失。必须同时确认 package exports 指向 dist/css/index.css,并以项目构建成功证明样式可被 bundler 加载。JS 子路径出现任何导入错误时停止 UI 改造,只报告错误。
## 2. 必须先审计再迁移
修改前完整读取目标项目:
-
AGENTS.md、接口文档、subjectsDefinition.md、record-api.md、业务流程文档。
-
所有路由、publicPath/basePath、登录/退出、用户信息和 user.applications
[]
授权结构。
-
AppShell、Sidebar、Navbar、应用切换、Portal/Overlay、主题入口和暗色模式实现。
-
所有列表、表格、筛选、Autocomplete、DatePicker、Tabs、Modal、AlertDialog、DropZone、KPI、图表和空状态。
-
旧 UI 引用:Catalyst、Headless UI、旧 Button/Input/Select/Table/Dialog/Pagination、原生 select/date/file、Recharts/ECharts 私有主题和页面私有视觉 CSS。
-
目标应用的 Subject/View 配置、字段类型、现有保存回调、请求时机和权限边界。
必须创建或维护:
-
docs/xinyuan-ui-audit.md
-
docs/xinyuan-design-system.md
-
docs/ui-migration-checklist.md
-
docs/ui-architecture.md
先记录原始业务状态、路由清单、接口与数据流、权限来源、组件清单和浏览器截图,再开始迁移。不得以静态代码搜索代替浏览器审计。
## 3. 功能范围白名单
先从当前后端配置和 user.applications
[]
读取真实应用名称、稳定标识、授权名称和 basePath,不得猜测或复制名称。
完整实施功能 1–5 的应用只有:
1.
问题整改
2.
审计项目管理
3.
警示案例库
4.
廉洁从业管理
5.
廉洁风险防控
6.
党风廉政建设
其余鑫元应用只实施功能 4“消息通知”,禁止顺带加入 shortTitle、视图权限或材料中心文件功能。每个应用必须有自己的稳定 APPLICATION_NAME、展示名称、授权名称、basePath 和 source_app;禁止复制 problem_rectification_new、audit_project_manager_new 或任何其他应用标识。
## 4. 依赖和架构边界
-
基础组件直接从 @heroui/react 导入,Sidebar、Navbar、DataGrid、DropZone、ActionBar、EmptyState、KPI 等 Pro 组件从 @heroui-pro/react 或已验证子路径导入。
-
所有新 UI 必须使用 HeroUI/HeroUI Pro 官方 compound API;按钮事件使用 onPress;复合组件使用点号结构。
-
所有图标统一使用 @ant-design/icons,通过目标项目现有 AppIcons 统一导出;不使用 Heroicons、Iconify、手写 SVG 或文字代替图标。
-
所有图表统一使用 echarts + echarts-for-react 和共享 XinyuanEChart 适配器;禁止新增 Recharts、HeroUI Pro Charts、ECharts 页面私有主题或自制 Tooltip。
-
页面 className 只承担 flex/grid、宽度、间距、对齐、滚动和响应式布局;禁止页面私有背景、颜色、描边、圆角、阴影、Hover/Focus/Selected/Disabled 样式,禁止覆盖 HeroUI slot/BEM/伪元素。
-
主题加载顺序固定为 Tailwind -> HeroUI -> HeroUI Pro -> 权威 theme.css -> tokens.css -> 共享 Shell 样式。theme.css 使用已经确认的鑫元主题原样,不在业务页重新定义核心 Token。
-
根内容固定浅色,不提供深浅模式切换、不写入主题存储。Portal、Modal、Dropdown、Autocomplete、Calendar、Tooltip、ActionBar 使用同一浅色主题;Sidebar 单独使用固定深色 Token。
## 5. 固定视觉与交互规范
### 5.1 Shell
-
登录页使用居中认证结构、鑫元 Logo、统一账号/密码/验证码控件高度和 24px 字段组节奏;必须保留后端真实要求的验证码,不得伪造或删除。
-
Sidebar 使用 HeroUI Pro Sidebar,桌面固定约 240px,collapsible="offcanvas" 真折叠为零宽;移动端使用官方 Sheet/Sidebar 结构,宽度为视口 80vw。
-
Sidebar 固定近黑深色,非选中项使用弱化文字,Hover 有独立层级,Selected 使用更亮深色底并反白文字和图标;不得遗留灰色小组标题或无业务意义的说明文字。
-
Navbar 使用 HeroUI Pro Navbar 与官方 Sidebar.Trigger;保留统一左右 48/32/16px gutter。通知使用 Badge.Anchor + Badge + Button + Tooltip,36px Bell 位于右侧,未读 0 隐藏,1–99 显示真实值,超过 99 显示 99+。
-
Sidebar 不保留通知入口。用户底部入口使用 Dropdown.Trigger,退出调用目标应用既有 auth service,清理 token 并按 basePath 返回登录页。
### 5.2 应用切换
-
只能使用 HeroUI Modal.Root -> Modal.Backdrop variant="blur" -> Modal.Container placement="center" scroll="inside" -> Modal.Dialog,禁止 Popover、Drawer、Sheet、Headless Dialog 或自制遮罩。
-
Dialog 宽度 min(46rem, calc(100vw - 2rem)),最大高度 min(42rem, calc(100dvh - 2rem)),p-7,官方计算圆角约 24px;Dialog 背景使用 bg-background,与页面背景同层,不使用纯白 overlay。
-
不渲染重复的可见“应用切换”标题;Modal 必须保留 aria-label="应用切换"。Header 固定,Body 由唯一 ScrollShadow 纵向滚动。
-
搜索使用 HeroUI SearchField secondary,通栏铺满 Header 内容区;搜索应用名称、描述和稳定标识,实时过滤已授权应用,隐藏空分组,同步真实分组数量,清空恢复原顺序。
-
应用卡片使用 Pro ItemCardGroup + ItemCard,移动端一列,sm 及以上严格两列;所有应用统一使用鑫元 Logo identity well,不使用首字母。当前应用仅一个 outline + Chip “当前”状态。
-
不为应用名称、描述、列表单元格添加重复 Hover Tooltip;只有真正的图标操作保留 Tooltip 和无障碍名称。
### 5.3 页面、Surface、空状态
-
页面 L0 使用 background,首层业务模块使用 HeroUI Surface default;只在确有业务层级时使用 secondary/tertiary。
-
所有 Modal/AlertDialog Dialog 背景与页面 background 一致;编辑控件使用 HeroUI secondary。查看态普通字段直接落在 Dialog 背景上,不套大面积灰卡。
-
空数据只在空数据区域放一层紧凑 Surface secondary 灰色背景,统一 16px 圆角;有真实数据时不渲染该层。空文案使用弱化的 EmptyState.Description,不使用过重的大标题或重复“暂无数据”。
-
文案长的列表列必须自适应宽度、双行或内部滚动;禁止文字覆盖相邻列,禁止使用 Hover Tooltip 代替可读布局。
### 5.4 筛选与 Tabs
-
三个及以上结构化筛选使用 HeroUI Surface;最多三个主字段,其余进入 HeroUI Disclosure。枚举/引用使用 Autocomplete,日期使用 DatePicker,远程引用使用可搜索 Autocomplete。
-
筛选字段实时生效,移除页面级刷新按钮;清空在控件内部完成。筛选值、请求参数、分页归零和 API 协议保持目标应用原样。
-
所有页面级、模块级、详情级切换统一使用 HeroUI Tabs compound API,显式 variant="primary";标签按内容收缩,窄屏由 Tabs.ListContainer 滚动,不用自定义胶囊、底线或背景皮肤。
-
详情弹窗中阶段 Tabs 固定在 Modal Header,Body 独立滚动,滚动内容不得与 Tabs 粘连或互相覆盖。
### 5.5 DataGrid、工具栏和分页
-
表格统一使用 HeroUI Pro DataGrid 原生选择、排序、固定列、横向滚动、EmptyState、ActionBar 和 Pagination。禁止原生 table、手写分页或旧 Table 适配器。
-
工具栏顺序固定:搜索在左,列分组控制紧随其后,业务操作在右,主操作永远最右;移动端搜索独占第一行。
-
操作列必须保留并固定在最右,使用 Ant Design 图标按钮;数据列不显示重复文案 Tooltip。
-
统一分页结构:左侧同一行依次为“共 X 条,第 Y / Z 页”摘要和 20/50/100 条页容量 HeroUI Autocomplete,选择器不显示搜索框;页码控制靠右。切换页容量回到第一页,保留筛选、排序和权限范围。
-
DataGrid 表头使用 Subject/View 业务标签,不暴露 metadata.
*
、snake_case、内部 ID 等技术路径。空状态只能有一个可见来源。
### 5.6 Modal、表单、KPI
-
普通详情/编辑使用 HeroUI 4xl Modal,字段按当前 View 配置顺序单列纵向排列;保存/取消/删除层级与基准一致,主操作在最右。
-
删除使用 HeroUI AlertDialog;成功反馈使用浮动 Toast,错误/警告才使用上下文 Alert。Modal 内不得使用默认纯白背景或页面私有圆角。
-
数字指标使用 HeroUI Pro KPI compound API,禁止 Card 手写 KPI 数字卡;保留真实业务数据,不制造测试数字。
-
选择框在同一弹窗内统一铺满内容宽度,不允许半列短框和整行长框混排。受控多选 Autocomplete 的 selection key 统一 String(value ?? ''),外层只提交一次真实变化,all 分支返回 option.id。
### 5.7 ECharts
-
所有图表只使用 echarts + echarts-for-react + 共享 XinyuanEChart;HeroUI Pro 只负责外围 Card、布局和 KPI。
-
图表颜色使用主题中的 16 个鲜艳且稳定的 --xinyuan-chart-
*
Token,和 UI danger/success/warning 分离;严谨业务界面不使用粉色/玫红危险色,红系使用鑫元红。
-
共享适配器统一负责轴、网格、图例、ARIA、resize、globalout、HTML Tooltip、appendToBody、confine 和主题字体;页面只提供真实业务数据与 option。
-
饼图/环图外部标签必须使用 ECharts 原生 label/labelLine,标签显示“分类名称 / 真实数量”两行,引导线短而完整,标签锚定到对应引导线终点,不得错位或拉到卡片边缘。
-
同一可见业务区域的同类图表在 1280px 以上成 1fr / 1fr,单图跨满;移动端单列。折线必须对准其业务文案,主文案明显、辅助文案弱化,线条长度适中。
## 6. 五项跨应用功能(只对六个完整应用实施)
### 功能 1:Grid shortTitle
settings.shortTitle === true 只隐藏当前 Grid View 的 title 展示列;不得删除 title 数据,不得改变查询、排序、筛选、详情、权限或保存协议。原 title 入口迁移到合适的业务名称列或操作列,不得丢失。
### 功能 2:Detail shortTitle
当前激活 Detail View 的 settings.shortTitle === true 时隐藏弹窗记录标题和 title 字段,但保留功能标题和 Modal 可访问名称。切换 Detail 立即跟随配置。
### 功能 3:视图与字段权限
-
Grid settings.viewAuth 只控制 Tab 可见性;settings.auth 控制字段编辑;disableColumns 对所有用户始终只读。
-
权限只读取 user.applications
[]
中目标应用自身项的 groups/roles/permissions。系统管理员、系统账号和目标应用自身“管理”角色可按基准旁路;普通用户缺少配置时默认拒绝。
-
无可访问 Grid View 时不建立兜底视图、不查询数据、不显示新增/批量/行操作;只有一个可访问视图时隐藏 Tabs 轨道。
-
打开详情时传入当前 Grid 完整配置作为 authorizationView,并通过完整 Detail 配置接口获取权限。Detail 有有效 auth 或 disableColumns 时整套优先;两项都未配置或无实际 Detail 时整体回退 Grid,禁止合并和逐字段回退。
### 功能 4:消息通知(所有鑫元应用)
-
使用平台原通知接口和问题整改同等行为,新增独立 /notifications 页面:消息/待办、全部/未读、搜索、分页、单条已读、全部已读、动态 actions 和关联流程跳转。
-
Navbar 使用 Badge.Anchor + Badge + Button + Tooltip,36px Bell;未读 0 隐藏,1–99 真实显示,100+ 显示 99+。Sidebar 不加通知入口。
-
保留目标应用 basePath。站内链接先去除自身 basePath 交给 Umi;外部链接使用新窗口;通知正文按纯文本渲染,不执行 HTML。
### 功能 5:文件与审计材料中心(只对六个完整应用)
-
适用 editable file 字段按运行时 multiple 提供“材料中心 / 本地上传”两个来源,选择材料使用 HeroUI Autocomplete,上传使用 HeroUI Pro DropZone。
-
材料中心查询 am_material 最近 20 条,支持标题和文件名远程搜索。选中后只保存 {name,type,size,url} 快照,不保存材料 ID。
-
本地文件先调用 /upload 进入详情草稿;只有详情保存时才逐文件创建 am_material,全部成功后再更新业务记录。取消编辑不建档;失败保留草稿和已建档标记,重试不得重复建档。
-
单值替换、多值追加并按 URL 去重;清空业务附件不得删除材料中心主档。source_app 和应用授权名称必须使用目标应用真实配置。
## 7. 业务保护
只修改 UI、交互表现、前端组件结构和上述明确授权的五项功能。严禁改变:API 地址、HTTP 方法、参数名、字段结构、路由 base、权限原规则、校验、分页口径、请求时机、保存回调、登录退出、数据结构和业务状态流。不要制造测试数字、伪造附件或用 fixture 替代真实接口。
## 8. 浏览器验收(必须真实执行)
使用 $playwright-cli 启动目标应用,在相同视口逐项对照审计项目管理和问题整改:
-
1440x900、1280x720、768x1024、390x844;浅色内容与固定深色 Sidebar。
-
登录、真实验证码、退出、Sidebar 展开/真 offcanvas、Navbar、应用切换 Modal、通栏搜索、应用卡片和外链。
-
所有下拉/Autocomplete/DatePicker/Disclosure/Tabs 打开态、键盘 Enter/Space、focus、禁用和空/加载/错误态。
-
DataGrid 真实行:长文案、排序、选择/全选、固定列、横向滚动、ActionBar、空状态、20/50/100 页容量、Pagination 和操作列。
-
详情/编辑/删除 Modal:页面背景色、24px 圆角、Header/Tabs 固定、Body 独立滚动、字段顺序、取消回滚、主按钮最右。
-
KPI 和所有 ECharts:canvas 非空、折线/标签对齐、真实 Tooltip 不遮挡内容、resize/globalout 清理和控制台。
-
六个完整应用额外验证 shortTitle true/false、管理员/管理角色/普通用户/无权限、单值/多值文件、材料选择、本地上传、取消、失败重试。
-
所有应用验证通知未读 0/1/99/100、已读、全部已读、动态 actions、站内/外跳转和移动端 Navbar 对齐。
推荐命令:
~~~
playwright-cli open <目标应用地址>
playwright-cli resize 1440 900
playwright-cli snapshot --boxes
playwright-cli console
playwright-cli screenshot --hires
~~~
不得以“看起来差不多”或只看构建结果代替浏览器验收;控制台不得有 React Aria Context、受控/非受控切换、重复 key、字体抖动或资源错误。
## 9. 完成前扫描与报告
完成前必须执行并记录结果:
~~~
npm run build
git diff --check
bash /Users/liuchenlong/.codex/skills/xinyuan-design-system/scripts/audit_project.sh "$(git rev-parse --show-toplevel)"
rg -n "catalyst-ui-kit|@headlessui/react|Heroicons|<select|type=['\"]date|type=['\"]datetime-local|type=['\"]file|recharts|@heroui-pro/react/(area-chart|bar-chart|line-chart|pie-chart|composed-chart)|file:|/Users/" src package.json pnpm-lock.yaml
rg -n "rounded-(xl|2xl)|shadow-(lg|xl)|bg-(blue|sky|cyan|pink|rose)-|hover:|focus:|data-\[selected|::before|::after" src --glob '*.{js,jsx,ts,tsx,css,less,scss}'
npm ls @heroui-pro/react @heroui/react @heroui/styles react-aria-components @react-aria/utils echarts echarts-for-react
~~~
旧组件引用、跨项目依赖、本机绝对路径和页面私有视觉 CSS 必须为零;ECharts 依赖和共享适配器必须可追溯;HeroUI Pro 子路径必须通过;任何失败都不得报告“迁移完成”。
最终报告必须列出:目标应用名称/basePath/稳定标识、所属白名单范围、完成的功能、未完成项及原因、审计发现、业务保护结果、依赖和扫描结果、四视口浅/深色浏览器验收、截图/控制台结果、构建结果和最新访问地址。除非用户明确要求,不自动提交、推送或合并。
---
本提示词的所有“当前实现”以目标仓库实际代码和文档为准;如果代码与本提示词冲突,先暂停并报告差异,不得自行选择较方便的实现。
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment