diff --git a/.eslintrc.js b/.eslintrc.js
index 3b28c11..66f24d5 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,57 +1,57 @@
 module.exports = {
-	//root: true 用于指定它是最顶层的配置,即它在任何情况下都会被采用,而不会被继承覆盖
-	root: true,
-	//env 指定代码运行的环境
-	env : {
-		browser: true,
-		node   : true,
-		es2021 : true,
-		es6    : true
-	},
-	//extends 指定继承的配置
-	extends      : ["plugin:vue/essential"],
-	//plugins 指定使用的插件
-	plugins      : ["@typescript-eslint"],
-	// parserOptions 指定解析器选项
-	parserOptions: { parser: "babel-eslint" },
-	plugins      : ["vue"],
-	// rules 指定自定义的规则
-	rules        : {
-		eqeqeq                       : "off",
-		curly                        : "error",
-		quotes                       : ["error", "double"],
-		"arrow-parens"               : 0,
-		"generator-star-spacing"     : 0,
-		"no-unused-vars"             : "warn",
-		"no-debugger"                : process.env.NODE_ENV === "production" ? "error" : "off",
-		indent                       : [2, 4, { SwitchCase: 1 }],
-		"space-before-function-paren": ["error", "never"],
-		"no-constant-condition"      : ["warn"],
-		"no-empty"                   : ["off"],
-		"comma-spacing"              : ["error", { after: true }],
-		"key-spacing"                : [
-			"error",
-			{
-				singleLine: {},
-				multiLine : { align: "colon" }
-			}
-		],
-		"object-curly-newline" : ["error", { multiline: true }],
-		"array-bracket-newline": ["error", { multiline: true }],
-		curly                  : ["error", "all"],
-		quotes                 : ["error", "double"],
-		indent                 : ["error", "tab"],
-		"brace-style"          : ["error", "stroustrup", { allowSingleLine: false }],
-		"space-infix-ops"      : ["error"],
-		"comma-dangle"         : ["warn", "never"]
-	},
-	//overrides 指定某些文件的指定规则 */
-	overrides: [
-		{
-			files: ["*.vue"],
-			rules: { "vue/multi-word-component-names": 0 }
-		}
-	]
+  //root: true 用于指定它是最顶层的配置,即它在任何情况下都会被采用,而不会被继承覆盖
+  root: true,
+  //env 指定代码运行的环境
+  env: {
+    browser: true,
+    node: true,
+    es2021: true,
+    es6: true,
+  },
+  //extends 指定继承的配置
+  extends: ["plugin:vue/essential"],
+  //plugins 指定使用的插件
+  plugins: ["@typescript-eslint"],
+  // parserOptions 指定解析器选项
+  parserOptions: { parser: "babel-eslint" },
+  plugins: ["vue"],
+  // rules 指定自定义的规则
+  rules: {
+    eqeqeq: "off",
+    curly: "error",
+    quotes: ["error", "double"],
+    "arrow-parens": 0,
+    "generator-star-spacing": 0,
+    "no-unused-vars": "warn",
+    "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off",
+    indent: [2, 4, { SwitchCase: 1 }],
+    "space-before-function-paren": ["error", "never"],
+    "no-constant-condition": ["warn"],
+    "no-empty": ["off"],
+    "comma-spacing": ["error", { after: true }],
+    "key-spacing": [
+      "error",
+      {
+        singleLine: {},
+        multiLine: { align: "colon" },
+      },
+    ],
+    "object-curly-newline": ["error", { multiline: true }],
+    "array-bracket-newline": ["error", { multiline: true }],
+    curly: ["error", "all"],
+    quotes: ["error", "double"],
+    indent: ["error", "tab"],
+    "brace-style": ["error", "stroustrup", { allowSingleLine: false }],
+    "space-infix-ops": ["error"],
+    "comma-dangle": ["warn", "never"],
+  },
+  //overrides 指定某些文件的指定规则 */
+  overrides: [
+    {
+      files: ["*.vue"],
+      rules: { "vue/multi-word-component-names": 0 },
+    },
+  ],
 };
 
 /*
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index fd396c8..e0bcb7b 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -17,23 +17,23 @@ diverse, inclusive, and healthy community.
 Examples of behavior that contributes to a positive environment for our
 community include:
 
-* Demonstrating empathy and kindness toward other people
-* Being respectful of differing opinions, viewpoints, and experiences
-* Giving and gracefully accepting constructive feedback
-* Accepting responsibility and apologizing to those affected by our mistakes,
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by our mistakes,
   and learning from the experience
-* Focusing on what is best not just for us as individuals, but for the
+- Focusing on what is best not just for us as individuals, but for the
   overall community
 
 Examples of unacceptable behavior include:
 
-* The use of sexualized language or imagery, and sexual attention or
+- The use of sexualized language or imagery, and sexual attention or
   advances of any kind
-* Trolling, insulting or derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or email
+- Trolling, insulting or derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or email
   address, without their explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
+- Other conduct which could reasonably be considered inappropriate in a
   professional setting
 
 ## Enforcement Responsibilities
@@ -106,7 +106,7 @@ Violating these terms may lead to a permanent ban.
 ### 4. Permanent Ban
 
 **Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior,  harassment of an
+standards, including sustained inappropriate behavior, harassment of an
 individual, or aggression toward or disparagement of classes of individuals.
 
 **Consequence**: A permanent ban from any sort of public interaction within
diff --git a/babel.config.js b/babel.config.js
index 2dee442..bff6bc7 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,7 +1,7 @@
 const prodPlugins =
-	process.env.NODE_ENV === "production" ? ["transform-remove-console"] : []; // 判断当前环境是否为生产环境,如果是,则将transform-remove-console加入prodPlugins数组中
+  process.env.NODE_ENV === "production" ? ["transform-remove-console"] : []; // 判断当前环境是否为生产环境,如果是,则将transform-remove-console加入prodPlugins数组中
 module.exports = {
-	// 导出配置,使用@vue/cli-plugin-babel/preset作为预设,并将prodPlugins数组中的插件作为插件
-	presets: ["@vue/cli-plugin-babel/preset"],
-	plugins: [...prodPlugins]
+  // 导出配置,使用@vue/cli-plugin-babel/preset作为预设,并将prodPlugins数组中的插件作为插件
+  presets: ["@vue/cli-plugin-babel/preset"],
+  plugins: [...prodPlugins],
 };
diff --git a/doc/pull_request_template.md b/doc/pull_request_template.md
index 9da6862..391d99e 100644
--- a/doc/pull_request_template.md
+++ b/doc/pull_request_template.md
@@ -1,10 +1,13 @@
 ## 相关问题
+
 请在此处链接相关的 issue。(可选)
 
 ## 截图
+
 如果适用,请添加截图以帮助解释您的更改。(可选)
 
 ## 检查清单
+
 - [x] 我已阅读贡献指南。
 - [x] 我已遵循此项目的编码风格规范。
 - [x] 我的代码符合必要的文档要求。
@@ -12,4 +15,5 @@
 - [x] 我已更新必要的文档内容。
 
 ## 其他信息
+
 在此处添加任何其他上下文或信息,以提供有关这个拉取请求的更多详细信息。
diff --git a/public/index.html b/public/index.html
index 3e5a139..76b1894 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1,15 +1,19 @@
-
+
 
   
-    
-    
-    
-    
+    
+    
+    
+    
     <%= htmlWebpackPlugin.options.title %>
   
   
     
     
     
diff --git a/src/App.vue b/src/App.vue
index f645798..9444b25 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,10 +1,10 @@
 
-	
-		
-		
-		
-		
-	
+  
+    
+    
+    
+    
+  
 
 
 
 
diff --git a/src/api/index.js b/src/api/index.js
index 55957b7..910c697 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -4,4 +4,4 @@ import request from "./request";
 import mockRequest from "./mockRequest";
 
 export const getData = () => request.get("/getData", { params: { id: 1 } });
-export const postData = () => request.post("/postData", { params: { id: 1 } });
\ No newline at end of file
+export const postData = () => request.post("/postData", { params: { id: 1 } });
diff --git a/src/api/localRequest.js b/src/api/localRequest.js
index da163ec..8179343 100644
--- a/src/api/localRequest.js
+++ b/src/api/localRequest.js
@@ -12,30 +12,30 @@ import "/node_modules/nprogress/nprogress.css";
 // });
 //使用create方法创建axios实例
 export const requests = axios.create({
-	timeout: 7000, // 请求超时时间
-	baseURL: "/ipa",
-	headers: { "Content-Type": "application/json;charset=UTF-8" }
+  timeout: 7000, // 请求超时时间
+  baseURL: "/ipa",
+  headers: { "Content-Type": "application/json;charset=UTF-8" },
 });
 
 //请求拦截器
 requests.interceptors.request.use((config) => {
-	//进度条开始
-	nprogress.start();
-	return config;
+  //进度条开始
+  nprogress.start();
+  return config;
 });
 
 //响应拦截器
 requests.interceptors.response.use(
-	(res) => {
-		//成功的回调函数
-		//进度条结束
-		nprogress.done();
-		return res.data;
-	},
-	(Error) => {
-		//失败的回调函数
-		return Promise.reject(new Error("faile"));
-	}
+  (res) => {
+    //成功的回调函数
+    //进度条结束
+    nprogress.done();
+    return res.data;
+  },
+  (Error) => {
+    //失败的回调函数
+    return Promise.reject(new Error("faile"));
+  },
 );
 
 export default requests;
diff --git a/src/api/mockRequest.js b/src/api/mockRequest.js
index 1ffd33b..d645ba3 100644
--- a/src/api/mockRequest.js
+++ b/src/api/mockRequest.js
@@ -12,30 +12,30 @@ import "/node_modules/nprogress/nprogress.css";
 // });
 //使用create方法创建axios实例
 export const requests = axios.create({
-	timeout: 7000, // 请求超时时间
-	baseURL: "/mock",
-	headers: { "Content-Type": "application/json;charset=UTF-8" }
+  timeout: 7000, // 请求超时时间
+  baseURL: "/mock",
+  headers: { "Content-Type": "application/json;charset=UTF-8" },
 });
 
 //请求拦截器
 requests.interceptors.request.use((config) => {
-	//进度条开始
-	nprogress.start();
-	return config;
+  //进度条开始
+  nprogress.start();
+  return config;
 });
 
 //响应拦截器
 requests.interceptors.response.use(
-	(res) => {
-		//成功的回调函数
-		//进度条结束
-		nprogress.done();
-		return res.data;
-	},
-	(Error) => {
-		//失败的回调函数
-		return Promise.reject(new Error("faile"));
-	}
+  (res) => {
+    //成功的回调函数
+    //进度条结束
+    nprogress.done();
+    return res.data;
+  },
+  (Error) => {
+    //失败的回调函数
+    return Promise.reject(new Error("faile"));
+  },
 );
 
 export default requests;
diff --git a/src/api/request.js b/src/api/request.js
index 637f3e0..81aad69 100644
--- a/src/api/request.js
+++ b/src/api/request.js
@@ -5,66 +5,65 @@ import Toast from "@/components/Toast";
 
 // 2.定义 axios 实例
 const apiAxios = axios.create({
-	timeout          : 15000,
-	headers          : { "Content-Type": "application/json;charset=UTF-8" },
-	responseType     : "json",
-	// q:为什么这里的baseURL要加上/api?因为在vue.config.js中设置了代理服务器,所以这里的baseURL要加上/api
-	baseURL          : "/api",
-	transformResponse: [
-		function(data) {
-			try {
-				data = JSON.parse(data);
-			}
-			catch (e) {
-				console.log(e);
-			}
-			return data;
-		}
-	]
+  timeout: 15000,
+  headers: { "Content-Type": "application/json;charset=UTF-8" },
+  responseType: "json",
+  // q:为什么这里的baseURL要加上/api?因为在vue.config.js中设置了代理服务器,所以这里的baseURL要加上/api
+  baseURL: "/api",
+  transformResponse: [
+    function (data) {
+      try {
+        data = JSON.parse(data);
+      } catch (e) {
+        console.log(e);
+      }
+      return data;
+    },
+  ],
 });
 
 // 3.添加请求拦截器
 apiAxios.interceptors.request.use(
-	(config) => {
-		NProgress.start();
-		return config;
-	},
-	(error) => {
-		NProgress.done();
-		return Promise.reject(error);
-	}
+  (config) => {
+    NProgress.start();
+    return config;
+  },
+  (error) => {
+    NProgress.done();
+    return Promise.reject(error);
+  },
 );
 
 // 4.添加响应拦截器
 apiAxios.interceptors.response.use(
-	(response) => {
-		NProgress.done();
-		return response;
-	},
-	(error) => {
-		// 对响应的常见错误码提示进行封装,使用策略模式优化
-		const errorHandle = {
-			400: "请求错误",
-			401: "未授权,请登录",
-			403: "拒绝访问",
-			404: `请求地址出错: ${error.response.config.url}`,
-			408: "请求超时",
-			500: "服务器内部错误",
-			501: "服务未实现",
-			502: "网关错误",
-			503: "服务不可用",
-			504: "网关超时",
-			505: "HTTP版本不受支持"
-		};
-		error.message = errorHandle[error.response.status] || "未知错误";
+  (response) => {
+    NProgress.done();
+    return response;
+  },
+  (error) => {
+    // 对响应的常见错误码提示进行封装,使用策略模式优化
+    const errorHandle = {
+      400: "请求错误",
+      401: "未授权,请登录",
+      403: "拒绝访问",
+      404: `请求地址出错: ${error.response.config.url}`,
+      408: "请求超时",
+      500: "服务器内部错误",
+      501: "服务未实现",
+      502: "网关错误",
+      503: "服务不可用",
+      504: "网关超时",
+      505: "HTTP版本不受支持",
+    };
+    error.message = errorHandle[error.response.status] || "未知错误";
 
-		NProgress.done();
-		// q:在这里使用Toast组件,为什么会报错?
-		// a:因为Toast组件是在main.js中注册的,而这里是在request.js中使用的,所以会报错
-		// 解决办法:将Toast组件封装成一个插件,然后在main.js中注册插件
-		Toast.methods.show("error", `${error.message}`);
-		return Promise.reject(error);
-	}
+    NProgress.done();
+    // q:在这里使用Toast组件,为什么会报错?
+    // a:因为Toast组件是在main.js中注册的,而这里是在request.js中使用的,所以会报错
+    // 解决办法:将Toast组件封装成一个插件,然后在main.js中注册插件
+    Toast.methods.show("error", `${error.message}`);
+    return Promise.reject(error);
+  },
 );
 // 5.导出axios实例
 export default apiAxios;
diff --git a/src/assets/scss/_reset.scss b/src/assets/scss/_reset.scss
index 79f6ba8..e091af7 100644
--- a/src/assets/scss/_reset.scss
+++ b/src/assets/scss/_reset.scss
@@ -29,8 +29,8 @@ input,
 button,
 textarea,
 menu {
-	margin: 0;
-	padding: 0;
+  margin: 0;
+  padding: 0;
 }
 header,
 footer,
@@ -44,16 +44,16 @@ figure,
 figcaption,
 menu,
 details {
-	display: block;
+  display: block;
 }
 table {
-	border-collapse: collapse;
-	border-spacing: 0;
+  border-collapse: collapse;
+  border-spacing: 0;
 }
 caption,
 th {
-	text-align: left;
-	font-weight: normal;
+  text-align: left;
+  font-weight: normal;
 }
 html,
 body,
@@ -61,7 +61,7 @@ fieldset,
 img,
 iframe,
 abbr {
-	border: 0;
+  border: 0;
 }
 i,
 cite,
@@ -69,36 +69,36 @@ em,
 var,
 address,
 dfn {
-	font-style: normal;
+  font-style: normal;
 }
 [hidefocus],
 summary {
-	outline: 0;
+  outline: 0;
 }
 li {
-	list-style: none;
+  list-style: none;
 }
 sup,
 sub {
-	font-size: 83%;
+  font-size: 83%;
 }
 pre,
 code,
 kbd,
 samp {
-	font-family: inherit;
+  font-family: inherit;
 }
 textarea {
-	overflow: auto;
-	resize: none;
+  overflow: auto;
+  resize: none;
 }
 label,
 summary {
-	cursor: default;
+  cursor: default;
 }
 a,
 button {
-	cursor: pointer;
+  cursor: pointer;
 }
 h1,
 h2,
@@ -109,7 +109,7 @@ h6,
 em,
 strong,
 b {
-	font-weight: bold;
+  font-weight: bold;
 }
 del,
 ins,
@@ -117,7 +117,7 @@ u,
 s,
 a,
 a:hover {
-	text-decoration: none;
+  text-decoration: none;
 }
 body,
 textarea,
@@ -126,14 +126,18 @@ button,
 select,
 keygen,
 legend {
-	font: 14px/1.14 arial, "Microsoft Yahei", "WenQuanYi Micro Hei", sans-serif;
-	color: #666;
-	outline: 0;
+  font:
+    14px/1.14 arial,
+    "Microsoft Yahei",
+    "WenQuanYi Micro Hei",
+    sans-serif;
+  color: #666;
+  outline: 0;
 }
 body {
-	background: #fff;
+  background: #fff;
 }
 a,
 a:hover {
-	color: #666;
+  color: #666;
 }
diff --git a/src/assets/scss/_variables.scss b/src/assets/scss/_variables.scss
index 58766fe..7b66c30 100644
--- a/src/assets/scss/_variables.scss
+++ b/src/assets/scss/_variables.scss
@@ -1,34 +1,33 @@
 $content-width: 1226px;
 $component-height: 32px;
 
-$font-family-medium: 'PingFangSC-Medium', Helvetica, Tahoma, Arial, 'Microsoft YaHei',
-    'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif;
-$font-family-regular: 'PingFangSC-Regular', Helvetica, Tahoma, Arial, 'Microsoft YaHei',
-    'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif;
+$font-family-medium: "PingFangSC-Medium", Helvetica, Tahoma, Arial,
+  "Microsoft YaHei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif;
+$font-family-regular: "PingFangSC-Regular", Helvetica, Tahoma, Arial,
+  "Microsoft YaHei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif;
 
 @mixin font-class($fontFamily, $fontSize, $fontColor, $isBold) {
-    font-family: $fontFamily;
-    font-size: $fontSize;
-    @if $isBold {
-        font-weight: bold;
-    }
-    color: $fontColor;
-    letter-spacing: 0;
+  font-family: $fontFamily;
+  font-size: $fontSize;
+  @if $isBold {
+    font-weight: bold;
+  }
+  color: $fontColor;
+  letter-spacing: 0;
 }
 
 @mixin font-large($size: 14px, $color: $white, $isBlod: false) {
-    @include font-class($font-family-medium, $size, $color, $isBlod);
+  @include font-class($font-family-medium, $size, $color, $isBlod);
 }
 
 @mixin font-normal($size: 14px, $color: $white, $isBlod: false) {
-    @include font-class($font-family-regular, $size, $color, $isBlod);
+  @include font-class($font-family-regular, $size, $color, $isBlod);
 }
 
 /* 居中*/
 @mixin center {
-    position: absolute;
-    left: 50%;
-    top: 50%;
-    transform: translate(-50%, -50%);
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  transform: translate(-50%, -50%);
 }
