10 Commits

Author SHA1 Message Date
疯狂的狮子Li
1c55936408 🦁🦁🦁发布 v5.6.2-v2.6.2 版本 依赖升级 2026-06-17 12:58:22 +08:00
疯狂的狮子Li
f1380a27ba 🦁🦁🦁发布 v5.6.2-v2.6.2 版本 依赖升级 2026-06-17 12:57:48 +08:00
疯狂的狮子Li
c9d48c0390 !269 fix 修复上传文件图标问题
Merge pull request !269 from Mercurialx/dev
2026-06-03 09:36:49 +00:00
lx
fe1db29d7d fix 修复上传文件图标问题 2026-06-03 15:55:01 +08:00
疯狂的狮子Li
aa11787fe6 update 优化 黑夜模式选中 2026-05-28 16:29:54 +08:00
疯狂的狮子Li
86f865af5d !265 修复深色模式按钮悬浮样式异常
Merge pull request !265 from 牛奶/修复深色模式按钮悬浮样式异常
2026-05-28 08:27:17 +00:00
牛奶
2ec90b1d36 修复深色模式按钮悬浮样式异常 2026-05-27 06:12:37 +00:00
疯狂的狮子Li
eb05c5197f fix 修复 类型问题导致的警告与字典样式问题 2026-05-22 10:22:48 +08:00
疯狂的狮子Li
6fd38aef43 fix 修复 删除无用代码 2026-05-11 18:50:41 +08:00
疯狂的狮子Li
10cd746f52 fix 修复 前端输入性CVE漏洞 禁止使用代码生成到本地路径 2026-05-06 15:38:43 +08:00
11 changed files with 103 additions and 74 deletions

View File

@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package",
"name": "ruoyi-vue-plus",
"version": "5.6.1-2.6.1",
"version": "5.6.2-2.6.2",
"description": "RuoYi-Vue-Plus多租户管理系统",
"author": "LionLi",
"license": "MIT",

View File

