fix(签署文书): 按字段分配页眉取值下划线宽度
This commit is contained in:
@@ -464,7 +464,7 @@ function buildDocumentHeader(doc: Document, answers: SigningAnswers): HTMLElemen
|
|||||||
const header = doc.createElement('header')
|
const header = doc.createElement('header')
|
||||||
header.className = 'sign-doc-header'
|
header.className = 'sign-doc-header'
|
||||||
|
|
||||||
SIGNING_DOCUMENT_HEADER.forEach(({ id, label }) => {
|
SIGNING_DOCUMENT_HEADER.forEach(({ id, label, valueWidthEm }) => {
|
||||||
const item = doc.createElement('span')
|
const item = doc.createElement('span')
|
||||||
item.className = 'sign-doc-header__item'
|
item.className = 'sign-doc-header__item'
|
||||||
|
|
||||||
@@ -476,6 +476,9 @@ function buildDocumentHeader(doc: Document, answers: SigningAnswers): HTMLElemen
|
|||||||
const valueElement = doc.createElement('span')
|
const valueElement = doc.createElement('span')
|
||||||
valueElement.className = 'sign-doc-header__value'
|
valueElement.className = 'sign-doc-header__value'
|
||||||
valueElement.textContent = typeof value === 'string' ? value : ''
|
valueElement.textContent = typeof value === 'string' ? value : ''
|
||||||
|
// 宽度随字段走(而不是写死在样式里):页眉四项要挤在一行,
|
||||||
|
// 各字段需要的下划线长度差别很大,样式里只能给一个统一值,容易撑到换行
|
||||||
|
valueElement.style.minWidth = `${valueWidthEm}em`
|
||||||
|
|
||||||
item.appendChild(labelElement)
|
item.appendChild(labelElement)
|
||||||
item.appendChild(valueElement)
|
item.appendChild(valueElement)
|
||||||
|
|||||||
@@ -44,6 +44,19 @@ export const SIGNING_FIELD_PRESETS: SigningFieldDef[] = [
|
|||||||
{ id: 'doctor', label: '医师签名', kind: 'signature', required: false, options: [] },
|
{ id: 'doctor', label: '医师签名', kind: 'signature', required: false, options: [] },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 固定页眉的一项。
|
||||||
|
* valueWidthEm 是取值下划线的宽度(em):页眉要在一行内放下四项,
|
||||||
|
* 按内容长度分配比统一宽度更省地方——性别、年龄只有一个字/两位数字,
|
||||||
|
* 用和「住院号/门诊号」一样的长度就会把整行挤到换行。
|
||||||
|
*/
|
||||||
|
export interface SigningHeaderField {
|
||||||
|
/** 字段键,与 SIGNING_FIELD_PRESETS 对应 */
|
||||||
|
id: string
|
||||||
|
label: string
|
||||||
|
valueWidthEm: number
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文书固定页眉。
|
* 文书固定页眉。
|
||||||
*
|
*
|
||||||
@@ -54,12 +67,15 @@ export const SIGNING_FIELD_PRESETS: SigningFieldDef[] = [
|
|||||||
* 因为页眉是系统渲染的只读展示(不挂 data-sign-field),
|
* 因为页眉是系统渲染的只读展示(不挂 data-sign-field),
|
||||||
* 它既不会出现在"填写项"统计里,也不会被写进签署证据——
|
* 它既不会出现在"填写项"统计里,也不会被写进签署证据——
|
||||||
* 患者信息以任务快照为准,页眉只是把快照展示出来。
|
* 患者信息以任务快照为准,页眉只是把快照展示出来。
|
||||||
|
*
|
||||||
|
* 宽度预算:A4 版心约 680px,四项标签合计约 250px、项间距约 54px,
|
||||||
|
* 取值下划线合计控制在约 290px 以内,留出余量保证一行放得下。
|
||||||
*/
|
*/
|
||||||
export const SIGNING_DOCUMENT_HEADER: Array<{ id: string; label: string }> = [
|
export const SIGNING_DOCUMENT_HEADER: SigningHeaderField[] = [
|
||||||
{ id: 'patient', label: '患者姓名' },
|
{ id: 'patient', label: '患者姓名', valueWidthEm: 5.5 },
|
||||||
{ id: 'sex', label: '性别' },
|
{ id: 'sex', label: '性别', valueWidthEm: 2.8 },
|
||||||
{ id: 'age', label: '年龄' },
|
{ id: 'age', label: '年龄', valueWidthEm: 3.2 },
|
||||||
{ id: 'visit', label: '住院号/门诊号' },
|
{ id: 'visit', label: '住院号/门诊号', valueWidthEm: 9 },
|
||||||
]
|
]
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -455,11 +455,12 @@ function syncPreviewFields() {
|
|||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 固定页眉:患者基本信息由 HIS 自动带出,与正文之间用一条横线分隔 */
|
/* 固定页眉:患者基本信息由 HIS 自动带出,与正文之间用一条横线分隔。
|
||||||
|
四项要在一行内放下,取值下划线的宽度由字段定义给出(内联 min-width),样式里不再写死 */
|
||||||
.signing-preview :deep(.sign-doc-header) {
|
.signing-preview :deep(.sign-doc-header) {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
gap: 12px 26px;
|
gap: 10px 18px;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
border-bottom: 1.5px solid #52646e;
|
border-bottom: 1.5px solid #52646e;
|
||||||
@@ -467,7 +468,7 @@ function syncPreviewFields() {
|
|||||||
|
|
||||||
.signing-preview :deep(.sign-doc-header__item) {
|
.signing-preview :deep(.sign-doc-header__item) {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
gap: 4px;
|
gap: 3px;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -478,8 +479,7 @@ function syncPreviewFields() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.signing-preview :deep(.sign-doc-header__value) {
|
.signing-preview :deep(.sign-doc-header__value) {
|
||||||
min-width: 6.5em;
|
padding: 0 5px 1px;
|
||||||
padding: 0 6px 1px;
|
|
||||||
color: #1c2b33;
|
color: #1c2b33;
|
||||||
font-size: 12.5px;
|
font-size: 12.5px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|||||||
@@ -333,11 +333,12 @@ defineExpose({ getDocumentElement })
|
|||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 固定页眉:患者基本信息由 HIS 自动带出,与正文之间用一条横线分隔 */
|
/* 固定页眉:患者基本信息由 HIS 自动带出,与正文之间用一条横线分隔。
|
||||||
|
四项要在一行内放下,取值下划线的宽度由字段定义给出(内联 min-width),样式里不再写死 */
|
||||||
.sign-doc-body :deep(.sign-doc-header) {
|
.sign-doc-body :deep(.sign-doc-header) {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
gap: 12px 26px;
|
gap: 10px 18px;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
border-bottom: 1.5px solid #52646e;
|
border-bottom: 1.5px solid #52646e;
|
||||||
@@ -345,7 +346,7 @@ defineExpose({ getDocumentElement })
|
|||||||
|
|
||||||
.sign-doc-body :deep(.sign-doc-header__item) {
|
.sign-doc-body :deep(.sign-doc-header__item) {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
gap: 4px;
|
gap: 3px;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,8 +357,7 @@ defineExpose({ getDocumentElement })
|
|||||||
}
|
}
|
||||||
|
|
||||||
.sign-doc-body :deep(.sign-doc-header__value) {
|
.sign-doc-body :deep(.sign-doc-header__value) {
|
||||||
min-width: 6.5em;
|
padding: 0 5px 1px;
|
||||||
padding: 0 6px 1px;
|
|
||||||
color: #1c2b33;
|
color: #1c2b33;
|
||||||
font-size: 12.5px;
|
font-size: 12.5px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|||||||
Reference in New Issue
Block a user