ljr-cli 1.0.7 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/bin/commands/demo1.js +12 -0
  2. package/bin/commands/demo2.js +60 -0
  3. package/bin/commands/init.js +130 -0
  4. package/bin/commands/sync.js +144 -0
  5. package/bin/index.js +19 -202
  6. package/bin/templates/vue2.7.16/README.md +15 -13
  7. package/bin/templates/vue2.7.16/public/index.html +5 -5
  8. package/bin/templates/vue3.5.25-2025.12.4/.vscode/settings.json +1 -0
  9. package/bin/templates/vue3.5.25-2025.12.4/README.md +28 -17
  10. package/bin/templates/vue3.5.25-2025.12.4/auto-imports.d.ts +229 -0
  11. package/bin/templates/vue3.5.25-2025.12.4/components.d.ts +49 -0
  12. package/bin/templates/vue3.5.25-2025.12.4/eslint.config.ts +1 -0
  13. package/bin/templates/vue3.5.25-2025.12.4/index.html +2 -2
  14. package/bin/templates/vue3.5.25-2025.12.4/package.json +3 -1
  15. package/bin/templates/vue3.5.25-2025.12.4/pnpm-lock.yaml +480 -11
  16. package/bin/templates/vue3.5.25-2025.12.4/src/assets/images/login_bg.jpg +0 -0
  17. package/bin/templates/vue3.5.25-2025.12.4/src/assets/images/login_bg_black.jpg +0 -0
  18. package/bin/templates/vue3.5.25-2025.12.4/src/assets/images/sc_login_icon.png +0 -0
  19. package/bin/templates/vue3.5.25-2025.12.4/src/boot/el-icon.ts +9 -0
  20. package/bin/templates/vue3.5.25-2025.12.4/src/boot/index.ts +2 -0
  21. package/bin/templates/vue3.5.25-2025.12.4/src/boot/pinia.ts +8 -3
  22. package/bin/templates/vue3.5.25-2025.12.4/src/boot/style.ts +2 -1
  23. package/bin/templates/vue3.5.25-2025.12.4/src/components/layout/header.ts +97 -0
  24. package/bin/templates/vue3.5.25-2025.12.4/src/components/layout/header.vue +37 -13
  25. package/bin/templates/vue3.5.25-2025.12.4/src/components/layout/left-right.vue +3 -7
  26. package/bin/templates/vue3.5.25-2025.12.4/src/components/layout/menu.ts +19 -0
  27. package/bin/templates/vue3.5.25-2025.12.4/src/components/layout/menu.vue +89 -5
  28. package/bin/templates/vue3.5.25-2025.12.4/src/components/layout/up-down.vue +24 -0
  29. package/bin/templates/vue3.5.25-2025.12.4/src/components/login/change-password.vue +111 -0
  30. package/bin/templates/vue3.5.25-2025.12.4/src/components/login/user-login.vue +61 -0
  31. package/bin/templates/vue3.5.25-2025.12.4/src/css/base.css +204 -0
  32. package/bin/templates/vue3.5.25-2025.12.4/src/css/global.css +1596 -0
  33. package/bin/templates/vue3.5.25-2025.12.4/src/css/index.css +3 -0
  34. package/bin/templates/vue3.5.25-2025.12.4/src/css/theme.css +61 -0
  35. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/device/index.ts +1 -0
  36. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/dialog.vue +66 -0
  37. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/helper.ts +90 -0
  38. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/index.ts +2 -0
  39. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/template.ts +41 -0
  40. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/template.vue +29 -0
  41. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/user-info/index.ts +31 -0
  42. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/user-info/layout.ts +47 -0
  43. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/user-info/layout.vue +51 -0
  44. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/user-info/notification.ts +27 -0
  45. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/user-info/notification.vue +29 -0
  46. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/user-info/permission.ts +22 -0
  47. package/bin/templates/vue3.5.25-2025.12.4/src/dialogs/user-info/permission.vue +23 -0
  48. package/bin/templates/vue3.5.25-2025.12.4/src/directive/rememberScrollPosition.ts +1 -1
  49. package/bin/templates/vue3.5.25-2025.12.4/src/enums/device.ts +42 -0
  50. package/bin/templates/vue3.5.25-2025.12.4/src/enums/index.ts +2 -0
  51. package/bin/templates/vue3.5.25-2025.12.4/src/enums/status.ts +23 -0
  52. package/bin/templates/vue3.5.25-2025.12.4/src/pages/index/permission/role.ts +40 -0
  53. package/bin/templates/vue3.5.25-2025.12.4/src/pages/index/permission/role.vue +39 -0
  54. package/bin/templates/vue3.5.25-2025.12.4/src/pages/index/permission/user.vue +10 -0
  55. package/bin/templates/vue3.5.25-2025.12.4/src/pages/index/template/base-info.vue +5 -0
  56. package/bin/templates/vue3.5.25-2025.12.4/src/pages/index/template/base-info2.vue +5 -0
  57. package/bin/templates/vue3.5.25-2025.12.4/src/pages/index/template/list.ts +40 -0
  58. package/bin/templates/vue3.5.25-2025.12.4/src/pages/index/template/list.vue +39 -0
  59. package/bin/templates/vue3.5.25-2025.12.4/src/pages/index/template/store.vue +89 -0
  60. package/bin/templates/vue3.5.25-2025.12.4/src/pages/index.vue +7 -2
  61. package/bin/templates/vue3.5.25-2025.12.4/src/pages/login.vue +34 -64
  62. package/bin/templates/vue3.5.25-2025.12.4/src/stores/account(/351/200/211/351/241/271/345/274/217api/345/206/231/346/263/225/347/244/272/344/276/213).ts +49 -0
  63. package/bin/templates/vue3.5.25-2025.12.4/src/stores/account.ts +46 -28
  64. package/bin/templates/vue3.5.25-2025.12.4/src/stores/dd.ts +85 -29
  65. package/bin/templates/vue3.5.25-2025.12.4/src/stores/layout.ts +99 -21
  66. package/bin/templates/vue3.5.25-2025.12.4/typed-router.d.ts +90 -0
  67. package/bin/templates/vue3.5.25-2025.12.4/uno.config.ts +53 -0
  68. package/bin/templates/vue3.5.25-2025.12.4/vite.config.ts +12 -1
  69. package/package.json +4 -6
  70. package/bin/demo1.js +0 -39
  71. package/bin/demo2.js +0 -87
  72. package/bin/templates/vue3.5.25-2025.12.4/src/stores//347/273/204/345/220/210/345/274/217pinia/345/206/231/346/263/225(/344/273/245account/344/270/272/344/276/213).ts +0 -28
  73. /package/bin/templates/vue3.5.25-2025.12.4/{public → src/assets}/favicon.svg +0 -0
