Merge remote-tracking branch 'origin/dev' into dev

dev
luotaiqian 2026-07-09 13:57:07 +08:00
commit 96417941c0
39 changed files with 3013 additions and 384 deletions

View File

@ -62,6 +62,7 @@ safety-eval:
- /swagger-ui - /swagger-ui
- /swagger-resources - /swagger-resources
- /webjars - /webjars
- /safetyEval-h5
- /public/org-personnel - /public/org-personnel
- /test - /test
- /tmp - /tmp

View File

@ -1,7 +1,6 @@
package org.qinan.safetyeval.adapter.config; package org.qinan.safetyeval.adapter.config;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.BizException;
import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.exception.ErrorCode;
import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter;
@ -11,7 +10,6 @@ import org.qinan.safetyeval.infrastructure.mapper.AccountMapper;
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
@ -30,13 +28,14 @@ public class GbsUserSyncInterceptor implements WebMvcConfigurer {
@Autowired @Autowired
private AccountMapper accountMapper; private AccountMapper accountMapper;
private final AntPathMatcher pathMatcher = new AntPathMatcher(); private static final String[] EXCLUDE_PATHS = {
"/**/safetyEval-h5/**",
private final String[] anonymousUrl = { "/safetyEval-h5/**",
"/**/images/**", "/**/images/**",
"/**/file/**", "/**/file/**",
"/**/tree/**" "/**/tree/**"
}; };
@Override @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptor() { registry.addInterceptor(new HandlerInterceptor() {
@ -46,9 +45,6 @@ public class GbsUserSyncInterceptor implements WebMvcConfigurer {
return true; return true;
} }
log.info("url: {}", request.getRequestURI()); log.info("url: {}", request.getRequestURI());
if (isWhiteUrl(request.getRequestURI())) {
return true;
}
AuthUserInfo currentUser = AuthUserContextAdapter.getCurrentUser(); AuthUserInfo currentUser = AuthUserContextAdapter.getCurrentUser();
if (currentUser == null || currentUser.getUserId() == null) { if (currentUser == null || currentUser.getUserId() == null) {
throw new BizException(ErrorCode.GBS_USER_ERROR); throw new BizException(ErrorCode.GBS_USER_ERROR);
@ -75,25 +71,8 @@ public class GbsUserSyncInterceptor implements WebMvcConfigurer {
Object handler, Exception exception) { Object handler, Exception exception) {
} }
}).addPathPatterns("/**").order(2); }).addPathPatterns("/**").excludePathPatterns(EXCLUDE_PATHS).order(2);
} }
/**
*
* @param url
* @return
*/
private boolean isWhiteUrl(String url) {
if (StringUtils.isBlank(url)) {
return false;
}
for (String s : anonymousUrl) {
if (pathMatcher.match(s, url)) {
return true;
}
}
return false;
}
} }

View File

