This commit is contained in:
SGK\17962 2025-08-14 11:45:52 +08:00
commit eb8f8a6a1d
35 changed files with 208 additions and 117 deletions

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -2,7 +2,7 @@
<html lang="zh-cmn-Hans">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.svg" />
<link rel="icon" href="/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="color-scheme" content="light dark" />
<title>%VITE_APP_TITLE%</title>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -9,3 +9,17 @@ src/App.vue
--------watermark------------
录入时,增加了营销人员列表
src/views/mps/private-ebank-new/modules/private-ebank-new-operate-drawer.vue
--------默认主题--------------
src/theme/settings.ts
--------头像、LOGO、favicon---
src/assets/imgs
public/favicon.x 注意此图要缩小N倍
-------tomcat 部署-----------
https://www.cnblogs.com/Fooo/p/17807277.html
-------tong web 部署---------
https://blog.csdn.net/user990378983/article/details/130324181

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

View File

@ -1,9 +1,16 @@
<script lang="ts" setup>
import defaultLogo from '@/assets/imgs/logo.png';
defineOptions({ name: 'SystemLogo' });
</script>
<template>
<icon-local-logo />
<!-- <icon-local-logo />-->
<n-avatar
round
size="small"
:src="defaultLogo"
/>
</template>
<style scoped></style>

View File

