# 用户工作台快捷入口（user_workbench_shortcut）

与控制台首页 `screenconsole` 中「快捷入口」区域对接的后端为：

- 基路径：`/api/system/user_workbench_shortcut/`
- **列表（当前用户、按 `sort`、`id` 升序）**：`GET` 无路径参数
- **新增**：`POST`（与当前用户、租户自动绑定，不可代他人建）
- **单条/更新/删除**：`GET|PUT|PATCH|DELETE` `/api/system/user_workbench_shortcut/{id}/`

## 前端约定

1. 列表响应体可能被包在 `data` 中，为 **数组** 或 **分页** `{ results: [] }`；解析见 `userWorkbenchShortcutApi.ts` 中 `unwrapShortcutListData`。
2. 每条记录需能解析出**与侧栏一致的路由 `path`（`web_path` / `link` / `url` 等别名字段由适配层读取，绝对 URL 会取 pathname 再与菜单 id 匹配）**、**槽位 `sort`（0～4 或 1～5）**、**是否「常用」/ 橙色高亮**（与 `index.vue` 里「标记为常用」单选、即 `highlightIndex` 一致：写入时 `is_frequent` 与 `is_active` 在**同一条**上为 `true`，其余槽为 `false`；**读列表**时在 `getFrequentFromRow` 中把 `is_frequent`、`is_active` 等一并当作「是否常用」判断；若你方将 `is_active` 仅用于**启用/未删除**且五条**均为** `true`，则不要用该字段表示常用，从 `getFrequentFromRow` 的键列表中去掉 `is_active`，仅在写入时删除 `is_active` 或恒传 `true`，按你方实际含义改 `quickEntryServerAdapter.ts`），以及**展示用名称**、**`link`**、**`icon`**（见 `resolveShortcutDisplayName` / `resolveShortcutLink` / `resolveShortcutIcon`）。
3. 具体字段名以你们序列化器为准；若与约定不一致，只改 `quickEntryServerAdapter.ts` 中的 `WORKBENCH_SHORTCUT_WRITE` 与 `getShortcutPathFromRow` / `getShortcutNameFromRow` / `getShortcutIconFromRow` 的读取逻辑，勿在多个页面里硬编码。
4. 保存时：有 `id` 的槽位用 `PATCH` 同一路径，无 `id` 的用 `POST`；不主动批量删除，除非后续产品要求「以服务端为唯一全量集」并单独实现同步删除策略。

## 降级

- `GET` 无数据、解析失败或请求异常时，仍使用原逻辑：按本地缓存 `screenconsole_quick_entry_v2` 与侧栏可访问菜单的默认/填充规则生成五项。
