项目开始
Showing
7 changed files
with
356 additions
and
12 deletions
src/assets/401_images/401.gif
0 → 100644
160 KB
src/assets/404_images/404.png
0 → 100644
95.8 KB
src/assets/404_images/404_cloud.png
0 → 100644
4.65 KB
1 | <template> | 1 | <template> |
2 | <div :class="{'has-logo':showLogo}"> | 2 | <div :class="{ 'has-logo': showLogo }"> |
3 | <logo v-if="showLogo" :collapse="isCollapse" /> | 3 | <logo v-if="showLogo" :collapse="isCollapse" /> |
4 | <el-scrollbar wrap-class="scrollbar-wrapper"> | 4 | <el-scrollbar wrap-class="scrollbar-wrapper"> |
5 | <el-menu :default-active="activeMenu" :collapse="isCollapse" | 5 | <el-menu :default-active="activeMenu" :collapse="isCollapse" :background-color="variables.menuBg" |
6 | :background-color="variables.menuBg" :text-color="variables.menuText" :unique-opened="true" | 6 | :text-color="variables.menuText" :unique-opened="true" :active-text-color="variables.menuActiveText" |
7 | :active-text-color="variables.menuActiveText" :collapse-transition="false" mode="vertical"> | 7 | :collapse-transition="false" mode="vertical"> |
8 | <!-- 权限菜单 --> | 8 | <!-- 权限菜单 --> |
9 | <sidebar-item v-for="route in permission_routes" :key="route.path" :item="route" :base-path="route.path" /> | 9 | <!-- <sidebar-item v-for="route in permission_routes" :key="route.path" :item="route" :base-path="route.path" /> --> |
10 | <!-- 菜单全部展示 --> | 10 | <!-- 菜单全部展示 --> |
11 | <!-- <sidebar-item v-for="route in asyncRoutes" :key="route.path" :item="route" | 11 | <sidebar-item v-for="route in asyncRoutes" :key="route.path" :item="route" :base-path="route.path" /> |
12 | :base-path="route.path" /> --> | ||
13 | </el-menu> | 12 | </el-menu> |
14 | </el-scrollbar> | 13 | </el-scrollbar> |
15 | </div> | 14 | </div> |
... | @@ -25,7 +24,7 @@ export default { | ... | @@ -25,7 +24,7 @@ export default { |
25 | components: { SidebarItem, Logo }, | 24 | components: { SidebarItem, Logo }, |
26 | computed: { | 25 | computed: { |
27 | ...mapGetters(['permission_routes', 'sidebar']), | 26 | ...mapGetters(['permission_routes', 'sidebar']), |
28 | activeMenu() { | 27 | activeMenu () { |
29 | const route = this.$route | 28 | const route = this.$route |
30 | const { meta, path } = route | 29 | const { meta, path } = route |
31 | // if set path, the sidebar will highlight the path you set | 30 | // if set path, the sidebar will highlight the path you set |
... | @@ -34,16 +33,16 @@ export default { | ... | @@ -34,16 +33,16 @@ export default { |
34 | } | 33 | } |
35 | return path | 34 | return path |
36 | }, | 35 | }, |
37 | showLogo() { | 36 | showLogo () { |
38 | return this.$store.state.settings.sidebarLogo | 37 | return this.$store.state.settings.sidebarLogo |
39 | }, | 38 | }, |
40 | variables() { | 39 | variables () { |
41 | return variables | 40 | return variables |
42 | }, | 41 | }, |
43 | isCollapse() { | 42 | isCollapse () { |
44 | return !this.sidebar.opened | 43 | return !this.sidebar.opened |
45 | }, | 44 | }, |
46 | asyncRoutes() { | 45 | asyncRoutes () { |
47 | return asyncRoutes | 46 | return asyncRoutes |
48 | }, | 47 | }, |
49 | }, | 48 | }, | ... | ... |
... | @@ -21,6 +21,16 @@ export const constantRoutes = [ | ... | @@ -21,6 +21,16 @@ export const constantRoutes = [ |
21 | ] | 21 | ] |
22 | }, | 22 | }, |
23 | { | 23 | { |
24 | path: '/404', | ||
25 | component: () => import('@/views/error-page/404'), | ||
26 | hidden: true | ||
27 | }, | ||
28 | { | ||
29 | path: '/401', | ||
30 | component: () => import('@/views/error-page/401'), | ||
31 | hidden: true | ||
32 | }, | ||
33 | { | ||
24 | path: '/', | 34 | path: '/', |
25 | component: Layout, | 35 | component: Layout, |
26 | redirect: '/home', | 36 | redirect: '/home', | ... | ... |
src/views/error-page/401.vue
0 → 100644
1 | <template> | ||
2 | <div class="errPage-container"> | ||
3 | <el-button icon="el-icon-arrow-left" class="pan-back-btn" @click="back"> | ||
4 | 返回 | ||
5 | </el-button> | ||
6 | <el-row> | ||
7 | <el-col :span="12"> | ||
8 | <h1 class="text-jumbo text-ginormous"> | ||
9 | Oops! | ||
10 | </h1> | ||
11 | gif来源<a href="https://zh.airbnb.com/" target="_blank">airbnb</a> 页面 | ||
12 | <h2>你没有权限去该页面</h2> | ||
13 | <h6>如有不满请联系你领导</h6> | ||
14 | <ul class="list-unstyled"> | ||
15 | <li>或者你可以去:</li> | ||
16 | <li class="link-type"> | ||
17 | <router-link to="/home"> | ||
18 | 回首页 | ||
19 | </router-link> | ||
20 | </li> | ||
21 | <li class="link-type"> | ||
22 | <a href="https://www.taobao.com/">随便看看</a> | ||
23 | </li> | ||
24 | <li><a href="#" @click.prevent="dialogVisible=true">点我看图</a></li> | ||
25 | </ul> | ||
26 | </el-col> | ||
27 | <el-col :span="12"> | ||
28 | <img :src="errGif" width="313" height="428" alt="Girl has dropped her ice cream."> | ||
29 | </el-col> | ||
30 | </el-row> | ||
31 | <el-dialog :visible.sync="dialogVisible" title="随便看"> | ||
32 | <img :src="ewizardClap" class="pan-img"> | ||
33 | </el-dialog> | ||
34 | </div> | ||
35 | </template> | ||
36 | |||
37 | <script> | ||
38 | import errGif from '@/assets/401_images/401.gif' | ||
39 | |||
40 | export default { | ||
41 | name: 'Page401', | ||
42 | data() { | ||
43 | return { | ||
44 | errGif: errGif + '?' + +new Date(), | ||
45 | ewizardClap: 'https://wpimg.wallstcn.com/007ef517-bafd-4066-aae4-6883632d9646', | ||
46 | dialogVisible: false | ||
47 | } | ||
48 | }, | ||
49 | methods: { | ||
50 | back() { | ||
51 | if (this.$route.query.noGoBack) { | ||
52 | this.$router.push({ path: '/dashboard' }) | ||
53 | } else { | ||
54 | this.$router.go(-1) | ||
55 | } | ||
56 | } | ||
57 | } | ||
58 | } | ||
59 | </script> | ||
60 | |||
61 | <style lang="scss" scoped> | ||
62 | .errPage-container { | ||
63 | width: 800px; | ||
64 | max-width: 100%; | ||
65 | margin: 100px auto; | ||
66 | .pan-back-btn { | ||
67 | background: #008489; | ||
68 | color: #fff; | ||
69 | border: none!important; | ||
70 | } | ||
71 | .pan-gif { | ||
72 | margin: 0 auto; | ||
73 | display: block; | ||
74 | } | ||
75 | .pan-img { | ||
76 | display: block; | ||
77 | margin: 0 auto; | ||
78 | width: 100%; | ||
79 | } | ||
80 | .text-jumbo { | ||
81 | font-size: 60px; | ||
82 | font-weight: 700; | ||
83 | color: #484848; | ||
84 | } | ||
85 | .list-unstyled { | ||
86 | font-size: 14px; | ||
87 | li { | ||
88 | padding-bottom: 5px; | ||
89 | } | ||
90 | a { | ||
91 | color: #008489; | ||
92 | text-decoration: none; | ||
93 | &:hover { | ||
94 | text-decoration: underline; | ||
95 | } | ||
96 | } | ||
97 | } | ||
98 | } | ||
99 | </style> |
src/views/error-page/404.vue
0 → 100644
1 | <template> | ||
2 | <div class="wscn-http404-container"> | ||
3 | <div class="wscn-http404"> | ||
4 | <div class="pic-404"> | ||
5 | <img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404"> | ||
6 | <img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404"> | ||
7 | <img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404"> | ||
8 | <img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404"> | ||
9 | </div> | ||
10 | <div class="bullshit"> | ||
11 | <div class="bullshit__oops">OOPS!</div> | ||
12 | <div class="bullshit__info">All rights reserved | ||
13 | <a style="color:#20a0ff" href="https://wallstreetcn.com" target="_blank">wallstreetcn</a> | ||
14 | </div> | ||
15 | <div class="bullshit__headline">{{ message }}</div> | ||
16 | <div class="bullshit__info">Please check that the URL you entered is correct, or click the button below to return to the homepage.</div> | ||
17 | <a @click='nextTo' class="bullshit__return-home">回到主页</a> | ||
18 | </div> | ||
19 | </div> | ||
20 | </div> | ||
21 | </template> | ||
22 | |||
23 | <script> | ||
24 | |||
25 | export default { | ||
26 | name: 'Page404', | ||
27 | computed: { | ||
28 | message() { | ||
29 | return 'The webmaster said that you can not enter this page...' | ||
30 | } | ||
31 | }, | ||
32 | methods:{ | ||
33 | nextTo(){ | ||
34 | this.$router.push({ | ||
35 | path: this.redirect || '/', | ||
36 | query: this.otherQuery | ||
37 | }) | ||
38 | }, | ||
39 | } | ||
40 | } | ||
41 | </script> | ||
42 | |||
43 | <style lang="scss" scoped> | ||
44 | .wscn-http404-container{ | ||
45 | transform: translate(-50%,-50%); | ||
46 | position: absolute; | ||
47 | top: 40%; | ||
48 | left: 50%; | ||
49 | } | ||
50 | .wscn-http404 { | ||
51 | position: relative; | ||
52 | width: 1200px; | ||
53 | padding: 0 50px; | ||
54 | overflow: hidden; | ||
55 | .pic-404 { | ||
56 | position: relative; | ||
57 | float: left; | ||
58 | width: 600px; | ||
59 | overflow: hidden; | ||
60 | &__parent { | ||
61 | width: 100%; | ||
62 | } | ||
63 | &__child { | ||
64 | position: absolute; | ||
65 | &.left { | ||
66 | width: 80px; | ||
67 | top: 17px; | ||
68 | left: 220px; | ||
69 | opacity: 0; | ||
70 | animation-name: cloudLeft; | ||
71 | animation-duration: 2s; | ||
72 | animation-timing-function: linear; | ||
73 | animation-fill-mode: forwards; | ||
74 | animation-delay: 1s; | ||
75 | } | ||
76 | &.mid { | ||
77 | width: 46px; | ||
78 | top: 10px; | ||
79 | left: 420px; | ||
80 | opacity: 0; | ||
81 | animation-name: cloudMid; | ||
82 | animation-duration: 2s; | ||
83 | animation-timing-function: linear; | ||
84 | animation-fill-mode: forwards; | ||
85 | animation-delay: 1.2s; | ||
86 | } | ||
87 | &.right { | ||
88 | width: 62px; | ||
89 | top: 100px; | ||
90 | left: 500px; | ||
91 | opacity: 0; | ||
92 | animation-name: cloudRight; | ||
93 | animation-duration: 2s; | ||
94 | animation-timing-function: linear; | ||
95 | animation-fill-mode: forwards; | ||
96 | animation-delay: 1s; | ||
97 | } | ||
98 | @keyframes cloudLeft { | ||
99 | 0% { | ||
100 | top: 17px; | ||
101 | left: 220px; | ||
102 | opacity: 0; | ||
103 | } | ||
104 | 20% { | ||
105 | top: 33px; | ||
106 | left: 188px; | ||
107 | opacity: 1; | ||
108 | } | ||
109 | 80% { | ||
110 | top: 81px; | ||
111 | left: 92px; | ||
112 | opacity: 1; | ||
113 | } | ||
114 | 100% { | ||
115 | top: 97px; | ||
116 | left: 60px; | ||
117 | opacity: 0; | ||
118 | } | ||
119 | } | ||
120 | @keyframes cloudMid { | ||
121 | 0% { | ||
122 | top: 10px; | ||
123 | left: 420px; | ||
124 | opacity: 0; | ||
125 | } | ||
126 | 20% { | ||
127 | top: 40px; | ||
128 | left: 360px; | ||
129 | opacity: 1; | ||
130 | } | ||
131 | 70% { | ||
132 | top: 130px; | ||
133 | left: 180px; | ||
134 | opacity: 1; | ||
135 | } | ||
136 | 100% { | ||
137 | top: 160px; | ||
138 | left: 120px; | ||
139 | opacity: 0; | ||
140 | } | ||
141 | } | ||
142 | @keyframes cloudRight { | ||
143 | 0% { | ||
144 | top: 100px; | ||
145 | left: 500px; | ||
146 | opacity: 0; | ||
147 | } | ||
148 | 20% { | ||
149 | top: 120px; | ||
150 | left: 460px; | ||
151 | opacity: 1; | ||
152 | } | ||
153 | 80% { | ||
154 | top: 180px; | ||
155 | left: 340px; | ||
156 | opacity: 1; | ||
157 | } | ||
158 | 100% { | ||
159 | top: 200px; | ||
160 | left: 300px; | ||
161 | opacity: 0; | ||
162 | } | ||
163 | } | ||
164 | } | ||
165 | } | ||
166 | .bullshit { | ||
167 | position: relative; | ||
168 | float: left; | ||
169 | width: 300px; | ||
170 | padding: 30px 0; | ||
171 | overflow: hidden; | ||
172 | &__oops { | ||
173 | font-size: 32px; | ||
174 | font-weight: bold; | ||
175 | line-height: 40px; | ||
176 | color: #1482f0; | ||
177 | opacity: 0; | ||
178 | margin-bottom: 20px; | ||
179 | animation-name: slideUp; | ||
180 | animation-duration: 0.5s; | ||
181 | animation-fill-mode: forwards; | ||
182 | } | ||
183 | &__headline { | ||
184 | font-size: 20px; | ||
185 | line-height: 24px; | ||
186 | color: #222; | ||
187 | font-weight: bold; | ||
188 | opacity: 0; | ||
189 | margin-bottom: 10px; | ||
190 | animation-name: slideUp; | ||
191 | animation-duration: 0.5s; | ||
192 | animation-delay: 0.1s; | ||
193 | animation-fill-mode: forwards; | ||
194 | } | ||
195 | &__info { | ||
196 | font-size: 13px; | ||
197 | line-height: 21px; | ||
198 | color: grey; | ||
199 | opacity: 0; | ||
200 | margin-bottom: 30px; | ||
201 | animation-name: slideUp; | ||
202 | animation-duration: 0.5s; | ||
203 | animation-delay: 0.2s; | ||
204 | animation-fill-mode: forwards; | ||
205 | } | ||
206 | &__return-home { | ||
207 | display: block; | ||
208 | float: left; | ||
209 | width: 110px; | ||
210 | height: 36px; | ||
211 | background: #1482f0; | ||
212 | border-radius: 100px; | ||
213 | text-align: center; | ||
214 | color: #ffffff; | ||
215 | opacity: 0; | ||
216 | font-size: 14px; | ||
217 | line-height: 36px; | ||
218 | cursor: pointer; | ||
219 | animation-name: slideUp; | ||
220 | animation-duration: 0.5s; | ||
221 | animation-delay: 0.3s; | ||
222 | animation-fill-mode: forwards; | ||
223 | } | ||
224 | @keyframes slideUp { | ||
225 | 0% { | ||
226 | transform: translateY(60px); | ||
227 | opacity: 0; | ||
228 | } | ||
229 | 100% { | ||
230 | transform: translateY(0); | ||
231 | opacity: 1; | ||
232 | } | ||
233 | } | ||
234 | } | ||
235 | } | ||
236 | </style> |
-
Please register or sign in to post a comment