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.
- 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/package.json +1 -1
- 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,88 @@
|
|
1
|
+
<!--
|
2
|
+
* @Author: zhangyang
|
3
|
+
* @Date: 2021-09-09 12:07:27
|
4
|
+
* @LastEditTime: 2023-01-13 16:50:21
|
5
|
+
* @Description: 重置密码 | 修改密码
|
6
|
+
-->
|
7
|
+
<route lang="yaml">
|
8
|
+
meta:
|
9
|
+
title: 用户登录
|
10
|
+
layout: blank
|
11
|
+
</route>
|
12
|
+
|
13
|
+
<script lang="ts" setup>
|
14
|
+
import { isMobile } from '@bluesyoung/utils';
|
15
|
+
import { useVerifyCode } from '@/hooks/useVerifyCode';
|
16
|
+
import type { FormInstance } from 'vant';
|
17
|
+
import { router } from '@/modules/1-router';
|
18
|
+
|
19
|
+
const { countDown, isClicked, sendClick } = useVerifyCode();
|
20
|
+
const formRef = ref<FormInstance>();
|
21
|
+
|
22
|
+
const form = ref({
|
23
|
+
tel: '',
|
24
|
+
code: '',
|
25
|
+
passwd: '',
|
26
|
+
passwd_again: ''
|
27
|
+
});
|
28
|
+
const validPasswd = () => {
|
29
|
+
const { passwd: p1, passwd_again: p2 } = form.value;
|
30
|
+
return p1 === p2;
|
31
|
+
};
|
32
|
+
const [showPass1, toggle1] = useToggle(false);
|
33
|
+
const [showPass2, toggle2] = useToggle(false);
|
34
|
+
const sure = async () => {
|
35
|
+
try {
|
36
|
+
await formRef.value?.validate();
|
37
|
+
// todo: 修改密码,移除登录信息
|
38
|
+
// await mod_passwd(form.value);
|
39
|
+
showToast('修改成功,请重新登录!');
|
40
|
+
// removeToken();
|
41
|
+
router.push('/base/login');
|
42
|
+
} catch (error) {
|
43
|
+
return;
|
44
|
+
}
|
45
|
+
};
|
46
|
+
|
47
|
+
</script>
|
48
|
+
<template>
|
49
|
+
<VanNavBar title="重置密码" safe-area-inset-bottom @click-left="$router.back()" />
|
50
|
+
<div v-bind="$attrs" class="w-full h-full mt-10">
|
51
|
+
<VanForm ref="formRef">
|
52
|
+
<VanCellGroup inset>
|
53
|
+
<VanField v-model.trim="form.tel" placeholder="手机号" :rules="[
|
54
|
+
{ required: true, message: '请填写手机号' },
|
55
|
+
{ validator: isMobile, message: '请输入合法的手机号' }
|
56
|
+
]" />
|
57
|
+
<VanField v-model.trim="form.code" placeholder="验证码" :rules="[{ required: true, message: '请填写验证码' }]">
|
58
|
+
<template #button>
|
59
|
+
<VanButton v-if="!isClicked" :disabled="!isMobile(form.tel)" size="small" type="primary" plain
|
60
|
+
@click="sendClick">发送验证码</VanButton>
|
61
|
+
<VanButton v-else size="small" :disabled="true">
|
62
|
+
{{ countDown.current.value.seconds }}秒后重发
|
63
|
+
</VanButton>
|
64
|
+
</template>
|
65
|
+
</VanField>
|
66
|
+
<VanField v-model.trim="form.passwd" placeholder="输入新密码" :type="showPass1 ? 'text' : 'password'" clearable
|
67
|
+
:rules="[{ required: true, message: '请填写新密码' }]">
|
68
|
+
<template #right-icon>
|
69
|
+
<VanIcon :name="showPass1 ? 'eye' : 'closed-eye'" @click="toggle1(!showPass1)" />
|
70
|
+
</template>
|
71
|
+
</VanField>
|
72
|
+
<VanField v-model.trim="form.passwd_again" placeholder="再次确认新密码" :type="showPass2 ? 'text' : 'password'" :rules="[
|
73
|
+
{ required: true, message: '请确认新密码' },
|
74
|
+
{ validator: validPasswd, message: '两次输入的密码不一致' }
|
75
|
+
]">
|
76
|
+
<template #right-icon>
|
77
|
+
<VanIcon :name="showPass2 ? 'eye' : 'closed-eye'" @click="toggle2(!showPass2)" />
|
78
|
+
</template>
|
79
|
+
</VanField>
|
80
|
+
</VanCellGroup>
|
81
|
+
<div class="m-4">
|
82
|
+
<VanButton block type="primary" @click="sure">
|
83
|
+
确定
|
84
|
+
</VanButton>
|
85
|
+
</div>
|
86
|
+
</VanForm>
|
87
|
+
</div>
|
88
|
+
</template>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<!--
|
2
|
+
* @Author: zhangyang
|
3
|
+
* @Date: 2022-12-03 16:23:19
|
4
|
+
* @LastEditTime: 2023-02-01 11:39:25
|
5
|
+
* @Description:
|
6
|
+
-->
|
7
|
+
<route lang="yaml">
|
8
|
+
meta:
|
9
|
+
title: 首页
|
10
|
+
</route>
|
11
|
+
|
12
|
+
<template>
|
13
|
+
<div>
|
14
|
+
我是首页,我会使用默认布局
|
15
|
+
<br />
|
16
|
+
<RouterLink class="text-blue-500 mr-2" to="/sub">进入子页面</RouterLink>
|
17
|
+
</div>
|
18
|
+
</template>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<!--
|
2
|
+
* @Author: zhangyang
|
3
|
+
* @Date: 2022-12-03 16:23:19
|
4
|
+
* @LastEditTime: 2023-02-01 11:39:49
|
5
|
+
* @Description:
|
6
|
+
-->
|
7
|
+
<route lang="yaml">
|
8
|
+
meta:
|
9
|
+
auth: true
|
10
|
+
title: 子页面
|
11
|
+
layout: sub
|
12
|
+
</route>
|
13
|
+
|
14
|
+
<template>
|
15
|
+
<div>
|
16
|
+
我是子页面,我会使用 sub 布局
|
17
|
+
</div>
|
18
|
+
</template>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
/*
|
2
|
+
* @Author: zhangyang
|
3
|
+
* @Date: 2022-12-03 15:57:40
|
4
|
+
* @LastEditTime: 2023-02-01 11:55:56
|
5
|
+
* @Description:
|
6
|
+
*/
|
7
|
+
/// <reference types="vite/client" />
|
8
|
+
/// <reference types="vite-plugin-pages/client" />
|
9
|
+
/// <reference types="vite-plugin-vue-layouts/client" />
|
10
|
+
|
11
|
+
declare module 'virtual:local-server' {
|
12
|
+
/**
|
13
|
+
* 本地服务地址
|
14
|
+
*/
|
15
|
+
export const server: string;
|
16
|
+
}
|
17
|
+
|
18
|
+
declare module '*.vue' {
|
19
|
+
import type { DefineComponent } from 'vue'
|
20
|
+
const component: DefineComponent<{}, {}, any>
|
21
|
+
export default component
|
22
|
+
}
|
23
|
+
|
24
|
+
/**
|
25
|
+
* import.meta.env 类型提示
|
26
|
+
*/
|
27
|
+
declare interface ImportMetaEnv {
|
28
|
+
/**
|
29
|
+
* 标题
|
30
|
+
*/
|
31
|
+
VITE_TITLE: string;
|
32
|
+
/**
|
33
|
+
* 是否启用 VConsole
|
34
|
+
*/
|
35
|
+
VITE_ENABLE_VCONSOLE?: string | boolean;
|
36
|
+
}
|
37
|
+
|
38
|
+
/**
|
39
|
+
* 扩充 window
|
40
|
+
*/
|
41
|
+
interface Window {
|
42
|
+
__YOUNG_VITE_ENV__: ImportMetaEnv;
|
43
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"target": "ESNext",
|
4
|
+
"useDefineForClassFields": true,
|
5
|
+
"module": "ESNext",
|
6
|
+
"moduleResolution": "Node",
|
7
|
+
"strict": true,
|
8
|
+
"jsx": "preserve",
|
9
|
+
"resolveJsonModule": true,
|
10
|
+
"isolatedModules": true,
|
11
|
+
"esModuleInterop": true,
|
12
|
+
"lib": ["ESNext", "DOM"],
|
13
|
+
"skipLibCheck": true,
|
14
|
+
"noEmit": true,
|
15
|
+
"paths": {
|
16
|
+
"@/*": ["./src/*"]
|
17
|
+
}
|
18
|
+
},
|
19
|
+
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "config/**/*", ".nitro/**/*"],
|
20
|
+
"references": [{ "path": "./tsconfig.node.json" }]
|
21
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/*
|
2
|
+
* @Author: zhangyang
|
3
|
+
* @Date: 2022-03-01 19:11:11
|
4
|
+
* @LastEditTime: 2022-05-21 18:32:05
|
5
|
+
* @Description:
|
6
|
+
*/
|
7
|
+
import {
|
8
|
+
defineConfig,
|
9
|
+
presetAttributify,
|
10
|
+
presetIcons,
|
11
|
+
presetTypography,
|
12
|
+
presetUno,
|
13
|
+
presetWebFonts,
|
14
|
+
transformerDirectives,
|
15
|
+
transformerVariantGroup,
|
16
|
+
} from 'unocss';
|
17
|
+
|
18
|
+
export default defineConfig({
|
19
|
+
shortcuts: [
|
20
|
+
[
|
21
|
+
'btn',
|
22
|
+
'px-4 py-1 rounded inline-block bg-teal-700 text-white cursor-pointer hover:bg-teal-800 disabled:cursor-default disabled:bg-gray-600 disabled:opacity-50',
|
23
|
+
],
|
24
|
+
[
|
25
|
+
'icon-btn',
|
26
|
+
'inline-block cursor-pointer select-none opacity-75 transition duration-200 ease-in-out hover:opacity-100 hover:text-teal-600',
|
27
|
+
],
|
28
|
+
],
|
29
|
+
presets: [
|
30
|
+
presetUno(),
|
31
|
+
presetAttributify(),
|
32
|
+
presetIcons({
|
33
|
+
scale: 1.2,
|
34
|
+
warn: true,
|
35
|
+
}),
|
36
|
+
presetTypography(),
|
37
|
+
presetWebFonts({
|
38
|
+
fonts: {
|
39
|
+
sans: 'DM Sans',
|
40
|
+
serif: 'DM Serif Display',
|
41
|
+
mono: 'DM Mono',
|
42
|
+
},
|
43
|
+
}),
|
44
|
+
],
|
45
|
+
transformers: [transformerDirectives(), transformerVariantGroup()],
|
46
|
+
safelist: 'prose prose-sm m-auto text-left'.split(' '),
|
47
|
+
});
|
@@ -0,0 +1,32 @@
|
|
1
|
+
/*
|
2
|
+
* @Author: zhangyang
|
3
|
+
* @Date: 2022-12-03 15:57:40
|
4
|
+
* @LastEditTime: 2023-01-13 10:07:24
|
5
|
+
* @Description:
|
6
|
+
*/
|
7
|
+
import { fileURLToPath, URL } from 'node:url';
|
8
|
+
import { defineConfig, loadEnv } from 'vite';
|
9
|
+
import type { ConfigEnv, UserConfigExport } from 'vite';
|
10
|
+
import { usePlugins, localServer } from './build';
|
11
|
+
|
12
|
+
// https://vitejs.dev/config/
|
13
|
+
export default ({ command, mode }: ConfigEnv): UserConfigExport => {
|
14
|
+
const root = process.cwd();
|
15
|
+
const viteEnv = loadEnv(mode, root);
|
16
|
+
console.log('🚀 ~ file: vite.config.ts ~ line 36 ~ viteEnv', viteEnv);
|
17
|
+
return defineConfig({
|
18
|
+
base: './',
|
19
|
+
plugins: usePlugins(),
|
20
|
+
resolve: {
|
21
|
+
alias: {
|
22
|
+
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
23
|
+
},
|
24
|
+
},
|
25
|
+
server: {
|
26
|
+
host: true,
|
27
|
+
proxy: {
|
28
|
+
'/api': localServer,
|
29
|
+
},
|
30
|
+
},
|
31
|
+
});
|
32
|
+
};
|