From 1e653db94c24389cc7615fd4a7ef1d63b00af534 Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期五, 13 六月 2025 11:39:32 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/tms/requirement/ToolSharpeningList .vue                                        |  111 
 src/views/tms/requirement/modules/ToolsModal.vue                                         |    6 
 src/views/tms/modules/toolLedger/InStoreDetailList.vue                                   |  109 +
 src/views/tms/modules/toolLedger/OutStoreDetailList.vue                                  |  109 +
 src/assets/terminal/iconfont.js                                                          |    1 
 src/views/tms/modules/toolLedger/ToolSharpenList.vue                                     |  101 +
 src/views/dnc/base/modules/TerminalIndex/ReportPassRate.vue                              |  158 +
 src/assets/terminal/iconfont.ttf                                                         |    0 
 src/views/tms/lossBound/LossboundDetailList.vue                                          |    2 
 src/views/dnc/base/TerminalIndex.vue                                                     |  140 
 src/views/tms/modules/inboundOrder/InboundOrderModel.vue                                 |   27 
 src/views/tms/modules/baseTools/ToolsConfigPropertyModal.vue                             |  134 
 src/views/mdc/base/EfficiencyPunchReport.vue                                             |  216 ++
 src/assets/terminal/iconfont.json                                                        |   58 
 src/assets/terminal/demo.css                                                             |  539 +++++
 src/views/tms/lossBound/modules/LossboundModal.vue                                       |   10 
 src/views/eam/repair/EamReportRepairList.vue                                             |   22 
 src/views/tms/modules/baseTools/ParaTurningToolsModal.vue                                |  131 
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue                        |    5 
 src/views/tms/modules/baseTools/ParaThreadingToolModal.vue                               |  135 
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue  |   77 
 src/views/tms/modules/baseTools/BaseToolsListRight.vue                                   |   78 
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue |  245 +
 src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue                     |  287 ++
 src/views/tms/modules/baseTools/ParaCommonToolModal.vue                                  |  136 
 src/views/tms/modules/toolLedger/ToolLedgerListRight.vue                                 |  516 +++++
 src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue                          |  198 +
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue                        |  196 +
 src/views/dnc/base/modules/TerminalIndex/ProcedureCall.vue                               |  154 +
 src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue                                  |  323 +++
 src/components/layouts/TerminalLayout.vue                                                |    2 
 src/views/mdc/base/modules/EfficiencyPunchReport/EfficiencyPunchReportModal.vue          |  214 ++
 src/views/tms/modules/baseTools/ParaMillToolModal.vue                                    |  134 
 src/views/tms/lossBound/LossboundList.vue                                                |   11 
 src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue                          |    7 
 src/config/router.config.js                                                              |   12 
 src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue                            |    2 
 src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue                                |   85 
 src/views/tms/modules/baseTools/ParaBladeModal.vue                                       |  129 
 src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue                            |    2 
 src/views/tms/modules/inbound/InboundModel.vue                                           |   28 
 src/views/tms/requirement/modules/ToolsSharpeningModal.vue                               |  112 
 src/assets/terminal/iconfont.css                                                         |   41 
 src/views/tms/modules/toolLedger/StocktakingList.vue                                     |  126 +
 src/assets/terminal/demo_index.html                                                      |  345 +++
 /dev/null                                                                                |    1 
 src/views/tms/modules/baseTools/ParaHoleToolsModal.vue                                   |  134 
 src/views/tms/ToolLedgerList.vue                                                         |   39 
 src/views/eam/repair/EamRepairOrderList.vue                                              |   31 
 src/views/tms/modules/toolLedger/ToolLossList.vue                                        |  106 +
 50 files changed, 4,839 insertions(+), 946 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..2cb2e45 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: 'punchUserUserName',
+            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().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 0f5f685..ce7f0ba 100644
--- a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue
@@ -7,33 +7,36 @@
       <div class="table-page-search-wrapper">
         <a-form layout="inline">
           <a-row :gutter="24">
-            <a-col :span="4">
+            <a-col :span="5">
               <a-form-item label="璁惧">
-                <a-select placeholder="璇烽�夋嫨璁惧" v-model="queryParam.equipmentId"></a-select>
+                <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>
+                </a-select>
               </a-form-item>
             </a-col>
 
-            <a-col :span="4">
+            <a-col :span="5">
               <a-form-item label="寮�濮嬫椂闂�">
-                <a-date-picker style="width: 100%" show-time placeholder="璇烽�夋嫨寮�濮嬫椂闂�" v-model="queryParam.startTime"/>
+                <a-date-picker style="width: 100%" show-time placeholder="璇烽�夋嫨寮�濮嬫椂闂�" value-format="YYYY-MM-DD HH:mm:ss"
+                               v-model="queryParam.startDate"/>
               </a-form-item>
             </a-col>
 
-            <a-col :span="4">
+            <a-col :span="5">
               <a-form-item label="缁撴潫鏃堕棿">
-                <a-date-picker style="width: 100%" show-time placeholder="璇烽�夋嫨缁撴潫鏃堕棿" v-model="queryParam.endTime"/>
+                <a-date-picker style="width: 100%" show-time placeholder="璇烽�夋嫨缁撴潫鏃堕棿" value-format="YYYY-MM-DD HH:mm:ss"
+                               v-model="queryParam.endDate"/>
               </a-form-item>
             </a-col>
 
-            <a-col :span="4">
+            <a-col :span="5">
               <a-form-item label="鍋滄満鍘熷洜">
-                <a-select placeholder="璇烽�夋嫨鍋滄満鍘熷洜" v-model="queryParam.closeReason"></a-select>
-              </a-form-item>
-            </a-col>
-
-            <a-col :span="4">
-              <a-form-item label="鍋滄満鏃堕棿">
-                <a-date-picker style="width: 100%" placeholder="璇烽�夋嫨鍋滄満鏃堕棿" v-model="queryParam.closeTime"/>
+                <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>
               </a-form-item>
             </a-col>
 
@@ -51,17 +54,30 @@
 
       <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
       <div class="table-operator">
-        <a-button type="primary" @click="handleMaintainShutdown">缁存姢鍋滄満</a-button>
-        <a-button type="primary" @click="handleSplitShutdownInfo">鎷嗗垎鍋滄満淇℃伅</a-button>
+        <a-button type="primary" @click="handleMaintainShutdown" :disabled="selectedRowKeys.length===0">缁存姢鍋滄満</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"
-               :rowSelection="{selectedRowKeys, onChange: onSelectChange}"/>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i>宸查�夋嫨&nbsp;<a style="font-weight: 600">{{
+        selectedRowKeys.length }}</a>椤�&nbsp;&nbsp;
+        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
+      </div>
+
+      <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 ? '璁″垝鍋滄満' : '闈炶鍒掑仠鏈�':'' }}
+        </template>
+      </a-table>
     </a-card>
 
-    <maintain-shutdown-modal ref="maintainShutdownModal"/>
+    <maintain-shutdown-modal :downtimeDescriptionList="downtimeDescriptionList" ref="maintainShutdownModal"
+                             @submitSuccess="loadData"/>
 
-    <split-shutdown-info-modal ref="splitShutdownInfoModal"/>
+    <split-shutdown-info-modal ref="splitShutdownInfoModal" :downtimeDescriptionList="downtimeDescriptionList"
+                               @submitSuccess="modalFormOk"/>
   </div>
 </template>
 
@@ -69,6 +85,7 @@
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
   import MaintainShutdownModal from './ReportEquipmentClose/MaintainShutdownModal'
   import SplitShutdownInfoModal from './ReportEquipmentClose/SplitShutdownInfoModal'
+  import { getAction } from '@/api/manage'
 
   export default {
     name: 'ReportEquipmentClose',
@@ -76,6 +93,8 @@
     mixins: [JeecgListMixin],
     data() {
       return {
+        equipmentList: [],
+        downtimeDescriptionList: [],
         columns: [
           {
             title: '璁惧缂栧彿',
@@ -89,17 +108,19 @@
             dataIndex: 'equipmentName'
           },
           {
-            title: '鍋滄満缂栧彿',
+            title: '鍋滄満鍘熷洜',
             align: 'center',
-            dataIndex: 'shutdownId'
+            dataIndex: 'downtimeDescription'
           },
           {
             title: '鍋滄満绫诲瀷',
             align: 'center',
-            dataIndex: 'shutdownType'
+            scopedSlots: { customRender: 'downtimeType' },
+            dataIndex: 'downtimeType',
+            width: 150
           },
           {
-            title: '鍋滄満鏃堕棿',
+            title: '鍋滄満鏃堕棿(MIN)',
             align: 'center',
             width: 150,
             dataIndex: 'shutdownDuration'
@@ -108,68 +129,113 @@
             title: '寮�濮嬫椂闂�',
             align: 'center',
             width: 200,
-            dataIndex: 'startTime'
+            dataIndex: 'startDate'
           },
           {
             title: '缁撴潫鏃堕棿',
             align: 'center',
             width: 200,
-            dataIndex: 'endTime'
+            dataIndex: 'endDate'
           },
           {
             title: '褰曞叆绫诲瀷',
             align: 'center',
             width: 100,
-            dataIndex: 'recordType'
-          }
-        ],
-        dataSource: [
-          {
-            id: 1,
-            equipmentId: '3140221',
-            equipmentName: '鏁版帶鏈哄簥',
-            shutdownDuration: 360,
-            startTime: '2025-05-20 02:21:49',
-            endTime: '2525-05-20 08:21:59',
-            recordType: '鑷姩涓婃姤'
-          },
-          {
-            id: 2,
-            equipmentId: '3140221',
-            equipmentName: '鏁版帶鏈哄簥',
-            shutdownDuration: 360,
-            startTime: '2025-05-20 02:21:49',
-            endTime: '2525-05-20 08:21:59',
-            recordType: '鑷姩涓婃姤'
-          },
-          {
-            id: 3,
-            equipmentId: '3140221',
-            equipmentName: '鏁版帶鏈哄簥',
-            shutdownDuration: 360,
-            startTime: '2025-05-20 02:21:49',
-            endTime: '2525-05-20 08:21:59',
-            recordType: '鑷姩涓婃姤'
+            dataIndex: 'enterType_dictText'
           }
         ],
         url: {
-          list: ''
+          equipmentList: '/mdc/mdcEquipment/getEquipmentList',
+          downtimeDescriptionList: '/mdc/mdcDowntimeReason/reasonList',
+          list: '/mdc/operator/mdcDowntime/list'
         }
       }
     },
+    created() {
+      this.getEquipmentListByApi()
+      this.getDowntimeDescriptionListByApi()
+    },
     methods: {
-      handleMaintainShutdown() {
-        this.$refs.maintainShutdownModal.visible = true
-        this.$refs.maintainShutdownModal.model = {}
+      // 鑾峰彇璁惧鍒楄〃
+      getEquipmentListByApi() {
+        const that = this
+        getAction(this.url.equipmentList)
+          .then(res => {
+            if (res.success) that.equipmentList = res.result
+          })
       },
 
+      // 鑾峰彇鍋滄満鍘熷洜鍒楄〃
+      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])
       }
     }
   }
-</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 36053ea..505e752 100644
--- a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue
@@ -1,58 +1,69 @@
 <template>
-  <a-modal :visible="visible" title="缁存姢鍋滄満" @ok="handleSubmit" @cancel="handleCancel">
+  <j-modal :visible="visible" title="缁存姢鍋滄満" @ok="handleSubmit" @cancel="handleCancel" :confirmLoading="confirmLoading">
     <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="{span:5}" :wrapperCol="{span:18}">
-      <a-form-model-item prop="closeReason" label="鍋滄満鍘熷洜">
-        <a-select v-model="model.closeReason" placeholder="璇烽�夋嫨鍋滄満鍘熷洜">
-          <a-select-option v-for="item in closeReasonList" :key="item.id">
+      <a-form-model-item prop="reasonId" label="鍋滄満鍘熷洜">
+        <a-select v-model="model.reasonId" placeholder="璇烽�夋嫨鍋滄満鍘熷洜">
+          <a-select-option v-for="item in downtimeDescriptionList" :key="item.value">
             {{item.label}}
           </a-select-option>
         </a-select>
       </a-form-model-item>
     </a-form-model>
-  </a-modal>
+  </j-modal>
 </template>
 
 <script>
