create-young-proj 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. package/README.md +11 -2
  2. package/dist/index.mjs +2702 -42
  3. package/package.json +3 -3
  4. package/template-admin-server/package.json +2 -2
  5. package/template-vue-admin/package.json +1 -1
  6. package/template-vue-mobile/.vscode/base.code-snippets +24 -0
  7. package/template-vue-mobile/.vscode/extensions.json +10 -0
  8. package/template-vue-mobile/.vscode/settings.json +7 -0
  9. package/template-vue-mobile/Dockerfile +42 -0
  10. package/template-vue-mobile/README.md +71 -0
  11. package/template-vue-mobile/_env +6 -0
  12. package/template-vue-mobile/_gitignore +30 -0
  13. package/template-vue-mobile/boot.mjs +16 -0
  14. package/template-vue-mobile/build/custom-plugin.ts +30 -0
  15. package/template-vue-mobile/build/index.ts +7 -0
  16. package/template-vue-mobile/build/plugins.ts +68 -0
  17. package/template-vue-mobile/config/.devrc +2 -0
  18. package/template-vue-mobile/config/.onlinerc +1 -0
  19. package/template-vue-mobile/config/.testrc +1 -0
  20. package/template-vue-mobile/index.html +25 -0
  21. package/template-vue-mobile/nitro.config.ts +19 -0
  22. package/template-vue-mobile/package.json +48 -0
  23. package/template-vue-mobile/plugins/env.ts +26 -0
  24. package/template-vue-mobile/public/vite.svg +1 -0
  25. package/template-vue-mobile/rome.json +24 -0
  26. package/template-vue-mobile/routes/[...all].ts +11 -0
  27. package/template-vue-mobile/routes/get/env.ts +25 -0
  28. package/template-vue-mobile/src/App.vue +29 -0
  29. package/template-vue-mobile/src/auto-components.d.ts +24 -0
  30. package/template-vue-mobile/src/auto-imports.d.ts +289 -0
  31. package/template-vue-mobile/src/components/Init.vue +36 -0
  32. package/template-vue-mobile/src/global.d.ts +7 -0
  33. package/template-vue-mobile/src/hooks/useVerifyCode.ts +46 -0
  34. package/template-vue-mobile/src/layouts/blank.vue +9 -0
  35. package/template-vue-mobile/src/layouts/default.vue +27 -0
  36. package/template-vue-mobile/src/layouts/sub.vue +20 -0
  37. package/template-vue-mobile/src/main.ts +35 -0
  38. package/template-vue-mobile/src/modules/1-router.ts +40 -0
  39. package/template-vue-mobile/src/modules/2-pinia.ts +10 -0
  40. package/template-vue-mobile/src/modules/3-net.ts +46 -0
  41. package/template-vue-mobile/src/modules/4-auth.ts +64 -0
  42. package/template-vue-mobile/src/views/[...all_404].vue +557 -0
  43. package/template-vue-mobile/src/views/base/login.vue +110 -0
  44. package/template-vue-mobile/src/views/base/resetPasswd.vue +88 -0
  45. package/template-vue-mobile/src/views/index.vue +18 -0
  46. package/template-vue-mobile/src/views/my.vue +15 -0
  47. package/template-vue-mobile/src/views/sub.vue +18 -0
  48. package/template-vue-mobile/src/vite-env.d.ts +43 -0
  49. package/template-vue-mobile/tsconfig.json +21 -0
  50. package/template-vue-mobile/tsconfig.node.json +9 -0
  51. package/template-vue-mobile/unocss.config.ts +47 -0
  52. package/template-vue-mobile/vite.config.ts +32 -0
  53. package/template-vue-mobile/yarn.lock +4395 -0
