/** * 填报面 API(用户面,CAS 会话):resolve / submit / my-list / upload。 * * 沿 P49 写法:alovaInstance.Get(url, {params}) / Post(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 = { code }; if (appCode) params.appCode = appCode; return alovaInstance.Get("/api/form/resolve", { params }).send(); } /** 提交答卷(契约 §5) */ export function submitAnswer(body: SubmitRequest) { return alovaInstance.Post("/api/form/submit", body).send(); } /** 我的答卷列表(按 submitter 过滤,"我的提交"段) */ export function listMyAnswers(formCode: string, appCode?: string) { const params: Record = { formCode }; if (appCode) params.appCode = appCode; return alovaInstance.Get("/api/form/my/list", { params }).send(); } /** 软删我的答卷(确认对话框后调用) */ export function deleteMyAnswer(answerId: string) { return alovaInstance.Post("/api/form/my/delete", { answerId }).send(); } /** 编辑我的答卷(按钉住 version 校验) */ export function editMyAnswer(answerId: string, values: Record, summary?: string) { return alovaInstance.Post("/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("/api/form/my/submit-list").send(); } /** 关于我的(subject=会话用户,含管理员代填的那几条——V18 的另一半) */ export function listAnswersAboutMe() { return alovaInstance.Get("/api/form/my/about-list").send(); } /** 我的答卷详情(钉住版本的 groups + 值文档,与数据管理面同一个 AnswerDetail 形状) */ export function getMyAnswerDetail(answerId: string) { return alovaInstance.Get("/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 = {}; if (appCode) params.appCode = appCode; return alovaInstance.Get("/api/form/my/fillable", { params }).send(); }