@@ -29,34 +29,35 @@ pnpm install
29
29
  ### 编译和热重载开发
30
30
 
31
31
  ```sh
32
- pnpm run dev || pnpm run serve
32
+ pnpm dev || pnpm serve
33
33
  ```
34
34
 
35
35
  ### 为生产进行类型检查、编译和最小化
36
36
 
37
37
  ```sh
38
- pnpm run build
38
+ pnpm build
39
39
  ```
40
40
 
41
41
  ### eslint检查
42
42
 
43
43
  ```sh
44
- pnpm run lint
44
+ pnpm lint
45
45
  ```
46
46
 
47
47
  ### prettier格式化
48
48
 
49
49
  ```sh
50
- pnpm run format
50
+ pnpm format
51
51
  ```
52
52
 
53
- # 全局
53
+ # 样式
54
54
 
55
- 全局引入 l-global 包,包括 variable.cssbase.cssglobal.css 和 utils 工具类
55
+ 全局 `@/css/index.css` 里面包含了 `theme.css`、`base.css`、`global.css`
56
+ 集成 `unocss` 原子化css
56
57
 
57
58
  # 自动导入
58
59
 
59
- 使用 `unplugin-auto-import` 插件自动导入vuevue-route
60
+ 使用 `unplugin-auto-import` 插件自动导入 `vue`、`vue-route`、`pinia`、`vueuse`
60
61
  使用 `unplugin-auto-import`、`unplugin-vue-components` 插件按需导入element-plus组件
61
62
 
62
63
  # 路由
@@ -65,12 +66,21 @@ pnpm run format
65
66
  加入页面过渡动画
66
67
  封装了全局登录判断的路由卫士
67
68
 
69
+ # 左侧菜单
70
+
71
+ 未整理
72
+
73
+ # 函数式弹窗
74
+
75
+ 未整理
76
+
68
77
  # store仓库
69
78
 
70
79
  使用 `pinia-plugin-persistedstate` 做持久化,默认全部 store 都持久化
71
80
  持久化储存的 `key` 默认加上 `pinia` 前缀
72
81
  默认都存到 `sessionStorage` ,account 的 store 默认改成 `localStorage` 存储
73
82
  如果需要关闭持久化,为单个 store 配置
83
+ 此项目统一采用组合式 `pinia` 写法,选项式 `pinia` 写法也有示例,请自行选择
74
84
 
75
85
  # 布局
76
86
 
@@ -78,7 +88,6 @@ pnpm run format
78
88
 
79
89
  - 上下布局:顶部信息,下左菜单,下右页面
80
90
  - 左右布局:左侧菜单,右上顶部信息,右下页面
81
- - 全屏页面(隐藏顶部信息和菜单):只有页面,没有顶部信息和菜单,可通过快捷键退出全屏页面
82
91
 
83
92
  # 其他
84
93
 
@@ -109,16 +118,18 @@ axios 封装
109
118
  ├── stores # stores
110
119
  ├── views # 页面
111
120
  ├── package.json
