日期:2026-05-20 状态:已审批 涉及模块:细胞存储管理、基础信息管理
在系统中新增三个功能模块:
biz_protocol_storage_cert:已存在,当前作为采集协议单子资源管理,有 make_status、cert_image_urls、make_date 字段。后端 CRUD 已有 get_storage_cert()、upsert_storage_cert()。biz_protocol_fullmoon_todo:已存在,仅有基础字段(todo_status、handle_date、handle_remark、insurance_attachments),缺少保险相关字段。biz_checkup_institution + biz_checkup_institution_invoice + biz_checkup_institution_project 的机构管理模式,保险公司模块参照此模式。biz_insurance_company — 保险公司主表CREATE TABLE `biz_insurance_company` (
`id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键ID',
`company_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '保险公司名称',
`company_address` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '公司地址',
`contact_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系人',
`contact_phone` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系电话',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '1' COMMENT '1正常 0停用',
`tenant_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
`remark` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人id',
`create_dept_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建人部门ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人id',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记:0-正常 1-已删除',
PRIMARY KEY (`id`),
KEY `idx_ins_company` (`tenant_no`,`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='保险公司';
biz_insurance_company_invoice — 保险公司开票信息(1:N)CREATE TABLE `biz_insurance_company_invoice` (
`id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键ID',
`insurance_company_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '保险公司ID',
`company_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '单位名称',
`tax_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '税号',
`company_address` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '单位地址',
`company_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '电话',
`bank_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '开户银行',
`bank_account` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '银行账号',
`tenant_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
`remark` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人id',
`create_dept_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建人部门ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人id',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记:0-正常 1-已删除',
PRIMARY KEY (`id`),
KEY `idx_ins_inv` (`insurance_company_id`,`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='保险公司开票信息';
biz_insurance_project_price — 保险项目价格(1:N)CREATE TABLE `biz_insurance_project_price` (
`id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键ID',
`insurance_company_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '保险公司ID',
`project_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '项目名称',
`project_fee` decimal(18,2) DEFAULT NULL COMMENT '项目费用(元)',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '1' COMMENT '1正常 0停用',
`tenant_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
`remark` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人id',
`create_dept_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建人部门ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人id',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记:0-正常 1-已删除',
PRIMARY KEY (`id`),
KEY `idx_ins_proj` (`insurance_company_id`,`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='保险项目价格';
在现有 biz_protocol_fullmoon_todo 表上新增 8 个字段:
ALTER TABLE `biz_protocol_fullmoon_todo`
ADD COLUMN `insurance_company_id` varchar(64) DEFAULT NULL COMMENT '保险公司ID' AFTER `insurance_attachments`,
ADD COLUMN `insurance_company_name` varchar(200) DEFAULT NULL COMMENT '保险公司名称(冗余快照)' AFTER `insurance_company_id`,
ADD COLUMN `insurance_type` varchar(200) DEFAULT NULL COMMENT '保险险种' AFTER `insurance_company_name`,
ADD COLUMN `insurance_policy_no` varchar(100) DEFAULT NULL COMMENT '保险单号' AFTER `insurance_type`,
ADD COLUMN `insurance_effective_date` char(8) DEFAULT NULL COMMENT '保险单生效时间YYYYMMDD' AFTER `insurance_policy_no`,
ADD COLUMN `insurance_expiry_date` char(8) DEFAULT NULL COMMENT '保险单失效时间YYYYMMDD' AFTER `insurance_effective_date`,
ADD COLUMN `insurance_subscribed` char(1) DEFAULT '0' COMMENT '是否已订购保险(1是 0否)' AFTER `insurance_expiry_date`,
ADD COLUMN `insurance_fee` decimal(18,2) DEFAULT NULL COMMENT '保单费用(元)' AFTER `insurance_subscribed`;
数据筛选逻辑:满月待办列表仅展示满足以下条件的采集协议单:
biz_collection_protocol.protocol_status = 'sxz'(生效中)biz_protocol_party_customer.newborn_delivery_time + 30天 ≤ 当前日期(新生儿已满月)字段语义说明:
todo_status:满月待办整体完成状态('0'未办保险 → '1'已办保险),表示整个流程是否结束insurance_subscribed:是否已订购保险('0'否 → '1'是),表示保险购买这一步骤是否完成insurance_subscribed='1' 是 todo_status='1' 的前提条件之一,但不是充分条件(办结需人工确认待办状态)insurance_subscribed 设为 '1',可联动将 todo_status 更新为 '1'(用户可覆盖)复用现有 biz_protocol_storage_cert 表,不修改表结构。
数据筛选逻辑:储存证管理列表仅展示满足以下条件的采集协议单:
biz_collection_protocol.protocol_status = 'sxz'(生效中)biz_protocol_sample 中存在 sample_status = 'yrk'(已入库)| 文件 | 说明 |
|---|---|
backend/app/api/insurance_company.py |
API 路由文件,参照 pilot_service.py 中体检机构的路由模式 |
保险公司 CRUD:
GET /web/admin/insurance-companies — 分页列表POST /web/admin/insurance-companies — 新增PUT /web/admin/insurance-companies/{id} — 修改DELETE /web/admin/insurance-companies/{id} — 软删除开票信息 CRUD:
GET /web/admin/insurance-company-invoices?insurance_company_id=xxx — 按公司查列表POST /web/admin/insurance-company-invoices — 新增PUT /web/admin/insurance-company-invoices/{id} — 修改DELETE /web/admin/insurance-company-invoices/{id} — 软删除保险项目价格 CRUD:
GET /web/admin/insurance-project-prices?insurance_company_id=xxx — 按公司查列表POST /web/admin/insurance-project-prices — 新增PUT /web/admin/insurance-project-prices/{id} — 修改DELETE /web/admin/insurance-project-prices/{id} — 软删除| 文件 | 变更 |
|---|---|
backend/app/models/models.py |
新增 3 个 Model:BizInsuranceCompany、BizInsuranceCompanyInvoice、BizInsuranceProjectPrice |
backend/app/api/__init__.py |
导入 insurance_company_router |
backend/app/main.py |
注册 insurance_company_router |
CRUD 函数直接写在 insurance_company.py 路由文件中(参照项目既有模式:pilot_service.py 中体检机构 CRUD 内联在路由文件中),使用 _X_to_dict() 手动序列化模式。
| 文件 | 变更 |
|---|---|
backend/app/api/collection_protocol.py |
新增满月待办列表接口 + 保险信息更新接口 |
backend/app/models/models.py |
BizProtocolFullmoonTodo 模型新增 8 个字段 |
GET /web/admin/fullmoon-todos — 满月待办分页列表(自动筛选已生效+已满月的协议单,关联查询客户信息和保险信息)PUT /web/admin/fullmoon-todos/{id}/insurance — 更新保险信息(保险公司、保险险种、保险单号、保单费用、生效/失效时间、是否已订购保险、保险附件){
"id": "满月待办ID",
"collection_protocol_id": "协议单ID",
"protocol_no": "采集协议号",
"mother_name": "母亲姓名",
"newborn_delivery_time": "新生儿分娩时间",
"fullmoon_date": "满月日期(计算值:分娩时间+30天)",
"todo_status": "满月待办状态",
"insurance_company_id": "保险公司ID",
"insurance_company_name": "保险公司名称",
"insurance_type": "保险险种",
"insurance_policy_no": "保险单号",
"insurance_effective_date": "保险生效时间",
"insurance_expiry_date": "保险失效时间",
"insurance_subscribed": "是否已订购保险",
"insurance_fee": "保单费用",
"insurance_attachments": "保险附件",
"handle_date": "办理日期",
"handle_remark": "办理备注"
}
| 文件 | 变更 |
|---|---|
backend/app/api/collection_protocol.py |
新增储存证管理列表接口 |
GET /web/admin/storage-certs — 储存证管理分页列表(自动筛选已生效+样本已入库的协议单,关联查询储存证信息)upsert_storage_cert() 函数可复用,前端通过采集协议单编辑接口保存储存证{
"id": "储存证ID",
"collection_protocol_id": "协议单ID",
"protocol_no": "采集协议号",
"mother_name": "母亲姓名",
"newborn_delivery_time": "新生儿分娩时间",
"sample_info": "样本信息概要(类型+编码)",
"make_status": "制作状态(0未制作 1已制作)",
"cert_image_urls": "储存证图片URL列表",
"make_date": "制作日期",
"storage_in_date": "入库日期"
}
sqxp.ts 变更)细胞存储管理(id: 50000000000000000000000000000001)新增 2 个 children:
{
id: '50000000000000000000000000000006',
name: 'CellStorageStorageCert',
path: 'storage-cert',
component: '/cell-storage/storage-cert/index',
meta: { title: '储存证管理', keepAlive: true, menuCode: 'cell-storage:storage-cert' }
},
{
id: '50000000000000000000000000000008',
name: 'CellStorageFullmoonTodo',
path: 'fullmoon-todo',
component: '/cell-storage/fullmoon-todo/index',
meta: { title: '满月待办管理', keepAlive: true, menuCode: 'cell-storage:fullmoon-todo' }
}
基础信息管理(id: 40000000000000000000000000000001)新增 1 个 child:
{
id: '40000000000000000000000000000007',
name: 'BasicInfoInsuranceCompany',
path: 'insurance-company',
component: '/basic-info/insurance-company/index',
meta: { title: '保险公司及项目价格', keepAlive: true, menuCode: 'basic-info:insurance-company' }
}
| 文件路径 | 参照模板 | 说明 |
|---|---|---|
web-admin/src/views/cell-storage/storage-cert/index.vue |
system/unit/index.vue |
储存证管理列表页,含查看弹窗 + 上传储存证弹窗 |
web-admin/src/views/cell-storage/fullmoon-todo/index.vue |
system/order/index.vue |
满月待办管理列表页(复杂列表),含保险信息编辑弹窗 |
web-admin/src/views/basic-info/insurance-company/index.vue |
pilot-service/checkup-institution/index.vue |
保险公司管理页,含 Tab 切换(开票信息 / 项目价格) |
新增文件或在现有 web-admin/src/api/admin.ts 中追加:
getStorageCertList(params)getFullmoonTodoList(params)updateFullmoonTodoInsurance(id, data)getInsuranceCompanyList(params)、createInsuranceCompany(data)、updateInsuranceCompany(id, data)、deleteInsuranceCompany(id)getInsuranceInvoiceList(params)、createInsuranceInvoice(data)、updateInsuranceInvoice(id, data)、deleteInsuranceInvoice(id)getInsuranceProjectPriceList(params)、createInsuranceProjectPrice(data)、updateInsuranceProjectPrice(id, data)、deleteInsuranceProjectPrice(id)需在 sys_menu 表中插入 3 条新菜单记录,父菜单为 web 端对应的二级菜单节点。同时需要在角色的菜单权限中授权。
tenant_no 过滤 + 数据权限过滤--primary #10b981)label-position="top"<el-tag> 渲染create_time DESC 排序