create-young-proj 1.5.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/package.json +1 -1
- package/template-nuxt-admin/README.md +1 -1
- package/template-nuxt-admin/nuxt.config.ts +4 -5
- package/template-nuxt-admin/package.json +0 -1
- package/template-nuxt-admin/server/plugins/env.ts +8 -0
- package/template-nuxt-admin/yarn.lock +0 -5
- package/template-nuxt-mobile/.nvmrc +1 -0
- package/{template-vue-mobile → template-nuxt-mobile}/.vscode/extensions.json +5 -3
- package/template-nuxt-mobile/.vscode/settings.json +39 -0
- package/{template-vue-mobile → template-nuxt-mobile}/Dockerfile +12 -13
- package/template-nuxt-mobile/README.md +90 -0
- package/template-nuxt-mobile/_gitignore +26 -0
- package/template-nuxt-mobile/_npmrc +2 -0
- package/template-nuxt-mobile/_nvmrc +1 -0
- package/template-nuxt-mobile/app.vue +79 -0
- package/template-nuxt-mobile/boot.mjs +17 -0
- package/template-nuxt-mobile/components/young/CodeInput.vue +72 -0
- package/template-nuxt-mobile/composables/api.ts +57 -0
- package/template-nuxt-mobile/composables/apis/get.ts +22 -0
- package/template-nuxt-mobile/composables/apis/index.ts +8 -0
- package/template-nuxt-mobile/composables/apis/post.ts +39 -0
- package/template-nuxt-mobile/composables/share.ts +22 -0
- package/template-nuxt-mobile/composables/user.ts +48 -0
- package/template-nuxt-mobile/composables/utils.ts +80 -0
- package/template-nuxt-mobile/config/.devrc +2 -0
- package/template-nuxt-mobile/env.d.ts +65 -0
- package/template-nuxt-mobile/error.vue +69 -0
- package/template-nuxt-mobile/eslint.config.js +33 -0
- package/template-nuxt-mobile/layouts/blank.vue +11 -0
- package/template-nuxt-mobile/layouts/default.vue +32 -0
- package/template-nuxt-mobile/layouts/tabbar.vue +29 -0
- package/template-nuxt-mobile/middleware/auth.global.ts +34 -0
- package/template-nuxt-mobile/nuxt.config.ts +78 -0
- package/template-nuxt-mobile/package.json +40 -0
- package/template-nuxt-mobile/pages/base/login.vue +124 -0
- package/template-nuxt-mobile/pages/base/resetPasswd.vue +84 -0
- package/template-nuxt-mobile/pages/index.vue +22 -0
- package/template-nuxt-mobile/pages/my.vue +18 -0
- package/template-nuxt-mobile/pages/sub/[id].vue +21 -0
- package/template-nuxt-mobile/public/favicon.ico +0 -0
- package/template-nuxt-mobile/public/robots.txt +2 -0
- package/template-nuxt-mobile/server/plugins/init.ts +94 -0
- package/template-nuxt-mobile/server/routes/get/env.ts +13 -0
- package/template-nuxt-mobile/server/tsconfig.json +3 -0
- package/template-nuxt-mobile/server/utils/index.ts +12 -0
- package/template-nuxt-mobile/server/utils/proxy.ts +59 -0
- package/template-nuxt-mobile/tsconfig.json +4 -0
- package/template-nuxt-mobile/typings/system.d.ts +22 -0
- package/template-nuxt-mobile/uno.config.ts +40 -0
- package/template-nuxt-mobile/utils/tool.ts +153 -0
- package/template-nuxt-mobile/yarn.lock +7737 -0
- package/template-nuxt-website/README.md +3 -1
- package/template-nuxt-website/nuxt.config.ts +4 -5
- package/template-vitepress/.vitepress/components/HomePage.vue +9 -7
- package/template-vitepress/.vitepress/components/TodoItem.vue +7 -3
- package/template-vitepress/.vscode/settings.json +39 -0
- package/template-vitepress/README.md +2 -0
- package/template-vitepress/boot.mjs +7 -8
- package/template-vitepress/eslint.config.js +46 -0
- package/template-vitepress/nitro.config.ts +1 -2
- package/template-vitepress/package.json +19 -6
- package/template-vitepress/tsconfig.json +1 -1
- package/template-vitepress/yarn.lock +5459 -0
- package/template-vue-mobile/.vscode/base.code-snippets +0 -24
- package/template-vue-mobile/.vscode/settings.json +0 -7
- package/template-vue-mobile/README.md +0 -71
- package/template-vue-mobile/_env +0 -6
- package/template-vue-mobile/_gitignore +0 -30
- package/template-vue-mobile/boot.mjs +0 -16
- package/template-vue-mobile/build/custom-plugin.ts +0 -30
- package/template-vue-mobile/build/index.ts +0 -7
- package/template-vue-mobile/build/plugins.ts +0 -68
- package/template-vue-mobile/config/.devrc +0 -2
- package/template-vue-mobile/index.html +0 -25
- package/template-vue-mobile/nitro.config.ts +0 -19
- package/template-vue-mobile/package.json +0 -48
- package/template-vue-mobile/plugins/env.ts +0 -26
- package/template-vue-mobile/public/vite.svg +0 -1
- package/template-vue-mobile/rome.json +0 -24
- package/template-vue-mobile/routes/[...all].ts +0 -11
- package/template-vue-mobile/routes/get/env.ts +0 -25
- package/template-vue-mobile/src/App.vue +0 -29
- package/template-vue-mobile/src/auto-components.d.ts +0 -24
- package/template-vue-mobile/src/auto-imports.d.ts +0 -289
- package/template-vue-mobile/src/components/Init.vue +0 -36
- package/template-vue-mobile/src/global.d.ts +0 -7
- package/template-vue-mobile/src/hooks/useVerifyCode.ts +0 -46
- package/template-vue-mobile/src/layouts/blank.vue +0 -9
- package/template-vue-mobile/src/layouts/default.vue +0 -27
- package/template-vue-mobile/src/layouts/sub.vue +0 -20
- package/template-vue-mobile/src/main.ts +0 -35
- package/template-vue-mobile/src/modules/1-router.ts +0 -40
- package/template-vue-mobile/src/modules/2-pinia.ts +0 -10
- package/template-vue-mobile/src/modules/3-net.ts +0 -46
- package/template-vue-mobile/src/modules/4-auth.ts +0 -64
- package/template-vue-mobile/src/views/[...all_404].vue +0 -557
- package/template-vue-mobile/src/views/base/login.vue +0 -110
- package/template-vue-mobile/src/views/base/resetPasswd.vue +0 -88
- package/template-vue-mobile/src/views/index.vue +0 -18
- package/template-vue-mobile/src/views/my.vue +0 -15
- package/template-vue-mobile/src/views/sub.vue +0 -18
- package/template-vue-mobile/src/vite-env.d.ts +0 -43
- package/template-vue-mobile/tsconfig.json +0 -21
- package/template-vue-mobile/tsconfig.node.json +0 -9
- package/template-vue-mobile/unocss.config.ts +0 -47
- package/template-vue-mobile/vite.config.ts +0 -32
- package/template-vue-mobile/yarn.lock +0 -4395
- /package/{template-vue-mobile → template-nuxt-mobile}/config/.onlinerc +0 -0
- /package/{template-vue-mobile → template-nuxt-mobile}/config/.testrc +0 -0
@@ -1,557 +0,0 @@
|
|
1
|
-
<!--
|
2
|
-
* @Author: zhangyang
|
3
|
-
* @Date: 2020-12-03 15:02:28
|
4
|
-
* @LastEditTime: 2023-01-13 15:35:44
|
5
|
-
* @Description: 404
|
6
|
-
-->
|
7
|
-
<route lang="yaml">
|
8
|
-
meta:
|
9
|
-
auth: false
|
10
|
-
title: 页面不存在
|
11
|
-
layout: 'blank'
|
12
|
-
</route>
|
13
|
-
<template>
|
14
|
-
<div>
|
15
|
-
<div class="g-container">
|
16
|
-
<div class="rail">
|
17
|
-
<div class="stamp four">4</div>
|
18
|
-
<div class="stamp zero">0</div>
|
19
|
-
<div class="stamp four">4</div>
|
20
|
-
<div class="stamp zero">0</div>
|
21
|
-
<div class="stamp four">4</div>
|
22
|
-
<div class="stamp zero">0</div>
|
23
|
-
<div class="stamp four">4</div>
|
24
|
-
<div class="stamp zero">0</div>
|
25
|
-
<div class="stamp four">4</div>
|
26
|
-
<div class="stamp zero">0</div>
|
27
|
-
<div class="stamp four">4</div>
|
28
|
-
<div class="stamp zero">0</div>
|
29
|
-
<div class="stamp four">4</div>
|
30
|
-
<div class="stamp zero">0</div>
|
31
|
-
<div class="stamp four">4</div>
|
32
|
-
<div class="stamp zero">0</div>
|
33
|
-
<div class="stamp four">4</div>
|
34
|
-
<div class="stamp zero">0</div>
|
35
|
-
<div class="stamp four">4</div>
|
36
|
-
<div class="stamp zero">0</div>
|
37
|
-
</div>
|
38
|
-
<div class="world">
|
39
|
-
<div class="forward">
|
40
|
-
<div class="box">
|
41
|
-
<div class="wall"></div>
|
42
|
-
<div class="wall"></div>
|
43
|
-
<div class="wall"></div>
|
44
|
-
<div class="wall"></div>
|
45
|
-
<div class="wall"></div>
|
46
|
-
<div class="wall"></div>
|
47
|
-
</div>
|
48
|
-
</div>
|
49
|
-
</div>
|
50
|
-
</div>
|
51
|
-
<div class="bullshit">
|
52
|
-
<div class="bullshit__oops">似乎出了什么问题!</div>
|
53
|
-
<div class="bullshit__headline">{{ tips }}</div>
|
54
|
-
<div class="bullshit__info">请仔细检查链接是否正确,点击按钮可返回上页</div>
|
55
|
-
<a class="bullshit__return-home" @click.prevent="goBack">返回上个页面</a>
|
56
|
-
</div>
|
57
|
-
</div>
|
58
|
-
</template>
|
59
|
-
|
60
|
-
<script lang="ts" setup>
|
61
|
-
withDefaults(defineProps<{ tips?: string; }>(), {
|
62
|
-
tips: '页面不存在......'
|
63
|
-
});
|
64
|
-
const router = useRouter();
|
65
|
-
const goBack = () => router.back();
|
66
|
-
|
67
|
-
</script>
|
68
|
-
<style lang="less" scoped>
|
69
|
-
body {
|
70
|
-
background: #fff;
|
71
|
-
height: 100vh;
|
72
|
-
overflow: hidden;
|
73
|
-
display: flex;
|
74
|
-
flex-wrap: wrap;
|
75
|
-
font-family: "Anton", sans-serif;
|
76
|
-
align-items: flex-start;
|
77
|
-
perspective: 1000px;
|
78
|
-
}
|
79
|
-
|
80
|
-
body>a {
|
81
|
-
opacity: 0;
|
82
|
-
position: fixed;
|
83
|
-
bottom: -100px;
|
84
|
-
left: -100px;
|
85
|
-
}
|
86
|
-
|
87
|
-
div {
|
88
|
-
transform-style: preserve-3d;
|
89
|
-
}
|
90
|
-
|
91
|
-
.g-container {
|
92
|
-
display: flex;
|
93
|
-
width: 100vw;
|
94
|
-
height: 30vh;
|
95
|
-
justify-content: center;
|
96
|
-
align-items: center;
|
97
|
-
/* perspective: 1000px; */
|
98
|
-
}
|
99
|
-
|
100
|
-
.rail {
|
101
|
-
position: absolute;
|
102
|
-
width: 100%;
|
103
|
-
height: 100%;
|
104
|
-
display: flex;
|
105
|
-
justify-content: center;
|
106
|
-
align-items: center;
|
107
|
-
transform: rotateX(-30deg) rotateY(-30deg);
|
108
|
-
}
|
109
|
-
|
110
|
-
.rail .stamp {
|
111
|
-
position: absolute;
|
112
|
-
width: 200px;
|
113
|
-
height: 200px;
|
114
|
-
display: flex;
|
115
|
-
justify-content: center;
|
116
|
-
align-items: center;
|
117
|
-
background: #333;
|
118
|
-
color: #fff;
|
119
|
-
font-size: 7rem;
|
120
|
-
}
|
121
|
-
|
122
|
-
.rail .stamp:nth-child(1) {
|
123
|
-
-webkit-animation: stampSlide 40000ms -2300ms linear infinite;
|
124
|
-
animation: stampSlide 40000ms -2300ms linear infinite;
|
125
|
-
}
|
126
|
-
|
127
|
-
.rail .stamp:nth-child(2) {
|
128
|
-
-webkit-animation: stampSlide 40000ms -4300ms linear infinite;
|
129
|
-
animation: stampSlide 40000ms -4300ms linear infinite;
|
130
|
-
}
|
131
|
-
|
132
|
-
.rail .stamp:nth-child(3) {
|
133
|
-
-webkit-animation: stampSlide 40000ms -6300ms linear infinite;
|
134
|
-
animation: stampSlide 40000ms -6300ms linear infinite;
|
135
|
-
}
|
136
|
-
|
137
|
-
.rail .stamp:nth-child(4) {
|
138
|
-
-webkit-animation: stampSlide 40000ms -8300ms linear infinite;
|
139
|
-
animation: stampSlide 40000ms -8300ms linear infinite;
|
140
|
-
}
|
141
|
-
|
142
|
-
.rail .stamp:nth-child(5) {
|
143
|
-
-webkit-animation: stampSlide 40000ms -10300ms linear infinite;
|
144
|
-
animation: stampSlide 40000ms -10300ms linear infinite;
|
145
|
-
}
|
146
|
-
|
147
|
-
.rail .stamp:nth-child(6) {
|
148
|
-
-webkit-animation: stampSlide 40000ms -12300ms linear infinite;
|
149
|
-
animation: stampSlide 40000ms -12300ms linear infinite;
|
150
|
-
}
|
151
|
-
|
152
|
-
.rail .stamp:nth-child(7) {
|
153
|
-
-webkit-animation: stampSlide 40000ms -14300ms linear infinite;
|
154
|
-
animation: stampSlide 40000ms -14300ms linear infinite;
|
155
|
-
}
|
156
|
-
|
157
|
-
.rail .stamp:nth-child(8) {
|
158
|
-
-webkit-animation: stampSlide 40000ms -16300ms linear infinite;
|
159
|
-
animation: stampSlide 40000ms -16300ms linear infinite;
|
160
|
-
}
|
161
|
-
|
162
|
-
.rail .stamp:nth-child(9) {
|
163
|
-
-webkit-animation: stampSlide 40000ms -18300ms linear infinite;
|
164
|
-
animation: stampSlide 40000ms -18300ms linear infinite;
|
165
|
-
}
|
166
|
-
|
167
|
-
.rail .stamp:nth-child(10) {
|
168
|
-
-webkit-animation: stampSlide 40000ms -20300ms linear infinite;
|
169
|
-
animation: stampSlide 40000ms -20300ms linear infinite;
|
170
|
-
}
|
171
|
-
|
172
|
-
.rail .stamp:nth-child(11) {
|
173
|
-
-webkit-animation: stampSlide 40000ms -22300ms linear infinite;
|
174
|
-
animation: stampSlide 40000ms -22300ms linear infinite;
|
175
|
-
}
|
176
|
-
|
177
|
-
.rail .stamp:nth-child(12) {
|
178
|
-
-webkit-animation: stampSlide 40000ms -24300ms linear infinite;
|
179
|
-
animation: stampSlide 40000ms -24300ms linear infinite;
|
180
|
-
}
|
181
|
-
|
182
|
-
.rail .stamp:nth-child(13) {
|
183
|
-
-webkit-animation: stampSlide 40000ms -26300ms linear infinite;
|
184
|
-
animation: stampSlide 40000ms -26300ms linear infinite;
|
185
|
-
}
|
186
|
-
|
187
|
-
.rail .stamp:nth-child(14) {
|
188
|
-
-webkit-animation: stampSlide 40000ms -28300ms linear infinite;
|
189
|
-
animation: stampSlide 40000ms -28300ms linear infinite;
|
190
|
-
}
|
191
|
-
|
192
|
-
.rail .stamp:nth-child(15) {
|
193
|
-
-webkit-animation: stampSlide 40000ms -30300ms linear infinite;
|
194
|
-
animation: stampSlide 40000ms -30300ms linear infinite;
|
195
|
-
}
|
196
|
-
|
197
|
-
.rail .stamp:nth-child(16) {
|
198
|
-
-webkit-animation: stampSlide 40000ms -32300ms linear infinite;
|
199
|
-
animation: stampSlide 40000ms -32300ms linear infinite;
|
200
|
-
}
|
201
|
-
|
202
|
-
.rail .stamp:nth-child(17) {
|
203
|
-
-webkit-animation: stampSlide 40000ms -34300ms linear infinite;
|
204
|
-
animation: stampSlide 40000ms -34300ms linear infinite;
|
205
|
-
}
|
206
|
-
|
207
|
-
.rail .stamp:nth-child(18) {
|
208
|
-
-webkit-animation: stampSlide 40000ms -36300ms linear infinite;
|
209
|
-
animation: stampSlide 40000ms -36300ms linear infinite;
|
210
|
-
}
|
211
|
-
|
212
|
-
.rail .stamp:nth-child(19) {
|
213
|
-
-webkit-animation: stampSlide 40000ms -38300ms linear infinite;
|
214
|
-
animation: stampSlide 40000ms -38300ms linear infinite;
|
215
|
-
}
|
216
|
-
|
217
|
-
.rail .stamp:nth-child(20) {
|
218
|
-
-webkit-animation: stampSlide 40000ms -40300ms linear infinite;
|
219
|
-
animation: stampSlide 40000ms -40300ms linear infinite;
|
220
|
-
}
|
221
|
-
|
222
|
-
@-webkit-keyframes stampSlide {
|
223
|
-
0% {
|
224
|
-
transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(130px);
|
225
|
-
}
|
226
|
-
|
227
|
-
100% {
|
228
|
-
transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(-3870px);
|
229
|
-
}
|
230
|
-
}
|
231
|
-
|
232
|
-
@keyframes stampSlide {
|
233
|
-
0% {
|
234
|
-
transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(130px);
|
235
|
-
}
|
236
|
-
|
237
|
-
100% {
|
238
|
-
transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(-3870px);
|
239
|
-
}
|
240
|
-
}
|
241
|
-
|
242
|
-
.world {
|
243
|
-
transform: rotateX(-30deg) rotateY(-30deg);
|
244
|
-
}
|
245
|
-
|
246
|
-
.world .forward {
|
247
|
-
position: absolute;
|
248
|
-
-webkit-animation: slide 2000ms linear infinite;
|
249
|
-
animation: slide 2000ms linear infinite;
|
250
|
-
}
|
251
|
-
|
252
|
-
.world .box {
|
253
|
-
width: 200px;
|
254
|
-
height: 200px;
|
255
|
-
transform-origin: 100% 100%;
|
256
|
-
-webkit-animation: roll 2000ms cubic-bezier(1, 0.01, 1, 1) infinite;
|
257
|
-
animation: roll 2000ms cubic-bezier(1, 0.01, 1, 1) infinite;
|
258
|
-
}
|
259
|
-
|
260
|
-
.world .box .wall {
|
261
|
-
position: absolute;
|
262
|
-
width: 200px;
|
263
|
-
height: 200px;
|
264
|
-
background: rgba(0, 0, 0, 0.5);
|
265
|
-
border: 1px solid #fafafa;
|
266
|
-
box-sizing: border-box;
|
267
|
-
}
|
268
|
-
|
269
|
-
.world .box .wall::before {
|
270
|
-
content: "";
|
271
|
-
position: absolute;
|
272
|
-
width: 100%;
|
273
|
-
height: 100%;
|
274
|
-
display: flex;
|
275
|
-
justify-content: center;
|
276
|
-
align-items: center;
|
277
|
-
color: #fff;
|
278
|
-
font-size: 7rem;
|
279
|
-
}
|
280
|
-
|
281
|
-
.world .box .wall:nth-child(1) {
|
282
|
-
transform: translateZ(100px);
|
283
|
-
}
|
284
|
-
|
285
|
-
.world .box .wall:nth-child(2) {
|
286
|
-
transform: rotateX(180deg) translateZ(100px);
|
287
|
-
}
|
288
|
-
|
289
|
-
.world .box .wall:nth-child(3) {
|
290
|
-
transform: rotateX(90deg) translateZ(100px);
|
291
|
-
}
|
292
|
-
|
293
|
-
.world .box .wall:nth-child(3)::before {
|
294
|
-
transform: rotateX(180deg) rotateZ(90deg) translateZ(-1px);
|
295
|
-
-webkit-animation: zeroFour 4000ms -2000ms linear infinite;
|
296
|
-
animation: zeroFour 4000ms -2000ms linear infinite;
|
297
|
-
}
|
298
|
-
|
299
|
-
.world .box .wall:nth-child(4) {
|
300
|
-
transform: rotateX(-90deg) translateZ(100px);
|
301
|
-
}
|
302
|
-
|
303
|
-
.world .box .wall:nth-child(4)::before {
|
304
|
-
transform: rotateX(180deg) rotateZ(-90deg) translateZ(-1px);
|
305
|
-
-webkit-animation: zeroFour 4000ms -2000ms linear infinite;
|
306
|
-
animation: zeroFour 4000ms -2000ms linear infinite;
|
307
|
-
}
|
308
|
-
|
309
|
-
.world .box .wall:nth-child(5) {
|
310
|
-
transform: rotateY(90deg) translateZ(100px);
|
311
|
-
}
|
312
|
-
|
313
|
-
.world .box .wall:nth-child(5)::before {
|
314
|
-
transform: rotateX(180deg) translateZ(-1px);
|
315
|
-
-webkit-animation: zeroFour 4000ms linear infinite;
|
316
|
-
animation: zeroFour 4000ms linear infinite;
|
317
|
-
}
|
318
|
-
|
319
|
-
.world .box .wall:nth-child(6) {
|
320
|
-
transform: rotateY(-90deg) translateZ(100px);
|
321
|
-
}
|
322
|
-
|
323
|
-
.world .box .wall:nth-child(6)::before {
|
324
|
-
transform: rotateX(180deg) rotateZ(180deg) translateZ(-1px);
|
325
|
-
-webkit-animation: zeroFour 4000ms linear infinite;
|
326
|
-
animation: zeroFour 4000ms linear infinite;
|
327
|
-
}
|
328
|
-
|
329
|
-
@-webkit-keyframes zeroFour {
|
330
|
-
0% {
|
331
|
-
content: "4";
|
332
|
-
}
|
333
|
-
|
334
|
-
100% {
|
335
|
-
content: "0";
|
336
|
-
}
|
337
|
-
}
|
338
|
-
|
339
|
-
@keyframes zeroFour {
|
340
|
-
0% {
|
341
|
-
content: "4";
|
342
|
-
}
|
343
|
-
|
344
|
-
100% {
|
345
|
-
content: "0";
|
346
|
-
}
|
347
|
-
}
|
348
|
-
|
349
|
-
@-webkit-keyframes roll {
|
350
|
-
0% {
|
351
|
-
transform: rotateZ(0deg);
|
352
|
-
}
|
353
|
-
|
354
|
-
85% {
|
355
|
-
transform: rotateZ(90deg);
|
356
|
-
}
|
357
|
-
|
358
|
-
87% {
|
359
|
-
transform: rotateZ(88deg);
|
360
|
-
}
|
361
|
-
|
362
|
-
90% {
|
363
|
-
transform: rotateZ(90deg);
|
364
|
-
}
|
365
|
-
|
366
|
-
100% {
|
367
|
-
transform: rotateZ(90deg);
|
368
|
-
}
|
369
|
-
}
|
370
|
-
|
371
|
-
@keyframes roll {
|
372
|
-
0% {
|
373
|
-
transform: rotateZ(0deg);
|
374
|
-
}
|
375
|
-
|
376
|
-
85% {
|
377
|
-
transform: rotateZ(90deg);
|
378
|
-
}
|
379
|
-
|
380
|
-
87% {
|
381
|
-
transform: rotateZ(88deg);
|
382
|
-
}
|
383
|
-
|
384
|
-
90% {
|
385
|
-
transform: rotateZ(90deg);
|
386
|
-
}
|
387
|
-
|
388
|
-
100% {
|
389
|
-
transform: rotateZ(90deg);
|
390
|
-
}
|
391
|
-
}
|
392
|
-
|
393
|
-
@-webkit-keyframes slide {
|
394
|
-
0% {
|
395
|
-
transform: translateX(0);
|
396
|
-
}
|
397
|
-
|
398
|
-
100% {
|
399
|
-
transform: translateX(-200px);
|
400
|
-
}
|
401
|
-
}
|
402
|
-
|
403
|
-
@keyframes slide {
|
404
|
-
0% {
|
405
|
-
transform: translateX(0);
|
406
|
-
}
|
407
|
-
|
408
|
-
100% {
|
409
|
-
transform: translateX(-200px);
|
410
|
-
}
|
411
|
-
}
|
412
|
-
|
413
|
-
footer {
|
414
|
-
position: fixed;
|
415
|
-
left: 0;
|
416
|
-
right: 0;
|
417
|
-
bottom: 0;
|
418
|
-
height: 32px;
|
419
|
-
color: #666;
|
420
|
-
font-size: 12px;
|
421
|
-
text-align: center;
|
422
|
-
}
|
423
|
-
|
424
|
-
.g-goto {
|
425
|
-
width: 100vw;
|
426
|
-
padding: 12px 0;
|
427
|
-
}
|
428
|
-
|
429
|
-
.g-goto p {
|
430
|
-
font-size: 14px;
|
431
|
-
text-align: center;
|
432
|
-
color: #999;
|
433
|
-
padding: 0 12px;
|
434
|
-
margin-bottom: 24px;
|
435
|
-
}
|
436
|
-
|
437
|
-
.g-btn-box {
|
438
|
-
/* width: 600px; */
|
439
|
-
display: flex;
|
440
|
-
flex-wrap: wrap;
|
441
|
-
margin: 0 auto;
|
442
|
-
justify-content: center;
|
443
|
-
}
|
444
|
-
|
445
|
-
.svg-border-animation {
|
446
|
-
position: relative;
|
447
|
-
width: 80px;
|
448
|
-
height: 32px;
|
449
|
-
margin: 12px;
|
450
|
-
}
|
451
|
-
|
452
|
-
.hover-text {
|
453
|
-
position: absolute;
|
454
|
-
line-height: 32px;
|
455
|
-
width: 80px;
|
456
|
-
top: 0;
|
457
|
-
color: #333;
|
458
|
-
font-size: 14px;
|
459
|
-
text-align: center;
|
460
|
-
cursor: pointer;
|
461
|
-
transition: all .4s;
|
462
|
-
}
|
463
|
-
|
464
|
-
.hover-text:active {
|
465
|
-
background: #3F51B50b;
|
466
|
-
}
|
467
|
-
|
468
|
-
.shape {
|
469
|
-
fill: transparent;
|
470
|
-
stroke-width: 2px;
|
471
|
-
stroke: #333;
|
472
|
-
stroke-dasharray: 30 150;
|
473
|
-
stroke-dashoffset: 42;
|
474
|
-
}
|
475
|
-
|
476
|
-
.svg-border-animation:hover .hover-text {
|
477
|
-
transition: 0.4s;
|
478
|
-
color: #3F51B5;
|
479
|
-
}
|
480
|
-
|
481
|
-
.svg-border-animation:hover .shape {
|
482
|
-
animation: draw 0.4s linear forwards;
|
483
|
-
}
|
484
|
-
|
485
|
-
@keyframes draw {
|
486
|
-
0% {
|
487
|
-
stroke-dasharray: 30 150;
|
488
|
-
stroke-dashoffset: 42;
|
489
|
-
stroke-width: 2px;
|
490
|
-
}
|
491
|
-
|
492
|
-
100% {
|
493
|
-
stroke-dasharray: 224;
|
494
|
-
stroke-dashoffset: 0;
|
495
|
-
stroke-width: 2px;
|
496
|
-
stroke: #3F51B5;
|
497
|
-
}
|
498
|
-
}
|
499
|
-
|
500
|
-
.bullshit {
|
501
|
-
@apply relative float-left ml-10 top-50 w-300px overflow-hidden;
|
502
|
-
|
503
|
-
@media (min-width: 768px) {
|
504
|
-
@apply float-right -top-32 mr-52;
|
505
|
-
}
|
506
|
-
|
507
|
-
&__oops {
|
508
|
-
@apply text-3xl font-bold opacity-0 mb-4;
|
509
|
-
color: #1482f0;
|
510
|
-
animation-name: slideUp;
|
511
|
-
animation-duration: 0.5s;
|
512
|
-
animation-fill-mode: forwards;
|
513
|
-
}
|
514
|
-
|
515
|
-
&__headline {
|
516
|
-
@apply text-xl font-bold opacity-0 mb-2;
|
517
|
-
color: #222;
|
518
|
-
animation-name: slideUp;
|
519
|
-
animation-duration: 0.5s;
|
520
|
-
animation-delay: 0.1s;
|
521
|
-
animation-fill-mode: forwards;
|
522
|
-
}
|
523
|
-
|
524
|
-
&__info {
|
525
|
-
@apply text-sm opacity-0 mb-6;
|
526
|
-
color: grey;
|
527
|
-
animation-name: slideUp;
|
528
|
-
animation-duration: 0.5s;
|
529
|
-
animation-delay: 0.2s;
|
530
|
-
animation-fill-mode: forwards;
|
531
|
-
}
|
532
|
-
|
533
|
-
&__return-home {
|
534
|
-
@apply block float-left w-28 h-10 rounded-3xl text-center font-bold opacity-0 cursor-pointer;
|
535
|
-
background: #1482f0;
|
536
|
-
color: #ffffff;
|
537
|
-
font-size: 14px;
|
538
|
-
line-height: 36px;
|
539
|
-
animation-name: slideUp;
|
540
|
-
animation-duration: 0.5s;
|
541
|
-
animation-delay: 0.3s;
|
542
|
-
animation-fill-mode: forwards;
|
543
|
-
}
|
544
|
-
|
545
|
-
@keyframes slideUp {
|
546
|
-
0% {
|
547
|
-
transform: translateY(60px);
|
548
|
-
opacity: 0;
|
549
|
-
}
|
550
|
-
|
551
|
-
100% {
|
552
|
-
transform: translateY(0);
|
553
|
-
opacity: 1;
|
554
|
-
}
|
555
|
-
}
|
556
|
-
}
|
557
|
-
</style>
|
@@ -1,110 +0,0 @@
|
|
1
|
-
<!--
|
2
|
-
* @Author: zhangyang
|
3
|
-
* @Date: 2023-01-13 16:18:47
|
4
|
-
* @LastEditTime: 2023-01-13 16:51:15
|
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
|
-
const formRef = ref<FormInstance>();
|
18
|
-
const router = useRouter();
|
19
|
-
const route = useRoute();
|
20
|
-
const isPass = ref(true);
|
21
|
-
const form = ref({ tel: '', passwd: '' });
|
22
|
-
const { countDown, isClicked, sendClick } = useVerifyCode();
|
23
|
-
const isReaded = ref(true);
|
24
|
-
const showPopup = ref(false);
|
25
|
-
const popupContent = ref(`<h1>我是用户协议</h1>`);
|
26
|
-
const read = (type: 0 | 1) => {
|
27
|
-
if (type === 0) {
|
28
|
-
popupContent.value = `<h1>我是用户协议</h1>`;
|
29
|
-
} else {
|
30
|
-
popupContent.value = `<h1>我是隐私政策</h1>`;
|
31
|
-
}
|
32
|
-
showPopup.value = true;
|
33
|
-
};
|
34
|
-
const [showPass, toggle] = useToggle(false);
|
35
|
-
|
36
|
-
watch(() => isPass.value, () => form.value.passwd = '');
|
37
|
-
|
38
|
-
const loginHandler = async () => {
|
39
|
-
try {
|
40
|
-
await formRef.value?.validate();
|
41
|
-
if (!isReaded.value) {
|
42
|
-
showToast('请先同意服务协议!');
|
43
|
-
return;
|
44
|
-
}
|
45
|
-
// todo: 登录
|
46
|
-
// const data = await login(form.value);
|
47
|
-
const data = true;
|
48
|
-
if (data) {
|
49
|
-
// todo: change login state
|
50
|
-
// setToken(data as unknown as UserKey);
|
51
|
-
// await generateUserInfo();
|
52
|
-
if (route.query.redirect) {
|
53
|
-
router.push({ path: route.query.redirect as string });
|
54
|
-
} else {
|
55
|
-
router.push('/');
|
56
|
-
}
|
57
|
-
}
|
58
|
-
} catch (error) {
|
59
|
-
return;
|
60
|
-
}
|
61
|
-
}
|
62
|
-
</script>
|
63
|
-
|
64
|
-
<template>
|
65
|
-
<VanNavBar title="登录" safe-area-inset-bottom />
|
66
|
-
<div v-bind="$attrs" class="w-full h-full mt-10">
|
67
|
-
<VanForm ref="formRef">
|
68
|
-
<VanCellGroup inset>
|
69
|
-
<VanField v-model.trim="form.tel" placeholder="手机号" :rules="[
|
70
|
-
{ required: true, message: '请填写手机号' },
|
71
|
-
{ validator: isMobile, message: '请输入合法的手机号' }
|
72
|
-
]" />
|
73
|
-
<VanField v-if="isPass" v-model.trim="form.passwd" placeholder="密码" :type="showPass ? 'password' : 'text'"
|
74
|
-
:rules="[{ required: true, message: '请填写密码' }]">
|
75
|
-
<template #right-icon>
|
76
|
-
<VanIcon :name="!showPass ? 'eye' : 'closed-eye'" @click="toggle(!showPass)" />
|
77
|
-
</template>
|
78
|
-
</VanField>
|
79
|
-
<VanField v-else v-model.trim="form.passwd" placeholder="验证码" :rules="[{ required: true, message: '请填写验证码' }]">
|
80
|
-
<template #button>
|
81
|
-
<VanButton v-if="!isClicked" :disabled="!isMobile(form.tel)" size="small" type="primary" plain
|
82
|
-
@click="sendClick">发送验证码</VanButton>
|
83
|
-
<VanButton v-else size="small" :disabled="true">
|
84
|
-
{{ countDown.current.value.seconds }}秒后重发
|
85
|
-
</VanButton>
|
86
|
-
</template>
|
87
|
-
</VanField>
|
88
|
-
</VanCellGroup>
|
89
|
-
<VanCheckbox v-model="isReaded" shape="square" icon-size="small" class="p-4">
|
90
|
-
我已阅读并同意
|
91
|
-
<a class=" text-purple-500" @click.prevent="read(0)">用户协议</a>
|
92
|
-
与
|
93
|
-
<a class=" text-purple-500" @click.prevent="read(1)">隐私政策</a>
|
94
|
-
</VanCheckbox>
|
95
|
-
<div class="m-4">
|
96
|
-
<VanButton block type="primary" @click="loginHandler">
|
97
|
-
登录
|
98
|
-
</VanButton>
|
99
|
-
</div>
|
100
|
-
<div class="flex justify-between p-4">
|
101
|
-
<a v-if="isPass" class="text-purple-500" @click.prevent="isPass = false">短信登录</a>
|
102
|
-
<a v-if="isPass" class="text-purple-500" @click.prevent="$router.push('/base/resetPasswd')">找回密码</a>
|
103
|
-
<a v-else class="text-purple-500" @click.prevent="isPass = true">密码登录</a>
|
104
|
-
</div>
|
105
|
-
</VanForm>
|
106
|
-
<VanPopup v-model:show="showPopup" position="center" :style="{ height: '80%', width: '90%', overflow: 'auto' }">
|
107
|
-
<div v-html="popupContent" />
|
108
|
-
</VanPopup>
|
109
|
-
</div>
|
110
|
-
</template>
|