+  import { postAction } from '@/api/manage'
+
   export default {
     name: 'MaintainShutdownModal',
+    props: {
+      downtimeDescriptionList: {
+        type: Array
+      }
+    },
     data() {
       return {
         visible: false,
         model: {},
         validateRules: {
-          closeReason: [{ required: true, message: '璇烽�夋嫨鍋滄満鍘熷洜锛�' }]
+          reasonId: [{ required: true, message: '璇烽�夋嫨鍋滄満鍘熷洜锛�' }]
         },
-        closeReasonList: [
-          {
-            id: 1,
-            label: '鍚冮キ鏃堕棿浼戞伅'
-          },
-          {
-            id: 2,
-            label: '宸ヤ綔鏃堕棿浼戞伅'
-          },
-          {
-            id: 3,
-            label: '璁″垝鎬у仠鐢�'
-          },
-          {
-            id: 4,
-            label: '寰呮枡鍋滄満'
-          },
-          {
-            id: 5,
-            label: '棣栦欢璋冭瘯'
-          },
-          {
-            id: 6,
-            label: '鍒�閲忓叿鍑嗗'
-          }
-        ]
+        confirmLoading: false,
+        url: {
+          submit: '/mdc/operator/mdcDowntime/updateReason'
+        }
       }
     },
     methods: {
       handleSubmit() {
-
+        const that = this
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true
+            postAction(that.url.submit, that.model)
+              .then(res => {
+                if (res.success) {
+                  that.$notification.success({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                  that.handleCancel()
+                  that.$emit('submitSuccess')
+                } else {
+                  that.$notification.warning({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                }
+              })
+              .finally(() => {
+                that.confirmLoading = false
+              })
+          } else {
+            return false
+          }
+        })
       },
 
       handleCancel() {
diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue
index 967c357..52c6b4b 100644
--- a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue
@@ -1,113 +1,208 @@
 <template>
-  <a-modal :visible="visible" :width="800" title="鎷嗗垎鍋滄満淇℃伅" @ok="handleSubmit" @cancel="handleCancel">
-    <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="{span:8}" :wrapperCol="{span:12}">
+  <j-modal :visible="visible" :width="800" title="鎷嗗垎鍋滄満淇℃伅" @ok="handleSubmit" @cancel="handleCancel"
+           :confirmLoading="confirmLoading"
+           :maskClosable="false">
+    <a-form-model ref="form" :model="model" :rules="validateRules" :hideRequiredMark="true" :labelCol="{span:8}"
+                  :wrapperCol="{span:12}">
       <a-row>
-        <a-col :span="10">
-          <a-form-model-item prop="startTime" label="寮�濮嬫椂闂�">
-            <a-date-picker show-time value-format="YYYY-MM-DD HH:mm:ss" v-model="model.startTime"/>
+        <a-col :span="12">
+          <a-form-model-item label="寮�濮嬫椂闂�">
+            <a-date-picker disabled show-time value-format="YYYY-MM-DD HH:mm:ss" v-model="model.startDate"/>
           </a-form-model-item>
         </a-col>
       </a-row>
 
-      <div v-for="item in splitList" :key="item.title">
-        <a-divider orientation="left">{{item.title}}</a-divider>
+      <a-divider orientation="left">鎷嗗垎涓�娈�</a-divider>
 
-        <a-row>
-          <a-col :span="10">
-            <a-form-model-item prop="endTime" label="缁撴潫鏃ユ湡">
-              <a-date-picker show-time value-format="YYYY-MM-DD HH:mm:ss" v-model="item.splitParams.endTime"/>
-            </a-form-model-item>
-          </a-col>
+      <a-row>
+        <a-col :span="12">
+          <a-form-model-item label="    " :colon="false" prop="firstMiddleTime">
+            <a-date-picker show-time :showToday="false" value-format="YYYY-MM-DD HH:mm:ss"
+                           v-model="model.firstMiddleTime"
+                           @change="handleFirstMiddleTimeChange"
+                           :disabledDate="disabledDate1"/>
+          </a-form-model-item>
+        </a-col>
 
-          <a-col :span="10">
-            <a-form-model-item prop="closeReason" label="鍋滄満鍘熷洜">
-              <a-select v-model="item.splitParams.closeReason" placeholder="璇烽�夋嫨鍋滄満鍘熷洜">
-                <a-select-option v-for="item in closeReasonList" :key="item.id">
-                  {{item.label}}
-                </a-select-option>
-              </a-select>
-            </a-form-model-item>
-          </a-col>
+        <a-col :span="12">
+          <a-form-model-item label="鍋滄満鍘熷洜">
+            <a-select v-model="model.firstDowntimeDescription" placeholder="璇烽�夋嫨鍋滄満鍘熷洜">
+              <a-select-option v-for="item in downtimeDescriptionList" :key="item.value">
+                {{item.label}}
+              </a-select-option>
+            </a-select>
+          </a-form-model-item>
+        </a-col>
+      </a-row>
 
-          <a-col :span="4">
-            <a-form-model-item label="閫夋嫨">
-              <a-checkbox @change="handleCheckboxChange(item,$event)"/>
-            </a-form-model-item>
-          </a-col>
-        </a-row>
-      </div>
+      <a-divider orientation="left">鎷嗗垎浜屾</a-divider>
+
+      <a-row>
+        <a-col :span="12">
+          <a-form-model-item label="    " :colon="false">
+            <a-date-picker show-time :showToday="false" value-format="YYYY-MM-DD HH:mm:ss"
+                           v-model="model.secondMiddleTime"
+                           :disabled="!model.firstMiddleTime" :disabledDate="disabledDate2"/>
+          </a-form-model-item>
+        </a-col>
+
+        <a-col :span="12">
+          <a-form-model-item label="鍋滄満鍘熷洜">
+            <a-select v-model="model.secondDowntimeDescription" placeholder="璇烽�夋嫨鍋滄満鍘熷洜"
+                      :disabled="!model.firstMiddleTime">
+              <a-select-option v-for="item in downtimeDescriptionList" :key="item.value">
+                {{item.label}}
+              </a-select-option>
+            </a-select>
+          </a-form-model-item>
+        </a-col>
+      </a-row>
+
+      <a-divider orientation="left">鎷嗗垎涓夋</a-divider>
+
+      <a-row>
+        <a-col :span="12">
+          <a-form-model-item label="缁撴潫鏃ユ湡">
+            <a-date-picker disabled show-time value-format="YYYY-MM-DD HH:mm:ss" v-model="model.endDate"/>
+          </a-form-model-item>
+        </a-col>
+
+        <a-col :span="12">
+          <a-form-model-item label="鍋滄満鍘熷洜">
+            <a-select v-model="model.thirdDowntimeDescription" placeholder="璇烽�夋嫨鍋滄満鍘熷洜">
+              <a-select-option v-for="item in downtimeDescriptionList" :key="item.value">
+                {{item.label}}
+              </a-select-option>
+            </a-select>
+          </a-form-model-item>
+        </a-col>
+      </a-row>
     </a-form-model>
-  </a-modal>
+  </j-modal>
 </template>
 
 <script>
+  import moment from 'moment'
+  import { postAction } from '@/api/manage'
+
   export default {
     name: 'SplitShutdownInfoModal',
+    props: {
+      downtimeDescriptionList: {
+        type: Array
+      }
+    },
     data() {
       return {
         visible: false,
         model: {},
         validateRules: {
-          startTime: [{ required: true, message: '璇烽�夋嫨寮�濮嬫椂闂达紒', trigger: 'change' }]
+          firstMiddleTime: [{ required: true, message: '璇烽�夋嫨鎷嗗垎涓�娈垫椂闂达紒', trigger: 'change' }]
         },
-        closeReasonList: [
-          {
-            id: 1,
-            label: '鍚冮キ鏃堕棿浼戞伅'
-          },
-          {
-            id: 2,
-            label: '宸ヤ綔鏃堕棿浼戞伅'
-          },
-          {
-            id: 3,
-            label: '璁″垝鎬у仠鐢�'
-          },
-          {
-            id: 4,
-            label: '寰呮枡鍋滄満'
-          },
-          {
-            id: 5,
-            label: '棣栦欢璋冭瘯'
-          },
-          {
-            id: 6,
-            label: '鍒�閲忓叿鍑嗗'
-          }
-        ],
-        splitList: [
-          {
-            title: '鎷嗗垎涓�娈�',
-            splitParams: {}
-          },
-          {
-            title: '鎷嗗垎浜屾',
-            splitParams: {}
-          },
-          {
-            title: '鎷嗗垎涓夋',
-            splitParams: {}
-          }
-        ]
+        confirmLoading: false,
+        url: {
+          submit: '/mdc/operator/mdcDowntime/splitDowntime'
+        }
       }
     },
     methods: {
-      handleCheckboxChange(record, event) {
-        console.log('record', record)
-        record.splitParams.checked = event.target.checked
+      /**
+       * 璁剧疆寮�濮嬪強缁撴潫鏃ユ湡鏃堕棿
+       * @param record 鍒楄〃琛岃褰曞璞�
+       */
+      setDateTime(record) {
+        this.model = {
+          id: record.id,
+          startDate: record.startDate,
+          endDate: record.endDate
+        }
       },
 
+      /**
+       * 鎷嗗垎涓�娈垫椂闂村�煎彂鐢熸敼鍙樻椂瑙﹀彂
+       * @param value 鏀瑰彉鍚庣殑鍊�
+       */
+      handleFirstMiddleTimeChange(value) {
+        // 鑻ユ椂闂村�艰娓呯┖鏃惰Е鍙�
+        if (!value) {
+          delete this.model.secondMiddleTime
+          delete this.model.secondDowntimeDescription
+        }
+      },
+
+      /**
+       * 鎷嗗垎涓�娈电鐢ㄦ棩鏈熻寖鍥�
+       * @param current 绂佺敤鑼冨洿
+       * @returns {boolean}
+       */
+      disabledDate1(current) {
+        const { startDate, endDate, secondMiddleTime } = this.model
+        let nextEndTime
+
+        if (!secondMiddleTime) nextEndTime = endDate
+        else nextEndTime = secondMiddleTime
+
+        return current < moment(startDate).startOf('days') || current > moment(nextEndTime).endOf('days')
+      },
+
+      /**
+       * 鎷嗗垎浜屾绂佺敤鏃ユ湡鑼冨洿
+       * @param current  绂佺敤鑼冨洿
+       * @returns {boolean}
+       */
+      disabledDate2(current) {
+        const { endDate, firstMiddleTime } = this.model
+
+        return current < moment(firstMiddleTime).startOf('days') || current > moment(endDate).endOf('days')
+      },
+
+      /**
+       * 鍒涘缓绂佺敤鏃堕棿鑼冨洿鏁扮粍
+       * @param start 寮�濮嬫椂闂达紙鏃跺垎绉掞級
+       * @param end 缁撴潫鏃堕棿锛堟椂鍒嗙锛�
+       * @returns {Array}
+       */
+      handleCreateTimeRangeArray(start, end) {
+        const result = []
+        for (let i = start; i < end; i++) {
+          result.push(i)
+        }
+        return result
+      },
+
+      // 琛ㄥ崟鎻愪氦浜嬩欢
       handleSubmit() {
+        const that = this
         this.$refs.form.validate(valid => {
           if (valid) {
-
+            that.confirmLoading = true
+            postAction(that.url.submit, that.model)
+              .then(res => {
+                if (res.success) {
+                  that.$notification.success({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                  that.handleCancel()
+                  that.$emit('submitSuccess')
+                } else {
+                  that.$notification.warning({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                }
+              })
+              .finally(() => {
+                that.confirmLoading = false
+              })
+            console.log('model', this.model)
           } else {
             return false
           }
         })
       },
 
+      // 鍏抽棴寮圭獥浜嬩欢
       handleCancel() {
         this.$refs.form.clearValidate()
         this.visible = false
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
diff --git a/src/views/eam/repair/EamRepairOrderList.vue b/src/views/eam/repair/EamRepairOrderList.vue
index 5d01fd4..3869ba3 100644
--- a/src/views/eam/repair/EamRepairOrderList.vue
+++ b/src/views/eam/repair/EamRepairOrderList.vue
@@ -44,7 +44,7 @@
 
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
     <div class="table-operator" v-if="isDisplayOperation">
-      <a-button @click="handleOpenReceiveFaultModal" type="primary" icon="plus">棰嗗彇</a-button>
+      <a-button @click="handleOpenReceiveFaultModal" type="primary" icon="plus"  v-if="isShowAuth('eam:repair:collect')">棰嗗彇</a-button>
       <!--<a-button type="primary" icon="download" @click="handleExportXls('缁翠慨宸ュ崟')">瀵煎嚭</a-button>-->
       <a-dropdown v-if="selectedRowKeys.length > 0">
         <a-menu slot="overlay">
@@ -123,23 +123,34 @@
         // 琛ㄥご
         columns: [
           {
+            title: '#',
+            dataIndex: '',
+            key: 'rowIndex',
+            width: 60,
+            align: 'center',
+            customRender: function(t, r, index) {
+              return parseInt(index) + 1
+            },
+            fixed: 'left',
+          },
+          {
             title: '宸ュ崟缂栧彿',
             align: 'center',
             dataIndex: 'repairCode',
-            width: 200,
+            width: 120,
             fixed: 'left'
           },
-          // {
-          //   title: '鎶ヤ慨缂栧彿',
-          //   align: 'center',
-          //   dataIndex: 'reportId',
-          //   width: 200,
-          //   fixed: 'left'
-          // },
           {
             title: '璁惧缂栧彿',
             align: 'center',
-            dataIndex: 'equipmentId_dictText',
+            dataIndex: 'equipmentCode',
+            width: 120,
+            fixed: 'left'
+          },
+          {
+            title: '璁惧鍚嶇О',
+            align: 'center',
+            dataIndex: 'equipmentName',
             width: 200,
             fixed: 'left'
           },
diff --git a/src/views/eam/repair/EamReportRepairList.vue b/src/views/eam/repair/EamReportRepairList.vue
index 54655ba..0984200 100644
--- a/src/views/eam/repair/EamReportRepairList.vue
+++ b/src/views/eam/repair/EamReportRepairList.vue
@@ -58,7 +58,7 @@
 
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
     <div class="table-operator" v-if="isDisplayOperation">
-      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+      <a-button @click="handleAdd" type="primary" icon="plus" v-if="isShowAuth('eam:reportRepair:add')">鏂板</a-button>
       <!--<a-button type="primary" icon="download" @click="handleExportXls('鏁呴殰鎶ヤ慨')">瀵煎嚭</a-button>-->
       <!--<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"-->
       <!--@change="handleImportExcel">-->
@@ -66,7 +66,7 @@
       <!--</a-upload>-->
       <a-dropdown v-if="selectedRowKeys.length > 0">
         <a-menu slot="overlay">
-          <a-menu-item key="1" @click="batchDel">
+          <a-menu-item key="1" @click="batchDel" v-if="isShowAuth('eam:reportRepair:abolish')">
             <a-icon type="delete"/>
             浣滃簾
           </a-menu-item>
@@ -103,15 +103,15 @@
         </template>
 
         <span slot="action" slot-scope="text, record" v-if="record.reportStatus=='WAIT_REPAIR'">
-          <a @click="handleEdit(record)">缂栬緫</a>
+          <a @click="handleEdit(record)" v-if="isShowAuth('eam:reportRepair:edit')">缂栬緫</a>
 
-          <a-divider type="vertical"/>
+          <a-divider type="vertical" v-if="isShowAuth('eam:reportRepair:edit')"/>
 
-          <a @click="handleAssign(record)">鎸囨淳</a>
+          <a @click="handleAssign(record)" v-if="isShowAuth('eam:reportRepair:assign')">鎸囨淳</a>
 
-          <a-divider type="vertical"/>
+          <a-divider type="vertical" v-if="isShowAuth('eam:reportRepair:assign')"/>
 
-          <a-popconfirm title="纭畾浣滃簾鍚�?" @confirm="() => handleDelete(record.id)">
+          <a-popconfirm title="纭畾浣滃簾鍚�?" @confirm="() => handleDelete(record.id)" v-if="isShowAuth('eam:reportRepair:abolish')">
             <a>浣滃簾</a>
           </a-popconfirm>
         </span>
@@ -178,7 +178,13 @@
           {
             title: '璁惧缂栧彿',
             align: 'center',
-            dataIndex: 'equipmentId_dictText',
+            dataIndex: 'equipmentCode',
+            width: 200
+          },
+          {
+            title: '璁惧鍚嶇О',
+            align: 'center',
+            dataIndex: 'equipmentName',
             width: 200
           },
           {
diff --git a/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue b/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue
index 4384150..50aebc3 100644
--- a/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue
+++ b/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue
@@ -57,45 +57,179 @@
           </a-col>
         </a-row>
 
-        <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">鏄惁闇�瑕侀鐢ㄥ浠�</a-divider>
-
         <a-tabs v-model="activeTabKey">
-          <a-tab-pane key="1" tab="棰嗙敤澶囦欢">
-            <a-row>
-              <a-col :span="twoColSpan*2">
-                <a-form-model-item label="鏄惁闇�瑕侀鐢ㄥ浠�" prop="isUseSpare">
-                  <a-radio-group v-model="tableRowRecord.isUseSpare"
-                                 :disabled="isDisableUseSpare">
-                    <a-radio :value="1">鏄�</a-radio>
-                    <a-radio :value="0">鍚�</a-radio>
-                  </a-radio-group>
-                </a-form-model-item>
-              </a-col>
+          <a-tab-pane key="1" tab="缁翠慨澶勭悊">
 
-              <template v-if="tableRowRecord.isUseSpare===0">
+            <div v-if="repairConfirm">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">缁翠慨纭</a-divider>
+
+              <a-row :gutter="24">
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="repairConfirm" label="鏄惁鍐呴儴鍙淮淇�">
+                    <j-dict-select-tag type='radio' v-model='tableRowRecord.repairConfirm' dictCode='yn'
+                                       placeholder="璇烽�夋嫨" :disabled="disableSubmit || tableRowRecord.repairStatus !== 'WAIT_INTERNAL_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="repairConfirmComment" label="缁翠慨纭鎰忚">
+                    <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="tableRowRecord.repairConfirmComment"
+                                :readOnly="disableSubmit || tableRowRecord.repairStatus !== 'WAIT_INTERNAL_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="underInternalRepair && tableRowRecord.repairConfirm === '1'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">缁翠慨缁撴灉</a-divider>
+              <a-row>
                 <a-col :span="twoColSpan*2">
-                  <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason">
-                    <a-input :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_REPAIR'"
+                  <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-input :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
                              v-model="tableRowRecord.faultReason" rows="4"
                              placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/>
                   </a-form-model-item>
                 </a-col>
                 <a-col :span="twoColSpan*2">
-                  <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription">
-                    <a-textarea :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_REPAIR'"
+                  <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-textarea :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
                                 v-model="tableRowRecord.repairDescription"
                                 placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/>
                   </a-form-model-item>
                 </a-col>
                 <a-col :span="twoColSpan*2">
-                  <a-form-model-item label="缁翠慨鍥剧墖">
+                  <a-form-model-item label="缁翠慨鍥剧墖" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
                     <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3"
-                               :disabled="disableSubmit||tableRowRecord.repairStatus!=='UNDER_REPAIR'"
+                               :disabled="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
                                v-model="tableRowRecord.imageFiles"/>
                   </a-form-model-item>
                 </a-col>
-              </template>
-            </a-row>
+              </a-row>
+            </div>
+            <div v-if="leaderConfirm && tableRowRecord.repairConfirm === '0'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">棰嗗纭</a-divider>
+
+              <a-row :gutter="24">
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leaderConfirm" label="鏄惁鍚屾剰澶栭儴缁翠慨">
+                    <j-dict-select-tag type='radio' v-model='tableRowRecord.leaderConfirm' dictCode='approved_rejected'
+                                       placeholder="璇烽�夋嫨" :disabled="disableSubmit || tableRowRecord.repairStatus!=='WAIT_LEADER_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leaderConfirmComment" label="纭鎰忚">
+                    <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="tableRowRecord.leaderConfirmComment"
+                                :readOnly="disableSubmit || tableRowRecord.repairStatus!=='WAIT_LEADER_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="underInternalRepair && tableRowRecord.leaderConfirm === '2'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">缁翠慨缁撴灉</a-divider>
+              <a-row>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-input :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
+                             v-model="tableRowRecord.faultReason" rows="4"
+                             placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-textarea :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
+                                v-model="tableRowRecord.repairDescription"
+                                placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨鍥剧墖" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3"
+                               :disabled="disableSubmit||tableRowRecord.repairStatus!=='UNDER_INTERNAL_REPAIR'"
+                               v-model="tableRowRecord.imageFiles"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="externalConfirm && tableRowRecord.leaderConfirm === '1'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">鏈哄姩鍔炵‘璁�</a-divider>
+
+              <a-row :gutter="24">
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="externalConfirm" label="鏈哄姩鍔炴槸鍚﹀彲缁翠慨">
+                    <j-dict-select-tag type='radio' v-model='tableRowRecord.externalConfirm' dictCode='yn'
+                                       placeholder="璇烽�夋嫨" :disabled="disableSubmit||tableRowRecord.repairStatus!=='WAIT_EXTERNAL_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                  <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="externalConfirmComment" label="纭鎰忚">
+                    <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="tableRowRecord.externalConfirmComment"
+                                :readOnly="disableSubmit || tableRowRecord.repairStatus!=='WAIT_EXTERNAL_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="underExternalRepair && tableRowRecord.externalConfirm === '1'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">鏈哄姩鍔炵淮淇粨鏋�</a-divider>
+              <a-row>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-input :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_EXTERNAL_REPAIR'"
+                             v-model="tableRowRecord.faultReason" rows="4"
+                             placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-textarea :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_EXTERNAL_REPAIR'"
+                                v-model="tableRowRecord.repairDescription"
+                                placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨鍥剧墖" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3"
+                               :disabled="disableSubmit||tableRowRecord.repairStatus!=='UNDER_EXTERNAL_REPAIR'"
+                               v-model="tableRowRecord.imageFiles"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="underOutsideRepair && tableRowRecord.externalConfirm === '0'">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">濮斿缁翠慨缁撴灉</a-divider>
+              <a-row>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-input :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_OUTSIDE_REPAIR'"
+                             v-model="tableRowRecord.faultReason" rows="4"
+                             placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <a-textarea :readOnly="disableSubmit||tableRowRecord.repairStatus!=='UNDER_OUTSIDE_REPAIR'"
+                                v-model="tableRowRecord.repairDescription"
+                                placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/>
+                  </a-form-model-item>
+                </a-col>
+                <a-col :span="twoColSpan*2">
+                  <a-form-model-item label="缁翠慨鍥剧墖" :labelCol="labelColLong" :wrapperCol="wrapperColLong">
+                    <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3"
+                               :disabled="disableSubmit||tableRowRecord.repairStatus!=='UNDER_OUTSIDE_REPAIR'"
+                               v-model="tableRowRecord.imageFiles"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
+            <div v-if="operatorConfirm">
+              <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">鎿嶄綔宸ョ‘璁�</a-divider>
+
+              <a-row :gutter="24">
+                <a-col :span="24">
+                  <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="confirmComment" label="纭鎰忚">
+                    <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="tableRowRecord.confirmComment"
+                                :readOnly="disableSubmit || tableRowRecord.repairStatus!=='WAIT_CONFIRM'"/>
+                  </a-form-model-item>
+                </a-col>
+              </a-row>
+            </div>
           </a-tab-pane>
 
           <template v-if="selectShenpiData.procInstId">
@@ -116,56 +250,10 @@
             </a-tab-pane>
 
             <a-tab-pane key='3' tab='娴佺▼鍥�'>
-              <img :src="imageSrc" alt="Fetched Image"/>-->
+              <img :src="imageSrc" alt="Fetched Image"/>
             </a-tab-pane>
           </template>
         </a-tabs>
-
-        <template v-if="tableRowRecord.isUseSpare===1&&isDisableUseSpare">
-          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">绠$悊鍛橀鐢ㄥ浠�
-          </a-divider>
-
-          <a-row>
-            <a-col :span="twoColSpan*2">
-              <a-form-model-item prop="sparePartDescription" label="澶囦欢鎻忚堪">
-                <a-textarea placeholder="璇疯緭鍏ュ浠舵弿杩�" :readOnly="disableSubmit||tableRowRecord.repairStatus!=='WAIT_SPARES'"
-                            v-model="tableRowRecord.sparePartDescription"></a-textarea>
-              </a-form-model-item>
-            </a-col>
-          </a-row>
-        </template>
-
-        <template v-if="Boolean(tableRowRecord.sparePartDescription)&&isDisplayRepairResult">
-          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">缁翠慨缁撴灉涓婃姤</a-divider>
-          <a-row>
-            <a-col :span="twoColSpan*2">
-              <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason">
-                <a-input :readOnly="disableSubmit||isDisableSubmitRepairResult" v-model="tableRowRecord.faultReason"
-                         rows="4" placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/>
-              </a-form-model-item>
-            </a-col>
-          </a-row>
-
-          <a-row>
-            <a-col :span="twoColSpan*2">
-              <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairDescription">
-                <a-textarea :readOnly="disableSubmit||isDisableSubmitRepairResult"
-                            v-model="tableRowRecord.repairDescription"
-                            placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/>
-              </a-form-model-item>
-            </a-col>
-          </a-row>
-
-          <a-row>
-            <a-col :span="twoColSpan*2">
-              <a-form-model-item label="缁翠慨鍥剧墖">
-                <lx-upload :disabled="disableSubmit||isDisableSubmitRepairResult" :returnUrl="false" :isMultiple="true"
-                           file-type="image" :number="3"
-                           v-model="tableRowRecord.imageFiles"/>
-              </a-form-model-item>
-            </a-col>
-          </a-row>
-        </template>
       </a-form-model>
     </a-spin>
   </j-modal>
@@ -173,8 +261,8 @@
 
 <script>
   import '@assets/less/TableExpand.less'
-  import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage'
-  import LxSearchEquipmentSelect from '../../../eam/equipment/modules/LxSearchEquipmentSelect'
+  import { getAction, downFile, httpAction } from '@api/manage'
+  import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect'
 
   export default {
     name: 'RepairOrderApprovalModal',
@@ -215,11 +303,26 @@
           sm: { span: 20 }
         },
         validatorRules: {
-          isUseSpare: [
-            { required: true, message: '璇烽�夋嫨鏄惁闇�瑕侀鐢ㄥ浠�' }
+          repairConfirm: [
+            { required: true, message: '璇烽�夋嫨鏄惁鍐呴儴鍙淮淇紒' }
           ],
-          sparePartDescription: [
-            { required: true, message: '璇疯緭鍏ュ浠舵弿杩�' }
+          repairConfirmComment: [
+            { required: true, message: '璇疯緭鍏ョ淮淇‘璁ゆ剰瑙�' }
+          ],
+          leaderConfirm: [
+            { required: true, message: '璇烽�夋嫨鏄惁鍚屾剰澶栭儴缁翠慨锛�' }
+          ],
+          leaderConfirmComment: [
+            { required: true, message: '璇疯緭鍏ラ瀵肩‘璁ゆ剰瑙�' }
+          ],
+          externalConfirm: [
+            { required: true, message: '璇烽�夋嫨鏈哄姩鍔炴槸鍚﹀彲缁翠慨锛�' }
+          ],
+          externalConfirmComment: [
+            { required: true, message: '璇疯緭鍏ユ満鍔ㄥ姙纭鎰忚' }
+          ],
+          confirmComment: [
+            { required: true, message: '璇疯緭鍏ユ搷浣滃伐纭鎰忚' }
           ],
           faultReason: [
             { required: true, message: '璇疯緭鍏ユ晠闅滃師鍥�' }
@@ -240,13 +343,25 @@
       }
     },
     computed: {
-      isDisableUseSpare() {
-        return this.disableSubmit || this.tableRowRecord.repairStatus !== 'UNDER_REPAIR' || Boolean(this.tableRowRecord.sparePartDescription)
+      repairConfirm() {
+        return ['WAIT_INTERNAL_CONFIRM', 'UNDER_INTERNAL_REPAIR', 'WAIT_LEADER_CONFIRM', 'WAIT_EXTERNAL_CONFIRM', 'UNDER_EXTERNAL_REPAIR', 'UNDER_OUTSIDE_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
       },
-      isDisplayRepairResult() {
-        return ['UNDER_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
+      underInternalRepair() {
+        return ['UNDER_INTERNAL_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
       },
-      isDisableSubmitRepairResult() {
+      leaderConfirm() {
+        return ['UNDER_INTERNAL_REPAIR', 'WAIT_LEADER_CONFIRM', 'WAIT_EXTERNAL_CONFIRM', 'UNDER_EXTERNAL_REPAIR', 'UNDER_OUTSIDE_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
+      },
+      externalConfirm() {
+        return ['WAIT_EXTERNAL_CONFIRM', 'UNDER_EXTERNAL_REPAIR', 'UNDER_OUTSIDE_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
+      },
+      underExternalRepair() {
+        return ['UNDER_EXTERNAL_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
+      },
+      underOutsideRepair() {
+        return ['UNDER_OUTSIDE_REPAIR', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
+      },
+      operatorConfirm() {
         return ['WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.repairStatus)
       }
     },
@@ -313,14 +428,20 @@
         this.$refs.form.validate(valid => {
           if (valid) {
             that.confirmLoading = that.spinning = true
-            const { isUseSpare, faultReason, repairDescription, sparePartDescription, imageFiles, equipmentId } = that.tableRowRecord
+            const { confirmComment, externalConfirm, externalConfirmComment, repairConfirm, repairConfirmComment, leaderConfirm, leaderConfirmComment, faultReason, repairDescription, imageFiles, equipmentId } = that.tableRowRecord
             const { dataId, id, procInstId, taskDefKey, variables } = that.selectShenpiData
 
             const flowTaskVo = {}
-            flowTaskVo.isUseSpare = isUseSpare
+            flowTaskVo.repairConfirm = repairConfirm
+            flowTaskVo.repairConfirmComment = repairConfirmComment
+            flowTaskVo.leaderConfirm = leaderConfirm
+            flowTaskVo.leaderConfirmComment = leaderConfirmComment
+            flowTaskVo.externalConfirm = externalConfirm
+            flowTaskVo.externalConfirmComment = externalConfirmComment
+            flowTaskVo.confirmComment = confirmComment
+
             flowTaskVo.faultReason = faultReason
             flowTaskVo.repairDescription = repairDescription
-            flowTaskVo.sparePartDescription = sparePartDescription
             flowTaskVo.imageFilesResult = imageFiles
             flowTaskVo.equipmentId = equipmentId
             flowTaskVo.id = dataId
diff --git a/src/views/mdc/base/EfficiencyPunchReport.vue b/src/views/mdc/base/EfficiencyPunchReport.vue
new file mode 100644
index 0000000..e90b63d
--- /dev/null
+++ b/src/views/mdc/base/EfficiencyPunchReport.vue
@@ -0,0 +1,216 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="璁板綍鏃堕棿">
+              <a-date-picker format="YYYY-MM-DD" :allowClear="false" v-model="queryParam.theDate"
+                             @change="dateParamChange"></a-date-picker>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鐝">
+              <j-dict-select-tag v-model="queryParam.shiftSchedule" dictCode="shift_schedule"
+                                 placeholder="璇烽�夋嫨鐝"></j-dict-select-tag>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button type="primary" icon="download" @click="handleExportXls('璁惧鎵撳崱鐜囨姤琛�')">瀵煎嚭</a-button>
+
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a
+        style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤�
+        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        class="j-table-force-nowrap"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleDetail(record)">璇︽儏</a>
+        </span>
+      </a-table>
+    </div>
+    <!-- table鍖哄煙-end -->
+    <efficiency-punch-report-modal ref="modalForm" @ok="modalFormOk"></efficiency-punch-report-modal>
+  </a-card>
+</template>
+
+<script>
+import '@/assets/less/TableExpand.less'
+
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import EfficiencyPunchReportModal from '@views/mdc/base/modules/EfficiencyPunchReport/EfficiencyPunchReportModal.vue'
+
+export default {
+  name: 'EfficiencyPunchReport',
+  mixins: [JeecgListMixin],
+  components: {
+    EfficiencyPunchReportModal
+  },
+  data() {
+    return {
+      queryParam: {
+        theDate: this.formatDate(new Date(new Date().setDate(new Date().getDate() - 1))), // 榛樿璁剧疆涓烘槰澶�
+        shiftSchedule: ''
+      },
+
+      dataSource: [], // 纭繚鍒濆鍖栦负绌烘暟缁�
+      description: '璁惧鎵撳崱鐜�',
+      // 琛ㄥご
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          }
+        },
+
+        {
+          title: '璁板綍鏃堕棿',
+          align: 'center',
+          dataIndex: 'theDate'
+        },
+        {
+          title: '鐝',
+          align: 'center',
+          dataIndex: 'shiftSchedule_dictText'
+        },
+
+        {
+          title: '鏃╃彮涓婄彮鎵撳崱璁惧鏁伴噺',
+          align: 'center',
+          dataIndex: 'mornShiftInNum'
+        },
+        {
+          title: '鏃╀笅鐝墦鍗¤澶囨暟閲�',
+          align: 'center',
+          dataIndex: 'mornShiftOutNum'
+        },
+        {
+          title: '鏅氱彮涓婄彮鎵撳崱璁惧鏁伴噺',
+          align: 'center',
+          dataIndex: 'evenShiftInNum'
+        },
+        {
+          title: '鏅氱彮涓嬬彮鎵撳崱璁惧鏁伴噺',
+          align: 'center',
+          dataIndex: 'evenShiftOutNum'
+        },
+        {
+          title: '璁惧鎬绘暟',
+          align: 'center',
+          dataIndex: 'deviceCountNum'
+        },
+        {
+          title: '鏃╃彮涓婄彮鎵撳崱鐜�(%)',
+          align: 'center',
+          dataIndex: 'mornShiftInRate'
+        },
+        {
+          title: '鏃╃彮涓嬬彮鎵撳崱鐜�(%)',
+          align: 'center',
+          dataIndex: 'mornShiftOutRate'
+
+        },
+        {
+          title: '鏅氱彮涓婄彮鎵撳崱鐜�(%)',
+          align: 'center',
+          dataIndex: 'evenShiftInRate',
+          customRender: (text) => {
+            if (text !== null && text !== undefined) {
+              return parseFloat(text).toFixed(2);
+            }
+            return text;
+          }
+        },
+        {
+          title: '鏅氱彮涓嬬彮鎵撳崱鐜�(%)',
+          align: 'center',
+          dataIndex: 'evenShiftOutRate'
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/mdcEquipmentPunchRate/queryPageList',
+        exportXlsUrl: '/mdcEquipmentPunchRate/exportXls'
+      }
+    }
+  },
+  methods: {
+    searchQuery() {
+      if (this.queryParam.theDate) {
+        // 纭繚 queryParam.recordDate 鏄竴涓湁鏁堢殑 Date 瀵硅薄
+        const date = new Date(this.queryParam.recordDate)
+        if (!isNaN(date.getTime())) { // 妫�鏌ユ槸鍚︿负鏈夋晥鏃ユ湡
+          const formattedDate = this.formatDate(date)
+          this.queryParam.theDate = formattedDate
+          console.log('Formatted theDate:', this.queryParam.theDate) // 楠岃瘉鏍煎紡
+        } else {
+          console.error('Invalid date format')
+        }
+      }
+
+      this.loadData()
+    },
+
+    formatDate(date) {
+      const year = date.getFullYear()
+      const month = String(date.getMonth() + 1).padStart(2, '0')
+      const day = String(date.getDate()).padStart(2, '0')
+      return `${year}${month}${day}`
+    },
+
+    dateParamChange(value) {
+      // value 鏄竴涓椂鍒诲璞★紙moment object锛夛紝闇�瑕佽浆鎹负 Date 瀵硅薄
+      if (value) {
+        const date = value.toDate() // 杞崲涓� Date 瀵硅薄
+        const formattedDate = this.formatDate(date)
+        this.queryParam.theDate = formattedDate
+      } else {
+        this.queryParam.theDate = null
+      }
+    }
+
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/mdc/base/modules/EfficiencyPunchReport/EfficiencyPunchReportModal.vue b/src/views/mdc/base/modules/EfficiencyPunchReport/EfficiencyPunchReportModal.vue
new file mode 100644
index 0000000..9924fae
--- /dev/null
+++ b/src/views/mdc/base/modules/EfficiencyPunchReport/EfficiencyPunchReportModal.vue
@@ -0,0 +1,214 @@
+<template>
+  <a-modal :title="title" :width="1500" :height="1500" :visible="visible" :maskClosable="false"
+           cancelText="鍏抽棴"
+           @cancel="handleCancel" :confirmLoading="confirmLoading">
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-row>
+          <a-col :span="12">
+            <a-form-model-item label="璁板綍鏃ユ湡" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="theDate">
+              <a-input :disabled="true" v-model="model.theDate" placeholder="璇疯緭鍏ヨ褰曟棩鏈�"></a-input>
+            </a-form-model-item>
+          </a-col>
+
+          <a-col :span="12">
+            <a-form-model-item label="鐝" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="shiftSchedule">
+              <j-dict-select-tag dictCode="shift_schedule" placeholder="璇烽�夋嫨鐝" v-model="model.shiftSchedule"
+                                 :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+
+          <a-col :span="12">
+            <a-form-model-item  label="鏃╃彮涓婄彮鎵撳崱鐜�" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="mornShiftInRate">
+              <a-input v-model="model.mornShiftInRate" placeholder="璇疯緭鍏�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item  label="鏃╃彮涓嬬彮鎵撳崱鐜�" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                                prop="mornShiftOutRate">
+              <a-input v-model="model.mornShiftOutRate" placeholder="璇疯緭鍏�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item  label="鏅氱彮涓婄彮鎵撳崱鐜�" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="evenShiftInRate">
+              <a-input v-model="model.evenShiftInRate" placeholder="璇疯緭鍏�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item v-show="addShow" label="鏅氱彮涓嬬彮鎵撳崱鐜�" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="evenShiftOutRate">
+              <a-input v-model="model.evenShiftOutRate" placeholder="璇疯緭鍏�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item v-show="addShow" label="鏃╃彮涓婄彮鎵撳崱璁惧鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="mornShiftInDeviceNum">
+              <a-input v-model="model.mornShiftInNum" placeholder="璇疯緭鍏�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item v-show="addShow" label="鏃╀笅鐝墦鍗¤澶囨暟閲�" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="mornShiftOutNum">
+              <a-input v-model="model.mornShiftOutNum" placeholder="璇疯緭鍏�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item v-show="addShow" label="鏅氱彮涓婄彮鎵撳崱璁惧鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="evenShiftInNum">
+              <a-input v-model="model.evenShiftInNum" placeholder="璇疯緭鍏�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item v-show="addShow" label="鏅氫笅鐝墦鍗¤澶囨暟閲�" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="evenShiftOutNum">
+              <a-input v-model="model.evenShiftOutNum" placeholder="璇疯緭鍏�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item v-show="addShow" label="璁惧鎬绘暟" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="deviceCountNum">
+              <a-input v-model="model.deviceCountNum" placeholder="璇疯緭鍏�"></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </a-spin>
+
+    <template slot="footer">
+      <a-button :style="{ marginRight: '8px' }" @click="handleCancel()">
+        鍏抽棴
+      </a-button>
+
+<!--      <a-button @click="handleOk()" :disabled="disableSubmit" type="primary" :loading="confirmLoading">纭畾</a-button>-->
+    </template>
+  </a-modal>
+
+</template>
+
+<script>
+import JMultiSelectTag from '@/components/dict/JMultiSelectTag'
+import Tooltip from 'ant-design-vue/es/tooltip'
+
+export default {
+  name: 'EfficiencyPunchReportModal',
+  components: {
+    JMultiSelectTag,
+    Tooltip
+  },
+  data() {
+
+    return {
+      addShow: true,
+      model: {},
+      formDisabled: false,
+      pagination: {
+        current: 1,
+        pageSize: 10,
+        total: 0
+      },
+
+      title: '鎿嶄綔',
+      visible: false,
+      disableSubmit: false,
+      codeDisable: true,
+
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 6 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 18 }
+      },
+      confirmLoading: false,
+      form: this.$form.createForm(this),
+      validatorRules: {
+        // orderCode: [
+        //   { required: true, message: '璇疯緭鍏ョ洏鐐瑰崟鍙�!' }
+        // ],
+        // handler: [
+        //   { required: true, message: '璇疯緭鍏ョ粡鎵嬩汉!' }
+        // ],
+        // stocktakingName: [
+        //   { required: true, message: '璇疯緭鍏ョ洏鐐瑰悕绉�!' }
+        // ],
+        // approvalStatus: [
+        //   { required: true, message: '璇疯緭鍏ュ鏍哥姸鎬�!' }
+        // ],
+        // inventoryTime: [
+        //   { required: true, message: '璇疯緭鍏ョ洏鐐规椂闂�!' }
+        // ]
+      },
+      url: {
+
+
+
+      },
+      dataSource: []
+    }
+  },
+
+  mounted() {
+
+  },
+
+  methods: {
+
+    add() {
+      this.addShow = false
+      this.edit()
+    },
+
+    edit(record) {
+      this.model = Object.assign({}, record)
+      this.visible = true
+    },
+
+
+
+    close() {
+      this.$emit('close')
+      this.visible = false
+    },
+
+    handleCancel() {
+      this.model = {}
+      this.dataSource = []
+      this.close()
+    },
+  }
+
+}
+</script>
+
+<style lang="less" scoped>
+.frozenRowClass {
+  color: #c9c9c9;
+}
+
+.fontweight {
+  font-weight: bold;
+}
+
+.ant-btn {
+  padding: 0 10px;
+  margin-left: 3px;
+}
+
+.ant-form-item-control {
+  line-height: 0px;
+}
+
+/** 涓昏〃鍗曡闂磋窛 */
+.ant-form .ant-form-item {
+  margin-bottom: 10px;
+}
+
+/** Tab椤甸潰琛岄棿璺� */
+.ant-tabs-content .ant-form-item {
+  margin-bottom: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/ToolLedgerList.vue b/src/views/tms/ToolLedgerList.vue
new file mode 100644
index 0000000..b5af85c
--- /dev/null
+++ b/src/views/tms/ToolLedgerList.vue
@@ -0,0 +1,39 @@
+<template>
+  <a-row
+    type="flex"
+    :gutter="16"
+  >
+    <a-col
+      :md="5"
+      :sm="24"
+    >
+      <tool-ledger-list-left />
+    </a-col>
+    <a-col
+      :md="24-5"
+      :sm="24"
+    >
+      <tool-ledger-list-right />
+    </a-col>
+  </a-row>
+</template>
+
+<script>
+import ToolLedgerListLeft from './modules/toolLedger/ToolLedgerListLeft'
+import ToolLedgerListRight from './modules/toolLedger/ToolLedgerListRight'
+export default {
+  name: 'ToolLedgerList',
+  components: { ToolLedgerListLeft, ToolLedgerListRight },
+  data() {
+    return {
+      description: '宸ュ叿鍙拌处淇℃伅',
+      currentOrgCode: ''
+    }
+  },
+  methods: {}
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/lossBound/LossboundDetailList.vue b/src/views/tms/lossBound/LossboundDetailList.vue
index bc54001..7702c7c 100644
--- a/src/views/tms/lossBound/LossboundDetailList.vue
+++ b/src/views/tms/lossBound/LossboundDetailList.vue
@@ -82,7 +82,7 @@
         {
           title: '鍒�鍏风紪鍙�',
           align: 'center',
-          dataIndex: 'toolCode'
+          dataIndex: 'toolId'
         },
         {
           title: '宸ュ叿绫诲瀷',
diff --git a/src/views/tms/lossBound/LossboundList.vue b/src/views/tms/lossBound/LossboundList.vue
index 67bac90..b04d6bd 100644
--- a/src/views/tms/lossBound/LossboundList.vue
+++ b/src/views/tms/lossBound/LossboundList.vue
@@ -190,16 +190,7 @@
     }
   },
   methods: {
-    // handleEdit: function (record) {
-    //   this.$refs.modalForm.edit(record);
-    //   this.$refs.modalForm.title = "缂栬緫";
-    //   this.$refs.modalForm.disableSubmit = false;
-    // },
-    // handleAdd: function () {
-    //   this.$refs.modalForm.add();
-    //   this.$refs.modalForm.title = "鏂板";
-    //   this.$refs.modalForm.disableSubmit = false;
-    // },
+
     modalFormOk() {
       this.$refs.lossboundDetailList.clearList()
       this.loadData()
diff --git a/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue b/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue
index ad06f5d..5df3d78 100644
--- a/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue
+++ b/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue
@@ -64,7 +64,7 @@
         {
           title: '宸ュ叿缂栫爜',
           align: 'center',
-          dataIndex: 'toolCode'
+          dataIndex: 'toolId'
         },
         {
           title: '涓枃鍚嶇О',
diff --git a/src/views/tms/lossBound/modules/LossboundModal.vue b/src/views/tms/lossBound/modules/LossboundModal.vue
index 2017454..bfa9ba6 100644
--- a/src/views/tms/lossBound/modules/LossboundModal.vue
+++ b/src/views/tms/lossBound/modules/LossboundModal.vue
@@ -193,10 +193,10 @@
           width: 50
         },
         {
-          title: '鍒�鍏风紪鍙�',
-          dataIndex: 'toolCode',
+          title: '鍒�鍏风紪鐮�',
+          dataIndex: 'toolId',
           align: 'center',
-          width: 150
+          width: 200
         },
 
         {
@@ -304,8 +304,8 @@
     this.$bus.$on('selectionRows', (data) => {
       for (let i = 0; i < data.length; i++) {
         this.dataSource.push({
-          toolId: data[i].id,
-          toolCode: data[i].toolCode,
+          toolCode:data[i].toolCode,
+          toolId:data[i].toolId,
           classifyId: data[i].classifyId,
           applicationType: data[i].applicationType_dictText,
           chineseName: data[i].chineseName,
diff --git a/src/views/tms/modules/baseTools/BaseToolsListRight.vue b/src/views/tms/modules/baseTools/BaseToolsListRight.vue
index 9672d5b..61d747a 100644
--- a/src/views/tms/modules/baseTools/BaseToolsListRight.vue
+++ b/src/views/tms/modules/baseTools/BaseToolsListRight.vue
@@ -50,10 +50,14 @@
     <div class="table-operator">
        <Tooltip
         placement="top"
-        title="閫夋嫨宸ュ叿鍒嗙被鍚庡啀鎵ц鏂板"
+        title="閫夋嫨宸ュ叿鍥涚骇鍒嗙被鍚庡啀鎵ц鏂板"
       >
           <a-button @click="handleAdd(nodeSelected)" type="primary" icon="plus" :disabled="!nodeSelected.key || nodeSelected.entity.leafFlag === '2'">鏂板</a-button>
       </Tooltip>
+      <a-button type="primary" @click="exportToExcel('鍒�鍏蜂俊鎭鍏ユā鏉�')" icon="export" style="margin-left: 8px" :disabled="!nodeSelected.key || nodeSelected.entity.leafFlag === '2'">涓嬭浇瀵煎叆妯℃澘</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import" :disabled="!nodeSelected.key || nodeSelected.entity.leafFlag === '2'">瀵煎叆</a-button>
+      </a-upload>
       <!-- <a-button type="primary" icon="download" @click="handleExportXls('tms_tools_classify')">瀵煎嚭</a-button>
       <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
         <a-button type="primary" icon="import">瀵煎叆</a-button>
@@ -78,13 +82,11 @@
         :customRow="customRow"
         @change="handleTableChange">
 
-        <template slot="htmlSlot" slot-scope="text">
-          <div v-html="text"></div>
-        </template>
-        <template slot="imgSlot" slot-scope="text,record">
+        <template slot='toolPicture' slot-scope='text, record, index'>
           <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span>
-          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+          <img v-else :src="getImgView(text)" :preview="record.toolPicture" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
         </template>
+
         <template slot="fileSlot" slot-scope="text">
           <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span>
           <a-button
@@ -161,7 +163,7 @@
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
   import BaseToolsModal from './BaseToolsModal'
   import Tooltip from 'ant-design-vue/es/tooltip'
-  import { getAction, postAction, deleteAction, requestPut } from '@api/manage'
+  import { getAction, postAction, deleteAction, requestPut,downFile } from '@api/manage'
   import ParaHoleToolsModal from './ParaHoleToolsModal'
   import ParaMillToolModal from './ParaMillToolModal'
   import ParaThreadingToolModal from './ParaThreadingToolModal'
@@ -261,6 +263,13 @@
             dataIndex: 'toolModel'
           },
           {
+          title: '宸ュ叿鍥剧墖',
+          align: 'center',
+          width: 120,
+          dataIndex: 'toolPicture',
+          scopedSlots: { customRender: 'toolPicture' }
+        },
+          {
             title:'澶囨敞',
             align:"center",
             dataIndex: 'remark'
@@ -301,13 +310,21 @@
           exportXlsUrl: "/tms/baseTools/exportXls",
           importExcelUrl: "tms/baseTools/importExcel",
           queryParaByToolCode:"/tms/baseTools/queryByToolCode",
-          queryByToolCode:"/tms/toolsConfigProperty/queryByToolCode"
+          queryByToolCode:"/tms/toolsConfigProperty/queryByToolCode",
+          loadTemplate:"/tms/baseTools/loadTemplate",
+          importBlade:"/tms/paraBlade/importExcel",
+          importCommonTool:"/tms/paraCommonTool/importExcel",
+          importHoleTools:"/tms/paraHoleTools/importExcel",
+          importThreading:"/tms/paraThreadingTool/importExcel",
+          importTurning:"/tms/paraTurningTools/importExcel",
+          importMillTool:"/tms/paraMillTool/importExcel"
         },
         dictOptions:{},
         superFieldList:[],
         nodeSelected: {}, // 褰撳墠閫変腑鐨勮妭鐐规暟鎹�
         paraTypeFlag:'',
-        disableMixinCreated:true
+        disableMixinCreated:true,
+        loading:false
       }
     },
     created() {
@@ -322,7 +339,19 @@
     },
     computed: {
       importExcelUrl: function(){
-        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+        if(this.paraTypeFlag === "1"){
+          return `${window._CONFIG['domianURL']}/${this.url.importCommonTool}`;
+        }else if(this.paraTypeFlag === "2"){
+          return `${window._CONFIG['domianURL']}/${this.url.importHoleTools}`;
+        }else if(this.paraTypeFlag === "3"){
+          return `${window._CONFIG['domianURL']}/${this.url.importThreading}`;
+        }else if(this.paraTypeFlag === "4"){
+          return `${window._CONFIG['domianURL']}/${this.url.importMillTool}`;
+        }else if(this.paraTypeFlag === "5"){
+          return `${window._CONFIG['domianURL']}/${this.url.importTurning}`;
+        }else if(this.paraTypeFlag === "6"){
+          return `${window._CONFIG['domianURL']}/${this.url.importBlade}`;
+        }
       },
     },
     methods: {
@@ -534,6 +563,9 @@
             if (res.success) {
               this.dataSource = res.result.records; // 鏇存柊琛ㄦ牸鏁版嵁
               this.ipagination.total = res.result.total
+              //榛樿閫変腑绗竴鏉℃暟鎹�
+              this.selectedRowKeys[0] = res.result.records[0].id
+              this.onSelectChange(this.selectedRowKeys)
             } else {
               this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ");
               this.ipagination.total = 0
@@ -577,7 +609,31 @@
           }
         }
       },
-      
+      exportToExcel(fileName) {
+      this.loading = true // 鏄剧ず鍔犺浇閬僵
+      this.queryParam.paraTypeFlag = this.paraTypeFlag
+      var params = this.getQueryParams()
+      downFile(this.url.loadTemplate,params).then((data)=>{
+        if (!data) {
+          this.$message.warning("鏂囦欢涓嬭浇澶辫触")
+          return
+        }
+        if (typeof window.navigator.msSaveBlob !== 'undefined') {
+          window.navigator.msSaveBlob(new Blob([data],{type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}), fileName+'.xlsx')
+        }else{
+          let url = window.URL.createObjectURL(new Blob([data],{type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}))
+          let link = document.createElement('a')
+          link.style.display = 'none'
+          link.href = url
+          link.setAttribute('download', fileName+'.xlsx')
+          document.body.appendChild(link)
+          link.click()
+          document.body.removeChild(link); //涓嬭浇瀹屾垚绉婚櫎鍏冪礌
+          window.URL.revokeObjectURL(url); //閲婃斁鎺塨lob瀵硅薄
+        }
+        this.loading = false // 闅愯棌閬僵
+      })
+    },
     },
   }
 </script>
diff --git a/src/views/tms/modules/baseTools/ParaBladeModal.vue b/src/views/tms/modules/baseTools/ParaBladeModal.vue
index 3fc3dc4..87955a7 100644
--- a/src/views/tms/modules/baseTools/ParaBladeModal.vue
+++ b/src/views/tms/modules/baseTools/ParaBladeModal.vue
@@ -16,61 +16,92 @@
         </a-divider>
 
         <a-row :gutter="24">
-              <a-col :span="8">
-                <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
-                </a-form-model-item>
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-            </a-row>
 
-            <a-row>
-              <a-col :span="8">
-                <a-form-model-item prop="chineseName"
-                                   label="涓枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
-                </a-form-model-item>
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="chineseName"
+                                      label="涓枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="foreignLanguageName"
+                                      label="澶栨枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolModel"
+                                      label="鍨嬪彿/鍥惧彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="foreignLanguageName"
-                                   label="澶栨枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
-                </a-form-model-item>
+
+              <a-col :span="6">
+              <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardLevel"
+                                      label="鏍囨敞绾у埆">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="signCode" label="搴忓彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolModel"
-                                   label="鍨嬪彿/鍥惧彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
-                </a-form-model-item>
+
+              <a-col :span="6">
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item label='' :labelCol='labelCol' :wrapperCol='wrapperCol'>
+                      <j-image-upload text='涓婁紶鍥剧墖' v-model='model.toolPicture'></j-image-upload>
+                    </a-form-model-item>
+                  </a-col>
+                 </a-row>
               </a-col>
             </a-row>
-            <a-row>
-             <a-col :span="8">
-                <a-form-model-item prop="standardLevel"
-                                   label="鏍囨敞绾у埆">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="signCode" label="搴忓彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-        </a-row>
 
         <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍙傛暟
         </a-divider>
diff --git a/src/views/tms/modules/baseTools/ParaCommonToolModal.vue b/src/views/tms/modules/baseTools/ParaCommonToolModal.vue
index 6db1804..4d77c26 100644
--- a/src/views/tms/modules/baseTools/ParaCommonToolModal.vue
+++ b/src/views/tms/modules/baseTools/ParaCommonToolModal.vue
@@ -15,63 +15,93 @@
         <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 宸ュ叿鍩虹淇℃伅
         </a-divider>
 
-        <a-row :gutter="24">
-              <a-col :span="8">
-                <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
-                </a-form-model-item>
+       <a-row :gutter="24">
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
-                </a-form-model-item>
+
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="chineseName"
+                                      label="涓枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="foreignLanguageName"
+                                      label="澶栨枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolModel"
+                                      label="鍨嬪彿/鍥惧彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
+
+              <a-col :span="6">
+              <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardLevel"
+                                      label="鏍囨敞绾у埆">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="signCode" label="搴忓彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-col>
+
+              <a-col :span="6">
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item label='' :labelCol='{span:8}' :wrapperCol='{span:16}'>
+                      <j-image-upload text='涓婁紶宸ュ叿鍥剧墖' v-model='model.toolPicture'></j-image-upload>
+                    </a-form-model-item>
+                  </a-col>
+                 </a-row>
               </a-col>
             </a-row>
-
-            <a-row>
-              <a-col :span="8">
-                <a-form-model-item prop="chineseName"
-                                   label="涓枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="foreignLanguageName"
-                                   label="澶栨枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolModel"
-                                   label="鍨嬪彿/鍥惧彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
-                </a-form-model-item>
-              </a-col>
-            </a-row>
-            <a-row>
-             <a-col :span="8">
-                <a-form-model-item prop="standardLevel"
-                                   label="鏍囨敞绾у埆">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="signCode" label="搴忓彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-        </a-row>
-
         <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍙傛暟
         </a-divider>
 
diff --git a/src/views/tms/modules/baseTools/ParaHoleToolsModal.vue b/src/views/tms/modules/baseTools/ParaHoleToolsModal.vue
index b91e089..1dc3977 100644
--- a/src/views/tms/modules/baseTools/ParaHoleToolsModal.vue
+++ b/src/views/tms/modules/baseTools/ParaHoleToolsModal.vue
@@ -16,62 +16,92 @@
         </a-divider>
 
         <a-row :gutter="24">
-              <a-col :span="8">
-                <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
-                </a-form-model-item>
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
-                </a-form-model-item>
+
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="chineseName"
+                                      label="涓枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="foreignLanguageName"
+                                      label="澶栨枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolModel"
+                                      label="鍨嬪彿/鍥惧彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
+
+              <a-col :span="6">
+              <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardLevel"
+                                      label="鏍囨敞绾у埆">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="signCode" label="搴忓彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-col>
+
+              <a-col :span="6">
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item label='' :labelCol='labelCol' :wrapperCol='wrapperCol'>
+                      <j-image-upload text='涓婁紶宸ュ叿鍥剧墖' v-model='model.toolPicture'></j-image-upload>
+                    </a-form-model-item>
+                  </a-col>
+                 </a-row>
               </a-col>
             </a-row>
-
-            <a-row>
-              <a-col :span="8">
-                <a-form-model-item prop="chineseName"
-                                   label="涓枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="foreignLanguageName"
-                                   label="澶栨枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolModel"
-                                   label="鍨嬪彿/鍥惧彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
-                </a-form-model-item>
-              </a-col>
-            </a-row>
-            <a-row>
-             <a-col :span="8">
-                <a-form-model-item prop="standardLevel"
-                                   label="鏍囨敞绾у埆">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="signCode" label="搴忓彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-        </a-row>
-
         <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍙傛暟
         </a-divider>
 
diff --git a/src/views/tms/modules/baseTools/ParaMillToolModal.vue b/src/views/tms/modules/baseTools/ParaMillToolModal.vue
index e524131..2ae4d59 100644
--- a/src/views/tms/modules/baseTools/ParaMillToolModal.vue
+++ b/src/views/tms/modules/baseTools/ParaMillToolModal.vue
@@ -16,62 +16,92 @@
         </a-divider>
 
         <a-row :gutter="24">
-              <a-col :span="8">
-                <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
-                </a-form-model-item>
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
-                </a-form-model-item>
+
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="chineseName"
+                                      label="涓枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="foreignLanguageName"
+                                      label="澶栨枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolModel"
+                                      label="鍨嬪彿/鍥惧彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
+
+              <a-col :span="6">
+              <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardLevel"
+                                      label="鏍囨敞绾у埆">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="signCode" label="搴忓彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-col>
+
+              <a-col :span="6">
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item label='' :labelCol='labelCol' :wrapperCol='wrapperCol'>
+                      <j-image-upload text='涓婁紶宸ュ叿鍥剧墖' v-model='model.toolPicture'></j-image-upload>
+                    </a-form-model-item>
+                  </a-col>
+                 </a-row>
               </a-col>
             </a-row>
-
-            <a-row>
-              <a-col :span="8">
-                <a-form-model-item prop="chineseName"
-                                   label="涓枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="foreignLanguageName"
-                                   label="澶栨枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolModel"
-                                   label="鍨嬪彿/鍥惧彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
-                </a-form-model-item>
-              </a-col>
-            </a-row>
-            <a-row>
-             <a-col :span="8">
-                <a-form-model-item prop="standardLevel"
-                                   label="鏍囨敞绾у埆">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="signCode" label="搴忓彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-        </a-row>
-
         <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍙傛暟
         </a-divider>
 
diff --git a/src/views/tms/modules/baseTools/ParaThreadingToolModal.vue b/src/views/tms/modules/baseTools/ParaThreadingToolModal.vue
index d0db317..ed55313 100644
--- a/src/views/tms/modules/baseTools/ParaThreadingToolModal.vue
+++ b/src/views/tms/modules/baseTools/ParaThreadingToolModal.vue
@@ -16,62 +16,92 @@
         </a-divider>
 
         <a-row :gutter="24">
-              <a-col :span="8">
-                <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
-                </a-form-model-item>
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
-                </a-form-model-item>
+
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="chineseName"
+                                      label="涓枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="foreignLanguageName"
+                                      label="澶栨枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolModel"
+                                      label="鍨嬪彿/鍥惧彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
+
+              <a-col :span="6">
+              <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardLevel"
+                                      label="鏍囨敞绾у埆">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="signCode" label="搴忓彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-col>
+
+              <a-col :span="6">
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item label='' :labelCol='{span:4}' :wrapperCol='{span:20}'>
+                      <j-image-upload text='涓婁紶宸ュ叿鍥剧墖' v-model='model.toolPicture'></j-image-upload>
+                    </a-form-model-item>
+                  </a-col>
+                 </a-row>
               </a-col>
             </a-row>
-
-            <a-row>
-              <a-col :span="8">
-                <a-form-model-item prop="chineseName"
-                                   label="涓枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="foreignLanguageName"
-                                   label="澶栨枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolModel"
-                                   label="鍨嬪彿/鍥惧彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
-                </a-form-model-item>
-              </a-col>
-            </a-row>
-            <a-row>
-             <a-col :span="8">
-                <a-form-model-item prop="standardLevel"
-                                   label="鏍囨敞绾у埆">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="signCode" label="搴忓彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-        </a-row>
-
         <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍙傛暟
         </a-divider>
 
@@ -299,6 +329,7 @@
 import JSelectProduction from '@comp/jeecgbiz/JSelectProduction.vue'
 import { getSystemConfigValue } from '@api/api'
   import { duplicateCheck } from '@/api/api'//閲嶅鏍¢獙
+import JThirdAppDropdown from '../../../../components/jeecgbiz/thirdApp/JThirdAppDropdown.vue'
 
 export default {
   name: 'ParaHoleToolsModal',
diff --git a/src/views/tms/modules/baseTools/ParaTurningToolsModal.vue b/src/views/tms/modules/baseTools/ParaTurningToolsModal.vue
index 1f46d97..9c190d3 100644
--- a/src/views/tms/modules/baseTools/ParaTurningToolsModal.vue
+++ b/src/views/tms/modules/baseTools/ParaTurningToolsModal.vue
@@ -15,62 +15,93 @@
         <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 宸ュ叿鍩虹淇℃伅
         </a-divider>
 
-        <a-row :gutter="24">
-              <a-col :span="8">
-                <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
-                </a-form-model-item>
+      <a-row :gutter="24">
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-            </a-row>
 
-            <a-row>
-              <a-col :span="8">
-                <a-form-model-item prop="chineseName"
-                                   label="涓枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
-                </a-form-model-item>
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="chineseName"
+                                      label="涓枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="foreignLanguageName"
+                                      label="澶栨枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolModel"
+                                      label="鍨嬪彿/鍥惧彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="foreignLanguageName"
-                                   label="澶栨枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
-                </a-form-model-item>
+
+              <a-col :span="6">
+              <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardLevel"
+                                      label="鏍囨敞绾у埆">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="signCode" label="搴忓彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolModel"
-                                   label="鍨嬪彿/鍥惧彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
-                </a-form-model-item>
+
+              <a-col :span="6">
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item label='' :labelCol='labelCol' :wrapperCol='wrapperCol'>
+                      <j-image-upload text='涓婁紶宸ュ叿鍥剧墖' v-model='model.toolPicture'></j-image-upload>
+                    </a-form-model-item>
+                  </a-col>
+                 </a-row>
               </a-col>
             </a-row>
-            <a-row>
-             <a-col :span="8">
-                <a-form-model-item prop="standardLevel"
-                                   label="鏍囨敞绾у埆">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="signCode" label="搴忓彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-        </a-row>
 
         <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍙傛暟
         </a-divider>
diff --git a/src/views/tms/modules/baseTools/ToolsConfigPropertyModal.vue b/src/views/tms/modules/baseTools/ToolsConfigPropertyModal.vue
index 6518005..1595536 100644
--- a/src/views/tms/modules/baseTools/ToolsConfigPropertyModal.vue
+++ b/src/views/tms/modules/baseTools/ToolsConfigPropertyModal.vue
@@ -16,62 +16,92 @@
         </a-divider>
 
         <a-row :gutter="24">
-              <a-col :span="8">
-                <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
-                </a-form-model-item>
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
+                      <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
-                  <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName"  :disabled="true" />
-                </a-form-model-item>
+
+              <a-col :span="6">
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="chineseName"
+                                      label="涓枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="foreignLanguageName"
+                                      label="澶栨枃鍚嶇О">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="toolModel"
+                                      label="鍨嬪彿/鍥惧彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
               </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolCode" label="宸ュ叿缂栫爜">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ伐鍏风紪鐮�'" v-model="model.toolCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
+
+              <a-col :span="6">
+              <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardLevel"
+                                      label="鏍囨敞绾у埆">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+                <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item prop="signCode" label="搴忓彿">
+                      <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-col>
+
+              <a-col :span="6">
+                 <a-row>
+                  <a-col :span="24">
+                    <a-form-model-item label='' :labelCol='labelCol' :wrapperCol='wrapperCol'>
+                      <j-image-upload text='涓婁紶宸ュ叿鍥剧墖' v-model='model.toolPicture'></j-image-upload>
+                    </a-form-model-item>
+                  </a-col>
+                 </a-row>
               </a-col>
             </a-row>
-
-            <a-row>
-              <a-col :span="8">
-                <a-form-model-item prop="chineseName"
-                                   label="涓枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ヤ腑鏂囧悕绉�'" v-model="model.chineseName" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="foreignLanguageName"
-                                   label="澶栨枃鍚嶇О">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ鏂囧悕绉�'" v-model="model.foreignLanguageName" :disabled="disableSubmit" />
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="toolModel"
-                                   label="鍨嬪彿/鍥惧彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ瀷鍙�/鍥惧彿'" v-model="model.toolModel" :disabled="disableSubmit" />
-                </a-form-model-item>
-              </a-col>
-            </a-row>
-            <a-row>
-             <a-col :span="8">
-                <a-form-model-item prop="standardLevel"
-                                   label="鏍囨敞绾у埆">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗙骇鍒�'" v-model="model.standardLevel" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="standardCode" label="鏍囧噯鍙�">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ユ爣鍑嗗彿'" v-model="model.standardCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="signCode" label="搴忓彿">
-                  <a-input :placeholder="disableSubmit?'':'璇疯緭鍏ュ簭鍙�'" v-model="model.signCode" :disabled="disableSubmit"/>
-                </a-form-model-item>
-              </a-col>
-        </a-row>
-
         <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍙傛暟
         </a-divider>
 
diff --git a/src/views/tms/modules/inbound/InboundModel.vue b/src/views/tms/modules/inbound/InboundModel.vue
index 7548919..e2eda69 100644
--- a/src/views/tms/modules/inbound/InboundModel.vue
+++ b/src/views/tms/modules/inbound/InboundModel.vue
@@ -46,6 +46,18 @@
             </a-form-model-item>
           </a-col>
         </a-row>
+
+        <a-row style="width: 100%">
+          <a-col :span="24 / 2">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="搴撲綅鍙�" prop="locationCodeId">
+              <a-select
+                :triggerChange="true"
+                :options="locationCodeOptions"
+                v-model="model.locationCodeId"
+              />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
       </a-form-model>
     </a-spin>
     <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectReturnList()" v-show="returnShow && !disableSubmit">閫夋嫨鍊熷嚭宸ュ叿</a-button>
@@ -174,6 +186,12 @@
               message: '璇烽�夋嫨鐢宠鍏ュ簱鏃ユ湡!',
             },
           ],
+          locationCodeId:[
+            {
+              required: true,
+              message: '璇烽�夋嫨搴撲綅鍙�!',
+            },
+          ]
       },
       url: {
         addInStorage: '/tms/inboundOrder/addInStorage',
@@ -233,12 +251,18 @@
           scopedSlots: { customRender: 'action' },
         },
       ],
-      classifyId:''
+      classifyId:'',
+      locationCodeOptions:[]
     }
   },
   created() {
     //澶囦唤model鍘熷鍊�
     this.modelDefault = JSON.parse(JSON.stringify(this.model));
+    ajaxGetDictItems("tms_goods_shelves,location_code,id", null).then((res) => {
+        if (res.success) {
+          this.locationCodeOptions = res.result
+        }
+      })
   },
   methods: {
     modalFormOk() {
@@ -402,7 +426,7 @@
           toolModel: data[i].toolModel,
           applicationType: data[i].applicationTypeName,
           onlyCode:data[i].onlyCode,
-          inStorageQuantity:data[i].storageQuantity || data[i].quantity,
+          inStorageQuantity:data[i].storageQuantity || data[i].quantity || 1,
           quantity:data[i].quantity,
           accuracyClass:data[i].accuracyClass
         })
diff --git a/src/views/tms/modules/inboundOrder/InboundOrderModel.vue b/src/views/tms/modules/inboundOrder/InboundOrderModel.vue
index 06333dd..c66d5c8 100644
--- a/src/views/tms/modules/inboundOrder/InboundOrderModel.vue
+++ b/src/views/tms/modules/inboundOrder/InboundOrderModel.vue
@@ -41,7 +41,23 @@
             </a-form-item>
           </a-col>
           <a-col :span="24 / 2">
+            <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="搴撲綅鍙�">
+             <a-select
+                :triggerChange="true"
+                :options="locationCodeOptions"
+                v-decorator="[ 'locationCodeId', validatorRules.locationCodeId ]"
+              />
+            </a-form-item>
+          </a-col>
+          <!-- <a-col :span="24 / 2">
             <a-form-item label="鐢宠鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol">
+             <a-input placeholder="璇疯緭鍏ョ敵璇峰師鍥�"  :disabled="disableSubmit" v-decorator="['applicationReason', validatorRules.applicationReason]" />
+            </a-form-item>
+          </a-col> -->
+        </a-row>
+         <a-row style="width: 100%">
+          <a-col :span="24">
+             <a-form-item label="鐢宠鍘熷洜" :labelCol="{ span: 3 }" :wrapperCol="{ span: 21 }" >
              <a-input placeholder="璇疯緭鍏ョ敵璇峰師鍥�"  :disabled="disableSubmit" v-decorator="['applicationReason', validatorRules.applicationReason]" />
             </a-form-item>
           </a-col>
@@ -324,9 +340,16 @@
           scopedSlots: { customRender: 'action' },
         },
       ],
+      locationCodeOptions:[]
     }
   },
-  created() {},
+  created() {
+    ajaxGetDictItems("tms_goods_shelves,location_code,id", null).then((res) => {
+        if (res.success) {
+          this.locationCodeOptions = res.result
+        }
+      })
+  },
   methods: {
     modalFormOk() {
     },
@@ -531,7 +554,7 @@
           applicationType: data[i].applicationTypeName,
           onlyCode:data[i].onlyCode,
           quantity:data[i].quantity,
-          inStorageQuantity:data[i].storageQuantity || data[i].quantity,
+          inStorageQuantity:data[i].storageQuantity || data[i].quantity || 1,
           accuracyClass:data[i].accuracyClass
         })
       }
diff --git a/src/views/tms/modules/toolLedger/InStoreDetailList.vue b/src/views/tms/modules/toolLedger/InStoreDetailList.vue
new file mode 100644
index 0000000..70f6f31
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/InStoreDetailList.vue
@@ -0,0 +1,109 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'InStoreDetailList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/inStoreDetail/list',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鍏ュ簱鍗曠紪鍙�',
+          dataIndex: 'inboundNum',
+          align: 'center',
+        },
+        {
+          title: '鍏ュ簱绫诲瀷',
+          dataIndex: 'inStorehouseTypeName',
+          align: 'center',
+        },
+        {
+          title: '鍏ュ簱鏂瑰紡',
+          dataIndex: 'operateType',
+          align: 'center',
+        },
+        {
+          title: '缁忔墜浜�',
+          dataIndex: 'handler',
+          align: 'center',
+        },
+        {
+          title: '搴撲綅鍙�',
+          dataIndex: 'locationCode',
+          align: 'center',
+        },
+        {
+          title: '鍏ュ簱鏁伴噺',
+          dataIndex: 'inNumber',
+          align: 'center',
+        },
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/OutStoreDetailList.vue b/src/views/tms/modules/toolLedger/OutStoreDetailList.vue
new file mode 100644
index 0000000..eb5fdd4
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/OutStoreDetailList.vue
@@ -0,0 +1,109 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'OutStoreDetailList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/outStoreDetail/outStoreDetailList',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鍑哄簱鍗曠紪鍙�',
+          dataIndex: 'outNum',
+          align: 'center',
+        },
+        {
+          title: '鍑哄簱绫诲瀷',
+          dataIndex: 'outStorehouseTypeName',
+          align: 'center',
+        },
+        {
+          title: '鍑哄簱鏂瑰紡',
+          dataIndex: 'operateType',
+          align: 'center',
+        },
+        {
+          title: '缁忔墜浜�',
+          dataIndex: 'handler',
+          align: 'center',
+        },
+        {
+          title: '鍑哄簱鏃堕棿',
+          dataIndex: 'outboundTime',
+          align: 'center',
+        },
+        {
+          title: '鍑哄簱鏁伴噺',
+          dataIndex: 'outNumber',
+          align: 'center',
+        }
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/StocktakingList.vue b/src/views/tms/modules/toolLedger/StocktakingList.vue
new file mode 100644
index 0000000..ece41de
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/StocktakingList.vue
@@ -0,0 +1,126 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'ToolLedgerDetailList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/toolsStocktakingBound/toolsStocktakingList',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鐩樼偣鍗曞彿',
+          dataIndex: 'orderCode',
+          align: 'center',
+        },
+        {
+          title: '鐩樼偣鍚嶇О',
+          dataIndex: 'stocktakingName',
+          align: 'center',
+        },
+        {
+          title: '鐩樼偣绫诲瀷',
+          dataIndex: 'stocktakingType',
+          align: 'center',
+        },
+        {
+          title: '缁忔墜浜�',
+          dataIndex: 'handler',
+          align: 'center',
+        },
+        {
+          title: '鐩樺簱鏃堕棿',
+          dataIndex: 'stocktakingDate',
+          align: 'center',
+        },
+        {
+          title: '鐩樼泩鐩樹簭',
+          dataIndex: 'surplusDeficit',
+          align: 'center',
+        },
+        {
+          title: '璐﹂潰鏁伴噺',
+          dataIndex: 'bookQuantity',
+          align: 'center',
+        },
+        {
+          title: '鍙敤鏁伴噺',
+          dataIndex: 'availableQuantity',
+          align: 'center',
+        },
+        {
+          title: '瀹炵洏鏁伴噺',
+          dataIndex: 'practicalQuantity',
+          align: 'center',
+        }
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue b/src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue
new file mode 100644
index 0000000..60432f6
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue
@@ -0,0 +1,85 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'ToolLedgerDetailList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/toolLedgerDetail/queryToolLedgerDetailList',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+      
+        {
+          title: '宸ュ叿鍒嗙被',
+          dataIndex: 'applicationType',
+          align: 'center',
+        }
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue b/src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue
new file mode 100644
index 0000000..6e2d070
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue
@@ -0,0 +1,323 @@
+<template>
+  <a-card
+    :loading="cardLoading"
+    :bordered="false"
+    title="宸ュ叿淇℃伅"
+    style="height: 100%;"
+  >
+    <a-spin :spinning="loading">
+      <a-alert
+        type="info"
+        :showIcon="true"
+        style="margin-right: 54px;"
+      >
+        <div slot="message">
+          褰撳墠锛�<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span>
+          <a
+            v-if="this.currSelected.title"
+            style="margin-left: 10px"
+            @click="onClearSelected"
+          >鍙栨秷</a>
+        </div>
+      </a-alert>
+      <!-- <div class="drawer-bootom-button">
+        <a-dropdown
+          :trigger="['click']"
+          placement="bottomCenter"
+        >
+          <a-menu slot="overlay">
+            <a-menu-item
+              key="1"
+              @click="expandAll"
+            >灞曞紑鎵�鏈�</a-menu-item>
+            <a-menu-item
+              key="2"
+              @click="closeAll"
+            >鍚堝苟鎵�鏈�</a-menu-item>
+            <a-menu-item
+              key="3"
+              @click="refreshTree"
+            >鍒锋柊</a-menu-item>
+          </a-menu>
+          <a-button>
+            <a-icon type="bars" />
+          </a-button>
+        </a-dropdown>
+      </div> -->
+
+      <a-input-search
+        @search="handleSearch"
+        style="width:100%;margin-top: 10px"
+        placeholder="妫�绱㈠伐鍏峰垎绫�"
+        allowClear
+        v-model="searchInput"
+        @change="handleChange"
+      />
+
+      <!-- showLine -->
+      <a-tree
+        :checkStrictly="checkStrictly"
+      
+        :selectedKeys="selectedKeys"
+        :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
+        :treeData="treeDataSource"
+        
+        :defaultExpandAll="true"
+        @select="onSelect"
+        @expand="onExpand"
+      >
+        <template
+          slot="title"
+          slot-scope="{title, type, rfield1}"
+        >
+          <Tooltip
+            placement="top"
+            title="宸ュ叿鍒嗙被"
+          >
+            <i
+              v-if="type == 0"
+              class="action-jeecg actioncompany2"
+              style="font-size: 18px;"
+            />
+          </Tooltip>
+
+          <span v-if="title.indexOf(searchValue) > -1">
+            {{ title.substr(0, title.indexOf(searchValue)) }}
+            <span class="replaceSearch">{{ searchValue }}</span>
+            {{ title.substr(title.indexOf(searchValue) + searchValue.length) }}
+          </span>
+          <span v-else>{{ title }}</span>
+      
+        </template>
+      </a-tree>
+    </a-spin>
+  </a-card>
+</template>
+
+<script>
+import { getAction } from '@/api/manage'
+import Tooltip from 'ant-design-vue/es/tooltip'
+export default {
+  name: 'ToolLedgerListLeft',
+  components: {
+    Tooltip,
+  },
+  props: ['value'],
+  data() {
+    return {
+      searchInput: '',
+      cardLoading: false,
+      loading: false,
+      treeDataSource: [],
+      selectedKeys: [],
+      expandedKeys: [],
+      url: {
+        factoryTreeList: '/tms/toolsClassify/loadTree',
+      },
+      searchValue: '',
+      dataList: [],
+      autoExpandParent: true,
+      checkStrictly: true,
+      allTreeKeys: [],
+      currSelected: {},
+      hiding: false,
+    }
+  },
+  created() {
+    this.queryTreeData();
+    this.closeAll();
+  },
+  methods: {
+    getCurrSelectedTitle() {
+      return !this.currSelected.title ? '' : this.currSelected.title;
+    },
+    onClearSelected() {
+      this.hiding = true;
+      this.currSelected = {};
+      this.selectedKeys = [];
+    },
+    onSelect(selectedKeys, e) {
+      this.hiding = false;
+      let record = e.node.dataRef;
+      this.currSelected = Object.assign({}, record);
+      this.selectedKeys = [record.key];
+    },
+    onExpand(expandedKeys) {
+      this.expandedKeys = expandedKeys;
+      this.autoExpandParent = false;
+    },
+    queryTreeData() {
+      this.loading = true;
+      this.cardLoading = true;
+      getAction(this.url.factoryTreeList).then((res) => {
+        if (res.success) {
+          this.dataList = [];
+          this.allTreeKeys = [];
+          this.treeDataSource = res.result;
+          this.generateList(res.result);
+        } else {
+          this.$message.warn(res.message);
+        }
+      }).finally(() => {
+        this.loading = false;
+        this.cardLoading = false;
+      })
+    },
+
+    handleChange() {
+      let search = this.searchInput;
+      let expandedKeys = this.dataList
+        .map(item => {
+          if (item.title.indexOf(search) > -1) {
+            return this.getParentKey(item.key, this.treeDataSource);
+          }
+          return null;
+        })
+        .filter((item, i, self) => item && self.indexOf(item) === i);
+      Object.assign(this, {
+        expandedKeys,
+        searchValue: search,
+        autoExpandParent: true,
+      });
+    },
+    handleSearch(value) {
+      let search = value;
+      let expandedKeys = this.dataList
+        .map(item => {
+          if (item.title.indexOf(search) > -1) {
+            return this.getParentKey(item.key, this.treeDataSource);
+          }
+          return null;
+        })
+        .filter((item, i, self) => item && self.indexOf(item) === i);
+      Object.assign(this, {
+        expandedKeys,
+        searchValue: search,
+        autoExpandParent: true,
+      });
+    },
+    getParentKey(key, tree) {
+      let parentKey;
+      for (let i = 0; i < tree.length; i++) {
+        const node = tree[i];
+        if (node.children) {
+          if (node.children.some(item => item.key === key)) {
+            parentKey = node.key;
+          } else if (
+            this.getParentKey(key, node.children)) {
+            parentKey = this.getParentKey(key, node.children);
+          }
+        }
+      }
+      return parentKey;
+    },
+
+    generateList(data) {
+      for (let i = 0; i < data.length; i++) {
+        const node = data[i];
+        const key = node.key;
+        const title = node.title;
+        this.dataList.push({ key, title: title });
+        this.allTreeKeys.push(key);
+        if (node.children) {
+          this.generateList(node.children);
+        }
+      }
+    },
+    expandAll() {
+      this.expandedKeys = this.allTreeKeys;
+    },
+    closeAll() {
+      this.expandedKeys = [];
+    },
+    refreshTree() {
+      this.queryTreeData();
+    }
+  },
+  mounted() {
+    this.$bus.$on('queryTreeData', this.queryTreeData);
+  },
+  //鐩戝惉
+  watch: {
+    currSelected(val) {//鐩戝惉currSelected 鍙樺寲锛屽皢鍙樺寲鍚庣殑鏁板�间紶閫掔粰 getCurrSelected 浜嬩欢
+      this.$bus.$emit('getCurrSelected', val)
+    },
+  }
+}
+</script>
+
+<style scoped>
+.replaceSearch {
+  color: #40a9ff;
+  font-weight: bold;
+  background-color: rgb(204, 204, 204);
+}
+/*闅愯棌鏍戠殑榛樿icon*/
+.ant-tree-switcher-noop {
+  display: none !important;
+}
+/*闅愯棌鏍戠殑榛樿绔栫嚎*/
+.ant-tree.ant-tree-show-line li:not(:last-child):before {
+  border-left: 0px;
+}
+
+.ant-card-body .table-operator {
+  margin: 15px;
+}
+
+.anty-form-btn {
+  width: 100%;
+  text-align: center;
+}
+
+.anty-form-btn button {
+  margin: 0 5px;
+}
+
+.anty-node-layout .ant-layout-header {
+  padding-right: 0;
+}
+
+.header {
+  padding: 0 8px;
+}
+
+.header button {
+  margin: 0 3px;
+}
+
+.ant-modal-cust-warp {
+  height: 100%;
+}
+
+.ant-modal-cust-warp .ant-modal-body {
+  height: calc(100% - 110px) !important;
+  overflow-y: auto;
+}
+
+.ant-modal-cust-warp .ant-modal-content {
+  height: 90% !important;
+  overflow-y: hidden;
+}
+
+#app .desktop {
+  height: auto !important;
+}
+
+/** Button鎸夐挳闂磋窛 */
+.ant-btn {
+  margin-left: 3px;
+}
+.ant-alert {
+  padding: 5px 15px 5px 37px;
+}
+.drawer-bootom-button {
+  position: absolute;
+  top: 1px;
+  /* padding: 10px 16px; */
+  text-align: left;
+  right: 0;
+  background: #fff;
+  border-radius: 0 0 2px 2px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/ToolLedgerListRight.vue b/src/views/tms/modules/toolLedger/ToolLedgerListRight.vue
new file mode 100644
index 0000000..e5e10e5
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/ToolLedgerListRight.vue
@@ -0,0 +1,516 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+           <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="宸ュ叿缂栧彿"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ伐鍏风紪鍙锋绱�"
+                v-model="queryParam.toolCode"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="鍨嬪彿/鍥惧彿"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ瀷鍙�/鍥惧彿妫�绱�"
+                v-model="queryParam.toolModel"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        :scroll="{x:true}"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}"
+        class="j-table-force-nowrap"
+        :customRow="customRow"
+        @change="handleTableChange">
+
+        <template slot="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text,record">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span>
+          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            涓嬭浇
+          </a-button>
+        </template>
+      </a-table>
+    </div>
+
+     <a-tabs defaultActiveKey="1">
+      <a-tab-pane key="1">
+        <span slot="tab">
+          <a-badge>鍙傛暟&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <para-hole-tools-list ref="paraHoleToolsList"></para-hole-tools-list>
+        <para-threading-tool-list ref="paraThreadingToolList"></para-threading-tool-list>
+        <para-mill-tool-list ref="paraMillToolList"></para-mill-tool-list>
+        <para-turning-tools-list ref="paraTurningToolsList"></para-turning-tools-list>
+        <para-blade-list ref="paraBladeList"></para-blade-list>
+        <para-common-tool-list ref="paraCommonToolList"></para-common-tool-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="2"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>绠$悊鍙傛暟&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <tools-config-property-list ref="toolsConfigPropertyList"></tools-config-property-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="3"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鎶婂彿&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <tool-ledger-detail-list ref="toolLedgerDetailList"></tool-ledger-detail-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="4"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鍏ュ簱淇℃伅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <in-store-detail-list ref="inStoreDetailList"></in-store-detail-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="5"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鍑哄簱淇℃伅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <out-store-detail-list ref="outStoreDetailList"></out-store-detail-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="6"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鍒冪(淇℃伅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <tool-sharpen-list ref="toolSharpenList"></tool-sharpen-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="7"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鎶ユ崯淇℃伅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <tool-loss-list ref="toolLossList"></tool-loss-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="8"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>鐩樼偣淇℃伅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <stocktaking-list ref="stocktakingList"></stocktaking-list>
+      </a-tab-pane>
+    </a-tabs>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import Tooltip from 'ant-design-vue/es/tooltip'
+  import { getAction, postAction, deleteAction, requestPut } from '@api/manage'
+  import ParaHoleToolsList from '../baseTools/ParaHoleToolsList'
+  import ToolsConfigPropertyList from '../baseTools/ToolsConfigPropertyList'
+  import ParaMillToolList from '../baseTools/ParaMillToolList'
+  import ParaThreadingToolList from '../baseTools/ParaThreadingToolList'
+  import ParaTurningToolsList from '../baseTools/ParaTurningToolsList'
+  import ParaCommonToolList from '../baseTools/ParaCommonToolList'
+  import ParaBladeList from '../baseTools/ParaBladeList'
+  import ToolLedgerDetailList from './ToolLedgerDetailList'
+  import ToolLossList from './ToolLossList'
+  import ToolSharpenList from './ToolSharpenList'
+  import StocktakingList from './StocktakingList'
+  import InStoreDetailList from './InStoreDetailList'
+  import OutStoreDetailList from './OutStoreDetailList'
+
+  export default {
+    name: 'ToolLedgerListRight',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      Tooltip,
+      ParaHoleToolsList,
+      ToolsConfigPropertyList,
+      ParaMillToolList,
+      ParaThreadingToolList,
+      ParaTurningToolsList,
+      ParaCommonToolList,
+      ParaBladeList,
+      ToolLedgerDetailList,
+      ToolLossList,
+      ToolSharpenList,
+      StocktakingList,
+      InStoreDetailList,
+      OutStoreDetailList
+    },
+    data () {
+      return {
+        description: '宸ュ叿鍙拌处淇℃伅绠$悊椤甸潰',
+        /* 鍒嗛〉鍙傛暟 */
+      ipagination:{
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '50'],
+        showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+        // 琛ㄥご
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'宸ュ叿缂栫爜',
+            align:"center",
+            dataIndex: 'toolCode'
+          },
+          {
+            title:'搴忓彿',
+            align:"center",
+            dataIndex: 'signCode'
+          },
+          {
+            title:'涓枃鍚嶇О',
+            align:"center",
+            dataIndex: 'chineseName'
+          },
+          // {
+          //   title:'澶栨枃鍚嶇О',
+          //   align:"center",
+          //   dataIndex: 'foreignLanguageName'
+          // },
+          // {
+          //   title:'鏍囨敞绾у埆',
+          //   align:"center",
+          //   dataIndex: 'standardLevel'
+          // },
+          // {
+          //   title:'鏍囧噯鍙�',
+          //   align:"center",
+          //   dataIndex: 'standardCode'
+          // },
+          {
+            title:'鍨嬪彿/鍥惧彿',
+            align:"center",
+            dataIndex: 'toolModel'
+          },
+          {
+            title:'宸ュ叿绫诲瀷',
+            align:"center",
+            dataIndex: 'applicationType'
+          },
+          {
+            title:'绠$悊绛夌骇',
+            align:"center",
+            dataIndex: 'accuracyClass'
+          },
+          {
+            title:'瀛樺偍浣嶇疆',
+            align:"center",
+            dataIndex: 'storageLocation'
+          },
+          {
+            title:'搴撲綅鍙�',
+            align:"center",
+            dataIndex: 'positionCode'
+          },
+          {
+            title:'鏈�浣庡簱瀛�',
+            align:"center",
+            dataIndex: 'lowerInventory'
+          },
+          {
+            title:'鏈�楂樺簱瀛�',
+            align:"center",
+            dataIndex: 'highestInventory'
+          },
+          {
+            title:'鎬诲簱瀛�',
+            align:"center",
+            dataIndex: 'totalCount'
+          },
+          {
+            title:'鍙敤搴撳瓨',
+            align:"center",
+            dataIndex: 'availableCount'
+          },
+          {
+            title:'鎶ユ崯',
+            align:"center",
+            dataIndex: 'lossCount'
+          },
+          {
+            title:'鍦ㄥ��',
+            align:"center",
+            dataIndex: 'lendCount'
+          },
+          {
+            title:'鍦ㄧ(',
+            align:"center",
+            dataIndex: 'sharpeningCount'
+          },
+          {
+            title:'鍦ㄦ',
+            align:"center",
+            dataIndex: 'detectionCount'
+          },
+          {
+            title:'鍦ㄤ慨',
+            align:"center",
+            dataIndex: 'repairCount'
+          }
+          // {
+          //   title:'澶囨敞',
+          //   align:"center",
+          //   dataIndex: 'remark'
+          // }
+          // {
+          //   title:'鍒涘缓浜�',
+          //   align:"center",
+          //   dataIndex: 'createBy'
+          // },
+          // {
+          //   title:'鍒涘缓鏃堕棿',
+          //   align:"center",
+          //   dataIndex: 'createTime',
+          //   customRender:function (text) {
+          //     return !text?"":(text.length>10?text.substr(0,10):text)
+          //   }
+          // }
+        ],
+        url: {
+          list: "/tms/baseTools/list",
+          paraHolesToolsList:"/tms/baseTools/paraHolesToolsList",
+          paraCommonToolList:"/tms/baseTools/paraCommonToolList",
+          paraThreadingToolList:"/tms/baseTools/paraThreadingToolList",
+          paraMillToolList:"/tms/baseTools/paraMillToolList",
+          paraTurningToolsList:"/tms/baseTools/paraTurningToolsList",
+          paraBladeList:"/tms/baseTools/paraBladeList",
+          delete: "/tms/baseTools/delete",
+          deleteBatch: "/tms/baseTools/deleteBatch",
+          edit: '/tms/baseTools/edit',
+          exportXlsUrl: "/tms/baseTools/exportXls",
+          importExcelUrl: "tms/baseTools/importExcel",
+          queryParaByToolCode:"/tms/baseTools/queryByToolCode",
+          queryByToolCode:"/tms/toolsConfigProperty/queryByToolCode",
+          toolLedgerList:"/tms/toolLedger/toolLedgerList",
+          toolLedgerDetailList:"/tms/toolLedgerDetail/list"
+        },
+        dictOptions:{},
+        superFieldList:[],
+        nodeSelected: {}, // 褰撳墠閫変腑鐨勮妭鐐规暟鎹�
+        paraTypeFlag:'',
+        disableMixinCreated:true
+      }
+    },
+    created() {
+      this.$bus.$on('getCurrSelected', (data) => {
+      //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟
+      this.nodeType = (data.type == undefined ? 0 : data.type);
+      this.paraTypeFlag = (data.entity == undefined ? 0 : data.entity.paraTypeFlag)
+      this.nodeSelected = data;
+      this.loadData()
+      this.clearPara()
+    })
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+
+      modalFormOk() {
+        this.loadData(); // 鍒锋柊琛ㄦ牸鏁版嵁
+        this.$bus.$emit('queryTreeData') //鍒锋柊宸︿晶鏍�
+      },
+
+      onSelectChange(selectedRowKeys,selectionRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectionRows = selectionRows
+        //閫氳繃id鏌ヨ绠$悊鍙傛暟鍜屽弬鏁版暟鎹�
+        getAction(this.url.queryParaByToolCode, { toolCode: this.selectedRowKeys[0],paraTypeFlag:this.paraTypeFlag}).then((res) => {
+          if (res.success) {
+            if(this.paraTypeFlag === "1"){
+              this.$refs.paraCommonToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "2"){
+              this.$refs.paraHoleToolsList.getPara(res.result);
+            }else if(this.paraTypeFlag === "3"){
+              this.$refs.paraThreadingToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "4"){
+              this.$refs.paraMillToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "5"){
+              this.$refs.paraTurningToolsList.getPara(res.result);
+            }else if(this.paraTypeFlag === "6"){
+              this.$refs.paraBladeList.getPara(res.result);
+            }
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+        getAction(this.url.queryByToolCode, { toolCode: this.selectedRowKeys[0]}).then((res) => {
+          if (res.success) {
+            this.$refs.toolsConfigPropertyList.getPara(res.result);
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+        this.$bus.$emit('getToolLedgerData', this.selectionRows[0])
+      },
+      //绂佺敤鐘舵�佹牱寮�
+      tableRowClass(record, index) {
+        if (record.status != "1") {
+          return "frozenRowClass";
+        }
+        return "";
+      },
+      loadData() {
+        let params = this.getQueryParams();
+        if (this.nodeSelected && this.nodeSelected.key !== '-1') {
+          // 鍔犺浇閫変腑鑺傜偣鐨勫瓙绫�
+          params.classifyId = this.nodeSelected.key;
+          this.loading = true;
+        let httpUrl = this.url.toolLedgerList
+        getAction(httpUrl, params)
+          .then((res) => {
+            if (res.success) {
+              this.dataSource = res.result.records; // 鏇存柊琛ㄦ牸鏁版嵁
+              this.ipagination.total = res.result.total
+            } else {
+              this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ");
+              this.ipagination.total = 0
+            }
+          })
+          .finally(() => {
+            this.loading = false;
+          });
+        } else {
+          this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ");
+        }
+      },
+      onClearSelected() {
+        this.selectedKeys = [];
+        this.nodeSelected = {}; // 娓呯┖閫変腑鐨勮妭鐐�
+        this.dataSource = []; // 娓呯┖琛ㄦ牸鏁版嵁
+      },
+      //閲嶇疆
+      searchReset() {
+        this.queryParam = {}
+        this.loadData(1);
+        this.clearPara()
+      },
+      //娓呯┖閫変腑鍙婂弬鏁�
+      clearPara(){
+        this.selectedRowKeys = []   
+        this.$refs.paraCommonToolList.visable = false
+        this.$refs.paraHoleToolsList.visable = false
+        this.$refs.paraThreadingToolList.visable = false   
+        this.$refs.paraMillToolList.visable = false    
+        this.$refs.paraTurningToolsList.visable = false
+        this.$refs.paraBladeList.visable = false
+        this.$refs.toolsConfigPropertyList.visable = false
+      },
+      customRow(record) {
+        return {
+          on: {
+            click: () => {
+              this.onSelectChange(record.id.split(","), [record]);
+            }
+          }
+        }
+      },
+      
+    },
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+   .enable {
+    color: green;
+  }
+  .disable {
+    color: red;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/ToolLossList.vue b/src/views/tms/modules/toolLedger/ToolLossList.vue
new file mode 100644
index 0000000..9943d6a
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/ToolLossList.vue
@@ -0,0 +1,106 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'ToolLossList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/toolsLossBound/toolLossDetailList',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鎶ユ崯鍗曞彿',
+          dataIndex: 'orderCode',
+          align: 'center',
+        },
+        {
+          title: '缁忔墜浜�',
+          dataIndex: 'handler',
+          align: 'center',
+        },
+        {
+          title: '鎶ユ崯鍘熷洜',
+          dataIndex: 'lossReason',
+          align: 'center',
+        },
+        {
+          title: '鎶ユ崯鏃堕棿',
+          dataIndex: 'lossTime',
+          align: 'center',
+        },
+        {
+          title: '鎶ユ崯鏁伴噺',
+          dataIndex: 'lossNumber',
+          align: 'center',
+        }
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolLedger/ToolSharpenList.vue b/src/views/tms/modules/toolLedger/ToolSharpenList.vue
new file mode 100644
index 0000000..eff61b3
--- /dev/null
+++ b/src/views/tms/modules/toolLedger/ToolSharpenList.vue
@@ -0,0 +1,101 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'ToolSharpenList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/toolSharpening/toolSharpeningList',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿缂栧彿',
+          align: 'center',
+          dataIndex: 'onlyCode',
+          width: '10%',
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '璐d换浜�',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鍒冪(鏃堕棿',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鍒冪(缁撴灉鍙婂缓璁�',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+        {
+          title: '鍒冪(鐘舵��',
+          dataIndex: 'toolModel',
+          align: 'center',
+        },
+      ],
+      para:{},
+    }
+  },
+
+  methods: {
+   
+  },
+  mounted() {
+    this.$bus.$on('getToolLedgerData', (data) => {
+      this.queryParam.toolCode = data.toolCode;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue b/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue
index 0f1ba35..0c018fb 100644
--- a/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue
+++ b/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue
@@ -227,7 +227,7 @@
       this.expandedKeys = this.allTreeKeys;
     },
     closeAll() {
-      this.expandedKeys = this.allSiteIds;
+      this.expandedKeys = [];
     },
     refreshTree() {
       this.queryTreeData();
diff --git a/src/views/tms/requirement/ToolSharpeningList .vue b/src/views/tms/requirement/ToolSharpeningList .vue
index cf8841a..abaa2ab 100644
--- a/src/views/tms/requirement/ToolSharpeningList .vue
+++ b/src/views/tms/requirement/ToolSharpeningList .vue
@@ -1,5 +1,6 @@
 <template>
   <a-card :bordered="false">
+
     <!-- 鏌ヨ鍖哄煙 -->
     <div class="table-page-search-wrapper">
       <a-form layout="inline" @keyup.enter.native="searchQuery">
@@ -16,7 +17,7 @@
           </a-col>
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="鍒冪(鏃堕棿">
-              <a-range-picker v-model="queryParam.sharpeningTime" @change="onInspectionDateChange" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
+              <a-range-picker v-model="queryParam.sharpeningTime" @change="onToolSharpeningDateChange" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
             </a-form-item>
           </a-col>
           <a-col :xl="4" :lg="7" :md="8" :sm="24">
@@ -28,78 +29,86 @@
         </a-row>
       </a-form>
     </div>
-    <!-- 鏌ヨ鍖哄煙-END -->
 
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
     <div class="table-operator">
-      <div class="table-operator">
-        <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
-      </div>
+      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel">
+            <a-icon type="delete" />
+            鍒犻櫎
+          </a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔
+          <a-icon type="down" />
+        </a-button>
+      </a-dropdown>
     </div>
 
     <!-- table鍖哄煙-begin -->
     <div>
-
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a
+        style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤�
+        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
+      </div>
 
       <a-table
         ref="table"
         size="middle"
-        :scroll="{x:true}"
         bordered
         rowKey="id"
         :columns="columns"
         :dataSource="dataSource"
         :pagination="ipagination"
         :loading="loading"
-        :rowSelection="null"
         class="j-table-force-nowrap"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
         @change="handleTableChange">
 
-
-
         <span slot="action" slot-scope="text, record">
-          <a @click="handleDetail(record)">璇︽儏</a>
+          <a @click="handleEdit(record)">缂栬緫</a>
 
           <a-divider type="vertical" />
           <a-dropdown>
             <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
             <a-menu slot="overlay">
               <a-menu-item>
-                <a @click="handleEdit(record)">缂栬緫</a>
+                <a @click="handleDetail(record)">璇︽儏</a>
               </a-menu-item>
               <a-menu-item>
                 <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
                   <a>鍒犻櫎</a>
                 </a-popconfirm>
               </a-menu-item>
+
             </a-menu>
           </a-dropdown>
         </span>
 
       </a-table>
     </div>
+    <!-- table鍖哄煙-end -->
 
     <tools-sharpening-modal ref="modalForm"  @ok="modalFormOk"></tools-sharpening-modal>
   </a-card>
 </template>
 
 <script>
-
 import '@/assets/less/TableExpand.less'
-import { mixinDevice } from '@/utils/mixin'
 import { JeecgListMixin } from '@/mixins/JeecgListMixin'
 import ToolsSharpeningModal from './modules/ToolsSharpeningModal'
 import { getAction, putAction, deleteAction } from '../../../api/manage'
-
 export default {
-  name: 'ToolSharpeningList ',
-  mixins:[JeecgListMixin, mixinDevice],
+  name: 'ToolSharpeningList',
+  mixins: [JeecgListMixin],
   components: {
     ToolsSharpeningModal
   },
-  data () {
+  data() {
     return {
-      description: '鍒�鍏峰垉纾�',
+      description: '鍒�鍏峰垉纾ㄩ〉闈�',
       // 琛ㄥご
       columns: [
         {
@@ -178,72 +187,22 @@
         exportXlsUrl: "/tms/toolSharpening/exportXls",
         importExcelUrl: "tms/toolSharpening/importExcel",
       },
-      dictOptions:{},
-      superFieldList:[],
-
     }
   },
-  created() {},
   computed: {
-    importExcelUrl: function(){
-      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
-    },
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+    }
   },
-
   methods: {
-    onInspectionDateChange: function(value, dateString) {
-      this.queryParam.sharpeningTimeBegin = dateString[0]
-      this.queryParam.sharpeningTimeEnd = dateString[1]
-    },
-
-
-    handleEdit: function (record) {
-      console.log('record:', record)
-      this.$refs.modalForm.title = '缂栬緫'
-      this.$refs.modalForm.disableSubmit = false
-      this.$refs.modalForm.edit(record)
-
-    },
-    handleDetail:function(record){
-      this.$refs.modalForm.title="璇︽儏";
-      this.$refs.modalForm.disableSubmit = true;
-      this.$refs.modalForm.edit(record);
-    },
-
-
-    handleDelete: function (id) {
-      if (!this.url.delete) {
-        this.$message.error('璇疯缃畊rl.delete灞炴��!')
-        return
-      }
-      deleteAction(this.url.delete, { id: id }).then((res) => {
-        if (res.success) {
-          //閲嶆柊璁$畻鍒嗛〉闂
-          this.$message.success(res.message)
-          this.ipagination.current = 1
-          this.loadData() // 寮哄埗浠庣涓�椤靛姞杞�
-        } else {
-          this.$message.warning(res.message)
-        }
-      })
-    },
-    searchReset() {
-      this.loadData(1)
-    },
-    modalFormOk() {
-      this.loadData()
-    },
-
+        onToolSharpeningDateChange: function(value, dateString) {
+          this.queryParam.sharpeningTimeBegin = dateString[0]
+          this.queryParam.sharpeningTimeEnd = dateString[1]
+        },
 
   }
 }
 </script>
 <style scoped>
 @import '~@assets/less/common.less';
-.enable {
-  color: green;
-}
-.disable {
-  color: red;
-}
 </style>
\ No newline at end of file
diff --git a/src/views/tms/requirement/modules/ToolsModal.vue b/src/views/tms/requirement/modules/ToolsModal.vue
index 8b6e337..a8e1f42 100644
--- a/src/views/tms/requirement/modules/ToolsModal.vue
+++ b/src/views/tms/requirement/modules/ToolsModal.vue
@@ -70,7 +70,7 @@
       columns: [{
         title: '宸ュ叿缂栫爜',
         align: 'center',
-        dataIndex: 'toolCode'
+        dataIndex: 'toolId'
       },
         {
           title: '宸ュ叿绫诲瀷',
@@ -90,7 +90,7 @@
         {
           title: '宸ュ叿鍙傛暟鏍囪瘑',
           align: 'center',
-          dataIndex: 'paramaTableName'
+          dataIndex: 'paramaTableName_dictText'
         },
         {
           title: '鍨嬪彿/鍥惧彿',
@@ -198,7 +198,7 @@
       this.close()
     },
     handleOk() {
-      this.$bus.$emit('selectionRows', this.selectionRows)
+      this.$emit('sendSelectionRows', this.selectionRows[0])
       this.close()
     },
   }
diff --git a/src/views/tms/requirement/modules/ToolsSharpeningModal.vue b/src/views/tms/requirement/modules/ToolsSharpeningModal.vue
index 9346322..d49bc28 100644
--- a/src/views/tms/requirement/modules/ToolsSharpeningModal.vue
+++ b/src/views/tms/requirement/modules/ToolsSharpeningModal.vue
@@ -11,18 +11,20 @@
     @cancel="handleCancel"
     cancelText="鍏抽棴">
 
+
+
     <a-spin :spinning="spinning">
       <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
         <a-row :gutter="24">
           <a-col :span="12">
-            <a-form-model-item prop="standardCode" label="宸ュ叿缂栧彿">
-              <a-input-search v-model="model.toolId" placeholder="璇烽�夋嫨宸ュ叿缂栧彿" :disabled="disableSubmit"
+            <a-form-model-item prop="standardCode" label="宸ュ叿缂栫爜">
+              <a-input-search v-model="model.toolId" placeholder="璇烽�夋嫨宸ュ叿缂栫爜" :disabled="disableSubmit"
                               @search="selectTools" enter-button
               />
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
-            <a-form-model-item prop="classify_id" label="宸ュ叿鍒嗙被缂栫爜">
+            <a-form-model-item prop="classify_id" label="宸ュ叿鍒嗙被鍚嶇О">
               <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyId" readOnly :disabled="disableSubmit" />
             </a-form-model-item>
           </a-col>
@@ -31,13 +33,13 @@
         <a-row :gutter="24">
           <a-col :span="12">
             <a-form-model-item prop="paramaTableName" label="宸ュ叿鍙傛暟鏍囪瘑">
-              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" readOnly v-model="model.paramaTableName" readOnly
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" readOnly v-model="model.paramaTableName_dictText" readOnly
                        :disabled="disableSubmit" />
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
             <a-form-model-item label="宸ュ叿绫诲瀷">
-              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.applicationType" readOnly
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.applicationType_dictText" readOnly
                        :disabled="disableSubmit" />
             </a-form-model-item>
           </a-col>
@@ -99,13 +101,7 @@
         </a-row>
         <a-row :gutter="24">
           <a-col :span="12">
-            <a-form-model-item label="瀛樺偍浣嶇疆" prop="storageLocation">
-              <a-input placeholder="閫夋嫨濉啓瀛樺偍浣嶇疆" v-model="model.positionCode" readOnly
-                       :disabled="disableSubmit" />
-            </a-form-model-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-model-item label="澶囨敞">
+            <a-form-model-item label="澶囨敞" prop="remark">
               <a-textarea v-model="model.remark" rows="3" placeholder="璇疯緭鍏ュ娉�" :disabled="disableSubmit" />
             </a-form-model-item>
           </a-col>
@@ -119,7 +115,7 @@
 
       <a-button @click="handleOk()" :disabled="disableSubmit" type="primary" :loading="confirmLoading">纭畾</a-button>
     </template>
-    <tools-modal ref="toolListModel"></tools-modal>
+    <tools-modal ref="toolListModel"  @sendSelectionRows="getRows"></tools-modal>
 
 
   </j-modal>
@@ -129,11 +125,14 @@
 import { getAction, postAction, requestPut } from '@/api/manage'
 import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
 import ToolsModal from '@views/tms/requirement/modules/ToolsModal.vue'
+import pick from 'lodash.pick'
+import DeviceListModel from '@views/mdc/base/modules/EquipmentList/DeviceListModal.vue'
 
 export default {
   name: 'ToolsSharpeningModal',
   mixins: [JVxeTableModelMixin],
   components: {
+    DeviceListModel,
     ToolsModal
   },
   data() {
@@ -165,36 +164,33 @@
           { required: true, message: '璇疯緭鍏ュ垉纾ㄧ粨鏋滃強寤鸿!' }
         ]
       },
+      lastSelectionData: null,
       url: {
         add: '/tms/toolSharpening/add',
         edit: '/tms/toolSharpening/edit',
-        queryDetailList: '/tms/toolSharpening/listToolSharpening'
+        // queryDetailList: '/tms/toolSharpening/listToolSharpening'
       }
     }
   },
   created() {
   },
-  mounted() {
-    this.$bus.$on('selectionRows', (data) => {
-      console.log('selectionRows', data)
-      if (data && data.length > 0) {
-        const item = data[0]
-        // 浣跨敤 $set 纭繚 model 鐨勫睘鎬ф槸鍝嶅簲寮忕殑
-        this.$set(this.model, 'toolId', item.toolCode)
-        this.$set(this.model, 'toolCode', item.id)
+
+  methods: {
+    getRows(item) {
+      console.log(item)
+      if (item.id) {
+        this.$set(this.model, 'toolId', item.toolId)
+        this.$set(this.model, 'toolCode', item.toolCode)
         this.$set(this.model, 'classifyId', item.classifyId)
-        this.$set(this.model, 'paramaTableName', item.paramaTableName_dictText)
-        this.$set(this.model, 'applicationType', item.applicationType_dictText)
+        this.$set(this.model, 'paramaTableName_dictText', item.paramaTableName_dictText)
+        this.$set(this.model, 'applicationType_dictText', item.applicationType_dictText)
         this.$set(this.model, 'toolModel', item.toolModel)
         this.$set(this.model, 'provinceCity', item.provinceCity)
         this.$set(this.model, 'warehouseId', item.warehouseId)
         this.$set(this.model, 'positionCode', item.positionCode)
         this.$set(this.model, 'mainUnit', item.mainUnit)
       }
-    })
-
-  },
-  methods: {
+    },
 
     selectTools: function() {
       this.$refs.toolListModel.showModals()
@@ -203,35 +199,32 @@
     },
 
     add() {
-      this.addShow = false
-      this.edit()
+      this.edit({})
     },
-
     edit(record) {
-      console.log(record)
-      // this.model = Object.assign({}, record)
-      this.visible = true
-      getAction(this.url.queryDetailList, {
-        id: record.id,
-        pageNo: 1,
-        pageSize: 99999
-      }).then((res) => {
-        if (res.success) {
-          const readOnlyData = res.result.records[0] || {}
-          this.model = Object.assign({}, this.model, {
-            paramaTableName: readOnlyData.paramaTableName_dictText,
-            applicationType: readOnlyData.applicationType_dictText,
-            provinceCity: readOnlyData.provinceCity,
-            warehouseId: readOnlyData.warehouseId,
-            positionCode: readOnlyData.positionCode,
-            mainUnit: readOnlyData.mainUnit,
-            toolModel: readOnlyData.toolModel
-          })
+      let that = this
+      that.visible = true
+      that.model = Object.assign({}, record)
+      // this.$nextTick(() => {
+      //   this.form.setFieldsValue(pick(that.model, 'selectedDeparts', 'selectedProduction', 'equipmentId', 'equipmentName', 'equipmentModel', 'equipmentType', 'equipmentIp', 'dataPort',
+      //     'driveType', 'sortNo', 'remark', 'systemVersion', 'devicePower', 'controlSystem', 'saveTableName', 'systemValue'))
+      // })
+    },
+    // edit(record) {
+    //   let that = this
+    //   that.visible = true
+    //   that.model = Object.assign({}, record)
+    //
+    //   // 濡傛灉鏈� selectionRows 鏁版嵁锛屽垯閲嶆柊璧嬪��
+    //   if (this.lastSelectionData && this.lastSelectionData.length > 0) {
+    //     this.assignModelFromSelection(this.lastSelectionData[0])
+    //     console.log('this.model',this.assignModelFromSelection(this.lastSelectionData[0]))
+    //   }
+    // },
+    close() {
+      this.$emit('close')
+      this.visible = false
 
-        } else {
-          this.dataSource = null
-        }
-      })
     },
     handleOk() {
       const that = this
@@ -272,15 +265,14 @@
       this.close()
     },
 
-    close() {
-      this.$emit('close')
-      this.visible = false
-      this.$refs.form.clearValidate()
-    }
+
   }
 }
 </script>
 
 <style lang="less" scoped>
 
-</style>
\ No newline at end of file
+</style>
+
+
+

--
Gitblit v1.9.3