From ae11615808e7c5fdc541780a687da068cd98386f Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期四, 12 六月 2025 09:53:07 +0800
Subject: [PATCH] 1、调整终端首页功能页面logo图片改为字体图标优化资源获取速度 2、新增终端合格率和程序呼叫页面 3、终端点检页面不再为独立页面,调整为与二保三保页面相同的跳转我的待办页面逻辑 4、终端所有页面完成前后端联调

---
 src/assets/terminal/iconfont.json                                                        |   58 +
 src/views/dnc/base/modules/TerminalIndex/ProcedureCall.vue                               |  154 +++++
 src/assets/terminal/demo.css                                                             |  539 +++++++++++++++++
 src/components/layouts/TerminalLayout.vue                                                |    2 
 src/assets/terminal/iconfont.css                                                         |   41 +
 src/assets/terminal/iconfont.js                                                          |    1 
 src/assets/terminal/demo_index.html                                                      |  345 +++++++++++
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue                        |    5 
 src/views/dnc/base/modules/TerminalIndex/ReportPassRate.vue                              |  158 +++++
 /dev/null                                                                                |    1 
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue  |    2 
 src/assets/terminal/iconfont.ttf                                                         |    0 
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue |    2 
 src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue                          |    7 
 src/config/router.config.js                                                              |   12 
 src/views/dnc/base/TerminalIndex.vue                                                     |  140 ++--
 src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue                          |  198 ++++--
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue                        |   82 ++
 18 files changed, 1,586 insertions(+), 161 deletions(-)

