diff --git a/src/api/module/apps.ts b/src/api/module/apps.ts new file mode 100644 index 0000000..6dbea27 --- /dev/null +++ b/src/api/module/apps.ts @@ -0,0 +1,36 @@ +/** + * 快应用注册表 CRUD(契约 v2 C17/§5.2,T16,挂应用设置 · 快应用 tab)。 + * + * 三处与直觉不同: + * 1. **寻址按 `appCode`,不是库内 id**(V5:自增 id 绝不外露)——所以改名/删除的 URL 段是 slug 本身; + * 2. **`schId` 只有超管切目标域时才带**,校管理员传别的值即被 `FormAdminGuard` 拒(同两表端点口径); + * 3. **入口链接由后端生成**(`entryUrl` 是站内路径,按后端自己的 context-path 组段), + * 前端只补 `origin`——生产得到 `/form-center/front/#/app/{code}/`,本地 dev 没有 context 段, + * 得到 `/#/app/{code}/`,两处复制出来的链接都能直接点开。 + */ +import { alovaInstance } from "@/utils/alova/alova-iview"; +import type { AppRow } from "@/types/data"; + +const BASE = "/api/form/admin/apps"; + +/** 清单:本校 ∪ 平台级(软删行不在内) */ +export function listApps(schId?: number) { + const params: Record = {}; + if (schId !== undefined && schId !== null) params.schId = schId; + return alovaInstance.Get(BASE, { params }).send(); +} + +/** 建(app_code + name;无审核,D14) */ +export function createApp(body: { appCode: string; name: string }) { + return alovaInstance.Post(BASE, body).send(); +} + +/** 改名——code 不随改(它是入口链接与 oapi/MQ 的域段) */ +export function renameApp(appCode: string, name: string) { + return alovaInstance.Put(`${BASE}/${encodeURIComponent(appCode)}`, { name }).send(); +} + +/** 软删(名下有未删除表单时后端按 CUSTOM(5) 拒,msg 指点先迁先删) */ +export function deleteApp(appCode: string) { + return alovaInstance.Delete(`${BASE}/${encodeURIComponent(appCode)}`).send(); +} diff --git a/src/types/data.ts b/src/types/data.ts index 9b6a6f7..2ba267e 100644 --- a/src/types/data.ts +++ b/src/types/data.ts @@ -171,6 +171,22 @@ export interface Capabilities { schoolAdmin: boolean; } +/** + * 快应用注册行(契约 v2 C17/§5.2,`GET /api/form/admin/apps`,T16)。 + * + * 四个业务字段 + 中心生成的入口链接;**没有角色/授权列**(V59 红线:谁能用哪个应用一律由 + * 会话在该应用表单上的 ALL/SELF 档现算,注册表不存授权痕迹)。 + */ +export interface AppRow { + /** 全局唯一人读 slug(C10 格式;保留字 form-center 不可注册),发布后不随改 */ + appCode: string; + name: string; + /** 归属租户域;0=平台级(仅超管可建) */ + schId: number; + /** 应用入口链接(站内路径,§5.2"由中心生成")——复制后贴去 UserBase 建应用 */ + entryUrl: string; +} + /** 范围名 → 展示文案;未知名原样显示(后端加枚举值不破坏前端) */ export function scopeLabel(name: string): string { return DATA_SCOPE_LABELS[name] ?? name; diff --git a/src/views/admin/AppSettings.vue b/src/views/admin/AppSettings.vue index fff378b..7cbefd9 100644 --- a/src/views/admin/AppSettings.vue +++ b/src/views/admin/AppSettings.vue @@ -1,28 +1,36 @@ + + + +