From f7c3d76d37ccb0ea85f1d1fe15290c4140f9d0a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?piexlMax=28=E5=A5=87=E6=B7=BC?= Date: Thu, 19 Jun 2025 15:33:05 +0800 Subject: [PATCH 01/56] =?UTF-8?q?feat(=E8=8F=9C=E5=8D=95=E7=AE=A1=E7=90=86?= =?UTF-8?q?):=20=E9=87=8D=E6=9E=84=E8=8F=9C=E5=8D=95=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=B9=B6=E6=9B=B4=E6=96=B0element-plus?= =?UTF-8?q?=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/package.json | 2 +- web/src/view/superAdmin/menu/menu.vue | 731 +++++++++++++++----------- 2 files changed, 430 insertions(+), 303 deletions(-) diff --git a/web/package.json b/web/package.json index 8c059b933..7d0a78100 100644 --- a/web/package.json +++ b/web/package.json @@ -25,7 +25,7 @@ "chokidar": "^4.0.0", "core-js": "^3.38.1", "echarts": "5.5.1", - "element-plus": "^2.8.5", + "element-plus": "^2.10.2", "highlight.js": "^11.10.0", "install": "^0.13.0", "marked": "14.1.1", diff --git a/web/src/view/superAdmin/menu/menu.vue b/web/src/view/superAdmin/menu/menu.vue index 48007233e..f0f1b3b95 100644 --- a/web/src/view/superAdmin/menu/menu.vue +++ b/web/src/view/superAdmin/menu/menu.vue @@ -119,315 +119,394 @@ - - - - - - 如果菜单包含子菜单,请创建router-view二级路由页面或者 - - 点我设置 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+

菜单参数配置

+ 新增菜单参数
- - - - - - - - - - - - - - - -
- - 新增可控按钮 - - - - -
- - - - - - - - - - - - + + + + + + + + + + + + + +
+ + +
+
+

可控按钮配置

