allen 2 жил өмнө
parent
commit
741e75b9f2

+ 44 - 0
src/api/showInfo/analysis.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询离线数据分析列表
+export function listAnalysis(query) {
+  return request({
+    url: '/showInfo/analysis/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询离线数据分析详细
+export function getAnalysis(id) {
+  return request({
+    url: '/showInfo/analysis/' + id,
+    method: 'get'
+  })
+}
+
+// 新增离线数据分析
+export function addAnalysis(data) {
+  return request({
+    url: '/showInfo/analysis',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改离线数据分析
+export function updateAnalysis(data) {
+  return request({
+    url: '/showInfo/analysis',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除离线数据分析
+export function delAnalysis(id) {
+  return request({
+    url: '/showInfo/analysis/' + id,
+    method: 'delete'
+  })
+}

+ 51 - 0
src/api/showInfo/management.js

@@ -0,0 +1,51 @@
+import request from '@/utils/request'
+
+// 查询离线数据管理列表
+export function listManagement(query) {
+  return request({
+    url: '/showInfo/management/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询离线数据管理详细
+export function getManagement(id) {
+  return request({
+    url: '/showInfo/management/' + id,
+    method: 'get'
+  })
+}
+
+// 新增离线数据管理
+export function addManagement(data) {
+  return request({
+    url: '/showInfo/management',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改离线数据管理
+export function updateManagement(data) {
+  return request({
+    url: '/showInfo/management',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除离线数据管理
+export function delManagement(id) {
+  return request({
+    url: '/showInfo/management/' + id,
+    method: 'delete'
+  })
+}
+
+export function getDataOption() {
+  return request({
+    url: '/showInfo/management/getOption',
+    method: 'get'
+  })
+}

+ 1 - 1
src/assets/styles/common.less

@@ -1,4 +1,4 @@
-@import (css) url("https://fonts.googleapis.com/css?family=Noto+Sans+SC:400,700&display=swap?subset=chinese-simplified");
+// @import (css) url("https://fonts.googleapis.com/css?family=Noto+Sans+SC:400,700&display=swap?subset=chinese-simplified");
 
 *, :after, :before {
   margin: 0;

+ 4 - 4
src/views/extract/task/index.vue

@@ -55,7 +55,7 @@
           v-hasPermi="['extract:task:edit']"
         >修改</el-button>
       </el-col> -->
-      <!-- <el-col :span="1.5">
+      <el-col :span="1.5">
         <el-button
           type="danger"
           plain
@@ -65,7 +65,7 @@
           @click="handleDelete"
           v-hasPermi="['extract:task:remove']"
         >删除</el-button>
-      </el-col> -->
+      </el-col>
       <!-- <el-col :span="1.5">
         <el-button
           type="warning"
@@ -106,13 +106,13 @@
             @click="handleUpdate(scope.row)"
             v-hasPermi="['extract:task:edit']"
           >修改</el-button> -->
-          <!-- <el-button
+          <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
             v-hasPermi="['extract:task:remove']"
-          >删除</el-button> -->
+          >删除</el-button>
           <el-button
             size="mini"
             type="text"

+ 115 - 79
src/views/searchV2/question/index.vue

@@ -1,95 +1,125 @@
 <template>
     <div style="width:1000px; margin: auto;">
-      <div class="chat-window-wrapper" ref="chatWindowWrapper">
-        <el-card class="chat-window" ref="chatWindow">
-          <div v-for="(message, index) in messages" :key="index" class="message">
-            <img
-            :src="message.sender === 'user' ? require('@/assets/search/soldier.png') : require('@/assets/search/robot.png')"
-              alt="avatar"
-              class="avatar"
-            />
-            <div :class="['bubble', message.sender === 'user' ? 'user-bubble' : message.sender === 'ai' ? 'ai-bubble' : 'system-bubble']">
-              {{ message.content }}
-              <el-button v-if="message.sender === 'system' && requestError" size="mini" type="text" @click="retry(message.oldMsg)" style="margin-left:10px;width:80px">&nbsp;&nbsp;重&nbsp;&nbsp;试</el-button>
-            </div>
+      <el-row>
+        <el-col :span="18">
+          <div class="chat-window-wrapper" ref="chatWindowWrapper">
+            <el-card class="chat-window" ref="chatWindow">
+              <div v-for="(message, index) in messages" :key="index" class="message">
+                <img
+                :src="message.sender === 'user' ? require('@/assets/search/soldier.png') : require('@/assets/search/robot.png')"
+                  alt="avatar"
+                  class="avatar"
+                />
+                <div :class="['bubble', message.sender === 'user' ? 'user-bubble' : message.sender === 'ai' ? 'ai-bubble' : 'system-bubble']">
+                  {{ message.content }}
+                  <el-button v-if="message.sender === 'system' && requestError" size="mini" type="text" @click="retry(message.oldMsg)" style="margin-left:10px;width:80px">&nbsp;&nbsp;重&nbsp;&nbsp;试</el-button>
+                </div>
+              </div>
+              <div v-show="isWaitingForResponse" class="response-indicator" ref="aiBubble">
+                  <img :src="require('@/assets/search/robot.png')" alt="avatar" class="avatar" />
+                  <div class="loader"></div>
+                </div>
+            </el-card>
           </div>
-          <div v-show="isWaitingForResponse" class="response-indicator" ref="aiBubble">
-              <img :src="require('@/assets/search/robot.png')" alt="avatar" class="avatar" />
-              <div class="loader"></div>
-            </div>
-        </el-card>
-      </div>
-      <div class="input-area">
-          <el-input v-model="inputMessage" type="textarea" placeholder="输入您的消息..." style="margin:5px" :disabled="isWaitingForResponse"
-                  @keyup.enter.native="sendMessage(null)"></el-input>
-      </div>
+          <div class="input-area">
+              <el-input v-model="inputMessage" type="textarea" placeholder="输入您的消息..." style="margin:5px" :disabled="isWaitingForResponse"
+                      @keyup.enter.native="sendMessage(null)"></el-input>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <el-card class="chat-msg">
+            <!-- <p v-html="dict.type.show_msg[0]?dict.type.show_msg[0].raw.remark:''"/> -->
+            <li><span style="color:red">故障原因</span>:为什么xxxxx;xxxxx是什么原因;</li>
+            <li><span style="color:red">故障影响</span>:xxxx有什么后果;xxxx有什么影响;xxxx会怎么样;xxxx会造成什么</li>
+            <li><span style="color:red">组成</span>:xxxx有什么零件;xxxx由什么组成;xxxx包含什么</li>
+            <li><span style="color:red">维修方法</span>:xxxx怎么修;xxxx处理方法;xxxx怎么解决</li>
+            <li><span style="color:red">检测工具</span>:xxxx的检测工具;xxxx的测试工具;xxxx怎么诊断;</li>
+            <li><span style="color:red">部件故障</span>:xxxx有什么故障;xxxx会有什么问题</li>
+          </el-card>
+        </el-col>
+      </el-row>
+
   </div>
 </template>
   
 <script>
 import { question } from "@/api/knowledge/search";
 export default {
-    data() {
-        return {
-            inputMessage: "",
-            messages: [],
-            requestError: false,
-            isWaitingForResponse: false,
-        };
+  name: 'question',
+  dicts: ['show_msg'],
+  data() {
+      return {
+          inputMessage: "",
+          messages: [],
+          requestError: false,
+          isWaitingForResponse: false,
+          hint: "",
+      };
+  },
+  mounted(){
+    this.hint = this.getHint();
+  },
+  methods: {
+    getHint(){
+      let showMsgs = this.dict.type.show_msg;
+      for(let showMsg of showMsgs) {
+        if(showMsg.value == "qa_msg"){
+          return showMsg.raw.remark
+        }
+      }
     },
-    methods: {
-        sendMessage(msg) {
-            let inputMessage = msg ? msg :this.inputMessage.trim()
-            if (!inputMessage) return;
-            // this.isWaitingForResponse = true;
-
-            if(!msg){
-              this.messages.push({
-                sender: "user",
-                content: inputMessage,
-              });
-            }
-
-            // 获取最后一行的焦点
-            const aiBubbles = this.$refs.aiBubble;
-            aiBubbles.focus();
+      sendMessage(msg) {
+          let inputMessage = msg ? msg :this.inputMessage.trim()
+          if (!inputMessage) return;
+          // this.isWaitingForResponse = true;
+
+          if(!msg){
+            this.messages.push({
+              sender: "user",
+              content: inputMessage,
+            });
+          }
 
-            let oldMsg = inputMessage;
+          // 获取最后一行的焦点
+          const aiBubbles = this.$refs.aiBubble;
+          aiBubbles.focus();
+
+          let oldMsg = inputMessage;
+          this.scrollToBottom();
+          question(inputMessage).then(resp => {
+            this.messages.push({
+                sender: "ai",
+                content: resp.data,
+            });
             this.scrollToBottom();
-            question(inputMessage).then(resp => {
+            this.isWaitingForResponse = false;
+          }).catch(error => {
+            console.info(error)
+            this.requestError = true;
               this.messages.push({
-                  sender: "ai",
-                  content: resp.data,
-              });
-              this.scrollToBottom();
-              this.isWaitingForResponse = false;
-            }).catch(error => {
-              console.info(error)
-              this.requestError = true;
-                this.messages.push({
-                  sender: "system",
-                  content: "系统异常",
-                  oldMsg,
-              });
-              this.scrollToBottom();
-              this.isWaitingForResponse = false;
-            })
-            this.inputMessage = "";
-        },
-        retry(msg) {
-          if (this.requestError) {
-            this.requestError = false;
-            this.messages.pop(); // 移除系统提示消息
-            this.sendMessage(msg); // 重新发送
-          }
-        },
-        scrollToBottom() {
-          this.$nextTick(() => {
-            const chatWindowWrapper = this.$refs.chatWindowWrapper;
-            chatWindowWrapper.scrollTop = chatWindowWrapper.scrollHeight;
-          });
-        },
-    },
+                sender: "system",
+                content: "系统异常",
+                oldMsg,
+            });
+            this.scrollToBottom();
+            this.isWaitingForResponse = false;
+          })
+          this.inputMessage = "";
+      },
+      retry(msg) {
+        if (this.requestError) {
+          this.requestError = false;
+          this.messages.pop(); // 移除系统提示消息
+          this.sendMessage(msg); // 重新发送
+        }
+      },
+      scrollToBottom() {
+        this.$nextTick(() => {
+          const chatWindowWrapper = this.$refs.chatWindowWrapper;
+          chatWindowWrapper.scrollTop = chatWindowWrapper.scrollHeight;
+        });
+      },
+  },
 };
 </script>
   
@@ -206,4 +236,10 @@ export default {
   width: 100%;
   /* min-height: 100%; */
 }
+.chat-msg {
+  height: calc(100vh - 200px);
+  white-space: pre-wrap;
+  margin-left: 5px;
+  font-size: 1rem;
+}
 </style>

+ 364 - 0
src/views/showInfo/analysis/index.vue

@@ -0,0 +1,364 @@
+<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="dataId">
+        <el-select v-model="queryParams.dataId" placeholder="请选择离线数据" clearable @keyup.enter.native="handleQuery">
+            <el-option
+              v-for="item in dataOption"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+      </el-form-item>
+      <el-form-item label="机号" prop="airNumber">
+        <el-input
+          v-model="queryParams.airNumber"
+          placeholder="请输入机号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="飞行时长" prop="flightDuration">
+        <el-input
+          v-model="queryParams.flightDuration"
+          placeholder="请输入飞行时长"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="分析类型" prop="type">
+        <el-select v-model="queryParams.type" placeholder="请选择分析类型" clearable>
+          <el-option
+            v-for="dict in dict.type.offline_data_analysis_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="分析结果" prop="resultPath">
+        <el-input
+          v-model="queryParams.resultPath"
+          placeholder="请输入分析结果"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <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="['showInfo:analysis: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="['showInfo:analysis: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="['showInfo:analysis: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="['showInfo:analysis:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="analysisList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="序号" align="center" prop="id" />
+      <el-table-column label="离线数据" align="center" prop="dataId" />
+      <el-table-column label="机号" align="center" prop="airNumber" />
+      <el-table-column label="飞行时长" align="center" prop="flightDuration" />
+      <el-table-column label="分析类型" align="center" prop="type">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.offline_data_analysis_type" :value="scope.row.type"/>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column label="分析结果" align="center" prop="resultPath" /> -->
+      <el-table-column label="备注" align="center" prop="remark" />
+      <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-search"
+            @click="viewResult(scope.row)"
+            v-hasPermi="['showInfo:analysis:edit']"
+          >查看结果</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['showInfo:analysis:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['showInfo:analysis: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"
+    />
+
+    <!-- 添加或修改离线数据分析对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="离线数据" prop="dataId">
+          <el-select v-model="form.dataId" placeholder="请选择离线数据">
+            <el-option
+              v-for="item in dataOption"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item label="机号" prop="airNumber">
+          <el-input v-model="form.airNumber" placeholder="请输入机号" />
+        </el-form-item>
+        <el-form-item label="飞行时长" prop="flightDuration">
+          <el-input v-model="form.flightDuration" placeholder="请输入飞行时长" />
+        </el-form-item> -->
+        <el-form-item label="分析类型" prop="type">
+          <el-select v-model="form.type" placeholder="请选择分析类型">
+            <el-option
+              v-for="dict in dict.type.offline_data_analysis_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item label="分析结果" prop="resultPath">
+          <el-input v-model="form.resultPath" placeholder="请输入分析结果" />
+        </el-form-item> -->
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </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="chartTitle" :visible.sync="openChart" width="1200px">
+      <Chart v-if="openChart"></Chart>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listAnalysis, getAnalysis, delAnalysis, addAnalysis, updateAnalysis } from "@/api/showInfo/analysis";
+import { getDataOption } from "@/api/showInfo/management";
+import Chart from "@/views/maintenance/offLineDataAnalysis/chart"
+
+export default {
+  name: "Analysis",
+  components: { Chart },
+  dicts: ['offline_data_analysis_type'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 离线数据分析表格数据
+      analysisList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        dataId: null,
+        airNumber: null,
+        flightDuration: null,
+        type: null,
+        resultPath: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        dataId: [
+          { required: true, message: "数据管理不能为空", trigger: "blur" }
+        ],
+        type: [
+          { required: true, message: "分析类型不能为空", trigger: "change" }
+        ],
+      },
+      dataOption: [],
+      openChart: false,
+      chartTitle: "氧气浓缩器寿命预测",
+    };
+  },
+  created() {
+    this.getList();
+    this.getOption();
+  },
+  methods: {
+    /** 查询离线数据分析列表 */
+    getList() {
+      this.loading = true;
+      listAnalysis(this.queryParams).then(response => {
+        this.analysisList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        dataId: null,
+        airNumber: null,
+        flightDuration: null,
+        type: null,
+        resultPath: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加离线数据分析";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getAnalysis(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改离线数据分析";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateAnalysis(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addAnalysis(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除离线数据分析编号为"' + ids + '"的数据项?').then(function() {
+        return delAnalysis(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('showInfo/analysis/export', {
+        ...this.queryParams
+      }, `analysis_${new Date().getTime()}.xlsx`)
+    },
+    getOption(){
+      getDataOption().then(resp => {
+        this.dataOption = resp.data
+      })
+    },
+    viewResult(row){
+      this.openChart = true
+    }
+  }
+};
+</script>

+ 308 - 0
src/views/showInfo/management/index.vue

@@ -0,0 +1,308 @@
+<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="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入数据名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="机号" prop="airNumber">
+        <el-input
+          v-model="queryParams.airNumber"
+          placeholder="请输入机号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="飞行时长" prop="flightDuration">
+        <el-input
+          v-model="queryParams.flightDuration"
+          placeholder="请输入飞行时长"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <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="['showInfo:management: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="['showInfo:management: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="['showInfo:management: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="['showInfo:management:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="managementList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="序号" align="center" prop="id" />
+      <el-table-column label="数据名称" align="center" prop="name" />
+      <el-table-column label="机号" align="center" prop="airNumber" />
+      <el-table-column label="飞行时长" align="center" prop="flightDuration" />
+      <!-- <el-table-column label="飞行数据" align="center" prop="dataPath" /> -->
+      <el-table-column label="备注" align="center" prop="remark" />
+      <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-download"
+            @click="handleDownload(scope.row)"
+            v-hasPermi="['showInfo:management:edit']"
+          >文件下载</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['showInfo:management:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['showInfo:management: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"
+    />
+
+    <!-- 添加或修改离线数据管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="数据名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入数据名称" />
+        </el-form-item>
+        <el-form-item label="机号" prop="airNumber">
+          <el-input v-model="form.airNumber" placeholder="请输入机号" />
+        </el-form-item>
+        <el-form-item label="飞行时长" prop="flightDuration">
+          <el-input v-model="form.flightDuration" placeholder="请输入飞行时长" />
+        </el-form-item>
+        <el-form-item label="飞行数据">
+          <file-upload v-model="form.dataPath" :fileType="uploadFileType"/>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </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>
+  </div>
+</template>
+
+<script>
+import { listManagement, getManagement, delManagement, addManagement, updateManagement } from "@/api/showInfo/management";
+
+export default {
+  name: "Management",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 离线数据管理表格数据
+      managementList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        airNumber: null,
+        flightDuration: null,
+        dataPath: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [
+          { required: true, message: "数据名称不能为空", trigger: "blur" }
+        ],
+        airNumber: [
+          { required: true, message: "机号不能为空", trigger: "blur" }
+        ],
+        dataPath: [
+          { required: true, message: "飞行数据不能为空", trigger: "blur" }
+        ],
+      },
+      uploadFileType:["csv"],
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询离线数据管理列表 */
+    getList() {
+      this.loading = true;
+      listManagement(this.queryParams).then(response => {
+        this.managementList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        name: null,
+        airNumber: null,
+        flightDuration: null,
+        dataPath: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加离线数据管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getManagement(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改离线数据管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateManagement(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addManagement(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除离线数据管理编号为"' + ids + '"的数据项?').then(function() {
+        return delManagement(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('showInfo/management/export', {
+        ...this.queryParams
+      }, `management_${new Date().getTime()}.xlsx`)
+    },
+    handleDownload(row) {
+      this.$download.name(row.dataPath, false).then((resp) => { console.info(resp) })
+    },
+  }
+};
+</script>

+ 7 - 14
src/views/upload/uploadManage/index.vue

@@ -9,7 +9,7 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="模板类型" prop="templateType">
+      <!-- <el-form-item label="模板类型" prop="templateType">
         <el-select v-model="queryParams.templateType" placeholder="请选择模板类型" clearable>
           <el-option
             v-for="dict in dict.type.kg_upload_template"
@@ -18,7 +18,7 @@
             :value="dict.value"
           />
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="数据类型" prop="dataType">
         <el-select v-model="queryParams.dataType" placeholder="请选择数据类型" clearable>
           <el-option
@@ -100,15 +100,15 @@
           <dict-tag :options="dict.type.file_upload_status" :value="scope.row.status"/>
         </template>
       </el-table-column>
-      <el-table-column label="数量" align="center" prop="amount" />
+      <!-- <el-table-column label="数量" align="center" prop="amount" /> -->
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button
+          <!-- <el-button
             v-show="scope.row.status==1"
             size="mini"
             type="text"
             @click="handleViewDetail(scope.row)"
-          >查看详情</el-button>
+          >查看详情</el-button> -->
           <el-button
             size="mini"
             type="text"
@@ -141,14 +141,7 @@
         <!-- <el-form-item label="文件名称" prop="name">
           <el-input v-model="form.name" placeholder="请输入文件名称" />
         </el-form-item> -->
-        <el-form-item label="模板类型">
-          <!-- <el-radio-group v-model="form.templateType">
-            <el-radio
-              v-for="dict in dict.type.kg_upload_template"
-              :key="dict.value"
-              :label="dict.value"
-            >{{dict.label}}</el-radio>
-          </el-radio-group> -->
+        <!-- <el-form-item label="模板类型">
           <el-button 
             size="mini" 
             v-for="dict in dict.type.kg_upload_template" 
@@ -159,7 +152,7 @@
             @click="downlaodTemplate(dict.value)">
             {{dict.label}}
           </el-button>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="数据类型" prop="dataType">
           <el-radio-group v-model="form.dataType">
             <el-radio

+ 242 - 0
src/views/upload/uploadManage/view.vue

@@ -0,0 +1,242 @@
+<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="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入文件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="数据类型" prop="dataType">
+        <el-select v-model="queryParams.dataType" placeholder="请选择数据类型" clearable>
+          <el-option
+            v-for="dict in dict.type.kg_upload_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="uploadManageList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="文件名称" align="center" prop="name" />
+      <el-table-column label="数据类型" align="center" prop="dataType">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.kg_upload_type" :value="scope.row.dataType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="文件" align="center" prop="filePath" >
+        <template slot-scope="scope">
+          <el-link :href="`${baseUrl}${scope.row.filePath}`" :underline="false" target="_blank">
+            <span class="el-icon-document"> {{ getFileName(scope.row.filePath) }} </span>
+          </el-link>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+  </div>
+</template>
+
+<script>
+import { listUploadManage, getUploadManage, delUploadManage, addUploadManage, updateUploadManage } from "@/api/upload/uploadManage";
+import FileUpload from '@/components/FileUpload'
+import Accident from '@/views/uploadDetail/accident'
+export default {
+  name: "UploadManage",
+  components: { FileUpload, Accident },
+  dicts: ['kg_upload_type', 'kg_upload_template', 'file_upload_status'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 上传管理表格数据
+      uploadManageList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      uploadFileType: ["pdf","xml","xls","xlsx"],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        templateType: null,
+        dataType: null,
+        fileType: null,
+        status: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        dataType: [
+          {required: true, message: '数据类型不能为空', trigger: 'change'},
+        ],
+        filePath: [
+          {required: true, message: '文件不能为空', trigger: 'change'},
+        ],
+      },
+      accidentOpen: false,
+      upload: {},
+      baseUrl: process.env.VUE_APP_BASE_API,
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询上传管理列表 */
+    getList() {
+      this.loading = true;
+      listUploadManage(this.queryParams).then(response => {
+        this.uploadManageList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        name: null,
+        templateType: "0",
+        dataType: "1",
+        fileType: null,
+        filePath: null,
+        status: "0",
+        amount: 1,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      if(this.$refs.upload){
+        this.$refs.upload.reset()
+      }
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加上传管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getUploadManage(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改上传管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateUploadManage(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUploadManage(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除上传管理编号为"' + ids + '"的数据项?').then(function() {
+        return delUploadManage(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('upload/uploadManage/export', {
+        ...this.queryParams
+      }, `uploadManage_${new Date().getTime()}.xlsx`)
+    },
+    handleDownload(row) {
+      this.$download.name(row.filePath, false).then((resp) => { console.info(resp) })
+    },
+    downlaodTemplate(typeValue){
+      this.download(`/upload/dataDetail/downloadTemplate/${typeValue}`, {
+      }, `accident_template.xlsx`)
+    },
+    handleViewDetail(row){
+      this.upload = row
+      this.accidentOpen = true
+    },
+    getFileName(name) {
+      if (name.lastIndexOf("/") > -1) {
+        return name.slice(name.lastIndexOf("/") + 1);
+      } else {
+        return "";
+      }
+    },
+  }
+};
+</script>