From 1540871d2efbcd6c89680e9d13724b2148ffd0ad Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 28 八月 2026 16:53:10 +0800
Subject: [PATCH] feat(inspection): 添加报告类型选择功能 - 在检测视图、检测任务和检测文档组件中新增报告类型下拉选择框 - 添加检测报告和检验报告两种选项供用户选择 - 在检验报告类型时对注册检测结果进行条件性处理

---
 src/views/CNAS/resourceDemand/device/component/deviceOverview.vue |   99 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 88 insertions(+), 11 deletions(-)

diff --git a/src/views/CNAS/resourceDemand/device/component/deviceOverview.vue b/src/views/CNAS/resourceDemand/device/component/deviceOverview.vue
index 1bdd8e4..b64653b 100644
--- a/src/views/CNAS/resourceDemand/device/component/deviceOverview.vue
+++ b/src/views/CNAS/resourceDemand/device/component/deviceOverview.vue
@@ -1,22 +1,28 @@
 <!-- 璁惧鎬昏 -->
 <template>
   <div class="role_manage">
-    <div>
-      <el-form :model="entity" inline label-position="right">
-        <el-form-item label="鐘舵��:">
-          <el-select v-model="entity.deviceStatus" placeholder="鍏ㄩ儴" size="small" clearable>
+    <div style="display: flex;justify-content: space-between;margin-top: 10px;">
+      <div style="display: flex;">
+        <div style="margin-bottom: 18px;margin-right: 10px;display: flex;align-items: center;line-height: 32px;">
+          <span style="width: 48px;font-size: 14px;font-weight: 700;color: #606266;">鐘舵��</span>
+          <el-select v-model="entity.deviceStatus" placeholder="鍏ㄩ儴"
+                     @change="currentPage = 1, keyMap = {}, list = [], finishLoding = false, refreshTable()"
+                     size="small" clearable>
             <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
             </el-option>
           </el-select>
-        </el-form-item>
-        <el-form-item label="璁惧鍚嶇О:">
-          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.deviceName"></el-input>
-        </el-form-item>
-        <el-form-item>
+        </div>
+        <div style="margin-bottom: 18px;margin-right: 10px;display: flex;align-items: center;line-height: 32px;">
+          <span style="width: 88px;font-size: 14px;font-weight: 700;color: #606266;">璁惧鍚嶇О</span>
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.deviceName"
+                    @keyup.enter.native="currentPage = 1, keyMap = {}, list = [], finishLoding = false, refreshTable()"></el-input>
+        </div>
+        <div style="line-height: 30px;">
           <el-button size="mini" type="primary" @click="currentPage = 1, keyMap = {}, list = [], finishLoding = false, refreshTable()">鏌ヨ</el-button>
           <el-button size="mini" @click="refresh()">閲嶇疆</el-button>
-        </el-form-item>
-      </el-form>
+          <el-button size="mini" type="primary" @click="importVisible = true">瀵煎叆</el-button>
+        </div>
+      </div>
     </div>
     <div class="table" v-loading="loading">
       <scroll-pagination @load="refreshTable()" :finishLoding="finishLoding" :list="list"
@@ -68,6 +74,22 @@
         鏆傛棤鏁版嵁
       </div>
     </div>
+    <el-dialog title="璁惧瀵煎叆" :visible.sync="importVisible" width="500px" @closed="resetImport">
+      <div style="margin-bottom: 12px;">
+        璇蜂娇鐢ㄨ澶囧鍏ユā鏉垮~鍐欐暟鎹紝鍗曚釜鏂囦欢涓嶈秴杩�10MB銆�
+        <el-button type="text" @click="downloadTemplate">涓嬭浇瀵煎叆妯℃澘</el-button>
+      </div>
+      <el-upload ref="deviceUpload" drag name="file" accept=".xlsx" :action="importAction"
+                 :headers="uploadHeader" :auto-upload="false" :limit="1" :file-list="importFiles"
+                 :before-upload="beforeImport" :on-success="importSuccess" :on-error="importError">
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+      </el-upload>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="importVisible = false">鍙栨秷</el-button>
+        <el-button type="primary" :loading="importing" @click="submitImport">瀵煎叆</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
@@ -75,6 +97,7 @@
 import ScrollPagination from '@/components/index/scroll-paging.vue'
 import {
   selectDeviceParameter,
+  downloadDeviceImportTemplate,
 } from '@/api/cnas/resourceDemand/device.js'
 export default {
   props: {
@@ -103,6 +126,14 @@
       finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡
       keyMap: {},
       laboratoryNameIsNull: false,
+      importVisible: false,
+      importing: false,
+      importFiles: [],
+    }
+  },
+  computed: {
+    importAction() {
+      return this.javaApi + '/deviceScope/importDevice'
     }
   },
   created() {
@@ -113,6 +144,52 @@
     this.clickSidebar(this.clickNodeVal)
   },
   methods: {
+    downloadTemplate() {
+      downloadDeviceImportTemplate().then(res => {
+        this.$download.saveAs(new Blob([res]), '璁惧瀵煎叆妯℃澘.xlsx')
+      })
+    },
+    submitImport() {
+      if (!this.$refs.deviceUpload.uploadFiles.length) {
+        this.$message.warning('璇烽�夋嫨闇�瑕佸鍏ョ殑Excel鏂囦欢')
+        return
+      }
+      this.$refs.deviceUpload.submit()
+    },
+    beforeImport(file) {
+      if (!file.name.toLowerCase().endsWith('.xlsx')) {
+        this.$message.error('浠呮敮鎸�.xlsx鏍煎紡鏂囦欢')
+        return false
+      }
+      if (file.size > 10 * 1024 * 1024) {
+        this.$message.error('瀵煎叆鏂囦欢涓嶈兘瓒呰繃10MB')
+        return false
+      }
+      this.importing = true
+      return true
+    },
+    importSuccess(response) {
+      this.importing = false
+      if (response.code !== 200) {
+        this.$message.error(response.message || response.msg || '瀵煎叆澶辫触')
+        return
+      }
+      this.$message.success(`鎴愬姛瀵煎叆${response.data}鏉¤澶嘸)
+      this.importVisible = false
+      this.refresh()
+      this.$emit('refresh-tree')
+    },
+    importError() {
+      this.importing = false
+      this.$message.error('瀵煎叆澶辫触')
+    },
+    resetImport() {
+      this.importing = false
+      this.importFiles = []
+      if (this.$refs.deviceUpload) {
+        this.$refs.deviceUpload.clearFiles()
+      }
+    },
     refreshTable() {
       const key = `_${this.currentPage}`
       const value = this.keyMap[key]

--
Gitblit v1.9.3