112
- ├── package-lock.json
121
+ ├── pnpm-lock.yaml
113
122
  ```
114
123
 
115
124
  ## 命名规范
116
125
 
117
- | 类别 | 推荐命名方式 | 示例 | 关键点/例外情况 |
118
- | ------------------ | ----------------------------------------------- | ----------------- | ---------------------- |
119
- | 通用 | kebab-case | package-lock.json | 没有特别说明尽量用这个 |
120
- | 变量 | camelCase | userProfile | |
121
- | 路由名称 | camelCase 或者 PascalCase | userProfile | |
122
- | App.vue | PascalCase | | |
123
- | Vue 组件里的组件名 | PascalCase | | |
124
- | Vue 组件里的 Props | 在声明时使用 camelCase,在模板中使用 kebab-case | | |
126
+ | 类别 | 推荐命名方式 | 示例 | 关键点/例外情况 |
127
+ | ------------------ | ----------------------------------------------- | -------------------------- | ---------------------- |
128
+ | 通用 | kebab-case | package-lock.json | 没有特别说明尽量用这个 |
129
+ | 路由名称 | kebab-case | user-info | 最通用、最推荐路径命名 |
130
+ | Vue 组件里的组件名 | kebab-case | user-info.vue | |
131
+ | Vue 组件里的 Props | 在声明时使用 camelCase,在模板中使用 kebab-case | | |
132
+ | 方法 / 函数 / 变量 | camelCase | getUserInfo | |
133
+ | 构造函数 / 类 | PascalCase | UserInfo | |
134
+ | 常量 | UPPER_SNAKE_CASE(全大写 + 下划线分隔) | const BASE_API_URL = "xxx" | |
135
+ | 私有属性 / 方法 | \_camelCase(下划线开头 + 小驼峰) | \_userInfo | |
@@ -7,26 +7,52 @@
7
7
  export {}
8
8
  declare global {
9
9
  const EffectScope: typeof import('vue').EffectScope
10
+ const ElMessage: typeof import('element-plus/es').ElMessage
10
11
  const acceptHMRUpdate: typeof import('pinia').acceptHMRUpdate
12
+ const asyncComputed: typeof import('@vueuse/core').asyncComputed
13
+ const autoResetRef: typeof import('@vueuse/core').autoResetRef
11
14
  const computed: typeof import('vue').computed
15
+ const computedAsync: typeof import('@vueuse/core').computedAsync
16
+ const computedEager: typeof import('@vueuse/core').computedEager
17
+ const computedInject: typeof import('@vueuse/core').computedInject
18
+ const computedWithControl: typeof import('@vueuse/core').computedWithControl
19
+ const controlledComputed: typeof import('@vueuse/core').controlledComputed
20
+ const controlledRef: typeof import('@vueuse/core').controlledRef
12
21
  const createApp: typeof import('vue').createApp
22
+ const createEventHook: typeof import('@vueuse/core').createEventHook
23
+ const createGlobalState: typeof import('@vueuse/core').createGlobalState
24
+ const createInjectionState: typeof import('@vueuse/core').createInjectionState
13
25
  const createPinia: typeof import('pinia').createPinia
26
+ const createReactiveFn: typeof import('@vueuse/core').createReactiveFn
27
+ const createRef: typeof import('@vueuse/core').createRef
28
+ const createReusableTemplate: typeof import('@vueuse/core').createReusableTemplate
29
+ const createSharedComposable: typeof import('@vueuse/core').createSharedComposable
30
+ const createTemplatePromise: typeof import('@vueuse/core').createTemplatePromise
31
+ const createUnrefFn: typeof import('@vueuse/core').createUnrefFn
14
32
  const customRef: typeof import('vue').customRef
33
+ const debouncedRef: typeof import('@vueuse/core').debouncedRef
34
+ const debouncedWatch: typeof import('@vueuse/core').debouncedWatch
15
35
  const defineAsyncComponent: typeof import('vue').defineAsyncComponent
16
36
  const defineComponent: typeof import('vue').defineComponent
17
37
  const defineStore: typeof import('pinia').defineStore
38
+ const eagerComputed: typeof import('@vueuse/core').eagerComputed
18
39
  const effectScope: typeof import('vue').effectScope
40
+ const extendRef: typeof import('@vueuse/core').extendRef
19
41
  const getActivePinia: typeof import('pinia').getActivePinia
20
42
  const getCurrentInstance: typeof import('vue').getCurrentInstance
21
43
  const getCurrentScope: typeof import('vue').getCurrentScope
22
44
  const getCurrentWatcher: typeof import('vue').getCurrentWatcher
23
45
  const h: typeof import('vue').h
46
+ const ignorableWatch: typeof import('@vueuse/core').ignorableWatch
24
47
  const inject: typeof import('vue').inject
48
+ const injectLocal: typeof import('@vueuse/core').injectLocal
49
+ const isDefined: typeof import('@vueuse/core').isDefined
25
50
  const isProxy: typeof import('vue').isProxy
26
51
  const isReactive: typeof import('vue').isReactive
27
52
  const isReadonly: typeof import('vue').isReadonly
28
53
  const isRef: typeof import('vue').isRef
29
54
  const isShallow: typeof import('vue').isShallow
55
+ const makeDestructurable: typeof import('@vueuse/core').makeDestructurable
30
56
  const mapActions: typeof import('pinia').mapActions
31
57
  const mapGetters: typeof import('pinia').mapGetters
32
58
  const mapState: typeof import('pinia').mapState
@@ -40,47 +66,250 @@ declare global {
40
66
  const onBeforeRouteUpdate: typeof import('vue-router').onBeforeRouteUpdate
41
67
  const onBeforeUnmount: typeof import('vue').onBeforeUnmount
42
68
  const onBeforeUpdate: typeof import('vue').onBeforeUpdate
69
+ const onClickOutside: typeof import('@vueuse/core').onClickOutside
43
70
  const onDeactivated: typeof import('vue').onDeactivated
71
+ const onElementRemoval: typeof import('@vueuse/core').onElementRemoval
44
72
  const onErrorCaptured: typeof import('vue').onErrorCaptured
73
+ const onKeyStroke: typeof import('@vueuse/core').onKeyStroke
74
+ const onLongPress: typeof import('@vueuse/core').onLongPress
45
75
  const onMounted: typeof import('vue').onMounted
46
76
  const onRenderTracked: typeof import('vue').onRenderTracked
47
77
  const onRenderTriggered: typeof import('vue').onRenderTriggered
48
78
  const onScopeDispose: typeof import('vue').onScopeDispose
49
79
  const onServerPrefetch: typeof import('vue').onServerPrefetch
80
+ const onStartTyping: typeof import('@vueuse/core').onStartTyping
50
81
  const onUnmounted: typeof import('vue').onUnmounted
51
82
  const onUpdated: typeof import('vue').onUpdated
52
83
  const onWatcherCleanup: typeof import('vue').onWatcherCleanup
84
+ const pausableWatch: typeof import('@vueuse/core').pausableWatch
53
85
  const provide: typeof import('vue').provide
86
+ const provideLocal: typeof import('@vueuse/core').provideLocal
87
+ const reactify: typeof import('@vueuse/core').reactify
88
+ const reactifyObject: typeof import('@vueuse/core').reactifyObject
54
89
  const reactive: typeof import('vue').reactive
90
+ const reactiveComputed: typeof import('@vueuse/core').reactiveComputed
91
+ const reactiveOmit: typeof import('@vueuse/core').reactiveOmit
92
+ const reactivePick: typeof import('@vueuse/core').reactivePick
55
93
  const readonly: typeof import('vue').readonly
56
94
  const ref: typeof import('vue').ref
95
+ const refAutoReset: typeof import('@vueuse/core').refAutoReset
96
+ const refDebounced: typeof import('@vueuse/core').refDebounced
97
+ const refDefault: typeof import('@vueuse/core').refDefault
98
+ const refManualReset: typeof import('@vueuse/core').refManualReset
99
+ const refThrottled: typeof import('@vueuse/core').refThrottled
100
+ const refWithControl: typeof import('@vueuse/core').refWithControl
57
101
  const resolveComponent: typeof import('vue').resolveComponent
102
+ const resolveRef: typeof import('@vueuse/core').resolveRef
58
103
  const setActivePinia: typeof import('pinia').setActivePinia
59
104
  const setMapStoreSuffix: typeof import('pinia').setMapStoreSuffix
60
105
  const shallowReactive: typeof import('vue').shallowReactive
61
106
  const shallowReadonly: typeof import('vue').shallowReadonly
62
107
  const shallowRef: typeof import('vue').shallowRef
63
108
  const storeToRefs: typeof import('pinia').storeToRefs
109
+ const syncRef: typeof import('@vueuse/core').syncRef
110
+ const syncRefs: typeof import('@vueuse/core').syncRefs
111
+ const templateRef: typeof import('@vueuse/core').templateRef
112
+ const throttledRef: typeof import('@vueuse/core').throttledRef
113
+ const throttledWatch: typeof import('@vueuse/core').throttledWatch
64
114
  const toRaw: typeof import('vue').toRaw
115
+ const toReactive: typeof import('@vueuse/core').toReactive
65
116
  const toRef: typeof import('vue').toRef
66
117
  const toRefs: typeof import('vue').toRefs
67
118
  const toValue: typeof import('vue').toValue
68
119
  const triggerRef: typeof import('vue').triggerRef
120
+ const tryOnBeforeMount: typeof import('@vueuse/core').tryOnBeforeMount
121
+ const tryOnBeforeUnmount: typeof import('@vueuse/core').tryOnBeforeUnmount
122
+ const tryOnMounted: typeof import('@vueuse/core').tryOnMounted
123
+ const tryOnScopeDispose: typeof import('@vueuse/core').tryOnScopeDispose
124
+ const tryOnUnmounted: typeof import('@vueuse/core').tryOnUnmounted
69
125
  const unref: typeof import('vue').unref
126
+ const unrefElement: typeof import('@vueuse/core').unrefElement
127
+ const until: typeof import('@vueuse/core').until
128
+ const useActiveElement: typeof import('@vueuse/core').useActiveElement
129
+ const useAnimate: typeof import('@vueuse/core').useAnimate
130
+ const useArrayDifference: typeof import('@vueuse/core').useArrayDifference
131
+ const useArrayEvery: typeof import('@vueuse/core').useArrayEvery
132
+ const useArrayFilter: typeof import('@vueuse/core').useArrayFilter
133
+ const useArrayFind: typeof import('@vueuse/core').useArrayFind
134
+ const useArrayFindIndex: typeof import('@vueuse/core').useArrayFindIndex
135
+ const useArrayFindLast: typeof import('@vueuse/core').useArrayFindLast
136
+ const useArrayIncludes: typeof import('@vueuse/core').useArrayIncludes
137
+ const useArrayJoin: typeof import('@vueuse/core').useArrayJoin
138
+ const useArrayMap: typeof import('@vueuse/core').useArrayMap
139
+ const useArrayReduce: typeof import('@vueuse/core').useArrayReduce
140
+ const useArraySome: typeof import('@vueuse/core').useArraySome
141
+ const useArrayUnique: typeof import('@vueuse/core').useArrayUnique
142
+ const useAsyncQueue: typeof import('@vueuse/core').useAsyncQueue
143
+ const useAsyncState: typeof import('@vueuse/core').useAsyncState
70
144
  const useAttrs: typeof import('vue').useAttrs
145
+ const useBase64: typeof import('@vueuse/core').useBase64
146
+ const useBattery: typeof import('@vueuse/core').useBattery
147
+ const useBluetooth: typeof import('@vueuse/core').useBluetooth
148
+ const useBreakpoints: typeof import('@vueuse/core').useBreakpoints
149
+ const useBroadcastChannel: typeof import('@vueuse/core').useBroadcastChannel
150
+ const useBrowserLocation: typeof import('@vueuse/core').useBrowserLocation
151
+ const useCached: typeof import('@vueuse/core').useCached
152
+ const useClipboard: typeof import('@vueuse/core').useClipboard
153
+ const useClipboardItems: typeof import('@vueuse/core').useClipboardItems
154
+ const useCloned: typeof import('@vueuse/core').useCloned
155
+ const useColorMode: typeof import('@vueuse/core').useColorMode
156
+ const useConfirmDialog: typeof import('@vueuse/core').useConfirmDialog
157
+ const useCountdown: typeof import('@vueuse/core').useCountdown
158
+ const useCounter: typeof import('@vueuse/core').useCounter
71
159
  const useCssModule: typeof import('vue').useCssModule
160
+ const useCssSupports: typeof import('@vueuse/core').useCssSupports
161
+ const useCssVar: typeof import('@vueuse/core').useCssVar
72
162
  const useCssVars: typeof import('vue').useCssVars
163
+ const useCurrentElement: typeof import('@vueuse/core').useCurrentElement
164
+ const useCycleList: typeof import('@vueuse/core').useCycleList
165
+ const useDark: typeof import('@vueuse/core').useDark
166
+ const useDateFormat: typeof import('@vueuse/core').useDateFormat
167
+ const useDebounce: typeof import('@vueuse/core').useDebounce
168
+ const useDebounceFn: typeof import('@vueuse/core').useDebounceFn
169
+ const useDebouncedRefHistory: typeof import('@vueuse/core').useDebouncedRefHistory
170
+ const useDeviceMotion: typeof import('@vueuse/core').useDeviceMotion
171
+ const useDeviceOrientation: typeof import('@vueuse/core').useDeviceOrientation
172
+ const useDevicePixelRatio: typeof import('@vueuse/core').useDevicePixelRatio
173
+ const useDevicesList: typeof import('@vueuse/core').useDevicesList
174
+ const useDisplayMedia: typeof import('@vueuse/core').useDisplayMedia
175
+ const useDocumentVisibility: typeof import('@vueuse/core').useDocumentVisibility
176
+ const useDraggable: typeof import('@vueuse/core').useDraggable
177
+ const useDropZone: typeof import('@vueuse/core').useDropZone
178
+ const useElementBounding: typeof import('@vueuse/core').useElementBounding
179
+ const useElementByPoint: typeof import('@vueuse/core').useElementByPoint
180
+ const useElementHover: typeof import('@vueuse/core').useElementHover
181
+ const useElementSize: typeof import('@vueuse/core').useElementSize
182
+ const useElementVisibility: typeof import('@vueuse/core').useElementVisibility
183
+ const useEventBus: typeof import('@vueuse/core').useEventBus
184
+ const useEventListener: typeof import('@vueuse/core').useEventListener
185
+ const useEventSource: typeof import('@vueuse/core').useEventSource
186
+ const useEyeDropper: typeof import('@vueuse/core').useEyeDropper
187
+ const useFavicon: typeof import('@vueuse/core').useFavicon
188
+ const useFetch: typeof import('@vueuse/core').useFetch
189
+ const useFileDialog: typeof import('@vueuse/core').useFileDialog
190
+ const useFileSystemAccess: typeof import('@vueuse/core').useFileSystemAccess
191
+ const useFocus: typeof import('@vueuse/core').useFocus
192
+ const useFocusWithin: typeof import('@vueuse/core').useFocusWithin
193
+ const useFps: typeof import('@vueuse/core').useFps
194
+ const useFullscreen: typeof import('@vueuse/core').useFullscreen
195
+ const useGamepad: typeof import('@vueuse/core').useGamepad
196
+ const useGeolocation: typeof import('@vueuse/core').useGeolocation
73
197
  const useId: typeof import('vue').useId
198
+ const useIdle: typeof import('@vueuse/core').useIdle
199
+ const useImage: typeof import('@vueuse/core').useImage
200
+ const useInfiniteScroll: typeof import('@vueuse/core').useInfiniteScroll
201
+ const useIntersectionObserver: typeof import('@vueuse/core').useIntersectionObserver
202
+ const useInterval: typeof import('@vueuse/core').useInterval
203
+ const useIntervalFn: typeof import('@vueuse/core').useIntervalFn
204
+ const useKeyModifier: typeof import('@vueuse/core').useKeyModifier
205
+ const useLastChanged: typeof import('@vueuse/core').useLastChanged
74
206
  const useLink: typeof import('vue-router').useLink
207
+ const useLocalStorage: typeof import('@vueuse/core').useLocalStorage
208
+ const useMagicKeys: typeof import('@vueuse/core').useMagicKeys
209
+ const useManualRefHistory: typeof import('@vueuse/core').useManualRefHistory
210
+ const useMediaControls: typeof import('@vueuse/core').useMediaControls
211
+ const useMediaQuery: typeof import('@vueuse/core').useMediaQuery
212
+ const useMemoize: typeof import('@vueuse/core').useMemoize
213
+ const useMemory: typeof import('@vueuse/core').useMemory
75
214
  const useModel: typeof import('vue').useModel
215
+ const useMounted: typeof import('@vueuse/core').useMounted
216
+ const useMouse: typeof import('@vueuse/core').useMouse
217
+ const useMouseInElement: typeof import('@vueuse/core').useMouseInElement
218
+ const useMousePressed: typeof import('@vueuse/core').useMousePressed
219
+ const useMutationObserver: typeof import('@vueuse/core').useMutationObserver
220
+ const useNavigatorLanguage: typeof import('@vueuse/core').useNavigatorLanguage
221
+ const useNetwork: typeof import('@vueuse/core').useNetwork
222
+ const useNow: typeof import('@vueuse/core').useNow
223
+ const useObjectUrl: typeof import('@vueuse/core').useObjectUrl
224
+ const useOffsetPagination: typeof import('@vueuse/core').useOffsetPagination
225
+ const useOnline: typeof import('@vueuse/core').useOnline
226
+ const usePageLeave: typeof import('@vueuse/core').usePageLeave
227
+ const useParallax: typeof import('@vueuse/core').useParallax
228
+ const useParentElement: typeof import('@vueuse/core').useParentElement
229
+ const usePerformanceObserver: typeof import('@vueuse/core').usePerformanceObserver
230
+ const usePermission: typeof import('@vueuse/core').usePermission
231
+ const usePointer: typeof import('@vueuse/core').usePointer
232
+ const usePointerLock: typeof import('@vueuse/core').usePointerLock
233
+ const usePointerSwipe: typeof import('@vueuse/core').usePointerSwipe
234
+ const usePreferredColorScheme: typeof import('@vueuse/core').usePreferredColorScheme
235
+ const usePreferredContrast: typeof import('@vueuse/core').usePreferredContrast
236
+ const usePreferredDark: typeof import('@vueuse/core').usePreferredDark
237
+ const usePreferredLanguages: typeof import('@vueuse/core').usePreferredLanguages
238
+ const usePreferredReducedMotion: typeof import('@vueuse/core').usePreferredReducedMotion
239
+ const usePreferredReducedTransparency: typeof import('@vueuse/core').usePreferredReducedTransparency
240
+ const usePrevious: typeof import('@vueuse/core').usePrevious
241
+ const useRafFn: typeof import('@vueuse/core').useRafFn
242
+ const useRefHistory: typeof import('@vueuse/core').useRefHistory
243
+ const useResizeObserver: typeof import('@vueuse/core').useResizeObserver
76
244
  const useRoute: typeof import('vue-router').useRoute
77
245
  const useRouter: typeof import('vue-router').useRouter
246
+ const useSSRWidth: typeof import('@vueuse/core').useSSRWidth
247
+ const useScreenOrientation: typeof import('@vueuse/core').useScreenOrientation
248
+ const useScreenSafeArea: typeof import('@vueuse/core').useScreenSafeArea
249
+ const useScriptTag: typeof import('@vueuse/core').useScriptTag
250
+ const useScroll: typeof import('@vueuse/core').useScroll
251
+ const useScrollLock: typeof import('@vueuse/core').useScrollLock
252
+ const useSessionStorage: typeof import('@vueuse/core').useSessionStorage
253
+ const useShare: typeof import('@vueuse/core').useShare
78
254
  const useSlots: typeof import('vue').useSlots
255
+ const useSorted: typeof import('@vueuse/core').useSorted
256
+ const useSpeechRecognition: typeof import('@vueuse/core').useSpeechRecognition
257
+ const useSpeechSynthesis: typeof import('@vueuse/core').useSpeechSynthesis
258
+ const useStepper: typeof import('@vueuse/core').useStepper
259
+ const useStorage: typeof import('@vueuse/core').useStorage
260
+ const useStorageAsync: typeof import('@vueuse/core').useStorageAsync
261
+ const useStyleTag: typeof import('@vueuse/core').useStyleTag
262
+ const useSupported: typeof import('@vueuse/core').useSupported
263
+ const useSwipe: typeof import('@vueuse/core').useSwipe
79
264
  const useTemplateRef: typeof import('vue').useTemplateRef
265
+ const useTemplateRefsList: typeof import('@vueuse/core').useTemplateRefsList
266
+ const useTextDirection: typeof import('@vueuse/core').useTextDirection
267
+ const useTextSelection: typeof import('@vueuse/core').useTextSelection
268
+ const useTextareaAutosize: typeof import('@vueuse/core').useTextareaAutosize
269
+ const useThrottle: typeof import('@vueuse/core').useThrottle
270
+ const useThrottleFn: typeof import('@vueuse/core').useThrottleFn
271
+ const useThrottledRefHistory: typeof import('@vueuse/core').useThrottledRefHistory
272
+ const useTimeAgo: typeof import('@vueuse/core').useTimeAgo
273
+ const useTimeAgoIntl: typeof import('@vueuse/core').useTimeAgoIntl
274
+ const useTimeout: typeof import('@vueuse/core').useTimeout
275
+ const useTimeoutFn: typeof import('@vueuse/core').useTimeoutFn
276
+ const useTimeoutPoll: typeof import('@vueuse/core').useTimeoutPoll
277
+ const useTimestamp: typeof import('@vueuse/core').useTimestamp
278
+ const useTitle: typeof import('@vueuse/core').useTitle
279
+ const useToNumber: typeof import('@vueuse/core').useToNumber
280
+ const useToString: typeof import('@vueuse/core').useToString
281
+ const useToggle: typeof import('@vueuse/core').useToggle
282
+ const useTransition: typeof import('@vueuse/core').useTransition
283
+ const useUrlSearchParams: typeof import('@vueuse/core').useUrlSearchParams
284
+ const useUserMedia: typeof import('@vueuse/core').useUserMedia
285
+ const useVModel: typeof import('@vueuse/core').useVModel
286
+ const useVModels: typeof import('@vueuse/core').useVModels
287
+ const useVibrate: typeof import('@vueuse/core').useVibrate
288
+ const useVirtualList: typeof import('@vueuse/core').useVirtualList
289
+ const useWakeLock: typeof import('@vueuse/core').useWakeLock
290
+ const useWebNotification: typeof import('@vueuse/core').useWebNotification
291
+ const useWebSocket: typeof import('@vueuse/core').useWebSocket
292
+ const useWebWorker: typeof import('@vueuse/core').useWebWorker
293
+ const useWebWorkerFn: typeof import('@vueuse/core').useWebWorkerFn
294
+ const useWindowFocus: typeof import('@vueuse/core').useWindowFocus
295
+ const useWindowScroll: typeof import('@vueuse/core').useWindowScroll
296
+ const useWindowSize: typeof import('@vueuse/core').useWindowSize
80
297
  const watch: typeof import('vue').watch
298
+ const watchArray: typeof import('@vueuse/core').watchArray
299
+ const watchAtMost: typeof import('@vueuse/core').watchAtMost
300
+ const watchDebounced: typeof import('@vueuse/core').watchDebounced
301
+ const watchDeep: typeof import('@vueuse/core').watchDeep
81
302
  const watchEffect: typeof import('vue').watchEffect
303
+ const watchIgnorable: typeof import('@vueuse/core').watchIgnorable
304
+ const watchImmediate: typeof import('@vueuse/core').watchImmediate
305
+ const watchOnce: typeof import('@vueuse/core').watchOnce
306
+ const watchPausable: typeof import('@vueuse/core').watchPausable
82
307
  const watchPostEffect: typeof import('vue').watchPostEffect
83
308
  const watchSyncEffect: typeof import('vue').watchSyncEffect
309
+ const watchThrottled: typeof import('@vueuse/core').watchThrottled
310
+ const watchTriggerable: typeof import('@vueuse/core').watchTriggerable
311
+ const watchWithFilter: typeof import('@vueuse/core').watchWithFilter
312
+ const whenever: typeof import('@vueuse/core').whenever
84
313
  }
85
314
  // for type re-export
86
315
  declare global {
@@ -12,25 +12,74 @@ export {}
12
12
  /* prettier-ignore */
13
13
  declare module 'vue' {
14
14
  export interface GlobalComponents {
15
+ ChangePassword: typeof import('./src/components/login/change-password.vue')['default']
16
+ ElBadge: typeof import('element-plus/es')['ElBadge']
15
17
  ElButton: typeof import('element-plus/es')['ElButton']
16
18
  ElCard: typeof import('element-plus/es')['ElCard']
19
+ ElCol: typeof import('element-plus/es')['ElCol']
20
+ ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
21
+ ElDialog: typeof import('element-plus/es')['ElDialog']
22
+ ElDropdown: typeof import('element-plus/es')['ElDropdown']
23
+ ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
24
+ ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
25
+ ElForm: typeof import('element-plus/es')['ElForm']
26
+ ElFormItem: typeof import('element-plus/es')['ElFormItem']
27
+ ElIcon: typeof import('element-plus/es')['ElIcon']
17
28
  ElInput: typeof import('element-plus/es')['ElInput']
29
+ ElMenu: typeof import('element-plus/es')['ElMenu']
30
+ ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
31
+ ElOption: typeof import('element-plus/es')['ElOption']
32
+ ElPagination: typeof import('element-plus/es')['ElPagination']
33
+ ElRow: typeof import('element-plus/es')['ElRow']
34
+ ElSelect: typeof import('element-plus/es')['ElSelect']
35
+ ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
36
+ ElSwitch: typeof import('element-plus/es')['ElSwitch']
37
+ ElTable: typeof import('element-plus/es')['ElTable']
38
+ ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
18
39
  Header: typeof import('./src/components/layout/header.vue')['default']
19
40
  LeftRight: typeof import('./src/components/layout/left-right.vue')['default']
20
41
  Menu: typeof import('./src/components/layout/menu.vue')['default']
21
42
  RouterLink: typeof import('vue-router')['RouterLink']
22
43
  RouterView: typeof import('vue-router')['RouterView']
44
+ UpDown: typeof import('./src/components/layout/up-down.vue')['default']
45
+ UserLogin: typeof import('./src/components/login/user-login.vue')['default']
46
+ }
47
+ export interface GlobalDirectives {
48
+ vLoading: typeof import('element-plus/es')['ElLoadingDirective']
23
49
  }
24
50
  }
25
51
 
26
52
  // For TSX support
27
53
  declare global {
54
+ const ChangePassword: typeof import('./src/components/login/change-password.vue')['default']
55
+ const ElBadge: typeof import('element-plus/es')['ElBadge']
28
56
  const ElButton: typeof import('element-plus/es')['ElButton']
29
57
  const ElCard: typeof import('element-plus/es')['ElCard']
58
+ const ElCol: typeof import('element-plus/es')['ElCol']
59
+ const ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
60
+ const ElDialog: typeof import('element-plus/es')['ElDialog']
61
+ const ElDropdown: typeof import('element-plus/es')['ElDropdown']
62
+ const ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
63
+ const ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
64
+ const ElForm: typeof import('element-plus/es')['ElForm']
65
+ const ElFormItem: typeof import('element-plus/es')['ElFormItem']
66
+ const ElIcon: typeof import('element-plus/es')['ElIcon']
30
67
  const ElInput: typeof import('element-plus/es')['ElInput']
68
+ const ElMenu: typeof import('element-plus/es')['ElMenu']
69
+ const ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
70
+ const ElOption: typeof import('element-plus/es')['ElOption']
71
+ const ElPagination: typeof import('element-plus/es')['ElPagination']
72
+ const ElRow: typeof import('element-plus/es')['ElRow']
73
+ const ElSelect: typeof import('element-plus/es')['ElSelect']
74
+ const ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
75
+ const ElSwitch: typeof import('element-plus/es')['ElSwitch']
76
+ const ElTable: typeof import('element-plus/es')['ElTable']
77
+ const ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
31
78
  const Header: typeof import('./src/components/layout/header.vue')['default']
32
79
  const LeftRight: typeof import('./src/components/layout/left-right.vue')['default']
33
80
  const Menu: typeof import('./src/components/layout/menu.vue')['default']
34
81
  const RouterLink: typeof import('vue-router')['RouterLink']
35
82
  const RouterView: typeof import('vue-router')['RouterView']
83
+ const UpDown: typeof import('./src/components/layout/up-down.vue')['default']
84
+ const UserLogin: typeof import('./src/components/login/user-login.vue')['default']
36
85
  }
@@ -28,6 +28,7 @@ export default defineConfigWithVueTs(
28
28
  "spaced-comment": ["error", "always", { markers: ["/"] }], // 注释 // 或 /* 开始后的间距的一致性
29
29
  "vue/attributes-order": "error", // vue属性排序
30
30
  "vue/multi-word-component-names": "off", // vue多单词组件名称
31
+ "@typescript-eslint/no-explicit-any": "off", // 是否禁止使用任何显式类型
31
32
  },
32
33
  },
33
34
  )
@@ -1,8 +1,8 @@
1
1
  <!doctype html>
2
- <html lang="">
2
+ <html lang="zh">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
- <link rel="shortcut icon" type="image/svg" href="/favicon.svg" />
5
+ <link rel="shortcut icon" type="image/svg" href="./src/assets/favicon.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>vue3.5.25模版</title>
8
8
  </head>
@@ -18,8 +18,9 @@
18
18
  "format": "prettier --write --experimental-cli src/"
19
19
  },
20
20
  "dependencies": {
21
+ "@element-plus/icons-vue": "^2.3.2",
22
+ "@vueuse/core": "^14.2.1",
21
23
  "element-plus": "^2.12.0",
22
- "l-global": "^1.0.5",
23
24
  "pinia": "^3.0.4",
24
25
  "pinia-plugin-persistedstate": "^4.7.1",
25
26
  "unplugin-vue-router": "^0.19.2",
@@ -40,6 +41,7 @@
40
41
  "npm-run-all2": "^8.0.4",
41
42
  "prettier": "3.6.2",
42
43
  "typescript": "~5.9.0",
44
+ "unocss": "^66.6.0",
43
45
  "unplugin-auto-import": "^20.3.0",
44
46
  "unplugin-vue-components": "^30.0.0",
45
47
  "vite": "^7.2.4",