bug问题修护

dev
huwei 2026-07-09 11:04:21 +08:00
parent 0036bd64e1
commit ba40f53d79
33 changed files with 2969 additions and 365 deletions

View File

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

View File

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

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

View File

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

View File

@ -3,6 +3,9 @@ sdk:
app-key: cbbfef15159e4578928dad804eb46dad
client:
gateway:
ignore-urls:
- /safetyEval-h5/**
- /safetyEval-h5/Container/**
url: ${common.gateway.network.http.external}
route:
- 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 = {
antd: {
'ant-prefix': 'micro-temp',
@ -10,7 +10,14 @@
basename: 'safetyEval-h5',
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 = {
env: { app: APP_ENV },
NODE_ENV: 'production'
@ -34,10 +41,27 @@
}, 500);
};
/** 全局接口错误success === false 时自动返回基座 */
/** 全局 HTTP 拦截器 */
window.jjbCommonGlobalConfig = {
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) {
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));
if (data && data.success === false) {
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 {
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 {
width: 1000px;
@ -4277,6 +4298,176 @@
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 {
min-height: 100%;
background: #f4f4f4;
@ -6246,6 +6437,22 @@
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 */
html,
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"
}
}