Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/develop-rmd' into develop

wanggaokun 1 gadu atpakaļ
vecāks
revīzija
e80cdd9e69

+ 1 - 1
PHM-web/public/index.html

@@ -138,7 +138,7 @@
     }
     /* 全局搜索框处的文字自适应 */
    .el-form-item__label{
-      width: 100px !important;
+      /* width: 100px !important; */
       overflow: hidden;
       text-overflow: ellipsis;
       white-space: nowrap;

+ 29 - 1
PHM-web/src/router/index.js

@@ -128,13 +128,41 @@ export const dynamicRoutes = [
     permissions: ['manage:sortie:edit'],
     children: [
       {
-        path: 'dataPlayback/:sortieId',
+        path: 'dataPlayback',
         component: () => import('@/views/manage/sortie/dataPlayBack'),
         name: 'dataPlayBack',
         meta: { title: '数据回放', activeMenu: '/integratedDataManage/sortie' }
       }
     ]
   },
+  {
+    path: '/manage/integratedDataManage/sortie',
+    component: Layout,
+    hidden: true,
+    permissions: ['manage:sortie:edit'],
+    children: [
+      {
+        path: 'sortieDetail',
+        component: () => import('@/views/manage/sortie/sortieDetail'),
+        name: 'SortieDetail',
+        meta: { title: '架次详情', activeMenu: '/integratedDataManage/sortie' }
+      }
+    ]
+  },
+  {
+    path: '/manage/integratedDataManage/sortie',
+    component: Layout,
+    hidden: true,
+    permissions: ['manage:sortie:edit'],
+    children: [
+      {
+        path: 'selectParameters',
+        component: () => import('@/views/manage/sortie/selectParameters'),
+        name: 'selectParameters',
+        meta: { title: '选择参数', activeMenu: '/integratedDataManage/sortie' }
+      }
+    ]
+  },
   {
     path: '/manage',
     component: Layout,

+ 45 - 37
PHM-web/src/views/manage/dataDown/dataDownDialog.vue

@@ -2,7 +2,7 @@
   <div>
     <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="指令" prop="order">
+        <!-- <el-form-item label="指令" prop="order">
           <el-select v-model="form.order" placeholder="请选择指令" style="width:100%">
             <el-option v-for="item in instructionInfoList" :key="item.attribute" :label="item.attribute"
               :value="item.attribute">
@@ -11,7 +11,14 @@
         </el-form-item>
         <el-form-item label="备注" prop="remark">
           <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item> -->
+        <el-form-item label="指令" prop="order">
+          <template>
+            <el-radio v-model="radio" label="1">备选项</el-radio>
+            <el-radio v-model="radio" label="2">备选项</el-radio>
+          </template>
         </el-form-item>
+
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm" :loading="butLoading">{{
@@ -24,19 +31,19 @@
 </template>
 
 <script>
-import { listInstructionInfo } from "@/api/manage/instructionInfo";
+import { listInstructionInfo } from '@/api/manage/instructionInfo'
 export default {
   name: 'dataDownDialog',
   props: {
-    open:{
-      type:Boolean
-    }, 
-    cancel:{
-      type:Function
+    open: {
+      type: Boolean,
+    },
+    cancel: {
+      type: Function,
+    },
+    getList: {
+      type: Function,
     },
-    getList:{
-      type:Function,
-    }
   },
   data() {
     return {
@@ -45,23 +52,24 @@ export default {
       // 按钮加载
       butLoading: false,
       // 按钮显示文本
-      butText: "点击下载",
+      butText: '点击下载',
       // 弹出层标题
-      title: "",
+      title: '',
       // 表单参数
       form: {
-        type: ".xlsx",
-        path: "/phm/uploadPath",
+        type: '.xlsx',
+        path: '/phm/uploadPath',
       },
       // 表单校验
       rules: {},
-      instructionInfoList:[],
+      instructionInfoList: [],
+      radio:'1'
     }
   },
   created() {
-    this.getListInstructionInfo();
+    this.getListInstructionInfo()
   },
-  methods:{
+  methods: {
     // 获取指令
     getListInstructionInfo() {
       let queryParams = {
@@ -71,40 +79,40 @@ export default {
         content: null,
       }
       listInstructionInfo(queryParams).then(response => {
-        this.instructionInfoList = response.rows;
-      });
+        this.instructionInfoList = response.rows
+      })
     },
     /** 提交按钮 */
     submitForm() {
-      this.butLoading = true;
-      this.butText = "下载中";
+      this.butLoading = true
+      this.butText = '下载中'
       setTimeout(() => {
         // 方法区
-        if (this.form.order === "error") {
-          this.$modal.msgError("下载异常");
-          this.butLoading = false;
-          this.butText = "点击下载";
-          return;
+        if (this.form.order === 'error') {
+          this.$modal.msgError('下载异常')
+          this.butLoading = false
+          this.butText = '点击下载'
+          return
         }
         // 服务获取文件
         let dataObj = {
           order: this.form.order,
           name: `固定格式_${new Date().getTime()}.xlsx`,
-          path: "/phm/uploadPath",
+          path: '/phm/uploadPath',
           remark: this.form.remark,
-        };
-        let data = JSON.parse(localStorage.getItem("data-down")) || [];
-        data.push(dataObj);
-        localStorage.setItem("data-down", JSON.stringify(data));
-        this.getList();
+        }
+        let data = JSON.parse(localStorage.getItem('data-down')) || []
+        data.push(dataObj)
+        localStorage.setItem('data-down', JSON.stringify(data))
+        this.getList()
         // 保存指定路径
-        this.butLoading = false;
-        this.butText = "点击下载";
-        this.$modal.msgSuccess("下载成功");
+        this.butLoading = false
+        this.butText = '点击下载'
+        this.$modal.msgSuccess('下载成功')
         this.cancel()
-      }, 1000);
+      }, 1000)
     },
-  }
+  },
 }
 </script>
 

+ 151 - 92
PHM-web/src/views/manage/dataDown/index.vue

@@ -15,24 +15,57 @@
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="dataDownList" @selection-change="handleSelectionChange">
+    <el-table v-loading="loading" :data="dataDownList" border @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="指令" align="center" prop="order" />
-      <el-table-column label="下载的数据名称" align="center" prop="name" />
-      <el-table-column label="保存路径" align="center" prop="path" />
-      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="批次" align="center" prop="batch" />
+      <el-table-column label="机型" align="center" prop="airType" />
+      <el-table-column label="机号" align="center" prop="airNumber" />
+      <el-table-column label="架次号" align="center" prop="sortie" />
+      <el-table-column label="下载状态" align="center" prop="downloadStatus" />
+      <el-table-column label="下载方式" align="center" prop="downloadMethod" />
+      <el-table-column label="解析状态" align="center" prop="analysisStatus" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetail(scope.row)"
+            v-hasPermi="['manage:deepIsolationModel:edit']">详情</el-button>
+        </template>
+      </el-table-column>
     </el-table>
 
     <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
       @pagination="getList" />
 
     <!-- 数据下载对话框 -->
-    <dataDownDialog :open="open" :cancel='cancel' :getList='getList'/>
+    <!-- <dataDownDialog :open="open" :cancel='cancel' :getList='getList' /> -->
+    <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="500px" append-to-body>
+      <el-form ref="form" :model="onlineForm" :rules="rules" label-width="100px">
+        <el-form-item prop="dataSource">
+          <template>
+            <el-radio v-model="onlineForm.dataSource" label="1">机载phm</el-radio>
+            <el-radio v-model="onlineForm.dataSource" label="2">数链仿真</el-radio>
+          </template>
+        </el-form-item>
+        <el-form-item label="架次信息" prop="sortie">
+          <el-select v-model="onlineForm.order" placeholder="请选择架次" style="width:100%">
+            <el-option v-for="item in sortieList" :key="item.id" :label="item.sortieNumber"
+              :value="item.id">
+                <span style="float: left">{{ item.sortieNumber }}</span>
+                <span style="float: right; color: #8492a6; font-size: 13px">{{ item.aircraftNumber }}</span>
+            </el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm" :loading="butLoading">{{ butText }}</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
     <!-- 离线下载对话框 -->
-    <el-dialog :title="title" :visible.sync="openOffline"  :close-on-click-modal="false" width="600px" append-to-body>
+    <el-dialog :title="title" :visible.sync="openOffline" :close-on-click-modal="false" width="600px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
         <el-form-item label="文件" prop="caseFileName">
-          <file-upload ref="fileUpload" :fileType="['xls','xlsx']" :fileSize = "0" v-model="form.caseFileName" :limit="1"></file-upload>
+          <file-upload ref="fileUpload" :fileType="['xls','xlsx']" :fileSize="0" v-model="form.caseFileName"
+            :limit="1"></file-upload>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -50,13 +83,14 @@ import {
   delDataDown,
   addDataDown,
   updateDataDown,
-} from "@/api/manage/dataDown";
-import { listInstructionInfo } from "@/api/manage/instructionInfo";
+} from '@/api/manage/dataDown'
+import { listInstructionInfo } from '@/api/manage/instructionInfo'
 import dataDownDialog from '@/views/manage/dataDown/dataDownDialog'