@@ -61,14 +61,6 @@ export const delTable = (tableId: string | number | Array<string | number>) => {
});
};
// 生成代码(自定义路径)
export const genCode = (tableId: string | number) => {
return request({
url: '/tool/gen/genCode/' + tableId,
method: 'get'
});
};
// 同步数据库
export const synchDb = (tableId: string | number) => {
return request({

View File

@@ -13,8 +13,6 @@ export interface TableVO extends BaseEntity {
businessName: string;
functionName: string;
functionAuthor: string;
genType: string;
genPath: string;
pkColumn?: any;
columns?: any;
options?: any;
@@ -81,8 +79,6 @@ export interface DbTableVO {
businessName?: any;
functionName?: any;
functionAuthor?: any;
genType?: any;
genPath?: any;
pkColumn?: any;
columns: DbColumnVO[];
options?: any;
@@ -162,8 +158,6 @@ export interface DbTableForm extends BaseEntity {
businessName: string;
functionName: string;
functionAuthor: string;
genType: string;
genPath: string;
pkColumn?: any;
columns: DbColumnForm[];
options: string;

View File

@@ -67,6 +67,29 @@ html.dark {
--el-color-primary-light-9: #262727;
}
.el-table {
--el-table-current-row-bg-color: var(--el-color-primary-dark-7)
}
.el-dropdown__popper {
--el-dropdown-menuItem-hover-fill: var(--el-color-primary-dark-7)
}
.el-button {
--el-button-hover-bg-color: var(--el-color-primary-dark-9);
--el-button-hover-border-color: var(--el-color-primary-dark-7);
}
.el-button.is-plain {
--el-button-hover-bg-color: var(--el-fill-color-light);
--el-button-hover-border-color: var(--el-color-primary);
}
.el-button.is-dashed {
--el-button-hover-bg-color: var(--el-fill-color-light);
--el-button-hover-border-color: var(--el-color-primary);
}
.el-button--primary {
--el-button-bg-color: #2b6bd3;
--el-button-border-color: #3a7be8;
@@ -81,6 +104,18 @@ html.dark {
--el-button-bg-color: rgba(43, 107, 211, 0.12);
--el-button-border-color: rgba(58, 123, 232, 0.5);
--el-button-text-color: #dbe8ff;
--el-button-hover-text-color: var(--el-color-white);
--el-button-hover-bg-color: var(--el-color-primary);
--el-button-hover-border-color: var(--el-color-primary);
--el-button-active-bg-color: rgba(43, 107, 211, 0.28);
--el-button-active-border-color: rgba(43, 107, 211, 0.8);
}
.el-button--primary.is-dashed {
--el-button-bg-color: rgba(43, 107, 211, 0.12);
--el-button-border-color: rgba(58, 123, 232, 0.5);
--el-button-text-color: #dbe8ff;
--el-button-hover-text-color: #dbe8ff;
--el-button-hover-bg-color: rgba(58, 123, 232, 0.2);
--el-button-hover-border-color: rgba(58, 123, 232, 0.7);
--el-button-active-bg-color: rgba(43, 107, 211, 0.28);
@@ -101,6 +136,18 @@ html.dark {
--el-button-bg-color: rgba(31, 138, 90, 0.12);
--el-button-border-color: rgba(41, 164, 109, 0.5);
--el-button-text-color: #dbf6e8;
--el-button-hover-text-color: var(--el-color-white);
--el-button-hover-bg-color: var(--el-color-success);
--el-button-hover-border-color: var(--el-color-success);
--el-button-active-bg-color: rgba(31, 138, 90, 0.28);
--el-button-active-border-color: rgba(31, 138, 90, 0.8);
}
.el-button--success.is-dashed {
--el-button-bg-color: rgba(31, 138, 90, 0.12);
--el-button-border-color: rgba(41, 164, 109, 0.5);
--el-button-text-color: #dbf6e8;
--el-button-hover-text-color: #dbf6e8;
--el-button-hover-bg-color: rgba(41, 164, 109, 0.2);
--el-button-hover-border-color: rgba(41, 164, 109, 0.7);
--el-button-active-bg-color: rgba(31, 138, 90, 0.28);
@@ -121,6 +168,18 @@ html.dark {
--el-button-bg-color: rgba(184, 121, 34, 0.12);
--el-button-border-color: rgba(214, 149, 59, 0.5);
--el-button-text-color: #ffecc8;
--el-button-hover-text-color: var(--el-color-white);
--el-button-hover-bg-color: var(--el-color-warning);
--el-button-hover-border-color: var(--el-color-warning);
--el-button-active-bg-color: rgba(184, 121, 34, 0.28);
--el-button-active-border-color: rgba(184, 121, 34, 0.8);
}
.el-button--warning.is-dashed {
--el-button-bg-color: rgba(184, 121, 34, 0.12);
--el-button-border-color: rgba(214, 149, 59, 0.5);
--el-button-text-color: #ffecc8;
--el-button-hover-text-color: #ffecc8;
--el-button-hover-bg-color: rgba(214, 149, 59, 0.2);
--el-button-hover-border-color: rgba(214, 149, 59, 0.7);
--el-button-active-bg-color: rgba(184, 121, 34, 0.28);
@@ -141,6 +200,18 @@ html.dark {
--el-button-bg-color: rgba(178, 74, 74, 0.12);
--el-button-border-color: rgba(209, 96, 96, 0.5);
--el-button-text-color: #ffd6d6;
--el-button-hover-text-color: var(--el-color-white);
--el-button-hover-bg-color: var(--el-color-danger);
--el-button-hover-border-color: var(--el-color-danger);
--el-button-active-bg-color: rgba(178, 74, 74, 0.28);
--el-button-active-border-color: rgba(178, 74, 74, 0.8);
}
.el-button--danger.is-dashed {
--el-button-bg-color: rgba(178, 74, 74, 0.12);
--el-button-border-color: rgba(209, 96, 96, 0.5);
--el-button-text-color: #ffd6d6;
--el-button-hover-text-color: #ffd6d6;
--el-button-hover-bg-color: rgba(209, 96, 96, 0.2);
--el-button-hover-border-color: rgba(209, 96, 96, 0.7);
--el-button-active-bg-color: rgba(178, 74, 74, 0.28);
@@ -161,6 +232,18 @@ html.dark {
--el-button-bg-color: rgba(75, 85, 99, 0.16);
--el-button-border-color: rgba(102, 112, 133, 0.55);
--el-button-text-color: #e5e7eb;
--el-button-hover-text-color: var(--el-color-white);
--el-button-hover-bg-color: var(--el-color-info);
--el-button-hover-border-color: var(--el-color-info);
--el-button-active-bg-color: rgba(75, 85, 99, 0.3);
--el-button-active-border-color: rgba(75, 85, 99, 0.85);
}
.el-button--info.is-dashed {
--el-button-bg-color: rgba(75, 85, 99, 0.16);
--el-button-border-color: rgba(102, 112, 133, 0.55);
--el-button-text-color: #e5e7eb;
--el-button-hover-text-color: #e5e7eb;
--el-button-hover-bg-color: rgba(102, 112, 133, 0.22);
--el-button-hover-border-color: rgba(102, 112, 133, 0.75);
--el-button-active-bg-color: rgba(75, 85, 99, 0.3);

View File

@@ -34,7 +34,7 @@
<transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
<li v-for="(file, index) in fileList" :key="file.uid" class="el-upload-list__item ele-upload-list__item-content">
<el-link :href="`${file.url}`" :underline="false" target="_blank">
<span class="el-icon-document"> {{ getFileName(file.name) }} </span>
<el-icon><document /></el-icon> {{ getFileName(file.name) }}
</el-link>
<div class="ele-upload-list__item-content-action">
<el-button type="danger" v-if="!disabled" link @click="handleDelete(index)">删除</el-button>

View File

@@ -11,18 +11,20 @@ import { useTagsViewStore } from '@/store/modules/tagsView';
const tagAndTagSpacing = ref(4);
const scrollContainerRef = ref<ElScrollbarInstance>();
const scrollWrapper = computed(() => scrollContainerRef.value?.$refs.wrapRef);
const scrollWrapper = computed<HTMLDivElement | undefined>(() => scrollContainerRef.value?.wrapRef);
onMounted(() => {
scrollWrapper.value?.addEventListener('scroll', emitScroll, true);
});
onBeforeUnmount(() => {
scrollWrapper.value?.removeEventListener('scroll', emitScroll);
scrollWrapper.value?.removeEventListener('scroll', emitScroll, true);
});
const handleScroll = (e: WheelEvent) => {
const eventDelta = (e as any).wheelDelta || -e.deltaY * 40;
const $scrollWrapper = scrollWrapper.value;
if (!$scrollWrapper) return;
$scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4;
};
const emits = defineEmits(['scroll']);
@@ -37,6 +39,7 @@ const moveToTarget = (currentTag: RouteLocationNormalized) => {
const $container = scrollContainerRef.value?.$el;
const $containerWidth = $container.offsetWidth;
const $scrollWrapper = scrollWrapper.value;
if (!$scrollWrapper) return;
let firstTag = null;
let lastTag = null;

View File

@@ -7,7 +7,6 @@ import { NavTypeEnum } from '@/enums/NavTypeEnum';
export const useSettingsStore = defineStore('setting', () => {
const storageSetting = useStorage<LayoutSetting>('layout-setting', {
topNav: defaultSettings.topNav,
tagsView: defaultSettings.tagsView,
tagsIcon: defaultSettings.tagsIcon,
fixedHeader: defaultSettings.fixedHeader,

View File

@@ -33,7 +33,7 @@
* 部署方式 Docker 容器编排 一键部署业务集群<br />
* 国际化 SpringMessage Spring标准国际化方案<br />
</p>
<p><b>当前版本:</b> <span>v5.6.1</span></p>
<p><b>当前版本:</b> <span>v5.6.2</span></p>
<p>
<el-tag type="danger">&yen;免费开源</el-tag>
</p>
@@ -77,7 +77,7 @@
* 分布式监控 PrometheusGrafana 全方位性能监控<br />
* 其余与 Vue 版本一致<br />
</p>
<p><b>当前版本:</b> <span>v2.6.1</span></p>
<p><b>当前版本:</b> <span>v2.6.2</span></p>
<p>
<el-tag type="danger">&yen;免费开源</el-tag>
</p>

View File

@@ -67,7 +67,7 @@
<span class="link-type" @click.stop="handleTypeRowClick(scope.row)">{{ scope.row.dictType }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" width="160"/>
<el-table-column label="备注" align="center" prop="remark" width="160" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template #default="scope">
<span>{{ proxy.parseTime(scope.row.createTime) }}</span>
@@ -213,13 +213,15 @@
<el-input v-model="typeForm.dictName" placeholder="请输入字典名称" />
</el-form-item>
<el-form-item prop="dictType">
<template #label>
<span>
<el-tooltip content="数据存储中的Key值sys_user_sex" placement="top">
<el-icon><question-filled /></el-icon>
</el-tooltip>
字典类型
</span>
</template>
<el-input v-model="typeForm.dictType" placeholder="请输入字典类型" maxlength="100" />
<span slot="label">
<el-tooltip content="数据存储中的Key值sys_user_sex" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
字典类型
</span>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="typeForm.remark" type="textarea" placeholder="请输入内容"></el-input>
@@ -671,5 +673,4 @@ onMounted(() => {
.dict-table-wrap {
overflow-x: auto;
}
</style>

View File

@@ -82,44 +82,6 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="genType">
<template #label>
生成代码方式
<el-tooltip content="默认为zip压缩包下载也可以自定义生成路径" placement="top">
<el-icon><question-filled /></el-icon>
</el-tooltip>
</template>
<el-radio v-model="infoForm.genType" value="0">zip压缩包</el-radio>
<el-radio v-model="infoForm.genType" value="1">自定义路径</el-radio>
</el-form-item>
</el-col>
<el-col v-if="infoForm.genType == '1'" :span="24">
<el-form-item prop="genPath">
<template #label>
自定义路径
<el-tooltip content="填写磁盘绝对路径若不填写则生成到当前Web项目下" placement="top">
<el-icon><question-filled /></el-icon>
</el-tooltip>
</template>
<el-input v-model="infoForm.genPath">
<template #append>
<el-dropdown>
<el-button type="primary">
最近路径快速选择
<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="infoForm.genPath = '/'">恢复默认的生成基础路径</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<template v-if="info.tplCategory == 'tree'">

View File

@@ -113,7 +113,7 @@
</template>
<script setup name="Gen" lang="ts">
import { delTable, genCode, getDataNames, listTable, previewTable, synchDb } from '@/api/tool/gen';
import { delTable, getDataNames, listTable, previewTable, synchDb } from '@/api/tool/gen';
import { TableQuery, TableVO } from '@/api/tool/gen/types';
import router from '@/router';
import ImportTable from './importTable.vue';
@@ -181,12 +181,7 @@ const handleGenTable = async (row?: TableVO) => {
proxy?.$modal.msgError('请选择要生成的数据');
return;
}
if (row?.genType === '1') {
await genCode(row.tableId);
proxy?.$modal.msgSuccess('成功生成到自定义路径:' + row.genPath);
} else {
proxy?.$download.zip('/tool/gen/batchGenCode?tableIdStr=' + tbIds, 'ruoyi.zip');
}
proxy?.$download.zip('/tool/gen/batchGenCode?tableIdStr=' + tbIds, 'ruoyi.zip');
};
/** 同步数据库操作 */
const handleSynchDb = async (row: TableVO) => {