搜索 K
Appearance
Appearance
前端只认 src/types/protocol.ts 里的一组接口——它们是前后端的契约。本篇逐字段给出「这个协议字段被前端的哪一层、怎么消费」,并诚实列出已声明但前端尚未消费/实现的字段,避免你照着协议写了后端却发现前端没生效。
协议由后端生产(见数据建模 · 设计、应用架构 · 设计),前端是唯一消费方。
| 字段 | 消费方 | 怎么用 |
|---|---|---|
Result<T>.success / code / message | http.ts 响应拦截器 | success=false 集中弹错;code 命中 40100/40101 清 token |
Result<T>.data | request<T> | 解包成业务 T 返回 |
LoginResult.token | auth store | 写 localStorage,请求拦截器加 Bearer |
LoginResult.user / LoginUser.* | auth store | 存内存,顶栏展示 |
| 字段 | 消费方 | 怎么用 |
|---|---|---|
ModuleView.code / name | app store / 导航 | 模块编码与显示名 |
MenuNode.code | 路由 / 缓存键 | 作 :menu 参数、pageCache 键 |
MenuNode.label / icon | 导航 | 菜单文案与图标 |
MenuNode.model | firstLeaf / 列表页 | 有 model 才是可落地的叶子;无则为分组 |
MenuNode.viewType | (间接) | 视图类型(与页面 schema 呼应) |
MenuNode.children | 递归树工具 | 构建菜单树、面包屑、命令面板 |
MenuNode.modelPath / path / seq | — | 未见前端消费(见下「未消费清单」) |
FieldSchema 是字段渲染的全部依据,被渲染引擎与 Meta* 组件密集消费:
| 字段 | 消费方 | 怎么用 |
|---|---|---|
field | 引擎 / 各处 | 字段名;注册表 field 维度、dataIndex、表单项 name |
label | 各处 | 列标题、表单 label、占位文案 |
component | 引擎 | 选组件首要依据(select→下拉…) |
dataType | 引擎 | 选组件次要依据、对齐方式 |
operator | buildQueryRequest | 搜索值转 FilterClause 的操作符 |
required | MetaForm | 生成必填校验规则 |
readonly | 输入组件 | 禁用录入 |
list | MetaTable | columns 为空时,取 list=true 作列 |
form | MetaForm | 取 form=true 作表单项 |
detail | MetaDetail | (分区字段来源) |
search | MetaSearch | 高级搜索字段来源 |
sortable | MetaTable | 列是否可排序 |
primaryKey | idFieldOf | 前端取主键全靠它(缺省 id) |
length | TextInput / 校验 | maxlength 与长度规则 |
help | 表单项 | 字段说明 |
width | MetaTable | 列宽(缺省按 component 推) |
placeholder | 输入组件 | 占位 |
options | SelectInput / TagCell | 下拉选项、tag 文案与配色 |
order | — | 未见前端消费(列序取 columns/fields 数组序) |
| 字段 | 消费方 | 怎么用 |
|---|---|---|
menuCode | 缓存键 | pageCache 键、schema 请求参数 |
model | 数据层 | queryPage/getById/create… 的模型;toModelPath 现算路径 |
viewType | (页面注册表) | 整页替换维度(当前未接线) |
title | 页头 | 页面标题 |
instanceName | ResourceDetailView | 详情标题优先取该字段值 |
tabField | ResourceListView | 页签切换时的等值过滤字段 |
keywordPlaceholder | MetaSearch | 关键词框占位 |
fields | 各处 | 全字段渲染字典,fieldMapOf 建索引 |
tabs | StatusTabs | 状态页签 |
keywordFields | MetaSearch | 有则显示关键词框 |
searchItems | MetaSearch | 高级搜索项 |
columns | MetaTable | 列字段名顺序(空则取 list=true) |
formGroups | MetaForm | 表单分组(空则单组) |
detailSections | MetaDetail | 详情分区 |
actions | 列表/表单 | 工具栏/行/批量动作、提交端点反查 |
modelPath | — | 未见前端消费(前端用 model 现算路径) |
formMode | — | 已声明未实现(steps 分步未做) |
| 字段 | 消费方 | 怎么用 |
|---|---|---|
key / label | 各处 | 动作标识与按钮文案 |
builtin | 分发 / 渲染 | 内置三动作(create/edit/detail/delete/export)特殊处理 |
behavior | behaviorOf | 分发到 ROUTE/DRAWER/DOWNLOAD/API |
endpoint | callByEndpoint | 自定义动作与提交的请求地址 |
target / target.kind | onNavigate | ROUTE 时拼路由(NEW/EDIT/DETAIL/MENU/PATH) |
target.menuCode / path | onNavigate | 跳目标菜单 / 自定义路由 |
when | evalWhen | 行动作可见性(仅支持单条件 field == 'value') |
confirm / danger | MetaTable | 二次确认、危险样式 |
permission | — | 已声明未实现(前端无权限门控) |
下面这些字段后端可以下发,但前端目前不会据此改变行为。照协议写后端前请留意:
| 协议字段 | 状态 | 前端实际行为 / 补齐方向 |
|---|---|---|
PageSchema.modelPath / ViewSchema.modelPath / MenuNode.modelPath | 未消费 | 前端用 model 经 toModelPath 现算路径;如需消费需改 data.ts |
FieldSchema.order | 未消费 | 列序取 columns(或 fields 数组序);如需 order 排序需在 MetaTable/MetaForm 排序 |
PageSchema.formMode(steps) | 未实现 | MetaForm 仅按 formGroups 顺序平铺;分步向导待实现 |
FormGroupSchema.step | 未实现 | 同上,分步标记未转成 stepper |
DetailSectionSchema.tab | 未实现 | MetaDetail 分区顺序平铺,未做 tab 切换 |
ActionSchema.permission | 未实现 | 无权限门控;动作按 schema 全量渲染 |
ViewSchema(整体) | 仅调试 | 仅 fetchViewSchema 调试用,不参与页面渲染;idField/codeField/instanceNameField 未在渲染消费 |
整页替换 selectPageWidget | 机制就绪未接线 | pageRegistry 已实现,但无视图调用,详见渲染引擎 |
这张表是「契约的诚实边界」
元数据驱动最怕「协议写了、两端理解不一致」。这张清单明确划出前端当前的消费边界:表 C/D/E 里有消费方的字段是可用的;本表里的字段要么前端自己算、要么还没接。补齐它们多数只是局部改动,但在补齐前不要假设它们生效。