refactor: ♻️ 优化 401 和 404 页面

This commit is contained in:
Ray.Hao
2024-12-14 20:32:53 +08:00
parent d7ff3f2379
commit c25a8d50aa
7 changed files with 776 additions and 176 deletions

View File

@@ -1,35 +1,9 @@
<script setup lang="ts">
import { reactive, toRefs } from "vue";
import { useRouter } from "vue-router";
defineOptions({
name: "Page401",
});
const state = reactive({
errGif: new URL("../../assets/images/401.gif", import.meta.url).href,
ewizardClap: "https://wpimg.wallstcn.com/007ef517-bafd-4066-aae4-6883632d9646",
dialogVisible: false,
});
const { errGif, ewizardClap, dialogVisible } = toRefs(state);
const router = useRouter();
function back() {
router.back();
}
</script>
<template>
<div class="page-container">
<el-button icon="el-icon-arrow-left" class="pan-back-btn" @click="back">返回</el-button>
<el-button icon="arrow-left" @click="back">返回</el-button>
<el-row>
<el-col :span="12">
<h1 class="text-jumbo text-ginormous">Oops!</h1>
gif来源
<a href="https://zh.airbnb.com/" target="_blank">airbnb</a>
页面
<h2>你没有权限去该页面</h2>
<h6>如有不满请联系你领导</h6>
<ul class="list-unstyled">
@@ -38,23 +12,31 @@ function back() {
<router-link to="/dashboard">回首页</router-link>
</li>
<li class="link-type">
<a href="https://www.taobao.com/">随便看看</a>
</li>
<li>
<a href="#" @click.prevent="dialogVisible = true">点我看图</a>
<a href="https://www.youlai.tech/">随便看看</a>
</li>
</ul>
</el-col>
<el-col :span="12">
<img :src="errGif" width="313" height="428" alt="Girl has dropped her ice cream." />
<img src="@/assets/images/401.svg" width="400" height="500" />
</el-col>
</el-row>
<el-dialog v-model="dialogVisible" title="随便看">
<img :src="ewizardClap" class="pan-img" />
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { useRouter } from "vue-router";
defineOptions({
name: "Page401",
});
const router = useRouter();
function back() {
router.back();
}
</script>
<style lang="scss" scoped>
.page-container {
width: 100%;

View File

@@ -1,3 +1,23 @@
<template>
<div class="page-container">
<div class="pic-404">
<img class="pic-404__parent" src="@/assets/images/404.svg" alt="404" />
</div>
<div class="bullshit">
<div class="bullshit__oops">OOPS</div>
<div class="bullshit__info">
该页面无法访问
<a style="color: #20a0ff" href="https://www.youlai.tech.com" target="_blank">
有来开源官网
</a>
</div>
<div class="bullshit__headline">抱歉您访问的页面不存在</div>
<div class="bullshit__info">请确认您输入的网址是否正确或者点击下方按钮返回首页</div>
<a href="#" class="bullshit__return-home" @click.prevent="back">返回首页</a>
</div>
</div>
</template>
<script setup lang="ts">
import { useRouter } from "vue-router";
@@ -12,30 +32,6 @@ function back() {
}
</script>
<template>
<div class="page-container">
<div class="pic-404">
<img class="pic-404__parent" src="@/assets/images/404.png" alt="404" />
<img class="pic-404__child left" src="@/assets/images/404_cloud.png" alt="404" />
<img class="pic-404__child mid" src="@/assets/images/404_cloud.png" alt="404" />
<img class="pic-404__child right" src="@/assets/images/404_cloud.png" alt="404" />
</div>
<div class="bullshit">
<div class="bullshit__oops">OOPS!</div>
<div class="bullshit__info">
All rights reserved
<a style="color: #20a0ff" href="https://wallstreetcn.com" target="_blank">wallstreetcn</a>
</div>
<div class="bullshit__headline">The webmaster said that you can not enter this page...</div>
<div class="bullshit__info">
Please check that the URL you entered is correct, or click the button below to return to the
homepage.
</div>
<a href="#" class="bullshit__return-home" @click.prevent="back">Back to home</a>
</div>
</div>
</template>
<style lang="scss" scoped>
.page-container {
display: flex;
@@ -48,127 +44,11 @@ function back() {
&__parent {
width: 100%;
}
&__child {
&.left {
top: 17px;
left: 220px;
width: 80px;
opacity: 0;
animation-name: cloudLeft;
animation-duration: 2s;
animation-timing-function: linear;
animation-delay: 1s;
animation-fill-mode: forwards;
}
&.mid {
top: 10px;
left: 420px;
width: 46px;
opacity: 0;
animation-name: cloudMid;
animation-duration: 2s;
animation-timing-function: linear;
animation-delay: 1.2s;
animation-fill-mode: forwards;
}
&.right {
top: 100px;
left: 500px;
width: 62px;
opacity: 0;
animation-name: cloudRight;
animation-duration: 2s;
animation-timing-function: linear;
animation-delay: 1s;
animation-fill-mode: forwards;
}
@keyframes cloudLeft {
0% {
top: 17px;
left: 220px;
opacity: 0;
}
20% {
top: 33px;
left: 188px;
opacity: 1;
}
80% {
top: 81px;
left: 92px;
opacity: 1;
}
100% {
top: 97px;
left: 60px;
opacity: 0;
}
}
@keyframes cloudMid {
0% {
top: 10px;
left: 420px;
opacity: 0;
}
20% {
top: 40px;
left: 360px;
opacity: 1;
}
70% {
top: 130px;
left: 180px;
opacity: 1;
}
100% {
top: 160px;
left: 120px;
opacity: 0;
}
}
@keyframes cloudRight {
0% {
top: 100px;
left: 500px;
opacity: 0;
}
20% {
top: 120px;
left: 460px;
opacity: 1;
}
80% {
top: 180px;
left: 340px;
opacity: 1;
}
100% {
top: 200px;
left: 300px;
opacity: 0;
}
}
}
}
.bullshit {
width: 300px;
padding: 30px 0;
padding: 50px 0;
overflow: hidden;
&__oops {