+import { listSortie } from '@/api/manage/sortie'
 
 export default {
-  name: "DataDown",
-  components:{ dataDownDialog },
+  name: 'DataDown',
+  components: { dataDownDialog },
   data() {
     return {
       index: 1,
@@ -65,7 +99,7 @@ export default {
       // 按钮加载
       butLoading: false,
       // 按钮显示文本
-      butText: "点击下载",
+      butText: '点击下载',
       // 选中数组
       ids: [],
       // 非单个禁用
@@ -79,7 +113,7 @@ export default {
       // 数据下载表格数据
       dataDownList: [],
       // 弹出层标题
-      title: "",
+      title: '',
       // 指令西信息
       instructionInfoList: [],
       // 是否显示弹出层
@@ -88,30 +122,35 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        order: null,
-        name: null,
-        path: null,
-        remark: null,
-        type: null,
-        createBy: null,
-        createTime: null,
-        updateBy: null,
-        updateTime: null,
+        batch: null,
+        airType: null,
+        airNumber: null,
+        sortie: null,
+        downloadStatus: null,
+        downloadMethod: null,
+        analysisStatus: null,
       },
-      // 表单参数
+      // 离线下载表单参数
       form: {
-        type: ".xlsx",
-        path: "/phm/uploadPath",
+        type: '.xlsx',
+        path: '/phm/uploadPath',
+      },
+      // 在线下载表单参数
+      onlineForm: {
+        dataSource:'1',
       },
       // 表单校验
       rules: {},
       //打开离线下载对话框
-      openOffline:false
-    };
+      openOffline: false,
+      // 架次信息
+      sortieList:[]
+    }
   },
   created() {
-    this.getList();
-    this.getListInstructionInfo();
+    this.getList()
+    this.getSortieList()
+    this.getListInstructionInfo()
   },
   methods: {
     // 获取指令
@@ -123,126 +162,146 @@ export default {
         content: null,
       }
       listInstructionInfo(queryParams).then(response => {
-        this.instructionInfoList = response.rows;
-      });
+        this.instructionInfoList = response.rows
+        console.log("this.instructionInfoList",this.instructionInfoList);
+      })
+    },
+    // 架次信息列表
+    getSortieList() {
+      this.loading = true
+      const query={
+        pageNum: 1
+      }
+      listSortie(query).then(response => {
+        this.sortieList = response.rows
+        console.log("sortieList",this.sortieList);
+        this.total = response.total
+        this.loading = false
+      })
     },
     /** 查询数据下载列表 */
     getList() {
-      this.loading = true;
-      // listDataDown(this.queryParams).then(response => {
-      //   this.dataDownList = response.rows;
-      //   this.total = response.total;
-      //   this.loading = false;
-      // });
-      this.dataDownList = JSON.parse(localStorage.getItem("data-down")) || [];
-      this.total = this.dataDownList?.length || 0;
-      this.loading = false;
+      this.loading = true
+      listDataDown(this.queryParams).then(response => {
+        this.dataDownList = response.rows;
+        console.log("dataDownList",this.dataDownList);
+        this.total = response.total;
+        this.loading = false;
+      });
+      // this.dataDownList = JSON.parse(localStorage.getItem('data-down')) || []
+      // this.total = this.dataDownList?.length || 0
+      // this.loading = false
     },
     // 取消按钮
     cancel() {
-      this.open = false;
-      this.openOffline = false;
-      this.reset();
+      this.open = false
+      this.openOffline = false
+      this.reset()
     },
     // 表单重置
     reset() {
       this.form = {
         order: null,
-        remark: null
+        remark: null,
       }
-      this.resetForm("form");
+      this.resetForm('form')
     },
     /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
+      this.queryParams.pageNum = 1
+      this.getList()
     },
     /** 重置按钮操作 */
     resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
+      this.resetForm('queryForm')
+      this.handleQuery()
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
-      this.ids = selection.map((item) => item.id);
-      this.single = selection.length !== 1;
-      this.multiple = !selection.length;
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
     },
     /** 新增按钮操作 */
     handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "下载指令信息确定";
+      this.reset()
+      this.open = true
+      this.title = '数据在线下载'
     },
     // 打开离线下载框
-    offlineDownload(){
-      this.openOffline=true;
-      this.title = "数据离线下载";
+    offlineDownload() {
+      this.openOffline = true
+      this.title = '数据离线下载'
+    },
+    // 详情
+    handleDetail(row) {
+      console.log(row)
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids;
-      getDataDown(id).then((response) => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "修改数据下载";
-      });
+      this.reset()
+      const id = row.id || this.ids
+      getDataDown(id).then(response => {
+        this.form = response.data
+        this.open = true
+        this.title = '修改数据下载'
+      })
     },
     /** 提交按钮 */
     submitForm() {
-      this.butLoading = true;
-      this.butText = "下载中";
+      this.butLoading = true
+      this.butText = '下载中'
       setTimeout(() => {
         // 方法区
-        if (this.form.order === "error") {
-          this.$modal.msgError("下载异常");
-          this.butLoading = false;
-          this.butText = "点击下载";
-          return;
+        if (this.form.order === 'error') {
+          this.$modal.msgError('下载异常')
+          this.butLoading = false
+          this.butText = '点击下载'
+          return
         }
         // 服务获取文件
         let dataObj = {
           order: this.form.order,
           name: `固定格式_${new Date().getTime()}.xlsx`,
-          path: "/phm/uploadPath",
+          path: '/phm/uploadPath',
           remark: this.form.remark,
-        };
-        let data = JSON.parse(localStorage.getItem("data-down")) || [];
-        data.push(dataObj);
-        localStorage.setItem("data-down", JSON.stringify(data));
-        this.getList();
+        }
+        let data = JSON.parse(localStorage.getItem('data-down')) || []
+        data.push(dataObj)
+        localStorage.setItem('data-down', JSON.stringify(data))
+        // this.open?
+        this.getList()
         // 保存指定路径
-        this.butLoading = false;
-        this.butText = "点击下载";
-        this.$modal.msgSuccess("下载成功");
-        this.open = false;
-      }, 1000);
+        this.butLoading = false
+        this.butText = '点击下载'
+        this.$modal.msgSuccess('下载成功')
+        this.cancel()
+      }, 1000)
     },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const ids = row.id || this.ids;
+      const ids = row.id || this.ids
       this.$modal
         .confirm('是否确认删除数据下载编号为"' + ids + '"的数据项?')
         .then(function () {
-          return delDataDown(ids);
+          return delDataDown(ids)
         })
         .then(() => {
-          this.getList();
-          this.$modal.msgSuccess("删除成功");
+          this.getList()
+          this.$modal.msgSuccess('删除成功')
         })
-        .catch(() => { });
+        .catch(() => {})
     },
     /** 导出按钮操作 */
     handleExport() {
       this.download(
-        "manage/dataDown/export",
+        'manage/dataDown/export',
         {
           ...this.queryParams,
         },
         `dataDown_${new Date().getTime()}.xlsx`
-      );
+      )
     },
   },
-};
+}
 </script>

+ 106 - 20
PHM-web/src/views/manage/deepIsolationModel/index.vue

@@ -1,6 +1,22 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="模型名称" prop="modelName">
+        <el-input
+          v-model="queryParams.modelName"
+          placeholder="请输入模型名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="模型Url" prop="modelUrl">
+        <el-input
+          v-model="queryParams.modelUrl"
+          placeholder="请输入模型Url"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item label="维护代码" prop="code">
         <el-input
           v-model="queryParams.code"
@@ -42,17 +58,6 @@
           v-hasPermi="['manage:deepIsolationModel:add']"
         >新增</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['manage:deepIsolationModel:edit']"
-        >修改</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -74,12 +79,17 @@
           v-hasPermi="['manage:deepIsolationModel:export']"
         >导出</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" icon="el-icon-upload2" size="mini" @click="handleImport"
+          v-hasPermi="['manage:deepIsolationModel:export']">导入</el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="deepIsolationModelList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      
+      <el-table-column label="模型名称" align="center" prop="modelName" />
+      <el-table-column label="模型Url" align="center" prop="modelUrl" />
       <el-table-column label="维护代码" align="center" prop="code" />
       <el-table-column label="故障方程" align="center" prop="faultEquation" />
       <el-table-column label="故障LRU" align="center" prop="faultLru" />
@@ -92,13 +102,6 @@
             @click="handleUpdate(scope.row)"
             v-hasPermi="['manage:deepIsolationModel:edit']"
           >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['manage:deepIsolationModel:remove']"
-          >删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -114,6 +117,12 @@
     <!-- 添加或修改深度隔离模型对话框 -->
     <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="模型名称" prop="modelName">
+          <el-input v-model="form.modelName" placeholder="请输入模型名称" />
+        </el-form-item>
+        <el-form-item label="模型Url" prop="modelUrl">
+          <el-input v-model="form.modelUrl" placeholder="请输入模型Url" />
+        </el-form-item>
         <el-form-item label="维护代码" prop="code">
           <el-input v-model="form.code" placeholder="请输入维护代码" />
         </el-form-item>