+
+ + 新增可控按钮 + + + + + + +
+
+ + + + + + + + + + + +
@@ -445,7 +524,7 @@ import { canRemoveAuthorityBtnApi } from '@/api/authorityBtn' import { reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' - import { QuestionFilled } from '@element-plus/icons-vue' + import { QuestionFilled, InfoFilled, Delete } from '@element-plus/icons-vue' import { toDoc } from '@/utils/doc' import { toLowerCase } from '@/utils/stringFun' import ComponentsCascader from '@/view/superAdmin/menu/components/components-cascader.vue' @@ -705,4 +784,52 @@ margin-right: 8px; } } + + + + .form-tip { + margin-top: 8px; + font-size: 12px; + color: #909399; + display: flex; + align-items: center; + gap: 8px; + + .el-icon { + color: #409eff; + } + } + + .label-with-tooltip { + display: flex; + align-items: center; + gap: 6px; + + .el-icon { + color: #909399; + cursor: help; + + &:hover { + color: #409eff; + } + } + } + + .parameter-table, + .button-table { + border: 1px solid #ebeef5; + border-radius: 6px; + + :deep(.el-table__header) { + background-color: #fafafa; + } + + :deep(.el-table__body) { + .el-table__row { + &:hover { + background-color: #f5f7fa; + } + } + } + } From e58d40ab8332e25f45dba60dc0bfffb047802571 Mon Sep 17 00:00:00 2001 From: zayn <972858472@qq.com> Date: Fri, 20 Jun 2025 13:36:43 +0800 Subject: [PATCH 02/56] =?UTF-8?q?=E5=A4=B4=E9=83=A8=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=A0=8F=E9=87=8C=E7=9A=84=E8=8F=9C=E5=8D=95=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E6=B8=B2=E6=9F=93=E5=87=BA=E6=9D=A5=E7=9A=84?= =?UTF-8?q?bug=20(#2046)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 菜单循环中没有子菜单就直接返回,没有添加到arr列表中导致arr始终是空的 --- web/src/components/commandMenu/index.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/web/src/components/commandMenu/index.vue b/web/src/components/commandMenu/index.vue index 27ef93fc4..4ab4e205e 100644 --- a/web/src/components/commandMenu/index.vue +++ b/web/src/components/commandMenu/index.vue @@ -55,7 +55,6 @@ const deepMenus = (menus) => { const arr = [] menus?.forEach((menu) => { - if (!menu?.children) return if (menu.children && menu.children.length > 0) { arr.push(...deepMenus(menu.children)) } else { From 44751357b47da3cbe5b5a7aa24775597778dc39b Mon Sep 17 00:00:00 2001 From: pixelmaxQM Date: Sat, 28 Jun 2025 17:45:11 +0800 Subject: [PATCH 03/56] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E4=B8=AD=E9=97=B4=E4=BB=B6=E4=BB=A5=E5=A4=84=E7=90=86?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E8=B6=85=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/middleware/timeout.go | 55 ++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 server/middleware/timeout.go diff --git a/server/middleware/timeout.go b/server/middleware/timeout.go new file mode 100644 index 000000000..473abf6c8 --- /dev/null +++ b/server/middleware/timeout.go @@ -0,0 +1,55 @@ +package middleware + +import ( + "context" + "github.com/gin-gonic/gin" + "net/http" + "time" +) + +// TimeoutMiddleware 创建超时中间件 +// 入参 timeout 设置超时时间(例如:time.Second * 5) +// 使用示例 xxx.Get("path",middleware.TimeoutMiddleware(30*time.Second),HandleFunc) +func TimeoutMiddleware(timeout time.Duration) gin.HandlerFunc { + return func(c *gin.Context) { + ctx, cancel := context.WithTimeout(c.Request.Context(), timeout) + defer cancel() + + c.Request = c.Request.WithContext(ctx) + + // 使用 buffered channel 避免 goroutine 泄漏 + done := make(chan struct{}, 1) + panicChan := make(chan interface{}, 1) + + go func() { + defer func() { + if p := recover(); p != nil { + select { + case panicChan <- p: + default: + } + } + select { + case done <- struct{}{}: + default: + } + }() + c.Next() + }() + + select { + case p := <-panicChan: + panic(p) + case <-done: + return + case <-ctx.Done(): + // 确保服务器超时设置足够长 + c.Header("Connection", "close") + c.AbortWithStatusJSON(http.StatusGatewayTimeout, gin.H{ + "code": 504, + "msg": "请求超时", + }) + return + } + } +} From a5e1170af02a33fdd883121d10bce198486ac4f6 Mon Sep 17 00:00:00 2001 From: Joy Date: Sat, 28 Jun 2025 22:29:02 +0800 Subject: [PATCH 04/56] =?UTF-8?q?web/src/utils/request.js:=20Fix=20Server?= =?UTF-8?q?=20=E8=BF=94=E5=9B=9E=E9=9D=9E=20JSON=20=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=97=B6=E5=AF=BC=E8=87=B4=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=20(#2049)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/utils/request.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web/src/utils/request.js b/web/src/utils/request.js index 3c532b1fd..cc113cbd1 100644 --- a/web/src/utils/request.js +++ b/web/src/utils/request.js @@ -77,6 +77,9 @@ service.interceptors.response.use( if (response.headers['new-token']) { userStore.setToken(response.headers['new-token']) } + if (typeof response.data.code === 'undefined') { + return response + } if (response.data.code === 0 || response.headers.success === 'true') { if (response.headers.msg) { response.data.msg = decodeURI(response.headers.msg) From ea7455e0929cdbef59352e685947de1515190eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E7=9C=8B=E8=B0=81=E4=B8=8D=E5=8D=B7?= <39643887+lmb1113@users.noreply.github.com> Date: Sat, 28 Jun 2025 22:30:45 +0800 Subject: [PATCH 05/56] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E6=97=A0=E6=B3=95=E6=B7=BB=E5=8A=A0=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#2047)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/view/systemTools/autoCode/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/view/systemTools/autoCode/index.vue b/web/src/view/systemTools/autoCode/index.vue index 45b6d46cd..e946cbf2d 100644 --- a/web/src/view/systemTools/autoCode/index.vue +++ b/web/src/view/systemTools/autoCode/index.vue @@ -697,7 +697,7 @@ style="width: 100%" placeholder="请选择字段查询条件" clearable - :disabled="row.fieldType !== 'json' || row.disabled" + :disabled="row.fieldType === 'json' || row.disabled" > Date: Sun, 29 Jun 2025 13:27:12 +0800 Subject: [PATCH 06/56] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=95=8C=E9=9D=A2=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E6=A8=A1=E5=BC=8F=E3=80=81=E9=A2=9C=E8=89=B2=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=92=8C=E5=B8=83=E5=B1=80=E9=85=8D=E7=BD=AE=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=20(#2050)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 重构设置界面,添加主题模式、颜色选择和布局配置模块,移除冗余组件 --------- Co-authored-by: PiexlMax(奇淼 <165128580+pixelmaxQm@users.noreply.github.com> --- .../setting/components/layoutModeCard.vue | 219 +++++++++++++ .../layout/setting/components/settingItem.vue | 113 +++++++ .../setting/components/themeColorPicker.vue | 152 +++++++++ .../setting/components/themeModeSelector.vue | 70 +++++ web/src/view/layout/setting/index.vue | 275 +++++++---------- .../setting/modules/appearance/index.vue | 114 +++++++ .../layout/setting/modules/general/index.vue | 288 ++++++++++++++++++ .../layout/setting/modules/layout/index.vue | 164 ++++++++++ web/src/view/layout/setting/title.vue | 34 --- 9 files changed, 1238 insertions(+), 191 deletions(-) create mode 100644 web/src/view/layout/setting/components/layoutModeCard.vue create mode 100644 web/src/view/layout/setting/components/settingItem.vue create mode 100644 web/src/view/layout/setting/components/themeColorPicker.vue create mode 100644 web/src/view/layout/setting/components/themeModeSelector.vue create mode 100644 web/src/view/layout/setting/modules/appearance/index.vue create mode 100644 web/src/view/layout/setting/modules/general/index.vue create mode 100644 web/src/view/layout/setting/modules/layout/index.vue delete mode 100644 web/src/view/layout/setting/title.vue diff --git a/web/src/view/layout/setting/components/layoutModeCard.vue b/web/src/view/layout/setting/components/layoutModeCard.vue new file mode 100644 index 000000000..5f1fd1b79 --- /dev/null +++ b/web/src/view/layout/setting/components/layoutModeCard.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/web/src/view/layout/setting/components/settingItem.vue b/web/src/view/layout/setting/components/settingItem.vue new file mode 100644 index 000000000..bc5d7d84f --- /dev/null +++ b/web/src/view/layout/setting/components/settingItem.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/web/src/view/layout/setting/components/themeColorPicker.vue b/web/src/view/layout/setting/components/themeColorPicker.vue new file mode 100644 index 000000000..4523c923d --- /dev/null +++ b/web/src/view/layout/setting/components/themeColorPicker.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/web/src/view/layout/setting/components/themeModeSelector.vue b/web/src/view/layout/setting/components/themeModeSelector.vue new file mode 100644 index 000000000..72eb4e8c4 --- /dev/null +++ b/web/src/view/layout/setting/components/themeModeSelector.vue @@ -0,0 +1,70 @@ + + + diff --git a/web/src/view/layout/setting/index.vue b/web/src/view/layout/setting/index.vue index 916691ba8..ac24d4735 100644 --- a/web/src/view/layout/setting/index.vue +++ b/web/src/view/layout/setting/index.vue @@ -5,214 +5,175 @@ direction="rtl" :size="width" :show-close="false" + class="theme-config-drawer" > -
-
- -
- -
-
-
- -
-
- -