Files
form-center-front/src/api/module/fill.ts
T
chenxing 48e46e367b
build / build (push) Successful in 1m47s
feat(p95-fill): 可填写换源后端接口,快应用导航壳按身份写死,/f/ 模块行消费退役
任务书 P95 W4/W5/W6。填报入口收回中心后,前端不再从应用模块树里挑 /f/{code} 行算清单。

- My.vue「可填写」:数据源 store.modules → GET /api/form/my/fillable,只画 canFill=true;
  空态文案改「表单发布后按面向人群自动出现在这里」,不再引导去 UserBase 配模块行
- AppContext.vue 整页改版:清单吃 fillable?appCode=,三档按 myTier 渲染
  (填报恒显 + 单表单直落保留 / 数据管理 MANAGE∪ADMIN / 统计 ADMIN);
  GetUserMod?appCode 仍拉一次,唯一用途=交给内嵌 Data.vue 判导出锚点(P76 机制原样),
  空树整页告警与「树里没有 /f/ 行」分支退役——取树失败只等于不画导出按钮(fail-closed)
- fillLink 新增 fillRouteOf(与 buildFillLink 同一条 appCode 规则,点进去与分享出去同址);
  modulePerms 删 fillCodesOfModules(唯一消费者已退役),canExport/anchorRows/hasPage 保留勿伤;
  menuRoute 的 /f/ 解析与门户导航未动(分享链接、P87 探针照旧)
- mock:快应用树改四行终态(删填报行),新增 /api/form/my/fillable 桩覆盖 FILL/MANAGE/ADMIN
- vue-tsc --noEmit 与 vite build 双绿;p87 探针由当前源码重打包后 15/15 复跑绿
2026-10-16 12:44:42 +08:00

69 lines
3.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 填报面 API(用户面,CAS 会话):resolve / submit / my-list / upload。
*
* 沿 P49 写法:alovaInstance.Get<T>(url, {params}) / Post<T>(url, body, {params})。
* 与后端 FormResolveController / FormAnswerController 对齐。
*/
import { alovaInstance } from "@/utils/alova/alova-iview";
import type { ResolvedForm, SubmitRequest, SubmitView, MyAnswerItem } from "@/types/answer";
import type { AnswerDetail, FillableForm, MyAnswerViewItem } from "@/types/data";
/** 解析当前发布版本(契约 §1:入口寻址) */
export function resolveForm(code: string, appCode?: string) {
const params: Record<string, string> = { code };
if (appCode) params.appCode = appCode;
return alovaInstance.Get<ResolvedForm>("/api/form/resolve", { params }).send();
}
/** 提交答卷(契约 §5) */
export function submitAnswer(body: SubmitRequest) {
return alovaInstance.Post<SubmitView>("/api/form/submit", body).send();
}
/** 我的答卷列表(按 submitter 过滤,"我的提交"段) */
export function listMyAnswers(formCode: string, appCode?: string) {
const params: Record<string, string> = { formCode };
if (appCode) params.appCode = appCode;
return alovaInstance.Get<MyAnswerItem[]>("/api/form/my/list", { params }).send();
}
/** 软删我的答卷(确认对话框后调用) */
export function deleteMyAnswer(answerId: string) {
return alovaInstance.Post<void>("/api/form/my/delete", { answerId }).send();
}
/** 编辑我的答卷(按钉住 version 校验) */
export function editMyAnswer(answerId: string, values: Record<string, any>, summary?: string) {
return alovaInstance.Post<SubmitView>("/api/form/my/edit", { answerId, values, summary }).send();
}
// ==================== 我的填写两视图(T8,/my/submit 与 /my/about) ====================
// 两个视图 = 两个端点、两个谓词,不是一个端点加 view 参数(方案 §6.3"鉴权分支容易写漏")。
// 页面侧按路由分派,不做 query 参数分支;身份一律会话推导(V17),这里不传 userId。
/** 我提交的(submitter=会话用户,跨表单、不带值文档) */
export function listMySubmitted() {
return alovaInstance.Get<MyAnswerViewItem[]>("/api/form/my/submit-list").send();
}
/** 关于我的(subject=会话用户,含管理员代填的那几条——V18 的另一半) */
export function listAnswersAboutMe() {
return alovaInstance.Get<MyAnswerViewItem[]>("/api/form/my/about-list").send();
}
/** 我的答卷详情(钉住版本的 groups + 值文档,与数据管理面同一个 AnswerDetail 形状) */
export function getMyAnswerDetail(answerId: string) {
return alovaInstance.Get<AnswerDetail>("/api/form/my/detail", { params: { answerId } }).send();
}
// ==================== 可填写列表(P95 W3/W4,/my/fillable) ====================
// 数据源=后端按 P95 三层模型解析的**填报入口**清单,不再是会话菜单树里挑 /f/ 行(P91 的形态)。
// appCode 可选:缺省=全部应用(中心 + 快应用),快应用上下文传自身 appCode 收窄。
/** 我可填的表单(入口层非 NONE 的都下发;本人能不能填看 canFill) */
export function listFillableForms(appCode?: string) {
const params: Record<string, string> = {};
if (appCode) params.appCode = appCode;
return alovaInstance.Get<FillableForm[]>("/api/form/my/fillable", { params }).send();
}