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.
- package/README.md +11 -2
- package/dist/index.mjs +2702 -42
- package/package.json +3 -3
- package/template-admin-server/package.json +2 -2
- package/template-vue-admin/build/custom-plugin.ts +30 -0
- package/template-vue-admin/build/index.ts +7 -0
- package/template-vue-admin/build/plugins.ts +59 -0
- package/template-vue-admin/package.json +1 -1
- package/template-vue-admin/src/main.ts +4 -4
- package/template-vue-admin/src/modules/4-auth.ts +8 -4
- package/template-vue-admin/src/shims.d.ts +12 -0
- package/template-vue-admin/tsconfig.node.json +1 -1
- package/template-vue-admin/vite.config.ts +4 -49
- package/template-vue-mobile/.vscode/base.code-snippets +24 -0
- package/template-vue-mobile/.vscode/extensions.json +10 -0
- package/template-vue-mobile/.vscode/settings.json +7 -0
- package/template-vue-mobile/Dockerfile +42 -0
- package/template-vue-mobile/README.md +71 -0
- package/template-vue-mobile/_env +6 -0
- package/template-vue-mobile/_gitignore +30 -0
- package/template-vue-mobile/boot.mjs +16 -0
- package/template-vue-mobile/build/custom-plugin.ts +30 -0
- package/template-vue-mobile/build/index.ts +7 -0
- package/template-vue-mobile/build/plugins.ts +68 -0
- package/template-vue-mobile/config/.devrc +2 -0
- package/template-vue-mobile/config/.onlinerc +1 -0
- package/template-vue-mobile/config/.testrc +1 -0
- package/template-vue-mobile/index.html +25 -0
- package/template-vue-mobile/nitro.config.ts +19 -0
- package/template-vue-mobile/package.json +48 -0
- package/template-vue-mobile/plugins/env.ts +26 -0
- package/template-vue-mobile/public/vite.svg +1 -0
- package/template-vue-mobile/rome.json +24 -0
- package/template-vue-mobile/routes/[...all].ts +11 -0
- package/template-vue-mobile/routes/get/env.ts +25 -0
- package/template-vue-mobile/src/App.vue +29 -0
- package/template-vue-mobile/src/auto-components.d.ts +24 -0
- package/template-vue-mobile/src/auto-imports.d.ts +289 -0
- package/template-vue-mobile/src/components/Init.vue +36 -0
- package/template-vue-mobile/src/global.d.ts +7 -0
- package/template-vue-mobile/src/hooks/useVerifyCode.ts +46 -0
- package/template-vue-mobile/src/layouts/blank.vue +9 -0
- package/template-vue-mobile/src/layouts/default.vue +27 -0
- package/template-vue-mobile/src/layouts/sub.vue +20 -0
- package/template-vue-mobile/src/main.ts +35 -0
- package/template-vue-mobile/src/modules/1-router.ts +40 -0
- package/template-vue-mobile/src/modules/2-pinia.ts +10 -0
- package/template-vue-mobile/src/modules/3-net.ts +46 -0
- package/template-vue-mobile/src/modules/4-auth.ts +64 -0
- package/template-vue-mobile/src/views/[...all_404].vue +557 -0
- package/template-vue-mobile/src/views/base/login.vue +110 -0
- package/template-vue-mobile/src/views/base/resetPasswd.vue +88 -0
- package/template-vue-mobile/src/views/index.vue +18 -0
- package/template-vue-mobile/src/views/my.vue +15 -0
- package/template-vue-mobile/src/views/sub.vue +18 -0
- package/template-vue-mobile/src/vite-env.d.ts +43 -0
- package/template-vue-mobile/tsconfig.json +21 -0
- package/template-vue-mobile/tsconfig.node.json +9 -0
- package/template-vue-mobile/unocss.config.ts +47 -0
- package/template-vue-mobile/vite.config.ts +32 -0
- 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,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,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,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>
|