Skip to content

Commit 6f4bf3b

Browse files
committed
优化页面缓存和动画
1 parent dc2e290 commit 6f4bf3b

File tree

6 files changed

+81
-60
lines changed

6 files changed

+81
-60
lines changed

src/App.vue

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010
></Header>
1111
</header>
1212
<main>
13-
<router-view></router-view>
13+
<transition appear :name="pageTransitionName">
14+
<keep-alive :exclude="['resume','resume-editor',]" :max="30">
15+
<router-view :key="$route.path"></router-view>
16+
</keep-alive>
17+
</transition>
1418
</main>
1519
<footer v-if="$route.name !== 'products'">
1620
<Footer></Footer>
@@ -23,8 +27,8 @@ export default {
2327
data() {
2428
return {
2529
homeScrollY: 0,
26-
27-
animationName: "",
30+
pageTransitionName: "",
31+
animationName: ""
2832
};
2933
},
3034
@@ -35,7 +39,7 @@ export default {
3539
: this.homeScrollY < Math.max(400, window.innerHeight)
3640
? "is-transparent"
3741
: "main-color";
38-
},
42+
}
3943
},
4044
created() {
4145
this.$root.$on("home-scrolling", (direction, pos) => {
@@ -55,13 +59,26 @@ export default {
5559
}
5660
});
5761
},
62+
watch: {
63+
$route(newRoute) {
64+
if (
65+
["jobs", "user", "resume", "jobDetail", "resume-editor"].includes(
66+
newRoute.name
67+
)
68+
) {
69+
this.pageTransitionName = "jumpPage";
70+
} else {
71+
this.pageTransitionName = "";
72+
}
73+
}
74+
},
5875
methods: {
5976
onAnimationStart(e) {
6077
if (e.animationName === "slideInDown") {
6178
e.target.style.top = 0;
6279
}
63-
},
64-
},
80+
}
81+
}
6582
};
6683
</script>
6784
<style lang="less">
@@ -88,6 +105,15 @@ export default {
88105
animation: slideOutUp 0.4s;
89106
}
90107
108+
.jumpPage-enter {
109+
transform: translate3d(0, 80px, 0);
110+
opacity: 0;
111+
}
112+
113+
.jumpPage-enter-active {
114+
transition: all 0.56s;
115+
}
116+
91117
footer {
92118
margin-top: 100px;
93119
}

