This commit is contained in:
张成
2025-10-20 18:18:27 +08:00
parent 0047086013
commit fd3c1a5563
8 changed files with 479 additions and 107 deletions

View File

@@ -1,91 +1,22 @@
// 引入依赖
import Vue from 'vue'
import VueRouter from 'vue-router'
import Vuex from 'vuex'
import ViewUI from 'view-design'
// 引入样式
import 'view-design/dist/styles/iview.css'
// 引入 Admin Framework使用本地构建的文件
// 引入 Admin Framework框架内部已包含所有依赖和样式
import AdminFramework from '../../dist/admin-framework.js'
// 引入组件映射表
import componentMap from './router/component-map.js'
// 【关键】先将框架暴露到全局,确保在任何代码执行前就可以访问
window.framework = AdminFramework
// 使用插件
Vue.use(ViewUI)
// 配置参数
const config = {
// 【超级简化】只需一个函数调用!
const app = AdminFramework.createApp({
title: 'tennis管理系统',
apiUrl: 'http://localhost:9098/admin_api/', // 修改为你的 API 地址
uploadUrl: 'http://localhost:9098/admin_api/upload' // 修改为你的上传地址
}
// 初始化框架
AdminFramework.install(Vue, {
config: config,
ViewUI: ViewUI,
VueRouter: VueRouter,
Vuex: Vuex,
createPersistedState: null,
componentMap: componentMap // 传入组件映射表,用于动态路由
})
// 创建 Vue 实例
const app = new Vue({
router: AdminFramework.router,
store: AdminFramework.store,
render: h => h('router-view'),
async created() {
console.log('=== Admin Framework Demo 启动成功 ===')
console.log('框架版本:', AdminFramework.version)
console.log('配置信息:', this.$config)
// 刷新时恢复菜单和标题
const token = this.$store.state.user.token
const authorityMenus = localStorage.getItem('authorityMenus')
if (token && authorityMenus) {
console.log('检测到登录状态,恢复菜单和标题...')
try {
// 先恢复菜单
await this.$store.dispatch('user/setAuthorityMenus', {
Main: AdminFramework.Main,
ParentView: AdminFramework.ParentView,
Page404: AdminFramework.Page404,
authorityMenus: authorityMenus
})
console.log('菜单恢复成功')
// 再获取系统标题(已登录,会从接口获取)
await this.$store.dispatch('app/getSysTitle', {
defaultTitle: this.$config.title,
defaultLogo: ''
})
} catch (error) {
console.error('恢复失败:', error)
}
} else {
// 未登录,使用默认标题
console.log('未登录,使用默认标题')
document.title = this.$config.title
}
apiUrl: 'http://localhost:9098/admin_api/', // API 地址uploadUrl 会自动设置为 apiUrl + 'upload'
componentMap: componentMap, // 传入组件映射表,用于动态路由
onReady() {
// 可选:应用启动完成后的回调
console.log('应用已准备就绪!')
}
})
// 挂载应用
app.$mount('#app')
// 全局暴露 app 实例(方便调试)
window.app = app
window.rootVue = app
// window.framework 已在文件开头暴露,无需重复

View File

@@ -41,69 +41,55 @@ import WchProfessions from '../views/users/wch_professions.vue'
/**
* 组件映射对象
* key: 后端返回的组件路径(去掉 .vue 后缀或保留都可以)
*
* ✅ 重要提示:只需传递不带 .vue 后缀的路径!
* 框架会自动为每个组件创建带 .vue 和不带 .vue 的两个映射
*
* 例如:'ai/ai_messages': AiMessages
* 框架自动处理为:
* - 'ai/ai_messages' → AiMessages
* - 'ai/ai_messages.vue' → AiMessages (自动添加)
*
* key: 后端返回的组件路径(不带 .vue 后缀)
* value: 实际的 Vue 组件
*/
const componentMap = {
// ===== AI 模块 =====
'ai/ai_messages': AiMessages,
'ai/ai_messages.vue': AiMessages,
// ===== 球场模块 =====
'ball/game_comments': GameComments,
'ball/game_comments.vue': GameComments,
'ball/game_participants': GameParticipants,
'ball/game_participants.vue': GameParticipants,
'ball/games': Games,
'ball/games.vue': Games,
'ball/venues': Venues,
'ball/venues.vue': Venues,
'ball/wch_users': WchUsers,
'ball/wch_users.vue': WchUsers,
// ===== 业务模块 =====
'business/hot_city_qr': HotCityQr,
'business/hot_city_qr.vue': HotCityQr,
// ===== 消息模块 =====
'message/msg_notifications': MsgNotifications,
'message/msg_notifications.vue': MsgNotifications,
// ===== NTRP 模块 =====
'ntrp/ntr_questions': NtrQuestions,
'ntrp/ntr_questions.vue': NtrQuestions,
'ntrp/ntr_records': NtrRecords,
'ntrp/ntr_records.vue': NtrRecords,
// ===== 订单模块 =====
'order/frozen_funds': FrozenFunds,
'order/frozen_funds.vue': FrozenFunds,
'order/pay_orders': PayOrders,
'order/pay_orders.vue': PayOrders,
'order/transfer_details': TransferDetails,
'order/transfer_details.vue': TransferDetails,
'order/wallet_transactions': WalletTransactions,
'order/wallet_transactions.vue': WalletTransactions,
'order/wch_wallets': WchWallets,
'order/wch_wallets.vue': WchWallets,
// ===== 统计模块 =====
'statistics/resources': Resources,
'statistics/resources.vue': Resources,
// ===== 用户模块 =====
'users/recommend_blocks': RecommendBlocks,
'users/recommend_blocks.vue': RecommendBlocks,
'users/user_follows': UserFollows,
'users/user_follows.vue': UserFollows,
'users/user_tracking': UserTracking,
'users/user_tracking.vue': UserTracking,
"users/wch_cities.vue": WchCities,
"users/wch_cities": WchCities,
"users/wch_professions.vue": WchProfessions,
"users/wch_professions": WchProfessions,
'users/wch_cities': WchCities,
'users/wch_professions': WchProfessions,
}
export default componentMap