Browse Source

元数据增加路由参数

master
xueyinfei 3 weeks ago
parent
commit
ddf97ac242
  1. 1
      vue-fastapi-backend/module_admin/entity/vo/login_vo.py
  2. 5
      vue-fastapi-backend/module_admin/service/login_service.py
  3. 4
      vue-fastapi-frontend/src/utils/request.js
  4. 23
      vue-fastapi-frontend/src/views/aichat/MdRenderer.vue
  5. 6
      vue-fastapi-frontend/src/views/meta/metaInfo/index.vue

1
vue-fastapi-backend/module_admin/entity/vo/login_vo.py

@ -63,6 +63,7 @@ class MenuTreeModel(MenuModel):
class MetaModel(BaseModel): class MetaModel(BaseModel):
model_config = ConfigDict(alias_generator=to_camel) model_config = ConfigDict(alias_generator=to_camel)
id: Optional[int] = Field(default=None, description='菜单ID')
title: Optional[str] = Field(default=None, description='设置路由在侧边栏和面包屑中展示的名字') title: Optional[str] = Field(default=None, description='设置路由在侧边栏和面包屑中展示的名字')
icon: Optional[str] = Field(default=None, description='设置路由的图标') icon: Optional[str] = Field(default=None, description='设置路由的图标')
no_cache: Optional[bool] = Field(default=None, description='设置为true,则不会被 <keep-alive>缓存') no_cache: Optional[bool] = Field(default=None, description='设置为true,则不会被 <keep-alive>缓存')

5
vue-fastapi-backend/module_admin/service/login_service.py

@ -319,6 +319,7 @@ class LoginService:
component=RouterUtil.get_component(permission), component=RouterUtil.get_component(permission),
query=permission.query, query=permission.query,
meta=MetaModel( meta=MetaModel(
id=permission.menu_id,
title=permission.menu_name, title=permission.menu_name,
icon=permission.icon, icon=permission.icon,
noCache=True if permission.is_cache == 1 else False, noCache=True if permission.is_cache == 1 else False,
@ -338,6 +339,7 @@ class LoginService:
component=permission.component, component=permission.component,
name=RouterUtil.get_route_name(permission.route_name, permission.path), name=RouterUtil.get_route_name(permission.route_name, permission.path),
meta=MetaModel( meta=MetaModel(
id=permission.menu_id,
title=permission.menu_name, title=permission.menu_name,
icon=permission.icon, icon=permission.icon,
noCache=True if permission.is_cache == 1 else False, noCache=True if permission.is_cache == 1 else False,
@ -348,7 +350,7 @@ class LoginService:
children_list.append(children) children_list.append(children)
router.children = children_list router.children = children_list
elif permission.parent_id == 0 and RouterUtil.is_inner_link(permission): elif permission.parent_id == 0 and RouterUtil.is_inner_link(permission):
router.meta = MetaModel(title=permission.menu_name, icon=permission.icon) router.meta = MetaModel(id=permission.menu_id, title=permission.menu_name, icon=permission.icon)
router.path = '/' router.path = '/'
children_list: List[RouterModel] = [] children_list: List[RouterModel] = []
router_path = RouterUtil.inner_link_replace_each(permission.path) router_path = RouterUtil.inner_link_replace_each(permission.path)
@ -357,6 +359,7 @@ class LoginService:
component=MenuConstant.INNER_LINK, component=MenuConstant.INNER_LINK,
name=RouterUtil.get_route_name(permission.route_name, permission.path), name=RouterUtil.get_route_name(permission.route_name, permission.path),
meta=MetaModel( meta=MetaModel(
id=permission.menu_id,
title=permission.menu_name, title=permission.menu_name,
icon=permission.icon, icon=permission.icon,
link=permission.path if RouterUtil.is_http(permission.path) else None, link=permission.path if RouterUtil.is_http(permission.path) else None,

4
vue-fastapi-frontend/src/utils/request.js

@ -17,11 +17,11 @@ const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分 // axios中请求配置有baseURL选项,表示请求URL公共部分
// baseURL: import.meta.env.VITE_APP_BASE_API, // baseURL: import.meta.env.VITE_APP_BASE_API,
// 超时 // 超时
timeout: 100000 timeout: 180000
}) })
const rawAxios = axios.create({ const rawAxios = axios.create({
baseURL: "/default-api", baseURL: "/default-api",
timeout: 100000 timeout: 180000
}); });
rawAxios.interceptors.request.use(config => { rawAxios.interceptors.request.use(config => {

23
vue-fastapi-frontend/src/views/aichat/MdRenderer.vue

@ -20,6 +20,9 @@
<el-link type="primary" @click="downLoadFile(doc)" :underline="false">{{ doc.file_name }}</el-link> <el-link type="primary" @click="downLoadFile(doc)" :underline="false">{{ doc.file_name }}</el-link>
</div> </div>
</div> </div>
<div v-if="item.type === 'router'" style="width: 100%;margin-top: 5px">
<el-link @click="jumpToPath(item.content)">{{'跳转到'+ item.content.menuName}}</el-link>
</div>
<div v-else style="width: 100%;margin-top: 5px"> <div v-else style="width: 100%;margin-top: 5px">
<markdown :markdown-string="item.content"></markdown> <markdown :markdown-string="item.content"></markdown>
</div> </div>
@ -34,7 +37,9 @@ import chatTable from './chatTable.vue'
import htmlCharts from './htmlCharts.vue' import htmlCharts from './htmlCharts.vue'
import {Download, FullScreen} from "@element-plus/icons-vue"; import {Download, FullScreen} from "@element-plus/icons-vue";
import { ref, watch} from 'vue' import { ref, watch} from 'vue'
import { useRouter } from 'vue-router';
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const router = useRouter()
const props = defineProps({ const props = defineProps({
source: Array, source: Array,
is_large: Boolean, is_large: Boolean,
@ -46,6 +51,24 @@ function fullscreenG6(data){
emit('fullscreenG6',data) emit('fullscreenG6',data)
} }
function jumpToPath(content){
let routes = router.getRoutes()
let obj = routes.find(route =>{return route.meta?.id === content.id;})
if (obj){
let path = '?'
let params = content.params
for (const key of params.keys()){
path += key+"="+params[key] + "&"
}
path = path.slice(0, -1);
path = obj.path + path
router.push(path)
}else {
proxy.$modal.msgWarning("该页面未授权,无法访问");
}
}
function downLoadFile(doc){ function downLoadFile(doc){
let data = {file:doc.file_name,bucket: doc.bucket,sessionId: doc.session_id} let data = {file:doc.file_name,bucket: doc.bucket,sessionId: doc.session_id}
proxy.download("/default-api/aichat/file/download", { proxy.download("/default-api/aichat/file/download", {

6
vue-fastapi-frontend/src/views/meta/metaInfo/index.vue

@ -874,6 +874,7 @@
} }
}) })
const route = useRoute(); const route = useRoute();
// const router = useRouter()
const { queryParams, currentMetaData } = toRefs(data); const { queryParams, currentMetaData } = toRefs(data);
const loading = ref(true); const loading = ref(true);
const drawer = ref(false); const drawer = ref(false);
@ -1769,6 +1770,11 @@
} }
onMounted(async () => { onMounted(async () => {
await getDatabaseList() await getDatabaseList()
//
// const allRoutes = router.getRoutes()
// console.log(allRoutes)
if(route.query){ if(route.query){
if (route.query.ssysId){ if (route.query.ssysId){
queryParams.value.ssysId = route.query.ssysId queryParams.value.ssysId = route.query.ssysId

Loading…
Cancel
Save