@ -121,6 +121,7 @@ public class AccountExecutor implements AccountApi {
userAddCmd.setAccount(result.getAccount()); userAddCmd.setAccount(result.getAccount());
userAddCmd.setTenantId(result.getTenantId()); userAddCmd.setTenantId(result.getTenantId());
userAddCmd.setName(result.getUserName()); userAddCmd.setName(result.getUserName());
// userAddCmd.setMobile(result.getPhone());
String pas = defPassword; String pas = defPassword;
if (StringUtils.isNotBlank(result.getPassword())) { if (StringUtils.isNotBlank(result.getPassword())) {
pas = result.getPassword(); pas = result.getPassword();
@ -134,7 +135,8 @@ public class AccountExecutor implements AccountApi {
// 回滚数据, 清除account表示数据,orgInfo数据 // 回滚数据, 清除account表示数据,orgInfo数据
orgInfoMapper.delete(new LambdaQueryWrapper<OrgInfoDO>() orgInfoMapper.delete(new LambdaQueryWrapper<OrgInfoDO>()
.eq(OrgInfoDO::getCreateId, result.getId())); .eq(OrgInfoDO::getCreateId, result.getId()));
accountDomainService.delete(result.getId());
log.error("同步用户失败: {}", e.getMessage());
throw new BizException(ErrorCode.GBS_USER_SYNC_ERROR); throw new BizException(ErrorCode.GBS_USER_SYNC_ERROR);
} }
return SingleResponse.success(toCO(result)); return SingleResponse.success(toCO(result));

View File

@ -58,14 +58,27 @@ public class OrgDepartmentExecutor implements OrgDepartmentApi {
@Override @Override
public SingleResponse<OrgDepartmentCO> modify(OrgDepartmentModifyCmd cmd) { public SingleResponse<OrgDepartmentCO> modify(OrgDepartmentModifyCmd cmd) {
OrgDepartmentEntity entity = new OrgDepartmentEntity(); OrgDepartmentEntity entity = new OrgDepartmentEntity();
entity.setId(cmd.getId() != null ? Long.parseLong(cmd.getId()) : null); if (cmd.getId() != null) {
entity.setParentId(cmd.getParentId() != null ? Long.parseLong(cmd.getParentId()) : null); entity.setId(Long.parseLong(cmd.getId()));
entity.setDeptName(cmd.getDeptName()); }
entity.setManagerName(cmd.getManagerName()); if (entity.getParentId() != null) {
entity.setManagerAccount(cmd.getManagerAccount()); entity.setParentId(Long.parseLong(cmd.getParentId()));
entity.setDeptLevelCode(cmd.getDeptLevelCode()); }
entity.setDeptLevelName(cmd.getDeptLevelName()); if(cmd.getDeptName() != null) {
entity.setDeptName(cmd.getDeptName());
}
if (cmd.getManagerName() != null) {
entity.setManagerName(cmd.getManagerName());
}
if (cmd.getManagerAccount() != null) {
entity.setManagerAccount(cmd.getManagerAccount());
}
if (cmd.getDeptLevelCode() != null) {
entity.setDeptLevelCode(cmd.getDeptLevelCode());
}
if (cmd.getDeptLevelName() != null) {
entity.setDeptLevelName(cmd.getDeptLevelName());
}
OrgDepartmentEntity result = orgDepartmentDomainService.modify(entity); OrgDepartmentEntity result = orgDepartmentDomainService.modify(entity);
return SingleResponse.success(toCO(result)); return SingleResponse.success(toCO(result));
} }

View File

@ -27,6 +27,7 @@ import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter;
import org.qinan.safetyeval.infrastructure.dataobject.QualFilingChangeCountDO; import org.qinan.safetyeval.infrastructure.dataobject.QualFilingChangeCountDO;
import org.qinan.safetyeval.infrastructure.mapper.QualFilingChangeMapper; import org.qinan.safetyeval.infrastructure.mapper.QualFilingChangeMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -85,6 +86,8 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi {
@Resource @Resource
private QualFilingChangeDetailGateway qualFilingChangeDetailGateway; private QualFilingChangeDetailGateway qualFilingChangeDetailGateway;
@Value("${def.reviewEnable:false}")
private Boolean reviewEnable;
@Override @Override
public SingleResponse<QualFilingChangeCO> add(QualFilingChangeAddCmd cmd) { public SingleResponse<QualFilingChangeCO> add(QualFilingChangeAddCmd cmd) {
@ -306,14 +309,16 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi {
, equipmentEntities, materialEntities, personnelEntities, personnelCertEntities); , equipmentEntities, materialEntities, personnelEntities, personnelCertEntities);
// 合规性校验:只要有一项未通过则抛出异常 // 合规性校验:只要有一项未通过则抛出异常
List<QualFilingChangeComplianceCheckResultCO> complianceResults = qualFilingOrchestrator.complianceCheckChange(id); if (reviewEnable) {
List<String> failedItems = complianceResults.stream() List<QualFilingChangeComplianceCheckResultCO> complianceResults = qualFilingOrchestrator.complianceCheckChange(id);
.filter(r -> QualFilingComplianceCheckEnum.STATUS_FAIL.equals(r.getStatus())) List<String> failedItems = complianceResults.stream()
.map(QualFilingChangeComplianceCheckResultCO::getTitle) .filter(r -> QualFilingComplianceCheckEnum.STATUS_FAIL.equals(r.getStatus()))
.collect(Collectors.toList()); .map(QualFilingChangeComplianceCheckResultCO::getTitle)
if (!failedItems.isEmpty()) { .collect(Collectors.toList());
throw new BizException(ErrorCode.QUAL_FILING_COMPLIANCE_CHECK_FAIL, if (!failedItems.isEmpty()) {
"合规性校验未通过:" + String.join("、", failedItems)); throw new BizException(ErrorCode.QUAL_FILING_COMPLIANCE_CHECK_FAIL,
"合规性校验未通过:" + String.join("、", failedItems));
}
} }
QualFilingChangeCO co = new QualFilingChangeCO(); QualFilingChangeCO co = new QualFilingChangeCO();

View File

@ -20,6 +20,7 @@ import org.qinan.safetyeval.infrastructure.dataobject.*;
import org.qinan.safetyeval.infrastructure.mapper.*; import org.qinan.safetyeval.infrastructure.mapper.*;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -98,7 +98,7 @@ public class OrgDepartmentGatewayImpl implements OrgDepartmentGateway {
private OrgDepartmentDO toDO(OrgDepartmentEntity entity) { private OrgDepartmentDO toDO(OrgDepartmentEntity entity) {
OrgDepartmentDO dataObject = new OrgDepartmentDO(); OrgDepartmentDO dataObject = new OrgDepartmentDO();
dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId())); dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId()));
dataObject.setParentId(entity.getParentId() != null ? entity.getParentId() : 0L); dataObject.setParentId(entity.getParentId());
dataObject.setDeptName(entity.getDeptName()); dataObject.setDeptName(entity.getDeptName());
dataObject.setManagerName(entity.getManagerName()); dataObject.setManagerName(entity.getManagerName());
dataObject.setManagerAccount(entity.getManagerAccount()); dataObject.setManagerAccount(entity.getManagerAccount());

View File

@ -145,7 +145,7 @@ public final class InsertFieldDefaults {
} }
Long tenantId = AuthUserContextAdapter.getCurrentTenantId(); Long tenantId = AuthUserContextAdapter.getCurrentTenantId();
if (tenantId == null) { if (tenantId == null) {
tenantId = 2069596397920849920L; tenantId = 2067161116369793024L;
} }
setIfNull(dataObject, "createId", userId); setIfNull(dataObject, "createId", userId);
setIfNull(dataObject, "updateId", userId); setIfNull(dataObject, "updateId", userId);

View File

@ -131,6 +131,7 @@ safety-eval:
- /swagger-ui - /swagger-ui
- /swagger-resources - /swagger-resources
- /webjars - /webjars
- /safetyEval-h5
- /images - /images
- /public/org-personnel - /public/org-personnel
- /test - /test
@ -165,3 +166,7 @@ safety-eval:
attachment: attachment:
default-url: https://s1.aigei.com/prevfiles/6f2754563be2491bad7c957904cd7d2a.jpg?e=2051020800&token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:CR60zg7VKDp-jUWyYls_rdvyQMM= default-url: https://s1.aigei.com/prevfiles/6f2754563be2491bad7c957904cd7d2a.jpg?e=2051020800&token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:CR60zg7VKDp-jUWyYls_rdvyQMM=
def:
password: a123456
publicKey: 0402df2195296d4062ac85ad766994d73e871b887e18efb9a9a06b4cebc72372869b7da6c347c129dee2b46a0f279ff066b01c76208c2a052af75977c722a2ccee
reviewEnable: false

View File

@ -3,6 +3,9 @@
app-key: cbbfef15159e4578928dad804eb46dad app-key: cbbfef15159e4578928dad804eb46dad
client: client:
gateway: gateway:
ignore-urls:
- /safetyEval-h5/**
- /safetyEval-h5/Container/**
url: ${common.gateway.network.http.external} url: ${common.gateway.network.http.external}
route: route:
- client: - client:

View File

@ -3,6 +3,9 @@ sdk:
app-key: cbbfef15159e4578928dad804eb46dad app-key: cbbfef15159e4578928dad804eb46dad
client: client:
gateway: gateway:
ignore-urls:
- /safetyEval-h5/**
- /safetyEval-h5/Container/**
url: ${common.gateway.network.http.external} url: ${common.gateway.network.http.external}
route: route:
- client: - client:

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/7/8 21:07:56] 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/7/9 10:30:55] 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',
@ -10,7 +10,14 @@
basename: 'safetyEval-h5', basename: 'safetyEval-h5',
API_HOST: 'https://gbs-gateway.qhdsafety.com' API_HOST: 'https://gbs-gateway.qhdsafety.com'
}; };
APP_ENV.API_HOST = sessionStorage.API_HOST || APP_ENV.API_HOST || window.location.origin; APP_ENV.API_HOST = 'https://gbs-gateway.qhdsafety.com';
const injectedApiHost = APP_ENV.API_HOST;
const isDev = 'production' === 'development';
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 = { window.process = {
env: { app: APP_ENV }, env: { app: APP_ENV },
NODE_ENV: 'production' NODE_ENV: 'production'
@ -34,10 +41,27 @@
}, 500); }, 500);
}; };
/** 全局接口错误success === false 时自动返回基座 */ /** 全局 HTTP 拦截器 */
window.jjbCommonGlobalConfig = { window.jjbCommonGlobalConfig = {
httpInterceptor: { httpInterceptor: {
request: function (url, method, params, headers) {
if (sessionStorage.getItem('orgInfoId')) {
headers.orgInfoId = sessionStorage.getItem('orgInfoId');
}
return Promise.resolve([url, method, params, headers]);
},
response: function (res) { response: function (res) {
var url = (res && res.config && res.config.url)
|| (res.response && res.response.config && res.response.config.url)
|| '';
// 注册/填报开放接口、终端类型检测、文件上传失败时不自动返回基座
if (
url.indexOf('checkTerminalType') !== -1
|| url.indexOf('/safetyEval/images/') !== -1
|| url.indexOf('/safetyEval/file/upload') !== -1
) {
return Promise.resolve(res);
}
var data = res && (res.data || (res.response && res.response.data)); var data = res && (res.data || (res.response && res.response.data));
if (data && data.success === false) { if (data && data.success === false) {
window.backToBase(); window.backToBase();
@ -46,4 +70,60 @@
} }
} }
}; };
})();</script><script defer="defer" src="/safetyEval-h5/static/js/612.e6ed01a8a90b740f.js"></script><script defer="defer" src="/safetyEval-h5/static/js/923.1ecdc96702c3dc37.js"></script><script defer="defer" src="/safetyEval-h5/static/js/338.f3a903b2f40406b3.js"></script><script defer="defer" src="/safetyEval-h5/static/js/main.37cb43c4733de10c.js"></script><link href="/safetyEval-h5/static/css/main.dc38da3713049724.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/7/8 21:07:56] App_Identifier[safetyEval-h5] Frontend_Branch[master] 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>
/** Driver 鉴权参数提前解析,避免首屏请求时 sessionStorage 尚未写入 */
(function bootstrapDriverAuthParams() {
var AUTH_KEYS = ['token', 'accessTicket', 'clientId', 'orgId', 'code'];
function parseQuery(search) {
var params = {};
if (!search) return params;
try {
var normalized = search.charAt(0) === '?' ? search : '?' + search;
var urlParams = new URLSearchParams(normalized);
urlParams.forEach(function (value, key) {
if (value) params[key] = value;
});
} catch (e) { /* ignore */ }
return params;
}
function parseUrl(url) {
if (!url) return {};
try {
return parseQuery(new URL(url, window.location.origin).search);
} catch (e) {
var idx = url.indexOf('?');
return idx === -1 ? {} : parseQuery(url.slice(idx));
}
}
function parseHash() {
var hash = window.location.hash || '';
var idx = hash.indexOf('?');
return idx === -1 ? {} : parseQuery(hash.slice(idx));
}
function mergeParams() {
var sources = [
parseQuery(window.location.search),
parseHash(),
parseUrl(window.location.href),
parseUrl(document.referrer)
];
var result = {};
sources.forEach(function (source) {
AUTH_KEYS.forEach(function (key) {
if (!result[key] && source[key]) result[key] = source[key];
});
});
AUTH_KEYS.forEach(function (key) {
if (!result[key]) {
var stored = sessionStorage.getItem(key);
if (stored) result[key] = stored;
}
});
AUTH_KEYS.forEach(function (key) {
if (result[key]) sessionStorage.setItem(key, result[key]);
});
return result;
}
mergeParams();
})();
})();</script><script defer="defer" src="/safetyEval-h5/static/js/548.ac3036a0ff72bbda.js"></script><script defer="defer" src="/safetyEval-h5/static/js/551.40cd16b83ccef834.js"></script><script defer="defer" src="/safetyEval-h5/static/js/485.cc16547839dceff2.js"></script><script defer="defer" src="/safetyEval-h5/static/js/main.eb0b4da88d14f66c.js"></script><link href="/safetyEval-h5/static/css/main.d529a13088ceae37.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/7/9 10:30:55] App_Identifier[safetyEval-h5] Frontend_Branch[dev] 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

@ -844,6 +844,27 @@
.driver-container .driver-container-content { .driver-container .driver-container-content {
height: 100%; height: 100%;
} }
.driver-container .driver-container-empty {
padding: 48px 0;
}
.driver-error-panel {
display: flex;
flex-direction: column;
height: 100%;
min-height: 320px;
background: #fff;
}
.driver-error-panel__header {
flex-shrink: 0;
padding: 12px 16px;
}
.driver-error-panel__body {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 24px 16px 48px;
}
.map_content_bottom_utils_container .bottom_utils { .map_content_bottom_utils_container .bottom_utils {
width: 1000px; width: 1000px;
@ -4277,6 +4298,176 @@
pointer-events: auto; pointer-events: auto;
} }
.register-page {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border-radius: 8px;
background: linear-gradient(135deg, #1a5fb4 0%, #0d3a7a 100%);
height: 100%;
box-sizing: border-box;
padding: 24px;
}
.register-page .register-top-bar {
margin-bottom: 24px;
}
.register-page .register-top-bar .register-top-logo {
display: flex;
align-items: center;
gap: 10px;
}
.register-page .register-top-bar .register-top-logo .register-top-icon {
width: 32px;
height: 32px;
}
.register-page .register-top-bar .register-top-logo .register-top-title {
font-size: 20px;
font-weight: 600;
color: #fff;
letter-spacing: 1px;
}
.register-page .register-top-bar .register-top-logo .register-top-subtitle {
font-size: 13px;
color: rgba(255, 255, 255, 0.75);
margin-left: 4px;
padding-left: 10px;
border-left: 1px solid rgba(255, 255, 255, 0.4);
}
.register-page .register-card {
display: flex;
width: 900px;
min-height: 520px;
background: #fff;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);
}
.register-page .register-left {
width: 460px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background: linear-gradient(180deg, #e8f4ff 0%, #d0e8ff 100%);
}
.register-page .register-left .register-left-icon {
width: 100%;
height: 100%;
}
.register-page .register-left .register-logo-icon {
width: 180px;
height: 180px;
margin-bottom: 24px;
}
.register-page .register-left .register-left-title {
font-size: 20px;
font-weight: 600;
color: #1677ff;
margin-bottom: 8px;
}
.register-page .register-left .register-left-subtitle {
font-size: 14px;
color: #666;
}
.register-page .register-right {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
padding: 48px;
}
.register-page .register-right .register-header {
text-align: center;
margin-bottom: 32px;
}
.register-page .register-right .register-header .register-title {
font-size: 20px;
font-weight: 600;
color: #333;
margin-bottom: 8px;
}
.register-page .register-right .register-header .register-subtitle {
font-size: 13px;
color: #999;
}
.register-page .register-right .register-form .ant-form-item {
margin-bottom: 20px;
}
.register-page .register-right .register-form .ant-input-affix-wrapper {
border-radius: 4px;
}
.register-page .register-right .register-form .ant-input {
border-radius: 4px;
}
.register-page .register-right .register-form .register-verify-row {
display: flex;
gap: 12px;
}
.register-page .register-right .register-form .register-verify-row .register-verify-input {
flex: 1;
}
.register-page .register-right .register-form .register-verify-row .register-verify-btn {
width: 120px;
height: 40px;
border-radius: 4px;
}
.register-page .register-right .register-form .register-submit-btn {
width: 100%;
height: 40px;
border-radius: 4px;
font-size: 15px;
margin-top: 8px;
}
.register-more {
position: relative;
padding-bottom: 20px;
}
.register-more .audit-look {
background-repeat: no-repeat;
height: 175px;
width: 171px;
position: relative;
}
.register-more .audit-look-img {
position: absolute;
width: 45px;
height: 45px;
top: 50%;
left: 63%;
margin-top: -22.5px;
margin-left: -22.5px;
animation: orbit-clockwise 2s linear infinite;
}
@keyframes orbit-clockwise {
from {
transform: rotate(0deg) translateX(8px) rotate(0deg);
}
to {
transform: rotate(360deg) translateX(8px) rotate(-360deg);
}
}
.register-more .register-more-header {
height: 250px;
position: relative;
}
.register-more .register-more-header .register-more-header-content {
width: 1200px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.register-more .register-more-header .register-more-header-title {
font-size: 24px;
font-weight: bold;
}
.register-more .register-more-content {
width: 1200px;
margin: 30px auto 20px;
}
.supervision-dashboard-page { .supervision-dashboard-page {
min-height: 100%; min-height: 100%;
background: #f4f4f4; background: #f4f4f4;
@ -6246,6 +6437,22 @@
width: 540px; width: 540px;
} }
.micro-temp-modal-body {
max-height: 630px;
overflow-y: auto;
scrollbar-width: thin;
}
.micro-temp-layout-container .micro-temp-lay-container-bottom {
padding: 10px 24px !important;
display: flex;
justify-content: flex-end;
}
html,
body {
height: 100%;
margin: 0;
}
/* stylelint-disable */ /* stylelint-disable */
html, html,
body { body {

View File

@ -1 +1 @@
module.exports={compact:!1,plugins:[["@babel/plugin-proposal-decorators",{legacy:!0}]],presets:[["@babel/preset-env",{targets:{browsers:["ie >= 10"]}}],["@babel/preset-react",{runtime:"automatic"}]]}; const lifecycle=process.env.npm_lifecycle_event||"";("serve"===lifecycle||lifecycle.startsWith("serve:"))&&"production"===process.env.NODE_ENV&&(process.env.BABEL_ENV="development"),module.exports={compact:!1,plugins:[["@babel/plugin-proposal-decorators",{legacy:!0}]],presets:[["@babel/preset-env",{targets:{browsers:["ie >= 10"]}}],["@babel/preset-react",{runtime:"automatic"}]]};

View File

@ -1 +1 @@
module.exports={javaGit:"<git-url>",javaGitName:"<git-name>",environment:{development:{javaGitBranch:"<branch-name>",API_HOST:"http://127.0.0.1"},production:{javaGitBranch:"<branch-name>",API_HOST:"https://gbs-gateway.qhdsafety.com"}},appIdentifier:"safetyEval-h5",contextInject:{appKey:"",fileUrl:"https://jpfz.qhdsafety.com/gbsFileTest/"},windowInject:{title:"微应用模板",links:[],element:{root:{id:"root"}},scripts:[]},server:{port:"8080",host:"127.0.0.1",open:!0},framework:{antd:{"ant-prefix":"micro-temp",fontFamily:"PingFangSC-Regular",colorPrimary:"#1677ff",borderRadius:2}},webpackConfig:{htmlWebpackPluginOption:{inject:!0},resolve:{symlinks:!0}}}; module.exports={javaGit:"<git-url>",javaGitName:"<git-name>",environment:{development:{javaGitBranch:"<branch-name>",API_HOST:"https://gbs-gateway.qhdsafety.com"},production:{javaGitBranch:"<branch-name>",API_HOST:"https://gbs-gateway.qhdsafety.com"}},appIdentifier:"safetyEval-h5",contextInject:{appKey:"",fileUrl:"https://jpfz.qhdsafety.com/gbsFileTest/"},windowInject:{title:"微应用模板",links:[],element:{root:{id:"root"}},scripts:[]},server:{port:"8080",host:"127.0.0.1",open:!0},framework:{antd:{"ant-prefix":"micro-temp",fontFamily:"PingFangSC-Regular",colorPrimary:"#1677ff",borderRadius:2}},webpackConfig:{htmlWebpackPluginOption:{inject:!0},resolve:{symlinks:!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

@ -0,0 +1,92 @@
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.1 Frontend_Env[production] Build_Date[2026/7/9 09:55:06] 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',
fontFamily: 'PingFangSC-Regular',
colorPrimary: '#1677ff',
borderRadius: parseInt('2')
},
appKey: '',
basename: 'safetyEval',
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();
}
});
})();
window.jjbCommonGlobalConfig = {
// http拦截器
httpInterceptor: {
// 请求拦截
request: (url, method, params, headers) => {
// 处理你的请求拦截
// 给请求头添加一个租户ID
if(sessionStorage.getItem('orgInfoId')){
headers.orgInfoId = sessionStorage.getItem('orgInfoId');
}
return Promise.resolve([
url,
method,
params,
headers
])
},
}
}</script><script defer="defer" src="/safetyEval/static/js/934.ada55f776be86394.js"></script><script defer="defer" src="/safetyEval/static/js/121.ae75e71830bf4ae0.js"></script><script defer="defer" src="/safetyEval/static/js/289.f12da2fe2f6ad2ae.js"></script><script defer="defer" src="/safetyEval/static/js/main.65b9b76832cb72ed.js"></script><link href="/safetyEval/static/css/main.cb6068c6562f0d94.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/9 09:55:06] App_Identifier[safetyEval] Frontend_Branch[dev] Backend_Branch[dev]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html>

View File

@ -0,0 +1 @@
module.exports={compact:!1,plugins:[["@babel/plugin-proposal-decorators",{legacy:!0}]],presets:[["@babel/preset-env",{targets:{browsers:["ie >= 10"]}}],["@babel/preset-react",{runtime:"automatic"}]]};

View File

@ -0,0 +1 @@
module.exports={javaGit:"http://47.92.113.182:3000/cq_anquan/safety-eval-service.git",javaGitName:"safety-eval-service",environment:{development:{javaGitBranch:"dev",API_HOST:"http://192.168.0.152"},production:{javaGitBranch:"dev",API_HOST:""}},appIdentifier:"safetyEval",contextInject:{appKey:"",fileUrl:"https://skqhdg.porthebei.com:9004/file/uploadFiles2/"},windowInject:{title:"微应用模板",links:[],element:{root:{id:"root"}},scripts:[]},server:{port:"8081",host:"192.168.0.187",open:!1},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

@ -0,0 +1,68 @@
{
"name": "micro-app",
"version": "2.0.0",
"description": "建教帮微应用模板",
"author": "JJB",
"license": "MIT",
"main": "index.js",
"scripts": {
"serve": "node node_modules/@cqsjjb/scripts/rspack.dev.server.js",
"build": "node node_modules/@cqsjjb/scripts/rspack.build.js",
"push": "jjb-cmd push java production",
"clean-cache": "rimraf node_modules/.cache/webpack",
"serve:development": "cross-env NODE_ENV=development npm run serve",
"serve:production": "cross-env NODE_ENV=production npm run serve",
"build:development": "cross-env NODE_ENV=development npm run build",
"build:production": "cross-env NODE_ENV=production npm run build",
"code-optimization": "node node_modules/@cqsjjb/scripts/code-optimization.js",
"lint": "eslint --ext .js,.jsx,.tsx --fix src",
"test:enterprise-info": "node docs/test-reports/测试用例/test-enterprise-info-api.mjs",
"test:enterprise-info:granular": "node docs/test-reports/测试用例/test-enterprise-info-granular.mjs"
},
"dependencies": {
"@ant-design/icons": "^5.0.0",
"@ant-design/pro-components": "^2.8.10",
"@cqsjjb/jjb-common-decorator": "latest",
"@cqsjjb/jjb-common-lib": "latest",
"@cqsjjb/jjb-dva-runtime": "latest",
"@cqsjjb/jjb-react-admin-component": "latest",
"@rc-component/motion": "^1.0.0",
"@rc-component/util": "^1.11.1",
"ahooks": "^3.9.5",
"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",
"react-dom": "^18.2.0",
"zy-react-library": "^1.2.3"
},
"devDependencies": {
"@antfu/eslint-config": "^5.4.1",
"@babel/plugin-proposal-decorators": "^7.19.3",
"@babel/preset-env": "^7.29.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",
"eslint": "^9.37.0",
"eslint-plugin-format": "^1.0.2",
"eslint-plugin-react-hooks": "^7.0.0",
"eslint-plugin-react-refresh": "^0.4.23",
"file-loader": "^6.2.0",
"less-loader": "^11.1.3",
"react-refresh": "^0.14.2",
"style-loader": "^3.3.3",
"typescript": "^5.9.3"
},
"resolutions": {
"history": "^4.10.1",
"path-to-regexp": "^1.9.0",
"react": "$react",
"react-dom": "$react-dom"
}
}