feat(error): better 404 and error page
This commit is contained in:
		
							parent
							
								
									c303505ea9
								
							
						
					
					
						commit
						baf98c8d67
					
				| @ -1,44 +1,87 @@ | |||||||
| <template> | <template> | ||||||
|   <v-app dark> |   <v-app dark> | ||||||
|     <h1 v-if="error.statusCode === 404"> |     <div v-if="error.statusCode === 404"> | ||||||
|       {{ pageNotFound }} |       <div class="error-wrapper"> | ||||||
|     </h1> |         <div class="error-image"> | ||||||
|     <h1 v-else> |           <svg | ||||||
|       {{ otherError }} |             xmlns="http://www.w3.org/2000/svg" | ||||||
|     </h1> |             x="0px" | ||||||
|     <NuxtLink to="/"> |             y="0px" | ||||||
|       Home page |             viewBox="0 100 511.999 300" | ||||||
|     </NuxtLink> |             xml:space="preserve" | ||||||
|  |           > | ||||||
|  |             <g><path d="M140.61,273.063h-5.956v-22.69c0-11.623-10.593-19.433-26.358-19.433s-26.357,7.81-26.357,19.433v22.69H65.571 l25.677-100.707c1.101-2.746,1.194-5.749,1.186-8.392l-0.001-0.284c0-15.632-22.966-20.737-30.881-20.737 c-10.132,0-18.414,5.148-22.723,14.123c-0.199,0.415-0.359,0.847-0.481,1.29C0,298.98,0,300.981,0,302.305 c0,12.096,8.537,20.876,20.297,20.876H33.97c4.2,0,7.604-3.405,7.604-7.604c0-4.199-3.404-7.604-7.604-7.604H20.297 c-3.184,0-4.887-1.694-5.072-5.04c1.954-8.608,23.256-87.252,37.593-139.831c1.785-3.288,4.721-4.954,8.734-4.954 c5.289,0,14.355,3.338,15.673,5.732l0.001,0.128c0.001,0.584,0.006,2.084-0.132,2.756c-0.178,0.397-0.321,0.809-0.43,1.231 L48.417,278.788c-0.58,2.275-0.076,4.69,1.365,6.544c1.44,1.854,3.656,2.938,6.004,2.938h33.757c4.2,0,7.604-3.405,7.604-7.604 v-30.294c0-2.528,5.766-4.225,11.149-4.225c5.481,0,11.15,1.581,11.15,4.225v30.294c0,4.199,3.404,7.604,7.604,7.604h13.56 c2.252,0,4.226,4.671,4.226,9.996c0,5.013-3.022,9.171-4.382,9.708H127.05c-4.2,0-7.604,3.405-7.604,7.604v34.045 c0,1.954-4.872,4.225-11.15,4.225c-6.467,0-11.149-2.523-11.149-4.225v-34.045c0-4.199-3.404-7.604-7.604-7.604H59.318 c-4.2,0-7.604,3.405-7.604,7.604c0,4.199,3.404,7.604,7.604,7.604h22.621v26.441c0,11.26,11.086,19.433,26.357,19.433 c15.52,0,26.358-7.991,26.358-19.433v-26.441h5.956c9.192,0,19.434-10.232,19.434-24.916 C160.043,283.663,151.87,273.063,140.61,273.063z" /></g> | ||||||
|  |             <g><path d="M492.566,273.063h-5.956v-22.69c0-11.623-10.593-19.433-26.358-19.433s-26.357,7.81-26.357,19.433v22.69h-16.368 l25.679-100.708c1.1-2.745,1.193-5.75,1.185-8.393l-0.001-0.281c0-15.632-22.966-20.737-30.881-20.737 c-10.132,0-18.415,5.148-22.724,14.123c-0.199,0.415-0.359,0.847-0.481,1.29c0,0-4.869,17.852-11.125,40.898 c0,0.001,0,0.002-0.001,0.003l-7.879,29.071c-19.345,71.527-19.345,72.449-19.345,73.978c0,12.096,8.537,20.876,20.298,20.876 h61.64v26.441c0,11.26,11.085,19.433,26.357,19.433c15.52,0,26.358-7.991,26.358-19.433v-26.441h5.956 c9.192,0,19.434-10.232,19.434-24.915C512,283.663,503.826,273.063,492.566,273.063z M492.41,307.974h-13.404 c-4.2,0-7.604,3.405-7.604,7.604v34.045c0,1.954-4.872,4.225-11.15,4.225c-6.467,0-11.149-2.523-11.149-4.225v-34.045 c0-4.199-3.404-7.604-7.604-7.604h-69.244c-3.183,0-4.887-1.694-5.073-5.037c0.677-2.966,4.201-16.655,18.801-70.634l7.877-29.064 c5.504-20.276,9.934-36.53,10.916-40.133c1.785-3.288,4.721-4.954,8.735-4.954c5.289,0,14.354,3.338,15.673,5.732l0.001,0.124 c0.001,0.585,0.006,2.09-0.133,2.762c-0.177,0.396-0.32,0.808-0.429,1.23l-28.249,110.79c-0.58,2.275-0.076,4.69,1.365,6.544 c1.44,1.854,3.656,2.938,6.004,2.938H441.5c4.2,0,7.604-3.405,7.604-7.604v-30.294c0-2.528,5.766-4.225,11.149-4.225 c5.481,0,11.15,1.581,11.15,4.225v30.294c0,4.199,3.404,7.604,7.604,7.604h13.56c2.252,0,4.226,4.671,4.226,9.996 C496.792,303.281,493.769,307.437,492.41,307.974z" /></g> | ||||||
|  |             <g><path d="M330.892,206.939c-2.512-3.363-7.279-4.051-10.642-1.536c-3.362,2.515-4.05,7.281-1.535,10.643 c10.168,13.597,15.542,29.786,15.542,46.818c0,43.149-35.104,78.252-78.252,78.252c-43.15,0-78.253-35.104-78.253-78.252 c0-43.149,35.104-78.253,78.253-78.253c17.152,0,33.434,5.444,47.083,15.744c3.353,2.53,8.122,1.863,10.651-1.49 c2.529-3.352,1.862-8.12-1.49-10.65c-16.311-12.307-35.76-18.812-56.245-18.812c-51.534,0-93.461,41.927-93.461,93.461 s41.927,93.46,93.461,93.46c51.534,0,93.46-41.926,93.46-93.46C349.464,242.523,343.042,223.185,330.892,206.939z" /></g> | ||||||
|  |             <g><path d="M296.624,292.726l-29.863-29.863L296.624,233c2.968-2.969,2.968-7.783-0.002-10.753c-2.971-2.97-7.784-2.97-10.754,0 l-29.863,29.863l-29.863-29.863c-2.971-2.97-7.784-2.97-10.754,0c-2.97,2.97-2.97,7.784,0,10.753l29.863,29.863l-29.863,29.863 c-2.97,2.97-2.97,7.784,0,10.753c1.485,1.484,3.432,2.227,5.378,2.227c1.946,0,3.892-0.742,5.377-2.227l29.863-29.863 l29.863,29.863c1.485,1.484,3.432,2.227,5.377,2.227s3.892-0.742,5.378-2.227C299.593,300.51,299.593,295.695,296.624,292.726z" /></g> | ||||||
|  |           </svg> | ||||||
|  |         </div> | ||||||
|  |         <div class="separator"/> | ||||||
|  |         <div class="error-description"> | ||||||
|  |           Page not found, sorry. | ||||||
|  |         </div> | ||||||
|  |         <v-btn color="primary" depressed @click="$router.go(-1)"> | ||||||
|  |           Back | ||||||
|  |         </v-btn> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div v-else> | ||||||
|  |       <div class="error-wrapper"> | ||||||
|  |         <div class="error-description"> | ||||||
|  |           {{this.error ? this.error.message : 'An error occurred'}} | ||||||
|  |         </div> | ||||||
|  |         <v-btn color="primary" depressed @click="$router.go(-1)"> | ||||||
|  |           Back | ||||||
|  |         </v-btn> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|   </v-app> |   </v-app> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script lang="ts"> | ||||||
| export default { | 
 | ||||||
|   layout: 'empty', | import {Component, Prop, Vue} from 'nuxt-property-decorator' | ||||||
|   props: { | 
 | ||||||
|     error: { | @Component | ||||||
|       type: Object, | export default class Index extends Vue { | ||||||
|       default: null |   @Prop({default: () => null}) error!: { statusCode: number, message: string } | null; | ||||||
|     } |   layout = 'empty' | ||||||
|   }, | 
 | ||||||
|   data() { |  | ||||||
|     return { |  | ||||||
|       pageNotFound: '404 Not Found', |  | ||||||
|       otherError: 'An error occurred' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   head() { |   head() { | ||||||
|     const title = |  | ||||||
|       this.error.statusCode === 404 ? this.pageNotFound : this.otherError |  | ||||||
|     return { |     return { | ||||||
|       title |       title: `${this.error?.statusCode ?? ''} ${this.error?.message ?? 'An error occurred'}` | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <style scoped> | <style scoped lang="less"> | ||||||
| h1 { | .error-wrapper { | ||||||
|   font-size: 20px; |   display: flex; | ||||||
|  |   flex-direction: column; | ||||||
|  |   align-items: center; | ||||||
|  |   justify-content: center; | ||||||
|  | 
 | ||||||
|  |   .error-image { | ||||||
|  |     width: 200px; | ||||||
|  | 
 | ||||||
|  |     svg { | ||||||
|  |       fill: #ffffff; | ||||||
|  |       opacity: 0.3; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .separator { | ||||||
|  |     width: 60px; | ||||||
|  |     height: 3px; | ||||||
|  |     border-radius: 5px; | ||||||
|  |     background-color: var(--v-primary-base) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .error-description { | ||||||
|  |     font-size: 30px; | ||||||
|  |     opacity: 0.9; | ||||||
|  |     margin: 15px 0; | ||||||
|  |   } | ||||||
| } | } | ||||||
| </style> | </style> | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user