feat(login): 添加租户名称获取功能并优化前端布局

- 在登录控制器中注入租户服务并获取租户名称信息
- 添加租户名称到登录响应结果中
- 更新样式变量定义侧边栏宽度和Logo高度
- 重构公告面板组件统一公告通知显示逻辑
- 简化公告类型图标和样式映射关系
- 更新侧边栏为垂直菜单布局并添加折叠功能
- 优化Logo组件显示租户名称和系统标题
- 调整导航栏布局结构和响应式样式
- 重构主应用容器样式和标签页显示逻辑
This commit is contained in:
2025-12-31 10:28:52 +08:00
parent 10e738edd9
commit 4d4828ea71
54 changed files with 3510 additions and 754 deletions

View File

@@ -0,0 +1,6 @@
-- 为 cli_surgery 表添加 tenant_id 字段
-- 创建时间: 2025-12-31
-- 说明: 添加租户ID字段以支持多租户功能
ALTER TABLE cli_surgery ADD COLUMN tenant_id int4;
COMMENT ON COLUMN cli_surgery.tenant_id IS '租户ID';

View File

@@ -0,0 +1,207 @@
-- 手术管理模块数据库表结构
-- 创建时间: 2025-12-30
-- 说明: 手术管理模块数据库表结构PostgreSQL版本
-- ----------------------------
-- Table structure for cli_surgery
-- ----------------------------
DROP TABLE IF EXISTS cli_surgery CASCADE;
CREATE TABLE cli_surgery (
id bigint NOT NULL,
surgery_no varchar(50) NOT NULL,
patient_id bigint NOT NULL,
patient_name varchar(100),
encounter_id bigint,
surgery_name varchar(200) NOT NULL,
surgery_code varchar(100),
surgery_type_enum int2,
surgery_level int2,
status_enum int2 DEFAULT 0,
planned_time timestamp,
actual_start_time timestamp,
actual_end_time timestamp,
main_surgeon_id bigint,
main_surgeon_name varchar(100),
assistant_1_id bigint,
assistant_1_name varchar(100),
assistant_2_id bigint,
assistant_2_name varchar(100),
anesthetist_id bigint,
anesthetist_name varchar(100),
scrub_nurse_id bigint,
scrub_nurse_name varchar(100),
anesthesia_type_enum int2,
body_site varchar(200),
incision_level int2,
healing_level int2,
operating_room_id bigint,
operating_room_name varchar(100),
org_id bigint,
org_name varchar(100),
preoperative_diagnosis text,
postoperative_diagnosis text,
surgery_description text,
postoperative_advice text,
complications text,
surgery_fee numeric(10,2) DEFAULT 0.00,
anesthesia_fee numeric(10,2) DEFAULT 0.00,
total_fee numeric(10,2) DEFAULT 0.00,
remark varchar(500),
create_by bigint,
create_time timestamp DEFAULT CURRENT_TIMESTAMP,
update_by varchar(64),
update_time timestamp,
delete_flag varchar(1) DEFAULT '0',
CONSTRAINT pk_cli_surgery PRIMARY KEY (id),
CONSTRAINT uk_cli_surgery_no UNIQUE (surgery_no)
);
-- 创建索引
CREATE INDEX idx_cli_surgery_patient_id ON cli_surgery(patient_id);
CREATE INDEX idx_cli_surgery_encounter_id ON cli_surgery(encounter_id);
CREATE INDEX idx_cli_surgery_org_id ON cli_surgery(org_id);
CREATE INDEX idx_cli_surgery_status_enum ON cli_surgery(status_enum);
CREATE INDEX idx_cli_surgery_planned_time ON cli_surgery(planned_time);
-- 添加表注释
COMMENT ON TABLE cli_surgery IS '手术管理表';
COMMENT ON COLUMN cli_surgery.id IS 'ID';
COMMENT ON COLUMN cli_surgery.surgery_no IS '手术编号';
COMMENT ON COLUMN cli_surgery.patient_id IS '患者ID';
COMMENT ON COLUMN cli_surgery.patient_name IS '患者姓名';
COMMENT ON COLUMN cli_surgery.encounter_id IS '就诊ID';
COMMENT ON COLUMN cli_surgery.surgery_name IS '手术名称';
COMMENT ON COLUMN cli_surgery.surgery_code IS '手术编码';
COMMENT ON COLUMN cli_surgery.surgery_type_enum IS '手术类型编码 1-门诊手术 2-住院手术 3-急诊手术 4-择期手术';
COMMENT ON COLUMN cli_surgery.surgery_level IS '手术等级 1-一级 2-二级 3-三级 4-四级 5-特级';
COMMENT ON COLUMN cli_surgery.status_enum IS '手术状态 0-待排期 1-已排期 2-手术中 3-已完成 4-已取消 5-暂停';
COMMENT ON COLUMN cli_surgery.planned_time IS '计划手术时间';
COMMENT ON COLUMN cli_surgery.actual_start_time IS '实际开始时间';
COMMENT ON COLUMN cli_surgery.actual_end_time IS '实际结束时间';
COMMENT ON COLUMN cli_surgery.main_surgeon_id IS '主刀医生ID';
COMMENT ON COLUMN cli_surgery.main_surgeon_name IS '主刀医生姓名';
COMMENT ON COLUMN cli_surgery.assistant_1_id IS '助手1 ID';
COMMENT ON COLUMN cli_surgery.assistant_1_name IS '助手1 姓名';
COMMENT ON COLUMN cli_surgery.assistant_2_id IS '助手2 ID';
COMMENT ON COLUMN cli_surgery.assistant_2_name IS '助手2 姓名';
COMMENT ON COLUMN cli_surgery.anesthetist_id IS '麻醉医生ID';
COMMENT ON COLUMN cli_surgery.anesthetist_name IS '麻醉医生姓名';
COMMENT ON COLUMN cli_surgery.scrub_nurse_id IS '巡回护士ID';
COMMENT ON COLUMN cli_surgery.scrub_nurse_name IS '巡回护士姓名';
COMMENT ON COLUMN cli_surgery.anesthesia_type_enum IS '麻醉方式编码 0-无麻醉 1-局部麻醉 2-区域麻醉 3-全身麻醉 4-脊椎麻醉 5-硬膜外麻醉 6-表面麻醉';
COMMENT ON COLUMN cli_surgery.body_site IS '手术部位';
COMMENT ON COLUMN cli_surgery.incision_level IS '手术切口等级 1-I级切口 2-II级切口 3-III级切口 4-IV级切口';
COMMENT ON COLUMN cli_surgery.healing_level IS '手术切口愈合等级 1-甲级愈合 2-乙级愈合 3-丙级愈合';
COMMENT ON COLUMN cli_surgery.operating_room_id IS '手术室ID';
COMMENT ON COLUMN cli_surgery.operating_room_name IS '手术室名称';
COMMENT ON COLUMN cli_surgery.org_id IS '执行科室ID';
COMMENT ON COLUMN cli_surgery.org_name IS '执行科室名称';
COMMENT ON COLUMN cli_surgery.preoperative_diagnosis IS '术前诊断';
COMMENT ON COLUMN cli_surgery.postoperative_diagnosis IS '术后诊断';
COMMENT ON COLUMN cli_surgery.surgery_description IS '手术经过描述';
COMMENT ON COLUMN cli_surgery.postoperative_advice IS '术后医嘱';
COMMENT ON COLUMN cli_surgery.complications IS '并发症描述';
COMMENT ON COLUMN cli_surgery.surgery_fee IS '手术费用';
COMMENT ON COLUMN cli_surgery.anesthesia_fee IS '麻醉费用';
COMMENT ON COLUMN cli_surgery.total_fee IS '总费用';
COMMENT ON COLUMN cli_surgery.remark IS '备注信息';
COMMENT ON COLUMN cli_surgery.create_by IS '创建人ID';
COMMENT ON COLUMN cli_surgery.create_time IS '创建时间';
COMMENT ON COLUMN cli_surgery.update_by IS '更新人ID';
COMMENT ON COLUMN cli_surgery.update_time IS '更新时间';
COMMENT ON COLUMN cli_surgery.delete_flag IS '删除标记 0-正常 1-删除';
-- 创建自动更新时间的触发器函数
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.update_time = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- 创建触发器
CREATE TRIGGER update_cli_surgery_modtime
BEFORE UPDATE ON cli_surgery
FOR EACH ROW
EXECUTE FUNCTION update_modified_column();
-- ----------------------------
-- Dictionary data for surgery manage
-- ----------------------------
-- 手术状态字典
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) VALUES
('手术状态', 'surgery_status', '0', 'admin', CURRENT_TIMESTAMP, '手术状态列表')
ON CONFLICT (dict_type) DO NOTHING;
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark) VALUES
(1, '待排期', '0', 'surgery_status', '0', 'admin', CURRENT_TIMESTAMP, '待排期状态'),
(2, '已排期', '1', 'surgery_status', '0', 'admin', CURRENT_TIMESTAMP, '已排期状态'),
(3, '手术中', '2', 'surgery_status', '0', 'admin', CURRENT_TIMESTAMP, '手术中状态'),
(4, '已完成', '3', 'surgery_status', '0', 'admin', CURRENT_TIMESTAMP, '已完成状态'),
(5, '已取消', '4', 'surgery_status', '0', 'admin', CURRENT_TIMESTAMP, '已取消状态'),
(6, '暂停', '5', 'surgery_status', '0', 'admin', CURRENT_TIMESTAMP, '暂停状态')
ON CONFLICT DO NOTHING;
-- 手术类型字典
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) VALUES
('手术类型', 'surgery_type', '0', 'admin', CURRENT_TIMESTAMP, '手术类型列表')
ON CONFLICT (dict_type) DO NOTHING;
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark) VALUES
(1, '门诊手术', '1', 'surgery_type', '0', 'admin', CURRENT_TIMESTAMP, '门诊手术'),
(2, '住院手术', '2', 'surgery_type', '0', 'admin', CURRENT_TIMESTAMP, '住院手术'),
(3, '急诊手术', '3', 'surgery_type', '0', 'admin', CURRENT_TIMESTAMP, '急诊手术'),
(4, '择期手术', '4', 'surgery_type', '0', 'admin', CURRENT_TIMESTAMP, '择期手术')
ON CONFLICT DO NOTHING;
-- 手术等级字典
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) VALUES
('手术等级', 'surgery_level', '0', 'admin', CURRENT_TIMESTAMP, '手术等级列表')
ON CONFLICT (dict_type) DO NOTHING;
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark) VALUES
(1, '一级手术', '1', 'surgery_level', '0', 'admin', CURRENT_TIMESTAMP, '一级手术'),
(2, '二级手术', '2', 'surgery_level', '0', 'admin', CURRENT_TIMESTAMP, '二级手术'),
(3, '三级手术', '3', 'surgery_level', '0', 'admin', CURRENT_TIMESTAMP, '三级手术'),
(4, '四级手术', '4', 'surgery_level', '0', 'admin', CURRENT_TIMESTAMP, '四级手术'),
(5, '特级手术', '5', 'surgery_level', '0', 'admin', CURRENT_TIMESTAMP, '特级手术')
ON CONFLICT DO NOTHING;
-- 麻醉方式字典
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) VALUES
('麻醉方式', 'anesthesia_type', '0', 'admin', CURRENT_TIMESTAMP, '麻醉方式列表')
ON CONFLICT (dict_type) DO NOTHING;
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark) VALUES
(1, '无麻醉', '0', 'anesthesia_type', '0', 'admin', CURRENT_TIMESTAMP, '无麻醉'),
(2, '局部麻醉', '1', 'anesthesia_type', '0', 'admin', CURRENT_TIMESTAMP, '局部麻醉'),
(3, '区域麻醉', '2', 'anesthesia_type', '0', 'admin', CURRENT_TIMESTAMP, '区域麻醉'),
(4, '全身麻醉', '3', 'anesthesia_type', '0', 'admin', CURRENT_TIMESTAMP, '全身麻醉'),
(5, '脊椎麻醉', '4', 'anesthesia_type', '0', 'admin', CURRENT_TIMESTAMP, '脊椎麻醉'),
(6, '硬膜外麻醉', '5', 'anesthesia_type', '0', 'admin', CURRENT_TIMESTAMP, '硬膜外麻醉'),
(7, '表面麻醉', '6', 'anesthesia_type', '0', 'admin', CURRENT_TIMESTAMP, '表面麻醉')
ON CONFLICT DO NOTHING;
-- 切口等级字典
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) VALUES
('切口等级', 'incision_level', '0', 'admin', CURRENT_TIMESTAMP, '切口等级列表')
ON CONFLICT (dict_type) DO NOTHING;
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark) VALUES
(1, 'I级切口', '1', 'incision_level', '0', 'admin', CURRENT_TIMESTAMP, 'I级切口'),
(2, 'II级切口', '2', 'incision_level', '0', 'admin', CURRENT_TIMESTAMP, 'II级切口'),
(3, 'III级切口', '3', 'incision_level', '0', 'admin', CURRENT_TIMESTAMP, 'III级切口'),
(4, 'IV级切口', '4', 'incision_level', '0', 'admin', CURRENT_TIMESTAMP, 'IV级切口')
ON CONFLICT DO NOTHING;
-- 愈合等级字典
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) VALUES
('愈合等级', 'healing_level', '0', 'admin', CURRENT_TIMESTAMP, '愈合等级列表')
ON CONFLICT (dict_type) DO NOTHING;
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark) VALUES
(1, '甲级愈合', '1', 'healing_level', '0', 'admin', CURRENT_TIMESTAMP, '甲级愈合'),
(2, '乙级愈合', '2', 'healing_level', '0', 'admin', CURRENT_TIMESTAMP, '乙级愈合'),
(3, '丙级愈合', '3', 'healing_level', '0', 'admin', CURRENT_TIMESTAMP, '丙级愈合')
ON CONFLICT DO NOTHING;