diff --git a/src/assets/terminal/call.svg b/src/assets/terminal/call.svg
deleted file mode 100644
index 4723c34..0000000
--- a/src/assets/terminal/call.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1749006270893" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="57981" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M785.723077 673.476923c0-1.969231-1.969231-3.938462-1.969231-3.938461l-59.076923-66.953847v-108.307692c0-98.461538-68.923077-183.138462-165.415385-204.8 3.938462-7.876923 7.876923-17.723077 7.876924-27.569231 0-29.538462-25.6-53.169231-57.107693-53.16923S452.923077 232.369231 452.923077 261.907692c0 9.846154 3.938462 19.692308 7.876923 27.569231-98.461538 21.661538-165.415385 106.338462-165.415385 204.8v108.307692L236.307692 669.538462l-1.96923 1.96923c-3.938462 5.907692-3.938462 11.815385-3.938462 21.661539 0 27.569231 21.661538 49.230769 51.2 49.230769h133.907692c9.846154 43.323077 51.2 74.830769 96.492308 74.830769 47.261538 0 86.646154-29.538462 96.492308-74.830769h133.907692c27.569231 0 51.2-21.661538 51.2-49.230769-3.938462-7.876923-5.907692-13.784615-7.876923-19.692308zM512 246.153846c11.815385 0 19.692308 7.876923 19.692308 17.723077s-7.876923 17.723077-19.692308 17.723077-19.692308-7.876923-19.692308-17.723077 7.876923-17.723077 19.692308-17.723077z m0 533.661539c-23.630769 0-43.323077-13.784615-49.230769-33.476923h100.430769c-9.846154 19.692308-29.538462 33.476923-51.2 33.476923z m222.523077-104.369231c0 7.876923-5.907692 13.784615-13.784615 13.784615H303.261538c-7.876923 0-13.784615-7.876923-13.784615-13.784615v-3.938462l55.138462-61.046154c1.969231-1.969231 1.969231-7.876923 1.96923-9.846153v-104.369231c0-88.615385 72.861538-159.507692 163.446154-159.507692s163.446154 70.892308 163.446154 159.507692v104.369231c1.969231 3.938462 1.969231 7.876923 5.907692 9.846153l55.138462 61.046154v3.938462z" p-id="57982" fill="#ffffff"></path><path d="M923.569231 29.538462H100.430769c-39.384615 0-72.861538 33.476923-72.861538 72.861538V925.538462c0 39.384615 33.476923 72.861538 72.861538 72.861538h823.138462c39.384615 0 72.861538-33.476923 72.861538-72.861538V102.4c0-41.353846-31.507692-72.861538-72.861538-72.861538z m-5.907693 846.76923c0 21.661538-17.723077 41.353846-41.353846 41.353846H149.661538c-21.661538 0-41.353846-17.723077-41.353846-41.353846V149.661538c0-21.661538 17.723077-41.353846 41.353846-41.353846h726.646154c21.661538 0 41.353846 17.723077 41.353846 41.353846v726.646154z" p-id="57983" fill="#ffffff"></path></svg>
\ No newline at end of file
diff --git a/src/assets/terminal/close.svg b/src/assets/terminal/close.svg
deleted file mode 100644
index de4e162..0000000
--- a/src/assets/terminal/close.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1749015960411" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="67039" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M128 109.714286h768c30.281143 0 54.857143 30.72 54.857143 68.608v226.377143c0 37.888-24.576 68.608-54.857143 68.608H128a49.956571 49.956571 0 0 1-38.765714-20.114286A78.116571 78.116571 0 0 1 73.142857 404.699429V178.249143c0-37.814857 24.576-68.534857 54.857143-68.534857z m81.92 135.021714a24.576 24.576 0 0 0-19.163429 9.874286 38.473143 38.473143 0 0 0-7.899428 23.917714c0 8.923429 2.852571 17.554286 7.899428 23.844571 5.12 6.290286 11.922286 9.874286 19.090286 9.874286h165.449143a24.576 24.576 0 0 0 19.017143-9.874286 38.473143 38.473143 0 0 0 7.972571-23.917714 38.473143 38.473143 0 0 0-7.899428-23.844571 24.576 24.576 0 0 0-19.090286-9.874286H209.846857zM128 582.948571h485.376A292.352 292.352 0 0 0 512 804.571429c0 53.174857 14.482286 103.131429 39.643429 146.285714H128a50.029714 50.029714 0 0 1-38.765714-20.114286 78.116571 78.116571 0 0 1-16.091429-48.420571V651.556571c0-37.888 24.576-68.534857 54.857143-68.534857z m81.92 165.449143a24.576 24.576 0 0 0-19.163429 9.874286 38.473143 38.473143 0 0 0-7.899428 23.844571c0 8.923429 2.852571 17.554286 7.899428 23.844572 5.12 6.363429 11.922286 9.947429 19.090286 9.947428h165.449143a24.576 24.576 0 0 0 19.017143-9.947428 38.473143 38.473143 0 0 0 7.972571-23.844572 38.473143 38.473143 0 0 0-7.899428-23.844571 24.576 24.576 0 0 0-19.090286-9.947429H209.846857z" p-id="67040" fill="#ffffff"></path><path d="M797.988571 585.142857A212.699429 212.699429 0 0 0 585.142857 797.988571a213.723429 213.723429 0 0 0 212.845714 212.772572 213.723429 213.723429 0 0 0 212.772572-212.845714c0-116.809143-94.354286-212.772571-212.845714-212.772572z m111.908572 266.020572l-54.857143 54.857142-54.857143-54.857142-54.857143 54.857142-54.857143-54.857142 54.857143-54.857143-54.857143-54.857143 54.857143-54.857143 54.857143 54.857143 54.857143-54.857143 54.857143 54.857143-54.857143 54.857143 54.857143 54.857143z" p-id="67041" fill="#ffffff"></path></svg>
\ No newline at end of file
diff --git a/src/assets/terminal/demo.css b/src/assets/terminal/demo.css
new file mode 100644
index 0000000..a67054a
--- /dev/null
+++ b/src/assets/terminal/demo.css
@@ -0,0 +1,539 @@
+/* Logo 瀛椾綋 */
+@font-face {
+  font-family: "iconfont logo";
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+  font-family: "iconfont logo";
+  font-size: 160px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+  position: relative;
+}
+
+.nav-tabs .nav-more {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  height: 42px;
+  line-height: 42px;
+  color: #666;
+}
+
+#tabs {
+  border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+  cursor: pointer;
+  width: 100px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  font-size: 16px;
+  border-bottom: 2px solid transparent;
+  position: relative;
+  z-index: 1;
+  margin-bottom: -1px;
+  color: #666;
+}
+
+
+#tabs .active {
+  border-bottom-color: #f00;
+  color: #222;
+}
+
+.tab-container .content {
+  display: none;
+}
+
+/* 椤甸潰甯冨眬 */
+.main {
+  padding: 30px 100px;
+  width: 960px;
+  margin: 0 auto;
+}
+
+.main .logo {
+  color: #333;
+  text-align: left;
+  margin-bottom: 30px;
+  line-height: 1;
+  height: 110px;
+  margin-top: -50px;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.main .logo a {
+  font-size: 160px;
+  color: #333;
+}
+
+.helps {
+  margin-top: 40px;
+}
+
+.helps pre {
+  padding: 20px;
+  margin: 10px 0;
+  border: solid 1px #e7e1cd;
+  background-color: #fffdef;
+  overflow: auto;
+}
+
+.icon_lists {
+  width: 100% !important;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.icon_lists li {
+  width: 100px;
+  margin-bottom: 10px;
+  margin-right: 20px;
+  text-align: center;
+  list-style: none !important;
+  cursor: default;
+}
+
+.icon_lists li .code-name {
+  line-height: 1.2;
+}
+
+.icon_lists .icon {
+  display: block;
+  height: 100px;
+  line-height: 100px;
+  font-size: 42px;
+  margin: 10px auto;
+  color: #333;
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
+  transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+  font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+  /* 閫氳繃璁剧疆 font-size 鏉ユ敼鍙樺浘鏍囧ぇ灏� */
+  width: 1em;
+  /* 鍥炬爣鍜屾枃瀛楃浉閭绘椂锛屽瀭鐩村榻� */
+  vertical-align: -0.15em;
+  /* 閫氳繃璁剧疆 color 鏉ユ敼鍙� SVG 鐨勯鑹�/fill */
+  fill: currentColor;
+  /* path 鍜� stroke 婧㈠嚭 viewBox 閮ㄥ垎鍦� IE 涓嬩細鏄剧ず
+      normalize.css 涓篃鍖呭惈杩欒 */
+  overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+  color: #666;
+}
+
+/* markdown 鏍峰紡 */
+.markdown {
+  color: #666;
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+.highlight {
+  line-height: 1.5;
+}
+
+.markdown img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+.markdown h1 {
+  color: #404040;
+  font-weight: 500;
+  line-height: 40px;
+  margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+  color: #404040;
+  margin: 1.6em 0 0.6em 0;
+  font-weight: 500;
+  clear: both;
+}
+
+.markdown h1 {
+  font-size: 28px;
+}
+
+.markdown h2 {
+  font-size: 22px;
+}
+
+.markdown h3 {
+  font-size: 16px;
+}
+
+.markdown h4 {
+  font-size: 14px;
+}
+
+.markdown h5 {
+  font-size: 12px;
+}
+
+.markdown h6 {
+  font-size: 12px;
+}
+
+.markdown hr {
+  height: 1px;
+  border: 0;
+  background: #e9e9e9;
+  margin: 16px 0;
+  clear: both;
+}
+
+.markdown p {
+  margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+  width: 80%;
+}
+
+.markdown ul>li {
+  list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+  margin: 0.6em 0;
+}
+
+.markdown ol>li {
+  list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown code {
+  margin: 0 3px;
+  padding: 0 5px;
+  background: #eee;
+  border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+  font-weight: 600;
+}
+
+.markdown>table {
+  border-collapse: collapse;
+  border-spacing: 0px;
+  empty-cells: show;
+  border: 1px solid #e9e9e9;
+  width: 95%;
+  margin-bottom: 24px;
+}
+
+.markdown>table th {
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+  border: 1px solid #e9e9e9;
+  padding: 8px 16px;
+  text-align: left;
+}
+
+.markdown>table th {
+  background: #F7F7F7;
+}
+
+.markdown blockquote {
+  font-size: 90%;
+  color: #999;
+  border-left: 4px solid #e9e9e9;
+  padding-left: 0.8em;
+  margin: 1em 0;
+}
+
+.markdown blockquote p {
+  margin: 0;
+}
+
+.markdown .anchor {
+  opacity: 0;
+  transition: opacity 0.3s ease;
+  margin-left: 8px;
+}
+
+.markdown .waiting {
+  color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+  opacity: 1;
+  display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+  clear: both;
+}
+
+
+.hljs {
+  display: block;
+  background: white;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+  color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+  color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+  color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+  color: #63a35c;
+}
+
+.hljs-tag {
+  color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #795da3;
+}
+
+.hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.hljs-link {
+  text-decoration: underline;
+}
+
+/* 浠g爜楂樹寒 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  background: none;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}
diff --git a/src/assets/terminal/demo_index.html b/src/assets/terminal/demo_index.html
new file mode 100644
index 0000000..6bc1010
--- /dev/null
+++ b/src/assets/terminal/demo_index.html
@@ -0,0 +1,345 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <title>iconfont Demo</title>
+  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
+  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg"/>
+  <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
+  <link rel="stylesheet" href="demo.css">
+  <link rel="stylesheet" href="iconfont.css">
+  <script src="iconfont.js"></script>
+  <!-- jQuery -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
+  <!-- 浠g爜楂樹寒 -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
+  <style>
+    .main .logo {
+      margin-top: 0;
+      height: auto;
+    }
+
+    .main .logo a {
+      display: flex;
+      align-items: center;
+    }
+
+    .main .logo .sub-title {
+      margin-left: 0.5em;
+      font-size: 22px;
+      color: #fff;
+      background: linear-gradient(-45deg, #3967FF, #B500FE);
+      -webkit-background-clip: text;
+      -webkit-text-fill-color: transparent;
+    }
+  </style>
+</head>
+<body>
+  <div class="main">
+    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 棣栭〉" target="_blank">
+      <img width="200" src="https://img.alicdn.com/imgextra/i3/O1CN01Mn65HV1FfSEzR6DKv_!!6000000000514-55-tps-228-59.svg">
+      
+    </a></h1>
+    <div class="nav-tabs">
+      <ul id="tabs" class="dib-box">
+        <li class="dib active"><span>Unicode</span></li>
+        <li class="dib"><span>Font class</span></li>
+        <li class="dib"><span>Symbol</span></li>
+      </ul>
+      
+    </div>
+    <div class="tab-container">
+      <div class="content unicode" style="display: block;">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xee17;</span>
+                <div class="name">涓婄彮</div>
+                <div class="code-name">&amp;#xee17;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe694;</span>
+                <div class="name">鏁呴殰鍋滄満</div>
+                <div class="code-name">&amp;#xe694;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe72a;</span>
+                <div class="name">璁惧鏁呴殰鎶ヤ慨</div>
+                <div class="code-name">&amp;#xe72a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe604;</span>
+                <div class="name">璁惧鐐规绠$悊</div>
+                <div class="code-name">&amp;#xe604;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe65d;</span>
+                <div class="name">閰嶉獙鏀跺悎鏍�</div>
+                <div class="code-name">&amp;#xe65d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe818;</span>
+                <div class="name">鍛煎彨</div>
+                <div class="code-name">&amp;#xe818;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe639;</span>
+                <div class="name">璁惧淇濆吇</div>
+                <div class="code-name">&amp;#xe639;</div>
+              </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="unicode-">Unicode 寮曠敤</h2>
+          <hr>
+
+          <p>Unicode 鏄瓧浣撳湪缃戦〉绔渶鍘熷鐨勫簲鐢ㄦ柟寮忥紝鐗圭偣鏄細</p>
+          <ul>
+            <li>鏀寔鎸夊瓧浣撶殑鏂瑰紡鍘诲姩鎬佽皟鏁村浘鏍囧ぇ灏忥紝棰滆壊绛夌瓑銆�</li>
+            <li>榛樿鎯呭喌涓嬩笉鏀寔澶氳壊锛岀洿鎺ユ坊鍔犲鑹插浘鏍囦細鑷姩鍘昏壊銆�</li>
+          </ul>
+          <blockquote>
+            <p>娉ㄦ剰锛氭柊鐗� iconfont 鏀寔涓ょ鏂瑰紡寮曠敤澶氳壊鍥炬爣锛歋VG symbol 寮曠敤鏂瑰紡鍜屽僵鑹插瓧浣撳浘鏍囨ā寮忋�傦紙浣跨敤褰╄壊瀛椾綋鍥炬爣闇�瑕佸湪銆岀紪杈戦」鐩�嶄腑寮�鍚�屽僵鑹层�嶉�夐」鍚庡苟閲嶆柊鐢熸垚銆傦級</p>
+          </blockquote>
+          <p>Unicode 浣跨敤姝ラ濡備笅锛�</p>
+          <h3 id="-font-face">绗竴姝ワ細鎷疯礉椤圭洰涓嬮潰鐢熸垚鐨� <code>@font-face</code></h3>
+<pre><code class="language-css"
+>@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.ttf?t=1749612611295') format('truetype');
+}
+</code></pre>
+          <h3 id="-iconfont-">绗簩姝ワ細瀹氫箟浣跨敤 iconfont 鐨勬牱寮�</h3>
+<pre><code class="language-css"
+>.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+</code></pre>
+          <h3 id="-">绗笁姝ワ細鎸戦�夌浉搴斿浘鏍囧苟鑾峰彇瀛椾綋缂栫爜锛屽簲鐢ㄤ簬椤甸潰</h3>
+<pre>
+<code class="language-html"
+>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
+</code></pre>
+          <blockquote>
+            <p>"iconfont" 鏄綘椤圭洰涓嬬殑 font-family銆傚彲浠ラ�氳繃缂栬緫椤圭洰鏌ョ湅锛岄粯璁ゆ槸 "iconfont"銆�</p>
+          </blockquote>
+          </div>
+      </div>
+      <div class="content font-class">
+        <ul class="icon_lists dib-box">
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shangban"></span>
+            <div class="name">
+              涓婄彮
+            </div>
+            <div class="code-name">.icon-shangban
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-guzhangtingji"></span>
+            <div class="name">
+              鏁呴殰鍋滄満
+            </div>
+            <div class="code-name">.icon-guzhangtingji
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shebeiguzhangbaoxiu"></span>
+            <div class="name">
+              璁惧鏁呴殰鎶ヤ慨
+            </div>
+            <div class="code-name">.icon-shebeiguzhangbaoxiu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shebeidianjianguanli"></span>
+            <div class="name">
+              璁惧鐐规绠$悊
+            </div>
+            <div class="code-name">.icon-shebeidianjianguanli
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-peiyanshouhege"></span>
+            <div class="name">
+              閰嶉獙鏀跺悎鏍�
+            </div>
+            <div class="code-name">.icon-peiyanshouhege
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-hujiao"></span>
+            <div class="name">
+              鍛煎彨
+            </div>
+            <div class="code-name">.icon-hujiao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shebeibaoyang"></span>
+            <div class="name">
+              璁惧淇濆吇
+            </div>
+            <div class="code-name">.icon-shebeibaoyang
+            </div>
+          </li>
+          
+        </ul>
+        <div class="article markdown">
+        <h2 id="font-class-">font-class 寮曠敤</h2>
+        <hr>
+
+        <p>font-class 鏄� Unicode 浣跨敤鏂瑰紡鐨勪竴绉嶅彉绉嶏紝涓昏鏄В鍐� Unicode 涔﹀啓涓嶇洿瑙傦紝璇剰涓嶆槑纭殑闂銆�</p>
+        <p>涓� Unicode 浣跨敤鏂瑰紡鐩告瘮锛屽叿鏈夊涓嬬壒鐐癸細</p>
+        <ul>
+          <li>鐩告瘮浜� Unicode 璇剰鏄庣‘锛屼功鍐欐洿鐩磋銆傚彲浠ュ緢瀹规槗鍒嗚鲸杩欎釜 icon 鏄粈涔堛��</li>
+          <li>鍥犱负浣跨敤 class 鏉ュ畾涔夊浘鏍囷紝鎵�浠ュ綋瑕佹浛鎹㈠浘鏍囨椂锛屽彧闇�瑕佷慨鏀� class 閲岄潰鐨� Unicode 寮曠敤銆�</li>
+        </ul>
+        <p>浣跨敤姝ラ濡備笅锛�</p>
+        <h3 id="-fontclass-">绗竴姝ワ細寮曞叆椤圭洰涓嬮潰鐢熸垚鐨� fontclass 浠g爜锛�</h3>
+<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
+</code></pre>
+        <h3 id="-">绗簩姝ワ細鎸戦�夌浉搴斿浘鏍囧苟鑾峰彇绫诲悕锛屽簲鐢ㄤ簬椤甸潰锛�</h3>
+<pre><code class="language-html">&lt;span class="iconfont icon-xxx"&gt;&lt;/span&gt;
+</code></pre>
+        <blockquote>
+          <p>"
+            iconfont" 鏄綘椤圭洰涓嬬殑 font-family銆傚彲浠ラ�氳繃缂栬緫椤圭洰鏌ョ湅锛岄粯璁ゆ槸 "iconfont"銆�</p>
+        </blockquote>
+      </div>
+      </div>
+      <div class="content symbol">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shangban"></use>
+                </svg>
+                <div class="name">涓婄彮</div>
+                <div class="code-name">#icon-shangban</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-guzhangtingji"></use>
+                </svg>
+                <div class="name">鏁呴殰鍋滄満</div>
+                <div class="code-name">#icon-guzhangtingji</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shebeiguzhangbaoxiu"></use>
+                </svg>
+                <div class="name">璁惧鏁呴殰鎶ヤ慨</div>
+                <div class="code-name">#icon-shebeiguzhangbaoxiu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shebeidianjianguanli"></use>
+                </svg>
+                <div class="name">璁惧鐐规绠$悊</div>
+                <div class="code-name">#icon-shebeidianjianguanli</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-peiyanshouhege"></use>
+                </svg>
+                <div class="name">閰嶉獙鏀跺悎鏍�</div>
+                <div class="code-name">#icon-peiyanshouhege</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-hujiao"></use>
+                </svg>
+                <div class="name">鍛煎彨</div>
+                <div class="code-name">#icon-hujiao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shebeibaoyang"></use>
+                </svg>
+                <div class="name">璁惧淇濆吇</div>
+                <div class="code-name">#icon-shebeibaoyang</div>
+            </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="symbol-">Symbol 寮曠敤</h2>
+          <hr>
+
+          <p>杩欐槸涓�绉嶅叏鏂扮殑浣跨敤鏂瑰紡锛屽簲璇ヨ杩欐墠鏄湭鏉ョ殑涓绘祦锛屼篃鏄钩鍙扮洰鍓嶆帹鑽愮殑鐢ㄦ硶銆傜浉鍏充粙缁嶅彲浠ュ弬鑰冭繖绡�<a href="">鏂囩珷</a>
+            杩欑鐢ㄦ硶鍏跺疄鏄仛浜嗕竴涓� SVG 鐨勯泦鍚堬紝涓庡彟澶栦袱绉嶇浉姣斿叿鏈夊涓嬬壒鐐癸細</p>
+          <ul>
+            <li>鏀寔澶氳壊鍥炬爣浜嗭紝涓嶅啀鍙楀崟鑹查檺鍒躲��</li>
+            <li>閫氳繃涓�浜涙妧宸э紝鏀寔鍍忓瓧浣撻偅鏍凤紝閫氳繃 <code>font-size</code>, <code>color</code> 鏉ヨ皟鏁存牱寮忋��</li>
+            <li>鍏煎鎬ц緝宸紝鏀寔 IE9+锛屽強鐜颁唬娴忚鍣ㄣ��</li>
+            <li>娴忚鍣ㄦ覆鏌� SVG 鐨勬�ц兘涓�鑸紝杩樹笉濡� png銆�</li>
+          </ul>
+          <p>浣跨敤姝ラ濡備笅锛�</p>
+          <h3 id="-symbol-">绗竴姝ワ細寮曞叆椤圭洰涓嬮潰鐢熸垚鐨� symbol 浠g爜锛�</h3>
+<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
+</code></pre>
+          <h3 id="-css-">绗簩姝ワ細鍔犲叆閫氱敤 CSS 浠g爜锛堝紩鍏ヤ竴娆″氨琛岋級锛�</h3>
+<pre><code class="language-html">&lt;style&gt;
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+&lt;/style&gt;
+</code></pre>
+          <h3 id="-">绗笁姝ワ細鎸戦�夌浉搴斿浘鏍囧苟鑾峰彇绫诲悕锛屽簲鐢ㄤ簬椤甸潰锛�</h3>
+<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
+  &lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
+&lt;/svg&gt;
+</code></pre>
+          </div>
+      </div>
+
+    </div>
+  </div>
+  <script>
+  $(document).ready(function () {
+      $('.tab-container .content:first').show()
+
+      $('#tabs li').click(function (e) {
+        var tabContent = $('.tab-container .content')
+        var index = $(this).index()
+
+        if ($(this).hasClass('active')) {
+          return
+        } else {
+          $('#tabs li').removeClass('active')
+          $(this).addClass('active')
+
+          tabContent.hide().eq(index).fadeIn()
+        }
+      })
+    })
+  </script>
+</body>
+</html>
diff --git a/src/assets/terminal/fault.svg b/src/assets/terminal/fault.svg
deleted file mode 100644
index b66ac7c..0000000
--- a/src/assets/terminal/fault.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1749005493852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11672" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M316.928 564.736h153.088c20.992 0 38.4 16.896 38.4 38.4s-16.896 38.4-38.4 38.4H316.928c-20.992 0-38.4-16.896-38.4-38.4s17.408-38.4 38.4-38.4z m467.968 25.088v344.576c0 20.992-16.896 38.4-38.4 38.4-20.992 0-38.4-16.896-38.4-38.4v-344.576c0-20.992 16.896-38.4 38.4-38.4 20.992 0 38.4 17.408 38.4 38.4z m-210.944 134.144h344.576c20.992 0 38.4 16.896 38.4 38.4s-16.896 38.4-38.4 38.4h-344.576c-20.992 0-38.4-16.896-38.4-38.4s17.408-38.4 38.4-38.4zM316.928 393.216h344.576c20.992 0 38.4 16.896 38.4 38.4 0 20.992-16.896 38.4-38.4 38.4H316.928c-20.992 0-38.4-16.896-38.4-38.4 0.512-20.992 17.408-38.4 38.4-38.4zM873.472 128h-96.768v76.8c0 22.528-18.432 40.96-40.96 40.96H281.088c-22.528 0-40.96-18.432-40.96-40.96V128H143.36v765.952h370.176v76.8H143.36c-42.496 0-76.8-34.304-76.8-76.8V128c0-42.496 34.304-76.8 76.8-76.8h730.112c42.496 0 76.8 34.304 76.8 76.8v385.536h-76.8V128z" fill="#ffffff" p-id="11673"></path></svg>
\ No newline at end of file
diff --git a/src/assets/terminal/iconfont.css b/src/assets/terminal/iconfont.css
new file mode 100644
index 0000000..e5df99c
--- /dev/null
+++ b/src/assets/terminal/iconfont.css
@@ -0,0 +1,41 @@
+@font-face {
+  font-family: "iconfont"; /* Project id  */
+  src: url('iconfont.ttf?t=1749612611295') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 2.6vw;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-work:before {
+  content: "\ee17";
+}
+
+.icon-close:before {
+  content: "\e694";
+}
+
+.icon-fault:before {
+  content: "\e72a";
+}
+
+.icon-spotCheck:before {
+  content: "\e604";
+}
+
+.icon-passRate:before {
+  content: "\e65d";
+}
+
+.icon-call:before {
+  content: "\e818";
+}
+
+.icon-maintenance:before {
+  content: "\e639";
+}
+
diff --git a/src/assets/terminal/iconfont.js b/src/assets/terminal/iconfont.js
new file mode 100644
index 0000000..a2c64ad
--- /dev/null
+++ b/src/assets/terminal/iconfont.js
@@ -0,0 +1 @@
+window._iconfont_svg_string_='<svg><symbol id="icon-shangban" viewBox="0 0 1024 1024"><path d="M870.182019 205.005158h-107.493073a255.935888 255.935888 0 0 0-501.63434 0H153.561533a153.561533 153.561533 0 0 0-153.561533 153.561533v511.871776a153.561533 153.561533 0 0 0 153.561533 153.561533h716.620486a153.561533 153.561533 0 0 0 153.561533-153.561533V358.566691a153.561533 153.561533 0 0 0-153.561533-153.561533z m-358.310243-102.374355a153.561533 153.561533 0 0 1 144.347841 102.374355H368.547679A153.561533 153.561533 0 0 1 511.871776 102.630803zM153.561533 307.379513h716.620486a51.187178 51.187178 0 0 1 51.187178 51.187178v102.374355H102.374355V358.566691a51.187178 51.187178 0 0 1 51.187178-51.187178z m716.620486 614.246132H153.561533a51.187178 51.187178 0 0 1-51.187178-51.187178v-307.123066h358.310244v51.187178a51.187178 51.187178 0 0 0 102.374355 0v-51.187178h358.310243v307.123066a51.187178 51.187178 0 0 1-51.187178 51.187178z" fill="#3E4055" ></path></symbol><symbol id="icon-guzhangtingji" viewBox="0 0 1024 1024"><path d="M128 109.714286h768c30.281143 0 54.857143 30.72 54.857143 68.608v226.377143c0 37.888-24.576 68.608-54.857143 68.608H128a49.956571 49.956571 0 0 1-38.765714-20.114286A78.116571 78.116571 0 0 1 73.142857 404.699429V178.249143c0-37.814857 24.576-68.534857 54.857143-68.534857z m81.92 135.021714a24.576 24.576 0 0 0-19.163429 9.874286 38.473143 38.473143 0 0 0-7.899428 23.917714c0 8.923429 2.852571 17.554286 7.899428 23.844571 5.12 6.290286 11.922286 9.874286 19.090286 9.874286h165.449143a24.576 24.576 0 0 0 19.017143-9.874286 38.473143 38.473143 0 0 0 7.972571-23.917714 38.473143 38.473143 0 0 0-7.899428-23.844571 24.576 24.576 0 0 0-19.090286-9.874286H209.846857zM128 582.948571h485.376A292.352 292.352 0 0 0 512 804.571429c0 53.174857 14.482286 103.131429 39.643429 146.285714H128a50.029714 50.029714 0 0 1-38.765714-20.114286 78.116571 78.116571 0 0 1-16.091429-48.420571V651.556571c0-37.888 24.576-68.534857 54.857143-68.534857z m81.92 165.449143a24.576 24.576 0 0 0-19.163429 9.874286 38.473143 38.473143 0 0 0-7.899428 23.844571c0 8.923429 2.852571 17.554286 7.899428 23.844572 5.12 6.363429 11.922286 9.947429 19.090286 9.947428h165.449143a24.576 24.576 0 0 0 19.017143-9.947428 38.473143 38.473143 0 0 0 7.972571-23.844572 38.473143 38.473143 0 0 0-7.899428-23.844571 24.576 24.576 0 0 0-19.090286-9.947429H209.846857z"  ></path><path d="M797.988571 585.142857A212.699429 212.699429 0 0 0 585.142857 797.988571a213.723429 213.723429 0 0 0 212.845714 212.772572 213.723429 213.723429 0 0 0 212.772572-212.845714c0-116.809143-94.354286-212.772571-212.845714-212.772572z m111.908572 266.020572l-54.857143 54.857142-54.857143-54.857142-54.857143 54.857142-54.857143-54.857142 54.857143-54.857143-54.857143-54.857143 54.857143-54.857143 54.857143 54.857143 54.857143-54.857143 54.857143 54.857143-54.857143 54.857143 54.857143 54.857143z"  ></path></symbol><symbol id="icon-shebeiguzhangbaoxiu" viewBox="0 0 1024 1024"><path d="M389.439571 939.994334c21.690135 0 39.24701 18.277352 39.247011 40.839643 0 22.600211-17.556875 40.877562-39.209091 40.877562H97.381144C54.152553 1021.59778 19.076722 985.080996 18.962963 940.032254V81.717205C19.114642 36.630543 54.114633 0.113759 97.381144 0h705.687787c43.266511 0.113759 78.304421 36.668463 78.418181 81.755125v208.407312c0 22.600211-17.518955 40.877562-39.209091 40.877562-21.614295 0-39.20909-18.277352-39.20909-40.877562V81.755125H97.381144v858.239209h292.096347zM273.746211 235.027023c-21.690135 0-39.20909-18.315271-39.209091-40.877562 0-22.600211 17.518955-40.877562 39.209091-40.877562h352.843894c21.652215 0 39.20909 18.277352 39.20909 40.877562 0 22.562291-17.556875 40.877562-39.20909 40.877562H273.708291z m0 163.43441c-21.690135 0-39.20909-18.277352-39.209091-40.839642s17.518955-40.877562 39.209091-40.877563h109.777869c21.614295 0 39.20909 18.315271 39.20909 40.877563 0 22.562291-17.556875 40.877562-39.20909 40.877562H273.708291z m370.476608-44.934983a69.469104 69.469104 0 0 1 64.691207 16.343441l160.780023 167.60559a70.910057 70.910057 0 0 1 17.632715 65.373764l-19.604546 79.669534a31.208009 31.208009 0 0 0 7.811483 28.553622l105.872128 110.346667a83.878634 83.878634 0 0 1 0 116.489676l-58.699876 61.430103a75.915473 75.915473 0 0 1-111.7497 0l-19.604545-20.476701-86.267583-89.869965a28.326103 28.326103 0 0 0-27.378108-8.190681l-72.540609 20.438782a71.327175 71.327175 0 0 1-70.568779-20.476701l-154.864531-161.38674a76.44635 76.44635 0 0 1-17.632714-73.564444l21.538455-87.898135c3.716142-17.746474 16.57096-31.928486 33.369439-36.782222 16.60888-5.915491 34.999991-1.137594 47.020573 12.248101l62.719376 65.373763 54.794135-14.257851 13.689054-57.107243-62.719377-65.373764a53.542781 53.542781 0 0 1-13.689053-51.115913 47.778969 47.778969 0 0 1 35.265429-34.734552l90.135404-22.638131z m9.821233 120.585017c18.239432 18.429031 25.064999 45.996738 17.632714 71.365095l-15.698804 67.459354a70.37918 70.37918 0 0 1-48.992403 51.077993l-64.691207 18.391111a71.440935 71.440935 0 0 1-68.483189-18.391111l-29.425777-30.715052-7.811483 32.724802 148.94904 155.281649 70.606699-18.391111c36.403024-9.821233 75.157077 1.023835 101.928467 28.553622l86.267583 89.945805 19.604545 20.438781 58.775716-61.316343-19.566626-20.476701-86.267583-89.869966a112.470176 112.470176 0 0 1-27.378107-106.289246l17.632714-71.365094-148.986959-155.28165-33.331519 8.152761 29.198259 28.705301z"  ></path></symbol><symbol id="icon-shebeidianjianguanli" viewBox="0 0 1024 1024"><path d="M791.23684 1023.988284H232.710439A230.479197 230.479197 0 0 1 0.018225 791.230982V232.70458A230.479197 230.479197 0 0 1 232.710439 0.012367h558.526401a230.479197 230.479197 0 0 1 232.692213 232.692213v558.526402a230.479197 230.479197 0 0 1-232.692213 232.757302zM232.710439 93.089252A143.195208 143.195208 0 0 0 93.09511 232.70458v558.526402A143.195208 143.195208 0 0 0 232.710439 930.781221h558.526401a143.195208 143.195208 0 0 0 139.550239-139.550239V232.70458a143.195208 143.195208 0 0 0-139.550239-139.615328H232.710439z"  ></path><path d="M791.23684 372.384997h-186.153771a46.538443 46.538443 0 1 1 0-93.076885h186.153771a46.538443 46.538443 0 1 1 0 93.076885z m0 372.372631h-186.153771a46.538443 46.538443 0 1 1 0-93.076886h186.153771a46.538443 46.538443 0 1 1 0 93.076886zM456.094964 260.692735L297.864258 437.538817a34.88756 34.88756 0 0 1-55.846131 0l-46.538443-55.846131a79.538429 79.538429 0 0 1 0-65.088731 34.88756 34.88756 0 0 1 55.846132 0l27.923065 27.923065 130.177462-148.923016a42.307675 42.307675 0 0 1 46.538443 0 55.455599 55.455599 0 0 1 0.130178 65.088731z m-130.177463 577.141778a139.615328 139.615328 0 1 1 139.615329-139.615328 143.195208 143.195208 0 0 1-139.745506 139.615328z m0-186.153771a46.538443 46.538443 0 1 0 46.538443 46.538443 43.999982 43.999982 0 0 0-46.66862-46.538443z"  ></path></symbol><symbol id="icon-peiyanshouhege" viewBox="0 0 1024 1024"><path d="M544 972.8v-44.8H115.2c-19.2 0-32-12.8-32-32V102.4c0-19.2 12.8-32 32-32h723.2c19.2 0 32 12.8 32 32v403.2h64V102.4c0-51.2-44.8-96-96-96H115.2C64 6.4 19.2 51.2 19.2 102.4V896c0 51.2 44.8 96 96 96h435.2c0-6.4-6.4-12.8-6.4-19.2z"  ></path><path d="M876.8 505.6c0 19.2 12.8 32 32 32s32-12.8 32-32-12.8-32-32-32-32 12.8-32 32zM518.4 960c0 19.2 12.8 32 32 32s32-12.8 32-32-12.8-32-32-32-32 12.8-32 32zM358.4 697.6H198.4c-19.2 0-32-12.8-32-32s12.8-32 32-32h160c19.2 0 32 12.8 32 32s-12.8 32-32 32z m371.2-332.8H569.6c-19.2 0-32-12.8-32-32s12.8-32 32-32h160c19.2 0 32 12.8 32 32s-19.2 32-32 32z m64-128h-256c-19.2 0-32-12.8-32-32s12.8-32 32-32h256c19.2 0 32 12.8 32 32s-19.2 32-32 32z m-352 588.8h-256c-19.2 0-32-12.8-32-32s12.8-32 32-32h256c19.2 0 32 12.8 32 32s-19.2 32-32 32z m345.6-243.2c-108.8 0-198.4 89.6-198.4 198.4s89.6 198.4 198.4 198.4 198.4-89.6 198.4-198.4-83.2-198.4-198.4-198.4z m147.2 134.4L755.2 896c-6.4 6.4-12.8 6.4-12.8 0l-25.6-25.6-76.8-76.8c-6.4-6.4-6.4-12.8 0-12.8l25.6-25.6c6.4-6.4 12.8-6.4 12.8 0l70.4 70.4 147.2-147.2c6.4-6.4 12.8-6.4 12.8 0l25.6 25.6c6.4 0 6.4 6.4 0 12.8z m-268.8-224h-64c-19.2 0-32-12.8-32-32s12.8-32 32-32h64c19.2 0 32 12.8 32 32s-12.8 32-32 32zM371.2 345.6c12.8-6.4 19.2 0 25.6 0 12.8 0 19.2 0 32-6.4 19.2-6.4 32-12.8 38.4-25.6 12.8-12.8 19.2-19.2 19.2-32s0-19.2-12.8-25.6h-6.4l-25.6 6.4h-12.8l-19.2-25.6 12.8-32 38.4-12.8c6.4 0 12.8 0 12.8-6.4v-12.8c0-6.4-6.4-6.4-6.4-6.4-12.8-6.4-25.6-12.8-38.4-12.8-12.8-6.4-32-6.4-44.8 0-25.6 6.4-38.4 19.2-57.6 44.8 0 6.4-12.8 38.4-6.4 64l-12.8 12.8-44.8-44.8v-6.4c0-6.4 0-6.4 6.4-6.4v-6.4c0-6.4 6.4-6.4 12.8-12.8h19.2c6.4 0 12.8 0 19.2-6.4 0 0 0-12.8-6.4-19.2-19.2-6.4-32-19.2-51.2-19.2-12.8 0-25.6 0-44.8 19.2h-12.8c-6.4-6.4-19.2 0-19.2 0l-38.4 32s-6.4 6.4-6.4 12.8 0 6.4 6.4 12.8h-12.8v6.4H128l-19.2 19.2s-6.4 6.4-6.4 12.8 0 6.4 6.4 12.8l51.2 51.2s6.4 6.4 12.8 6.4 6.4 0 12.8-6.4l6.4-19.2c6.4 0 6.4-6.4 6.4-12.8h6.4l44.8 44.8L147.2 448s-6.4 6.4-6.4 12.8 0 6.4 6.4 12.8l38.4 38.4s12.8 0 19.2-6.4l102.4-102.4L416 512c6.4 6.4 6.4 6.4 12.8 6.4s6.4 0 12.8-6.4l38.4-38.4s6.4-6.4 6.4-12.8 0-6.4-6.4-12.8L371.2 345.6zM217.6 256c0-6.4 0-6.4-6.4-6.4H192c-6.4 0-6.4 6.4-6.4 6.4-6.4 6.4-6.4 12.8-6.4 19.2v6.4h-6.4L147.2 256h6.4c12.8 0 12.8-6.4 19.2-6.4h6.4s0-6.4 6.4-6.4v-6.4c0-6.4 6.4-6.4 0-12.8 0 0 0-6.4-6.4-6.4l12.8-19.2c6.4 6.4 19.2 6.4 19.2 0h12.8c6.4 0 6.4 0 12.8-6.4s19.2-6.4 19.2-12.8c0 6.4-6.4 12.8-12.8 25.6v12.8l-12.8 6.4v6.4c0 6.4 0 12.8 6.4 19.2l51.2 51.2-19.2 12.8-51.2-57.6zM192 460.8L179.2 448l172.8-172.8c6.4-6.4 6.4-12.8 6.4-19.2v-6.4c-6.4-19.2 0-32 0-44.8 6.4-12.8 19.2-19.2 32-25.6l-6.4 6.4-12.8 51.2c0 6.4 0 12.8 6.4 19.2l38.4 38.4c6.4 6.4 6.4 6.4 12.8 6.4h-32c-6.4 0-12.8 0-19.2-6.4-6.4-6.4-12.8 0-19.2 0L192 460.8z m236.8 0L326.4 364.8l19.2-19.2L441.6 448l-12.8 12.8z"  ></path></symbol><symbol id="icon-hujiao" viewBox="0 0 1024 1024"><path d="M785.723077 673.476923c0-1.969231-1.969231-3.938462-1.969231-3.938461l-59.076923-66.953847v-108.307692c0-98.461538-68.923077-183.138462-165.415385-204.8 3.938462-7.876923 7.876923-17.723077 7.876924-27.569231 0-29.538462-25.6-53.169231-57.107693-53.16923S452.923077 232.369231 452.923077 261.907692c0 9.846154 3.938462 19.692308 7.876923 27.569231-98.461538 21.661538-165.415385 106.338462-165.415385 204.8v108.307692L236.307692 669.538462l-1.96923 1.96923c-3.938462 5.907692-3.938462 11.815385-3.938462 21.661539 0 27.569231 21.661538 49.230769 51.2 49.230769h133.907692c9.846154 43.323077 51.2 74.830769 96.492308 74.830769 47.261538 0 86.646154-29.538462 96.492308-74.830769h133.907692c27.569231 0 51.2-21.661538 51.2-49.230769-3.938462-7.876923-5.907692-13.784615-7.876923-19.692308zM512 246.153846c11.815385 0 19.692308 7.876923 19.692308 17.723077s-7.876923 17.723077-19.692308 17.723077-19.692308-7.876923-19.692308-17.723077 7.876923-17.723077 19.692308-17.723077z m0 533.661539c-23.630769 0-43.323077-13.784615-49.230769-33.476923h100.430769c-9.846154 19.692308-29.538462 33.476923-51.2 33.476923z m222.523077-104.369231c0 7.876923-5.907692 13.784615-13.784615 13.784615H303.261538c-7.876923 0-13.784615-7.876923-13.784615-13.784615v-3.938462l55.138462-61.046154c1.969231-1.969231 1.969231-7.876923 1.96923-9.846153v-104.369231c0-88.615385 72.861538-159.507692 163.446154-159.507692s163.446154 70.892308 163.446154 159.507692v104.369231c1.969231 3.938462 1.969231 7.876923 5.907692 9.846153l55.138462 61.046154v3.938462z"  ></path><path d="M923.569231 29.538462H100.430769c-39.384615 0-72.861538 33.476923-72.861538 72.861538V925.538462c0 39.384615 33.476923 72.861538 72.861538 72.861538h823.138462c39.384615 0 72.861538-33.476923 72.861538-72.861538V102.4c0-41.353846-31.507692-72.861538-72.861538-72.861538z m-5.907693 846.76923c0 21.661538-17.723077 41.353846-41.353846 41.353846H149.661538c-21.661538 0-41.353846-17.723077-41.353846-41.353846V149.661538c0-21.661538 17.723077-41.353846 41.353846-41.353846h726.646154c21.661538 0 41.353846 17.723077 41.353846 41.353846v726.646154z"  ></path></symbol><symbol id="icon-shebeibaoyang" viewBox="0 0 1024 1024"><path d="M759.025791 192.027246c0 35.310345-31.750248 63.936427-70.838655 63.936426h-425.031928c-39.088406 0-70.838655-28.626082-70.838655-63.936426v-21.360579H97.865013v767.963672h377.806159c23.97616 0 44.101604 16.202072 46.862495 37.707961l0.363275 5.013197c0 21.578544-17.945793 39.814957-41.703988 42.357883l-5.521782 0.29062H74.252129c-36.472825 0-66.987938-25.065986-70.47538-57.833404L3.413474 959.990918V149.306088c0-32.912729 27.754222-60.52164 64.009082-63.645807l6.829573-0.29062H192.316553V63.936427C192.316553 28.626082 224.066801 0 263.155208 0h425.031928c39.088406 0 70.838655 28.626082 70.838655 63.936427v21.433234h118.064425c36.472825 0 66.987938 24.99333 70.475379 57.833404l0.363275 6.103023v277.324251c0 22.595714-19.544203 41.268057-44.464878 42.575848-24.920675 1.307791-46.717185-15.112246-49.696041-37.562651l-0.29062-5.013197V170.739322h-94.45154v21.360579zM664.574251 85.369661H286.768093v85.297006h377.806158V85.297006z"  ></path><path d="M269.839471 682.666667h42.357882q42.357883 0 42.357883 42.648503t-42.357883 42.648502h-42.357882q-42.430538 0-42.430538-42.648502t42.430538-42.648503zM269.839471 426.630339h339.008372q42.430538 0 42.430538 42.721158 0 42.648503-42.430538 42.648503H269.839471q-42.430538 0-42.430538-42.648503 0-42.721158 42.430538-42.721158z"  ></path><path d="M1020.583901 841.127288c0 100.990492-81.373634 182.872712-181.637576 182.872712S657.308748 942.117781 657.308748 841.127288q0-87.331347 135.864907-269.840783 21.215269-28.480772 45.77267-59.286505 24.5574 30.805733 45.772669 59.286505Q1020.583901 753.795942 1020.583901 841.127288z m-290.620122 0q0-61.248191 108.982546-209.755073 108.982546 148.506882 108.982545 209.755073 0 45.772669-32.113523 78.104158-31.895558 32.113523-76.869022 32.113523-45.046119 0-76.869023-32.113523Q729.963779 886.899957 729.963779 841.127288z"  ></path></symbol></svg>',(e=>{var c=(t=(t=document.getElementsByTagName("script"))[t.length-1]).getAttribute("data-injectcss"),t=t.getAttribute("data-disable-injectsvg");if(!t){var a,h,l,n,i,o=function(c,t){t.parentNode.insertBefore(c,t)};if(c&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(c){console&&console.log(c)}}a=function(){var c,t=document.createElement("div");t.innerHTML=e._iconfont_svg_string_,(t=t.getElementsByTagName("svg")[0])&&(t.setAttribute("aria-hidden","true"),t.style.position="absolute",t.style.width=0,t.style.height=0,t.style.overflow="hidden",t=t,(c=document.body).firstChild?o(t,c.firstChild):c.appendChild(t))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),a()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(l=a,n=e.document,i=!1,d(),n.onreadystatechange=function(){"complete"==n.readyState&&(n.onreadystatechange=null,s())})}function s(){i||(i=!0,l())}function d(){try{n.documentElement.doScroll("left")}catch(c){return void setTimeout(d,50)}s()}})(window);
\ No newline at end of file
diff --git a/src/assets/terminal/iconfont.json b/src/assets/terminal/iconfont.json
new file mode 100644
index 0000000..33e08a8
--- /dev/null
+++ b/src/assets/terminal/iconfont.json
@@ -0,0 +1,58 @@
+{
+  "id": "",
+  "name": "",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "147946951",
+      "name": "涓婄彮",
+      "font_class": "shangban",
+      "unicode": "ee17",
+      "unicode_decimal": 60951
+    },
+    {
+      "icon_id": "147949830",
+      "name": "鏁呴殰鍋滄満",
+      "font_class": "guzhangtingji",
+      "unicode": "e694",
+      "unicode_decimal": 59028
+    },
+    {
+      "icon_id": "147949831",
+      "name": "璁惧鏁呴殰鎶ヤ慨",
+      "font_class": "shebeiguzhangbaoxiu",
+      "unicode": "e72a",
+      "unicode_decimal": 59178
+    },
+    {
+      "icon_id": "147949832",
+      "name": "璁惧鐐规绠$悊",
+      "font_class": "shebeidianjianguanli",
+      "unicode": "e604",
+      "unicode_decimal": 58884
+    },
+    {
+      "icon_id": "147950056",
+      "name": "閰嶉獙鏀跺悎鏍�",
+      "font_class": "peiyanshouhege",
+      "unicode": "e65d",
+      "unicode_decimal": 58973
+    },
+    {
+      "icon_id": "147950057",
+      "name": "鍛煎彨",
+      "font_class": "hujiao",
+      "unicode": "e818",
+      "unicode_decimal": 59416
+    },
+    {
+      "icon_id": "147950058",
+      "name": "璁惧淇濆吇",
+      "font_class": "shebeibaoyang",
+      "unicode": "e639",
+      "unicode_decimal": 58937
+    }
+  ]
+}
diff --git a/src/assets/terminal/iconfont.ttf b/src/assets/terminal/iconfont.ttf
new file mode 100644
index 0000000..475b61d
--- /dev/null
+++ b/src/assets/terminal/iconfont.ttf
Binary files differ
diff --git a/src/assets/terminal/maintenance.svg b/src/assets/terminal/maintenance.svg
deleted file mode 100644
index 1167291..0000000
--- a/src/assets/terminal/maintenance.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1749021394243" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="74746" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M759.025791 192.027246c0 35.310345-31.750248 63.936427-70.838655 63.936426h-425.031928c-39.088406 0-70.838655-28.626082-70.838655-63.936426v-21.360579H97.865013v767.963672h377.806159c23.97616 0 44.101604 16.202072 46.862495 37.707961l0.363275 5.013197c0 21.578544-17.945793 39.814957-41.703988 42.357883l-5.521782 0.29062H74.252129c-36.472825 0-66.987938-25.065986-70.47538-57.833404L3.413474 959.990918V149.306088c0-32.912729 27.754222-60.52164 64.009082-63.645807l6.829573-0.29062H192.316553V63.936427C192.316553 28.626082 224.066801 0 263.155208 0h425.031928c39.088406 0 70.838655 28.626082 70.838655 63.936427v21.433234h118.064425c36.472825 0 66.987938 24.99333 70.475379 57.833404l0.363275 6.103023v277.324251c0 22.595714-19.544203 41.268057-44.464878 42.575848-24.920675 1.307791-46.717185-15.112246-49.696041-37.562651l-0.29062-5.013197V170.739322h-94.45154v21.360579zM664.574251 85.369661H286.768093v85.297006h377.806158V85.297006z" p-id="74747" fill="#ffffff"></path><path d="M269.839471 682.666667h42.357882q42.357883 0 42.357883 42.648503t-42.357883 42.648502h-42.357882q-42.430538 0-42.430538-42.648502t42.430538-42.648503zM269.839471 426.630339h339.008372q42.430538 0 42.430538 42.721158 0 42.648503-42.430538 42.648503H269.839471q-42.430538 0-42.430538-42.648503 0-42.721158 42.430538-42.721158z" p-id="74748" fill="#ffffff"></path><path d="M1020.583901 841.127288c0 100.990492-81.373634 182.872712-181.637576 182.872712S657.308748 942.117781 657.308748 841.127288q0-87.331347 135.864907-269.840783 21.215269-28.480772 45.77267-59.286505 24.5574 30.805733 45.772669 59.286505Q1020.583901 753.795942 1020.583901 841.127288z m-290.620122 0q0-61.248191 108.982546-209.755073 108.982546 148.506882 108.982545 209.755073 0 45.772669-32.113523 78.104158-31.895558 32.113523-76.869022 32.113523-45.046119 0-76.869023-32.113523Q729.963779 886.899957 729.963779 841.127288z" p-id="74749" fill="#ffffff"></path></svg>
\ No newline at end of file
diff --git a/src/assets/terminal/passRate.svg b/src/assets/terminal/passRate.svg
deleted file mode 100644
index 9c56a75..0000000
--- a/src/assets/terminal/passRate.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1749006119453" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="49554" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M544 972.8v-44.8H115.2c-19.2 0-32-12.8-32-32V102.4c0-19.2 12.8-32 32-32h723.2c19.2 0 32 12.8 32 32v403.2h64V102.4c0-51.2-44.8-96-96-96H115.2C64 6.4 19.2 51.2 19.2 102.4V896c0 51.2 44.8 96 96 96h435.2c0-6.4-6.4-12.8-6.4-19.2z" p-id="49555" fill="#ffffff"></path><path d="M876.8 505.6c0 19.2 12.8 32 32 32s32-12.8 32-32-12.8-32-32-32-32 12.8-32 32zM518.4 960c0 19.2 12.8 32 32 32s32-12.8 32-32-12.8-32-32-32-32 12.8-32 32zM358.4 697.6H198.4c-19.2 0-32-12.8-32-32s12.8-32 32-32h160c19.2 0 32 12.8 32 32s-12.8 32-32 32z m371.2-332.8H569.6c-19.2 0-32-12.8-32-32s12.8-32 32-32h160c19.2 0 32 12.8 32 32s-19.2 32-32 32z m64-128h-256c-19.2 0-32-12.8-32-32s12.8-32 32-32h256c19.2 0 32 12.8 32 32s-19.2 32-32 32z m-352 588.8h-256c-19.2 0-32-12.8-32-32s12.8-32 32-32h256c19.2 0 32 12.8 32 32s-19.2 32-32 32z m345.6-243.2c-108.8 0-198.4 89.6-198.4 198.4s89.6 198.4 198.4 198.4 198.4-89.6 198.4-198.4-83.2-198.4-198.4-198.4z m147.2 134.4L755.2 896c-6.4 6.4-12.8 6.4-12.8 0l-25.6-25.6-76.8-76.8c-6.4-6.4-6.4-12.8 0-12.8l25.6-25.6c6.4-6.4 12.8-6.4 12.8 0l70.4 70.4 147.2-147.2c6.4-6.4 12.8-6.4 12.8 0l25.6 25.6c6.4 0 6.4 6.4 0 12.8z m-268.8-224h-64c-19.2 0-32-12.8-32-32s12.8-32 32-32h64c19.2 0 32 12.8 32 32s-12.8 32-32 32zM371.2 345.6c12.8-6.4 19.2 0 25.6 0 12.8 0 19.2 0 32-6.4 19.2-6.4 32-12.8 38.4-25.6 12.8-12.8 19.2-19.2 19.2-32s0-19.2-12.8-25.6h-6.4l-25.6 6.4h-12.8l-19.2-25.6 12.8-32 38.4-12.8c6.4 0 12.8 0 12.8-6.4v-12.8c0-6.4-6.4-6.4-6.4-6.4-12.8-6.4-25.6-12.8-38.4-12.8-12.8-6.4-32-6.4-44.8 0-25.6 6.4-38.4 19.2-57.6 44.8 0 6.4-12.8 38.4-6.4 64l-12.8 12.8-44.8-44.8v-6.4c0-6.4 0-6.4 6.4-6.4v-6.4c0-6.4 6.4-6.4 12.8-12.8h19.2c6.4 0 12.8 0 19.2-6.4 0 0 0-12.8-6.4-19.2-19.2-6.4-32-19.2-51.2-19.2-12.8 0-25.6 0-44.8 19.2h-12.8c-6.4-6.4-19.2 0-19.2 0l-38.4 32s-6.4 6.4-6.4 12.8 0 6.4 6.4 12.8h-12.8v6.4H128l-19.2 19.2s-6.4 6.4-6.4 12.8 0 6.4 6.4 12.8l51.2 51.2s6.4 6.4 12.8 6.4 6.4 0 12.8-6.4l6.4-19.2c6.4 0 6.4-6.4 6.4-12.8h6.4l44.8 44.8L147.2 448s-6.4 6.4-6.4 12.8 0 6.4 6.4 12.8l38.4 38.4s12.8 0 19.2-6.4l102.4-102.4L416 512c6.4 6.4 6.4 6.4 12.8 6.4s6.4 0 12.8-6.4l38.4-38.4s6.4-6.4 6.4-12.8 0-6.4-6.4-12.8L371.2 345.6zM217.6 256c0-6.4 0-6.4-6.4-6.4H192c-6.4 0-6.4 6.4-6.4 6.4-6.4 6.4-6.4 12.8-6.4 19.2v6.4h-6.4L147.2 256h6.4c12.8 0 12.8-6.4 19.2-6.4h6.4s0-6.4 6.4-6.4v-6.4c0-6.4 6.4-6.4 0-12.8 0 0 0-6.4-6.4-6.4l12.8-19.2c6.4 6.4 19.2 6.4 19.2 0h12.8c6.4 0 6.4 0 12.8-6.4s19.2-6.4 19.2-12.8c0 6.4-6.4 12.8-12.8 25.6v12.8l-12.8 6.4v6.4c0 6.4 0 12.8 6.4 19.2l51.2 51.2-19.2 12.8-51.2-57.6zM192 460.8L179.2 448l172.8-172.8c6.4-6.4 6.4-12.8 6.4-19.2v-6.4c-6.4-19.2 0-32 0-44.8 6.4-12.8 19.2-19.2 32-25.6l-6.4 6.4-12.8 51.2c0 6.4 0 12.8 6.4 19.2l38.4 38.4c6.4 6.4 6.4 6.4 12.8 6.4h-32c-6.4 0-12.8 0-19.2-6.4-6.4-6.4-12.8 0-19.2 0L192 460.8z m236.8 0L326.4 364.8l19.2-19.2L441.6 448l-12.8 12.8z" p-id="49556" fill="#ffffff"></path></svg>
\ No newline at end of file
diff --git a/src/assets/terminal/spotCheck.svg b/src/assets/terminal/spotCheck.svg
deleted file mode 100644
index 7432b59..0000000
--- a/src/assets/terminal/spotCheck.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1749005921157" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="30430" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M791.23684 1023.988284H232.710439A230.479197 230.479197 0 0 1 0.018225 791.230982V232.70458A230.479197 230.479197 0 0 1 232.710439 0.012367h558.526401a230.479197 230.479197 0 0 1 232.692213 232.692213v558.526402a230.479197 230.479197 0 0 1-232.692213 232.757302zM232.710439 93.089252A143.195208 143.195208 0 0 0 93.09511 232.70458v558.526402A143.195208 143.195208 0 0 0 232.710439 930.781221h558.526401a143.195208 143.195208 0 0 0 139.550239-139.550239V232.70458a143.195208 143.195208 0 0 0-139.550239-139.615328H232.710439z" p-id="30431" fill="#ffffff"></path><path d="M791.23684 372.384997h-186.153771a46.538443 46.538443 0 1 1 0-93.076885h186.153771a46.538443 46.538443 0 1 1 0 93.076885z m0 372.372631h-186.153771a46.538443 46.538443 0 1 1 0-93.076886h186.153771a46.538443 46.538443 0 1 1 0 93.076886zM456.094964 260.692735L297.864258 437.538817a34.88756 34.88756 0 0 1-55.846131 0l-46.538443-55.846131a79.538429 79.538429 0 0 1 0-65.088731 34.88756 34.88756 0 0 1 55.846132 0l27.923065 27.923065 130.177462-148.923016a42.307675 42.307675 0 0 1 46.538443 0 55.455599 55.455599 0 0 1 0.130178 65.088731z m-130.177463 577.141778a139.615328 139.615328 0 1 1 139.615329-139.615328 143.195208 143.195208 0 0 1-139.745506 139.615328z m0-186.153771a46.538443 46.538443 0 1 0 46.538443 46.538443 43.999982 43.999982 0 0 0-46.66862-46.538443z" p-id="30432" fill="#ffffff"></path></svg>
\ No newline at end of file
diff --git a/src/assets/terminal/work.svg b/src/assets/terminal/work.svg
deleted file mode 100644
index e969d16..0000000
--- a/src/assets/terminal/work.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1749004629199" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5303" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M870.182019 205.005158h-107.493073a255.935888 255.935888 0 0 0-501.63434 0H153.561533a153.561533 153.561533 0 0 0-153.561533 153.561533v511.871776a153.561533 153.561533 0 0 0 153.561533 153.561533h716.620486a153.561533 153.561533 0 0 0 153.561533-153.561533V358.566691a153.561533 153.561533 0 0 0-153.561533-153.561533z m-358.310243-102.374355a153.561533 153.561533 0 0 1 144.347841 102.374355H368.547679A153.561533 153.561533 0 0 1 511.871776 102.630803zM153.561533 307.379513h716.620486a51.187178 51.187178 0 0 1 51.187178 51.187178v102.374355H102.374355V358.566691a51.187178 51.187178 0 0 1 51.187178-51.187178z m716.620486 614.246132H153.561533a51.187178 51.187178 0 0 1-51.187178-51.187178v-307.123066h358.310244v51.187178a51.187178 51.187178 0 0 0 102.374355 0v-51.187178h358.310243v307.123066a51.187178 51.187178 0 0 1-51.187178 51.187178z" fill="#ffffff" p-id="5304"></path></svg>
\ No newline at end of file
diff --git a/src/components/layouts/TerminalLayout.vue b/src/components/layouts/TerminalLayout.vue
index 585a051..f334c74 100644
--- a/src/components/layouts/TerminalLayout.vue
+++ b/src/components/layouts/TerminalLayout.vue
@@ -26,7 +26,7 @@
     name: 'TerminalLayout',
     data() {
       return {
-        currentDateAndTime: null,
+        currentDateAndTime: moment().format('YYYY-MM-DD HH:mm:ss'),
         getDateAndTimeInterval: null
       }
     },
diff --git a/src/config/router.config.js b/src/config/router.config.js
index 9f2dac3..84dcc23 100644
--- a/src/config/router.config.js
+++ b/src/config/router.config.js
@@ -117,7 +117,17 @@
         path: 'spotCheck',
         name: 'equipmentSpotCheck',
         component: () => import('@/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue')
-      }
+      },
+      {
+        path: 'passRate',
+        name: 'reportPassRate',
+        component: () => import('@/views/dnc/base/modules/TerminalIndex/ReportPassRate.vue')
+      },
+      {
+        path: 'call',
+        name: 'procedureCall',
+        component: () => import('@/views/dnc/base/modules/TerminalIndex/ProcedureCall.vue')
+      },
     ]
   },
   {
diff --git a/src/views/dnc/base/TerminalIndex.vue b/src/views/dnc/base/TerminalIndex.vue
index 900da25..b1d18fb 100644
--- a/src/views/dnc/base/TerminalIndex.vue
+++ b/src/views/dnc/base/TerminalIndex.vue
@@ -10,7 +10,8 @@
         <template v-for="(item,index) in buttonList">
           <a-col :span="6" v-if="index<4">
             <div :class="'button button'+(index+1)" @click="navigateTo(item)">
-              <img :src="require(`@/assets/terminal/${item.routePath}.svg`)"/>
+              <!--<img :src="require(`@/assets/terminal/${item.routePath}.svg`)"/>-->
+              <i :class="'iconfont icon-'+item.routePath"/>
               <div>{{item.label}}</div>
             </div>
           </a-col>
@@ -21,7 +22,7 @@
         <template v-for="(item,index) in buttonList">
           <a-col :span="6" v-if="index>=4">
             <div :class="'button button'+(index+1)" @click="navigateTo(item)">
-              <img :src="require(`@/assets/terminal/${item.routePath}.svg`)"/>
+              <i :class="'iconfont icon-'+item.routePath"/>
               <div>{{item.label}}</div>
             </div>
           </a-col>
@@ -97,18 +98,20 @@
   }
 </script>
 
