数据库清理文档

dev-tmp1
huwei 2026-08-13 16:07:33 +08:00
parent cef933f76f
commit 4523ab9e40
14 changed files with 455 additions and 165 deletions

View File

@ -0,0 +1,266 @@
## 业务库清理说明
数据库safety-eval-service
不清理的表:
basic_discipline_major
industry_professional_standards
org_business_scope_device_ref
## 租户数据清理操作文档
### 一、清理条件定义
执行前根据实际场景修改以下条件的值,并将修改后的值替换到下方所有 SQL 中。
| 条件 | 当前值 | 说明 |
|------|--------|------|
| 目标租户ID | `2067161116369793024` | 所有 SQL 中 `tenant_id =` 后面的值 |
| 排除账号 | `'cqanquan','15100110011','jianguan001'` | 所有 SQL 中 `NOT IN (...)` 里的账号列表 |
**修改方式**:在文档中全局替换。例如要清理另一个租户并调整排除账号,将所有 SQL 中的 `2067161116369793024` 替换为目标租户ID`NOT IN ('cqanquan','15100110011','jianguan001')` 替换为实际的排除账号列表。
---
### 二、操作原则
1. **主表即删除目标**:每条 SELECT 的主表就是要删除数据的表SELECT 列出的每一行就是将被 DELETE 删除的行。
2. **先查询后删除**:每个步骤必须先执行 SELECT 确认影响范围,核对无误后再执行对应的 DELETE。
3. **关联逻辑一致**SELECT 和 DELETE 使用完全相同的 FROM/JOIN/WHERE 结构,只将 SELECT 替换为 DELETE 主表别名。
4. **按依赖顺序清理**:先删关联表(子表),再删主表,避免数据不一致。
5. **单步执行**:每一步独立执行并确认结果,不要批量粘贴所有 SQL。
---
### 三、清理步骤
#### 步骤 1用户关联角色
- **执行库**jjb-saas-system
- **主表(删除目标)**sys_role_user
- **辅助表(过滤条件)**sys_user
**1.1 查询确认**
```sql
SELECT ru.id, ru.user_id, ru.role_id
FROM sys_role_user ru
INNER JOIN sys_user u ON ru.user_id = u.id
WHERE u.tenant_id = 2067161116369793024
AND u.account NOT IN ('cqanquan','15100110011','jianguan001');
```
**1.2 执行删除**
```sql
DELETE ru FROM sys_role_user ru
INNER JOIN sys_user u ON ru.user_id = u.id
WHERE u.tenant_id = 2067161116369793024
AND u.account NOT IN ('cqanquan','15100110011','jianguan001');
```
---
#### 步骤 2用户关联部门
- **执行库**jjb-saas-system
- **主表(删除目标)**sys_user_role_dept
- **辅助表(过滤条件)**sys_user
**2.1 查询确认**
```sql
SELECT urd.id, urd.user_id, urd.role_id, urd.dept_id
FROM sys_user_role_dept urd
INNER JOIN sys_user u ON urd.user_id = u.id
WHERE u.tenant_id = 2067161116369793024
AND u.account NOT IN ('cqanquan','15100110011','jianguan001');
```
**2.2 执行删除**
```sql
DELETE urd FROM sys_user_role_dept urd
INNER JOIN sys_user u ON urd.user_id = u.id
WHERE u.tenant_id = 2067161116369793024
AND u.account NOT IN ('cqanquan','15100110011','jianguan001');
```
---
#### 步骤 3角色关联权限组
- **执行库**jjb-saas-system
- **主表(删除目标)**sys_role_perms_group
- **辅助表(过滤条件)**sys_role_user → sys_user
**3.1 查询确认**
```sql
SELECT rpg.id, rpg.role_id, rpg.group_id
FROM sys_role_perms_group rpg
INNER JOIN sys_role_user ru ON rpg.role_id = ru.role_id
INNER JOIN sys_user u ON ru.user_id = u.id
WHERE u.tenant_id = 2067161116369793024
AND u.account NOT IN ('cqanquan','15100110011','jianguan001');
```
**3.2 执行删除**
```sql
DELETE rpg FROM sys_role_perms_group rpg
INNER JOIN sys_role_user ru ON rpg.role_id = ru.role_id
INNER JOIN sys_user u ON ru.user_id = u.id
WHERE u.tenant_id = 2067161116369793024
AND u.account NOT IN ('cqanquan','15100110011','jianguan001');
```
---
#### 步骤 4角色数据
- **执行库**jjb-saas-system
- **主表(删除目标)**sys_role
- **辅助表(过滤条件)**sys_role_user → sys_user
**4.1 查询确认**
```sql
SELECT r.id, r.role_name, r.role_code
FROM sys_role r
INNER JOIN sys_role_user ru ON r.id = ru.role_id
INNER JOIN sys_user u ON ru.user_id = u.id
WHERE u.tenant_id = 2067161116369793024
AND u.account NOT IN ('cqanquan','15100110011','jianguan001');
```
**4.2 执行删除**
```sql
DELETE r FROM sys_role r
INNER JOIN sys_role_user ru ON r.id = ru.role_id
INNER JOIN sys_user u ON ru.user_id = u.id
WHERE u.tenant_id = 2067161116369793024
AND u.account NOT IN ('cqanquan','15100110011','jianguan001');
```
---
#### 步骤 5用户数据
- **执行库**jjb-saas-system
- **主表(删除目标)**sys_user
- **辅助表**:无
**5.1 查询确认**
```sql
SELECT id, account, name, mobile, email, status_enum, create_time
FROM sys_user
WHERE tenant_id = 2067161116369793024
AND account NOT IN ('cqanquan','15100110011','jianguan001');
```
**5.2 执行删除**
```sql
DELETE FROM sys_user
WHERE tenant_id = 2067161116369793024
AND account NOT IN ('cqanquan','15100110011','jianguan001');
```
---
#### 步骤 6账号租户关联
- **执行库**jjb-saas-auth
- **主表(删除目标)**auth_account_tenant_rel
- **辅助表(过滤条件)**auth_account
**6.1 查询确认**
```sql
SELECT atr.id, atr.account_id, atr.tenant_id
FROM auth_account_tenant_rel atr
INNER JOIN auth_account a ON atr.account_id = a.id
WHERE atr.tenant_id = 2067161116369793024
AND a.username NOT IN ('cqanquan','15100110011','jianguan001');
```
**6.2 执行删除**
```sql
DELETE atr FROM auth_account_tenant_rel atr
INNER JOIN auth_account a ON atr.account_id = a.id
WHERE atr.tenant_id = 2067161116369793024
AND a.username NOT IN ('cqanquan','15100110011','jianguan001');
```
---
#### 步骤 7账号租户密码
- **执行库**jjb-saas-auth
- **主表(删除目标)**auth_account_tenant_password
- **辅助表(过滤条件)**auth_account
**7.1 查询确认**
```sql
SELECT atp.id, atp.account_id, a.username, atp.user_type_enum, atp.status_enum
FROM auth_account_tenant_password atp
INNER JOIN auth_account a ON atp.account_id = a.id
WHERE atp.tenant_id = 2067161116369793024
AND a.username NOT IN ('cqanquan','15100110011','jianguan001');
```
**7.2 执行删除**
```sql
DELETE atp FROM auth_account_tenant_password atp
INNER JOIN auth_account a ON atp.account_id = a.id
WHERE atp.tenant_id = 2067161116369793024
AND a.username NOT IN ('cqanquan','15100110011','jianguan001');
```
---
#### 步骤 8账号数据
- **执行库**jjb-saas-auth
- **主表(删除目标)**auth_account
- **辅助表**:无
**8.1 查询确认**
```sql
SELECT id, username, mobile, name, status_enum, delete_enum
FROM auth_account
WHERE tenant_id = 2067161116369793024
AND username NOT IN ('cqanquan','15100110011','jianguan001');
```
**8.2 执行删除**
```sql
DELETE FROM auth_account
WHERE tenant_id = 2067161116369793024
AND username NOT IN ('cqanquan','15100110011','jianguan001');
```
---
### 四、清理顺序总览
| 顺序 | 步骤 | 库 | 主表(删除目标) | 辅助表 | 说明 |
|------|------|-----|-----------------|--------|------|
| 1 | 用户关联角色 | jjb-saas-system | sys_role_user | sys_user | 解除用户与角色的绑定 |
| 2 | 用户关联部门 | jjb-saas-system | sys_user_role_dept | sys_user | 解除用户与部门的绑定 |
| 3 | 角色关联权限组 | jjb-saas-system | sys_role_perms_group | sys_role_user → sys_user | 解除角色与权限组的绑定 |
| 4 | 角色数据 | jjb-saas-system | sys_role | sys_role_user → sys_user | 删除角色本身 |
| 5 | 用户数据 | jjb-saas-system | sys_user | 无 | 删除用户记录 |
| 6 | 账号租户关联 | jjb-saas-auth | auth_account_tenant_rel | auth_account | 解除账号与租户的绑定 |
| 7 | 账号租户密码 | jjb-saas-auth | auth_account_tenant_password | auth_account | 删除租户级密码数据 |
| 8 | 账号数据 | jjb-saas-auth | auth_account | 无 | 删除账号记录 |
> **注意**权限组sys_perms_group和菜单sys_menu属于租户级资源不随用户删除而删除。如需清理权限组和菜单需额外执行。

