修改配置

dev
huwei 2026-07-01 17:13:41 +08:00
parent f53cdc289f
commit a07ec51a81
36 changed files with 2806 additions and 1315 deletions

View File

@ -0,0 +1,290 @@
# 文件上传接口文档
## 目录
- [接口概览](#接口概览)
- [通用说明](#通用说明)
- [上传接口(内部)](#上传接口内部)
- [文件管理接口](#文件管理接口)
- [内外部调用规则](#内外部调用规则)
- [错误码](#错误码)
---
## 接口概览
| 类别 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 上传 | `POST` | `/file/upload` | 内部单个上传 |
| 上传 | `POST` | `/file/upload/batch` | 内部批量上传 |
| 管理 | `GET` | `/file-storage/presigned-url/{fileId}` | 获取签名 URL |
| 管理 | `GET` | `/file-storage/info/{fileId}` | 获取文件信息 |
| 管理 | `GET` | `/file-storage/download/{fileId}` | 下载文件 |
| 管理 | `GET` | `/file-storage/list-all` | 全部文件列表 |
| 管理 | `GET` | `/file-storage/list-by-creator` | 按上传者查询 |
| 管理 | `DELETE` | `/file-storage/delete/{fileId}` | 删除文件 |
| 管理 | `DELETE` | `/file-storage/delete-batch` | 批量删除 |
---
## 通用说明
### 基础路径
```
开发环境: http://localhost:{port}
生产环境: 按实际部署域名
```
### 统一响应体
```json
{
"success": true,
"code": "0",
"message": "ok",
"data": { ... }
}
```
### 文件上传大小限制
| 限制项 | 值 |
|--------|-----|
| 单文件上限 | **100 MB** |
| 单次请求上限 | **500 MB** |
### 支持文件类型
不限制文件类型,支持文本、图片、音频、视频等所有常见格式。
---
## 上传接口(内部)
> **所有上传接口均为内部接口**需要携带有效登录凭证Cookie / Token
> 上传完成后自动将文件元信息写入 `filestorage` 表。
---
### 1. 内部单个上传
```
POST /file/upload
```
**请求**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `file` | MultipartFile (form-data) | 是 | 上传的文件 |
**示例**
```bash
curl -X POST "http://localhost:8080/file/upload" \
-H "Cookie: ..." \
-F "file=@/path/to/document.pdf"
```
**成功响应**
```json
{
"success": true,
"code": "0",
"message": "ok",
"data": {
"id": 1001,
"url": "https://test-dragon-yf-pub.oss-cn-hangzhou.aliyuncs.com/jjb/xxx.pdf",
"presignedUrl": null,
"size": 204800,
"originalFilename": "document.pdf",
"ext": "pdf",
"contentType": "application/pdf",
"creatorName": "张三",
"createdTime": "2026-06-30T10:30:00"
}
}
```
| 响应字段 | 类型 | 说明 |
|----------|------|------|
| `id` | Integer | 文件记录主键,后续管理操作依赖此 ID |
| `url` | String | OSS 文件永久访问路径 |
| `presignedUrl` | String | 上传时返回 `null`,需通过签名 URL 接口获取 |
| `size` | Long | 文件大小(字节) |
| `originalFilename` | String | 上传时的原始文件名 |
| `ext` | String | 文件扩展名 |
| `contentType` | String | MIME 类型 |
| `creatorName` | String | 创建人姓名(当前登录用户) |
| `createdTime` | String | 文件创建时间 |
---
### 2. 内部批量上传
```
POST /file/upload/batch
```
**请求**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `files` | List\<MultipartFile\> (form-data) | 是 | 多个上传文件(同名参数) |
**示例**
```bash
curl -X POST "http://localhost:8080/file/upload/batch" \
-H "Cookie: ..." \
-F "files=@/path/to/file1.png" \
-F "files=@/path/to/file2.png" \
-F "files=@/path/to/file3.png"
```
**成功响应**
```json
{
"success": true,
"code": "0",
"message": "ok",
"data": [
{ "id": 1001, "url": "...", "size": 204800, "originalFilename": "file1.png", ... },
{ "id": 1002, "url": "...", "size": 307200, "originalFilename": "file2.png", ... }
]
}
```
> **部分成功策略**:批量上传时,若某个文件上传失败,该文件被跳过,不影响其余文件的上传。
---
## 文件管理接口
### 3. 获取签名 URL
```
GET /file-storage/presigned-url/{fileId}
```
返回带 1 小时有效期的临时访问链接,用于文件预览或安全分发。
**成功响应**
```json
{
"success": true,
"data": {
"id": 1001,
"url": "https://test-dragon-yf-pub.oss-cn-hangzhou.aliyuncs.com/jjb/xxx.pdf",
"presignedUrl": "https://test-dragon-yf-pub.oss-cn-hangzhou.aliyuncs.com/jjb/xxx.pdf?Expires=...&OSSAccessKeyId=...&Signature=...",
"size": 204800,
"originalFilename": "document.pdf",
"contentType": "application/pdf",
"creatorName": "张三",
"createdTime": "2026-06-30T10:30:00"
}
}
```
### 4. 获取文件信息
```
GET /file-storage/info/{fileId}
```
仅返回文件元信息,不主动生成签名 URL。
### 5. 下载文件
```
GET /file-storage/download/{fileId}
```
以附件形式流式下载文件,`Content-Disposition: attachment`。
### 6. 删除文件
```
DELETE /file-storage/delete/{fileId}
```
同时删除 OSS 文件与 `filestorage` 表记录,不可恢复。
### 7. 批量删除
```
DELETE /file-storage/delete-batch
Content-Type: application/json
[1001, 1002, 1003]
```
### 8. 列表查询
| 接口 | 说明 |
|------|------|
| `GET /file-storage/list-all` | 查询所有文件记录 |
| `GET /file-storage/list-by-creator?creatorUid=xxx` | 按上传者 UID 查询 |
---
## 内外部调用规则
### 核心原则
| 维度 | 说明 |
|------|------|
| **上传写入** | 必须通过上传接口,由接口自动同步到 `filestorage` 表 |
| **表管理** | `filestorage` 表仅提供读取和删除,不允许直接通过 API 新增/修改记录 |
| **安全性** | 文件不直接暴露 OSS 原始 URL前端通过签名 URL 获取临时访问权限 |
### 调用流程图
```
┌─────────────┐ POST /file/upload ┌─────────────┐
│ 前端 / │ ──────────────────────────▶ │ API 层 │
│ 调用方 │ │ │
└─────────────┘ └──────┬──────┘
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 上传 OSS │ │ 写表同步 │ │ 获取 ID │
│(x-file- │ │filestorage│ │ 返回前端 │
│ storage) │ │ 表记录 │ │ │
└──────────┘ └──────────┘ └──────────┘
```
### 创建人区分(扩展预留)
当前所有上传接口均为**内部接口**,创建人取自当前登录用户。扩展场景说明:
| 场景 | 接口路径 | 创建人 | 适用情况 |
|------|----------|--------|----------|
| 内部用户上传 | `/file/upload` | 当前登录用户 | 业务操作中上传附件、素材等 |
| > 公开/匿名通道 | `/file/upload/public` | system | 未登录用户提交(可在需要时暴露) |
### 使用规范
1. **禁止绕过上传接口直接操作表**`filestorage` 表的新增只能由上传接口内部完成,外部系统不允许直接 INSERT
2. **文件访问走签名 URL**`presignedUrl` 有效期 1 小时,到期后需重新获取
3. **删除不可逆**:删除操作同时清理 OSS 和 DB调用前需做二次确认
---
## 错误码
| 错误码 | 说明 |
|--------|------|
| `03-01-001` | 文件上传失败 |
| `03-01-002` | 上传文件为空 |
| `03-01-003` | 文件不存在 |
| `03-01-004` | 文件删除失败 |
| `03-01-005` | 文件下载失败 |
| `03-01-006` | OSS 操作异常 |
| `03-01-007` | 文件地址生成失败 |
| `03-01-008` | 文件大小超出限制 |

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@ -61,6 +61,11 @@
<version>2021.0.5.0</version>
</dependency>
<!-- Spring Cloud Bootstrap加载 bootstrap.yml -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- Spring Cloud LoadBalancerFeign 服务名调用需要) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
@ -100,3 +105,6 @@
</plugins>
</build>
</project>

View File

@ -1,87 +0,0 @@
# =============================================
# 开发/测试环境配置 (Dev)
# 激活方式: -Dspring.profiles.active=dev
# =============================================
spring:
config:
import:
- optional:nacos:common.yml?refreshEnabled=true
- optional:nacos:safety-eval-service.yml
cloud:
nacos:
discovery:
server-addr: 192.168.20.100:30290
namespace: jjb-dragon
config:
server-addr: 192.168.20.100:30290
namespace: jjb-dragon
file-extension: yml
shared-configs:
- data-id: config-spring.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-actuator.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-cache.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-sdk.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-sdk-server.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-log.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-job.yml
group: DEFAULT_GROUP
refresh: false
- data-id: config-mq.yml
group: DEFAULT_GROUP
refresh: false
- data-id: config-flyway.yml
group: DEFAULT_GROUP
refresh: false
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.20.100:33080/jjb_saas_safety_eval?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: Mysql@zcloud33080
redis:
host: 192.168.20.100
port: 6379
password: Zcloud@zcloud2026
database: 0
timeout: 10000
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: -1
dubbo:
registry:
address: nacos://192.168.20.100:30290
parameters:
namespace: jjb-dragon-facade
protocol:
port: 20895
dragon:
gateway:
baseurl: http://192.168.20.100
res: http://192.168.20.100
is-system: 'false'
system-url: http://jjb-saas-system
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
logging:
level:
org.qinan.safetyeval: debug

View File

@ -1,135 +0,0 @@
# =============================================
# 本地开发环境配置 (Local)
# 激活方式: -Dspring.profiles.active=local 或 IDEA Run Configuration
# =============================================
spring:
config:
import:
- optional:nacos:common.yml?refreshEnabled=true
- optional:nacos:safety-eval-service.yml
cloud:
nacos:
discovery:
enabled: true
server-addr: 192.168.20.100:30290
namespace: jjb-dragon
config:
server-addr: 192.168.20.100:30290
namespace: jjb-dragon
file-extension: yml
shared-configs:
- data-id: config-spring.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-actuator.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-cache.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-sdk.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-sdk-server.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-log.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-job.yml
group: DEFAULT_GROUP
refresh: false
- data-id: config-mq.yml
group: DEFAULT_GROUP
refresh: false
- data-id: config-flyway.yml
group: DEFAULT_GROUP
refresh: false
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.20.100:33080/jjb_saas_safety_eval?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: Mysql@zcloud33080
redis:
host: 192.168.20.100
port: 6379
password: Zcloud@zcloud2026
database: 0
timeout: 10000
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: -1
dubbo:
registry:
address: nacos://192.168.20.100:30290
parameters:
namespace: jjb-dragon-facade
protocol:
port: 20895
name: dubbo
dragon:
gateway:
baseurl: http://192.168.20.100
res: http://192.168.20.100
is-system: 'false'
system-url: http://jjb-saas-system
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
logging:
level:
org.qinan.safetyeval: debug
# 本地联调:企业信息管理接口免鉴权(覆盖 application.yml 中 security 配置)
safety-eval:
gbs-user-sync:
fail-fast: true
user-facade-url: ${GBS_USER_FACADE_URL:dubbo://192.168.20.100:32080}
security:
permit-all-paths:
- /v2/api-docs
- /v3/api-docs
permit-all-prefixes:
- /swagger-ui
- /swagger-resources
- /webjars
- /public/org-personnel
- /test
- /tmp
- /mock
- /org-info
- /org-department
- /org-position
- /org-qualification
- /org-personnel
- /org-personnel-cert
- /org-personnel-change
- /org-resign-apply
- /org-equipment
- /qual-filing
- /qual-filing-change
- /qual-filing-change-detail
- /qual-filing-commitment
- /qual-filing-equipment
- /qual-filing-material
- /qual-filing-personnel
- /qual-filing-personnel-cert
- /file-storage
- /file
# 本地联调默认用户上下文(与 init-v2.sql 测试数据 @org_id=1 @tenant_id=1001 一致)
public-api:
system-user-id: 1
system-user-name: local-dev
tenant-id: 1001
org-id: 1
def:
passwrod: a123456
publicKey: 0402df2195296d4062ac85ad766994d73e871b887e18efb9a9a06b4cebc72372869b7da6c347c129dee2b46a0f279ff066b01c76208c2a052af75977c722a2ccee

View File

@ -1,88 +0,0 @@
# =============================================
# 生产环境配置 (Prod)
# 激活方式: -Dspring.profiles.active=prod
# K8s集群内部署使用服务名寻址
# =============================================
spring:
config:
import:
- nacos:common.yml?refreshEnabled=true
- nacos:safety-eval-service.yml
cloud:
nacos:
discovery:
server-addr: prod-nacos:8848
namespace: jjb-dragon
username: nacos
password: u9Hc7tLFBY
config:
server-addr: prod-nacos:8848
namespace: jjb-dragon
username: nacos
password: u9Hc7tLFBY
file-extension: yml
shared-configs:
- data-id: config-spring.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-actuator.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-cache.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-sdk.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-sdk-server.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-log.yml
group: DEFAULT_GROUP
refresh: true
- data-id: config-job.yml
group: DEFAULT_GROUP
refresh: false
- data-id: config-mq.yml
group: DEFAULT_GROUP
refresh: false
- data-id: config-flyway.yml
group: DEFAULT_GROUP
refresh: false
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://prod-mysql:3306/jjb_saas_safety_eval?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: Mysql@zcloud33080
redis:
host: prod-redis
port: 6379
password: Zcloud@zcloud2026
database: 0
timeout: 10000
lettuce:
pool:
max-active: 16
max-idle: 8
min-idle: 4
max-wait: -1
dubbo:
registry:
address: nacos://prod-nacos:8848
parameters:
namespace: jjb-dragon-facade
protocol:
port: 20895
dragon:
gateway:
baseurl: http://jjb-saas-gateway
res: http://jjb-saas-gateway
is-system: 'false'
system-url: http://jjb-saas-system
logging:
level:
org.qinan.safetyeval: info

View File

@ -1,107 +0,0 @@
# =============================================
# 安全评价业务服务 - 公共配置(所有环境共享)
# =============================================
application:
name: jjb-saas-cq-anquan
version:
gateway: cqanquan
cn-name: 重庆安全评价
server:
port: 8095
servlet:
context-path: /safety-eval
spring:
application:
name: safety-eval-service
mvc:
pathmatch:
matching-strategy: ant_path_matcher
profiles:
active: local
config:
import:
- classpath:sdk-prod2.yml
servlet:
multipart:
enabled: true
max-file-size: 100MB
max-request-size: 500MB
# ---------- MyBatis Plus ----------
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
global-config:
db-config:
id-type: assign_id
logic-delete-field: deleteEnum
logic-delete-value: "true"
logic-not-delete-value: "false"
configuration:
map-underscore-to-camel-case: true
# ---------- 文件存储(阿里云 OSS ----------
dromara:
x-file-storage:
default-platform: aliyun-oss-1
thumbnail-suffix: "" # 不使用缩略图
aliyun-oss:
- platform: aliyun-oss-1
enable-storage: true
access-key: LTAI5tFerUgBCLEbXtinDD6d
secret-key: XyGVNV2RvW8U3ceoJDiy9A9oLvCGYp
end-point: oss-cn-hangzhou.aliyuncs.com
bucket-name: test-dragon-yf-pub
domain: https://test-dragon-yf-pub.oss-cn-hangzhou.aliyuncs.com/
base-path: jjb/
# ---------- Dubbo环境无关的公共部分各profile覆盖地址/端口) ----------
dubbo:
application:
name: safety-eval-service
service-discovery:
migration: FORCE_INTERFACE
registry:
timeout: 20000
check: false
filter: providerContextFilter
scan:
base-packages: org.qinan.safetyeval
protocol:
name: dubbo
consumer:
timeout: 20000
check: false
filter: consumerContextFilter
safety-eval:
gbs-user-sync:
fail-fast: true
user-facade-url: ${GBS_USER_FACADE_URL:}
security:
# Exact paths that can be accessed without authentication.
permit-all-paths:
- /v2/api-docs
- /v3/api-docs
# A prefix automatically matches itself and all child paths.
permit-all-prefixes:
- /swagger-ui
- /swagger-resources
- /webjars
- /public
- /test
- /tmp
- /mock
# These rules take priority over permit-all rules when paths overlap.
authenticated-paths: []
authenticated-prefixes: []
public-api:
system-user-id: ${PUBLIC_API_SYSTEM_USER_ID:0}
system-user-name: ${PUBLIC_API_SYSTEM_USER_NAME:system}
tenant-id: ${PUBLIC_API_TENANT_ID:0}
org-id: ${PUBLIC_API_ORG_ID:0}
attachment:
default-url: https://s1.aigei.com/prevfiles/6f2754563be2491bad7c957904cd7d2a.jpg?e=2051020800&token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:CR60zg7VKDp-jUWyYls_rdvyQMM=

View File

@ -1,15 +1,38 @@
# =============================================
# [已废弃] 此文件不再生效
# =============================================
# 原因: 项目未引入 spring-cloud-starter-bootstrap 依赖,
# Spring Cloud 2021.x 默认不加载 bootstrap 上下文。
#
# 已迁移至:
# - application-{profile}.yml → Nacos 连接信息与 spring.config.import
#
# 如需恢复 bootstrap 机制,请在 safety-eval-start/pom.xml 中添加:
# <dependency>
# <groupId>org.springframework.cloud</groupId>
# <artifactId>spring-cloud-starter-bootstrap</artifactId>
# </dependency>
# =============================================
spring:
profiles:
active: ${SPRING_PROFILES_ACTIVE:local}
cloud:
nacos:
config:
import-check:
enabled: false
---
spring:
config:
activate:
on-profile: local
import:
- classpath:nacos.yml
- classpath:nacos/config-common.yml
- classpath:nacos/config-port.yml
- classpath:nacos/config-mq.yml
- classpath:nacos/config-log.yml
- classpath:nacos/config-actuator.yml
- classpath:nacos/config-job.yml
- classpath:nacos/config-mysql.yml
- classpath:nacos/config-redis.yml
- classpath:nacos/config-cache.yml
- classpath:nacos/config-spring.yml
- classpath:nacos/config-mybatis.yml
- classpath:nacos/config-sdk.yml
- classpath:sdk.yml
- classpath:swagger.yml
---
spring:
config:
activate:
on-profile: prod
import:
- classpath:nacos-prod.yml
- classpath:sdk-prod.yml
- classpath:swagger.yml

View File

@ -0,0 +1,41 @@
nacos:
url: prod-nacos:8848
namespace: jjb-dragon
application:
name: safety-eval-service
version:
gateway: safety-eval
cn-name: 重庆安全评价
spring:
application:
name: ${application.name}${application.version}
cloud:
nacos:
config:
username: nacos
password: u9Hc7tLFBY
namespace: ${nacos.namespace}
server-addr: ${nacos.url}
file-extension: yml
shared-configs:
- config-common.yml
- config-port.yml
- config-mq.yml
- config-log.yml
- config-sdk-server.yml
- config-actuator.yml
- config-job.yml
- config-mysql.yml
- config-redis.yml
- config-cache.yml
- config-spring.yml
- config-mybatis.yml
- config-sdk.yml
- config-flyway.yml
discovery:
server-addr: ${spring.cloud.nacos.config.server-addr}
namespace: ${spring.cloud.nacos.config.namespace}
username: nacos
password: u9Hc7tLFBY

View File

@ -0,0 +1,38 @@
nacos:
url: 192.168.20.100:30290
namespace: jjb-dragon
application:
name: safety-eval-service
version:
gateway: safety-eval
cn-name: 重庆安全评价
spring:
application:
name: ${application.name}${application.version}
cloud:
nacos:
config:
namespace: ${nacos.namespace}
server-addr: ${nacos.url}
file-extension: yml
shared-configs:
- config-common.yml
- config-port.yml
- config-mq.yml
- config-log.yml
- config-sdk-server.yml
- config-actuator.yml
- config-job.yml
- config-mysql.yml
- config-redis.yml
- config-cache.yml
- config-spring.yml
- config-mybatis.yml
- config-sdk.yml
- config-flyway.yml
discovery:
enabled: true
server-addr: ${spring.cloud.nacos.config.server-addr}
namespace: ${spring.cloud.nacos.config.namespace}

View File

@ -1,12 +1,12 @@
common:
common:
mysql:
host: 192.168.2.166
port: 3306
host: 192.168.20.100
port: 33080
username: root
password: root
password: Mysql@zcloud33080
redis:
host: 10.43.253.4
password: jjb123456
host: 192.168.20.100
password: Zcloud@zcloud2026
port: 6379
mq:
host: 10.43.163.23:9876
@ -17,28 +17,19 @@ common:
gateway:
network:
http:
#网关的外网访问地址 必须配置为HTTPS协议
external: https://testdragon.cqjjb.cn
#网关的内网访问地址 固定配置为http://jjb-saas-gateway
intranet: http://10.43.250.65
external: http://192.168.20.100
intranet: http://192.168.20.100
wx:
#webSocket外网地址
external: wx://testdragon.cqjjb.cn
swagger:
#是否打开swagger 测试及UAT配置为true,生产环境配置为false
enabled: true
base:
# base应用访问外网访问地址
host-url: http://10.43.12.158
desk:
# desk工程的外网地址
host-url: http://10.43.12.158
login:
# login工程的外网访问地址
host-url: http://10.43.12.158
#所有的前端域名配置 避免iframe跨域
x-frame-options: ${common.desk.host-url}/ ${common.login.host-url}/ ${common.base.host-url}/ ${common.gateway.network.http.external}/ http://10.43.250.65/
k8s:
namespace: test-dragon
namespace: test-dragon

View File

@ -1,11 +1,13 @@
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml,classpath*:mapper/**/*Mapper.xml
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
type-handlers-package: com.jjb.saas.framework.datascope.handler
global-config:
banner: false
db-config:
id-type: assign_id
logic-delete-value: 1
logic-not-delete-value: 0
logic-delete-field: deleteEnum
logic-delete-value: "true"
logic-not-delete-value: "false"
configuration:
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

View File

@ -1,6 +1,12 @@
mysql:
db: ${spring.application.name}
mysql:
db: jjb_saas_safety_eval
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${common.mysql.host}:${common.mysql.port}/${mysql.db}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true
username: ${common.mysql.username}
password: ${common.mysql.password}
shardingsphere:
druid:
username: admin
@ -12,13 +18,12 @@ spring:
show: true
enabled: true
masterslave:
name: ms # 名字,任意,需要保证唯一
master-data-source-name: master # 主库数据源
slave-data-source-names: slave-1 # 从库数据源
name: ms
master-data-source-name: master
slave-data-source-names: slave-1
datasource:
names: master,slave-1
master:
#url: jdbc:mysql://10.43.123.226:3306/${spring.application.name}?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
url: jdbc:mysql://${common.mysql.host}:${common.mysql.port}/${mysql.db}?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: ${common.mysql.username}
password: ${common.mysql.password}
@ -27,28 +32,19 @@ spring:
initial-size: 6
min-idle: 4
maxActive: 40
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
#Oracle需要打开注释
#validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters去掉后监控界面sql无法统计'wall'用于防火墙
filters: slf4j
# 通过connectProperties属性来打开mergeSql功能慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
wall:
multi-statement-allow: true
slave-1:
# url: jdbc:mysql://10.43.123.226:3306/${spring.application.name}?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
url: jdbc:mysql://${common.mysql.host}:${common.mysql.port}/${mysql.db}?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: ${common.mysql.username}
password: ${common.mysql.password}
@ -57,23 +53,15 @@ spring:
initial-size: 6
min-idle: 4
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
#Oracle需要打开注释
#validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters去掉后监控界面sql无法统计'wall'用于防火墙,stat已去掉
filters: slf4j
# 通过connectProperties属性来打开mergeSql功能慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
wall:
multi-statement-allow: true
multi-statement-allow: true

View File

@ -1,3 +1,3 @@
server:
port: 80
debug: true
debug: false

View File

@ -1,14 +1,20 @@
spring:
spring:
redis:
host: ${common.redis.host}
password: ${common.redis.password}
port: ${common.redis.port}
timeout: 15000
timeout: 10000
database: 0
prefix: dragon
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: -1
jedis:
pool:
max-active: 600
max-idle: 300
max-wait: 15000
min-idle: 10
min-idle: 10

View File

@ -1,19 +1,20 @@
sdk:
sdk:
server:
symmetry-url: jjb-saas-application/application/applications/server/secure/
app-key: jjb-saas-dragon
client:
app-key: jjb-saas-dragon
security:
gateway: ${gateway.network.http.external}
gateway: ${common.gateway.network.http.external}
appKey: ${sdk.client.app-key}
desensitization:
symmetric-key: 1234567887654321
logging:
gateway: ${sdk.client.security.gateway}
appKey: ${sdk.client.security.app-key}
appKey: ${sdk.client.security.appKey}
clientLoggingEnable: true
level: debug
username: user
password: 123456
showConsoleLog: true
formatConsoleLogJson: true
formatConsoleLogJson: true

View File

@ -1,13 +1,11 @@
spring:
spring:
zipkin:
#zipkin服务所在地址
base-url: http://jjb-saas-zipkin/
sender:
type: web #使用http的方式传输数据
#配置采样百分比
type: web
sleuth:
sampler:
probability: 1 # 将采样比例设置为 1.0也就是全部都需要。默认是0.1也就是10%一般情况下10%就够用了
probability: 1
web:
resources:
cache:
@ -23,56 +21,66 @@ spring:
pathmatch:
matching-strategy: ant_path_matcher
messages:
basename: i18n.message
basename: i18n.messages
encoding: UTF-8
servlet:
multipart:
enabled: true
max-file-size: 100MB
max-request-size: 500MB
flyway:
# 是否启用flyway
enabled: true
# 编码格式默认UTF-8
encoding: UTF-8
# 迁移sql脚本文件存放路径默认db/migration
locations: classpath:db/migration
# 迁移sql脚本文件名称的前缀默认V
sql-migration-prefix: V
# 迁移sql脚本文件名称的分隔符默认2个下划线__
sql-migration-separator: __
# 迁移sql脚本文件名称的后缀
sql-migration-suffixes: .sql
# 迁移时是否进行校验默认true
validate-on-migrate: true
# 当迁移发现数据库非空且存在没有元数据的表时自动执行基准迁移新建schema_version表
baseline-on-migrate: true
server:
servlet:
context-path: /${application.gateway}
tomcat:
max-http-post-size: 200MB
connection-timeout: 180000
fastjson:
parser:
safeMode: true
mvc:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
thymeleaf:
prefix: classpath:/templates/
cache: false
dubbo:
application:
name: ${spring.application.name}
service-discovery:
migration: FORCE_INTERFACE
registry:
timeout: 20000
address: nacos://${spring.cloud.nacos.config.server-addr}?namespace=${spring.cloud.nacos.config.namespace}-facade
check: false
filter: providerContextFilter
scan:
base-packages: org.qinan.safetyeval
protocol:
port: -1
port: 20895
name: dubbo
consumer:
timeout: 20000
check: false
filter: consumerContextFilter
logging:
config: classpath:jjb-saas-logback-spring.xml
level:
org.qinan.safetyeval: debug
com.alibaba.nacos.client.naming: OFF
com.alibaba.nacos.client.config.impl: OFF
com.alibaba.nacos.common.remote.client: OFF
@ -86,4 +94,72 @@ easy-retry:
host: http://jjb-saas-config
port: 1788
dromara:
x-file-storage:
default-platform: aliyun-oss-1
thumbnail-suffix: ""
aliyun-oss:
- platform: aliyun-oss-1
enable-storage: true
access-key: LTAI5tFerUgBCLEbXtinDD6d
secret-key: XyGVNV2RvW8U3ceoJDiy9A9oLvCGYp
end-point: oss-cn-hangzhou.aliyuncs.com
bucket-name: test-dragon-yf-pub
domain: https://test-dragon-yf-pub.oss-cn-hangzhou.aliyuncs.com/
base-path: jjb/
dragon:
gateway:
baseurl: ${common.gateway.network.http.intranet}
res: ${common.gateway.network.http.intranet}
is-system: 'false'
system-url: http://jjb-saas-system
safety-eval:
gbs-user-sync:
fail-fast: true
user-facade-url: ${GBS_USER_FACADE_URL:dubbo://192.168.20.100:32080}
security:
permit-all-paths:
- /v2/api-docs
- /v3/api-docs
permit-all-prefixes:
- /swagger-ui
- /swagger-resources
- /webjars
- /public/org-personnel
- /test
- /tmp
- /mock
- /org-info
- /org-department
- /org-position
- /org-qualification
- /org-personnel
- /org-personnel-cert
- /org-personnel-change
- /org-resign-apply
- /org-equipment
- /qual-filing
- /qual-filing-change
- /qual-filing-change-detail
- /qual-filing-commitment
- /qual-filing-equipment
- /qual-filing-material
- /qual-filing-personnel
- /qual-filing-personnel-cert
- /file-storage
- /file
authenticated-paths: []
authenticated-prefixes: []
public-api:
system-user-id: 1
system-user-name: local-dev
tenant-id: 1001
org-id: 1
attachment:
default-url: https://s1.aigei.com/prevfiles/6f2754563be2491bad7c957904cd7d2a.jpg?e=2051020800&token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:CR60zg7VKDp-jUWyYls_rdvyQMM=
def:
password: a123456
publicKey: 0402df2195296d4062ac85ad766994d73e871b887e18efb9a9a06b4cebc72372869b7da6c347c129dee2b46a0f279ff066b01c76208c2a052af75977c722a2ccee

View File

@ -5,14 +5,12 @@ sdk:
url: ${common.gateway.network.http.intranet}
swagger:
enabled: ${common.swagger.enabled}
title: 例子
description: 这是例子项目
title: Demo
description: Safety Eval API Docs
version: ${application.version}
group-name: 例子
group-name: Demo
springfox:
documentation:
swagger-ui:
base-url: ${application.gateway}
swagger:
v2:
path: /${application.gateway}/v2/api-docs
path: /v2/api-docs

View File

@ -0,0 +1,52 @@
sdk:
server:
app-key: cbbfef15159e4578928dad804eb46dad
client:
gateway:
url: ${common.gateway.network.http.external}
route:
- client:
system-code: ${application.name}
name: ${application.cn-name}-后端
group-code: public_api
service:
system-code: ${application.name}
name: ${application.cn-name}-后端
group-code: public_api
strip-prefix: 0
uri: http://${application.name}
path: /${application.gateway}/**
- client:
system-code: ${application.name}-container
name: ${application.cn-name}-前端
group-code: public_api
service:
system-code: ${application.name}-container
name: ${application.cn-name}-前端
group-code: public_api
strip-prefix: 0
uri: http://jjb-saas-base
path: /${application.gateway}/container/**
order: -2
openapi:
appId: 2070081274042777600
appKey: dd367066994a4e93a49e847f26462f60
appSecret: 9dc007e9-54a1-46d2-af11-589ad117454f
appPublicKey: 3059301306072a8648ce3d020106082a811ccf5501822d03420004023c307eab0553b42f6bc983c299ca2f61f4779846742572a0022c3fd33260997281fd57202bad8e9b9b55da8bda311acc1ac49873ba70f583e0245a7c9fa3aa
appPrivateKey: 3059301306072a8648ce3d020106082a811ccf5501822d0342000446043bd54674d84483cf64b72afa7e6b01b8ca2932a59317ff456c7c047636e39f7a1f00379f79cfba280446195e5b0c2bc34727dac6fd3a8206f2d856ed84d4
encryptType: SM2
platform:
- name: default
openPublicKey: 3059301306072a8648ce3d020106082a811ccf5501822d03420004023c307eab0553b42f6bc983c299ca2f61f4779846742572a0022c3fd33260997281fd57202bad8e9b9b55da8bda311acc1ac49873ba70f583e0245a7c9fa3aa
url: ${common.gateway.network.http.intranet}
protocol: HTTP
defaultPlatform: true
##ciphertext plaintext
type: plaintext
apiPlatform:
- name: default
#多个可以逗号隔开
apiCode: test:01
#多个可以逗号隔开,可以为空
tenantIds: 1838408702262321152

View File

@ -1,6 +1,6 @@
sdk:
server:
app-key: 8790123e6cf1441d9e618346e9c7a17f
app-key: cbbfef15159e4578928dad804eb46dad
client:
gateway:
url: ${common.gateway.network.http.external}

View File

@ -0,0 +1,11 @@
swagger:
enabled: ${common.swagger.enabled:true}
title: ${application.cn-name}
description: Safety Eval API Docs
version: 1.0.0
group-name: ${application.cn-name}
springfox:
documentation:
swagger:
v2:
path: /v2/api-docs

View File

@ -1,23 +0,0 @@
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.1 Frontend_Env[development] Build_Date[2026/6/25 14:52:56] App_Identifier[certificate]"><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',
fontFamily: 'PingFangSC-Regular',
colorPrimary: '#1677ff',
borderRadius: parseInt('2')
},
appKey: '',
basename: 'certificate',
API_HOST: 'http://127.0.0.1:8095'
};
APP_ENV.API_HOST = sessionStorage.API_HOST || APP_ENV.API_HOST || window.location.origin;
window.process = {
env: { app: APP_ENV },
NODE_ENV: 'production'
};
window.__JJB_ENVIRONMENT__ = {
API_HOST: APP_ENV.API_HOST,
redirect: '',
FRAMEWORK: APP_ENV.antd
};
})();</script><script defer="defer" src="/certificate/static/js/708.fde3ac0d13bad184.js"></script><script defer="defer" src="/certificate/static/js/478.532bd4a7a37ba2b0.js"></script><script defer="defer" src="/certificate/static/js/main.a10ec5b7cc02c1dd.js"></script><link href="/certificate/static/css/main.fdd9c7fe1255b0b8.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.1 Frontend_Env[development] Build_Date[2026/6/25 14:52:56] App_Identifier[certificate] Frontend_Branch[dev] Backend_Branch[<branch-name>]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html>

View File

@ -1,316 +0,0 @@
.header-back {
padding: 10px 20px;
border-bottom: 1px solid #dcdfe6;
margin-bottom: 0;
position: sticky;
top: 0;
background-color: #fff;
z-index: 9;
}
.header-back .action {
display: flex;
align-items: center;
}
.header-back .action .back {
display: flex;
align-items: center;
gap: 10px;
cursor: pointer;
font-size: 14px;
}
.header-back .action .title {
font-size: 17px;
}
.micro-temp-table-cell-scrollbar {
width: 15px;
}
.micro-temp-table-cell .micro-temp-btn-link {
padding: 0;
}
.micro-temp-pro-table-list-toolbar-container {
padding-top: 0 !important;
padding-bottom: 16px;
}
/* stylelint-disable */
html,
body {
width: 100%;
height: 100%;
}
input::-ms-clear,
input::-ms-reveal {
display: none;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
-ms-overflow-style: scrollbar;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
@-ms-viewport {
width: device-width;
}
body {
margin: 0;
}
[tabindex='-1']:focus {
outline: none;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin-top: 0;
margin-bottom: 0.5em;
font-weight: 500;
}
p {
margin-top: 0;
margin-bottom: 1em;
}
abbr[title],
abbr[data-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
border-bottom: 0;
cursor: help;
}
address {
margin-bottom: 1em;
font-style: normal;
line-height: inherit;
}
input[type='text'],
input[type='password'],
input[type='number'],
textarea {
-webkit-appearance: none;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1em;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 500;
}
dd {
margin-bottom: 0.5em;
margin-left: 0;
}
blockquote {
margin: 0 0 1em;
}
dfn {
font-style: italic;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 80%;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
pre,
code,
kbd,
samp {
font-size: 1em;
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
}
pre {
margin-top: 0;
margin-bottom: 1em;
overflow: auto;
}
figure {
margin: 0 0 1em;
}
img {
vertical-align: middle;
border-style: none;
}
a,
area,
button,
[role='button'],
input:not([type='range']),
label,
select,
summary,
textarea {
touch-action: manipulation;
}
table {
border-collapse: collapse;
}
caption {
padding-top: 0.75em;
padding-bottom: 0.3em;
text-align: left;
caption-side: bottom;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
color: inherit;
font-size: inherit;
font-family: inherit;
line-height: inherit;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html [type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
}
button::-moz-focus-inner,
[type='button']::-moz-focus-inner,
[type='reset']::-moz-focus-inner,
[type='submit']::-moz-focus-inner {
padding: 0;
border-style: none;
}
input[type='radio'],
input[type='checkbox'] {
box-sizing: border-box;
padding: 0;
}
input[type='date'],
input[type='time'],
input[type='datetime-local'],
input[type='month'] {
-webkit-appearance: listbox;
}
textarea {
overflow: auto;
resize: vertical;
}
fieldset {
min-width: 0;
margin: 0;
padding: 0;
border: 0;
}
legend {
display: block;
width: 100%;
max-width: 100%;
margin-bottom: 0.5em;
padding: 0;
color: inherit;
font-size: 1.5em;
line-height: inherit;
white-space: normal;
}
progress {
vertical-align: baseline;
}
[type='number']::-webkit-inner-spin-button,
[type='number']::-webkit-outer-spin-button {
height: auto;
}
[type='search'] {
outline-offset: -2px;
-webkit-appearance: none;
}
[type='search']::-webkit-search-cancel-button,
[type='search']::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
summary {
display: list-item;
}
template {
display: none;
}
[hidden] {
display: none !important;
}
mark {
padding: 0.2em;
background-color: #feffe6;
}
.micro-temp-modal-header {
border-bottom: 1px solid #ccc !important;
margin: 0 -24px 15px -24px !important;
padding: 0 24px 15px 24px !important;
}
.micro-temp-modal-footer {
text-align: center !important;
}
.search-layout {
position: relative;
}
.search-layout::after {
content: '';
position: absolute;
bottom: -10px;
left: -20px;
right: -20px;
height: 10px;
background-color: #f1f1f2;
}
.search-layout + .table-layout {
padding-top: 26px !important;
}
.card-layout {
background-color: #fff;
border-radius: 6px;
}

View File

@ -1 +0,0 @@
module.exports={javaGit:"<git-url>",javaGitName:"<git-name>",environment:{development:{javaGitBranch:"<branch-name>",API_HOST:process.env.SAFETY_EVAL_API_HOST||"http://127.0.0.1:8095"},production:{javaGitBranch:"<branch-name>",API_HOST:""}},appIdentifier:"certificate",contextInject:{appKey:"",fileUrl:"https://skqhdg.porthebei.com:9004/file/uploadFiles2/"},windowInject:{title:"微应用模板",links:[],element:{root:{id:"root"}},scripts:[]},server:{port:"8081",host:"0.0.0.0",open:!0},framework:{antd:{"ant-prefix":"micro-temp",fontFamily:"PingFangSC-Regular",colorPrimary:"#1677ff",borderRadius:2}},webpackConfig:{htmlWebpackPluginOption:{inject:!0}}};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,70 @@
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.1 Frontend_Env[production] Build_Date[2026/7/1 15:24:21] App_Identifier[safety-eval]"><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',
fontFamily: 'PingFangSC-Regular',
colorPrimary: '#1677ff',
borderRadius: parseInt('2')
},
appKey: '',
basename: 'safety-eval',
API_HOST: ''
};
const injectedApiHost = APP_ENV.API_HOST;
const isDev = 'production' === 'development';
// 开发环境优先 jjb.config 注入的 API_HOST避免 sessionStorage 残留网关地址导致 Network Error
if (isDev && injectedApiHost && injectedApiHost.indexOf('http') === 0) {
APP_ENV.API_HOST = injectedApiHost;
} else {
APP_ENV.API_HOST = sessionStorage.API_HOST || injectedApiHost || window.location.origin;
}
window.process = {
env: { app: APP_ENV },
NODE_ENV: 'production'
};
window.__JJB_ENVIRONMENT__ = {
API_HOST: APP_ENV.API_HOST,
redirect: '',
FRAMEWORK: APP_ENV.antd
};
})();
// 抑制 ResizeObserver 在页面/标签切换时的无害告警,避免 dev overlay 误报
(function () {
if (typeof window.ResizeObserver !== 'undefined') {
var NativeResizeObserver = window.ResizeObserver;
window.ResizeObserver = class extends NativeResizeObserver {
constructor(callback) {
super(function (entries, observer) {
window.requestAnimationFrame(function () {
callback(entries, observer);
});
});
}
};
}
function isResizeObserverLoopError(message) {
return typeof message === 'string' && message.indexOf('ResizeObserver loop') !== -1;
}
function isAxiosNetworkError(reason) {
if (!reason) return false;
var msg = typeof reason === 'string' ? reason : (reason.message || '');
return msg === 'Network Error' || (reason.isAxiosError && msg === 'Network Error');
}
window.addEventListener('error', function (event) {
if (isResizeObserverLoopError(event.message)) {
event.stopImmediatePropagation();
event.preventDefault();
}
});
window.addEventListener('unhandledrejection', function (event) {
if (isAxiosNetworkError(event.reason)) {
console.warn('[dev] API unreachable:', event.reason?.config?.url || event.reason?.message);
event.preventDefault();
}
});
})();</script><script defer="defer" src="/safety-eval/static/js/738.02f7b638f1f50f2d.js"></script><script defer="defer" src="/safety-eval/static/js/121.13973c81022a93a2.js"></script><script defer="defer" src="/safety-eval/static/js/289.f4b5e8c4ac9ad742.js"></script><script defer="defer" src="/safety-eval/static/js/main.44f2723a7e4daa81.js"></script><link href="/safety-eval/static/css/main.f1fe1233254250fd.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.1 Frontend_Env[production] Build_Date[2026/7/1 15:24:21] App_Identifier[safety-eval] Frontend_Branch[dev] Backend_Branch[<branch-name>]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html>

View File

@ -0,0 +1 @@
module.exports={javaGit:"<git-url>",javaGitName:"<git-name>",environment:{development:{javaGitBranch:"<branch-name>",API_HOST:"http://192.168.0.204:8095"},production:{javaGitBranch:"<branch-name>",API_HOST:""}},appIdentifier:"safety-eval",contextInject:{appKey:"",fileUrl:"https://skqhdg.porthebei.com:9004/file/uploadFiles2/"},windowInject:{title:"微应用模板",links:[],element:{root:{id:"root"}},scripts:[]},server:{port:"8081",host:"0.0.0.0",open:!0},framework:{antd:{"ant-prefix":"micro-temp",fontFamily:"PingFangSC-Regular",colorPrimary:"#1677ff",borderRadius:2}},webpackConfig:{htmlWebpackPluginOption:{inject:!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

View File

@ -29,8 +29,9 @@
"@rc-component/motion": "^1.0.0",
"@rc-component/util": "^1.11.1",
"ahooks": "^3.9.5",
"antd": "^5.11.2",
"antd": "^5.29.2",
"dayjs": "^1.11.7",
"echarts": "^6.1.0",
"lodash-es": "^4.17.21",
"qrcode.react": "^4.2.0",
"react": "^18.2.0",
@ -44,6 +45,7 @@
"@babel/preset-react": "^7.29.7",
"@cqsjjb/scripts": "latest",
"@eslint-react/eslint-plugin": "^2.2.2",
"ajv": "^8.20.0",
"babel-loader": "^9.1.3",
"cross-env": "^7.0.3",
"css-loader": "^6.8.1",