-<style scoped lang="less">
+<style scoped>
+  @import '~@assets/terminal/iconfont.css';
+
   .page-header {
     font-size: 2vw;
     color: #000;
     display: flex;
     justify-content: space-between;
     margin-bottom: 1vw;
+  }
 
-    span {
-      font-size: 1.3vw;
-      color: #999;
-    }
+  .page-header span {
+    font-size: 1.3vw;
+    color: #999;
   }
 
   .content-container {
@@ -117,78 +120,79 @@
     flex-direction: column;
     padding: 3% 10%;
 
-    .ant-row {
-      flex: 1;
+  }
 
-      .ant-col {
-        height: 100%;
-        display: flex;
-        justify-content: center;
-        align-items: center;
+  .ant-row {
+    flex: 1;
+  }
 
-        .button {
-          width: 9.63vw;
-          height: 9.38vw;
-          display: flex;
-          flex-direction: column;
-          justify-content: center;
-          align-items: center;
-          font-size: 1.3vw;
-          color: #fff;
-          border-radius: 1vw;
-          cursor: pointer;
-          transition: all .1s ease-in-out;
+  .ant-col {
+    height: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
 
-          img {
-            width: 2.6vw;
-            margin-bottom: 0.8vw;
-          }
+  img {
+    width: 2.6vw;
+    margin-bottom: 0.8vw;
+  }
 
-          &:hover {
-            transform: scale(1.05);
-          }
+  .button {
+    width: 9.63vw;
+    height: 9.38vw;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    font-size: 1.3vw;
+    color: #fff;
+    border-radius: 1vw;
+    cursor: pointer;
+    transition: all .1s ease-in-out;
+  }
 
-          &.button1 {
-            background: linear-gradient(top, #5ADEAD, #3BC3A6);
-            background: -webkit-linear-gradient(top, #5ADEAD, #3BC3A6);
-          }
+  .button:hover {
+    transform: scale(1.05);
+  }
 
-          &.button2 {
-            background: linear-gradient(top, #76A9FA, #5B8CF3);
-            background: -webkit-linear-gradient(top, #76A9FA, #5B8CF3);
-          }
+  .button1 {
+    background: linear-gradient(to bottom, #5ADEAD, #3BC3A6);
+    background: -webkit-linear-gradient(to bottom, #5ADEAD, #3BC3A6);
+  }
 
-          &.button3 {
-            background: linear-gradient(top, #FAB976, #FB9557);
-            background: -webkit-linear-gradient(top, #FAB976, #FB9557);
-          }
+  .button2 {
+    background: linear-gradient(to bottom, #76A9FA, #5B8CF3);
+    background: -webkit-linear-gradient(to bottom, #76A9FA, #5B8CF3);
+  }
 
-          &.button4 {
-            background: linear-gradient(top, #5FC2F9, #45A4F4);
-            background: -webkit-linear-gradient(top, #5FC2F9, #45A4F4);
-          }
+  .button3 {
+    background: linear-gradient(to bottom, #FAB976, #FB9557);
+    background: -webkit-linear-gradient(to bottom, #FAB976, #FB9557);
+  }
 
-          &.button5 {
-            background: linear-gradient(top, #62F2EA, #55D6CE);
-            background: -webkit-linear-gradient(top, #62F2EA, #55D6CE);
-          }
+  .button4 {
+    background: linear-gradient(to bottom, #5FC2F9, #45A4F4);
+    background: -webkit-linear-gradient(to bottom, #5FC2F9, #45A4F4);
+  }
 
-          &.button6 {
-            background: linear-gradient(top, #91A0F5, #6D7CF7);
-            background: -webkit-linear-gradient(top, #91A0F5, #6D7CF7);
-          }
+  .button5 {
+    background: linear-gradient(to bottom, #62F2EA, #55D6CE);
+    background: -webkit-linear-gradient(to bottom, #62F2EA, #55D6CE);
+  }
 
-          &.button7 {
-            background: linear-gradient(top, #FF6A5A, #DB5A50);
-            background: -webkit-linear-gradient(top, #FF6A5A, #DB5A50);
-          }
+  .button6 {
+    background: linear-gradient(to bottom, #91A0F5, #6D7CF7);
+    background: -webkit-linear-gradient(to bottom, #91A0F5, #6D7CF7);
+  }
 
-          &.button8 {
-            background: linear-gradient(top, #FFF248, #EADE46);
-            background: -webkit-linear-gradient(top, #FFF248, #EADE46);
-          }
-        }
-      }
-    }
+  .button7 {
+    background: linear-gradient(to bottom, #FF6A5A, #DB5A50);
+    background: -webkit-linear-gradient(to bottom, #FF6A5A, #DB5A50);
+  }
+
+  .button8 {
+    background: linear-gradient(to bottom, #FFF248, #EADE46);
+    background: -webkit-linear-gradient(to bottom, #FFF248, #EADE46);
   }
 </style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue b/src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue
index a1503d1..39ef859 100644
--- a/src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue
+++ b/src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue
@@ -39,7 +39,7 @@
       </div>
 
       <div class="button-container">
-        <a-button @click="handleSubmit" icon="check" :loading="loading">淇濆瓨</a-button>
+        <a-button @click="handleSubmit" icon="check" :loading="loading" type="primary">淇濆瓨</a-button>
       </div>
     </div>
   </div>
@@ -115,6 +115,10 @@
 
             setTimeout(() => {
               that.loading = false
+              that.$notification.success({
+                message: '娑堟伅',
+                description: '淇濆瓨鎴愬姛锛�'
+              })
             }, 2000)
           } else {
             return false
@@ -132,6 +136,7 @@
     flex-direction: column;
     justify-content: center;
     align-items: center;
+    overflow: hidden;
 
     .check-content-container {
       display: flex;
diff --git a/src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue b/src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue
index 9ca8f85..18b4f97 100644
--- a/src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue
+++ b/src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue
@@ -4,124 +4,194 @@
 
     <a-tabs default-active-key="1">
       <a-tab-pane tab="鎵撳崱涓婁笅鐝�" key="1" dataset="first">
-        <a-space>
-          <div>璁惧鍚嶇О锛�</div>
-          <a-select style="width: 250px">
+        <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-row>
+            <a-col :span="24">
+              <a-form-model-item label="璁惧鍚嶇О" prop="equipmentIdList">
+                <a-select v-model="model.equipmentIdList" mode="multiple" placeholder="璇烽�夋嫨璁惧" :maxTagCount="3"
+                          allow-clear>
+                  <a-select-option v-for="item in equipmentList" :key="item.equipmentId">
+                    {{item.equipmentId+`[${item.equipmentName}]`}}
+                  </a-select-option>
+                </a-select>
+              </a-form-model-item>
+            </a-col>
+          </a-row>
 
-          </a-select>
-        </a-space>
+          <div style="text-align: center;margin-top: 150px">
+            <a-space>
+              <a-button size="large" type="primary" @click="handleClockInAndOut('In',1)" :loading="clockInLoading1"
+                        :disabled="clockOutLoading1||clockInLoading2||clockOutLoading2">鏃╃彮涓婄彮
+              </a-button>
+              <a-button size="large" type="primary" @click="handleClockInAndOut('Out',1)" :loading="clockOutLoading1"
+                        :disabled="clockInLoading1||clockInLoading2||clockOutLoading2">
+                鏃╃彮涓嬬彮
+              </a-button>
+              <a-button size="large" type="primary" @click="handleClockInAndOut('In',2)" :loading="clockInLoading2"
+                        :disabled="clockOutLoading1||clockInLoading1||clockOutLoading2">鏅氱彮涓婄彮
+              </a-button>
+              <a-button size="large" type="primary" @click="handleClockInAndOut('Out',2)" :loading="clockOutLoading2"
+                        :disabled="clockOutLoading1||clockInLoading2||clockInLoading1">
+                鏅氱彮涓嬬彮
+              </a-button>
+            </a-space>
+          </div>
+        </a-form-model>
 
 
-        <div class="button">涓婄彮</div>
       </a-tab-pane>
 
       <a-tab-pane tab="褰撳墠璁惧鐘舵��" key="2">
-        <a-table :dataSource="dataSource" :columns="columns" rowKey="id" bordered :pagination="false"/>
+        <a-table :dataSource="dataSource" :columns="columns" rowKey="id" bordered :pagination="false"
+                 :loading="loading"/>
       </a-tab-pane>
     </a-tabs>
   </div>
 </template>
 
 <script>
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import { getAction, postAction } from '@/api/manage'
+  import moment from 'moment'
+
   export default {
     name: 'EquipmentStartWork',
+    mixins: [JeecgListMixin],
     data() {
       return {
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 8 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 8 }
+        },
+        equipmentList: [],
         columns: [
           {
             title: '鐢ㄦ埛缂栧彿',
             align: 'center',
-            dataIndex: 'userId'
+            dataIndex: 'punchUser',
+            width: 250
           },
           {
             title: '鐢ㄦ埛鍚嶇О',
             align: 'center',
-            dataIndex: 'username'
+            dataIndex: 'punchUserRealName'
           },
           {
             title: '璁惧缂栧彿',
             align: 'center',
-            dataIndex: 'equipmentId'
+            dataIndex: 'equipmentId',
+            width: 200
+          },
+          {
+            title: '鐝',
+            align: 'center',
+            dataIndex: 'shiftScheduleName',
+            width: 150
           },
           {
             title: '涓婄彮鎵撳崱鏃堕棿',
             align: 'center',
-            dataIndex: 'startWorkTime'
+            dataIndex: 'checkInTime'
           },
           {
             title: '涓嬬彮鎵撳崱鏃堕棿',
             align: 'center',
-            dataIndex: 'finishWorkTime'
+            dataIndex: 'checkOutTime'
           }
         ],
-        dataSource: [
-          {
-            id: 1,
-            equipmentId: '3140132',
-            userId: '140016',
-            username: '鏉庨獮',
-            startWorkTime: '2023/11/13 9:29',
-            finishWorkTime: ''
-          },
-          {
-            id: 2,
-            equipmentId: '3140130',
-            userId: '140016',
-            username: '鏉庨獮',
-            startWorkTime: '2023/11/13 9:29',
-            finishWorkTime: ''
-          }
-        ],
+        validateRules: {
+          equipmentIdList: [
+            { required: true, message: '璇烽�夋嫨璁惧!', trigger: 'change' }
+          ]
+        },
+        clockInLoading1: false,
+        clockOutLoading1: false,
+        clockInLoading2: false,
+        clockOutLoading2: false,
         url: {
-          list: ''
+          equipmentList: '/mdc/mdcEquipment/getEquipmentList',
+          clockIn: '/mdcEquipmentPunch/workUp',
+          clockOut: '/mdcEquipmentPunch/workDown',
+          list: '/mdcEquipmentPunch/list'
         }
       }
     },
     created() {
+      this.getEquipmentListByApi()
+    },
+    methods: {
+      // 鑾峰彇璁惧鍒楄〃
+      getEquipmentListByApi() {
+        const that = this
+        getAction(this.url.equipmentList)
+          .then(res => {
+            if (res.success) that.equipmentList = res.result
+          })
+      },
 
+      /**
+       * 鎵撳崱涓婁笅鐝簨浠�
+       * @param clockInOrOut In涓轰笂鐝� Out涓轰笅鐝�
+       * @param shiftSchedule 1涓烘棭鐝� 2涓烘櫄鐝�
+       */
+      handleClockInAndOut(clockInOrOut, shiftSchedule) {
+        const that = this
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that['clock' + clockInOrOut + 'Loading' + shiftSchedule] = true
+            that.queryParam = {}
+            that.queryParam['shiftSchedule'] = shiftSchedule
+            that.queryParam['check' + clockInOrOut + 'Time'] = moment('2025-06-11 08:30:00').format('YYYY-MM-DD HH:mm:ss')
+            that.queryParam.equipmentId = that.model.equipmentIdList.join()
+            console.log('queryParam', that.queryParam)
+
+            postAction(that.url['clock' + clockInOrOut], that.queryParam)
+              .then(res => {
+                console.log('res', res)
+                if (res.success) {
+                  that.$notification.success({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                  that.loadData()
+                } else {
+                  that.$notification.warning({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                }
+              })
+              .finally(() => {
+                that['clock' + clockInOrOut + 'Loading' + shiftSchedule] = false
+              })
+          } else {
+            return false
+          }
+        })
+      }
     }
   }
 </script>
 
 <style scoped lang="less">
-  .full-screen-container {
-    padding: 24px;
+  /deep/ .ant-tabs {
+    flex: 1;
     display: flex;
     flex-direction: column;
 
-    /deep/ .ant-tabs {
+    .ant-tabs-content {
+      width: 100%;
       flex: 1;
-      display: flex;
-      flex-direction: column;
 
-      .ant-tabs-content {
-        width: 100%;
-        flex: 1;
-
-        .ant-tabs-tabpane[dataset='first'] {
-          display: flex;
-          flex-direction: column;
-          justify-content: center;
-          align-items: center;
-
-          .button {
-            font-weight: bold;
-            padding: 40px 80px;
-            border: 1px solid rgba(0, 0, 0, .2);
-            border-radius: 10px;
-            margin-top: 200px;
-            cursor: pointer;
-            box-shadow: 6px 6px 16px rgba(0, 0, 0, 0.2),
-              -6px -6px 16px rgba(255, 255, 255, 0.8),
-            inset 0 0 0 transparent;
-
-            &:hover {
-              box-shadow: 0 0 0 transparent,
-              inset 6px 6px 12px rgba(0, 0, 0, 0.2),
-                inset -6px -6px 12px rgba(255, 255, 255, 0.8);
-            }
-          }
-        }
+      .ant-tabs-tabpane[dataset='first'] {
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
       }
     }
   }
diff --git a/src/views/dnc/base/modules/TerminalIndex/ProcedureCall.vue b/src/views/dnc/base/modules/TerminalIndex/ProcedureCall.vue
new file mode 100644
index 0000000..a2f68d1
--- /dev/null
+++ b/src/views/dnc/base/modules/TerminalIndex/ProcedureCall.vue
@@ -0,0 +1,154 @@
+<template>
+  <div>
+    <slot name="function"/>
+
+    <div class="content-container">
+      <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item prop="equipmentIdList" label="璁惧缁�">
+              <a-select v-model="model.equipmentIdList" mode="multiple" placeholder="璇烽�夋嫨璁惧" :maxTagCount="3"
+                        allow-clear>
+                <a-select-option v-for="item in equipmentList" :key="item.equipmentId">
+                  {{item.equipmentId+`[${item.equipmentName}]`}}
+                </a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="鍛煎彨鍘熷洜" prop="callReason">
+              <a-input placeholder="璇疯緭鍏ュ懠鍙師鍥�" v-model="model.callReason" allowClear/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="鍛煎彨鐢ㄦ埛" prop="operator">
+              <a-select v-model="model.operator" placeholder="璇烽�夋嫨鍛煎彨鐢ㄦ埛">
+                <a-select-option v-for="item in userList" :key="item.id">{{item.realname+`[${item.username}]`}}
+                </a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+
+        <div style="text-align: center">
+          <a-button @click="handleSubmit" icon="phone" :loading="loading" type="primary">鍛煎彨</a-button>
+        </div>
+      </a-form-model>
+    </div>
+  </div>
+</template>
+
+<script>
+  import { getAction, postAction } from '@/api/manage'
+
+  export default {
+    name: 'ProcedureCall',
+    components: {},
+    data() {
+      return {
+        model: {},
+        equipmentList: [],
+        userList: [],
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 8 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 8 }
+        },
+        validateRules: {
+          equipmentIdList: [
+            { required: true, message: '璇烽�夋嫨璁惧!', trigger: 'change' }
+          ],
+          callReason: [
+            { required: true, message: '璇疯緭鍏ュ懠鍙師鍥�!', trigger: 'change' }
+          ],
+          operator: [
+            { required: true, message: '璇烽�夋嫨鍛煎彨鐢ㄦ埛!', trigger: 'change' }
+          ]
+        },
+        loading: false,
+        url: {
+          equipmentList: '/mdc/mdcEquipment/getEquipmentList',
+          userList: '/sys/user/list',
+          submit: '/AndonOrder/andonOrder/procedureCall'
+        }
+      }
+    },
+    created() {
+      this.getEquipmentListByApi()
+      this.getUserListByApi()
+    },
+    methods: {
+      // 鑾峰彇璁惧鍒楄〃
+      getEquipmentListByApi() {
+        const that = this
+        getAction(this.url.equipmentList)
+          .then(res => {
+            if (res.success) that.equipmentList = res.result
+          })
+      },
+
+      // 鑾峰彇鐢ㄦ埛鍒楄〃
+      getUserListByApi() {
+        const that = this
+        getAction(this.url.userList, { pageNo: 1, pageSize: 9999 })
+          .then(res => {
+            console.log('res', res)
+            if (res.success) that.userList = res.result.records
+          })
+      },
+
+      // 鎻愪氦琛ㄥ崟
+      handleSubmit() {
+        const that = this
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.loading = true
+            that.model.equipmentId = that.model.equipmentIdList.join()
+            postAction(that.url.submit, that.model)
+              .then(res => {
+                if (res.success) {
+                  that.$notification.success({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                } else {
+                  that.$notification.warning({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                }
+              })
+              .finally(() => {
+                that.loading = false
+              })
+          } else {
+            return false
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .content-container {
+    flex: 1;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+
+    /deep/ .ant-form {
+      width: 75%;
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue
index 9b684d4..c90f90a 100644
--- a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue
@@ -9,7 +9,7 @@
           <a-row :gutter="24">
             <a-col :span="5">
               <a-form-item label="璁惧">
-                <a-select placeholder="璇烽�夋嫨璁惧" v-model="queryParam.equipmentId">
+                <a-select placeholder="璇烽�夋嫨璁惧" v-model="queryParam.equipmentId" allow-clear>
                   <a-select-option v-for="item in equipmentList" :key="item.equipmentId">
                     {{item.equipmentId+`[${item.equipmentName}]`}}
                   </a-select-option>
@@ -33,7 +33,7 @@
 
             <a-col :span="5">
               <a-form-item label="鍋滄満鍘熷洜">
-                <a-select placeholder="璇烽�夋嫨鍋滄満鍘熷洜" v-model="queryParam.downtimeDescription">
+                <a-select placeholder="璇烽�夋嫨鍋滄満鍘熷洜" v-model="queryParam.downtimeDescription" allow-clear>
                   <a-select-option v-for="item in downtimeDescriptionList" :key="item.value">{{item.label}}
                   </a-select-option>
                 </a-select>
@@ -55,12 +55,11 @@
       <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
       <div class="table-operator">
         <a-button type="primary" @click="handleMaintainShutdown" :disabled="selectedRowKeys.length===0">缁存姢鍋滄満</a-button>
-        <a-button type="primary" @click="handleSplitShutdownInfo"
-                  :disabled="selectedRowKeys.length===0||selectedRowKeys.length>1">鎷嗗垎鍋滄満淇℃伅
-        </a-button>
+        <a-button type="primary" @click="handleSplitShutdownInfo" :disabled="selectionRows.length!==1">鎷嗗垎鍋滄満淇℃伅</a-button>
       </div>
 
-      <a-table :dataSource="dataSource" :columns="columns" rowKey="id" bordered :pagination="false" :loading="loading"
+      <a-table :dataSource="dataSource" :columns="columns" rowKey="id" bordered :pagination="ipagination"
+               :loading="loading" @change="handleTableChange" :customRow="customRow"
                :rowSelection="{selectedRowKeys, onChange: onSelectChange}">
         <template slot="downtimeType" slot-scope="text">
           {{ text!=null?text === 0 ? '璁″垝鍋滄満' : '闈炶鍒掑仠鏈�':'' }}
@@ -71,9 +70,8 @@
     <maintain-shutdown-modal :downtimeDescriptionList="downtimeDescriptionList" ref="maintainShutdownModal"
                              @submitSuccess="loadData"/>
 
-    <split-shutdown-info-modal ref="splitShutdownInfoModal" :selectedRow="selectionRows[0]"
-                               :downtimeDescriptionList="downtimeDescriptionList"
-                               @submitSuccess="clearSelectedRowKeysAndLoadData"/>
+    <split-shutdown-info-modal ref="splitShutdownInfoModal" :downtimeDescriptionList="downtimeDescriptionList"
+                               @submitSuccess="modalFormOk"/>
   </div>
 </template>
 
@@ -152,6 +150,7 @@
       this.getDowntimeDescriptionListByApi()
     },
     methods: {
+      // 鑾峰彇璁惧鍒楄〃
       getEquipmentListByApi() {
         const that = this
         getAction(this.url.equipmentList)
@@ -160,32 +159,77 @@
           })
       },
 
+      // 鑾峰彇鍋滄満鍘熷洜鍒楄〃
       getDowntimeDescriptionListByApi() {
         const that = this
         getAction(this.url.downtimeDescriptionList)
           .then(res => {
             if (res.success) that.downtimeDescriptionList = res.result
           })
+
       },
 
+      loadData(arg) {
+        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
+        if (arg === 1) {
+          this.ipagination.current = 1
+        }
+        const params = this.getQueryParams()//鏌ヨ鏉′欢
+        if (!params) return false
+        this.loading = true
+        getAction(this.url.list, params)
+          .then((res) => {
+            if (res.success) {
+              this.dataSource = res.result.records || res.result
+              this.selectionRows = this.dataSource.filter(item => this.selectedRowKeys.includes(item.id))
+              if (res.result.total) {
+                this.ipagination.total = res.result.total
+              } else {
+                this.ipagination.total = 0
+              }
+            } else {
+              this.$message.warning(res.message)
+            }
+          })
+          .finally(() => {
+            this.loading = false
+          })
+      },
+
+      customRow(record) {
+        return {
+          style: {
+            cursor: 'pointer'
+          },
+          on: {
+            click: () => {
+              let selectedRowKeys = [...this.selectedRowKeys]
+              let selectionRows = [...this.selectionRows]
+              if (selectedRowKeys.includes(record.id)) {
+                selectedRowKeys = selectedRowKeys.filter(item => item !== record.id)
+                selectionRows = selectionRows.filter(item => item.id !== record.id)
+              }
+              else {
+                selectedRowKeys.push(record.id)
+                selectionRows.push(record)
+              }
+              this.onSelectChange(selectedRowKeys, selectionRows)
+            }
+          }
+        }
+      },
+
+      // 鎵撳紑缁存姢鍋滄満绐楀彛
       handleMaintainShutdown() {
         this.$refs.maintainShutdownModal.visible = true
         this.$refs.maintainShutdownModal.model = { downTimeIds: this.selectedRowKeys.join() }
       },
 
+      // 鎵撳紑鎷嗗垎鍋滄満淇℃伅绐楀彛
       handleSplitShutdownInfo() {
         this.$refs.splitShutdownInfoModal.visible = true
         this.$refs.splitShutdownInfoModal.setDateTime(this.selectionRows[0])
-      },
-
-      clearSelectedRowKeysAndLoadData() {
-        this.selectedRowKeys = this.selectionRows = []
-        this.loadData()
       }
     }
   }
-</script>
-
-<style scoped lang="less">
-
-</style>
\ No newline at end of file
+</script>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue
index b43965e..505e752 100644
--- a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue
@@ -38,9 +38,9 @@
     methods: {
       handleSubmit() {
         const that = this
-        this.confirmLoading = true
         this.$refs.form.validate(valid => {
           if (valid) {
+            that.confirmLoading = true
             postAction(that.url.submit, that.model)
               .then(res => {
                 if (res.success) {
diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue
index c6eab92..52c6b4b 100644
--- a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue
@@ -173,9 +173,9 @@
       // 琛ㄥ崟鎻愪氦浜嬩欢
       handleSubmit() {
         const that = this
-        that.confirmLoading = true
         this.$refs.form.validate(valid => {
           if (valid) {
+            that.confirmLoading = true
             postAction(that.url.submit, that.model)
               .then(res => {
                 if (res.success) {
diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue
index 21dadd0..06e797d 100644
--- a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue
@@ -129,6 +129,7 @@
         this.model.faultType = faultReasonItem.faultCategory
         this.model.faultType_dictText = faultReasonItem.faultCategory_dictText
         this.model.faultDescription = faultReasonItem.faultDescription
+        if (this.model.faultDescription) this.$refs.form.clearValidate('faultDescription')
       },
 
       /**
@@ -199,10 +200,6 @@
 
     /deep/ .ant-form {
       width: 75%;
-
-      .ant-form-item {
-        margin-bottom: 12px;
-      }
     }
   }
 </style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportPassRate.vue b/src/views/dnc/base/modules/TerminalIndex/ReportPassRate.vue
new file mode 100644
index 0000000..beee5e6
--- /dev/null
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportPassRate.vue
@@ -0,0 +1,158 @@
+<template>
+  <div>
+    <slot name="function"/>
+
+    <div class="content-container">
+      <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item prop="equipmentIdList" label="璁惧缁�">
+              <a-select v-model="model.equipmentIdList" mode="multiple" placeholder="璇烽�夋嫨璁惧" :maxTagCount="3"
+                        allow-clear>
+                <a-select-option v-for="item in equipmentList" :key="item.equipmentId">
+                  {{item.equipmentId+`[${item.equipmentName}]`}}
+                </a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="闆朵欢鍙�" prop="partId">
+              <a-input placeholder="璇疯緭鍏ラ浂浠跺彿" v-model="model.partId" allowClear/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="鍔犲伐闆朵欢鏁伴噺" prop="processCount">
+              <a-input-number :min="0" v-model="model.processCount" placeholder="璇疯緭鍏ュ姞宸ラ浂浠舵暟閲�" style="width: 100%"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="鍚堟牸闆朵欢鏁伴噺" prop="passCount">
+              <a-input-number :min="0" v-model="model.passCount" placeholder="璇疯緭鍏ュ悎鏍奸浂浠舵暟閲�" style="width: 100%"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="鏃ユ湡" prop="theDate">
+              <a-date-picker v-model="model.theDate" value-format="YYYY-MM-DD" style="width: 100%"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <div style="text-align: center">
+          <a-button @click="handleSubmit" icon="check" :loading="loading" type="primary">淇濆瓨</a-button>
+        </div>
+      </a-form-model>
+    </div>
+  </div>
+</template>
+
+<script>
+  import { getAction, postAction } from '@/api/manage'
+
+  export default {
+    name: 'ReportPassRate',
+    data() {
+      return {
+        model: {},
+        equipmentList: [],
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 8 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 8 }
+        },
+        validateRules: {
+          equipmentIdList: [
+            { required: true, message: '璇烽�夋嫨璁惧!', trigger: 'change' }
+          ],
+          partId: [
+            { required: true, message: '璇疯緭鍏ラ浂浠跺彿!', trigger: 'change' }
+          ],
+          processCount: [
+            { required: true, message: '璇疯緭鍏ュ姞宸ラ浂浠舵暟閲�!', trigger: 'change' }
+          ],
+          passCount: [
+            { required: true, message: '璇疯緭鍏ュ悎鏍奸浂浠舵暟閲�!', trigger: 'change' }
+          ],
+          theDate: [
+            { required: true, message: '璇烽�夋嫨鏃ユ湡!', trigger: 'change' }
+          ]
+        },
+        loading: false,
+        url: {
+          equipmentList: '/mdc/mdcEquipment/getEquipmentList',
+          submit: '/mdc/mdcPartProcessInfo/add'
+        }
+      }
+    },
+    created() {
+      this.getEquipmentListByApi()
+    },
+    methods: {
+      // 鑾峰彇璁惧鍒楄〃
+      getEquipmentListByApi() {
+        const that = this
+        getAction(this.url.equipmentList)
+          .then(res => {
+            if (res.success) that.equipmentList = res.result
+          })
+      },
+
+      // 鎻愪氦琛ㄥ崟
+      handleSubmit() {
+        const that = this
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.loading = true
+            that.model.equipmentIds = that.model.equipmentIdList.join()
+            postAction(that.url.submit, that.model)
+              .then(res => {
+                if (res.success) {
+                  that.$notification.success({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                } else {
+                  that.$notification.warning({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                }
+              })
+              .finally(() => {
+                that.loading = false
+              })
+          } else {
+            return false
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .content-container {
+    flex: 1;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+
+    /deep/ .ant-form {
+      width: 75%;
+    }
+  }
+</style>
\ No newline at end of file

--
Gitblit v1.9.3