10 KiB
SzDistribute 分发方案组件 使用说明
组件概述
SzDistribute 是一个公文分发方案组件,支持按部门(主办/协办/阅文)和人员(办文/阅文)进行分发配置,并提供方案保存/加载功能。
基于 JeecgBoot 3.8.0 + Vue 3 + TypeScript 开发。
文件结构
distributeComponent/
├── SzDistribute.vue # 主入口组件(分发方案弹窗)
├── SzSelectDepart.vue # 部门选择组件(树形多选 + 办/协/阅标记)
├── SzSelectUser.vue # 人员选择组件(部门树 + 人员表格)
├── SzSelectedDepartsAndUsers.vue # 已选部门和人员展示组件
├── SzDistribute.api.ts # 方案增删改查 API
├── types.ts # TypeScript 类型定义
├── utils.ts # 工具函数
└── USAGE.md # 本文件
快速开始
基础用法
<template>
<SzDistribute
title="分发方案"
:secLevel="secLevel"
:role="role"
:departId="departId"
:docId="docId"
:isSpecial="isSpecial"
v-model:checkedMainDepartIds="checkedMainDepartIds"
v-model:checkedAssistDepartIds="checkedAssistDepartIds"
v-model:checkedReadDepartIds="checkedReadDepartIds"
v-model:checkedUsernames="checkedUsernames"
v-model:checkedReadUsernames="checkedReadUsernames"
v-model:reasons="reasons"
@change="handleDistributeChange"
/>
</template>
<script lang="ts" setup>
import SzDistribute from '/@/components/semri/distributeComponent/SzDistribute.vue';
const secLevel = 3; // 密级:1=非密, 2=内部, 3=秘密, 4=机密
const role = 1; // 角色:1=领导, 2=部门负责人
const departId = 'A01'; // 当前用户部门(支持 orgCode 或 UUID)
const docId = ''; // 公文ID(可选,用于排除已分发部门)
const isSpecial = 0; // 是否特殊分发
const checkedMainDepartIds = ref('');
const checkedAssistDepartIds = ref('');
const checkedReadDepartIds = ref('');
const checkedUsernames = ref('');
const checkedReadUsernames = ref('');
const reasons = ref('');
</script>
SzDistribute 主组件 API
Props(输入)
| 属性 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
secLevel |
Number |
是 | - | 文件密级。1=非密, 2=内部, 3=秘密, 4=机密 |
role |
Number | String |
是 | 1 |
当前用户角色。1=领导, 2=部门负责人 |
departId |
String |
是 | '' |
当前用户部门ID。支持 orgCode(如 "A01")或 UUID 格式,组件内部自动转换 |
docId |
String |
否 | '' |
公文ID。传入后自动排除该公文已分发的部门 |
isSpecial |
Number |
否 | 0 |
是否特殊分发。0=否, 1=是 |
title |
String |
否 | '分发方案' |
弹窗标题(会自动追加密级文字) |
width |
Number | String |
否 | 1500 |
弹窗宽度(px) |
showButton |
Boolean |
否 | true |
是否显示"分发对象"触发按钮。设为 false 时需通过 ref 调用 showModal() |
v-model(双向绑定)
| 属性 | 类型 | 说明 |
|---|---|---|
checkedMainDepartIds |
String |
主办部门ID列表,逗号分隔,如 "id1,id2,id3" |
checkedAssistDepartIds |
String |
协办部门ID列表,逗号分隔 |
checkedReadDepartIds |
String |
阅文部门ID列表,逗号分隔 |
checkedUsernames |
String |
办文人员用户名列表,逗号分隔,如 "zhangsan,lisi" |
checkedReadUsernames |
String |
阅文人员用户名列表,逗号分隔 |
reasons |
String |
分发意见/备注文本 |
modelValue |
String |
完整分发数据字符串(内部格式) |
Events(事件)
| 事件 | 参数 | 说明 |
|---|---|---|
change |
distributeStr: string |
分发方案确认时触发 |
update:checkedDepartIds |
ids: string |
所有已选部门ID(逗号分隔) |
update:checkedDeparts |
DepartTreeNode[] |
所有已选部门节点对象数组 |
Methods(通过 ref 调用)
const distributeRef = ref();
// 手动打开分发弹窗
distributeRef.value.showModal();
角色权限说明
领导(role=1)
- 部门选择 Tab:显示全部部门树,可自由选择主办/协办/阅文
- 办文人员 Tab:显示全部部门树,选择部门后加载该部门人员
- 阅文人员 Tab:同办文人员
- 默认激活 Tab:选择部门
部门负责人(role=2)
- 部门选择 Tab:根据当前部门的类型(职能/业务/科室)显示可见部门
- 办文人员 Tab:只显示本部门及下级部门的人员
- 阅文人员 Tab:同办文人员
- 默认激活 Tab:选择阅文人员(因部门负责人通常负责阅文分发)
子组件说明
SzSelectDepart — 部门选择
树形结构展示部门,每个选中的部门可标记为「办」「协」「阅」三种类型。
Props:
| 属性 | 类型 | 说明 |
|---|---|---|
selectedMainDeparts |
DepartTreeNode[] |
当前主办部门列表 |
selectedAssistDeparts |
DepartTreeNode[] |
当前协办部门列表 |
selectedReadDeparts |
DepartTreeNode[] |
当前阅文部门列表 |
excludeDeparts |
string[] |
需排除的部门ID列表 |
departId |
string |
当前用户部门ID |
role |
string | number |
用户角色 |
Events: update:selectedMainDeparts, update:selectedAssistDeparts, update:selectedReadDeparts
快捷操作:
- 全选部门 / 全选职能部门 / 全选业务部门 / 全选本部门科室
- 每种全选可指定办/协/阅类型
- 右键节点文字可快速切换选中状态
SzSelectUser — 人员选择
左侧部门树 + 右侧人员表格,支持搜索、分页、全选。
Props:
| 属性 | 类型 | 说明 |
|---|---|---|
secLevel |
any |
文件密级,用于过滤人员(只显示密级 > 文件密级的人员) |
checkedUser |
UserItem[] |
已选中的人员列表 |
selectedDepId |
string |
当前选中的部门ID |
departId |
string |
当前用户部门ID(支持 orgCode 或 UUID) |
role |
string | number |
用户角色 |
isSpecial |
number |
是否特殊分发 |
multi |
boolean |
是否多选(默认 true) |
v-model: selectedDepId — 当前选中部门
Events: update:checkedUser, update:selectedDepId
密级过滤规则: 只显示 人员密级 > 文件密级 的人员。例如文件密级为 3(秘密),则只显示密级为 4(机密)的人员。
SzSelectedDepartsAndUsers — 已选展示
以标签形式展示已选择的部门和人员,支持删除和办/协/阅类型切换。
Props:
| 属性 | 类型 | 说明 |
|---|---|---|
disabled |
boolean |
是否禁用操作(默认 false) |
selectedMainDeparts |
DepartTreeNode[] |
主办部门 |
selectedAssistDeparts |
DepartTreeNode[] |
协办部门 |
selectedReadDeparts |
DepartTreeNode[] |
阅文部门 |
selectedUsers |
UserItem[] |
办文人员 |
selectedReadUsers |
UserItem[] |
阅文人员 |
Events: update:selectedMainDeparts, update:selectedAssistDeparts, update:selectedReadDeparts, update:selectedUsers, update:selectedReadUsers
类型定义
DepartTreeNode
interface DepartTreeNode {
id: string; // 部门 UUID
key: string; // 树节点 key(等于 id)
value: string; // 树节点 value(等于 id)
title: string; // 部门名称
isLeaf?: boolean; // 是否叶子节点
departType?: string | number; // 部门类型:0=根, 1=职能, 2=业务, 3=科室
distributable?: number; // 是否可分发:1=是
disableCheckbox?: boolean; // 是否禁用选择
assignType?: number; // 分配类型:1=办, 2=协, 3=阅
children?: DepartTreeNode[]; // 子部门
description?: string; // 部门描述
parentId?: string; // 父部门ID
orgCode?: string; // 部门编码(如 "A01", "A03A02")
}
UserItem
interface UserItem {
id: string;
username: string;
realname: string;
orgCodeTxt?: string; // 所属部门名称
userSecurityLevel?: number; // 人员密级数值
userSecurityLevel_dictText?: string; // 人员密级文字
sex_dictText?: string; // 性别
sortno?: number; // 排序号
departId?: string;
departName?: string;
assignType?: number; // 分配类型:1=办, 3=阅
}
departId 说明
departId 属性支持两种格式,组件内部会自动识别并转换:
| 格式 | 示例 | 说明 |
|---|---|---|
| orgCode | "A01", "A03A02" |
部门编码,通常来自 userInfo.orgCode |
| UUID | "f4d5979edc1d4785ba2322f0b8200a21" |
部门唯一标识 |
推荐从 useUserStore().getUserInfo.orgCode 获取:
import { useUserStore } from '/@/store/modules/user';
const userStore = useUserStore();
const departId = userStore.getUserInfo?.orgCode || '';
方案管理
组件内置方案保存/加载功能,数据存储在后端 djOfficialdocDistribute 表中。
- 保存方案:输入方案名 → 点击"保存为方案"
- 加载方案:在弹窗左侧已存方案列表中点击方案名
- 快速应用:在弹窗外部的方案按钮直接点击即可应用并提交
- 删除方案:点击方案旁的关闭按钮
加载方案时会自动校验人员状态(密级变更、部门变动、离职冻结),异常人员会弹出提示并自动移除。
依赖的后端接口
| 接口 | 用途 |
|---|---|
GET /sys/sysDepart/queryTreeList |
获取部门树 |
GET /sys/user/queryUserComponentData |
查询部门下的人员 |
GET /officialdocDistribute/djOfficialdocDistribute/list |
方案列表 |
POST /officialdocDistribute/djOfficialdocDistribute/add |
新增方案 |
POST /officialdocDistribute/djOfficialdocDistribute/edit |
编辑方案 |
DELETE /officialdocDistribute/djOfficialdocDistribute/delete |
删除方案 |
GET /distributionProcessinfo/officialdocDistributionProcessinfo/queryDeptIds |
查询公文已分发部门ID |
测试页面
访问 /semri/test/SzDistributeTest 可查看组件演示和所有输入输出字段。