初始化
This commit is contained in:
@@ -21,7 +21,7 @@ export async function getTenantInfo(): Promise<Company> {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取网站信息 https://websopy-api.websoft.top/api
|
||||
* 获取网站信息 https://cms-api.websoft.top/api
|
||||
*/
|
||||
export async function getSiteInfo() {
|
||||
const res = await request.get<ApiResult<AppProduct>>(
|
||||
|
||||
@@ -134,7 +134,7 @@ export async function checkExistence(
|
||||
*/
|
||||
export async function configWebsiteField(params?: WebsiteFieldParam) {
|
||||
const res = await request.get<ApiResult<Config>>(
|
||||
'https://websopy-api.websoft.top/api/cms/cmsWebsite-field/config',
|
||||
'https://cms-api.websoft.top/api/cms/cmsWebsite-field/config',
|
||||
{
|
||||
params,
|
||||
headers: {
|
||||
|
||||
@@ -115,6 +115,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { mainNav } from '@/config/nav'
|
||||
import { useMenu } from '@/composables/useMenu'
|
||||
import { getUserInfo } from '@/api/layout'
|
||||
import type { User } from '@/api/system/user/model'
|
||||
import { getToken, removeToken } from '@/utils/token-util'
|
||||
@@ -122,7 +123,8 @@ import { clearAuthz, setAuthzFromUser } from '@/utils/permission'
|
||||
import { UserOutlined, ProfileOutlined, MessageOutlined } from '@ant-design/icons-vue'
|
||||
|
||||
|
||||
const nav = computed(() => mainNav)
|
||||
const menu = useMenu()
|
||||
const nav = computed(() => menu.value.length ? menu.value : mainNav)
|
||||
const route = useRoute()
|
||||
const open = ref(false)
|
||||
|
||||
|
||||
27
app/composables/useMenu.ts
Normal file
27
app/composables/useMenu.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import type { NavItem } from '@/config/nav'
|
||||
import type { CmsNavigation } from '@/api/cms/cmsNavigation/model'
|
||||
|
||||
/**
|
||||
* 获取菜单状态 (响应式)
|
||||
* 与模板项目的 useMenu() 对齐,使用 useState 跨组件共享
|
||||
*/
|
||||
export const useMenu = () => {
|
||||
return useState<NavItem[]>('menu', () => [])
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 CmsNavigation 树映射为 NavItem 树
|
||||
*/
|
||||
export function mapNavItem(tree: CmsNavigation[]): NavItem[] {
|
||||
return (tree || [])
|
||||
.filter(item => !item.hide) // 过滤隐藏项
|
||||
.sort((a, b) => (a.sortNumber ?? 0) - (b.sortNumber ?? 0))
|
||||
.map(item => ({
|
||||
key: item.code || String(item.navigationId),
|
||||
label: item.title || '',
|
||||
to: item.path || '/',
|
||||
href: item.target === '_blank' ? item.path : undefined,
|
||||
badge: undefined, // 后端暂无 badge 字段,按需扩展
|
||||
children: item.children?.length ? mapNavItem(item.children) : undefined,
|
||||
}))
|
||||
}
|
||||
@@ -6,7 +6,7 @@ export const ENV_CONFIG = {
|
||||
},
|
||||
prod: {
|
||||
name: '生产环境',
|
||||
serverUrl: 'https://websopy-api.websoft.top',
|
||||
serverUrl: 'https://cms-api.websoft.top',
|
||||
},
|
||||
} as const
|
||||
|
||||
@@ -43,9 +43,9 @@ const BASE_URL = getApiBaseUrl()
|
||||
|
||||
export const SERVER_API_URL = '/api/_server'
|
||||
export const MODULES_API_URL = '/api/_modules'
|
||||
// App 模块:相对路径,走 /api/_app proxy → websopy-api.websoft.top/api/app/*
|
||||
// App 模块:相对路径,走 /api/_app proxy → cms-api.websoft.top/api/app/*
|
||||
export const APP_API_URL = '/api/app'
|
||||
export const FILE_SERVER = '/api/_file'
|
||||
|
||||
// Some endpoints use this as a special TenantId override (defaults to current tenant)
|
||||
export const TEMPLATE_ID = '5'
|
||||
export const TEMPLATE_ID = '10588'
|
||||
|
||||
24
app/plugins/fetch-menu.ts
Normal file
24
app/plugins/fetch-menu.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { getSiteInfo } from '@/api/cms/cmsWebsite'
|
||||
import { useMenu, mapNavItem } from '@/composables/useMenu'
|
||||
import type { CmsNavigation } from '@/api/cms/cmsNavigation/model'
|
||||
|
||||
/**
|
||||
* 应用启动时获取站点信息(含导航菜单),写入 useMenu() 状态
|
||||
*/
|
||||
export default defineNuxtPlugin(async () => {
|
||||
const menu = useMenu()
|
||||
|
||||
// 如果已有数据,跳过
|
||||
if (menu.value.length) return
|
||||
|
||||
try {
|
||||
const data = await getSiteInfo()
|
||||
// getSiteInfo 返回 CmsWebsite,其中 topNavs 是 CmsNavigation[]
|
||||
const topNavs = (data as any)?.topNavs as CmsNavigation[] | undefined
|
||||
if (topNavs?.length) {
|
||||
menu.value = mapNavItem(topNavs)
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('[fetch-menu] 获取导航菜单失败', e)
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user