feat(签署): 支持文书填写项与签名回显
This commit is contained in:
@@ -23,6 +23,7 @@ import type {
|
||||
SignTaskEventResponseDto,
|
||||
SignTaskResponseDto,
|
||||
SignTaskSendPreparationResponseDto,
|
||||
SigningAnswers,
|
||||
SigningApiOptions,
|
||||
SigningMethod,
|
||||
SigningTaskEvent,
|
||||
@@ -351,6 +352,8 @@ function cloneTask(task: SigningTaskRecord): SigningTaskRecord {
|
||||
...task,
|
||||
// 勾选结果是数组,浅拷贝会让调用方和内存数据共享同一个引用
|
||||
selectedItems: task.selectedItems ? [...task.selectedItems] : task.selectedItems,
|
||||
// 填写项取值同理,调用方会就地改动它
|
||||
fieldAnswers: task.fieldAnswers ? { ...task.fieldAnswers } : task.fieldAnswers,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1008,6 +1011,7 @@ export function completeSigningTask(
|
||||
id: string,
|
||||
signatureDataUrl: string,
|
||||
selectedItems: string[] = [],
|
||||
fieldAnswers: SigningAnswers = {},
|
||||
): Promise<SigningTaskRecord | null> {
|
||||
if (!useMockData) {
|
||||
throw new Error('真实签署需要通过签署投递与文件上传接口完成')
|
||||
@@ -1025,6 +1029,8 @@ export function completeSigningTask(
|
||||
task.updatedAt = task.signedAt
|
||||
// 勾选结果随签署一起固化,否则重新打开文书会丢掉患者勾了哪些项
|
||||
task.selectedItems = [...selectedItems]
|
||||
// 填写项取值(含签名图)随签署一起固化:重新打开文书时按原位置回显
|
||||
task.fieldAnswers = { ...fieldAnswers, signature: signatureDataUrl }
|
||||
persistMockRecords()
|
||||
return Promise.resolve(cloneTask(task))
|
||||
}
|
||||
@@ -1050,8 +1056,9 @@ export async function reopenSigningTask(
|
||||
task.status = 'pending'
|
||||
task.signatureDataUrl = undefined
|
||||
task.signedAt = undefined
|
||||
// 重新发起等于重新签,上一次的勾选不再沿用
|
||||
// 重新发起等于重新签,上一次的勾选与填写项取值都不再沿用
|
||||
task.selectedItems = []
|
||||
task.fieldAnswers = undefined
|
||||
task.updatedAt = formatMockDate()
|
||||
persistMockRecords()
|
||||
return Promise.resolve(cloneTask(task))
|
||||
|
||||
@@ -167,6 +167,31 @@ export interface SigningTaskQuery extends PageQuery {
|
||||
|
||||
export type SigningDateRange = 'today' | 'yesterday' | '3d' | '7d' | 'all'
|
||||
|
||||
/**
|
||||
* 文书填写项的控件类型。
|
||||
* signature 与其他类型并列:签名是文书上的一个填写项,不是特殊的文本替换。
|
||||
*/
|
||||
export type SigningFieldKind = 'text' | 'date' | 'choice' | 'checkbox' | 'signature'
|
||||
|
||||
/** 文书里的一个填写项定义,由模板内容中的占位符解析得到。 */
|
||||
export interface SigningFieldDef {
|
||||
/** 稳定字段键:与 HIS / 患者快照取值一一对应,不随占位符显示文字变化 */
|
||||
id: string
|
||||
/** 文书中显示的文字 */
|
||||
label: string
|
||||
kind: SigningFieldKind
|
||||
required: boolean
|
||||
/** choice / checkbox 的可选项 */
|
||||
options: string[]
|
||||
/** 取值等于该字符串时视为异常项(如风险筛查选了"是") */
|
||||
risk?: string
|
||||
}
|
||||
|
||||
export type SigningFieldValue = string | boolean
|
||||
|
||||
/** 填写项取值,key 为 SigningFieldDef.id。 */
|
||||
export type SigningAnswers = Record<string, SigningFieldValue>
|
||||
|
||||
export interface SigningTaskRecord extends WorkbenchTask {
|
||||
templateVersionId: string
|
||||
campus: WorkbenchCampus
|
||||
@@ -192,6 +217,11 @@ export interface SigningTaskRecord extends WorkbenchTask {
|
||||
documentContentHtml?: string
|
||||
/** 原型:患者勾选结果,随签署一起留存(对应真实实现里随签署证据提交的勾选摘要)。 */
|
||||
selectedItems?: string[]
|
||||
/**
|
||||
* 文书填写项取值(含签名图),签署时固化。
|
||||
* 重新打开文书时用它回显,签名因此落在文书原本的签名位上。
|
||||
*/
|
||||
fieldAnswers?: SigningAnswers
|
||||
}
|
||||
|
||||
export type SigningTaskListResponse = PageResult<SigningTaskRecord>
|
||||
|
||||
Reference in New Issue
Block a user