@ -36,7 +36,7 @@ const swatches: string[] = [
<template>
<NDivider>{{ $t('theme.themeColor.title') }}</NDivider>
<div class="flex-col-stretch gap-12px">
<NTooltip placement="top-start">
<!-- <NTooltip placement="top-start">
<template #trigger>
<SettingItem key="recommend-color" :label="$t('theme.recommendColor')">
<NSwitch v-model:value="themeStore.recommendColor" />
@ -56,7 +56,7 @@ const swatches: string[] = [
https://uicolors.app/create
</NButton>
</p>
</NTooltip>
</NTooltip>-->
<SettingItem v-for="(_, key) in themeStore.themeColors" :key="key" :label="$t(`theme.themeColor.${key}`)">
<template v-if="key === 'info'" #suffix>
<NCheckbox v-model:checked="themeStore.isInfoFollowPrimary">

View File

@ -4,9 +4,11 @@ export const themeSettings: App.Theme.ThemeSetting = {
grayscale: false,
colourWeakness: false,
recommendColor: false,
themeColor: '#0E42D2',
//themeColor: '#0E42D2',
themeColor: '#ef4444',//默认主色
otherColor: {
info: '#0E42D2',
//info: '#0E42D2',
info: '#ef4444',//默认信息色
success: '#009A29',
warning: '#D25F00',
error: '#CB2634'

View File

@ -40,7 +40,10 @@ const activeModule = computed(() => moduleMap[props.module || 'pwd-login']);
<template>
<div class="relative min-h-screen w-full flex flex-wrap">
<div class="hidden min-h-screen w-50% bg-primary-100 lg:block dark:bg-primary-800">
<!-- `bg-primary-100`,这个颜色是主题色primary的100号色阶,同themeColor一致-->
<!-- <div class="hidden min-h-screen w-50% bg-primary-100 lg:block dark:bg-primary-800">-->
<!-- bg-[#d4eeff]-->
<div class="hidden min-h-screen w-50% bg-blue lg:block dark:bg-gray-800">
<div class="size-full flex-center">
<img class="w-60% sm:w-80%" :src="loginBackground" />
</div>

View File

@ -8,9 +8,8 @@
<artifactId>ruoyi-vue-plus</artifactId>
<version>${revision}</version>
<name>RuoYi-Vue-Plus</name>
<url>https://gitee.com/dromara/RuoYi-Vue-Plus</url>
<description>Dromara RuoYi-Vue-Plus多租户管理系统</description>
<name>mps</name>
<description>全员营销计价系统</description>
<properties>
<revision>5.4.1</revision>

View File

@ -0,0 +1,26 @@
服务器2台,一台应用、一台数据库
应用服务器放弃monitor与job,只部署admin应用即可
数据库服务器部署数据库+缓存
---------------------应用服务器-----------------------------
操作系统:银河麒麟系统V10 (Ubuntu 18.04 LTS内核)
JDK:Alibaba Dragonwell 17 (兼容OPENJDK17)
中间件:东方通TongWeb 8.0+ (8.0以下不兼容OPENJDK17) 开发阶段继续暂时使用 undertow+tomcat
代理:东方通TongHttpServer 版本待定 (如果不考虑后续扩展(软负载等),可以略掉,与后端一同使用中间件部署即可)
报表:开源JasperReports 6.0+? (作为插件集成到应用内,与应用一同启动,需验证信创兼容性,评估问题不大)
---------------------数据库服务器-----------------------------
操作系统:银河麒麟系统V10 (Ubuntu 18.04 LTS内核)
数据库:达梦 版本待定
缓存:TongRDS 2.2(2.2.1.7) (2.2版本兼容redis6.x、7.x)
JDK:Alibaba Dragonwell 8 (TongRDS依赖JDK1.8)
https://localhost:9060/console登录
本地tongweb用户:thanos/G@top1#36
集中管理->扩展支持->版本生成->jakarta版本->${tongweb.home}\tongweb-enterprise部署
ui注意增加WEB-INF/web.xml
注意修改tongweb通道的http设置

View File

@ -8,8 +8,8 @@
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>ruoyi-admin</artifactId>
<packaging>war</packaging>
<artifactId>mps-server</artifactId>
<description>
web服务入口
@ -143,6 +143,7 @@
<artifactId>maven-war-plugin</artifactId>
<version>${maven-war-plugin.version}</version>
<configuration>
<!--如果想在没有web.xml文件的情况下构建WAR请设置为false。-->
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
</configuration>

View File

@ -17,7 +17,7 @@ public class DromaraApplication {
SpringApplication application = new SpringApplication(DromaraApplication.class);
application.setApplicationStartup(new BufferingApplicationStartup(2048));
application.run(args);
System.out.println("(♥◠‿◠)ノ゙ RuoYi-Vue-Plus启动成功 ლ(´ڡ`ლ)゙");
System.out.println("mps started successfully!");
}
}

View File

@ -22,7 +22,7 @@ public class IndexController {
*/
@GetMapping("/")
public String index() {
return StringUtils.format("欢迎使用{}后台管理框架,请通过前端地址访问。", SpringUtils.getApplicationName());
return StringUtils.format("请通过UI访问", SpringUtils.getApplicationName());
}
}

View File

@ -1,7 +1,7 @@
--- # 监控中心配置
spring.boot.admin.client:
# 增加客户端开关
enabled: true
enabled: false
url: http://localhost:9090/admin
instance:
service-host-type: IP
@ -13,9 +13,9 @@ spring.boot.admin.client:
--- # snail-job 配置
snail-job:
enabled: true
enabled: false
# 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务
group: "ruoyi_group"
group: "mps_group"
# SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config` 表
token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT"
server:
@ -105,7 +105,7 @@ spring.data:
# 数据库索引
database: 0
# redis 密码必须配置
password: 123456
password: 123456 #TongRDS->cfg.xml->Listen.Secure2或3需要密码(RedisPassword),其他不需要
# 连接超时时间
timeout: 10s
# 是否开启ssl
@ -122,7 +122,7 @@ redisson:
# 单节点配置
singleServerConfig:
# 客户端名称 不能用中文
clientName: RuoYi-Vue-Plus
clientName: Mps
# 最小空闲连接数
connectionMinimumIdleSize: 8
# 连接池大小
@ -265,7 +265,6 @@ justauth:
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=gitlab
gitea:
# 前端改动 https://gitee.com/JavaLionLi/plus-ui/pulls/204
# gitea 服务器地址
server-url: https://demo.gitea.com
client-id: 10**********6

View File

@ -1,10 +1,10 @@
--- # 临时文件存储位置 避免临时文件被系统清理报错
spring.servlet.multipart.location: /ruoyi/server/temp
spring.servlet.multipart.location: /mps/server/temp
--- # 监控中心配置
spring.boot.admin.client:
# 增加客户端开关
enabled: true
enabled: false
url: http://localhost:9090/admin
instance:
service-host-type: IP
@ -16,9 +16,9 @@ spring.boot.admin.client:
--- # snail-job 配置
snail-job:
enabled: true
enabled: false
# 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务
group: "ruoyi_group"
group: "mps_group"
# SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config`表
token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT"
server:
@ -124,7 +124,7 @@ redisson:
# 单节点配置
singleServerConfig:
# 客户端名称 不能用中文
clientName: RuoYi-Vue-Plus
clientName: Mps
# 最小空闲连接数
connectionMinimumIdleSize: 32
# 连接池大小

View File

@ -1,24 +1,34 @@
# 开发环境配置
server:
# 服务器的HTTP端口默认为8080
# 服务器的HTTP端口默认为8080,部署到外部中间件时会被覆盖,以中间件端口为准
port: 8080
servlet:
# 应用的访问路径
# 应用的访问路径,部署到外部中间件时会被覆盖,以中间件路径(前缀)为准
context-path: /
# undertow 配置
undertow:
#undertow:
# HTTP post内容的最大大小。当值为-1时默认值为大小是无限的
max-http-post-size: -1
#max-http-post-size: -1
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小,越小的空间被利用越充分
buffer-size: 512
#buffer-size: 512
# 是否分配的直接内存
direct-buffers: true
threads:
#direct-buffers: true
#threads:
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
io: 8
#io: 8
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
worker: 256
#worker: 256
#tomcat:
# tomcat的URI编码
#uri-encoding: UTF-8
# 连接数满后的排队数默认为100
#accept-count: 1000
#threads:
# tomcat最大线程数默认为200
#max: 800
# Tomcat启动初始化的线程数默认值10
#min-spare: 100
captcha:
# 是否启用验证码校验
@ -52,7 +62,7 @@ user:
# Spring配置
spring:
application:
name: RuoYi-Vue-Plus
name: Mps
threads:
# 开启虚拟线程 仅jdk21可用
virtual:
@ -176,10 +186,10 @@ api-decrypt:
springdoc:
api-docs:
# 是否开启接口文档
enabled: true
enabled: false
info:
# 标题
title: '标题:RuoYi-Vue-Plus多租户管理系统_接口文档'
title: '标题:cds_接口文档'
# 描述
description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...'
# 版本
@ -188,7 +198,7 @@ springdoc:
contact:
name: Lion Li
email: crazylionli@163.com
url: https://gitee.com/dromara/RuoYi-Vue-Plus
url: https://gtop.com/cds/mps
components:
# 鉴权方式配置
security-schemes:
@ -263,9 +273,9 @@ websocket:
--- # warm-flow工作流配置
warm-flow:
# 是否开启工作流默认true
enabled: true
enabled: false
# 是否开启设计器ui
ui: true
ui: false
# 默认Authorization如果有多个token用逗号分隔
token-name: ${sa-token.token-name},clientid
# 流程状态对应的三元色

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.path" value="./logs"/>
<property name="log.path" value="/log"/>
<property name="console.log.pattern"
value="%cyan(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>

View File

@ -25,7 +25,9 @@ public class ApiDecryptAutoConfiguration {
registration.setDispatcherTypes(DispatcherType.REQUEST);
registration.setFilter(new CryptoFilter(properties));
registration.addUrlPatterns("/*");
registration.setName("cryptoFilter");
//tongweb dulp cryptoFilter
registration.setName("mpsCryptoFilter");
registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE);
return registration;
}

View File

@ -135,7 +135,7 @@ public class RedisConfig {
* # 集群配置
* clusterServersConfig:
* # 客户端名称
* clientName: ${ruoyi.name}
* clientName: ${cds.name}
* # master最小空闲连接数
* masterConnectionMinimumIdleSize: 32
* # master连接池大小

View File

@ -38,10 +38,16 @@
</exclusions>
</dependency>
<!-- web 容器使用 undertow 性能更强 -->
<dependency>
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
</dependency>-->
<!-- 添加tongweb-spring-boot-starter依赖 -->
<!--<dependency>
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-starter</artifactId>
<version>8.0.9.03</version> &lt;!&ndash; 按实际版本调整 &ndash;&gt;
</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@ -1,63 +0,0 @@
package org.dromara.common.web.config;
import io.undertow.server.DefaultByteBufferPool;
import io.undertow.server.handlers.DisallowedMethodsHandler;
import io.undertow.util.HttpString;
import io.undertow.websockets.jsr.WebSocketDeploymentInfo;
import org.dromara.common.core.utils.SpringUtils;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.core.task.VirtualThreadTaskExecutor;
/**
* Undertow 自定义配置
*
* @author Lion Li
*/
@AutoConfiguration
public class UndertowConfig implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {
/**
* 自定义 Undertow 配置
* <p>
* 主要配置内容包括
* 1. 配置 WebSocket 部署信息
* 2. 在虚拟线程模式下使用虚拟线程池
* 3. 禁用不安全的 HTTP 方法 CONNECTTRACETRACK
* </p>
*
* @param factory Undertow Web 服务器工厂
*/
@Override
public void customize(UndertowServletWebServerFactory factory) {
factory.addDeploymentInfoCustomizers(deploymentInfo -> {
// 配置 WebSocket 部署信息设置 WebSocket 使用的缓冲区池
WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo();
webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(true, 1024));
deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo);
// 如果启用了虚拟线程配置 Undertow 使用虚拟线程池
if (SpringUtils.isVirtual()) {
// 创建虚拟线程池线程池前缀为 "undertow-"
VirtualThreadTaskExecutor executor = new VirtualThreadTaskExecutor("undertow-");
// 设置虚拟线程池为执行器和异步执行器
deploymentInfo.setExecutor(executor);
deploymentInfo.setAsyncExecutor(executor);
}
// 配置禁止某些不安全的 HTTP 方法 CONNECTTRACETRACK
deploymentInfo.addInitialHandlerChainWrapper(handler -> {
// 禁止三个方法 CONNECT/TRACE/TRACK 也是不安全的 避免爬虫骚扰
HttpString[] disallowedHttpMethods = {
HttpString.tryFromString("CONNECT"),
HttpString.tryFromString("TRACE"),
HttpString.tryFromString("TRACK")
};
// 使用 DisallowedMethodsHandler 拦截并拒绝这些方法的请求
return new DisallowedMethodsHandler(handler, disallowedHttpMethods);
});
});
}
}

View File

@ -2,4 +2,4 @@ org.dromara.common.web.config.CaptchaConfig
org.dromara.common.web.config.FilterConfig
org.dromara.common.web.config.I18nConfig
org.dromara.common.web.config.ResourcesConfig
org.dromara.common.web.config.UndertowConfig

View File

@ -8,7 +8,7 @@
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<packaging>war</packaging>
<artifactId>ruoyi-monitor-admin</artifactId>
<dependencies>
@ -24,10 +24,10 @@
</exclusions>
</dependency>
<!-- web 容器使用 undertow 性能更强 -->
<dependency>
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
</dependency>-->
<!-- spring security 安全认证 -->
<dependency>
@ -50,6 +50,12 @@
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
</dependencies>
<build>
@ -67,6 +73,23 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven-war-plugin.version}</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
</build>

View File

@ -0,0 +1,18 @@
package org.dromara.monitor.admin;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* web容器中进行部署
*
* @author Lion Li
*/
public class MonitorServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MonitorAdminApplication.class);
}
}