@@ -0,0 +1,289 @@
1
+ // Generated by 'unplugin-auto-import'
2
+ export {}
3
+ declare global {
4
+ const EffectScope: typeof import('vue')['EffectScope']
5
+ const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
6
+ const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
7
+ const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
8
+ const computed: typeof import('vue')['computed']
9
+ const computedAsync: typeof import('@vueuse/core')['computedAsync']
10
+ const computedEager: typeof import('@vueuse/core')['computedEager']
11
+ const computedInject: typeof import('@vueuse/core')['computedInject']
12
+ const computedWithControl: typeof import('@vueuse/core')['computedWithControl']
13
+ const controlledComputed: typeof import('@vueuse/core')['controlledComputed']
14
+ const controlledRef: typeof import('@vueuse/core')['controlledRef']
15
+ const createApp: typeof import('vue')['createApp']
16
+ const createEventHook: typeof import('@vueuse/core')['createEventHook']
17
+ const createGlobalState: typeof import('@vueuse/core')['createGlobalState']
18
+ const createInjectionState: typeof import('@vueuse/core')['createInjectionState']
19
+ const createPinia: typeof import('pinia')['createPinia']
20
+ const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
21
+ const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
22
+ const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
23
+ const customRef: typeof import('vue')['customRef']
24
+ const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
25
+ const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
26
+ const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
27
+ const defineComponent: typeof import('vue')['defineComponent']
28
+ const defineStore: typeof import('pinia')['defineStore']
29
+ const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
30
+ const effectScope: typeof import('vue')['effectScope']
31
+ const extendRef: typeof import('@vueuse/core')['extendRef']
32
+ const getActivePinia: typeof import('pinia')['getActivePinia']
33
+ const getCurrentInstance: typeof import('vue')['getCurrentInstance']
34
+ const getCurrentScope: typeof import('vue')['getCurrentScope']
35
+ const h: typeof import('vue')['h']
36
+ const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
37
+ const inject: typeof import('vue')['inject']
38
+ const isDefined: typeof import('@vueuse/core')['isDefined']
39
+ const isProxy: typeof import('vue')['isProxy']
40
+ const isReactive: typeof import('vue')['isReactive']
41
+ const isReadonly: typeof import('vue')['isReadonly']
42
+ const isRef: typeof import('vue')['isRef']
43
+ const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']
44
+ const mapActions: typeof import('pinia')['mapActions']
45
+ const mapGetters: typeof import('pinia')['mapGetters']
46
+ const mapState: typeof import('pinia')['mapState']
47
+ const mapStores: typeof import('pinia')['mapStores']
48
+ const mapWritableState: typeof import('pinia')['mapWritableState']
49
+ const markRaw: typeof import('vue')['markRaw']
50
+ const nextTick: typeof import('vue')['nextTick']
51
+ const onActivated: typeof import('vue')['onActivated']
52
+ const onBeforeMount: typeof import('vue')['onBeforeMount']
53
+ const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
54
+ const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
55
+ const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
56
+ const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
57
+ const onClickOutside: typeof import('@vueuse/core')['onClickOutside']
58
+ const onDeactivated: typeof import('vue')['onDeactivated']
59
+ const onErrorCaptured: typeof import('vue')['onErrorCaptured']
60
+ const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
61
+ const onLongPress: typeof import('@vueuse/core')['onLongPress']
62
+ const onMounted: typeof import('vue')['onMounted']
63
+ const onRenderTracked: typeof import('vue')['onRenderTracked']
64
+ const onRenderTriggered: typeof import('vue')['onRenderTriggered']
65
+ const onScopeDispose: typeof import('vue')['onScopeDispose']
66
+ const onServerPrefetch: typeof import('vue')['onServerPrefetch']
67
+ const onStartTyping: typeof import('@vueuse/core')['onStartTyping']
68
+ const onUnmounted: typeof import('vue')['onUnmounted']
69
+ const onUpdated: typeof import('vue')['onUpdated']
70
+ const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
71
+ const provide: typeof import('vue')['provide']
72
+ const reactify: typeof import('@vueuse/core')['reactify']
73
+ const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
74
+ const reactive: typeof import('vue')['reactive']
75
+ const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed']
76
+ const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit']
77
+ const reactivePick: typeof import('@vueuse/core')['reactivePick']
78
+ const readonly: typeof import('vue')['readonly']
79
+ const ref: typeof import('vue')['ref']
80
+ const refAutoReset: typeof import('@vueuse/core')['refAutoReset']
81
+ const refDebounced: typeof import('@vueuse/core')['refDebounced']
82
+ const refDefault: typeof import('@vueuse/core')['refDefault']
83
+ const refThrottled: typeof import('@vueuse/core')['refThrottled']
84
+ const refWithControl: typeof import('@vueuse/core')['refWithControl']
85
+ const resolveComponent: typeof import('vue')['resolveComponent']
86
+ const resolveDirective: typeof import('vue')['resolveDirective']
87
+ const resolveRef: typeof import('@vueuse/core')['resolveRef']
88
+ const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
89
+ const setActivePinia: typeof import('pinia')['setActivePinia']
90
+ const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
91
+ const shallowReactive: typeof import('vue')['shallowReactive']
92
+ const shallowReadonly: typeof import('vue')['shallowReadonly']
93
+ const shallowRef: typeof import('vue')['shallowRef']
94
+ const showConfirmDialog: typeof import('vant')['showConfirmDialog']
95
+ const showDialog: typeof import('vant')['showDialog']
96
+ const showFailToast: typeof import('vant')['showFailToast']
97
+ const showImagePreview: typeof import('vant')['showImagePreview']
98
+ const showLoadingToast: typeof import('vant')['showLoadingToast']
99
+ const showNotify: typeof import('vant')['showNotify']
100
+ const showSuccessToast: typeof import('vant')['showSuccessToast']
101
+ const showToast: typeof import('vant')['showToast']
102
+ const storeToRefs: typeof import('pinia')['storeToRefs']
103
+ const syncRef: typeof import('@vueuse/core')['syncRef']
104
+ const syncRefs: typeof import('@vueuse/core')['syncRefs']
105
+ const templateRef: typeof import('@vueuse/core')['templateRef']
106
+ const throttledRef: typeof import('@vueuse/core')['throttledRef']
107
+ const throttledWatch: typeof import('@vueuse/core')['throttledWatch']
108
+ const toRaw: typeof import('vue')['toRaw']
109
+ const toReactive: typeof import('@vueuse/core')['toReactive']
110
+ const toRef: typeof import('vue')['toRef']
111
+ const toRefs: typeof import('vue')['toRefs']
112
+ const triggerRef: typeof import('vue')['triggerRef']
113
+ const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']
114
+ const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
115
+ const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']
116
+ const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']
117
+ const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']
118
+ const unref: typeof import('vue')['unref']
119
+ const unrefElement: typeof import('@vueuse/core')['unrefElement']
120
+ const until: typeof import('@vueuse/core')['until']
121
+ const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
122
+ const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']
123
+ const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']
124
+ const useArrayFind: typeof import('@vueuse/core')['useArrayFind']
125
+ const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']
126
+ const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']
127
+ const useArrayMap: typeof import('@vueuse/core')['useArrayMap']
128
+ const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']
129
+ const useArraySome: typeof import('@vueuse/core')['useArraySome']
130
+ const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique']
131
+ const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']
132
+ const useAsyncState: typeof import('@vueuse/core')['useAsyncState']
133
+ const useAttrs: typeof import('vue')['useAttrs']
134
+ const useBase64: typeof import('@vueuse/core')['useBase64']
135
+ const useBattery: typeof import('@vueuse/core')['useBattery']
136
+ const useBluetooth: typeof import('@vueuse/core')['useBluetooth']
137
+ const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']
138
+ const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel']
139
+ const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']
140
+ const useCached: typeof import('@vueuse/core')['useCached']
141
+ const useClipboard: typeof import('@vueuse/core')['useClipboard']
142
+ const useCloned: typeof import('@vueuse/core')['useCloned']
143
+ const useColorMode: typeof import('@vueuse/core')['useColorMode']
144
+ const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']
145
+ const useCounter: typeof import('@vueuse/core')['useCounter']
146
+ const useCssModule: typeof import('vue')['useCssModule']
147
+ const useCssVar: typeof import('@vueuse/core')['useCssVar']
148
+ const useCssVars: typeof import('vue')['useCssVars']
149
+ const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement']
150
+ const useCycleList: typeof import('@vueuse/core')['useCycleList']
151
+ const useDark: typeof import('@vueuse/core')['useDark']
152
+ const useDateFormat: typeof import('@vueuse/core')['useDateFormat']
153
+ const useDebounce: typeof import('@vueuse/core')['useDebounce']
154
+ const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']
155
+ const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']
156
+ const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']
157
+ const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']
158
+ const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']
159
+ const useDevicesList: typeof import('@vueuse/core')['useDevicesList']
160
+ const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']
161
+ const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']
162
+ const useDraggable: typeof import('@vueuse/core')['useDraggable']
163
+ const useDropZone: typeof import('@vueuse/core')['useDropZone']
164
+ const useElementBounding: typeof import('@vueuse/core')['useElementBounding']
165
+ const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint']
166
+ const useElementHover: typeof import('@vueuse/core')['useElementHover']
167
+ const useElementSize: typeof import('@vueuse/core')['useElementSize']
168
+ const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']
169
+ const useEventBus: typeof import('@vueuse/core')['useEventBus']
170
+ const useEventListener: typeof import('@vueuse/core')['useEventListener']
171
+ const useEventSource: typeof import('@vueuse/core')['useEventSource']
172
+ const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
173
+ const useFavicon: typeof import('@vueuse/core')['useFavicon']
174
+ const useFetch: typeof import('@vueuse/core')['useFetch']
175
+ const useFileDialog: typeof import('@vueuse/core')['useFileDialog']
176
+ const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']
177
+ const useFocus: typeof import('@vueuse/core')['useFocus']
178
+ const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']
179
+ const useFps: typeof import('@vueuse/core')['useFps']
180
+ const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
181
+ const useGamepad: typeof import('@vueuse/core')['useGamepad']
182
+ const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
183
+ const useIdle: typeof import('@vueuse/core')['useIdle']
184
+ const useImage: typeof import('@vueuse/core')['useImage']
185
+ const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']
186
+ const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
187
+ const useInterval: typeof import('@vueuse/core')['useInterval']
188
+ const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
189
+ const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
190
+ const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
191
+ const useLink: typeof import('vue-router')['useLink']
192
+ const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
193
+ const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
194
+ const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
195
+ const useMediaControls: typeof import('@vueuse/core')['useMediaControls']
196
+ const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']
197
+ const useMemoize: typeof import('@vueuse/core')['useMemoize']
198
+ const useMemory: typeof import('@vueuse/core')['useMemory']
199
+ const useMounted: typeof import('@vueuse/core')['useMounted']
200
+ const useMouse: typeof import('@vueuse/core')['useMouse']
201
+ const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']
202
+ const useMousePressed: typeof import('@vueuse/core')['useMousePressed']
203
+ const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']
204
+ const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage']
205
+ const useNetwork: typeof import('@vueuse/core')['useNetwork']
206
+ const useNow: typeof import('@vueuse/core')['useNow']
207
+ const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl']
208
+ const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination']
209
+ const useOnline: typeof import('@vueuse/core')['useOnline']
210
+ const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
211
+ const useParallax: typeof import('@vueuse/core')['useParallax']
212
+ const usePermission: typeof import('@vueuse/core')['usePermission']
213
+ const usePointer: typeof import('@vueuse/core')['usePointer']
214
+ const usePointerLock: typeof import('@vueuse/core')['usePointerLock']
215
+ const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
216
+ const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
217
+ const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast']
218
+ const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
219
+ const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
220
+ const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']
221
+ const usePrevious: typeof import('@vueuse/core')['usePrevious']
222
+ const useRafFn: typeof import('@vueuse/core')['useRafFn']
223
+ const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
224
+ const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
225
+ const useRoute: typeof import('vue-router')['useRoute']
226
+ const useRouter: typeof import('vue-router')['useRouter']
227
+ const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']
228
+ const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']
229
+ const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
230
+ const useScroll: typeof import('@vueuse/core')['useScroll']
231
+ const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
232
+ const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
233
+ const useShare: typeof import('@vueuse/core')['useShare']
234
+ const useSlots: typeof import('vue')['useSlots']
235
+ const useSorted: typeof import('@vueuse/core')['useSorted']
236
+ const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
237
+ const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
238
+ const useStepper: typeof import('@vueuse/core')['useStepper']
239
+ const useStorage: typeof import('@vueuse/core')['useStorage']
240
+ const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync']
241
+ const useStyleTag: typeof import('@vueuse/core')['useStyleTag']
242
+ const useSupported: typeof import('@vueuse/core')['useSupported']
243
+ const useSwipe: typeof import('@vueuse/core')['useSwipe']
244
+ const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']
245
+ const useTextDirection: typeof import('@vueuse/core')['useTextDirection']
246
+ const useTextSelection: typeof import('@vueuse/core')['useTextSelection']
247
+ const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize']
248
+ const useThrottle: typeof import('@vueuse/core')['useThrottle']
249
+ const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']
250
+ const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']
251
+ const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']
252
+ const useTimeout: typeof import('@vueuse/core')['useTimeout']
253
+ const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']
254
+ const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll']
255
+ const useTimestamp: typeof import('@vueuse/core')['useTimestamp']
256
+ const useTitle: typeof import('@vueuse/core')['useTitle']
257
+ const useToNumber: typeof import('@vueuse/core')['useToNumber']
258
+ const useToString: typeof import('@vueuse/core')['useToString']
259
+ const useToggle: typeof import('@vueuse/core')['useToggle']
260
+ const useTransition: typeof import('@vueuse/core')['useTransition']
261
+ const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']
262
+ const useUserMedia: typeof import('@vueuse/core')['useUserMedia']
263
+ const useVModel: typeof import('@vueuse/core')['useVModel']
264
+ const useVModels: typeof import('@vueuse/core')['useVModels']
265
+ const useVibrate: typeof import('@vueuse/core')['useVibrate']
266
+ const useVirtualList: typeof import('@vueuse/core')['useVirtualList']
267
+ const useWakeLock: typeof import('@vueuse/core')['useWakeLock']
268
+ const useWebNotification: typeof import('@vueuse/core')['useWebNotification']
269
+ const useWebSocket: typeof import('@vueuse/core')['useWebSocket']
270
+ const useWebWorker: typeof import('@vueuse/core')['useWebWorker']
271
+ const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']
272
+ const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']
273
+ const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']
274
+ const useWindowSize: typeof import('@vueuse/core')['useWindowSize']
275
+ const watch: typeof import('vue')['watch']
276
+ const watchArray: typeof import('@vueuse/core')['watchArray']
277
+ const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
278
+ const watchDebounced: typeof import('@vueuse/core')['watchDebounced']
279
+ const watchEffect: typeof import('vue')['watchEffect']
280
+ const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
281
+ const watchOnce: typeof import('@vueuse/core')['watchOnce']
282
+ const watchPausable: typeof import('@vueuse/core')['watchPausable']
283
+ const watchPostEffect: typeof import('vue')['watchPostEffect']
284
+ const watchSyncEffect: typeof import('vue')['watchSyncEffect']
285
+ const watchThrottled: typeof import('@vueuse/core')['watchThrottled']
286
+ const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable']
287
+ const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
288
+ const whenever: typeof import('@vueuse/core')['whenever']
289
+ }
@@ -0,0 +1,36 @@
1
+ <!--
2
+ * @Author: zhangyang
3
+ * @Date: 2023-02-01 11:54:25
4
+ * @LastEditTime: 2023-02-01 11:59:36
5
+ * @Description:
6
+ -->
7
+ <script lang="ts" setup>
8
+ import { server } from 'virtual:local-server';
9
+
10
+ (async () => {
11
+ // 获取环境变量
12
+ let viteEnv;
13
+ // 注入此环境变量,可以兼容现有的部署方式
14
+ if (import.meta.env.VITE_USE_DEFAULT_DEPLOY_METHOD) {
15
+ viteEnv = import.meta.env;
16
+ // console.log("🚀 ~ file: main.ts ~ line 19 ~ viteEnv", viteEnv)
17
+ } else if (import.meta.env.DEV) {
18
+ // 开发环境,局域网 ip
19
+ viteEnv = await (await fetch(server + '/get/env')).json();
20
+ // console.log("🚀 ~ file: main.ts ~ line 24 ~ viteEnv", viteEnv)
21
+ } else {
22
+ // 部署环境,需要配合 node server 使用
23
+ viteEnv = await (await fetch(`/get/env`)).json();
24
+ // console.log("🚀 ~ file: main.ts ~ line 28 ~ viteEnv", viteEnv)
25
+ }
26
+ window.__YOUNG_VITE_ENV__ = viteEnv;
27
+
28
+ // 设定视口高度,防止软键盘影响布局
29
+ const metaElement = document.querySelector('#viewportMeta');
30
+ metaElement?.setAttribute('content', `maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0,viewport-fit=cover,height=${window.innerHeight}`);
31
+
32
+ })();
33
+ </script>
34
+ <template>
35
+ <div hidden></div>
36
+ </template>
@@ -0,0 +1,7 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2023-01-13 15:42:30
4
+ * @LastEditTime: 2023-01-13 15:42:31
5
+ * @Description:
6
+ */
7
+ type UserModule = (ctx: App<Element>, ...args: any[]) => void;
@@ -0,0 +1,46 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2021-09-10 09:23:47
4
+ * @LastEditTime: 2023-01-13 16:26:47
5
+ * @Description: 发送短信验证码的逻辑抽离
6
+ */
7
+ import { useCountDown } from '@vant/use';
8
+ interface UseVerifyOptions {
9
+ t: number;
10
+ cbk(): void;
11
+ }
12
+
13
+ const defaultOptions: UseVerifyOptions = {
14
+ t: 60,
15
+ cbk: async () => {
16
+ // todo: 调用发送验证码的接口
17
+ // await get_verify_code();
18
+ showToast('验证码已发送\n请注意查收');
19
+ },
20
+ };
21
+ export const useVerifyCode = (options: UseVerifyOptions = defaultOptions) => {
22
+ options = Object.assign(defaultOptions, options);
23
+ const countDown = useCountDown({
24
+ time: options.t * 1000,
25
+ });
26
+ const isClicked = ref(false);
27
+ const sendClick = async () => {
28
+ if (!isClicked.value) {
29
+ countDown.start();
30
+ isClicked.value = true;
31
+ await options.cbk();
32
+ }
33
+ };
34
+ watchEffect(() => {
35
+ if (countDown.current.value.seconds === 0) {
36
+ isClicked.value = false;
37
+ countDown.reset();
38
+ }
39
+ });
40
+
41
+ return {
42
+ countDown,
43
+ sendClick,
44
+ isClicked,
45
+ };
46
+ };
@@ -0,0 +1,9 @@
1
+ <!--
2
+ * @Author: zhangyang
3
+ * @Date: 2022-12-03 16:22:39
4
+ * @LastEditTime: 2022-12-03 16:22:40
5
+ * @Description:
6
+ -->
7
+ <template>
8
+ <RouterView />
9
+ </template>
@@ -0,0 +1,27 @@
1
+ <!--
2
+ * @Author: zhangyang
3
+ * @Date: 2022-12-03 16:20:06
4
+ * @LastEditTime: 2023-02-01 11:16:19
5
+ * @Description:
6
+ -->
7
+ <script lang="ts" setup>
8
+ const route = useRoute();
9
+ const title = computed(() => route.meta.title || import.meta.env.VITE_TITLE);
10
+ </script>
11
+
12
+ <template>
13
+ <VanNavBar :border="false">
14
+ <template #title>
15
+ <span class="text-[#FFFFFF] text-16px font-700">{{ title }}</span>
16
+ </template>
17
+ </VanNavBar>
18
+ <RouterView v-bind="$attrs" />
19
+ <VanTabbar route>
20
+ <VanTabbarItem to="/" icon="home-o">
21
+ <span>首页</span>
22
+ </VanTabbarItem>
23
+ <VanTabbarItem to="/my" icon="user-o">
24
+ <span>我的</span>
25
+ </VanTabbarItem>
26
+ </VanTabbar>
27
+ </template>
@@ -0,0 +1,20 @@
1
+ <!--
2
+ * @Author: zhangyang
3
+ * @Date: 2022-12-03 16:21:10
4
+ * @LastEditTime: 2023-02-01 11:24:56
5
+ * @Description:
6
+ -->
7
+ <script lang="ts" setup>
8
+ const route = useRoute();
9
+ const title = computed(() => route.meta.title || import.meta.env.VITE_TITLE);
10
+ </script>
11
+
12
+ <template>
13
+ <VanNavBar :border="false" left-arrow @click-left="$router.back()">
14
+ <template #title>
15
+ <span class="text-[#FFFFFF] text-16px font-700">{{ title }}</span>
16
+ </template>
17
+ </VanNavBar>
18
+ <RouterView v-bind="$attrs" />
19
+ </template>
20
+
@@ -0,0 +1,35 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2022-12-03 15:57:40
4
+ * @LastEditTime: 2023-02-01 12:01:43
5
+ * @Description:
6
+ */
7
+ // polyfill
8
+ import 'core-js/stable';
9
+ import 'regenerator-runtime/runtime';
10
+ // 统一浏览器样式
11
+ import '@unocss/reset/tailwind.css';
12
+ import 'uno.css';
13
+ // vant 指令的样式
14
+ import 'vant/es/toast/style/index';
15
+ import 'vant/es/dialog/style/index';
16
+ import 'vant/es/notify/style/index';
17
+ import 'vant/es/image-preview/style/index';
18
+
19
+ import { createApp } from 'vue';
20
+ import App from './App.vue';
21
+
22
+ const app = createApp(App);
23
+
24
+ Object.values(import.meta.glob<{ install: UserModule }>('./modules/*.ts', { eager: true })).map(
25
+ ({ install }) => install(app),
26
+ );
27
+
28
+ setTimeout(async () => {
29
+ if (window?.__YOUNG_VITE_ENV__?.VITE_ENABLE_VCONSOLE) {
30
+ const VConsole = await (await import('vconsole')).default;
31
+ new VConsole();
32
+ }
33
+ }, 1e4);
34
+
35
+ app.mount('#app');
@@ -0,0 +1,40 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2022-03-01 14:01:31
4
+ * @LastEditTime: 2023-02-01 11:22:42
5
+ * @Description: 路由模块
6
+ */
7
+ import { createRouter, createWebHashHistory } from 'vue-router';
8
+ import { setupLayouts } from 'virtual:generated-layouts';
9
+ import routes from '~pages';
10
+
11
+ /**
12
+ * 路由元数据类型扩展
13
+ */
14
+ declare module 'vue-router' {
15
+ interface RouteMeta {
16
+ /**
17
+ * 页面标题
18
+ */
19
+ title: string;
20
+ /**
21
+ * 需要登录,不设置则为白名单页面
22
+ */
23
+ auth?: boolean;
24
+ /**
25
+ * 页面布局,对应 layouts 目录下的布局页面,默认为 default
26
+ */
27
+ layout?: 'default' | 'sub' | 'blank';
28
+ }
29
+ }
30
+
31
+ export const finalRoutes = setupLayouts(routes);
32
+
33
+ export const router = createRouter({
34
+ history: createWebHashHistory(),
35
+ routes: finalRoutes,
36
+ });
37
+
38
+ export const install: UserModule = (app) => {
39
+ app.use(router);
40
+ };
@@ -0,0 +1,10 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2022-03-01 14:01:31
4
+ * @LastEditTime: 2023-01-13 15:42:50
5
+ * @Description: 状态管理
6
+ */
7
+ export const install: UserModule = (app) => {
8
+ const pinia = createPinia();
9
+ app.use(pinia);
10
+ };
@@ -0,0 +1,46 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2022-03-01 14:01:31
4
+ * @LastEditTime: 2023-01-13 15:54:59
5
+ * @Description: 网络请求
6
+ */
7
+ import { useHttp } from '@bluesyoung/http';
8
+
9
+ let loadingInstance: ReturnType<typeof showLoadingToast>;
10
+
11
+ export const startLoading = () => {
12
+ loadingInstance = showLoadingToast({
13
+ message: '拼命加载中...',
14
+ forbidClick: true,
15
+ });
16
+ };
17
+
18
+ export const endLoading = () => loadingInstance?.close?.();
19
+
20
+ export const http = useHttp({
21
+ timeout: -1,
22
+ loading: {
23
+ start: startLoading,
24
+ end: endLoading,
25
+ },
26
+ fail(err) {
27
+ console.log('🚀 ~ file: 3-net.ts:60 ~ err', err, typeof err);
28
+ if (typeof err === 'string') {
29
+ // 通用失败,弹出提示信息
30
+ showFailToast(err);
31
+ }
32
+
33
+ if (err instanceof Error) {
34
+ showFailToast(
35
+ // @ts-ignore 接口出错
36
+ err?.response?.data?.message || err?.response?.data?.msg || err.message || '网络错误!',
37
+ );
38
+ }
39
+
40
+ throw err;
41
+ },
42
+ });
43
+
44
+ export const apis = http.__mixin__({});
45
+
46
+ export const install: UserModule = (ctx) => {};
@@ -0,0 +1,64 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2022-03-01 19:40:13
4
+ * @LastEditTime: 2023-02-01 11:46:18
5
+ * @Description: 权限校验
6
+ */
7
+ import { router } from './1-router';
8
+ import type { RouteLocationNormalized } from 'vue-router';
9
+ import { YoungLocalStorage } from '@bluesyoung/utils';
10
+
11
+ const changeTitle = (to: RouteLocationNormalized) => {
12
+ document.title = to.meta.title || (import.meta.env.VITE_TITLE as string);
13
+ };
14
+
15
+ export const hasPermission = (path: string) => {};
16
+
17
+ export const sureLeave = async () => {
18
+ try {
19
+ await showConfirmDialog({
20
+ title: '温馨提示',
21
+ message: '您确定要离开吗?',
22
+ });
23
+ return true;
24
+ } catch (error) {
25
+ return false;
26
+ }
27
+ };
28
+
29
+ export const install: UserModule = (app) => {
30
+ // todo: 按需替换为 api 操作
31
+ const store = new YoungLocalStorage();
32
+ const api = {
33
+ getInfo: () => store.get('user.info'),
34
+ setInfo: () => store.set('user.info', { key: 'cdcsdfdf' }),
35
+ };
36
+
37
+ router.beforeEach(async (to, from) => {
38
+ // auth
39
+ if (to.meta.auth) {
40
+ const info = await api.getInfo();
41
+ if (info) {
42
+ return true;
43
+ }
44
+ try {
45
+ // todo: 可根据情况替换为跳转登录页, /base/login
46
+ await showDialog({
47
+ title: '温馨提示',
48
+ message: '我是默认的登录框,点击即登录',
49
+ showCancelButton: true,
50
+ });
51
+ await api.setInfo();
52
+ return true;
53
+ } catch (error) {
54
+ return false;
55
+ }
56
+ } else {
57
+ return true;
58
+ }
59
+ });
60
+
61
+ router.afterEach((to) => {
62
+ changeTitle(to);
63
+ });
64
+ };