基线:鉴权会话+工作组+工作台三区修复+编排工作区+产品设计文档

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
2026-07-27 20:43:35 +08:00
co-authored by Claude Fable 5
parent 61fe181678
commit ac85ecf2ea
119 changed files with 16634 additions and 1246 deletions
+26 -1
View File
@@ -73,6 +73,11 @@ export type FormField = z.infer<typeof formFieldSchema>;
/* ── 视图块:视图区的结构化呈现(活动推送,只读) ────────────────────── */
const fileDocSchema = z.discriminatedUnion('kind', [
/**
* HTML 汇报报告 —— 成果文件的**主要形态**:活动按当下局面组织的一屏。
* 渲染一律经 `@ui` 的 `ViewContainer` 沙箱,无脚本执行权(AM 07)。
*/
z.object({ kind: z.literal('html'), name: z.string(), html: z.string() }),
z.object({ kind: z.literal('markdown'), name: z.string(), md: z.string() }),
z.object({
kind: z.literal('excel'),
@@ -243,11 +248,31 @@ export const WORK_ORDER_MODE_LABEL: Readonly<Record<WorkOrderMode, string>> = {
acceptance: '验收',
};
/**
* 办结口径:执行件只有「已提交」,验收件是放行三选一 —— 与回传协议同一套标识符。
* 界面文案由字典给出(与原型逐字一致),不在组件里散落中文。
*/
export const WORK_ORDER_RESULTS = ['submitted', 'pass', 'redo', 'revise'] as const;
export const workOrderResultSchema = z.enum(WORK_ORDER_RESULTS);
export type WorkOrderResult = z.infer<typeof workOrderResultSchema>;
export const WORK_ORDER_RESULT_LABEL: Readonly<Record<WorkOrderResult, string>> = {
submitted: '已提交',
pass: '验收通过',
redo: '驳回重做',
revise: '驳回迭代',
};
/** 驳回两式 —— 退回即重来,判定处只此一处 */
export function isRejection(result: WorkOrderResult): boolean {
return result === 'redo' || result === 'revise';
}
/** 完成回传:谁、何时、答了什么(回传即留痕) */
export const workDoneSchema = z.object({
at: z.iso.datetime(),
by: staffIdSchema,
result: z.string(),
result: workOrderResultSchema,
values: z.record(z.string(), z.string()).optional(),
});
export type WorkDone = z.infer<typeof workDoneSchema>;