View File

@ -44,5 +44,6 @@ spring.boot.admin.client:
metadata:
username: ${spring.boot.admin.client.username}
userpassword: ${spring.boot.admin.client.password}
service-base-url: http://localhost:9090/
username: @monitor.username@
password: @monitor.password@

View File

@ -8,7 +8,7 @@
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<packaging>war</packaging>
<artifactId>ruoyi-snailjob-server</artifactId>
<dependencies>
@ -35,6 +35,9 @@
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>${spring-boot-admin.version}</version>
</dependency>
</dependencies>
<build>
@ -52,6 +55,22 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven-war-plugin.version}</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
</build>

View File

@ -0,0 +1,18 @@
package org.dromara.snailjob;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* web容器中进行部署
*
* @author Lion Li
*/
public class JobServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SnailJobServerApplication.class);
}
}

View File

@ -30,7 +30,7 @@ snail-job:
--- # 监控中心配置
spring.boot.admin.client:
# 增加客户端开关
enabled: true
enabled: false
url: http://localhost:9090/admin
instance:
service-host-type: IP

View File

@ -197,7 +197,7 @@ public class GenController extends BaseController {
response.reset();
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\"");
response.setHeader("Content-Disposition", "attachment; filename=\"cds.zip\"");
response.addHeader("Content-Length", "" + data.length);
response.setContentType("application/octet-stream; charset=UTF-8");
IoUtil.write(response.getOutputStream(), false, data);

View File

@ -24,7 +24,7 @@ services:
# 时区上海
TZ: Asia/Shanghai
ACCEPT_EULA: "Y"
SA_PASSWORD: "Ruoyi@123"
SA_PASSWORD: "mps@123"
ports:
- "1433:1433"
volumes:

View File

@ -1,5 +1,5 @@
# redis 密码
requirepass ruoyi123
requirepass mps123
# key 监听器配置
# notify-keyspace-events Ex