dazhaxie пре 1 недеља
родитељ
комит
e4b1a4f0cc

+ 122 - 2
public/hitch-screen/index.html

@@ -13,11 +13,16 @@
 
 
 <body>
 <body>
   <div class="positon">
   <div class="positon">
+    <button class="back-btn" onclick="goBack()">&larr; 返回</button>
     底图:<select id="mapName">
     底图:<select id="mapName">
     </select>
     </select>
   </div>
   </div>
   <div class="title-name">设备运行状态一览图</div>
   <div class="title-name">设备运行状态一览图</div>
-  <div class="title-icon"><span>正常设备</span><span>计划性维修设备</span><span>非计划性维修设备</span></div>
+  <div class="title-icon">
+    <label class="legend-item legend-normal"><input type="checkbox" id="filterNormal" checked> 正常设备</label>
+    <label class="legend-item legend-yellow"><input type="checkbox" id="filterPlanned" checked> 计划性维修设备</label>
+<!--    <label class="legend-item legend-red"><input type="checkbox" id="filterUnplanned" checked> 非计划性维修设备</label>-->
+  </div>
   <div id="echart" class="echart"></div>
   <div id="echart" class="echart"></div>
   <div class="data">
   <div class="data">
     <div>
     <div>
@@ -62,6 +67,24 @@
     z-index: 1000;
     z-index: 1000;
   }
   }
 
 
+  .back-btn {
+    display: inline-block;
+    margin-right: 15px;
+    padding: 4px 14px;
+    background-color: #174FBF;
+    color: #fff;
+    border: none;
+    border-radius: 4px;
+    font-size: 14px;
+    cursor: pointer;
+    vertical-align: middle;
+    transition: background-color 0.2s;
+  }
+
+  .back-btn:hover {
+    background-color: #0f3d99;
+  }
+
   #mapName {
   #mapName {
     width: 120px;
     width: 120px;
   }
   }
@@ -100,6 +123,53 @@
     color: black;
     color: black;
     z-index: 10000;
     z-index: 10000;
   }
   }
+
+  .title-icon {
+    position: absolute;
+    top: 130px;
+    left: 30%;
+    z-index: 10000;
+  }
+
+  .title-icon label.legend-item {
+    display: inline-flex;
+    align-items: center;
+    margin-right: 24px;
+    font-size: 14px;
+    color: #333;
+    cursor: pointer;
+    user-select: none;
+  }
+
+  .title-icon label.legend-item::before {
+    content: '';
+    display: inline-block;
+    width: 12px;
+    height: 12px;
+    border-radius: 50%;
+    margin-right: 8px;
+  }
+
+  .title-icon label.legend-normal::before {
+    background-color: #174FBF;
+    box-shadow: 0 0 6px #174FBF;
+  }
+
+  .title-icon label.legend-yellow::before {
+    background-color: yellow;
+    box-shadow: 0 0 6px yellow;
+  }
+
+  .title-icon label.legend-red::before {
+    background-color: red;
+    box-shadow: 0 0 6px red;
+  }
+
+  .title-icon input[type="checkbox"] {
+    margin-right: 5px;
+    cursor: pointer;
+    transform: scale(1.2);
+  }
 </style>
 </style>
 <script>
 <script>
   function getBase64(image) {
   function getBase64(image) {
@@ -476,14 +546,40 @@
         data.repairSbInfoListYellow[i].no])
         data.repairSbInfoListYellow[i].no])
       }
       }
     }
     }
+    // 保存原始数据副本
+    option._originalData = {
+      normal: normalSbInfoList.slice(),
+      red: repairSbInfoListRed.slice(),
+      yellow: repairSbInfoListYellow.slice()
+    };
     option.series[0].data = normalSbInfoList;// 正常数据:
     option.series[0].data = normalSbInfoList;// 正常数据:
     option.series[1].data = normalSbInfoList;// 正常数据的编号
     option.series[1].data = normalSbInfoList;// 正常数据的编号
     option.series[2].data = repairSbInfoListRed;// 非计划性报修 红色编号
     option.series[2].data = repairSbInfoListRed;// 非计划性报修 红色编号
     option.series[3].data = repairSbInfoListRed;// 非计划性报修 红色
     option.series[3].data = repairSbInfoListRed;// 非计划性报修 红色
     option.series[4].data = repairSbInfoListYellow;// 计划性报修 黃色编号
     option.series[4].data = repairSbInfoListYellow;// 计划性报修 黃色编号
     option.series[5].data = repairSbInfoListYellow;// 计划性报修 黃色
     option.series[5].data = repairSbInfoListYellow;// 计划性报修 黃色
