diff --git a/src/.eslintrc.json b/src/.eslintrc.json index d5c3f94..2436af4 100644 --- a/src/.eslintrc.json +++ b/src/.eslintrc.json @@ -4,6 +4,9 @@ "axios": true, "computed": true, "createApp": true, + "createLogger": true, + "createNamespacedHelpers": true, + "createStore": true, "customRef": true, "dayjs": true, "defineAsyncComponent": true, @@ -16,6 +19,10 @@ "inject": true, "isReadonly": true, "isRef": true, + "mapActions": true, + "mapGetters": true, + "mapMutations": true, + "mapState": true, "markRaw": true, "nextTick": true, "onActivated": true, @@ -50,6 +57,7 @@ "useRoute": true, "useRouter": true, "useSlots": true, + "useStore": true, "watch": true, "watchEffect": true } diff --git a/src/App.vue b/src/App.vue index 0fc402b..bcff4e9 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,11 +1,6 @@ - - 马士兵严选 - - - - + diff --git a/src/auto-imports.d.ts b/src/auto-imports.d.ts index 660d329..d1126ef 100644 --- a/src/auto-imports.d.ts +++ b/src/auto-imports.d.ts @@ -5,6 +5,9 @@ declare global { const axios: typeof import('axios')['default'] const computed: typeof import('vue')['computed'] const createApp: typeof import('vue')['createApp'] + const createLogger: typeof import('vuex')['createLogger'] + const createNamespacedHelpers: typeof import('vuex')['createNamespacedHelpers'] + const createStore: typeof import('vuex')['createStore'] const customRef: typeof import('vue')['customRef'] const dayjs: typeof import('dayjs') const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] @@ -17,6 +20,10 @@ declare global { const inject: typeof import('vue')['inject'] const isReadonly: typeof import('vue')['isReadonly'] const isRef: typeof import('vue')['isRef'] + const mapActions: typeof import('vuex')['mapActions'] + const mapGetters: typeof import('vuex')['mapGetters'] + const mapMutations: typeof import('vuex')['mapMutations'] + const mapState: typeof import('vuex')['mapState'] const markRaw: typeof import('vue')['markRaw'] const nextTick: typeof import('vue')['nextTick'] const onActivated: typeof import('vue')['onActivated'] @@ -51,6 +58,7 @@ declare global { const useRoute: typeof import('vue-router')['useRoute'] const useRouter: typeof import('vue-router')['useRouter'] const useSlots: typeof import('vue')['useSlots'] + const useStore: typeof import('vuex')['useStore'] const watch: typeof import('vue')['watch'] const watchEffect: typeof import('vue')['watchEffect'] } diff --git a/src/components.d.ts b/src/components.d.ts index bb6601a..42aad63 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -4,8 +4,8 @@ declare module 'vue' { export interface GlobalComponents { + ElButton: typeof import('element-plus/es')['ElButton'] ElIcon: typeof import('element-plus/es')['ElIcon'] - SvgIcon: typeof import('./components/SvgIcon.vue')['default'] XIcon: typeof import('./components/XIcon.vue')['default'] } } diff --git a/src/main.js b/src/main.js index 1b627e3..010a6d0 100644 --- a/src/main.js +++ b/src/main.js @@ -3,4 +3,12 @@ import App from './App.vue'; import '@/icons'; -createApp(App).mount('#app'); +const app = createApp(App); + +import router from '@/router'; +app.use(router); + +import store from '@/store'; +app.use(store); + +app.mount('#app'); diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..ea602da --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,22 @@ +import { createRouter, createWebHistory } from 'vue-router'; + +// 静态路由 +const routes = [ + { + path: '/', + component: () => import('@/views/index.vue'), + }, +]; + +// 动态模块 +const modules = import.meta.globEager('./modules/*.js'); +Object.values(modules).forEach((mod) => { + routes.push(...mod.default); +}); + +const router = createRouter({ + history: createWebHistory(), + routes, +}); + +export default router; diff --git a/src/router/modules/demo.js b/src/router/modules/demo.js new file mode 100644 index 0000000..d6d1738 --- /dev/null +++ b/src/router/modules/demo.js @@ -0,0 +1 @@ +export default []; diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..4de5b32 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,21 @@ +import { createStore } from 'vuex'; + +const modules = Object.fromEntries( + Object.entries(import.meta.globEager('./modules/*.js')).map((entry) => { + let arr = entry[0].split('/').pop().split('.'); + arr.pop(); + let moduleName = _.camelCase(arr.join('-')); + return [ + moduleName, + { + ...entry[1].default, + namespaced: true, + }, + ]; + }) +); +const store = createStore({ + strict: process.env.NODE_ENV !== 'production', + modules, +}); +export default store; diff --git a/src/store/modules/demo.js b/src/store/modules/demo.js new file mode 100644 index 0000000..2819b02 --- /dev/null +++ b/src/store/modules/demo.js @@ -0,0 +1,20 @@ +const state = () => ({ + count: 0, +}); +const getters = { + doubleCount: (state) => state.count * 2, +}; +const mutations = { + add: (state, num = 1) => (state.count += num), +}; +const actions = { + clear: ({ state, commit }) => { + commit('add', state.count * -1); + }, +}; +export default { + state, + getters, + mutations, + actions, +}; diff --git a/src/views/index.vue b/src/views/index.vue new file mode 100644 index 0000000..b7e9f33 --- /dev/null +++ b/src/views/index.vue @@ -0,0 +1,27 @@ + + + + 马士兵严选 + + + + + count:{{ count }}, double count:{{ doubleCount }} + add + clear + + + + + + diff --git a/vite.config.ts b/vite.config.ts index 5821b59..9723510 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -41,6 +41,7 @@ export default ({ command, mode }: ConfigEnv): UserConfigExport => { include: [/\.[jt]sx?$/, /\.vue\??/], imports: [ 'vue', + 'vuex', 'vue-router', { axios: [
count:{{ count }}, double count:{{ doubleCount }}