From 46bbbfee06f0c18dba0d76e76a2beaa5da424e65 Mon Sep 17 00:00:00 2001
From: xy
Date: Wed, 7 Oct 2026 17:20:50 +0800
Subject: [PATCH] =?UTF-8?q?fix(documents):=20=E4=BF=9D=E5=AD=98=E6=96=87?=
=?UTF-8?q?=E6=A1=A3=E5=BD=92=E5=B1=9E=E5=B9=B6=E6=94=AF=E6=8C=81=E6=89=80?=
=?UTF-8?q?=E6=9C=89=E9=99=A2=E5=8C=BA=E7=AD=9B=E9=80=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
clinical-web/README.md | 4 +-
clinical-web/src/api/management/types.ts | 4 +
.../components/DocumentFilterTabs.vue | 5 +-
.../components/DocumentPropsDialog.vue | 32 ++++--
.../src/views/management/documents/index.vue | 102 +++++++++++-------
5 files changed, 94 insertions(+), 53 deletions(-)
diff --git a/clinical-web/README.md b/clinical-web/README.md
index f619be8..1348cce 100644
--- a/clinical-web/README.md
+++ b/clinical-web/README.md
@@ -218,7 +218,7 @@ API 模块与页面按业务域对应。工作台页面使用 `api/workbench`
- `GET /api/v1/sign-artifacts/{artifactId}/download`:原始 PDF、签署后 PDF、签名原图下载;
- `POST /api/v1/sign-deliveries/{taskId}/sms/resend`:短信重发,自动携带幂等键;
- `GET/POST /api/v1/templates`、`GET /api/v1/templates/{id}`:模板列表、详情;
-- `PUT /api/v1/templates/{id}`:更新模板元数据;
+- `PUT /api/v1/templates/{id}`:更新模板名称、说明、分类及归属。修改归属时提交 `campusId` 与 `departmentId`;科室为空表示该院区通用,不提交院区则保留原归属。真实模式只支持一个归属科室,选择科室时使用该科室的院区;编辑为通用时保留文档原院区。后端校验目标组织状态、院区匹配及数据权限,记录归属变更审计,保留历史签署快照;
- `GET/POST /api/v1/templates/{id}/versions`、`GET /api/v1/templates/{id}/versions/{versionId}`:版本列表、创建与版本详情(**正文 `contentHtml` 只在这个详情接口里返回**);
- `POST /api/v1/templates/{id}/versions/{versionId}/{action}`(submit-review / reject / approve / publish / disable / archive):版本工作流,模板「删除」即走 archive;
- `GET /api/v1/users`、`POST /api/v1/users`、`GET/PUT /api/v1/users/{id}`:员工列表、资料创建和资料更新;
@@ -243,6 +243,8 @@ API 模块与页面按业务域对应。工作台页面使用 `api/workbench`
## 签署记录查询
+文档库院区筛选支持「所有院区」:列表查询省略 `campusId`,由后端按当前账号的角色数据范围过滤;科室标签显示院区和科室名称。此选项只影响文档库查询,全局院区及新增通用文档的目标院区仍使用具体院区,编辑通用文档仍保留原院区。
+
`views/workbench/records` 是「工作台 → 签署记录查询」(`/sign/records`,菜单资源 `sign/record/index`)的实现:工作台只保留当天的签署操作,历史记录的检索、核对与导出统一放在这里。页面只读——已签署的正式文书不可直接修改,需要追加内容时回签署工作台新建签署任务。
**接口现状与边界**(后端还没有「按条件检索历史签署记录」的专用接口):
diff --git a/clinical-web/src/api/management/types.ts b/clinical-web/src/api/management/types.ts
index f2e9a2b..df7bd3f 100644
--- a/clinical-web/src/api/management/types.ts
+++ b/clinical-web/src/api/management/types.ts
@@ -143,6 +143,10 @@ export interface UpdateTemplateRequest {
name: string
description?: string
category?: string
+ /** 修改归属时提供院区;不传则保留原归属。 */
+ campusId?: string
+ /** 提供院区时,null 表示该院区通用。 */
+ departmentId?: string | null
}
export interface CreateTemplateVersionRequest {
diff --git a/clinical-web/src/views/management/documents/components/DocumentFilterTabs.vue b/clinical-web/src/views/management/documents/components/DocumentFilterTabs.vue
index 844bb18..988d34a 100644
--- a/clinical-web/src/views/management/documents/components/DocumentFilterTabs.vue
+++ b/clinical-web/src/views/management/documents/components/DocumentFilterTabs.vue
@@ -4,8 +4,7 @@
*
* 原型 V10.2 只有「科室 + 状态」两行(#libTabs / #libStatus)。这里把科室那一级按
* 「组织架构」的口径拆成两级:先选院区(同一份院区字典、同一个 sortNo 顺序,
- * 与架构树的院区顺序一致),再在该院区的科室里筛。院区不做「全部院区」——
- * 架构树里也始终落在某一个院区上,两处口径保持一致。
+ * 与架构树的院区顺序一致),再按科室筛选。「所有院区」跨院区查询,科室显示院区名。
*
* 类名沿用原型的 lib-tabs / lib-tab / lib-status / lib-st:这套样式是文档库页面独有的
* 筛选语言(胶囊 + 虚线分隔),与通用 Tabs 组件的观感不同,换成通用组件会把
@@ -16,7 +15,7 @@
import type { CampusTab, DepartmentTab, DocumentFilterStatus, StatusTab } from '../types'
defineProps<{
- /** 当前院区 id。院区是页面级的取数口径,由页面持有(见 index.vue) */
+ /** 当前院区 id;空字符串表示所有院区,由页面持有查询状态。 */
campus: string
department: string | null
status: DocumentFilterStatus
diff --git a/clinical-web/src/views/management/documents/components/DocumentPropsDialog.vue b/clinical-web/src/views/management/documents/components/DocumentPropsDialog.vue
index 2e13559..5c6c21b 100644
--- a/clinical-web/src/views/management/documents/components/DocumentPropsDialog.vue
+++ b/clinical-web/src/views/management/documents/components/DocumentPropsDialog.vue
@@ -125,6 +125,11 @@ function toggleOwnership(option: string) {
form.ownership = []
}
+ if (!props.isMock) {
+ form.ownership = form.ownership.includes(option) ? [] : [option]
+ return
+ }
+
const index = form.ownership.indexOf(option)
if (index >= 0) {
@@ -205,7 +210,11 @@ function submit() {
- 勾选科室设置可见范围,支持多科室与通用(全院)。勾选「通用(全院)」后各科室均可见。
+
+ 勾选科室设置可见范围,支持多科室与通用(全院)。
+
+
+ 选择一个归属科室,或选择「通用(全院)」供文档所属院区使用。归属仍受账号权限限制。
+
@@ -265,11 +275,11 @@ function submit() {
: '属性与正文分开维护:此处只修改文档基本信息与归属;正文请在文档卡片点「编辑正文」。'
}}
-
+