-    myChart.setOption(option, true)
+    applyFilter();
+  }
+
+  function applyFilter() {
+    const showNormal = $('#filterNormal').is(':checked');
+    const showPlanned = $('#filterPlanned').is(':checked');
+    const showUnplanned = $('#filterUnplanned').is(':checked');
+    const orig = option._originalData || { normal: [], red: [], yellow: [] };
+
+    option.series[0].data = showNormal ? orig.normal : [];
+    option.series[1].data = showNormal ? orig.normal : [];
+    option.series[2].data = showUnplanned ? orig.red : [];
+    option.series[3].data = showUnplanned ? orig.red : [];
+    option.series[4].data = showPlanned ? orig.yellow : [];
+    option.series[5].data = showPlanned ? orig.yellow : [];
+
+    myChart.setOption(option, true);
   }
   }
+
+  $('#filterNormal, #filterPlanned, #filterUnplanned').on('change', function () {
+    applyFilter();
+  });
   function getHeader() {
   function getHeader() {
     return {
     return {
       Authorization: getToken(),
       Authorization: getToken(),
@@ -501,6 +597,30 @@
     return 'Bearer ' + storeTokenJson.value
     return 'Bearer ' + storeTokenJson.value
   }
   }
 
 
+  function goBack() {
+    // 优先尝试让父级 Vue 路由跳转到首页
+    try {
+      if (window.parent && window.parent !== window) {
+        // 通知父级 Vue 跳转首页
+        window.parent.postMessage({ action: 'navigateHome' }, '*')
+        // 作为兜底:让父级回退
+        setTimeout(function () {
+          if (window.parent.history.length > 1) {
+            window.parent.history.back()
+          }
+        }, 100)
+      } else {
+        if (window.history.length > 1) {
+          window.history.back()
+        }
+      }
+    } catch (e) {
+      if (window.history.length > 1) {
+        window.history.back()
+      }
+    }
+  }
+
   (function () {
   (function () {
     console.log("滚动")
     console.log("滚动")
     $('.scrollDiv').liMarquee({
     $('.scrollDiv').liMarquee({

+ 11 - 0
src/api/check/check-detail.js

@@ -143,6 +143,17 @@ export function importCheckDetail(parameter) {
   })
   })
 }
 }
 /**
 /**
+ * download import template
+ * @returns {*}
+ */
+export function downloadCheckDetailImportTemplate() {
+  return axios({
+    url: '/check/requirements/import/template',
+    method: 'get',
+    responseType: 'blob'
+  })
+}
+/**
  * page func
  * page func
  * parameter: { }
  * parameter: { }
  * @param parameter
  * @param parameter

+ 12 - 0
src/api/sb/info.js

@@ -405,6 +405,18 @@ export function importSbInfo (parameter) {
 }
 }
 
 
 /**
 /**
+ * download import template
+ * @returns {*}
+ */
+export function downloadSbInfoImportTemplate () {
+  return axios({
+    url: '/sb/infos/import/template',
+    method: 'get',
+    responseType: 'blob'
+  })
+}
+
+/**
  * update func
  * update func
  * parameter: { }
  * parameter: { }
  * @param parameter
  * @param parameter

+ 12 - 0
src/api/sqarepartmanage/sparepartinfo.js

@@ -310,6 +310,18 @@ export function importSparePartInfoForUpdate (parameter) {
     data: parameter
     data: parameter
   })
   })
 }
 }
+
+/**
+ * download import template
+ * @returns {*}
+ */
+export function downloadSparePartInfoImportTemplate () {
+  return axios({
+    url: '/sqarepartmanage/spare-part-info/import/template',
+    method: 'get',
+    responseType: 'blob'
+  })
+}
 /**
 /**
  * delete batch func
  * delete batch func
  * parameter: { }
  * parameter: { }

+ 13 - 0
src/views/big-screen/RepairScreen.vue

@@ -17,6 +17,19 @@ export default {
       url: '/hitch-screen/index.html',
       url: '/hitch-screen/index.html',
       clientHeight: '1000px'
       clientHeight: '1000px'
     }
     }
+  },
+  mounted () {
+    window.addEventListener('message', this.handleIframeMessage)
+  },
+  beforeDestroy () {
+    window.removeEventListener('message', this.handleIframeMessage)
+  },
+  methods: {
+    handleIframeMessage (event) {
+      if (event.data && event.data.action === 'navigateHome') {
+        this.$router.push('/')
+      }
+    }
   }
   }
 }
 }
 </script>
 </script>

+ 8 - 1
src/views/check/check-detail/CheckDetail.vue

@@ -43,6 +43,8 @@
       <!--      <a-button style="margin-left: 3%;" v-if="$auth('fill-infos-export')" type="primary" icon="download" @click="doExport">导出数据</a-button>-->
       <!--      <a-button style="margin-left: 3%;" v-if="$auth('fill-infos-export')" type="primary" icon="download" @click="doExport">导出数据</a-button>-->
       <a-button style="margin-left: 3%;" v-if="$auth('fill-infos-export')" type="primary" icon="download"
       <a-button style="margin-left: 3%;" v-if="$auth('fill-infos-export')" type="primary" icon="download"
         @click="doImport">导入标准文件</a-button>
         @click="doImport">导入标准文件</a-button>
+      <a-button style="margin-left: 3%;" v-if="$auth('fill-infos-export')" type="primary" icon="download"
+        @click="doDownloadImportTemplate">导入模板下载</a-button>
       <!--      <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('fill-infos-del')">
       <!--      <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('fill-infos-del')">
         <a-menu slot="overlay">
         <a-menu slot="overlay">
           <a-popconfirm title="是否要删除所选数据?" @confirm="batchDelete()">
           <a-popconfirm title="是否要删除所选数据?" @confirm="batchDelete()">
@@ -84,7 +86,7 @@ import ImportForm from './modules/ImportForm'
 import ListModal from './modules/listModal'
 import ListModal from './modules/listModal'
 import { fetchSbTypeTree } from '@/api/sb/type'
 import { fetchSbTypeTree } from '@/api/sb/type'
 
 
-import { getCheckDetailPageType, deleteCheckDetails, fetchCheckDetailBySbType, exportCheckDetail } from '@/api/check/check-detail'
+import { getCheckDetailPageType, deleteCheckDetails, fetchCheckDetailBySbType, exportCheckDetail, downloadCheckDetailImportTemplate } from '@/api/check/check-detail'
 
 
 export default {
 export default {
   name: 'CheckDetailList',
   name: 'CheckDetailList',
@@ -287,6 +289,11 @@ export default {
     doImport() {
     doImport() {
       this.$refs.importForm.base()
       this.$refs.importForm.base()
     },
     },
+    doDownloadImportTemplate() {
+      downloadCheckDetailImportTemplate().then((file) => {
+        this.BaseTool.UPLOAD.downLoadExportExcel(file)
+      })
+    },
     // 勾选预览
     // 勾选预览
     previewSome() {
     previewSome() {
       const length = this.selectedRows.length
       const length = this.selectedRows.length

+ 7 - 1
src/views/sb/info/SbInfo.vue

@@ -141,6 +141,7 @@
               <a-icon type="upload"/>
               <a-icon type="upload"/>
               修改导入
               修改导入
             </a-button>
             </a-button>
+            <a-button style="margin-left:8px;" type="primary" icon="download" @click="doDownloadImportTemplate">导入模板下载</a-button>
             <a-button style="margin-left: 8px" type="primary" icon="printer" @click="handlePrintBatch()">批量打印</a-button>
             <a-button style="margin-left: 8px" type="primary" icon="printer" @click="handlePrintBatch()">批量打印</a-button>
             <a-button style="margin-left: 8px" v-if="$auth('sb-infos-generate-code-all')" :loading="confirmLoading" type="primary" @click="batchGenerate()">重新生成二维码</a-button>
             <a-button style="margin-left: 8px" v-if="$auth('sb-infos-generate-code-all')" :loading="confirmLoading" type="primary" @click="batchGenerate()">重新生成二维码</a-button>
             <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('sb-infos-del')">
             <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('sb-infos-del')">
@@ -235,7 +236,7 @@ import BaseFormStatusLog from '@/views/sb/status-log/modules/BaseForm'
 import Detail from './modules/Detail'
 import Detail from './modules/Detail'
 import DownloadModal from '@/views/download/DownloadModal'
 import DownloadModal from '@/views/download/DownloadModal'
 import PreviewModal from '@/views/preview/PreviewModal'
 import PreviewModal from '@/views/preview/PreviewModal'
-import { getSbInfoPage, deleteSbInfos, fetchSbInfo, fetchSbInfos, exportSbInfo, exportSbFeeInfo } from '@/api/sb/info'
+import { getSbInfoPage, deleteSbInfos, fetchSbInfo, fetchSbInfos, exportSbInfo, exportSbFeeInfo, downloadSbInfoImportTemplate } from '@/api/sb/info'
 import { queryDept } from '@/api/upms/dept'
 import { queryDept } from '@/api/upms/dept'
 import { generateSbCodeAll } from '@/api/upms/code'
 import { generateSbCodeAll } from '@/api/upms/code'
 import { fetchSbTypeTree } from '@/api/sb/type'
 import { fetchSbTypeTree } from '@/api/sb/type'
@@ -757,6 +758,11 @@ export default {
     },
     },
     doImportForUpdate () {
     doImportForUpdate () {
       this.$refs.importModalUpdate.base(null, null)
       this.$refs.importModalUpdate.base(null, null)
+    },
+    doDownloadImportTemplate () {
+      downloadSbInfoImportTemplate().then(file => {
+        this.BaseTool.UPLOAD.downLoadExportExcel(file)
+      })
     }
     }
   }
   }
 }
 }

+ 8 - 1
src/views/sqarepartmanage/sparepartinfo/SparePartInfo.vue

@@ -116,6 +116,7 @@
           <a-button style="margin-left: 8px" v-if="$auth('sqarepartmanage-spare-part-info-export')" type="primary" icon="download" @click="doExport">导出</a-button>
           <a-button style="margin-left: 8px" v-if="$auth('sqarepartmanage-spare-part-info-export')" type="primary" icon="download" @click="doExport">导出</a-button>
           <a-button style="margin-left: 8px" v-if="$auth('sqarepartmanage-spare-part-info-export')" type="primary" icon="upload" @click="doImport">初始化新增导入</a-button>
           <a-button style="margin-left: 8px" v-if="$auth('sqarepartmanage-spare-part-info-export')" type="primary" icon="upload" @click="doImport">初始化新增导入</a-button>
           <a-button style="margin-left: 8px" v-if="$auth('sqarepartmanage-spare-part-info-export')" type="primary" icon="upload" @click="doImportForUpdate">修改导入</a-button>
           <a-button style="margin-left: 8px" v-if="$auth('sqarepartmanage-spare-part-info-export')" type="primary" icon="upload" @click="doImportForUpdate">修改导入</a-button>
+          <a-button style="margin-left: 8px" type="primary" icon="download" @click="doDownloadImportTemplate">导入模板下载</a-button>
           <!--          <a-button style="margin-left: 8px" v-if="selectedRowKeys.length > 0 && $auth('sqarepartmanage-spare-part-info-del')" type="primary" icon="upload" @click="handleSpareSelect">批量矫正</a-button>-->
           <!--          <a-button style="margin-left: 8px" v-if="selectedRowKeys.length > 0 && $auth('sqarepartmanage-spare-part-info-del')" type="primary" icon="upload" @click="handleSpareSelect">批量矫正</a-button>-->
           <a-button style="margin-left: 8px" type="primary" icon="printer" @click="handlePrintBatch()">批量打印</a-button>
           <a-button style="margin-left: 8px" type="primary" icon="printer" @click="handlePrintBatch()">批量打印</a-button>
           <a-button style="margin-left: 8px" v-if="$auth('sb-infos-generate-code-all')" :loading="confirmLoading" type="primary" @click="batchGenerate()">重新生成二维码</a-button>
           <a-button style="margin-left: 8px" v-if="$auth('sb-infos-generate-code-all')" :loading="confirmLoading" type="primary" @click="batchGenerate()">重新生成二维码</a-button>
@@ -195,7 +196,8 @@ import {
   fetchInStoreList,
   fetchInStoreList,
   fetchOutStoreList,
   fetchOutStoreList,
   exportSparePartInfo,
   exportSparePartInfo,
-  fetchSparePartInfos
+  fetchSparePartInfos,
+  downloadSparePartInfoImportTemplate
 } from '@/api/sqarepartmanage/sparepartinfo'
 } from '@/api/sqarepartmanage/sparepartinfo'
 import { fetchSpareTypeTree } from '@/api/sqarepartmanage/sparetype'
 import { fetchSpareTypeTree } from '@/api/sqarepartmanage/sparetype'
 import ImportFormAdd from './modules/ImportFormAdd'
 import ImportFormAdd from './modules/ImportFormAdd'
@@ -563,6 +565,11 @@ export default {
     doImportForUpdate () {
     doImportForUpdate () {
       this.$refs.importModalForUpdate.base()
       this.$refs.importModalForUpdate.base()
     },
     },
+    doDownloadImportTemplate () {
+      downloadSparePartInfoImportTemplate().then(file => {
+        this.BaseTool.UPLOAD.downLoadExportExcel(file)
+      })
+    },
     handleSpareSelect (id) {
     handleSpareSelect (id) {
       const length = this.selectedRows.length
       const length = this.selectedRows.length
       if (length < 2) {
       if (length < 2) {