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