create-young-proj 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) 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/build/custom-plugin.ts +30 -0
  6. package/template-vue-admin/build/index.ts +7 -0
  7. package/template-vue-admin/build/plugins.ts +59 -0
  8. package/template-vue-admin/package.json +1 -1
  9. package/template-vue-admin/src/main.ts +4 -4
  10. package/template-vue-admin/src/modules/4-auth.ts +8 -4
  11. package/template-vue-admin/src/shims.d.ts +12 -0
  12. package/template-vue-admin/tsconfig.node.json +1 -1
  13. package/template-vue-admin/vite.config.ts +4 -49
  14. package/template-vue-mobile/.vscode/base.code-snippets +24 -0
  15. package/template-vue-mobile/.vscode/extensions.json +10 -0
  16. package/template-vue-mobile/.vscode/settings.json +7 -0
  17. package/template-vue-mobile/Dockerfile +42 -0
  18. package/template-vue-mobile/README.md +71 -0
  19. package/template-vue-mobile/_env +6 -0
  20. package/template-vue-mobile/_gitignore +30 -0
  21. package/template-vue-mobile/boot.mjs +16 -0
  22. package/template-vue-mobile/build/custom-plugin.ts +30 -0
  23. package/template-vue-mobile/build/index.ts +7 -0
  24. package/template-vue-mobile/build/plugins.ts +68 -0
  25. package/template-vue-mobile/config/.devrc +2 -0
  26. package/template-vue-mobile/config/.onlinerc +1 -0
  27. package/template-vue-mobile/config/.testrc +1 -0
  28. package/template-vue-mobile/index.html +25 -0
  29. package/template-vue-mobile/nitro.config.ts +19 -0
  30. package/template-vue-mobile/package.json +48 -0
  31. package/template-vue-mobile/plugins/env.ts +26 -0
  32. package/template-vue-mobile/public/vite.svg +1 -0
  33. package/template-vue-mobile/rome.json +24 -0
  34. package/template-vue-mobile/routes/[...all].ts +11 -0
  35. package/template-vue-mobile/routes/get/env.ts +25 -0
  36. package/template-vue-mobile/src/App.vue +29 -0
  37. package/template-vue-mobile/src/auto-components.d.ts +24 -0
  38. package/template-vue-mobile/src/auto-imports.d.ts +289 -0
  39. package/template-vue-mobile/src/components/Init.vue +36 -0
  40. package/template-vue-mobile/src/global.d.ts +7 -0
  41. package/template-vue-mobile/src/hooks/useVerifyCode.ts +46 -0
  42. package/template-vue-mobile/src/layouts/blank.vue +9 -0
  43. package/template-vue-mobile/src/layouts/default.vue +27 -0
  44. package/template-vue-mobile/src/layouts/sub.vue +20 -0
  45. package/template-vue-mobile/src/main.ts +35 -0
  46. package/template-vue-mobile/src/modules/1-router.ts +40 -0
  47. package/template-vue-mobile/src/modules/2-pinia.ts +10 -0
  48. package/template-vue-mobile/src/modules/3-net.ts +46 -0
  49. package/template-vue-mobile/src/modules/4-auth.ts +64 -0
  50. package/template-vue-mobile/src/views/[...all_404].vue +557 -0
  51. package/template-vue-mobile/src/views/base/login.vue +110 -0
  52. package/template-vue-mobile/src/views/base/resetPasswd.vue +88 -0
  53. package/template-vue-mobile/src/views/index.vue +18 -0
  54. package/template-vue-mobile/src/views/my.vue +15 -0
  55. package/template-vue-mobile/src/views/sub.vue +18 -0
  56. package/template-vue-mobile/src/vite-env.d.ts +43 -0
  57. package/template-vue-mobile/tsconfig.json +21 -0
  58. package/template-vue-mobile/tsconfig.node.json +9 -0
  59. package/template-vue-mobile/unocss.config.ts +47 -0
  60. package/template-vue-mobile/vite.config.ts +32 -0
  61. package/template-vue-mobile/yarn.lock +4395 -0
