12.7 前端编码规范
概述
前端规范汇总:三件套对齐、组件使用、权限、状态管理、类型与样式。配套工具链:ESLint + Prettier + Stylelint + vue-tsc + commitlint。
三件套与契约(最高优先级)
text
□ api url 对齐 gmeta path(无 /api 前缀重复、无 /v1)
□ querySchemas field ↔ PageReq json ↔ LikeFields/EqFields(三件同步)
□ columns prop ↔ Item/DetailRes json
□ edit 表单 ↔ AddReq/UpdateReq(全量提交语义)
□ 按钮 v-permission ↔ gmeta permission(复制粘贴防拼错)
□ 枚举列展示 {field}Text(不硬编码文案)
□ 登录读 data.access_token(下划线)组件使用
text
□ 列表用 Page 容器 + Table(columns 配置) + pagination
□ 复杂列用 render 函数(h + Element Plus 组件)
□ 筛选用 querySchemas 配置(勿手写搜索区)
□ 下拉选项优先字典驱动(getDictItemList)
□ 上传用 Upload 组件(持 URL,后端转正)
□ 图片展示用后端已补域名字段(GetFileUrl)
□ 弹窗用 Modal 封装;确认删除用 ElMessageBox状态与逻辑
text
□ 状态走 Pinia store(token/用户/路由/标签页);勿全局变量
□ 本地存储统一 storage 封装 + mutation-types 常量
□ HTTP 统一 http.request(勿绕过封装裸 axios)
□ 公共逻辑抽 hooks/;工具函数进 utils/
□ 类型:接口出入参定义类型;跑通 pnpm type:check样式
text
□ scoped 样式;颜色用 Element CSS 变量(随主题)
□ 布局用栅格组件;少 deep 覆盖
□ 样式改动过 stylelint质量门禁
sh
pnpm type:check # vue-tsc
pnpm lint:eslint # ESLint
pnpm lint:prettier # 格式化
pnpm lint:stylelint # 样式
pnpm build # 构建验证反例速查
text
❌ 直接 axios.get('/api/user/page') 绕封装 + url 重复 /api
❌ options: [{label:'正常',value:1}] 硬编码 应字典驱动
❌ status 直接展示(显示 1/2) 应展示 statusText
❌ 按钮无 v-permission 权限裸奔(UX 层缺失)
❌ 每次请求重新登录拿 token 用 refresh 轮换
❌ 组件内大量业务逻辑 抽 hooks/store
❌ 直接 localStorage.setItem('token') 统一 storage + 常量
❌ 页面硬编码颜色 #1890ff 用 var(--el-color-primary)
❌ 布尔/枚举用魔法数字散落 用 enums 常量Review 检查项
text
□ 新页面走三件套结构(index/edit/detail/columns/querySchemas)
□ 接口函数 JSDoc 注释(生成器同款风格)
□ 列表空态/加载态/错误态处理
□ 表单校验(前端提示 + 对齐后端 v 标签)
□ 删除/危险操作二次确认
□ 权限变更后按钮正确显隐(超管/普通角色双测)
□ type:check 与 build 通过