feat(签署): 文书作废状态展示作废章与文案

This commit is contained in:
yelan
2026-09-16 17:00:53 +08:00
parent ecac2bc899
commit 4556515c17
@@ -61,6 +61,19 @@ const processedHtml = computed(() =>
/** 文书里的填写项数量(含只读展示),用于提示"这份文书有几个填写项" */ /** 文书里的填写项数量(含只读展示),用于提示"这份文书有几个填写项" */
const fieldTotal = computed(() => progress.value.total) const fieldTotal = computed(() => progress.value.total)
/** 签名/状态文案:作废要单独说清楚,不能被当成"待患者签署" */
const signatureStateLabel = computed(() => {
if (props.task.status === 'void') {
return '已作废'
}
if (props.task.signatureDataUrl) {
return '已采集签名'
}
return props.task.status === 'signed' ? '已签署' : '待患者签署'
})
/** /**
* 从渲染后的 DOM 读回填写项取值。 * 从渲染后的 DOM 读回填写项取值。
* 生成 HTML 时已把取值写成 attribute,这里再按取值同步一次 DOM 状态, * 生成 HTML 时已把取值写成 attribute,这里再按取值同步一次 DOM 状态,
@@ -156,14 +169,14 @@ onMounted(() => {
<template> <template>
<article class="sign-doc"> <article class="sign-doc">
<div class="sign-doc-banner"> <div class="sign-doc-banner">
<span>已按任务固化的文书版本渲染(填写项已按患者信息预填,签名落在文书签名位)</span> <span>已按任务固化的文书版本渲染(填写项已按患者信息预填)</span>
<span class="sign-doc-state"> <span class="sign-doc-state" :class="{ 'is-void': task.status === 'void' }">
{{ {{ signatureStateLabel }}
task.signatureDataUrl ? '已采集签名' : task.status === 'signed' ? '已签署' : '待患者签署'
}}
</span> </span>
</div> </div>
<div v-if="task.status === 'void'" class="void-stamp">已 作 废</div>
<!-- eslint-disable vue/no-v-html -- 内容为本系统定稿的文书 HTML(编辑器产出、仅医务人员可改),非任意用户输入 --> <!-- eslint-disable vue/no-v-html -- 内容为本系统定稿的文书 HTML(编辑器产出、仅医务人员可改),非任意用户输入 -->
<div <div
ref="containerRef" ref="containerRef"
@@ -198,6 +211,7 @@ onMounted(() => {
<style scoped> <style scoped>
.sign-doc { .sign-doc {
position: relative;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-height: 480px; min-height: 480px;
@@ -207,6 +221,22 @@ onMounted(() => {
overflow: hidden; overflow: hidden;
} }
/* 作废章压在文书上,位置与存量回退纸样(SigningDocumentPreview)保持一致 */
.void-stamp {
position: absolute;
top: 52px;
right: 32px;
padding: 4px 12px;
color: rgb(208 83 79 / 70%);
font-size: 20px;
font-weight: 700;
letter-spacing: 4px;
pointer-events: none;
border: 2.5px solid rgb(208 83 79 / 55%);
border-radius: 8px;
transform: rotate(-14deg);
}
.sign-doc-banner { .sign-doc-banner {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@@ -227,6 +257,10 @@ onMounted(() => {
border-radius: 10px; border-radius: 10px;
} }
.sign-doc-state.is-void {
background: #8a9aa3;
}
.sign-doc-body { .sign-doc-body {
flex: 1; flex: 1;
padding: 26px 32px 30px; padding: 26px 32px 30px;