mirror of
https://github.com/zyycn/codex-proxy-rs.git
synced 2026-11-06 16:06:08 +00:00
5.1 KiB
5.1 KiB
Frontend Optimization Plan
目标
前端优化先解决结构坏味道,再处理局部实现细节。核心目标是让页面入口保持清晰,让业务流程、表格配置、弹窗和局部展示各自有稳定位置。
这份目录是第一批目标结构,不代表一次性创建所有空文件。只有当代码真实迁移进去时,才新增对应文件,避免为了目录完整而制造空壳。
原则
- 页面出口统一使用
index.vue。 - 大页面先拆业务流程,再拆展示组件。
constants.ts只放稳定配置,例如表格列、固定选项、状态映射。composables/放页面内可复用的状态与副作用流程,例如筛选、分页、请求、批量操作。components/放页面私有展示块或弹窗,不放跨页面基础组件。- 不为了抽象而抽象。组件提取必须减少页面职责或消除真实重复。
- API 模块继续保持轻量,避免为每个接口参数声明大量类型。
- 日期时间统一使用
dayjs封装后的工具,不在页面里手写格式化。
第一批目标目录
web/src/views/accounts/
index.vue
constants.ts
composables/
useAccountConnectionTest.ts
useAccountFilters.ts
useAccountMutations.ts
useAccountsTable.ts
components/
AccountOverviewCards.vue
AccountIdentityCell.vue
AccountStatusBadge.vue
AccountCreateModal.vue
AccountEditModal.vue
AccountConnectionTestModal.vue
AccountQuotaPanel.vue
AccountQuotaSummaryCell.vue
AccountTableActions.vue
AccountUsagePanel.vue
web/src/views/api-keys/
index.vue
constants.ts
composables/
useApiKeyFilters.ts
useApiKeyMutations.ts
useApiKeysTable.ts
components/
ApiKeyFilters.vue
ApiKeyCreateModal.vue
ApiKeyIdentityCell.vue
ApiKeyPrefixCell.vue
ApiKeyStatusToggle.vue
web/src/views/logs/
index.vue
constants.ts
composables/
useLogFilters.ts
useLogDetail.ts
useLogsTable.ts
components/
LogDetailModal.vue
LogFilters.vue
LogLevelBadge.vue
LogStatusCodeBadge.vue
web/src/components/base/BaseTable/
index.vue
columns.ts
pagination.ts
落地顺序
accounts
先处理最大页面。连接测试、筛选分页、账号变更请求、表格配置分别收口。弹窗和展开内容在逻辑稳定后再拆组件,避免过早组件化。
api-keys
拆出表格列、筛选分页、创建/删除/状态/标签更新流程。弹窗组件只在页面脚本明显变轻后再迁移。
logs
事件日志先整理筛选、表格和详情弹窗。详情弹窗里的元数据滚动与展示规则需要保持当前设计系统一致。
BaseTable
最后处理基础表格。先抽列归一化和分页逻辑,再决定是否把 BaseTable.vue 迁移为目录入口 BaseTable/index.vue。基础组件变更影响面大,必须在页面侧坏味道收敛后再动。
当前进度
第一批已完成真实迁移:
accounts已拆出连接测试、筛选分页、表格状态、账号变更流程、创建/编辑/测试弹窗、额度面板和用量面板。api-keys已拆出筛选分页、表格选择、密钥变更流程、表格列配置和创建弹窗。logs已拆出筛选区、详情弹窗、日志加载/刷新/清空流程、详情状态和表格列配置。components/base/BaseTable已迁移为目录入口,列解析与分页逻辑分别收口到columns.ts和pagination.ts。utils/date.ts已落地,日期时间格式化统一走工具函数。
已完成的结构修正:
- 筛选分页 composable 显式接收
totalref,不通过闭包读取外部总数。 - 表格选择状态统一使用替换
Set的方式更新,避免依赖原地 mutation。 - 弹窗表单组件使用字段级 computed setter,避免子组件直接改父级表单对象的嵌套字段。
- 日志列表命名回到
logs,避免把后端筛选结果误导为前端二次筛选。 - 账号概览卡片、表格身份、额度摘要和行操作已拆为页面私有展示组件,让
accounts/index.vue继续收敛为页面编排层。 - 连接测试弹窗复用账号身份展示组件,不再维护第二套头像、标题和副标题展示逻辑。
- 账号状态展示已收敛为页面私有 badge 组件,表格与连接测试弹窗共享同一套状态文案和色值。
- API Key 筛选与顶部操作区已拆为页面私有组件,
api-keys/index.vue只保留状态接线和表格编排。 - API Key 名称/标签编辑和完整密钥复制已拆为页面私有单元组件,标签编辑 composable 不再接收 DOM 事件。
- API Key 启用状态切换已拆为页面私有单元组件,入口页不再直接维护状态按钮样式。
- 日志级别与状态码展示已拆为页面私有 badge 组件,列表和详情弹窗共享同一套展示规则。
- 账号表格不再保留
filteredAccounts这类无意义身份别名,页面直接使用后端返回的accounts。 - 筛选 composable 不再向页面暴露未消费的内部派生状态,保持对外 API 更小。
后续继续优化时,必须按本文件的目标目录和落地顺序推进。