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