View File

@ -1,4 +1,4 @@
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.2 Frontend_Env[production] Build_Date[2026/8/11 14:10:31] App_Identifier[safetyEval-h5]"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><meta charset="UTF-8" name="referrer" content="strict-origin-when-cross-origin"/><title>注册</title><script>(function () { <!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.2 Frontend_Env[production] Build_Date[2026/8/13 13:33:47] App_Identifier[safetyEval-h5]"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><meta charset="UTF-8" name="referrer" content="strict-origin-when-cross-origin"/><title>注册</title><script>(function () {
const APP_ENV = { const APP_ENV = {
antd: { antd: {
'ant-prefix': 'micro-temp', 'ant-prefix': 'micro-temp',
@ -126,4 +126,4 @@
} }
mergeParams(); mergeParams();
})(); })();
})();</script><script defer="defer" src="/safetyEval-h5/static/js/33.826ba7bce17f692b.js"></script><script defer="defer" src="/safetyEval-h5/static/js/509.37fefdea880bd79c.js"></script><script defer="defer" src="/safetyEval-h5/static/js/554.dce5d48939bcb600.js"></script><script defer="defer" src="/safetyEval-h5/static/js/main.cac46dc57d12de0f.js"></script><link href="/safetyEval-h5/static/css/main.aeb5d93e210e3449.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto;"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息 */console.log("%c@cqsjjb/scripts@2.0.0-rspack.2 Frontend_Env[production] Build_Date[2026/8/11 14:10:31] App_Identifier[safetyEval-h5] Frontend_Branch[dev-tmp1] Backend_Branch[<branch-name>]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body><script src="https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Widgets/widgets.css" rel="stylesheet"></html> })();</script><script defer="defer" src="/safetyEval-h5/static/js/33.826ba7bce17f692b.js"></script><script defer="defer" src="/safetyEval-h5/static/js/509.37fefdea880bd79c.js"></script><script defer="defer" src="/safetyEval-h5/static/js/554.dce5d48939bcb600.js"></script><script defer="defer" src="/safetyEval-h5/static/js/main.2eba06f91e1a124e.js"></script><link href="/safetyEval-h5/static/css/main.aeb5d93e210e3449.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto;"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息 */console.log("%c@cqsjjb/scripts@2.0.0-rspack.2 Frontend_Env[production] Build_Date[2026/8/13 13:33:47] App_Identifier[safetyEval-h5] Frontend_Branch[dev-tmp1] Backend_Branch[<branch-name>]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body><script src="https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Widgets/widgets.css" rel="stylesheet"></html>

View File

@ -1,4 +1,4 @@
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.3 Frontend_Env[production] Build_Date[2026/8/11 14:09:28] App_Identifier[safetyEval]"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>--</title><script>(function () { <!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.3 Frontend_Env[production] Build_Date[2026/8/13 13:32:42] App_Identifier[safetyEval]"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>--</title><script>(function () {
const APP_ENV = { const APP_ENV = {
antd: { antd: {
'ant-prefix': 'micro-temp', 'ant-prefix': 'micro-temp',
@ -89,4 +89,4 @@
}, },
} }
}</script><script defer="defer" src="/safetyEval/static/js/839.bcb7133530b5a949.js"></script><script defer="defer" src="/safetyEval/static/js/376.edf49837adea7bf5.js"></script><script defer="defer" src="/safetyEval/static/js/419.9f92da006b7be853.js"></script><script defer="defer" src="/safetyEval/static/js/479.ada5b7b837d8d37e.js"></script><script defer="defer" src="/safetyEval/static/js/main.ad05d9b885be96e9.js"></script><link href="/safetyEval/static/css/main.a70edbd2a3f67acc.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息 */console.log("%c@cqsjjb/scripts@2.0.0-rspack.3 Frontend_Env[production] Build_Date[2026/8/11 14:09:28] App_Identifier[safetyEval] Frontend_Branch[dev-tmp1] Backend_Branch[dev]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html> }</script><script defer="defer" src="/safetyEval/static/js/659.d6636bcc2c582a88.js"></script><script defer="defer" src="/safetyEval/static/js/408.f4e5f5bfd46083e5.js"></script><script defer="defer" src="/safetyEval/static/js/419.9f92da006b7be853.js"></script><script defer="defer" src="/safetyEval/static/js/622.829cb8e556e7671f.js"></script><script defer="defer" src="/safetyEval/static/js/main.5da90dcf653df948.js"></script><link href="/safetyEval/static/css/main.75184bbafe746885.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息 */console.log("%c@cqsjjb/scripts@2.0.0-rspack.3 Frontend_Env[production] Build_Date[2026/8/13 13:32:42] App_Identifier[safetyEval] Frontend_Branch[dev-tmp1] Backend_Branch[dev]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html>

View File

@ -2428,11 +2428,10 @@
justify-content: space-between; justify-content: space-between;
} }
.risk-center .stat-card .stat-info .stat-label { .risk-center .stat-card .stat-info .stat-label {
font-size: 0.82rem;
color: #64748b; color: #64748b;
} }
.risk-center .stat-card .stat-info .stat-value { .risk-center .stat-card .stat-info .stat-value {
font-size: 1.75rem; font-size: 28px;
font-weight: 700; font-weight: 700;
line-height: 1.15; line-height: 1.15;
margin-top: 6px; margin-top: 6px;
@ -2447,7 +2446,7 @@
color: #059669; color: #059669;
} }
.risk-center .stat-card .stat-info .stat-hint { .risk-center .stat-card .stat-info .stat-hint {
font-size: 0.75rem; font-size: 12px;
color: #64748b; color: #64748b;
margin-top: 4px; margin-top: 4px;
} }
@ -2458,7 +2457,7 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-size: 1.1rem; font-size: 18px;
flex-shrink: 0; flex-shrink: 0;
} }
.risk-center .source-note { .risk-center .source-note {
@ -2466,7 +2465,7 @@
border: 1px solid #e2e8f0; border: 1px solid #e2e8f0;
border-radius: 8px; border-radius: 8px;
padding: 8px 14px; padding: 8px 14px;
font-size: 0.82rem; font-size: 13px;
color: #64748b; color: #64748b;
margin-bottom: 10px; margin-bottom: 10px;
display: flex; display: flex;
@ -2485,7 +2484,7 @@
border-radius: 999px; border-radius: 999px;
background: #f1f5f9; background: #f1f5f9;
color: #475569; color: #475569;
font-size: 0.68rem; font-size: 11px;
white-space: nowrap; white-space: nowrap;
} }
.risk-center .risk-toolbar { .risk-center .risk-toolbar {
@ -2495,7 +2494,7 @@
margin-bottom: 10px; margin-bottom: 10px;
} }
.risk-center .risk-toolbar .risk-toolbar-left .risk-toolbar-desc { .risk-center .risk-toolbar .risk-toolbar-left .risk-toolbar-desc {
font-size: 0.85rem; font-size: 14px;
color: #64748b; color: #64748b;
} }
.risk-center .risk-toolbar .risk-toolbar-right { .risk-center .risk-toolbar .risk-toolbar-right {
@ -2908,15 +2907,15 @@
margin: -4px 0 16px; margin: -4px 0 16px;
line-height: 1.6; line-height: 1.6;
} }
/* 顶栏汇总 原型 .report-library-summary>div { border-radius: 6px } */ /* 顶栏汇总 - 原型 .report-library-summary>div { border-radius: 6px } */
.erl-summary { .erl-summary {
display: grid; display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr)); grid-template-columns: repeat(5, minmax(0, 1fr));
gap: 0.7rem; gap: 11px;
margin-bottom: 1rem; margin-bottom: 16px;
} }
.erl-summary-item { .erl-summary-item {
padding: 0.8rem; padding: 13px;
background: #fff; background: #fff;
border: 1px solid #dce4ec; border: 1px solid #dce4ec;
border-radius: 6px; border-radius: 6px;
@ -2926,21 +2925,21 @@
display: block; display: block;
} }
.erl-summary-item span { .erl-summary-item span {
font-size: 0.65rem; font-size: 10px;
color: #64748b; color: #64748b;
} }
.erl-summary-item strong { .erl-summary-item strong {
font-size: 1.18rem; font-size: 19px;
margin-top: 0.15rem; margin-top: 2px;
color: #0f172a; color: #0f172a;
font-weight: 600; font-weight: 600;
line-height: 1.2; line-height: 1.2;
} }
/* 报告名称文件图标 原型 .report-file-cell i { border-radius: 4px } */ /* 报告名称文件图标 - 原型 .report-file-cell i { border-radius: 4px } */
.erl-file-cell { .erl-file-cell {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 0.45rem; gap: 7px;
min-width: 0; min-width: 0;
} }
.erl-file-cell i { .erl-file-cell i {
@ -2953,7 +2952,7 @@
border-radius: 4px; border-radius: 4px;
background: #fff1f2; background: #fff1f2;
color: #dc2626; color: #dc2626;
font-size: 0.55rem; font-size: 9px;
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
} }
@ -2973,7 +2972,7 @@
} }
.erl-action-btns { .erl-action-btns {
display: flex; display: flex;
gap: 0.35rem; gap: 6px;
flex-wrap: wrap; flex-wrap: wrap;
} }
/* 原型 .tag { border-radius: 999px } + .tag-success/warning/info/danger */ /* 原型 .tag { border-radius: 999px } + .tag-success/warning/info/danger */
@ -2981,7 +2980,7 @@
display: inline-block; display: inline-block;
padding: 2px 8px; padding: 2px 8px;
border-radius: 999px; border-radius: 999px;
font-size: 0.75rem; font-size: 12px;
font-weight: 500; font-weight: 500;
line-height: 1.4; line-height: 1.4;
background: #f1f5f9; background: #f1f5f9;
@ -3003,12 +3002,12 @@
background: #fee2e2; background: #fee2e2;
color: #991b1b; color: #991b1b;
} }
/* 上传弹窗 原型 .modal { border-radius: var(--radius-lg)=12px } */ /* 上传弹窗 - 原型 .modal { border-radius: var(--radius-lg)=12px } */
.erl-modal-title { .erl-modal-title {
line-height: 1.3; line-height: 1.3;
} }
.erl-modal-subtitle { .erl-modal-subtitle {
margin-top: 0.2rem; margin-top: 3px;
font-size: 12px; font-size: 12px;
color: #64748b; color: #64748b;
font-weight: 400; font-weight: 400;
@ -3020,10 +3019,6 @@
.erl-upload-modal .micro-temp-modal-body { .erl-upload-modal .micro-temp-modal-body {
max-height: 72vh; max-height: 72vh;
overflow-y: auto; overflow-y: auto;
scrollbar-width: none;
/* Firefox */
-ms-overflow-style: none;
/* IE/Edge */
} }
.erl-upload-modal .micro-temp-modal-body::-webkit-scrollbar { .erl-upload-modal .micro-temp-modal-body::-webkit-scrollbar {
width: 0; width: 0;
@ -3032,7 +3027,7 @@
} }
/* 原型单层虚线框,避免 Dragger 内外双边框 */ /* 原型单层虚线框,避免 Dragger 内外双边框 */
.erl-upload-box { .erl-upload-box {
margin-bottom: 1rem; margin-bottom: 16px;
border: 1px dashed #78aee8; border: 1px dashed #78aee8;
border-radius: 7px; border-radius: 7px;
background: #f4f9ff; background: #f4f9ff;
@ -3069,8 +3064,8 @@
display: grid; display: grid;
grid-template-columns: 54px 1fr auto; grid-template-columns: 54px 1fr auto;
align-items: center; align-items: center;
gap: 0.8rem; gap: 13px;
padding: 1rem; padding: 16px;
text-align: left; text-align: left;
} }
/* 原型 .report-library-upload-icon { border-radius: 6px } */ /* 原型 .report-library-upload-icon { border-radius: 6px } */
@ -3083,7 +3078,7 @@
border-radius: 6px; border-radius: 6px;
background: #fff1f2; background: #fff1f2;
color: #dc2626; color: #dc2626;
font-size: 0.7rem; font-size: 11px;
font-weight: 700; font-weight: 700;
} }
.erl-upload-text strong, .erl-upload-text strong,
@ -3092,40 +3087,38 @@
display: block; display: block;
} }
.erl-upload-text strong { .erl-upload-text strong {
font-size: 0.8rem; font-size: 13px;
color: #0f172a; color: #0f172a;
} }
.erl-upload-text p { .erl-upload-text p {
margin: 0.18rem 0; margin: 3px 0;
font-size: 0.64rem; font-size: 10px;
color: #64748b; color: #64748b;
line-height: 1.5; line-height: 1.5;
} }
.erl-upload-text span { .erl-upload-text span {
font-size: 0.65rem; font-size: 10px;
color: #2563eb; color: #2563eb;
} }
/* 原型 .report-library-upload-tip { border-radius: 6px } / tip span { 10px } */ /* 原型 .report-library-upload-tip { border-radius: 6px } / tip span { 10px } */
.erl-upload-tip { .erl-upload-tip {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 0.45rem; gap: 7px;
flex-wrap: wrap; flex-wrap: wrap;
margin-top: 0.8rem; margin-top: 13px;
padding: 0.65rem 0.75rem; padding: 10px 12px;
border-radius: 6px; border-radius: 6px;
background: #f3f6f9; background: #f3f6f9;
} }
.erl-upload-tip strong { .erl-upload-tip strong {
font-size: 0.68rem;
color: #334155; color: #334155;
} }
.erl-upload-tip span { .erl-upload-tip span {
padding: 0.2rem 0.42rem; padding: 3px 7px;
border-radius: 10px; border-radius: 10px;
background: #fff; background: #fff;
color: #64748b; color: #64748b;
font-size: 0.58rem;
} }
.erl-detail-actions { .erl-detail-actions {
display: flex; display: flex;
@ -3133,6 +3126,50 @@
flex-wrap: wrap; flex-wrap: wrap;
margin-top: 16px; margin-top: 16px;
} }
/* 变更时间2026-08-11 查看详情改为与「上传历史报告」一致的排版样式 */
.erl-detail-form {
margin-top: 16px;
}
.erl-detail-item {
display: flex;
align-items: baseline;
padding: 8px 10px;
background: #f8fafc;
border: 1px solid #eef2f7;
border-radius: 8px;
min-height: 40px;
}
.erl-detail-item label {
flex: 0 0 84px;
color: #64748b;
font-size: 13px;
}
.erl-detail-item span {
flex: 1;
color: #1f2937;
font-size: 14px;
word-break: break-all;
}
/* 只读查看态的正式报告文件框:弱化边框,去掉上传交互 */
.erl-upload-box-view {
border-style: solid;
border-color: #e2e8f0;
background: #f8fafc;
}
.erl-detail-attachments {
margin-top: 16px;
}
.erl-detail-attachments .erl-detail-attachments-block {
margin-bottom: 12px;
}
.erl-detail-attachments .erl-detail-attachments-title {
font-size: 13px;
color: #64748b;
margin-bottom: 6px;
}
.erl-detail-attachments .ant-btn-link {
padding-left: 0;
}
.erl-loading { .erl-loading {
text-align: center; text-align: center;
padding: 40px 0; padding: 40px 0;
@ -3764,34 +3801,6 @@
background: #fee2e2; background: #fee2e2;
color: #991b1b; color: #991b1b;
} }
/* 原型 modal宽 980、圆角 12、头/底部分割线 */
.redb-modal .micro-temp-modal-content {
border-radius: 12px;
overflow: hidden;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
}
.redb-modal .micro-temp-modal-header {
padding: 1rem 1.5rem;
border-bottom: 1px solid #e2e8f0;
margin-bottom: 0;
}
.redb-modal .micro-temp-modal-body {
padding: 1.5rem;
max-height: 72vh;
overflow-y: auto;
scrollbar-width: none;
-ms-overflow-style: none;
}
.redb-modal .micro-temp-modal-body::-webkit-scrollbar {
width: 0;
height: 0;
display: none;
}
.redb-modal .micro-temp-modal-footer {
padding: 1rem 1.5rem;
border-top: 1px solid #e2e8f0;
margin-top: 0;
}
/* 原型 .reg-modal-section */ /* 原型 .reg-modal-section */
.redb-modal-section { .redb-modal-section {
border: 1px solid #e2e8f0; border: 1px solid #e2e8f0;
@ -3883,6 +3892,19 @@
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
} }
.redb-spotcheck-desc {
font-size: 13px;
color: #64748b;
margin-bottom: 16px;
line-height: 1.6;
}
.redb-spotcheck-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 12px;
}
.insp-page { .insp-page {
min-width: 0; min-width: 0;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -28,6 +28,8 @@
"@eigenpal/docx-editor-react": "^1.9.0", "@eigenpal/docx-editor-react": "^1.9.0",
"@rc-component/motion": "^1.0.0", "@rc-component/motion": "^1.0.0",
"@rc-component/util": "^1.11.1", "@rc-component/util": "^1.11.1",
"pizzip": "latest",
"docxtemplater": "latest",
"antd": "^5.29.2", "antd": "^5.29.2",
"china-division": "^2.7.0", "china-division": "^2.7.0",
"dayjs": "^1.11.7", "dayjs": "^1.11.7",