소스 검색

!273 发布 v5.6.2-v2.6.2 版本 依赖升级

* 🦁🦁🦁发布 v5.6.2-v2.6.2 版本 依赖升级
* 🦁🦁🦁发布 v5.6.2-v2.6.2 版本 依赖升级
* !269 fix 修复上传文件图标问题
* fix 修复上传文件图标问题
* update 优化 黑夜模式选中
* !265 修复深色模式按钮悬浮样式异常
* 修复深色模式按钮悬浮样式异常
* fix 修复 类型问题导致的警告与字典样式问题
* fix 修复 删除无用代码
* fix 修复 前端输入性CVE漏洞 禁止使用代码生成到本地路径
疯狂的狮子Li 3 주 전
부모
커밋
d0d4519676

+ 1 - 1
package.json

@@ -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",

+ 0 - 8
src/api/tool/gen/index.ts

@@ -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({

+ 0 - 6
src/api/tool/gen/types.ts

@@ -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;

+ 83 - 0
src/assets/styles/variables.module.scss

@@ -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);

+ 1 - 1
src/components/FileUpload/index.vue

@@ -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>

+ 5 - 2
src/layout/components/TagsView/ScrollPane.vue

@@ -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;

+ 0 - 1
src/store/modules/settings.ts

@@ -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,

+ 2 - 2
src/views/index.vue

@@ -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 @@
           * 分布式监控 Prometheus、Grafana 全方位性能监控<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>

+ 9 - 8
src/views/system/dict/index.vue

@@ -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>

+ 0 - 38
src/views/tool/gen/genInfoForm.vue

@@ -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'">

+ 2 - 7
src/views/tool/gen/index.vue

@@ -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) => {