😎1、增加docker的编译环境,取消对windows编译结果的依赖 2、修复按钮、菜单图标线条模糊问题
This commit is contained in:
parent
4f029aba0c
commit
7a332e4c21
@ -23,6 +23,7 @@ import setIntroduction from '/@/utils/setIconfont';
|
|||||||
// import Watermark from '/@/utils/watermark';
|
// import Watermark from '/@/utils/watermark';
|
||||||
import { initIdleTimeout } from '/@/utils/idleTimeout';
|
import { initIdleTimeout } from '/@/utils/idleTimeout';
|
||||||
import { updateFavicon } from '/@/utils/sysInfo';
|
import { updateFavicon } from '/@/utils/sysInfo';
|
||||||
|
|
||||||
// 引入组件
|
// 引入组件
|
||||||
const LockScreen = defineAsyncComponent(() => import('/@/layout/lockScreen/index.vue'));
|
const LockScreen = defineAsyncComponent(() => import('/@/layout/lockScreen/index.vue'));
|
||||||
const Settings = defineAsyncComponent(() => import('/@/layout/navBars/topBar/settings.vue'));
|
const Settings = defineAsyncComponent(() => import('/@/layout/navBars/topBar/settings.vue'));
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<template v-for="val in chils">
|
<template v-for="val in chils">
|
||||||
<el-sub-menu :index="val.path" :key="val.path" v-if="val.children && val.children.length > 0">
|
<el-sub-menu :index="val.path" :key="val.path" v-if="val.children && val.children.length > 0">
|
||||||
<template #title>
|
<template #title>
|
||||||
<SvgIcon :name="val.meta.icon" />
|
<SvgIcon :name="val.meta.icon" style="font-size: 16px" />
|
||||||
<span>{{ $t(`message.menu.${val.meta.title}`) }}</span>
|
<span>{{ $t(`message.menu.${val.meta.title}`) }}</span>
|
||||||
</template>
|
</template>
|
||||||
<sub-item :chil="val.children" />
|
<sub-item :chil="val.children" />
|
||||||
@ -10,12 +10,12 @@
|
|||||||
<template v-else>
|
<template v-else>
|
||||||
<el-menu-item :index="val.path" :key="val.path">
|
<el-menu-item :index="val.path" :key="val.path">
|
||||||
<template v-if="!val.meta.isLink || (val.meta.isLink && val.meta.isIframe)">
|
<template v-if="!val.meta.isLink || (val.meta.isLink && val.meta.isIframe)">
|
||||||
<SvgIcon :name="val.meta.icon" />
|
<SvgIcon :name="val.meta.icon" style="font-size: 16px" />
|
||||||
<span>{{ $t(`message.menu.${val.meta.title}`) }}</span>
|
<span>{{ $t(`message.menu.${val.meta.title}`) }}</span>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<a class="w100" @click.prevent="onALinkClick(val)">
|
<a class="w100" @click.prevent="onALinkClick(val)">
|
||||||
<SvgIcon :name="val.meta.icon" />
|
<SvgIcon :name="val.meta.icon" style="font-size: 16px" />
|
||||||
{{ $t(`message.menu.${val.meta.title}`) }}
|
{{ $t(`message.menu.${val.meta.title}`) }}
|
||||||
</a>
|
</a>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -5,21 +5,21 @@
|
|||||||
.el-button {
|
.el-button {
|
||||||
font-family: var(--el-font-family);
|
font-family: var(--el-font-family);
|
||||||
}
|
}
|
||||||
// 第三方字体图标大小
|
// // 第三方字体图标大小
|
||||||
.el-button:not(.is-circle) i.el-icon,
|
// .el-button:not(.is-circle) i.el-icon,
|
||||||
.el-button i.iconfont,
|
// .el-button i.iconfont,
|
||||||
.el-button i.fa,
|
// .el-button i.fa,
|
||||||
.el-button--default i.iconfont,
|
// .el-button--default i.iconfont,
|
||||||
.el-button--default i.fa {
|
// .el-button--default i.fa {
|
||||||
font-size: 14px !important;
|
// font-size: 14px !important;
|
||||||
// margin-right: 5px; // vue-next-admin 原有样式
|
// // margin-right: 5px; // vue-next-admin 原有样式
|
||||||
}
|
// }
|
||||||
|
|
||||||
.el-button--small i.iconfont,
|
// .el-button--small i.iconfont,
|
||||||
.el-button--small i.fa {
|
// .el-button--small i.fa {
|
||||||
font-size: 12px !important;
|
// font-size: 12px !important;
|
||||||
// margin-right: 5px; // vue-next-admin 原有样式
|
// // margin-right: 5px; // vue-next-admin 原有样式
|
||||||
}
|
// }
|
||||||
|
|
||||||
/* Input 输入框、InputNumber 计数器
|
/* Input 输入框、InputNumber 计数器
|
||||||
------------------------------- */
|
------------------------------- */
|
||||||
@ -390,7 +390,7 @@
|
|||||||
height: 28px;
|
height: 28px;
|
||||||
}
|
}
|
||||||
.el-button [class*=el-icon]+span{
|
.el-button [class*=el-icon]+span{
|
||||||
margin-left: 0;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.el-table [class*=el-table__row--level] .el-table__expand-icon {
|
.el-table [class*=el-table__row--level] .el-table__expand-icon {
|
||||||
@ -483,10 +483,10 @@
|
|||||||
max-height: 274px !important;
|
max-height: 274px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*修复Cascader 级联选择器高度问题*/
|
// /*修复Cascader 级联选择器高度问题*/
|
||||||
.el-cascader-menu__wrap.el-scrollbar__wrap {
|
// .el-cascader-menu__wrap.el-scrollbar__wrap {
|
||||||
height: 204px !important;
|
// height: 204px !important;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/*用于界面高度自适应(main.vue),区分 scrollbar__view,防止其它使用 scrollbar 的地方出现滚动条消失*/
|
/*用于界面高度自适应(main.vue),区分 scrollbar__view,防止其它使用 scrollbar 的地方出现滚动条消失*/
|
||||||
.layout-container-view .el-scrollbar__view {
|
.layout-container-view .el-scrollbar__view {
|
||||||
@ -521,24 +521,24 @@
|
|||||||
color: var(--el-color-danger) !important;
|
color: var(--el-color-danger) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 级联选择-点击文本也生效
|
// // 级联选择-点击文本也生效
|
||||||
.el-cascader-panel .el-radio {
|
// .el-cascader-panel .el-radio {
|
||||||
width: 100%;
|
// width: 100%;
|
||||||
height: 100%;
|
// height: 100%;
|
||||||
z-index: 10;
|
// z-index: 10;
|
||||||
position: absolute;
|
// position: absolute;
|
||||||
top: 0px;
|
// top: 0px;
|
||||||
right: -8px;
|
// right: -8px;
|
||||||
}
|
// }
|
||||||
|
|
||||||
.el-cascader-panel .el-checkbox {
|
// .el-cascader-panel .el-checkbox {
|
||||||
width: 100%;
|
// width: 100%;
|
||||||
height: 100%;
|
// height: 100%;
|
||||||
z-index: 10;
|
// z-index: 10;
|
||||||
position: absolute;
|
// position: absolute;
|
||||||
top: 0px;
|
// top: 0px;
|
||||||
right: 0px;
|
// right: 0px;
|
||||||
}
|
// }
|
||||||
|
|
||||||
$--el-table-text-color: #fb6d49;
|
$--el-table-text-color: #fb6d49;
|
||||||
|
|
||||||
|
|||||||
@ -283,7 +283,7 @@
|
|||||||
<script setup lang="ts" name="mqttx">
|
<script setup lang="ts" name="mqttx">
|
||||||
import { reactive, ref, onMounted, nextTick } from 'vue';
|
import { reactive, ref, onMounted, nextTick } from 'vue';
|
||||||
import { Search, ChatDotSquare, TopRight, Star, Operation, Setting, Connection, Discount, Open, Delete, Position } from '@element-plus/icons-vue';
|
import { Search, ChatDotSquare, TopRight, Star, Operation, Setting, Connection, Discount, Open, Delete, Position } from '@element-plus/icons-vue';
|
||||||
import * as MQTT from 'mqtt/dist/mqtt.min'; // 针对4.3.7版本的引用方法。5.7.x会提示错误 (import * as MQTT from "mqtt")
|
import * as MQTT from "mqtt"
|
||||||
import mittBus from '/@/utils/mitt'; // 事件总线mitt 解决打包后错误Uncaught (in promise) ReferenceError: Cannot access 'oe' before initialization
|
import mittBus from '/@/utils/mitt'; // 事件总线mitt 解决打包后错误Uncaught (in promise) ReferenceError: Cannot access 'oe' before initialization
|
||||||
|
|
||||||
// vue 3 + vite use MQTT.js refer to https://github.com/mqttjs/MQTT.js/issues/1269
|
// vue 3 + vite use MQTT.js refer to https://github.com/mqttjs/MQTT.js/issues/1269
|
||||||
|
|||||||
@ -125,12 +125,12 @@ import { JobCreateTypeEnum, UpdateJobDetailInput } from '/@/api-services/system/
|
|||||||
|
|
||||||
// HttpMethod 定义,来源后端 HttpMethod 对象的序列化
|
// HttpMethod 定义,来源后端 HttpMethod 对象的序列化
|
||||||
// 下面定义内容【不要】加空格,否则 getHttpJobMessage 中 JSON.stringify(httpJobMessageNet.HttpMethod) 后无法匹配
|
// 下面定义内容【不要】加空格,否则 getHttpJobMessage 中 JSON.stringify(httpJobMessageNet.HttpMethod) 后无法匹配
|
||||||
const httpMethodDef = {
|
const httpMethodDef: Record<string, string> = {
|
||||||
get: '{"Method":"GET"}',
|
get: '{"Method":"GET"}',
|
||||||
post: '{"Method":"POST"}',
|
post: '{"Method":"POST"}',
|
||||||
put: '{"Method":"PUT"}',
|
put: '{"Method":"PUT"}',
|
||||||
delete: '{"Method":"DELETE"}',
|
delete: '{"Method":"DELETE"}',
|
||||||
} as EmptyObjectType;
|
};
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
title: String,
|
title: String,
|
||||||
|
|||||||
@ -159,7 +159,7 @@ const state = reactive({
|
|||||||
ruleForm: {} as UpdateMenuInput,
|
ruleForm: {} as UpdateMenuInput,
|
||||||
});
|
});
|
||||||
// 级联选择器配置选项
|
// 级联选择器配置选项
|
||||||
const cascaderProps = { checkStrictly: true, emitPath: false, value: 'id', label: 'title' };
|
const cascaderProps = { checkOnClickNode: true, checkStrictly: true, emitPath: false, value: 'id', label: 'title' };
|
||||||
|
|
||||||
// 获取全局组件大小
|
// 获取全局组件大小
|
||||||
const getGlobalComponentSize = computed(() => {
|
const getGlobalComponentSize = computed(() => {
|
||||||
|
|||||||
18
docker/docker-compose-builder.yml
Normal file
18
docker/docker-compose-builder.yml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
web-builder:
|
||||||
|
image: node:22-alpine # 官方Node.js v22镜像(Alpine版仅约180MB):ml-citation{ref="3,4" data="citationList"}
|
||||||
|
volumes:
|
||||||
|
- ../Web/:/app # 挂载项目代码目录
|
||||||
|
- ./.env.production:/app/.env.production
|
||||||
|
working_dir: /app
|
||||||
|
environment:
|
||||||
|
NODE_ENV: development
|
||||||
|
command: sh -c "npm install --legacy-peer-deps --registry=https://registry.npmmirror.com && npm run build"
|
||||||
|
net-builder:
|
||||||
|
image: mcr.microsoft.com/dotnet/sdk:9.0
|
||||||
|
volumes:
|
||||||
|
- ../Admin.NET/:/app
|
||||||
|
working_dir: /app
|
||||||
|
command: dotnet build Admin.NET.sln -c Release
|
||||||
@ -9,7 +9,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- TZ=Asia/Shanghai
|
- TZ=Asia/Shanghai
|
||||||
volumes:
|
volumes:
|
||||||
- "./nginx/dist:/usr/share/nginx/html"
|
- ../Web/dist:/usr/share/nginx/html
|
||||||
- "./nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro"
|
- "./nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro"
|
||||||
- "./nginx/key:/etc/nginx/key/"
|
- "./nginx/key:/etc/nginx/key/"
|
||||||
links:
|
links:
|
||||||
@ -38,16 +38,69 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./mysql/mysql:/var/lib/mysql
|
- ./mysql/mysql:/var/lib/mysql
|
||||||
- ./mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
|
- ./mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
|
||||||
|
redis:
|
||||||
|
image: 'redis:latest' # 使用最新版本的 Redis 镜像,也可以指定特定版本如 'redis:6.2.7'
|
||||||
|
container_name: my-redis # 自定义容器名称
|
||||||
|
ports:
|
||||||
|
- '6379:6379' # 映射宿主机的 6379 端口到容器的 6379 端口
|
||||||
|
volumes: # 持久化数据
|
||||||
|
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
|
||||||
|
- ./redis/data:/data:rw
|
||||||
|
- ./redis/logs:/logs
|
||||||
|
#command: ['redis-server', '--appendonly', 'yes'] # 启用AOF持久化
|
||||||
|
command: ['redis-server','/usr/local/etc/redis/redis.conf']
|
||||||
|
environment: # 设置环境变量,例如密码
|
||||||
|
- REDIS_PASSWORD=123456
|
||||||
|
minio:
|
||||||
|
image: minio/minio:RELEASE.2025-04-22T22-12-26Z
|
||||||
|
container_name: minio
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- MINIO_ROOT_USER=admin
|
||||||
|
- MINIO_ROOT_PASSWORD=admin123456
|
||||||
|
volumes:
|
||||||
|
- ./minio/data:/data
|
||||||
|
- ./minio/config:/root/.minio
|
||||||
|
ports:
|
||||||
|
- "9104:9000" # API端口
|
||||||
|
- "9105:9001" # 控制台端口
|
||||||
|
command: server /data --console-address ":9001"
|
||||||
|
tdengine:
|
||||||
|
image: tdengine/tdengine:3.3.6.13
|
||||||
|
volumes:
|
||||||
|
- ./tdengine/taos/dnode/data:/var/lib/taos
|
||||||
|
- ./tdengine/taos/dnode/log:/var/log/taos
|
||||||
|
hostname: tdengine
|
||||||
|
container_name: tdengine
|
||||||
|
privileged: true
|
||||||
|
environment:
|
||||||
|
TAOS_FQDN: "tdengine"
|
||||||
|
TAOS_FIRST_EP: "tdengine" # 指向首个节点主机名
|
||||||
|
TAOS_SECOND_EP: "tdengine" # 可选备用节点
|
||||||
|
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- 6030:6030
|
||||||
|
- 6041:6041
|
||||||
|
- 6044-6049:6044-6049
|
||||||
|
- 6044-6045:6044-6045/udp
|
||||||
|
- 6060:6060
|
||||||
|
|
||||||
|
|
||||||
adminNet:
|
adminNet:
|
||||||
image: mcr.microsoft.com/dotnet/aspnet:6.0
|
image: mcr.microsoft.com/dotnet/aspnet:9.0
|
||||||
ports:
|
ports:
|
||||||
- "9102:5050"
|
- "9102:5050"
|
||||||
environment:
|
environment:
|
||||||
- TZ=Asia/Shanghai
|
- TZ=Asia/Shanghai
|
||||||
volumes:
|
volumes:
|
||||||
- "./app:/app"
|
- ../Admin.NET/Admin.NET.Web.Entry/bin/Release/net9.0/:/app
|
||||||
|
- ./app/Configuration/:/app/Configuration/
|
||||||
|
- ./app/wait-for-it.sh:/app/wait-for-it.sh
|
||||||
working_dir: /app
|
working_dir: /app
|
||||||
command: ["/app/wait-for-it.sh", "mysql:3306", "-t", "120", "--","dotnet", "Admin.NET.Web.Entry.dll"]
|
command: ["/bin/bash", "-c", "/app/wait-for-it.sh mysql:3306 -t 120 && dotnet Admin.NET.Web.Entry.dll --content-root /app/wwwroot"]
|
||||||
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- mysql
|
- mysql
|
||||||
|
- redis
|
||||||
|
|
||||||
|
|||||||
@ -21,13 +21,15 @@ http {
|
|||||||
gzip_disable "MSIE [1-6]\.";
|
gzip_disable "MSIE [1-6]\.";
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen 443 ssl;
|
listen 443 ssl;
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name localhost;
|
server_name localhost;
|
||||||
|
|
||||||
charset utf-8;
|
charset utf-8;
|
||||||
ssl_certificate /etc/nginx/key/abc.admin.com.pem;
|
ssl_certificate /etc/nginx/key/abc.admin.com.pem;
|
||||||
ssl_certificate_key /etc/nginx/key/abc.admin.com.key;
|
ssl_certificate_key /etc/nginx/key/abc.admin.com.key;
|
||||||
ssl_session_cache shared:SSL:1m;
|
ssl_session_cache shared:SSL:1m;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
try_files $uri $uri/ /index.html;
|
try_files $uri $uri/ /index.html;
|
||||||
@ -39,25 +41,20 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
location /prod-api/hubs {
|
location /prod-api/hubs {
|
||||||
proxy_pass http://adminNet:5050/hubs; #启用http长连接支持websocket
|
proxy_pass http://adminNet:5005/hubs; #启用http长连接支持websocket
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
proxy_set_header Connection "upgrade";
|
proxy_set_header Connection "upgrade";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
location /prod-api/ {
|
location /prod-api/ {
|
||||||
|
|
||||||
proxy_set_header Host $http_host;
|
proxy_set_header Host $http_host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header REMOTE-HOST $remote_addr;
|
proxy_set_header REMOTE-HOST $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
proxy_pass http://adminNet:5050/;
|
proxy_pass http://adminNet:5005/;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
error_page 500 502 503 504 /50x.html;
|
error_page 500 502 503 504 /50x.html;
|
||||||
location = /50x.html {
|
location = /50x.html {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user