src/components/Bytedance-Button.vue

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
<template>
2-
<div v-on="$listeners" class="bytedance-button" :class="`bytedance-button-${size}`">
2+
<div
3+
v-on="$listeners"
4+
class="bytedance-button"
5+
:class="[`bytedance-button-${size}`,{'bytedance-button-loading':loading}]"
6+
>
37
<span>
8+
<i class="el-icon-loading" v-if="loading"></i>
49
<slot>bytedance-button</slot>
510
</span>
611
</div>
@@ -9,6 +14,9 @@
914
export default {
1015
name: "bytedance-button",
1116
props: {
17+
loading: {
18+
type: Boolean
19+
},
1220
size: {
1321
type: String,
1422
default: "medium",
@@ -32,7 +40,14 @@ export default {
3240
border-radius: 23px;
3341
position: relative;
3442
cursor: pointer;
35-
&:hover :after {
43+
.el-icon-loading {
44+
margin-right: 5px;
45+
}
46+
&-loading {
47+
pointer-events: none;
48+
}
49+
&:hover :after,
50+
&-loading:after {
3651
content: "";
3752
position: absolute;
3853
background-color: rgba(255, 255, 255, 0.3);

src/router/index.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ const router = new VueRouter({
6969
// : process.env.BASE_URL ,
7070
routes,
7171
scrollBehavior(to, from, savedPosition) {
72-
return { x: 0, y: 0 };
72+
// return { x: 0, y: 0 };
7373
if (savedPosition) {
7474
return savedPosition;
7575
} else {
@@ -80,12 +80,7 @@ const router = new VueRouter({
8080

8181
export default router;
8282

83-
// router.beforeEach((to, from, next) => {
84-
// console.log('beforeeach')
85-
// document.scrollingElement.scrollTo(0, 0);
86-
// next()
87-
// });
88-
83+
8984

9085

9186
router.onError((err) => {

src/views/Products.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
</template>
3939
<script>
4040
export default {
41-
name: "Product",
41+
name: "product",
4242
data() {
4343
return {
4444
products: [],

src/views/ResumeEditor.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,7 @@ import {
714714
715715
let footerActionPosition = null;
716716
export default {
717+
name: "resume-editor",
717718
data() {
718719
return {
719720
submitLoading: false,

src/views/User.vue

Lines changed: 28 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -6,42 +6,27 @@
66
class="login-tabbar__item"
77
:class="{ 'login-tabbar__item--active': loginMode === 'phone' }"
88
@click="toggleLoginMode('phone')"
9-
>
10-
手机号登录
11-
</li>
9+
>手机号登录</li>
1210
<li
1311
class="login-tabbar__item"
1412
@click="toggleLoginMode('email')"
1513
:class="{ 'login-tabbar__item--active': loginMode === 'email' }"
16-
>
17-
邮箱登录
18-
</li>
14+
>邮箱登录</li>
1915
</ul>
2016

2117
<ul class="login-form-content">
2218
<li class="login-form-content__phone" v-if="loginMode === 'phone'">
2319
<el-form :model="phoneForm" key="phone">
2420
<el-form-item>
25-
<el-input
26-
v-model="phoneForm.phone"
27-
placeholder="输入手机号"
28-
class="input-with-select"
29-
>
30-
<el-select
31-
slot="prepend"
32-
v-model="selectedCountry"
33-
placeholder="请选择"
34-
>
35-
<el-option value="disabled" disabled
36-
>选择国家和地区</el-option
37-
>
21+
<el-input v-model="phoneForm.phone" placeholder="输入手机号" class="input-with-select">
22+
<el-select slot="prepend" v-model="selectedCountry" placeholder="请选择">
23+
<el-option value="disabled" disabled>选择国家和地区</el-option>
3824
<hr class="input-with-select__divider" />
3925
<el-option
4026
:value="`+${item.val}`"
4127
v-for="item in mobileCode"
4228
:key="item.id"
43-
>{{ item.country }} +{{ item.val }}</el-option
44-
>
29+
>{{ item.country }} +{{ item.val }}</el-option>
4530
</el-select>
4631
</el-input>
4732
</el-form-item>
@@ -53,18 +38,14 @@
5338
</el-form>
5439
</li>
5540
<li class="login-form-content__email" v-else>
56-
<el-form
57-
key="email"
58-
:rules="emailFormRules"
59-
:model="emailForm"
60-
ref="emailForm"
61-
>
41+
<el-form key="email" :rules="emailFormRules" :model="emailForm" ref="emailForm">
6242
<el-form-item ref="emailFormItem" prop="email">
6343
<el-input
6444
@blur="onEmailInputBlur"
6545
@focus="clearEmailValidation"
6646
v-model="emailForm.email"
6747
placeholder="请输入邮箱"
48+
autocomplete="on"
6849
></el-input>
6950
</el-form-item>
7051
<el-form-item prop="password" ref="passFormItem">
@@ -90,9 +71,7 @@
9071
</li>
9172
</ul>
9273
<div class="login__button">
93-
<bytedance-button @click="handlerLogin" type="primary" size="large"
94-
>登录</bytedance-button
95-
>
74+
<bytedance-button :loading="loading" @click="handlerLogin" type="primary" size="large">登录</bytedance-button>
9675
</div>
9776
</div>
9877
</div>
@@ -101,12 +80,12 @@
10180
import {
10281
fetchLoginByEmail,
10382
fetchCommonSettings,
104-
fetchEmailRegisterStatus,
83+
fetchEmailRegisterStatus
10584
} from "@/helper/requestWithToken.js";
10685
import store from "@/store/index.js";
10786
108-
10987
export default {
88+
name: "user",
11089
data() {
11190
const self = this;
11291
const validator = async (rule, val, cb, source, opt) => {
@@ -117,7 +96,7 @@ export default {
11796
if (triggerType === "submit") return;
11897
try {
11998
var result = await fetchEmailRegisterStatus({
120-
email: self.emailForm.email,
99+
email: self.emailForm.email
121100
});
122101
} catch (error) {
123102
throw error;
@@ -131,43 +110,44 @@ export default {
131110
{
132111
required: true,
133112
trigger: "blur",
134-
message: "邮箱不能为空",
113+
message: "邮箱不能为空"
135114
},
136115
{
137116
type: "email",
138117
trigger: "blur",
139-
message: "邮箱格式不正确",
118+
message: "邮箱格式不正确"
140119
},
141120
{
142121
validator,
143-
trigger: "blur",
144-
},
122+
trigger: "blur"
123+
}
145124
];
146125
return {
147126
emailFormRules: {
148127
email: mutipleEmailRules,
149128
password: {
150129
required: true,
151-
message: "密码不能为空",
152-
},
130+
message: "密码不能为空"
131+
}
153132
},
154133
loginMode: "email",
155134
mobileCode: [],
156135
phoneForm: {
157136
verifyCode: "",
158-
phone: "",
137+
phone: ""
159138
},
160139
emailForm: {
161140
email: "",
162-
password: "",
141+
password: ""
163142
},
164143
passwordInputType: "password",
165144
selectedCountry: "",
145+
loading: false
166146
};
167147
},
168148
169149
created() {
170-
fetchCommonSettings().then((response) => {
150+
fetchCommonSettings().then(response => {
171151
this.mobileCode = response.data.mobile_code;
172152
});
173153
},
@@ -195,11 +175,15 @@ export default {
195175
} catch (error) {
196176
return;
197177
}
178+
this.loading = true;
198179
try {
199180
await store.requestUserInfo();
200181
} catch (error) {
182+
this.loading = false;
183+
201184
return error;
202185
}
186+
this.loading = false;
203187
204188
this.$router.push("/");
205189
},
@@ -216,8 +200,8 @@ export default {
216200
togglePasswordInputType() {
217201
this.passwordInputType =
218202
this.passwordInputType === "password" ? "text" : "password";
219-
},
220-
},
203+
}
204+
}
221205
};
222206
</script>
223207
<style lang="less">

0 commit comments

Comments
 (0)