@@ -0,0 +1,19 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2022-12-28 11:59:56
4
+ * @LastEditTime: 2022-12-28 12:18:46
5
+ * @Description:
6
+ */
7
+ import { defineNitroConfig } from 'nitropack';
8
+
9
+ export default defineNitroConfig({
10
+ /**
11
+ * 托管前端静态资源
12
+ */
13
+ serveStatic: 'node',
14
+ publicAssets: [
15
+ {
16
+ dir: 'dist',
17
+ },
18
+ ],
19
+ });
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "vue3_vant",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite --host",
8
+ "dev:server": "nitropack dev",
9
+ "build": "vite build && nitropack build",
10
+ "preview": "vite preview --host",
11
+ "format": "rome format . --write",
12
+ "release": "changelogen && bumpp --no-push"
13
+ },
14
+ "dependencies": {
15
+ "@bluesyoung/http": "0.1.3",
16
+ "@bluesyoung/utils": "0.0.3",
17
+ "@vueuse/core": "^9.12.0",
18
+ "core-js": "^3.27.2",
19
+ "pinia": "^2.0.29",
20
+ "regenerator-runtime": "^0.13.10",
21
+ "vant": "^4.0.9",
22
+ "vconsole": "^3.15.0",
23
+ "vue": "^3.2.41",
24
+ "vue-router": "^4.1.6"
25
+ },
26
+ "devDependencies": {
27
+ "@iconify/json": "^2.2.14",
28
+ "@types/node": "16",
29
+ "@unocss/reset": "^0.49.1",
30
+ "@vitejs/plugin-legacy": "^3.0.2",
31
+ "@vitejs/plugin-vue": "^4.0.0",
32
+ "@vitejs/plugin-vue-jsx": "^3.0.0",
33
+ "bumpp": "^8.2.1",
34
+ "c12": "^1.1.0",
35
+ "changelogen": "^0.4.1",
36
+ "less": "^4.1.3",
37
+ "nitropack": "^2.1.1",
38
+ "rome": "^11.0.0",
39
+ "terser": "^5.16.2",
40
+ "typescript": "^4.9.5",
41
+ "unocss": "^0.49.1",
42
+ "unplugin-auto-import": "^0.13.0",
43
+ "unplugin-vue-components": "^0.23.0",
44
+ "vite": "^4.0.4",
45
+ "vite-plugin-pages": "^0.28.0",
46
+ "vite-plugin-vue-layouts": "^0.7.0"
47
+ }
48
+ }
@@ -0,0 +1,26 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2023-01-04 18:53:23
4
+ * @LastEditTime: 2023-01-04 19:12:55
5
+ * @Description: 在插件中读取环境变量,避免重复的文件 io
6
+ */
7
+ import { resolve } from 'node:path';
8
+ import { loadConfig } from 'c12';
9
+ // @ts-ignore
10
+ export default defineNitroPlugin(async (app) => {
11
+ const env = (process.env.DEPLOY_ENV as 'dev' | 'test' | 'online') || 'dev';
12
+ const { config } = await loadConfig({
13
+ name: env,
14
+ cwd: resolve(process.cwd(), 'config'),
15
+ });
16
+
17
+ for (const key in config) {
18
+ if (Object.prototype.hasOwnProperty.call(config, key)) {
19
+ process.env[key] = config[key];
20
+ }
21
+ }
22
+
23
+ console.log('------------------------读取配置文件------------------------');
24
+ console.log(config);
25
+ console.log('------------------------------------------------------------');
26
+ });
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
@@ -0,0 +1,24 @@
1
+ {
2
+ "formatter": {
3
+ "ignore": [
4
+ "*.d.ts",
5
+ "index.html",
6
+ "yarn.lock",
7
+ "*.json",
8
+ "README.md",
9
+ "Dockerfile",
10
+ "dist/**/*"
11
+ ],
12
+ "indentStyle": "space",
13
+ "indentSize": 2,
14
+ "lineWidth": 100
15
+ },
16
+ "javascript": {
17
+ "formatter": {
18
+ "quoteStyle": "single"
19
+ }
20
+ },
21
+ "linter": {
22
+ "enabled": false
23
+ }
24
+ }
@@ -0,0 +1,11 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2023-01-14 16:55:47
4
+ * @LastEditTime: 2023-02-01 12:16:57
5
+ * @Description:
6
+ */
7
+ export default eventHandler(async (event) => {
8
+ return {
9
+ hello: 'world',
10
+ };
11
+ });
@@ -0,0 +1,25 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2022-11-18 10:55:50
4
+ * @LastEditTime: 2023-02-01 12:17:15
5
+ * @Description:
6
+ */
7
+
8
+ /**
9
+ * 存储前端需要的环境变量
10
+ */
11
+ const envObj: any = {};
12
+
13
+ export default eventHandler(async (event) => {
14
+ if (Object.keys(envObj).length === 0) {
15
+ for (const key in process.env) {
16
+ if (Object.prototype.hasOwnProperty.call(process.env, key) && key.startsWith('VITE_')) {
17
+ envObj[key] = process.env[key];
18
+ }
19
+ }
20
+ }
21
+
22
+ event.node.res.setHeader('Access-Control-Allow-Origin', '*');
23
+
24
+ return envObj as ImportMetaEnv;
25
+ });
@@ -0,0 +1,29 @@
1
+ <!--
2
+ * @Author: zhangyang
3
+ * @Date: 2022-12-03 15:57:40
4
+ * @LastEditTime: 2023-02-01 12:00:31
5
+ * @Description:
6
+ -->
7
+ <template>
8
+ <div>
9
+ <!-- 初始化 -->
10
+ <Init />
11
+ <!-- 页面 -->
12
+ <RouterView />
13
+ </div>
14
+ </template>
15
+ <style>
16
+ :root {
17
+ --van-nav-bar-background: #0083CE !important;
18
+ --van-nav-bar-title-text-color: #FFFFFF !important;
19
+ --van-nav-bar-icon-color: #fff !important;
20
+ --van-grid-item-text-color: #111 !important;
21
+ }
22
+
23
+ html,
24
+ body {
25
+ width: 100%;
26
+ height: 100%;
27
+ background: #F7F8FA;
28
+ }
29
+ </style>
@@ -0,0 +1,24 @@
1
+ // generated by unplugin-vue-components
2
+ // We suggest you to commit this file into source control
3
+ // Read more: https://github.com/vuejs/core/pull/3399
4
+ import '@vue/runtime-core'
5
+
6
+ export {}
7
+
8
+ declare module '@vue/runtime-core' {
9
+ export interface GlobalComponents {
10
+ Init: typeof import('./components/Init.vue')['default']
11
+ RouterLink: typeof import('vue-router')['RouterLink']
12
+ RouterView: typeof import('vue-router')['RouterView']
13
+ VanButton: typeof import('vant/es')['Button']
14
+ VanCellGroup: typeof import('vant/es')['CellGroup']
15
+ VanCheckbox: typeof import('vant/es')['Checkbox']
16
+ VanField: typeof import('vant/es')['Field']
17
+ VanForm: typeof import('vant/es')['Form']
18
+ VanIcon: typeof import('vant/es')['Icon']
19
+ VanNavBar: typeof import('vant/es')['NavBar']
20
+ VanPopup: typeof import('vant/es')['Popup']
21
+ VanTabbar: typeof import('vant/es')['Tabbar']
22
+ VanTabbarItem: typeof import('vant/es')['TabbarItem']
23
+ }
24
+ }
@@ -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>