@@ -129,12 +138,34 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" :close-on-click-modal="false" width="400px" append-to-body>
+      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" />
+            是否更新已经存在的深度隔离模型
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
+            @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import { listDeepIsolationModel, getDeepIsolationModel, delDeepIsolationModel, addDeepIsolationModel, updateDeepIsolationModel } from "@/api/manage/deepIsolationModel";
-
+import { getToken } from '@/utils/auth'
 export default {
   name: "DeepIsolationModel",
   data() {
@@ -161,10 +192,25 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
+        modelName:null,
+        modelUrl:null,
         code: null,
         faultEquation: null,
         faultLru: null,
       },
+      upload: {
+        title: '',
+        // 是否显示弹出层
+        open: false,
+        // 是否禁用上传
+        isUploading: false,
+        // 设置上传的请求头部
+        headers: { Authorization: 'Bearer ' + getToken() },
+        // 是否更新已存在数据
+        updateSupport: 0,
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + '/manage/falseAlarmRestrainModel/import',
+      },
       // 表单参数
       form: {},
       // 表单校验
@@ -194,6 +240,8 @@ export default {
     reset() {
       this.form = {
         id: null,
+        modelName:null,
+        modelUrl:null,
         code: null,
         faultEquation: null,
         faultLru: null,
@@ -262,6 +310,44 @@ export default {
         this.$modal.msgSuccess("删除成功");
       }).catch(() => {});
     },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = '深度隔离模型导入'
+      this.upload.open = true
+    },
+    submitFileForm() {
+      this.$refs.upload.submit()
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      if (response.code !== 200) {
+        this.$modal.msgError(response.msg)
+        return
+      }
+      this.upload.open = false
+      this.upload.isUploading = false
+      this.$refs.upload.clearFiles()
+      this.$alert(
+        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+          response.msg +
+          '</div>',
+        '导入结果',
+        { dangerouslyUseHTMLString: true }
+      )
+      this.getList()
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download(
+        '/manage/deepIsolationModel/importTemplate',
+        {},
+        `deepIsolationModel_template_${new Date().getTime()}.xlsx`
+      )
+    },
     /** 导出按钮操作 */
     handleExport() {
       this.download('manage/deepIsolationModel/export', {

+ 81 - 22
PHM-web/src/views/manage/deriveParameter/index.vue

@@ -34,17 +34,6 @@
           v-hasPermi="['manage:deriveParameter:add']"
         >新增</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['manage:deriveParameter:edit']"
-        >修改</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -66,6 +55,10 @@
           v-hasPermi="['manage:deriveParameter:export']"
         >导出</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" icon="el-icon-upload2" size="mini" @click="handleImport"
+          v-hasPermi="['manage:deriveParameter:export']">导入</el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -84,13 +77,6 @@
             @click="handleUpdate(scope.row)"
             v-hasPermi="['manage:deriveParameter:edit']"
           >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['manage:deriveParameter:remove']"
-          >删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -110,21 +96,43 @@
           <el-input v-model="form.name" placeholder="请输入参数名称" />
         </el-form-item>
         <el-form-item label="表达式文件" prop="expression">
-          <el-input v-model="form.expression" placeholder="请输入表达式文件" />
+          <!-- <el-input v-model="form.expression" placeholder="请输入表达式文件" /> -->
+          <file-upload ref="fileUpload" v-model="form.expression" :limit="1"></file-upload>
         </el-form-item>
-        
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" :close-on-click-modal="false" width="400px" append-to-body>
+      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" />
+            是否更新已经存在的衍生参数
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
+            @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import { listDeriveParameter, getDeriveParameter, delDeriveParameter, addDeriveParameter, updateDeriveParameter } from "@/api/manage/deriveParameter";
-
+import { getToken } from '@/utils/auth'
 export default {
   name: "DeriveParameter",
   data() {
@@ -158,7 +166,20 @@ export default {
       form: {},
       // 表单校验
       rules: {
-      }
+      },
+      upload: {
+        title: '',
+        // 是否显示弹出层
+        open: false,
+        // 是否禁用上传
+        isUploading: false,
+        // 设置上传的请求头部
+        headers: { Authorization: 'Bearer ' + getToken() },
+        // 是否更新已存在数据
+        updateSupport: 0,
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + '/manage/deriveParameter/import',
+      },
     };
   },
   created() {
@@ -250,6 +271,44 @@ export default {
         this.$modal.msgSuccess("删除成功");
       }).catch(() => {});
     },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = '架次导入'
+      this.upload.open = true
+    },
+    submitFileForm() {
+      this.$refs.upload.submit()
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      if (response.code !== 200) {
+        this.$modal.msgError(response.msg)
+        return
+      }
+      this.upload.open = false
+      this.upload.isUploading = false
+      this.$refs.upload.clearFiles()
+      this.$alert(
+        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+          response.msg +
+          '</div>',
+        '导入结果',
+        { dangerouslyUseHTMLString: true }
+      )
+      this.getList()
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download(
+        '/manage/deriveParameter/importTemplate',
+        {},
+        `deriveParameter_template_${new Date().getTime()}.xlsx`
+      )
+    },
     /** 导出按钮操作 */
     handleExport() {
       this.download('manage/deriveParameter/export', {

+ 51 - 0
PHM-web/src/views/manage/falseAlarmRestrainModel/dynamicForms.vue

@@ -0,0 +1,51 @@
+<template>
+  <div>
+    <el-form ref="myForm" :model="formData" label-width="100px">
+      <div v-for="(item, index) in formItems" :key="index">
+        <el-form-item :prop="item.prop">
+          <!-- 双击 label 编辑内容 -->
+          <template v-if="!item.editing" >
+            <span @dblclick="startEditing(item)">{{ item.label }}</span>
+          </template>
+          <template v-else>
+            <input type="text" v-model="item.label" @blur="endEditing(item)" />
+          </template>
+          
+          <!-- 自定义 el-input 的内容 -->
+          <el-input v-if="item.type === 'input'" v-model="formData[item.prop]"></el-input>
+          <!-- 其他类型的表单项 -->
+          <!-- ... -->
+        </el-form-item>
+      </div>
+    </el-form>
+  </div>
+</template>
+
+<script>
+  export default {
+    name:'dynamicForms',
+    data() {
+      return {
+        formData: {}, // 表单数据对象
+        formItems: [ // 存储 el-form-item 的信息
+          { label: '用户名', prop: 'username', type: 'input', editing: false },
+          { label: '年龄', prop: 'age', type: 'input', editing: false },
+          // 其他表单项
+          // ...
+        ]
+      };
+    },
+    methods: {
+      startEditing(item) {
+        item.editing = true;
+      },
+      endEditing(item) {
+        item.editing = false;
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 253 - 33
PHM-web/src/views/manage/falseAlarmRestrainModel/index.vue

@@ -1,6 +1,22 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="模型名称" prop="modelName">
+        <el-input
+          v-model="queryParams.modelName"
+          placeholder="请输入模型名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="模型Url" prop="modelUrl">
+        <el-input
+          v-model="queryParams.modelUrl"
+          placeholder="请输入模型Url"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item label="故障代码" prop="code">
         <el-input
           v-model="queryParams.code"
@@ -42,17 +58,6 @@
           v-hasPermi="['manage:falseAlarmRestrainModel:add']"
         >新增</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['manage:falseAlarmRestrainModel:edit']"
-        >修改</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -74,12 +79,17 @@
           v-hasPermi="['manage:falseAlarmRestrainModel:export']"
         >导出</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" icon="el-icon-upload2" size="mini" @click="handleImport"
+          v-hasPermi="['manage:falseAlarmRestrainModel:export']">导入</el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="falseAlarmRestrainModelList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      
+      <el-table-column label="模型名称" align="center" prop="modelName" />
+      <el-table-column label="模型Url" align="center" prop="modelUrl" />
       <el-table-column label="故障代码" align="center" prop="code" />
       <el-table-column label="抑制判据" align="center" prop="restrainCriteria" />
       <el-table-column label="最少持续时间" align="center" prop="minDuration" />
@@ -92,14 +102,7 @@
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['manage:falseAlarmRestrainModel:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['manage:falseAlarmRestrainModel:remove']"
-          >删除</el-button>
+          >编辑</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -113,30 +116,124 @@
     />
 
     <!-- 添加或修改虚警抑制模型对话框 -->
-    <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="故障代码" prop="code">
-          <el-input v-model="form.code" placeholder="请输入故障代码" />
+    <el-dialog :title="title" class="myDialog" :visible.sync="open" width="80vw" :close-on-click-modal="false" append-to-body>
+      <el-divider content-position="left">模型信息</el-divider>
+      <el-form ref="form" :model="form" :rules="rules" label-width="68px">
+        <el-row :gutter="80">
+          <el-col :span="10">
+            <el-form-item label="模型名称" prop="modelName">
+              <el-input v-model="form.modelName" placeholder="请输入模型名称" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="10">
+            <el-form-item label="模型Url" prop="modelUrl">
+              <el-input v-model="form.modelUrl" placeholder="请输入模型Url" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row  :gutter="80">
+          <el-col :span="10">
+            <el-form-item label="故障代码" prop="code">
+              <el-input v-model="form.code" placeholder="请输入故障代码" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="10">
+            <el-form-item label="抑制判据" prop="restrainCriteria">
+              <el-input v-model="form.restrainCriteria" placeholder="请输入抑制判据" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row  :gutter="80">
+          <el-col :span="12">
+            <el-form-item label="最少持续时间" prop="minDuration" label-width="100px">
+              <el-input v-model="form.minDuration" placeholder="请输入最少持续时间" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item>
+              <el-button @click="addModelForms" icon="el-icon-plus"></el-button>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item
+          v-for="(item, index) in form.modelParams"
+          :key="item.uniqueMark"
+          :prop="'modelParams.' + index + '.value'"
+          label-width="30px"
+        >
+          <div class="dynamicAdd">
+            <el-input v-model="item.key" style="width: 200px" placeholder="请输入模型属性"></el-input>
+            <span>  -----  </span>
+            <el-select v-model="item.value" placeholder="请选择模型参数">
+              <el-option
+                v-for="option in options"
+                :key="option.value"
+                :label="option.label"
+                :value="option.value">
+              </el-option>
+            </el-select>
+            <el-button @click.prevent="removeModelForm(item)" icon="el-icon-minus" style="marginLeft:20px; border:none"></el-button>
+          </div>
         </el-form-item>
-        <el-form-item label="抑制判据" prop="restrainCriteria">
-          <el-input v-model="form.restrainCriteria" placeholder="请输入抑制判据" />
+        <el-divider content-position="left" style="marginTop:20px;">数据信息</el-divider>
+        <el-form-item>
+          <el-button @click="addDataForms" icon="el-icon-plus"></el-button>
         </el-form-item>
-        <el-form-item label="最少持续时间" prop="minDuration">
-          <el-input v-model="form.minDuration" placeholder="请输入最少持续时间" />
+        <el-form-item
+          v-for="(item, index) in form.dataParams"
+          :key="item.uniqueMark"
+          :prop="'dataParams.' + index + '.value'"
+          label-width="30px"
+        >
+          <div class="dynamicAdd">
+            <el-input v-model="item.key" style="width: 200px" placeholder="请输入模型属性"></el-input>
+            <span>  -----  </span>
+            <el-select v-model="item.value" placeholder="请选择模型参数">
+              <el-option
+                v-for="option in options"
+                :key="option.value"
+                :label="option.label"
+                :value="option.value">
+              </el-option>
+            </el-select>
+            <el-button @click.prevent="removeDataForm(item)" icon="el-icon-minus" style="marginLeft:20px; border:none"></el-button>
+          </div>
         </el-form-item>
-          
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+
+    <!-- 导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" :close-on-click-modal="false" width="400px" append-to-body>
+      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" />
+            是否更新已经存在的虚警抑制模型
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
+            @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import { listFalseAlarmRestrainModel, getFalseAlarmRestrainModel, delFalseAlarmRestrainModel, addFalseAlarmRestrainModel, updateFalseAlarmRestrainModel } from "@/api/manage/falseAlarmRestrainModel";
-
+import { getToken } from '@/utils/auth'
 export default {
   name: "FalseAlarmRestrainModel",
   data() {
@@ -159,17 +256,50 @@ export default {
       title: "",
       // 是否显示弹出层
       open: false,
+      // 架次信息参数
+      options: [{
+          value: '选项1',
+          label: '参数1'
+        }, {
+          value: '选项2',
+          label: '参数2'
+        }, {
+          value: '选项3',
+          label: '参数3'
+        }, {
+          value: '选项4',
+          label: '参数4'
+        }],
+      // 新增参数的选择框绑定值
+      // addParameter:null, 
       // 查询参数
       queryParams: {
         pageNum: 1,
         pageSize: 10,
+        modelName:null,
+        modelUrl:null,
         code: null,
         restrainCriteria: null,
         minDuration: null,
-         
+      },
+      upload: {
+        title: '',
+        // 是否显示弹出层
+        open: false,
+        // 是否禁用上传
+        isUploading: false,
+        // 设置上传的请求头部
+        headers: { Authorization: 'Bearer ' + getToken() },
+        // 是否更新已存在数据
+        updateSupport: 0,
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + '/manage/falseAlarmRestrainModel/import',
       },
       // 表单参数
-      form: {},
+      form: {
+        modelParams:[],
+        dataParams:[]
+      },
       // 表单校验
       rules: {
       }
@@ -197,13 +327,52 @@ export default {
     reset() {
       this.form = {
         id: null,
+        modelName:null,
+        modelUrl:null,
         code: null,
         restrainCriteria: null,
         minDuration: null,
-         
+        modelParams:[],
+        dataParams:[]
       };
       this.resetForm("form");
     },
+    // 新增模型表单
+    addModelForms() {
+      this.form.modelParams.push({
+        key: '',
+        uniqueMark: Date.now(), //唯一标识
+        value:''
+      });
+    },
+    // 增加数据表单
+    addDataForms(){
+      this.form.dataParams.push({
+        key: '',
+        uniqueMark: Date.now(), //唯一标识
+        value:''
+      });
+    },
+    removeModelForm(item) {
+      var index = this.form.modelParams.indexOf(item)
+      if (index !== -1) {
+        this.form.modelParams.splice(index, 1)
+      }
+    },
+    removeDataForm(item) {
+      var index = this.form.dataParams.indexOf(item)
+      if (index !== -1) {
+        this.form.dataParams.splice(index, 1)
+      }
+    },
+    // 更换label的值
+    startEditing(item) {
+      console.log(item);
+      item.editing = true;
+    },
+    endEditing(item) {
+      item.editing = false;
+    },
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
@@ -247,6 +416,7 @@ export default {
               this.getList();
             });
           } else {
+            // console.log(this.form);
             addFalseAlarmRestrainModel(this.form).then(response => {
               this.$modal.msgSuccess("新增成功");
               this.open = false;
@@ -266,6 +436,44 @@ export default {
         this.$modal.msgSuccess("删除成功");
       }).catch(() => {});
     },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = '虚警抑制模型导入'
+      this.upload.open = true
+    },
+    submitFileForm() {
+      this.$refs.upload.submit()
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      if (response.code !== 200) {
+        this.$modal.msgError(response.msg)
+        return
+      }
+      this.upload.open = false
+      this.upload.isUploading = false
+      this.$refs.upload.clearFiles()
+      this.$alert(
+        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+          response.msg +
+          '</div>',
+        '导入结果',
+        { dangerouslyUseHTMLString: true }
+      )
+      this.getList()
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download(
+        '/manage/falseAlarmRestrainModel/importTemplate',
+        {},
+        `falseAlarmRestrainModel_template_${new Date().getTime()}.xlsx`
+      )
+    },
     /** 导出按钮操作 */
     handleExport() {
       this.download('manage/falseAlarmRestrainModel/export', {
@@ -275,3 +483,15 @@ export default {
   }
 };
 </script>
+<style scoped lang="scss">
+.dynamicAdd{
+  display: flex;
+}
+.myDialog{
+  ::v-deep {
+    .el-dialog__body{
+      padding: 3px 20px;
+    }
+  }
+} 
+</style>

+ 78 - 20
PHM-web/src/views/manage/forecastModel/index.vue

@@ -50,17 +50,6 @@
           v-hasPermi="['manage:forecastModel:add']"
         >新增</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['manage:forecastModel:edit']"
-        >修改</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -82,12 +71,15 @@
           v-hasPermi="['manage:forecastModel:export']"
         >导出</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" icon="el-icon-upload2" size="mini" @click="handleImport"
+          v-hasPermi="['manage:forecastModel:export']">导入</el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="forecastModelList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      
       <el-table-column label="预测对象" align="center" prop="object" />
       <el-table-column label="预测方法" align="center" prop="method" />
       <el-table-column label="训练集范围" align="center" prop="trainsRange" />
@@ -101,13 +93,6 @@
             @click="handleUpdate(scope.row)"
             v-hasPermi="['manage:forecastModel:edit']"
           >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['manage:forecastModel:remove']"
-          >删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -141,12 +126,34 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" :close-on-click-modal="false" width="400px" append-to-body>
+      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" />
+            是否更新已经存在的预测模型
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
+            @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import { listForecastModel, getForecastModel, delForecastModel, addForecastModel, updateForecastModel } from "@/api/manage/forecastModel";
-
+import { getToken } from '@/utils/auth'
 export default {
   name: "ForecastModel",
   data() {
@@ -178,6 +185,19 @@ export default {
         trainsRange: null,
         accuracy: null,
       },
+      upload: {
+        title: '',
+        // 是否显示弹出层
+        open: false,
+        // 是否禁用上传
+        isUploading: false,
+        // 设置上传的请求头部
+        headers: { Authorization: 'Bearer ' + getToken() },
+        // 是否更新已存在数据
+        updateSupport: 0,
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + '/manage/falseAlarmRestrainModel/import',
+      },
       // 表单参数
       form: {},
       // 表单校验
@@ -276,6 +296,44 @@ export default {
         this.$modal.msgSuccess("删除成功");
       }).catch(() => {});
     },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = '预测模型导入'
+      this.upload.open = true
+    },
+    submitFileForm() {
+      this.$refs.upload.submit()
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      if (response.code !== 200) {
+        this.$modal.msgError(response.msg)
+        return
+      }
+      this.upload.open = false
+      this.upload.isUploading = false
+      this.$refs.upload.clearFiles()
+      this.$alert(
+        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+          response.msg +
+          '</div>',
+        '导入结果',
+        { dangerouslyUseHTMLString: true }
+      )
+      this.getList()
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download(
+        '/manage/forecastModel/importTemplate',
+        {},
+        `forecastModel_template_${new Date().getTime()}.xlsx`
+      )
+    },
     /** 导出按钮操作 */
     handleExport() {
       this.download('manage/forecastModel/export', {

+ 99 - 141
PHM-web/src/views/manage/forecastResult/index.vue

@@ -2,34 +2,16 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="部件名称" prop="unitName">
-        <el-input
-          v-model="queryParams.unitName"
-          placeholder="请输入部件名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.unitName" placeholder="请输入部件名称" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="研究对象" prop="studyObject">
-        <el-input
-          v-model="queryParams.studyObject"
-          placeholder="请输入研究对象"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.studyObject" placeholder="请输入研究对象" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="SNS 编码" prop="snsCode">
-        <el-input
-          v-model="queryParams.snsCode"
-          placeholder="请输入SNS 编码"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.snsCode" placeholder="请输入SNS 编码" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="分析时间" prop="analysisTime">
-        <el-date-picker clearable
-          v-model="queryParams.analysisTime"
-          type="date"
-          value-format="yyyy-MM-dd"
+        <el-date-picker clearable v-model="queryParams.analysisTime" type="date" value-format="yyyy-MM-dd"
           placeholder="请选择分析时间">
         </el-date-picker>
       </el-form-item>
@@ -41,63 +23,37 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['manage:forecastResult:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+          v-hasPermi="['manage:forecastResult:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['manage:forecastResult:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['manage:forecastResult:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['manage:forecastResult:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['manage:forecastResult:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['manage:forecastResult:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
+          v-hasPermi="['manage:forecastResult:export']">导出</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="forecastResultList" @selection-change="handleSelectionChange">
+    <el-table v-loading="loading" :data="forecastResultList" @selection-change="handleSelectionChange"
+      height="calc(100vh - 277px)">
       <el-table-column type="selection" width="55" align="center" />
-      
-      <el-table-column label="部件名称" align="center" prop="unitName" />
+      <el-table-column fixed label="部件名称" align="center" prop="unitName" />
       <el-table-column label="研究对象" align="center" prop="studyObject" />
       <el-table-column label="SNS 编码" align="center" prop="snsCode" />
-      <el-table-column label="预测故障" align="center" prop="forecastFault" />
+      <el-table-column label="预测故障" align="center" prop="forecastFault" width="280" />
       <el-table-column label="分析时间" align="center" prop="analysisTime" width="180">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.analysisTime, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="批注注解" align="center" prop="comment" />
+      <el-table-column label="批注注解" align="center" prop="comment" width="280" />
       <el-table-column label="创建人" align="center" prop="createBy" />
       <el-table-column label="创建时间" align="center" prop="createTime" width="180">
         <template slot-scope="scope">
@@ -110,33 +66,18 @@
           <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['manage:forecastResult:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['manage:forecastResult:remove']"
-          >删除</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['manage:forecastResult:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['manage:forecastResult:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
 
     <!-- 添加或修改预测结果对话框 -->
     <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="500px" append-to-body>
@@ -154,10 +95,7 @@
           <el-input v-model="form.forecastFault" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="分析时间" prop="analysisTime">
-          <el-date-picker clearable
-            v-model="form.analysisTime"
-            type="date"
-            value-format="yyyy-MM-dd"
+          <el-date-picker clearable v-model="form.analysisTime" type="date" value-format="yyyy-MM-dd"
             placeholder="请选择分析时间">
           </el-date-picker>
         </el-form-item>
@@ -174,10 +112,16 @@
 </template>
 
 <script>
-import { listForecastResult, getForecastResult, delForecastResult, addForecastResult, updateForecastResult } from "@/api/manage/forecastResult";
+import {
+  listForecastResult,
+  getForecastResult,
+  delForecastResult,
+  addForecastResult,
+  updateForecastResult,
+} from '@/api/manage/forecastResult'
 
 export default {
-  name: "ForecastResult",
+  name: 'ForecastResult',
   data() {
     return {
       // 遮罩层
@@ -195,7 +139,7 @@ export default {
       // 预测结果表格数据
       forecastResultList: [],
       // 弹出层标题
-      title: "",
+      title: '',
       // 是否显示弹出层
       open: false,
       // 查询参数
@@ -211,27 +155,26 @@ export default {
       // 表单参数
       form: {},
       // 表单校验
-      rules: {
-      }
-    };
+      rules: {},
+    }
   },
   created() {
-    this.getList();
+    this.getList()
   },
   methods: {
     /** 查询预测结果列表 */
     getList() {
-      this.loading = true;
+      this.loading = true
       listForecastResult(this.queryParams).then(response => {
-        this.forecastResultList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
+        this.forecastResultList = response.rows
+        this.total = response.total
+        this.loading = false
+      })
     },
     // 取消按钮
     cancel() {
-      this.open = false;
-      this.reset();
+      this.open = false
+      this.reset()
     },
     // 表单重置
     reset() {
@@ -247,78 +190,93 @@ export default {
         createBy: null,
         createTime: null,
         updateBy: null,
-        updateTime: null
-      };
-      this.resetForm("form");
+        updateTime: null,
+      }
+      this.resetForm('form')
     },
     /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
+      this.queryParams.pageNum = 1
+      this.getList()
     },
     /** 重置按钮操作 */
     resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
+      this.resetForm('queryForm')
+      this.handleQuery()
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
     handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加预测结果";
+      this.reset()
+      this.open = true
+      this.title = '添加预测结果'
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
-      this.reset();
+      this.reset()
       const id = row.id || this.ids
       getForecastResult(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "修改预测结果";
-      });
+        this.form = response.data
+        this.open = true
+        this.title = '修改预测结果'
+      })
     },
     /** 提交按钮 */
     submitForm() {
-      this.$refs["form"].validate(valid => {
+      this.$refs['form'].validate(valid => {
         if (valid) {
           if (this.form.id != null) {
+            this.form.updateBy = this.$store.state.user.name
             updateForecastResult(this.form).then(response => {
-              this.$modal.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            });
+              this.$modal.msgSuccess('修改成功')
+              this.open = false
+              this.getList()
+            })
           } else {
+            this.form.createBy = this.$store.state.user.name
             addForecastResult(this.form).then(response => {
-              this.$modal.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            });
+              this.$modal.msgSuccess('新增成功')
+              this.open = false
+              this.getList()
+            })
           }
         }
-      });
+      })
     },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$modal.confirm('是否确认删除预测结果编号为"' + ids + '"的数据项?').then(function() {
-        return delForecastResult(ids);
-      }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("删除成功");
-      }).catch(() => {});
+      const ids = row.id || this.ids
+      this.$modal
+        .confirm('是否确认删除预测结果编号为"' + ids + '"的数据项?')
+        .then(function () {
+          return delForecastResult(ids)
+        })
+        .then(() => {
+          this.getList()
+          this.$modal.msgSuccess('删除成功')
+        })
+        .catch(() => {})
     },
     /** 导出按钮操作 */
     handleExport() {
-      this.download('manage/forecastResult/export', {
-        ...this.queryParams
-      }, `forecastResult_${new Date().getTime()}.xlsx`)
-    }
-  }
-};
+      this.download(
+        'manage/forecastResult/export',
+        {
+          ...this.queryParams,
+        },
+        `forecastResult_${new Date().getTime()}.xlsx`
+      )
+    },
+  },
+}
 </script>
+<style scoped>
+/* .el-table{
+  height: calc(100vh - 277px);
+} */
+</style>

+ 107 - 21
PHM-web/src/views/manage/groundDiagnosisModel/index.vue

@@ -1,6 +1,22 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="模型名称" prop="modelName">
+        <el-input
+          v-model="queryParams.modelName"
+          placeholder="请输入模型名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="模型Url" prop="modelUrl">
+        <el-input
+          v-model="queryParams.modelUrl"
+          placeholder="请输入模型Url"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item label="事件代码" prop="code">
         <el-input
           v-model="queryParams.code"
@@ -33,7 +49,7 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="所属LRU" prop="lruSource">
+      <el-form-item label="所属LRU" prop="lruSource" label-width="80px">
         <el-input
           v-model="queryParams.lruSource"
           placeholder="请输入所属LRU"
@@ -59,17 +75,6 @@
           v-hasPermi="['manage:groundDiagnosisModel:add']"
         >新增</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['manage:groundDiagnosisModel:edit']"
-        >修改</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -91,12 +96,17 @@
           v-hasPermi="['manage:groundDiagnosisModel:export']"
         >导出</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" icon="el-icon-upload2" size="mini" @click="handleImport"
+          v-hasPermi="['manage:groundDiagnosisModel:export']">导入</el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="groundDiagnosisModelList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      
+      <el-table-column label="模型名称" align="center" prop="modelName" />
+      <el-table-column label="模型Url" align="center" prop="modelUrl" />
       <el-table-column label="事件代码" align="center" prop="code" />
       <el-table-column label="判据" align="center" prop="criteria" />
       <el-table-column label="最少持续时间" align="center" prop="minDuration" />
@@ -112,13 +122,6 @@
             @click="handleUpdate(scope.row)"
             v-hasPermi="['manage:groundDiagnosisModel:edit']"
           >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['manage:groundDiagnosisModel:remove']"
-          >删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -134,6 +137,12 @@
     <!-- 添加或修改地面诊断模型信息对话框 -->
     <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="模型名称" prop="modelName">
+          <el-input v-model="form.modelName" placeholder="请输入模型名称" />
+        </el-form-item>
+        <el-form-item label="模型Url" prop="modelUrl">
+          <el-input v-model="form.modelUrl" placeholder="请输入模型Url" />
+        </el-form-item>
         <el-form-item label="事件代码" prop="code">
           <el-input v-model="form.code" placeholder="请输入事件代码" />
         </el-form-item>
@@ -156,12 +165,34 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" :close-on-click-modal="false" width="400px" append-to-body>
+      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" />
+            是否更新已经存在的地面诊断模型
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
+            @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import { listGroundDiagnosisModel, getGroundDiagnosisModel, delGroundDiagnosisModel, addGroundDiagnosisModel, updateGroundDiagnosisModel } from "@/api/manage/groundDiagnosisModel";
-
+import { getToken } from '@/utils/auth'
 export default {
   name: "GroundDiagnosisModel",
   data() {
@@ -188,6 +219,8 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
+        modelName:null,
+        modelUrl:null,
         code: null,
         criteria: null,
         minDuration: null,
@@ -195,6 +228,19 @@ export default {
         lruSource: null,
          
       },
+      upload: {
+        title: '',
+        // 是否显示弹出层
+        open: false,
+        // 是否禁用上传
+        isUploading: false,
+        // 设置上传的请求头部
+        headers: { Authorization: 'Bearer ' + getToken() },
+        // 是否更新已存在数据
+        updateSupport: 0,
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + '/manage/falseAlarmRestrainModel/import',
+      },
       // 表单参数
       form: {},
       // 表单校验
@@ -224,6 +270,8 @@ export default {
     reset() {
       this.form = {
         id: null,
+        modelName:null,
+        modelUrl:null,
         code: null,
         criteria: null,
         minDuration: null,
@@ -295,6 +343,44 @@ export default {
         this.$modal.msgSuccess("删除成功");
       }).catch(() => {});
     },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = '地面诊断模型导入'
+      this.upload.open = true
+    },
+    submitFileForm() {
+      this.$refs.upload.submit()
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      if (response.code !== 200) {
+        this.$modal.msgError(response.msg)
+        return
+      }
+      this.upload.open = false
+      this.upload.isUploading = false
+      this.$refs.upload.clearFiles()
+      this.$alert(
+        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+          response.msg +
+          '</div>',
+        '导入结果',
+        { dangerouslyUseHTMLString: true }
+      )
+      this.getList()
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download(
+        '/manage/groundDiagnosisModel/importTemplate',
+        {},
+        `groundDiagnosisModel_template_${new Date().getTime()}.xlsx`
+      )
+    },
     /** 导出按钮操作 */
     handleExport() {
       this.download('manage/groundDiagnosisModel/export', {

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 7
PHM-web/src/views/manage/instructionInfo/index.vue


+ 97 - 38
PHM-web/src/views/manage/maintenanceTestControl/index.vue

@@ -1,26 +1,26 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="维修控制信息" prop="maintenanceControl" label-width="100px">
+      <!-- <el-form-item label="维修控制信息" prop="maintenanceControl" label-width="100px">
         <el-input
           v-model="queryParams.maintenanceControl"
           placeholder="请输入维修控制信息"
           clearable
           @keyup.enter.native="handleQuery"
         />
-      </el-form-item>
-      <el-form-item label="对象" prop="object">
+      </el-form-item> -->
+      <el-form-item label="名称" prop="name">
         <el-input
-          v-model="queryParams.object"
-          placeholder="请输入对象"
+          v-model="queryParams.name"
+          placeholder="请输入名称"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="名称" prop="name">
+      <el-form-item label="对象" prop="object">
         <el-input
-          v-model="queryParams.name"
-          placeholder="请输入名称"
+          v-model="queryParams.object"
+          placeholder="请输入对象"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -33,14 +33,14 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="故障数据" prop="faultData">
+      <!-- <el-form-item label="故障数据" prop="faultData">
         <el-input
           v-model="queryParams.faultData"
           placeholder="请输入故障数据"
           clearable
           @keyup.enter.native="handleQuery"
         />
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="版本" prop="version">
         <el-input
           v-model="queryParams.version"
@@ -66,17 +66,6 @@
           v-hasPermi="['manage:maintenanceTestControl:add']"
         >新增</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['manage:maintenanceTestControl:edit']"
-        >修改</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -98,17 +87,21 @@
           v-hasPermi="['manage:maintenanceTestControl:export']"
         >导出</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" icon="el-icon-upload2" size="mini" @click="handleImport"
+          v-hasPermi="['manage:maintenanceTestControl:export']">导入</el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="maintenanceTestControlList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       
-      <el-table-column label="维修控制信息" align="center" prop="maintenanceControl" />
-      <el-table-column label="对象" align="center" prop="object" />
+      <!-- <el-table-column label="维修控制信息" align="center" prop="maintenanceControl" /> -->
       <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column label="对象" align="center" prop="object" />
       <el-table-column label="程序文件" align="center" prop="applicationDoc" />
-      <el-table-column label="故障数据" align="center" prop="faultData" />
+      <!-- <el-table-column label="故障数据" align="center" prop="faultData" /> -->
       <el-table-column label="版本" align="center" prop="version" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
@@ -119,13 +112,6 @@
             @click="handleUpdate(scope.row)"
             v-hasPermi="['manage:maintenanceTestControl:edit']"
           >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['manage:maintenanceTestControl:remove']"
-          >删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -141,21 +127,21 @@
     <!-- 添加或修改维修测试控制对话框 -->
     <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="维修控制信息" prop="maintenanceControl">
+        <!-- <el-form-item label="维修控制信息" prop="maintenanceControl">
           <el-input v-model="form.maintenanceControl" placeholder="请输入维修控制信息" />
+        </el-form-item> -->
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入名称" />
         </el-form-item>
         <el-form-item label="对象" prop="object">
           <el-input v-model="form.object" placeholder="请输入对象" />
         </el-form-item>
-        <el-form-item label="名称" prop="name">
-          <el-input v-model="form.name" placeholder="请输入名称" />
-        </el-form-item>
         <el-form-item label="程序文件" prop="applicationDoc">
           <el-input v-model="form.applicationDoc" placeholder="请输入程序文件" />
         </el-form-item>
-        <el-form-item label="故障数据" prop="faultData">
+        <!-- <el-form-item label="故障数据" prop="faultData">
           <el-input v-model="form.faultData" placeholder="请输入故障数据" />
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="版本" prop="version">
           <el-input v-model="form.version" placeholder="请输入版本" />
         </el-form-item>
@@ -165,12 +151,34 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" :close-on-click-modal="false" width="400px" append-to-body>
+      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" />
+            是否更新已经存在的维修测试控制程序
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
+            @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import { listMaintenanceTestControl, getMaintenanceTestControl, delMaintenanceTestControl, addMaintenanceTestControl, updateMaintenanceTestControl } from "@/api/manage/maintenanceTestControl";
-
+import { getToken } from '@/utils/auth'
 export default {
   name: "MaintenanceTestControl",
   data() {
@@ -204,6 +212,19 @@ export default {
         faultData: null,
         version: null,
       },
+      upload: {
+        title: '',
+        // 是否显示弹出层
+        open: false,
+        // 是否禁用上传
+        isUploading: false,
+        // 设置上传的请求头部
+        headers: { Authorization: 'Bearer ' + getToken() },
+        // 是否更新已存在数据
+        updateSupport: 0,
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + '/manage/falseAlarmRestrainModel/import',
+      },
       // 表单参数
       form: {},
       // 表单校验
@@ -304,6 +325,44 @@ export default {
         this.$modal.msgSuccess("删除成功");
       }).catch(() => {});
     },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = '维修测试控制程序导入'
+      this.upload.open = true
+    },
+    submitFileForm() {
+      this.$refs.upload.submit()
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      if (response.code !== 200) {
+        this.$modal.msgError(response.msg)
+        return
+      }
+      this.upload.open = false
+      this.upload.isUploading = false
+      this.$refs.upload.clearFiles()
+      this.$alert(
+        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+          response.msg +
+          '</div>',
+        '导入结果',
+        { dangerouslyUseHTMLString: true }
+      )
+      this.getList()
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download(
+        '/manage/maintenanceTestControl/importTemplate',
+        {},
+        `maintenanceTestControl_template_${new Date().getTime()}.xlsx`
+      )
+    },
     /** 导出按钮操作 */
     handleExport() {
       this.download('manage/maintenanceTestControl/export', {

+ 5 - 6
PHM-web/src/views/manage/orderInfo/index.vue

@@ -160,7 +160,7 @@ export default {
         ],
       },
       //数据下载弹出框的数据
-      openDialog:false
+      openDialog: false,
     }
   },
   created() {
@@ -183,11 +183,11 @@ export default {
     },
     // 数据下载弹出框的取消按钮
     dataDownCancel() {
-      this.openDialog = false;
-      this.reset();
+      this.openDialog = false
+      this.reset()
     },
     //数据下载弹框完成后
-    replaceGetList(){
+    replaceGetList() {
       this.dataDownCancel()
     },
     //分析对话框关闭
@@ -237,7 +237,7 @@ export default {
       console.log(row)
       //指令类型是下载数据
       if (row.orderType == 'XZ') {
-        this.openDialog=true;
+        this.openDialog = true
       } else {
         row.content = {
           model: '虚警抑制的模型',
@@ -294,7 +294,6 @@ export default {
         `orderInfo_${new Date().getTime()}.xlsx`
       )
     },
-    
   },
 }
 </script>

+ 78 - 22
PHM-web/src/views/manage/performanceMonitorModel/index.vue

@@ -67,17 +67,6 @@
           v-hasPermi="['manage:performanceMonitorModel:add']"
         >新增</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['manage:performanceMonitorModel:edit']"
-        >修改</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -99,19 +88,21 @@
           v-hasPermi="['manage:performanceMonitorModel:export']"
         >导出</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" icon="el-icon-upload2" size="mini" @click="handleImport"
+          v-hasPermi="['manage:performanceMonitorModel:export']">导入</el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="performanceMonitorModelList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      
       <el-table-column label="监测对象" align="center" prop="object" />
       <el-table-column label="监测参数" align="center" prop="parameter" />
       <el-table-column label="状态条件" align="center" prop="stateCondition" />
       <el-table-column label="取值方法" align="center" prop="valueMethod" />
       <el-table-column label="警戒值" align="center" prop="alarmValue" />
       <el-table-column label="门限值" align="center" prop="thresholdValue" />
-       
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -121,13 +112,6 @@
             @click="handleUpdate(scope.row)"
             v-hasPermi="['manage:performanceMonitorModel:edit']"
           >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['manage:performanceMonitorModel:remove']"
-          >删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -168,12 +152,34 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" :close-on-click-modal="false" width="400px" append-to-body>
+      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" />
+            是否更新已经存在的性能监测模型
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
+            @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import { listPerformanceMonitorModel, getPerformanceMonitorModel, delPerformanceMonitorModel, addPerformanceMonitorModel, updatePerformanceMonitorModel } from "@/api/manage/performanceMonitorModel";
-
+import { getToken } from '@/utils/auth'
 export default {
   name: "PerformanceMonitorModel",
   data() {
@@ -206,7 +212,19 @@ export default {
         valueMethod: null,
         alarmValue: null,
         thresholdValue: null,
-         
+      },
+      upload: {
+        title: '',
+        // 是否显示弹出层
+        open: false,
+        // 是否禁用上传
+        isUploading: false,
+        // 设置上传的请求头部
+        headers: { Authorization: 'Bearer ' + getToken() },
+        // 是否更新已存在数据
+        updateSupport: 0,
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + '/manage/falseAlarmRestrainModel/import',
       },
       // 表单参数
       form: {},
@@ -309,6 +327,44 @@ export default {
         this.$modal.msgSuccess("删除成功");
       }).catch(() => {});
     },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = '性能监测模型导入'
+      this.upload.open = true
+    },
+    submitFileForm() {
+      this.$refs.upload.submit()
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      if (response.code !== 200) {
+        this.$modal.msgError(response.msg)
+        return
+      }
+      this.upload.open = false
+      this.upload.isUploading = false
+      this.$refs.upload.clearFiles()
+      this.$alert(
+        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+          response.msg +
+          '</div>',
+        '导入结果',
+        { dangerouslyUseHTMLString: true }
+      )
+      this.getList()
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download(
+        '/manage/performanceMonitorModel/importTemplate',
+        {},
+        `performanceMonitorModel_template_${new Date().getTime()}.xlsx`
+      )
+    },
     /** 导出按钮操作 */
     handleExport() {
       this.download('manage/performanceMonitorModel/export', {

+ 125 - 71
PHM-web/src/views/manage/reasoning/index.vue

@@ -2,36 +2,31 @@
   <div class="reasoning">
     <el-steps :active="isActive" align-center class="step" finish-status="success">
       <el-step title="数据选择" description="请选择架次信息"></el-step>
-      <el-step title="测试性模型选择" description="这是一段很长很长很长的描述性文字"></el-step>
-      <el-step title="是否进行增强诊断" description="这是一段很长很长很长的描述性文字"></el-step>
-      <el-step title="故障方程选择" description="这是一段很长很长很长的描述性文字"></el-step>
-      <el-step title="调用计算引擎"></el-step>
+      <el-step title="测试性模型选择" description="请选择测试性模型"></el-step>
+      <el-step title="是否进行增强诊断" description="初步结果产生,是否还需要增强诊断"></el-step>
+      <el-step title="故障方程选择" description="请选择故障方程"></el-step>
+      <el-step title="最终结果展示"></el-step>
     </el-steps>
     <div class="content">
       <div class="box">
-        <el-select ref="selectTable" v-model="queryParams.sortie" placeholder="请选择架次" v-if="isActive==0" filterable>
-          <template #empty>
-            <sortieTable :callback="handleCurrentChange" />
-          </template>
-        </el-select>
-        <el-select ref="selectTable" v-model="queryParams.testModel" placeholder="请选择测试性模型" v-if="isActive==1">
-          <template #empty>
-            <el-table :data="testModelOptions" style="width: 100%" @current-change="handleCurrentChange">
-              <el-table-column prop="model" label="模型" width="180">
-              </el-table-column>
-              <el-table-column prop="modelID" label="模型编号" width="180">
-              </el-table-column>
-              <el-table-column prop="attribute1" label="属性1">
-              </el-table-column>
-            </el-table>
-          </template>
-        </el-select>
-        <div v-if="isActive==2">
+        <sortieTable v-if="isActive==0" :callback="handleCurrentChange" />
+        <el-table v-if="isActive==1" :data="testModelOptions" highlight-current-row style="width: 100%;marginBottom:20px" @current-change="handleCurrentChange">
+          <el-table-column prop="model" label="模型" align="center">
+          </el-table-column>
+          <el-table-column prop="modelID" label="模型编号" align="center">
+          </el-table-column>
+          <el-table-column prop="attribute1" label="属性1" align="center">
+          </el-table-column>
+        </el-table>
+        <div v-if="isActive==2" class="">
+          <div class="result">
+            初步结果
+          </div>
           <el-select ref="selectTable" v-model="queryParams.diagnosis" placeholder="请选择增强诊断" @change="handleDiagnosis"
             style="marginRight:120px">
-            <el-option v-for="item in diagnosisOptions" :key="item.value" :label="item.label" :value="item.value">
-              <span style="float: left;">{{item.label}}</span>
-              <span style="float: right;color: #ccc;">{{item.value}}</span>
+            <el-option v-for="item in diagnosisOptions" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue">
+              <span style="float: left;">{{item.dictLabel}}</span>
+              <span style="float: right;color: #ccc;">{{item.dictValue}}</span>
             </el-option>
           </el-select>
           <el-select :disabled="queryParams.diagnosis==''" ref="selectTable" v-model="queryParams.diagnosisModel"
@@ -45,30 +40,38 @@
           <el-option v-for="item in FEQOptions" :key="item.value" :label="item.label" :value="item.value">
           </el-option>
         </el-select>
-        <el-select ref="selectTable" v-model="queryParams.computingEngine" placeholder="请调用计算引擎" v-if="isActive==4">
-          <el-option v-for="item in ComputingEngine" :key="item.value" :label="item.label" :value="item.value">
-          </el-option>
-        </el-select>
+        <div v-if="isActive==4">
+          最终结果展示
+        </div>
       </div>
       <div class="btn">
         <el-button type="primary" class="back" @click="back">上一步</el-button>
         <el-button v-if="isActive==2" type="primary" class="jump" @click="jump">跳过</el-button>
-        <el-button type="primary" class="next" @click="next">下一步</el-button>
+        <el-button type="primary" class="next" @click="next">{{nextBtn}}</el-button>
       </div>
     </div>
+    <!-- 进度条对话框 -->
+    <el-dialog title="数据测试中" :visible.sync="dialog" width="400px" :close-on-click-modal="false" :show-close="false">
+      <div class="ProgressBar">
+        <el-progress type="circle" :percentage="percentage" :color="colors"></el-progress>
+        <p>{{tipText}}</p>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import sortieTable from '@/views/manage/reasoning/sortieTable'
-import { listOrderInfo } from '@/api/manage/orderInfo'
 import { listFalseAlarmRestrainModel } from '@/api/manage/falseAlarmRestrainModel'
 import { listGroundDiagnosisModel } from '@/api/manage/groundDiagnosisModel'
 import { listDeepIsolationModel } from '@/api/manage/deepIsolationModel'
 import diagnosisTable from '@/views/manage/reasoning/diagnosisTable'
 import { listSortie } from '@/api/manage/sortie'
+import { getDicts } from "@/api/system/dict/data";
+
 export default {
   name: 'Reasoning',
+  dicts: ['order_type'],
   components: { sortieTable, diagnosisTable },
   data() {
     return {
@@ -123,6 +126,23 @@ export default {
       ModelOptions: [],
       // 诊断的模型表格标记
       modelFlag: 0,
+      // 进度条
+      percentage: 0,
+      colors: [
+        { color: '#f56c6c', percentage: 20 },
+        { color: '#e6a23c', percentage: 40 },
+        { color: '#5cb87a', percentage: 60 },
+        { color: '#1989fa', percentage: 80 },
+        { color: '#6f7ad3', percentage: 100 },
+      ],
+      // 进度条弹出框
+      dialog: false,
+      // 进度条提示信息
+      tipText: '正在测试...',
+      // 定时器
+      timer: null,
+      // 是否跳过
+      isJump: false,
     }
   },
   created() {
@@ -138,6 +158,13 @@ export default {
       },
       deep: true,
     },
+    isActive(newValue, oldValue) {
+      if (newValue === 1 || (oldValue === 2 && oldValue === 0)) {
+        this.nextBtn = '开始测试'
+      } else {
+        this.nextBtn = '下一步'
+      }
+    },
   },
   methods: {
     // 架次信息列表
@@ -152,14 +179,10 @@ export default {
     /** 查询系统指令信息列表 */
     getOrderList() {
       this.loading = true
-      listOrderInfo(this.queryParams).then(response => {
-        this.diagnosisOptions = response.rows
-          .map(item => ({
-            label: item.orderName,
-            value: item.orderType,
-          }))
-          .filter(item => item.value !== 'XZ')
-      })
+      getDicts("order_type").then(response => {
+      const selectedValues = ["FALSE_ALARM", "GROUND_DIAGNOSIS", "DEEP_ISOLATION"];
+      this.diagnosisOptions = response.data.filter(item => selectedValues.includes(item.dictValue));
+    });
     },
     /** 查询虚警抑制模型列表 */
     getFalseAlarmList() {
@@ -183,84 +206,99 @@ export default {
     },
     /** 查询地面诊断模型信息列表 */
     getGroundList() {
-      this.loading = true
+      this.loading = false
       listGroundDiagnosisModel(this.queryParams).then(response => {
         this.ModelOptions = response.rows
         this.modelFlag = 3
         this.total = response.total
-        this.loading = false
+        this.loading = true
       })
     },
     // 下一步
     next() {
-      if (this.isActive++ >= 5) this.isActive = 5
+      if (this.isActive >= 4) this.isActive = 4
       switch (this.isActive) {
-        case 1:
+        case 0:
           if (this.queryParams.sortie == '') {
             this.$message.error(`请选择架次信息`)
-            this.isActive = 0
             break
           } else {
             this.isActive = 1
             break
           }
-        case 2:
+        case 1:
           if (this.queryParams.testModel == '') {
             this.$message.error(`请选择测试性模型`)
-            this.isActive = 1
             break
           } else {
-            this.isActive = 2
+            // 调用接口、开始测试
+            this.dialog = true
+            if (!this.timer) {
+              this.timer = setInterval(() => {
+                if (this.percentage === 100) {
+                  this.tipText = '测试成功,正在生成结果'
+                  clearInterval(this.timer)
+                  this.timer = null
+                  setTimeout(() => {
+                    this.dialog = false
+                    this.percentage = 0
+                    this.tipText = '测试中...'
+                    this.isActive = 2
+                  }, 1500)
+                } else {
+                  this.percentage += 1
+                }
+              }, 5)
+            }
             break
           }
-        case 3:
+        case 2:
           if (this.queryParams.diagnosis == '') {
             this.$message.error(`请选择是否增强诊断`)
-            this.isActive = 2
             break
           } else {
             this.isActive = 3
             break
           }
-        case 4:
+        case 3:
           if (this.queryParams.faultModel == '') {
             this.$message.error(`请选择故障方程`)
-            this.isActive = 3
-            break
-          } else {
-            this.isActive = 4
-            break
-          }
-        case 5:
-          if (this.queryParams.computingEngine == '') {
-            this.$message.error(`请选择计算引擎`)
-            this.isActive = 4
             break
           } else {
             this.$confirm('确定开始故障诊断吗?', '提示')
               .then(() => {
-                console.log(this.queryParams)//
                 this.$message.success('开始故障诊断')
-                // 步骤条初始化和内容重置
-                this.isActive = 0
+                this.isActive = 4
+                this.nextBtn = '完成'
                 this.reset()
               })
               .catch(() => {})
             break
           }
+        case 4:
+          // 结果展示、步骤条初始化和内容重置
+          this.isActive = 0
+          this.reset()
+          break
         default:
           break
       }
     },
     back() {
       if (this.isActive < 1) this.isActive = 1
-      this.isActive--
+      if (this.isJump) {
+        this.isActive = 2
+        this.isJump = false
+      } else {
+        this.isActive--
+      }
     },
     //跳过
     jump() {
       this.queryParams.diagnosis = ''
       this.queryParams.diagnosisModel = ''
-      this.isActive = 3
+      this.isJump = true
+      this.isActive = 4
     },
     // 内容重置
     reset() {
@@ -292,12 +330,12 @@ export default {
     },
     //增强诊断的选择框
     handleDiagnosis(val) {
-      if (val == 'ZJ') {
+      if (val === 'FALSE_ALARM') {
         this.getFalseAlarmList()
-        console.log(this.ModelOptions)
-        console.log()
-      } else if (val == 'DM') {
+      } else if (val === 'GROUND_DIAGNOSIS') {
         this.getGroundList()
+      } else {
+        this.getDeepList()
       }
     },
   },
@@ -317,18 +355,34 @@ export default {
   position: relative;
 }
 .box {
-  height: 400px;
+  height: 100%;
+  width: 100%;
   display: flex;
   justify-content: center;
-  // align-items: center;
 }
 .btn {
   width: 100%;
   height: 40px;
   position: absolute;
+  margin-top: 10px;
   bottom: -40px;
   left: 0;
   display: flex;
   justify-content: space-around;
 }
+.result {
+  width: 100%;
+  height: 200px;
+  border: 1px solid #ebebeb;
+  margin-bottom: 20px;
+  padding: 15px;
+}
+.ProgressBar {
+  width: 350px;
+  height: 200px;
+  margin-top: 40px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
 </style>

+ 16 - 9
PHM-web/src/views/manage/reasoning/sortieTable.vue

@@ -1,25 +1,26 @@
 <template>
-  <div>
-    <el-table ref="singleTable" v-loading="loading" :data="sortieList" @current-change="handle">
-      <el-table-column label="机号" align="center" prop="aircraftNumber" />
-      <el-table-column label="架次号" align="center" prop="sortieNumber" />
-      <el-table-column label="开始时间" align="center" prop="startTime" width="180">
+  <div class="table">
+    <el-table ref="singleTable" v-loading="loading" highlight-current-row :data="sortieList" @current-change="handle">
+      
+      <el-table-column label="机号" align="center" prop="aircraftNumber" fixed/>
+      <el-table-column label="架次号" align="center" prop="sortieNumber" fixed/>
+      <el-table-column label="开始时间" align="center" prop="startTime" min-width="180">
         <template slot-scope="scope">
           <span>{{
             parseTime(scope.row.startTime, "{y}-{m}-{d} {h}:{i}:{s}")
           }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="结束时间" align="center" prop="endTime" width="180">
+      <el-table-column label="结束时间" align="center" prop="endTime" min-width="180">
         <template slot-scope="scope">
           <span>{{
             parseTime(scope.row.endTime, "{y}-{m}-{d} {h}:{i}:{s}")
           }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="飞行时长" align="center" prop="duration" />
+      <el-table-column label="飞行时长" align="center" prop="duration" min-width="180"/>
       <el-table-column label="创建人" align="center" prop="createBy" />
-      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+      <el-table-column label="创建时间" align="center" prop="createTime" min-width="180">
         <template slot-scope="scope">
           <span>{{
             parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}:{s}")
@@ -27,7 +28,7 @@
         </template>
       </el-table-column>
       <el-table-column label="更新人" align="center" prop="updateBy" />
-      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
+      <el-table-column label="更新时间" align="center" prop="updateTime" min-width="180">
         <template slot-scope="scope">
           <span>{{
             parseTime(scope.row.updateTime, "{y}-{m}-{d} {h}:{i}:{s}")
@@ -68,6 +69,8 @@ export default {
       open: false,
       startTime: '',
       endTime: '',
+      // 表格单选选中的
+      currentRow: null,
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -105,6 +108,7 @@ export default {
     // },
     //单选
     handle(val) {
+      this.currentRow=val
       this.callback(val)
     }
   },
@@ -112,6 +116,9 @@ export default {
 </script>
 
 <style scoped>
+.table{
+  width: 100%;
+}
 .pagination-container{
   height: 38px;
   padding: 0 0 !important;

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 32 - 23
PHM-web/src/views/manage/sortie/dataPlayBack.vue


+ 38 - 34
PHM-web/src/views/manage/sortie/index.vue

@@ -29,10 +29,6 @@
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
           v-hasPermi="['manage:sortie:add']">新增</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
-          v-hasPermi="['manage:sortie:edit']">修改</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
           v-hasPermi="['manage:sortie:remove']">删除</el-button>
@@ -51,7 +47,18 @@
     <el-table v-loading="loading" :data="sortieList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="机号" align="center" prop="aircraftNumber" />
-      <el-table-column label="架次号" align="center" prop="sortieNumber" />
+      <el-table-column label="架次号" align="center" prop="sortieNumber">
+        <template slot-scope="scope">
+          <el-button
+            @click.native.prevent="detail(scope.row)"
+            type="success"
+            plain
+            :span="1.5"
+            size="mini">
+            {{ scope.row.sortieNumber }}
+          </el-button>
+        </template>
+      </el-table-column>
       <el-table-column label="开始时间" align="center" prop="startTime" width="180">
         <template slot-scope="scope">
           <span>{{
@@ -67,24 +74,10 @@
         </template>
       </el-table-column>
       <el-table-column label="飞行时长" align="center" prop="duration" />
-      <el-table-column label="创建人" align="center" prop="createBy" />
-      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
-        <template slot-scope="scope">
-          <span>{{
-            parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}:{s}")
-          }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="更新人" align="center" prop="updateBy" />
-      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
-        <template slot-scope="scope">
-          <span>{{
-            parseTime(scope.row.updateTime, "{y}-{m}-{d} {h}:{i}:{s}")
-          }}</span>
-        </template>
-      </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
+          <el-button type="text" icon="el-icon-edit" size="mini" @click="handleUpdate(scope.row)"
+          v-hasPermi="['manage:sortie:edit']">修改</el-button>
           <el-button size="mini" type="text" @click="playBack(scope.row)"
             v-hasPermi="['manage:sortie:edit']">数据回放</el-button>
         </template>
@@ -192,10 +185,6 @@ export default {
         startTime: '',
         endTime: '',
         duration: null,
-        createBy: null,
-        createTime: null,
-        updateBy: null,
-        updateTime: null,
       },
       upload: {
         title: '',
@@ -287,20 +276,35 @@ export default {
         startTime: null,
         endTime: null,
         duration: null,
-        isDelete: null,
-        createBy: null,
-        createTime: null,
-        updateBy: null,
-        updateTime: null,
+        isDelete: null
       }
       this.resetForm('form')
     },
-    // 跳转到数据回放
+    // 跳转到选择参数
     playBack(row) {
       const sortieNumber = row.sortieNumber
-      this.$router.push(
-        '/manage/integratedDataManage/sortie/dataPlayback/' + sortieNumber
-      )
+      // this.$router.push(
+      //   '/manage/integratedDataManage/sortie/dataPlayback/' + sortieNumber
+      // )
+      // this.$router.push(
+      //   '/manage/integratedDataManage/sortie/selectParameters/' + sortieNumber
+      // )
+      this.$router.push({
+        name: 'selectParameters',
+        params: { 
+          sortieNumber: sortieNumber
+        },
+      })
+    },
+    // 架次详情
+    detail(row){
+      const sortieNumber = row.sortieNumber
+      this.$router.push({
+        name: 'SortieDetail',
+        params: { 
+          sortieNumber: sortieNumber
+        },
+      })
     },
     /** 下载模板操作 */
     importTemplate() {

+ 124 - 0
PHM-web/src/views/manage/sortie/selectParameters.vue

@@ -0,0 +1,124 @@
+<template>
+  <div class="app-container selectParameters">
+    <el-button type="primary" @click="back" class="backBtn">返回</el-button>
+    <p style="text-align: center; margin: 0 0 20px">请选择该架次信息回放的参数</p>
+    <div class="transfer">
+      <el-transfer v-model="value"
+        :props="{ key: 'value', label: 'desc' }" 
+        :data="data"
+        filterable
+        filter-placeholder="请输入参数名称"
+        :titles="['所有参数', '展示参数']"
+        @change="handleChange"
+      >
+      </el-transfer>
+    </div>
+    <div class="footer">
+      <el-button :disabled="isDisable" type="primary" @click="submitFileForm">确 定</el-button>
+    </div>
+    <!-- 数据回放弹出框 -->
+    <el-dialog
+      :visible.sync="dialogVisible"
+      :fullscreen="true"
+      class="thisDialog"
+      >
+      <dataPlayBack @closeDialog="closeDialog"/>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import dataPlayBack from '@/views/manage/sortie/dataPlayBack'
+export default {
+  name: 'SelectParameters',
+  components: {
+    dataPlayBack
+  },
+  data() {
+    const generateData = _ => {
+      const data = [];
+      for (let i = 1; i <= 15; i++) {
+        data.push({
+          value: i,
+          desc: `备选项 ${ i }`
+        });
+      }
+      return data;
+    };
+    return {
+      // 遮罩层
+      loading: true,
+      // 判断选择参数为空时
+      isDisable:false,
+      data: generateData(),
+      value: [1],
+      // 最后选择的参数
+      selectData:[],
+      dialogVisible: false
+    };
+  },
+  methods: {
+    handleChange(value, direction, movedKeys) {
+      this.selectData=value
+      console.log('value', value);
+      console.log('direction', direction);
+      console.log('movedKeys', movedKeys);
+      if(value.length===0){
+        this.isDisable=true
+      }else{
+        this.isDisable=false
+      }
+    },
+    submitFileForm(){
+      this.dialogVisible=true
+    },
+    back(){
+      this.$router.push({
+        name: 'Sortie'
+      })
+    },
+    // 关闭弹框
+    closeDialog(){
+      this.dialogVisible=false
+    },
+  }
+}
+</script>
+
+<style scoped>
+.selectParameters{
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.transfer >>> .el-transfer-panel{
+  width: 300px;
+  height: 450px;
+}
+.transfer >>> .el-transfer-panel__list.is-filterable{
+  height: 350px;
+}
+.footer{
+  width: 42vw;
+  margin-top: 20px;
+  position: relative;
+}
+.footer >>> .el-button{
+  position: absolute;
+  right: 0;
+}
+::v-deep .thisDialog .el-dialog__body {
+    padding: 0;
+}
+::v-deep .thisDialog .el-dialog__header {
+    padding: 0;
+}
+.backBtn{
+  position: absolute;
+  top: 20px;
+  left: 40px;
+}
+/* ::v-deep .el-dialog__body{
+  padding: 0 !important;
+} */
+</style>

+ 39 - 0
PHM-web/src/views/manage/sortie/sortieDetail.vue

@@ -0,0 +1,39 @@
+<template>
+  <div class="app-container">
+    <el-button type="text" @click="back" class="backBtn">⇦返回</el-button>
+    <el-descriptions title="用户信息" class="sortieDetail"  :contentStyle="{'font-weight': '700'}">
+        <el-descriptions-item label="飞机编号">1234</el-descriptions-item>
+        <el-descriptions-item label="日期">2023/05/19</el-descriptions-item>
+        <el-descriptions-item label="任务类型">xx</el-descriptions-item>
+        <el-descriptions-item label="起落次数">5</el-descriptions-item>
+        <el-descriptions-item label="开始时间">xxxxx</el-descriptions-item>
+        <el-descriptions-item label="结束时间">xxxxx</el-descriptions-item>
+        <el-descriptions-item label="持续时间">xxxxx</el-descriptions-item>
+        <el-descriptions-item label="开车前油量">xxxxx</el-descriptions-item>
+    </el-descriptions>
+  </div>
+</template>
+
+<script>
+  export default {
+    name:'SortieDetail',
+    methods: {
+    back(){
+      this.$router.push({
+        name: 'Sortie'
+      })
+    }
+  }
+  }
+</script>
+
+<style scoped>
+.sortieDetail{
+  padding: 20px 70px 0px 70px;
+}
+.backBtn{
+  position: absolute;
+  top: 20px;
+  left: 30px;
+}
+</style>

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels