feat(签署): 保存并还原患者勾选结果

签署完成时将患者勾选的条目固化到任务记录,重新打开已签署文书时还原勾选状态,重新发起签署则清空历史勾选。
This commit is contained in:
yelan
2026-09-14 15:36:19 +08:00
parent d34ef0a0ce
commit c7da24cef6
6 changed files with 93 additions and 9 deletions
@@ -80,6 +80,8 @@ const page = ref(1)
const pageSize = ref(20)
const selectedTaskId = ref<string | null>(null)
const selectedTask = ref<SigningTaskRecord | null>(null)
/** 当前任务里患者已勾选的条目,签署完成时随签名一起固化到任务上 */
const signingSelection = ref<string[]>([])
const taskEvents = ref<SigningTaskEvent[]>([])
const artifacts = ref<SigningArtifact[]>([])
const templates = ref<SigningTemplate[]>([])
@@ -213,6 +215,9 @@ async function loadOrganizationOptions() {
async function loadTaskDetail(id: string | null) {
const requestId = ++detailRequestId
// 换任务时先清空勾选,避免把上一个任务的勾选带到新任务上;
// 文书组件挂载后会用任务自身的勾选重新上报
signingSelection.value = []
if (!id) {
selectedTask.value = null
@@ -339,6 +344,10 @@ function selectTask(id: string) {
void loadTaskDetail(id)
}
function handleSelectionChange(items: string[]) {
signingSelection.value = items
}
function handlePageChange(nextPage: number) {
const pageCount = Math.max(Math.ceil(total.value / pageSize.value), 1)
@@ -504,7 +513,10 @@ async function confirmPadSignature(signatureDataUrl: string) {
}
try {
await refreshTask(await completeSigningTask(task.id, signatureDataUrl), '手写签署已完成')
await refreshTask(
await completeSigningTask(task.id, signatureDataUrl, signingSelection.value),
'手写签署已完成',
)
signatureDialogVisible.value = false
} catch {
ElMessage.error('手写签署失败,请稍后重试')
@@ -519,7 +531,10 @@ async function completeOnlineSignature(signatureDataUrl: string) {
}
try {
await refreshTask(await completeSigningTask(task.id, signatureDataUrl), '线上签署已完成')
await refreshTask(
await completeSigningTask(task.id, signatureDataUrl, signingSelection.value),
'线上签署已完成',
)
onlineDialogVisible.value = false
} catch {
ElMessage.error('线上签署失败,请稍后重试')
@@ -639,6 +654,7 @@ onMounted(() => {
:pad-session-loading="padSessionLoading"
@action="handleTaskAction"
@download-artifact="downloadArtifact"
@selection-change="handleSelectionChange"
/>
</div>