-
diff --git a/src/assets/scss/global.scss b/src/assets/scss/global.scss
index ad26362..4ffda4e 100644
--- a/src/assets/scss/global.scss
+++ b/src/assets/scss/global.scss
@@ -1,36 +1,36 @@
-@import './_reset.scss';
-@import './_variables.scss';
-@import './color';
+@import "./_reset.scss";
+@import "./_variables.scss";
+@import "./color";
 * {
-    -moz-osx-font-smoothing: grayscale;
-    -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  -webkit-font-smoothing: antialiased;
 }
 
 *,
 *::before,
 *::after {
-    box-sizing: content-box;
+  box-sizing: content-box;
 }
 
 html {
-    -webkit-tap-highlight-color: transparent;
-    -webkit-text-size-adjust: 100%;
+  -webkit-tap-highlight-color: transparent;
+  -webkit-text-size-adjust: 100%;
 }
 
 body {
-    font-family: $font-family-regular;
-    margin: 0;
-    padding: 0;
-    width: 100%;
-    min-width: $content-width;
-    height: 100%;
-    background-color: $white;
-    color: $black;
-    font-size: 14px;
-    line-height: 1.375;
+  font-family: $font-family-regular;
+  margin: 0;
+  padding: 0;
+  width: 100%;
+  min-width: $content-width;
+  height: 100%;
+  background-color: $white;
+  color: $black;
+  font-size: 14px;
+  line-height: 1.375;
 }
 
 .layout {
-    width: $content-width;
-    margin: 0 auto;
+  width: $content-width;
+  margin: 0 auto;
 }
diff --git a/src/components/Footer/Footer.vue b/src/components/Footer/Footer.vue
index 9d4f517..708ce31 100644
--- a/src/components/Footer/Footer.vue
+++ b/src/components/Footer/Footer.vue
@@ -1,148 +1,97 @@
 
-