forked from ChaiHao/BPOS-MVP
基线:鉴权会话+工作组+工作台三区修复+编排工作区+产品设计文档
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
@@ -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>;
|
||||
|
||||
Reference in New Issue
Block a user