From 0f79df04250094686e92ba19fd8b4ce2fb14aa1c Mon Sep 17 00:00:00 2001
From: xueyinfei <1207092115@qq.com>
Date: Mon, 24 Nov 2025 20:51:35 +0800
Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=96=B0=E5=A2=9E=E5=A4=A7?=
=?UTF-8?q?=E6=A8=A1=E5=9E=8B=E5=8F=82=E6=95=B0=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../module_admin/entity/do/menu_do.py | 3 +
.../module_admin/entity/vo/menu_vo.py | 2 +
vue-fastapi-frontend/src/api/aichat/aichat.js | 2 +-
.../src/views/system/menu/index.vue | 126 +++++++++++++++++-
4 files changed, 127 insertions(+), 6 deletions(-)
diff --git a/vue-fastapi-backend/module_admin/entity/do/menu_do.py b/vue-fastapi-backend/module_admin/entity/do/menu_do.py
index d3ccffa..3b914f8 100644
--- a/vue-fastapi-backend/module_admin/entity/do/menu_do.py
+++ b/vue-fastapi-backend/module_admin/entity/do/menu_do.py
@@ -1,6 +1,7 @@
from datetime import datetime
from sqlalchemy import Column, DateTime, Integer, String
from config.database import Base
+from sqlalchemy.dialects.mysql import LONGTEXT
class SysMenu(Base):
@@ -30,3 +31,5 @@ class SysMenu(Base):
update_by = Column(String(64), nullable=True, default='', comment='更新者')
update_time = Column(DateTime, nullable=True, default=datetime.now(), comment='更新时间')
remark = Column(String(500), nullable=True, default='', comment='备注')
+ desc = Column(String(500), nullable=True, default='', comment='页面描述')
+ link_params = Column(LONGTEXT, nullable=True, default='', comment='跳转参数')
diff --git a/vue-fastapi-backend/module_admin/entity/vo/menu_vo.py b/vue-fastapi-backend/module_admin/entity/vo/menu_vo.py
index 9dc8d75..ef07503 100644
--- a/vue-fastapi-backend/module_admin/entity/vo/menu_vo.py
+++ b/vue-fastapi-backend/module_admin/entity/vo/menu_vo.py
@@ -33,6 +33,8 @@ class MenuModel(BaseModel):
update_by: Optional[str] = Field(default=None, description='更新者')
update_time: Optional[datetime] = Field(default=None, description='更新时间')
remark: Optional[str] = Field(default=None, description='备注')
+ desc: Optional[str] = Field(default=None, description='页面描述')
+ link_params: Optional[str] = Field(default=None, description='跳转参数')
@NotBlank(field_name='menu_name', message='菜单名称不能为空')
@Size(field_name='menu_name', min_length=0, max_length=50, message='菜单名称长度不能超过50个字符')
diff --git a/vue-fastapi-frontend/src/api/aichat/aichat.js b/vue-fastapi-frontend/src/api/aichat/aichat.js
index e32ea4e..e340261 100644
--- a/vue-fastapi-frontend/src/api/aichat/aichat.js
+++ b/vue-fastapi-frontend/src/api/aichat/aichat.js
@@ -50,7 +50,7 @@ export async function addChat(data) {
}
export async function postDataQuery(data) {
return request({
- url: '/dataquery-api/chat/nl2sql_client_chat',
+ url: '/dataquery-api/datachat',
method: 'post',
data: data
})
diff --git a/vue-fastapi-frontend/src/views/system/menu/index.vue b/vue-fastapi-frontend/src/views/system/menu/index.vue
index 729f1f5..01d6d2c 100644
--- a/vue-fastapi-frontend/src/views/system/menu/index.vue
+++ b/vue-fastapi-frontend/src/views/system/menu/index.vue
@@ -64,6 +64,21 @@
+
+
+
+
+
+ {{ tag.paramCnName }}
+
+
+
+
@@ -276,6 +291,36 @@
+
+
+
+
+
+
+
+
+ 页面描述
+
+
+
+
+
+
+
+ {{ tag.paramCnName }}
+
+
+
+
@@ -285,6 +330,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -305,9 +372,11 @@ const menuOptions = ref([]);
const isExpandAll = ref(false);
const refreshTable = ref(true);
const iconSelectRef = ref(null);
+const linkParamsDialog = ref(null);
const data = reactive({
form: {},
+ linkParam:{},
queryParams: {
menuName: undefined,
visible: undefined
@@ -319,8 +388,47 @@ const data = reactive({
},
});
-const { queryParams, form, rules } = toRefs(data);
+const { queryParams, form, rules, linkParam } = toRefs(data);
+
+function openLinkParamsDialog(tag,index){
+ linkParam.value = {
+ tagIndex : -1,
+ paramEnName: '',
+ paramCnName:'',
+ paramType: '',
+ desc:''
+ }
+ if (tag){
+ linkParam.value = {
+ tagIndex : index,
+ paramEnName: tag.paramEnName,
+ paramCnName: tag.paramCnName,
+ paramType: tag.paramType,
+ desc: tag.desc
+ }
+ }
+ linkParamsDialog.value = true
+}
+function saveLinkParam(){
+ let obj = {
+ paramEnName: linkParam.value.paramEnName,
+ paramCnName:linkParam.value.paramCnName,
+ paramType: linkParam.value.paramType,
+ desc: linkParam.value.desc}
+ if (linkParam.value.tagIndex === -1){
+ if (!form.value.linkParams){
+ form.value.linkParams = []
+ }
+ form.value.linkParams.push(obj)
+ }else{
+ form.value.linkParams[linkParam.value.tagIndex] = obj
+ }
+ linkParamsDialog.value = false
+}
+function handleClose(tag,index){
+ form.value.linkParams.splice(index,1)
+}
/** 查询菜单列表 */
function getList() {
loading.value = true;
@@ -356,7 +464,9 @@ function reset() {
isFrame: 1,
isCache: 0,
visible: "0",
- status: "0"
+ status: "0",
+ desc:'',
+ linkParams: undefined
};
proxy.resetForm("menuRef");
}
@@ -402,7 +512,11 @@ async function handleUpdate(row) {
reset();
await getTreeselect();
getMenu(row.menuId).then(response => {
- form.value = response.data;
+ let obj = response.data;
+ if (obj.linkParams && obj.linkParams.length > 0){
+ obj.linkParams = JSON.parse(obj.linkParams)
+ }
+ form.value = obj
open.value = true;
title.value = "修改菜单";
});
@@ -411,14 +525,16 @@ async function handleUpdate(row) {
function submitForm() {
proxy.$refs["menuRef"].validate(valid => {
if (valid) {
+ let obj = JSON.parse(JSON.stringify(form.value))
+ obj.linkParams = JSON.stringify(obj.linkParams)
if (form.value.menuId != undefined) {
- updateMenu(form.value).then(response => {
+ updateMenu(obj).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
- addMenu(form.value).then(response => {
+ addMenu(obj).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();