vue3 typescript的一些配置

		import {createRouter, createWebHashHistory, RouteRecordRaw} from 'vue-router'
		import {App} from "vue";
		
		
		function importAllRouter(){
		    let routes: Array<RouteRecordRaw> = []
		    const routerContext = require.context('./', true, /\.ts$/)
		    routerContext.keys().forEach(route => {
		        if (route.startsWith('./index')) return
		        const routerModule = routerContext(route)
		        routes = routes.concat(routerModule.default || routerModule)
		    })
		    return routes
		}
		
		
		const router = createRouter({
		    history: createWebHashHistory(),
		    routes:importAllRouter()
		})
		
		export function setupRouter(app: App<Element>){
		    app.use(router)
		}
	
	
	
	
	import {createStore} from 'vuex'
	import { Module ,ModuleTree} from 'vuex';
	import {App} from "vue";
	
	export interface StoreModuleType<S> extends Module<S, S> {
	  namespaced: true;
	  name: string;
	}
	function importAllStore<S> (): ModuleTree<S> {
	  const modules:ModuleTree<S>  = {}
	  const storeContext = require.context('./modules', true, /\.ts$/)
	  storeContext.keys().forEach((store) => {
	    const routerModule = storeContext(store)
	    const name = routerModule.default.name
	    modules[name] = routerModule.default
	  })
	  return modules;
	}
	const store =  createStore({
	  modules:importAllStore()
	})
	
	
	export function setupStore(app: App<Element>){
	  app.use(store)
	}


import {StoreModuleType} from "@/store/index.ts";
import {loginMenu} from "@/views/login/service"
import {Mutation, Action} from 'vuex';
import {setStorage} from "@/common/utils/localToken";
import type {menuType} from "@/views/frame/components/menuLeft/data"


export interface StateType {
    userInfo: string,
    menuJson: menuType[],
}

export interface ModuleType extends StoreModuleType<StateType> {
    state: StateType;
    mutations: {
        mutationsMenu: Mutation<StateType>,
        mutationsLogin: Mutation<StateType>,
    };
    actions: {
        actionMenu: Action<StateType, StateType>,
    };
}


const initState: StateType = {
    userInfo: "",
    menuJson: [],
}


const StoreModel: ModuleType = {
    namespaced: true,
    name: 'login',
    state: {
        ...initState
    },

    mutations: {
        async mutationsLogin(state, payload) {
            await setStorage("token", payload.token)
            await setStorage("userInfo", JSON.stringify(payload))
            state.userInfo = payload
        },
        mutationsMenu(state, payload) {
            state.menuJson = payload
        },
    },
    actions: {
        async actionMenu({commit}) {
            try {
                const data = await loginMenu()
                if (data && data.code === 1) {
                    commit('mutationsMenu', data.data.permissions)
                    return true
                }
            } catch (error) {
                return false
            }
        }
    },
}
export default StoreModel




import {createApp} from 'vue'
import App from './App.vue'

import {setupPlugins} from "@/plugins/index.ts"
import {setupStore} from "@/store/index.ts"
import {setupRouter} from "@/router/index.ts"
import {setupComponents} from "@/components/index.ts"

async  function ProRunApp(){
    const app = createApp(App)
    /**
     * 加载通用组件
     * */
    setupComponents(app)
    /**
     * 加载路由
     * */
    setupRouter(app)
    /**
     * 加载vuex
     * */
    setupStore(app)
    /**
     * 加载通用插件
     * */
    setupPlugins(app)
    /**
     * 挂载dom
     * */
    app.mount('#app')
}

ProRunApp()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值