cuilei
2025-06-13 1e653db94c24389cc7615fd4a7ef1d63b00af534
Merge remote-tracking branch 'origin/master'
已添加19个文件
已修改30个文件
已删除7个文件
5791 ■■■■ 文件已修改
src/assets/terminal/call.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/close.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/demo.css 539 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/demo_index.html 345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/fault.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/iconfont.css 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/iconfont.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/iconfont.json 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/maintenance.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/passRate.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/spotCheck.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/work.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/layouts/TerminalLayout.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/config/router.config.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/TerminalIndex.vue 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/TerminalIndex/ProcedureCall.vue 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dnc/base/modules/TerminalIndex/ReportPassRate.vue 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/repair/EamRepairOrderList.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/repair/EamReportRepairList.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue 287 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/EfficiencyPunchReport.vue 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/modules/EfficiencyPunchReport/EfficiencyPunchReportModal.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/ToolLedgerList.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/lossBound/LossboundDetailList.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/lossBound/LossboundList.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/lossBound/modules/LossboundModal.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/baseTools/BaseToolsListRight.vue 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/baseTools/ParaBladeModal.vue 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/baseTools/ParaCommonToolModal.vue 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/baseTools/ParaHoleToolsModal.vue 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/baseTools/ParaMillToolModal.vue 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/baseTools/ParaThreadingToolModal.vue 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/baseTools/ParaTurningToolsModal.vue 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/baseTools/ToolsConfigPropertyModal.vue 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/inbound/InboundModel.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/inboundOrder/InboundOrderModel.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/toolLedger/InStoreDetailList.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/toolLedger/OutStoreDetailList.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/toolLedger/StocktakingList.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue 323 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/toolLedger/ToolLedgerListRight.vue 516 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/toolLedger/ToolLossList.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/toolLedger/ToolSharpenList.vue 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/requirement/ToolSharpeningList .vue 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/requirement/modules/ToolsModal.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/requirement/modules/ToolsSharpeningModal.vue 112 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/terminal/call.svg
ÎļþÒÑɾ³ý
src/assets/terminal/close.svg
ÎļþÒÑɾ³ý
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;
}
/* ä»£ç é«˜äº® */
/* 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;
}
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>
  <!-- ä»£ç é«˜äº® -->
  <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 æ”¯æŒä¸¤ç§æ–¹å¼å¼•用多色图标:SVG 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 ä»£ç ï¼š</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 ä»£ç ï¼š</h3>
<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
</code></pre>
          <h3 id="-css-">第二步:加入通用 CSS ä»£ç ï¼ˆå¼•入一次就行):</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>
src/assets/terminal/fault.svg
ÎļþÒÑɾ³ý
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";
}
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);
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
    }
  ]
}
src/assets/terminal/iconfont.ttf
Binary files differ
src/assets/terminal/maintenance.svg
ÎļþÒÑɾ³ý
src/assets/terminal/passRate.svg
ÎļþÒÑɾ³ý
src/assets/terminal/spotCheck.svg
ÎļþÒÑɾ³ý
src/assets/terminal/work.svg
ÎļþÒÑɾ³ý
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
      }
    },
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')
      },
    ]
  },
  {
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>
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;
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;
      }
    }
  }
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>
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>
</script>
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() {
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
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>
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>
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'
          },
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
          },
          {
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
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>
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>
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>
src/views/tms/lossBound/LossboundDetailList.vue
@@ -82,7 +82,7 @@
        {
          title: '刀具编号',
          align: 'center',
          dataIndex: 'toolCode'
          dataIndex: 'toolId'
        },
        {
          title: '工具类型',
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()
src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue
@@ -64,7 +64,7 @@
        {
          title: '工具编码',
          align: 'center',
          dataIndex: 'toolCode'
          dataIndex: 'toolId'
        },
        {
          title: '中文名称',
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,
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); //释放掉blob对象
        }
        this.loading = false // éšè—é®ç½©
      })
    },
    },
  }
</script>
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>
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>
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>
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>
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',
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>
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>
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
        })
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
        })
      }
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>
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>
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>
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>
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>
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>
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>
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: '责任人',
          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>
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();
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('请设置url.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>
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()
    },
  }
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>
</style>