development test
parent
0912cf737a
commit
78bb40e3b6
|
|
@ -26,7 +26,7 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@Api(tags = "文件存储管理")
|
@Api(tags = "文件存储管理")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/file-storage")
|
@RequestMapping("/safety-eval/file-storage")
|
||||||
public class FileStorageController {
|
public class FileStorageController {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||||
import org.springframework.scheduling.annotation.EnableAsync;
|
import org.springframework.scheduling.annotation.EnableAsync;
|
||||||
|
import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 安全评价业务服务启动类
|
* 安全评价业务服务启动类
|
||||||
|
|
@ -27,7 +28,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
|
||||||
@EnableGatewayServer
|
@EnableGatewayServer
|
||||||
@EnableAsync
|
@EnableAsync
|
||||||
@EnableDiscoveryClient
|
@EnableDiscoveryClient
|
||||||
|
@EnableSwagger2
|
||||||
@SpringBootApplication(scanBasePackages = {"org.qinan.safetyeval", "com.jjb.saas"})
|
@SpringBootApplication(scanBasePackages = {"org.qinan.safetyeval", "com.jjb.saas"})
|
||||||
@EnableDubbo
|
@EnableDubbo
|
||||||
@EnableFeignClients(basePackages = {"org.qinan.safetyeval", "com.jjb.saas"})
|
@EnableFeignClients(basePackages = {"org.qinan.safetyeval", "com.jjb.saas"})
|
||||||
|
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
package org.qinan.safetyeval.start.config;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
|
||||||
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 雪花 ID 超出 JS Number 安全整数范围,序列化为字符串避免前端精度丢失。
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
public class JacksonConfig {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public Jackson2ObjectMapperBuilderCustomizer longToStringCustomizer() {
|
|
||||||
return builder -> {
|
|
||||||
builder.serializerByType(Long.class, ToStringSerializer.instance);
|
|
||||||
builder.serializerByType(Long.TYPE, ToStringSerializer.instance);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
package org.qinan.safetyeval.start.config;
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import springfox.documentation.builders.ApiInfoBuilder;
|
|
||||||
import springfox.documentation.builders.PathSelectors;
|
|
||||||
import springfox.documentation.builders.RequestHandlerSelectors;
|
|
||||||
import springfox.documentation.service.ApiInfo;
|
|
||||||
import springfox.documentation.spi.DocumentationType;
|
|
||||||
import springfox.documentation.spring.web.plugins.Docket;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
public class SwaggerConfig {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public Docket safetyEvalApi() {
|
|
||||||
return new Docket(DocumentationType.OAS_30)
|
|
||||||
.groupName("safety-eval")
|
|
||||||
.apiInfo(apiInfo())
|
|
||||||
.select()
|
|
||||||
.apis(RequestHandlerSelectors.basePackage("org.qinan.safetyeval.adapter.web"))
|
|
||||||
.paths(PathSelectors.any())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
private ApiInfo apiInfo() {
|
|
||||||
return new ApiInfoBuilder()
|
|
||||||
.title("安全评价服务 API")
|
|
||||||
.description("安全评价业务接口文档")
|
|
||||||
.version("1.0")
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
package org.qinan.safetyeval.start.config;
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.web.cors.CorsConfiguration;
|
|
||||||
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
|
||||||
import org.springframework.web.filter.CorsFilter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 本地联调跨域配置
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
public class WebCorsConfig {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public CorsFilter corsFilter() {
|
|
||||||
CorsConfiguration config = new CorsConfiguration();
|
|
||||||
config.addAllowedOriginPattern("*");
|
|
||||||
config.addAllowedHeader("*");
|
|
||||||
config.addAllowedMethod("*");
|
|
||||||
config.setAllowCredentials(true);
|
|
||||||
|
|
||||||
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
|
||||||
source.registerCorsConfiguration("/**", config);
|
|
||||||
return new CorsFilter(source);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
package org.qinan.safetyeval.start.config;
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
|
||||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
|
||||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
@EnableWebSecurity
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
|
||||||
|
|
||||||
private final WebSecurityProperties properties;
|
|
||||||
|
|
||||||
public WebSecurityConfig(WebSecurityProperties properties) {
|
|
||||||
this.properties = properties;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
|
||||||
String[] authenticated = properties.authenticatedPatterns();
|
|
||||||
String[] permitAll = properties.permitAllPatterns();
|
|
||||||
|
|
||||||
if (permitAll.length > 0) {
|
|
||||||
http.csrf().ignoringAntMatchers(permitAll);
|
|
||||||
}
|
|
||||||
|
|
||||||
org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer<HttpSecurity>
|
|
||||||
.ExpressionInterceptUrlRegistry requests = http.authorizeRequests();
|
|
||||||
|
|
||||||
// Authentication rules take priority when they overlap with a public prefix.
|
|
||||||
if (authenticated.length > 0) {
|
|
||||||
requests.antMatchers(authenticated).authenticated();
|
|
||||||
}
|
|
||||||
if (permitAll.length > 0) {
|
|
||||||
requests.antMatchers(permitAll).permitAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
requests.anyRequest().authenticated()
|
|
||||||
.and()
|
|
||||||
.formLogin()
|
|
||||||
.and()
|
|
||||||
.httpBasic();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,92 +0,0 @@
|
||||||
package org.qinan.safetyeval.start.config;
|
|
||||||
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
@ConfigurationProperties(prefix = "safety-eval.security")
|
|
||||||
public class WebSecurityProperties {
|
|
||||||
|
|
||||||
private List<String> permitAllPaths = new ArrayList<>();
|
|
||||||
private List<String> permitAllPrefixes = new ArrayList<>();
|
|
||||||
private List<String> authenticatedPaths = new ArrayList<>();
|
|
||||||
private List<String> authenticatedPrefixes = new ArrayList<>();
|
|
||||||
|
|
||||||
public String[] permitAllPatterns() {
|
|
||||||
return patterns(permitAllPaths, permitAllPrefixes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] authenticatedPatterns() {
|
|
||||||
return patterns(authenticatedPaths, authenticatedPrefixes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String[] patterns(List<String> paths, List<String> prefixes) {
|
|
||||||
List<String> patterns = new ArrayList<>();
|
|
||||||
for (String path : safe(paths)) {
|
|
||||||
String normalized = normalizePath(path);
|
|
||||||
if (normalized != null) {
|
|
||||||
patterns.add(normalized);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (String prefix : safe(prefixes)) {
|
|
||||||
String normalized = normalizePath(prefix);
|
|
||||||
if (normalized != null) {
|
|
||||||
patterns.add(normalized.endsWith("/**") ? normalized : stripTrailingSlash(normalized) + "/**");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return patterns.toArray(new String[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<String> safe(List<String> values) {
|
|
||||||
return values == null ? Collections.emptyList() : values;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String normalizePath(String path) {
|
|
||||||
if (!StringUtils.hasText(path)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String trimmed = path.trim();
|
|
||||||
return trimmed.startsWith("/") ? trimmed : "/" + trimmed;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String stripTrailingSlash(String path) {
|
|
||||||
return path.length() > 1 && path.endsWith("/") ? path.substring(0, path.length() - 1) : path;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getPermitAllPaths() {
|
|
||||||
return permitAllPaths;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPermitAllPaths(List<String> permitAllPaths) {
|
|
||||||
this.permitAllPaths = permitAllPaths;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getPermitAllPrefixes() {
|
|
||||||
return permitAllPrefixes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPermitAllPrefixes(List<String> permitAllPrefixes) {
|
|
||||||
this.permitAllPrefixes = permitAllPrefixes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getAuthenticatedPaths() {
|
|
||||||
return authenticatedPaths;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAuthenticatedPaths(List<String> authenticatedPaths) {
|
|
||||||
this.authenticatedPaths = authenticatedPaths;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getAuthenticatedPrefixes() {
|
|
||||||
return authenticatedPrefixes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAuthenticatedPrefixes(List<String> authenticatedPrefixes) {
|
|
||||||
this.authenticatedPrefixes = authenticatedPrefixes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -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
File diff suppressed because one or more lines are too long
|
|
@ -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:15:59] 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/63.f5cd6d9594782b68.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.a22a870a5c7abd5d.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:15:59] 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>
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -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
|
|
@ -29,8 +29,9 @@
|
||||||
"@rc-component/motion": "^1.0.0",
|
"@rc-component/motion": "^1.0.0",
|
||||||
"@rc-component/util": "^1.11.1",
|
"@rc-component/util": "^1.11.1",
|
||||||
"ahooks": "^3.9.5",
|
"ahooks": "^3.9.5",
|
||||||
"antd": "^5.11.2",
|
"antd": "^5.29.2",
|
||||||
"dayjs": "^1.11.7",
|
"dayjs": "^1.11.7",
|
||||||
|
"echarts": "^6.1.0",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"qrcode.react": "^4.2.0",
|
"qrcode.react": "^4.2.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
|
|
@ -44,6 +45,7 @@
|
||||||
"@babel/preset-react": "^7.29.7",
|
"@babel/preset-react": "^7.29.7",
|
||||||
"@cqsjjb/scripts": "latest",
|
"@cqsjjb/scripts": "latest",
|
||||||
"@eslint-react/eslint-plugin": "^2.2.2",
|
"@eslint-react/eslint-plugin": "^2.2.2",
|
||||||
|
"ajv": "^8.20.0",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"css-loader": "^6.8.1",
|
"css-loader": "^6.8.1",
|
||||||
Loading…
Reference in New Issue