数据库清理文档
parent
cef933f76f
commit
4523ab9e40
|
|
@ -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)属于租户级资源,不随用户删除而删除。如需清理权限组和菜单,需额外执行。
|
||||
|
|
@ -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 = {
|
||||
antd: {
|
||||
'ant-prefix': 'micro-temp',
|
||||
|
|
@ -126,4 +126,4 @@
|
|||
}
|
||||
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>
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -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 = {
|
||||
antd: {
|
||||
'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>
|
||||
|
|
@ -2428,11 +2428,10 @@
|
|||
justify-content: space-between;
|
||||
}
|
||||
.risk-center .stat-card .stat-info .stat-label {
|
||||
font-size: 0.82rem;
|
||||
color: #64748b;
|
||||
}
|
||||
.risk-center .stat-card .stat-info .stat-value {
|
||||
font-size: 1.75rem;
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
line-height: 1.15;
|
||||
margin-top: 6px;
|
||||
|
|
@ -2447,7 +2446,7 @@
|
|||
color: #059669;
|
||||
}
|
||||
.risk-center .stat-card .stat-info .stat-hint {
|
||||
font-size: 0.75rem;
|
||||
font-size: 12px;
|
||||
color: #64748b;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
|
@ -2458,7 +2457,7 @@
|
|||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 1.1rem;
|
||||
font-size: 18px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.risk-center .source-note {
|
||||
|
|
@ -2466,7 +2465,7 @@
|
|||
border: 1px solid #e2e8f0;
|
||||
border-radius: 8px;
|
||||
padding: 8px 14px;
|
||||
font-size: 0.82rem;
|
||||
font-size: 13px;
|
||||
color: #64748b;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
|
|
@ -2485,7 +2484,7 @@
|
|||
border-radius: 999px;
|
||||
background: #f1f5f9;
|
||||
color: #475569;
|
||||
font-size: 0.68rem;
|
||||
font-size: 11px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.risk-center .risk-toolbar {
|
||||
|
|
@ -2495,7 +2494,7 @@
|
|||
margin-bottom: 10px;
|
||||
}
|
||||
.risk-center .risk-toolbar .risk-toolbar-left .risk-toolbar-desc {
|
||||
font-size: 0.85rem;
|
||||
font-size: 14px;
|
||||
color: #64748b;
|
||||
}
|
||||
.risk-center .risk-toolbar .risk-toolbar-right {
|
||||
|
|
@ -2908,15 +2907,15 @@
|
|||
margin: -4px 0 16px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
/* 顶栏汇总 — 原型 .report-library-summary>div { border-radius: 6px } */
|
||||
/* 顶栏汇总 - 原型 .report-library-summary>div { border-radius: 6px } */
|
||||
.erl-summary {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, minmax(0, 1fr));
|
||||
gap: 0.7rem;
|
||||
margin-bottom: 1rem;
|
||||
gap: 11px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.erl-summary-item {
|
||||
padding: 0.8rem;
|
||||
padding: 13px;
|
||||
background: #fff;
|
||||
border: 1px solid #dce4ec;
|
||||
border-radius: 6px;
|
||||
|
|
@ -2926,21 +2925,21 @@
|
|||
display: block;
|
||||
}
|
||||
.erl-summary-item span {
|
||||
font-size: 0.65rem;
|
||||
font-size: 10px;
|
||||
color: #64748b;
|
||||
}
|
||||
.erl-summary-item strong {
|
||||
font-size: 1.18rem;
|
||||
margin-top: 0.15rem;
|
||||
font-size: 19px;
|
||||
margin-top: 2px;
|
||||
color: #0f172a;
|
||||
font-weight: 600;
|
||||
line-height: 1.2;
|
||||
}
|
||||
/* 报告名称文件图标 — 原型 .report-file-cell i { border-radius: 4px } */
|
||||
/* 报告名称文件图标 - 原型 .report-file-cell i { border-radius: 4px } */
|
||||
.erl-file-cell {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.45rem;
|
||||
gap: 7px;
|
||||
min-width: 0;
|
||||
}
|
||||
.erl-file-cell i {
|
||||
|
|
@ -2953,7 +2952,7 @@
|
|||
border-radius: 4px;
|
||||
background: #fff1f2;
|
||||
color: #dc2626;
|
||||
font-size: 0.55rem;
|
||||
font-size: 9px;
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
|
@ -2973,7 +2972,7 @@
|
|||
}
|
||||
.erl-action-btns {
|
||||
display: flex;
|
||||
gap: 0.35rem;
|
||||
gap: 6px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
/* 原型 .tag { border-radius: 999px } + .tag-success/warning/info/danger */
|
||||
|
|
@ -2981,7 +2980,7 @@
|
|||
display: inline-block;
|
||||
padding: 2px 8px;
|
||||
border-radius: 999px;
|
||||
font-size: 0.75rem;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
line-height: 1.4;
|
||||
background: #f1f5f9;
|
||||
|
|
@ -3003,12 +3002,12 @@
|
|||
background: #fee2e2;
|
||||
color: #991b1b;
|
||||
}
|
||||
/* 上传弹窗 — 原型 .modal { border-radius: var(--radius-lg)=12px } */
|
||||
/* 上传弹窗 - 原型 .modal { border-radius: var(--radius-lg)=12px } */
|
||||
.erl-modal-title {
|
||||
line-height: 1.3;
|
||||
}
|
||||
.erl-modal-subtitle {
|
||||
margin-top: 0.2rem;
|
||||
margin-top: 3px;
|
||||
font-size: 12px;
|
||||
color: #64748b;
|
||||
font-weight: 400;
|
||||
|
|
@ -3020,10 +3019,6 @@
|
|||
.erl-upload-modal .micro-temp-modal-body {
|
||||
max-height: 72vh;
|
||||
overflow-y: auto;
|
||||
scrollbar-width: none;
|
||||
/* Firefox */
|
||||
-ms-overflow-style: none;
|
||||
/* IE/Edge */
|
||||
}
|
||||
.erl-upload-modal .micro-temp-modal-body::-webkit-scrollbar {
|
||||
width: 0;
|
||||
|
|
@ -3032,7 +3027,7 @@
|
|||
}
|
||||
/* 原型单层虚线框,避免 Dragger 内外双边框 */
|
||||
.erl-upload-box {
|
||||
margin-bottom: 1rem;
|
||||
margin-bottom: 16px;
|
||||
border: 1px dashed #78aee8;
|
||||
border-radius: 7px;
|
||||
background: #f4f9ff;
|
||||
|
|
@ -3069,8 +3064,8 @@
|
|||
display: grid;
|
||||
grid-template-columns: 54px 1fr auto;
|
||||
align-items: center;
|
||||
gap: 0.8rem;
|
||||
padding: 1rem;
|
||||
gap: 13px;
|
||||
padding: 16px;
|
||||
text-align: left;
|
||||
}
|
||||
/* 原型 .report-library-upload-icon { border-radius: 6px } */
|
||||
|
|
@ -3083,7 +3078,7 @@
|
|||
border-radius: 6px;
|
||||
background: #fff1f2;
|
||||
color: #dc2626;
|
||||
font-size: 0.7rem;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
}
|
||||
.erl-upload-text strong,
|
||||
|
|
@ -3092,40 +3087,38 @@
|
|||
display: block;
|
||||
}
|
||||
.erl-upload-text strong {
|
||||
font-size: 0.8rem;
|
||||
font-size: 13px;
|
||||
color: #0f172a;
|
||||
}
|
||||
.erl-upload-text p {
|
||||
margin: 0.18rem 0;
|
||||
font-size: 0.64rem;
|
||||
margin: 3px 0;
|
||||
font-size: 10px;
|
||||
color: #64748b;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.erl-upload-text span {
|
||||
font-size: 0.65rem;
|
||||
font-size: 10px;
|
||||
color: #2563eb;
|
||||
}
|
||||
/* 原型 .report-library-upload-tip { border-radius: 6px } / tip span { 10px } */
|
||||
.erl-upload-tip {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.45rem;
|
||||
gap: 7px;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 0.8rem;
|
||||
padding: 0.65rem 0.75rem;
|
||||
margin-top: 13px;
|
||||
padding: 10px 12px;
|
||||
border-radius: 6px;
|
||||
background: #f3f6f9;
|
||||
}
|
||||
.erl-upload-tip strong {
|
||||
font-size: 0.68rem;
|
||||
color: #334155;
|
||||
}
|
||||
.erl-upload-tip span {
|
||||
padding: 0.2rem 0.42rem;
|
||||
padding: 3px 7px;
|
||||
border-radius: 10px;
|
||||
background: #fff;
|
||||
color: #64748b;
|
||||
font-size: 0.58rem;
|
||||
}
|
||||
.erl-detail-actions {
|
||||
display: flex;
|
||||
|
|
@ -3133,6 +3126,50 @@
|
|||
flex-wrap: wrap;
|
||||
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 {
|
||||
text-align: center;
|
||||
padding: 40px 0;
|
||||
|
|
@ -3764,34 +3801,6 @@
|
|||
background: #fee2e2;
|
||||
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 */
|
||||
.redb-modal-section {
|
||||
border: 1px solid #e2e8f0;
|
||||
|
|
@ -3883,6 +3892,19 @@
|
|||
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 {
|
||||
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
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -28,6 +28,8 @@
|
|||
"@eigenpal/docx-editor-react": "^1.9.0",
|
||||
"@rc-component/motion": "^1.0.0",
|
||||
"@rc-component/util": "^1.11.1",
|
||||
"pizzip": "latest",
|
||||
"docxtemplater": "latest",
|
||||
"antd": "^5.29.2",
|
||||
"china-division": "^2.7.0",
|
||||
"dayjs": "^1.11.7",
|
||||
|
|
|
|||
Loading…
Reference in New Issue