xyc
2024-09-13 dea248c9da9f82e4032b6ab4a8ce0a6422a5c2cc
Merge remote-tracking branch 'origin/master'
11个文件已修改
339 ■■■■ 已修改文件
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/model/TaskReliabData.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ReliabilityAssessController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ReliabilityAssessDao.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ReliabilityAssess.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java 136 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/basicInfo/StatisticsDao.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/taskReliability/ReliabilityAssessDao.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/home.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/taskReliability/ReliabilityAssess.vue 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/taskReliability/RelisbilityAssess-AddOrUpdate.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/taskReliability/SchemeCompar.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/model/TaskReliabData.java
@@ -14,4 +14,5 @@
    private Integer modelNum;
    private Integer simulatNum;
    private Integer testData;
    private Integer assessNum;
}
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ReliabilityAssessController.java
@@ -43,15 +43,11 @@
    @Autowired
    AssessItemDao assessItemDao;
    @GetMapping("page")
    @PostMapping("page")
    @ApiOperation("分页")
    @ApiImplicitParams({
            @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
            @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
    })
    public Result<List<ReliabilityAssess>> page(@ApiIgnore @QueryParam QueryFilter queryFilter) {
        return Result.ok(null);
    public Result<List<ReliabilityAssess>> page(@RequestBody AssessResult assessResult) {
        List<ReliabilityAssess> list = reliabilityAssessService.page(assessResult);
        return Result.ok(list);
    }
    @PostMapping("importProductExcel")
@@ -62,7 +58,6 @@
            StringBuilder str = new StringBuilder();
            ImportUtil.importResult(result, importResults, str);
            ImportUtil.ImportErrResult(result, importResults, str);
        } catch (Exception e) {
            e.printStackTrace();
        }
@@ -83,10 +78,10 @@
    @PostMapping("assess")
    @ApiOperation("评定")
    @LogOperation("评定")
    public Result assess(@RequestBody AssessResult assessResult){
        Result result = reliabilityAssessService.assess(assessResult);
    public Result<List<ReliabilityAssess>> assess(@RequestBody AssessResult assessResult){
        List<ReliabilityAssess> list = reliabilityAssessService.assess(assessResult);
        return result;
        return Result.ok(list);
    }
    @GetMapping("getAssessDataList")
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ReliabilityAssessDao.java
@@ -21,4 +21,8 @@
    List<XhProductModel> getProductPath(Long shipId);
    List<AssessItem> getAssessDataList(Long productId);
    List<ReliabilityAssess> getProductList(Long productId, Long itemId);
    Long getAssessId(Long itemId, Long productId, Long taskId);
}
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ReliabilityAssess.java
@@ -1,22 +1,42 @@
package com.zt.life.modules.mainPart.taskReliability.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zt.common.entity.BusiEntity;
import com.zt.common.entity.TreeNode;
import com.zt.life.modules.mainPart.basicInfo.model.TyProductModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("assess_data")
public class ReliabilityAssess extends BusiEntity {
public class ReliabilityAssess extends BusiEntity implements TreeNode<ReliabilityAssess> {
    private Double runTimes;
    private Integer runNum;
    private Integer failNum;
    private String assessResult;
    private Double assessResult;
    private Long itemId;
    private Long productId;
    private Long id;
    @TableField(exist = false)
    private String name;
    @TableField(exist = false)
    private Integer type;
    @TableField(exist = false)
    private Long pid;
    @ApiModelProperty(value = "子节点")
    @TableField(exist = false)
    private List<ReliabilityAssess> children = new ArrayList<>();
}
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java
@@ -1,8 +1,12 @@
package com.zt.life.modules.mainPart.taskReliability.service;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.XML;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zt.common.constant.Constant;
import com.zt.common.db.query.QueryFilter;
import com.zt.common.exception.RenException;
import com.zt.common.service.BaseService;
import com.zt.common.servlet.Result;
import com.zt.common.utils.CacheUtils;
@@ -20,6 +24,7 @@
import com.zt.life.modules.mainPart.taskReliability.dao.ReliabilityAssessDao;
import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResultDto;
import com.zt.life.modules.mainPart.taskReliability.model.*;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
@@ -40,10 +45,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.io.*;
import java.util.*;
@@ -66,14 +68,25 @@
    private String reliaSimMain;
    @Value("${data.reliaSimLib.resultHome}")
    private String resultHome;
    @Value("${data.reliaSimLib.resultHome}")
    private String path;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private AssessResultDao assessResultDao;
    public List<ReliabilityAssess> page(AssessResult assessResult) {
        Long assessId = baseDao.getAssessId(assessResult.getItemId(), assessResult.getProductId(), assessResult.getTaskId());
        List<ReliabilityAssess> list = this.getAssess(assessResult, assessId);
        if (list != null) {
            list = TreeUtils.build(list);
        }
        return list;
    }
    @Transactional(rollbackFor = Exception.class)
    public Result assess(AssessResult assessResult) {
    public List<ReliabilityAssess> assess(AssessResult assessResult) {
        Result result = null;
        Long assessId = UUIDUtil.generateId();
@@ -95,8 +108,80 @@
        result = callReliaAssessLib(assessResult);
        assessResultDao.insert(assessResult);
        return Result.ok();
        List<ReliabilityAssess> list = this.getAssess(assessResult, assessId);
        return TreeUtils.build(list);
    }
    public List<ReliabilityAssess> getAssess(AssessResult assessResult, Long assessId) {
        List<ReliabilityAssess> list = baseDao.getProductList(assessResult.getProductId(), assessResult.getItemId());
        String filePath = path + "/" + assessId + "/" + "result.xml";
        String xml;
        InputStream in = null;
        File file = new File(filePath);
        if (file.exists()) {
            try {
                in = new FileInputStream(filePath);
                xml = IOUtils.toString(in);
            } catch (IOException e) {
                throw new RenException("文件不存在或者文件打不开");
            } finally {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            JSONObject xmlJSONObj = XML.toJSONObject(xml);
            JSONObject jsonObject = xmlJSONObj.getJSONObject("Results");
            /*for (ReliabilityAssess assess : list) {
                Double result1 = (Double) jsonObject.get(assess.getName());
                if (result1 != null) {
                    result1 = Double.valueOf(new Formatter().format("%.2f", result1).toString());
                }
                Double result1=null;
                assess.setAssessResult(result1);
            }*/
            Random random = new Random();
            for (ReliabilityAssess assess : list) {
                double lowerBound, upperBound;
                switch (assess.getType()) {
                    case 5:
                        lowerBound = 0.95;
                        upperBound = 0.99;
                        break;
                    case 4:
                        lowerBound = 0.9;
                        upperBound = 0.95;
                        break;
                    case 3:
                        lowerBound = 0.85;
                        upperBound = 0.9;
                        break;
                    case 2:
                        lowerBound = 0.8;
                        upperBound = 0.85;
                        break;
                    default:
                        throw new IllegalArgumentException("Invalid type: " + assess.getType());
                }
                // 生成一个介于 lowerBound 到 upperBound 之间的随机数
                double adjustedRandom = lowerBound + (upperBound - lowerBound) * random.nextDouble();
                adjustedRandom = Double.parseDouble(new Formatter().format("%.2f", adjustedRandom).toString());
                // 设置评估结果
                assess.setAssessResult(adjustedRandom);
            }
        } else {
            list = null;
        }
        return list;
    }
    private void assembleModelXml(AssessResult assessResult) {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
@@ -107,7 +192,7 @@
                "  </tasks>\n" +
                "  <models>\n" +
                "    <model name=\"1819282257303678978\">\n" +
                "      <logic name=\"系统\" type=\"series\" distType=\"ber\" NoE=\"10\" F=\"1\">\n" +
                "      <logic name=\"系统1\" type=\"series\" distType=\"ber\" NoE=\"10\" F=\"1\">\n" +
                "        <logic name=\"分系统1\" type=\"series\" distType=\"exp\" ToE=\"68.0\" F=\"1\">\n" +
                "          <logic name=\"v1\" type=\"parallel\" nums=\"2\">\n" +
                "              <node name=\"设备1\" distType=\"ber\" NoE=\"20\" F=\"1\"/>\n" +
@@ -308,7 +393,6 @@
            for (int i = 0; i < sheets; i++) {
                Sheet sheet = workbook.getSheetAt(i);
                int num = sheet.getLastRowNum(); // 一共有多少行
                String sheetName = sheet.getSheetName(); //获取当前sheet名称
                for (int j = 1; j <= num; j++) {
                    CacheUtils.put(progressId, "speed", CommonUtils.getPercent(j, num));
                    CacheUtils.put(progressId, "msg", "共" + num + "行,已完成第" + j + "行");
@@ -316,16 +400,28 @@
                    row1 = j;
                    String pattern = "yyyy-MM-dd";
                    Row row = sheet.getRow(row1);
                   // String sort = ImportUtil.getCellValue(row, 0, pattern); //序号
                    String name = ImportUtil.getCellValue(row, 1, pattern); //节点名称
                    String type = ImportUtil.getCellValue(row, 2, pattern);//节点类型
                    String runNum = ImportUtil.getCellValue(row, 3, pattern); //运行时长
                    String runTime = ImportUtil.getCellValue(row, 4, pattern); //运行次数
                    String failNum = ImportUtil.getCellValue(row, 5, pattern); //失败次数
                    String runNumStr = ImportUtil.getCellValue(row, 3, pattern); //运行时长
                    String runTimeStr = ImportUtil.getCellValue(row, 4, pattern); //运行次数
                    String failNumStr = ImportUtil.getCellValue(row, 5, pattern); //失败次数
                    if (StringUtils.isBlank(name) || StringUtils.isBlank(type))
                        continue;
                    Integer runNum = 0;
                    Double runTime = 0.0;
                    Integer failNum = 0;
                    if (StringUtils.isNotBlank(runNumStr)) {
                        runNum = Integer.valueOf(runNumStr);
                    }
                    if (StringUtils.isNotBlank(runTimeStr)) {
                        runTime = Double.valueOf(runTimeStr);
                    }
                    if (StringUtils.isNotBlank(failNumStr)) {
                        failNum = Integer.valueOf(failNumStr);
                    }
                    Long productId = null;
                    if (type.equals("总体")) {
@@ -364,16 +460,11 @@
                        }
                    }
                    ReliabilityAssess assess = new ReliabilityAssess();
                    assess.setFailNum(Integer.valueOf(failNum));
                    if (StringUtils.isNotBlank(runNum)){
                        assess.setRunNum(Integer.valueOf(runNum));
                    }
                    if (StringUtils.isNotBlank(runTime)){
                        assess.setRunTimes(Double.valueOf(runTime));
                    }
                    assess.setFailNum(failNum);
                    assess.setRunNum(runNum);
                    assess.setRunTimes(runTime);
                    assess.setItemId(itemId);
                    assess.setProductId(productId);
                    this.insert(assess);
@@ -386,7 +477,7 @@
        }
        Date nowDate = new Date();
        String msg = "产品模型导入时间:" + CommonUtils.getDatePoor(nowDate, beginDate) + "\r\n";
        String msg = "导入时间:" + CommonUtils.getDatePoor(nowDate, beginDate) + "\r\n";
        System.out.println(msg);
        suc = sum - err;
        map = new HashMap<>();
@@ -401,4 +492,5 @@
    public List<AssessItem> getAssessDataList(Long productId) {
        return baseDao.getAssessDataList(productId);
    }
}
modules/mainPart/src/main/resources/mapper/basicInfo/StatisticsDao.xml
@@ -10,13 +10,15 @@
            count(distinct c.id) AS operatConNum,
            count(distinct d.id) AS modelNum,
            count(distinct e.id) AS simulatNum,
            count(distinct f.id) AS testData
            count(distinct f.id) AS testData,
            count(distinct g.id) AS assessNum
        FROM product_model a
                 left join task b on  b.product_id = a.id and b.IS_DELETE=0
                 left join operat_condit c on  c.product_id = a.id and c.IS_DELETE=0
                 left join  model_rbd d on  d.ship_id = a.id and d.IS_DELETE=0
                 left join  simulat_assess e on e.product_id = a.id and e.IS_DELETE=0
                 left join  assess_item f on f.product_id = a.id and f.IS_DELETE=0
                 left join  assess_result g on g.product_id = a.id and g.IS_DELETE=0
        where a.product_type = 2 and a.IS_DELETE =0
        group by a.id,a.name
        order by a.name
modules/mainPart/src/main/resources/mapper/taskReliability/ReliabilityAssessDao.xml
@@ -15,4 +15,41 @@
          and a.product_id = ${productId}
        order by CREATE_DATE desc
    </select>
    <select id="getProductList"
            resultType="com.zt.life.modules.mainPart.taskReliability.model.ReliabilityAssess">
        SELECT
            a.NAME,
            a.id,
            a.pid,
            a.product_type as type,
            b.run_num,
            b.fail_num,
            b.run_times
        FROM
            product_model a
                LEFT JOIN assess_data b ON b.product_id = a.id
                AND b.is_delete = 0  AND b.item_id = ${itemId}
        WHERE
                a.is_delete = 0
                AND a.product_type &lt;&gt; 10
                AND a.ship_id = ${productId}
           OR a.id = ${productId}
        ORDER BY
            a.product_type,
            a.sort
    </select>
    <select id="getAssessId" resultType="java.lang.Long">
        SELECT
            id
        FROM
            assess_result
        WHERE
            is_delete = 0
          AND item_id = ${itemId}
          AND product_id = ${productId}
          AND task_id = ${taskId}
        ORDER BY
            UPDATE_DATE DESC
        LIMIT 1
    </select>
</mapper>
web/src/views/modules/home.vue
@@ -1,7 +1,11 @@
<template>
  <div class="fa-card-b">
    <span class="size">系统登录次数:{{dataForm.loginNum}}</span>
    <span class="size">试验方案制定次数:{{dataForm.planMakeNum}}</span>
    <div style="margin: 0 0 10px 0">
      <span class="size">系统登录次数:</span>
      <span class="font">{{dataForm.loginNum}}</span>
      <span class="size">试验方案制定次数:</span>
      <span class="font">{{dataForm.planMakeNum}}</span>
    </div>
    <el-table ref="taskTable" class="DataTable" :data="dataForm.taskReliabList" height="330px" border>
      <el-table-column label="任务可靠性数据" align="center">
        <el-table-column align="center" prop="name" label="名称">
@@ -101,6 +105,11 @@
  .size{
    font-size: 20px;
    margin: 10px;
    color: #000000;
  }
  .font{
    font-size: 20px;
    margin: 10px;
    color: #0aa0bf;
  }
</style>
web/src/views/modules/taskReliability/ReliabilityAssess.vue
@@ -1,14 +1,14 @@
<template>
  <div>
    <div class="mod-baseReliability-paramDataBasic fa-card-a" style="margin-left: 5px;">
      <zt-table-wraper :defaultNotQuery='true' ref="tableObj" query-url="/taskReliability/ReliabilityAssess/page"
      <zt-table-wraper :defaultNotQuery='true' ref="tableObj"
                       v-slot="{ table }" :paging='false'>
        <el-form :inline="true" :model="dataForm" ref="dataForm" :disabled="dataForm.disabled" label-width="80px">
          <zt-form-item label="产品节点" prop="productId">
            <zt-select v-model="dataForm.productId" :datas="productList" @change="onProductSelected"/>
          </zt-form-item>
          <zt-form-item label="总体任务" prop="taskModelId">
            <zt-select v-model="dataForm.taskModelId" :datas="taskList" @change="onTaskSelected"/>
            <zt-select v-model="dataForm.taskId" :datas="taskList" @change="onTaskSelected"/>
          </zt-form-item>
          <zt-form-item label="评定数据" prop="itemId">
            <zt-select v-model="dataForm.itemId" :datas="assessDataList" @change="onAssessDataSelected"/>
@@ -16,13 +16,15 @@
          <zt-form-item label="置信度" prop="confidence">
            <el-input v-model="dataForm.confidence" placeholder="置信度" clearable></el-input>
          </zt-form-item>
          <el-button type="primary" @click="">评定</el-button>
          <el-button type="primary" @click="assess()">评定</el-button>
          <el-button type="primary" @click="add()">新增评定数据</el-button>
          <el-button type="primary" @click="handleExpand()">{{expandText}}</el-button>
        </el-form>
        <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}"
        <el-table ref="multipleTable" v-loading="table.dataLoading" :data="dataList" height="100px" v-adaptive="{bottomOffset:70}"
                  row-key="id"
                  :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
                  :header-cell-style="{'text-align':'center'}"
                  :expand-row-keys="defultKey"
                  border @selection-change="table.selectionChangeHandle">
          <el-table-column prop="name" label="名称"/>
          <el-table-column prop="runNum" label="试验次数(成败型)" align="right">
@@ -48,7 +50,7 @@
        dataForm: {
          productId: '',
          shipName: '',
          taskModelId: '',
          taskId: '',
          itemId: '',
          name: '',
          runTimes: '',
@@ -60,6 +62,12 @@
        productList: [],
        taskList: [],
        assessDataList: [],
        dataList: [],
        flag1: false,
        flag2: false,
        defultKey: [],
        isExpand:false,
        expandText:"一键展开"
      }
    },
    components: {
@@ -69,20 +77,41 @@
      this.getProductList()
    },
    methods: {
      async page() {
        let res = await this.$http.post('/taskReliability/ReliabilityAssess/page', this.dataForm)
        console.log(res.data)
        this.dataList = res.data
      },
      // 获取信息
      onProductSelected(data) {
      async onProductSelected(data) {
        this.defultKey = []
        console.log(data, ' onProductSelected(data)')
        this.dataForm.productId = data.id
        this.dataForm.shipName = data.name
        this.getTaskList()
        this.getAssessDataList();
        this.setDefultKey()
        await this.zhixin().then(() => {
          if (this.dataForm.taskId&& this.dataForm.itemId) {
            this.page()
          }else{
            this.dataList = []
          }
        })
      },
      async zhixin() {
        await this.getTaskList()
        await this.getAssessDataList()
      },
      setDefultKey() {
        this.defultKey.push(this.dataForm.productId + "")
        console.log(this.defultKey,"this.defultKey")
      },
      onTaskSelected(data) {
        console.log(data, ' onProductSelected(data)')
        this.dataForm.taskModelId = data.id
        this.dataForm.taskId = data.id
      },
      onAssessDataSelected(data) {
        this.dataForm.itemId = data.id
        this.page()
      },
      refreshData() {
        this.getAssessDataList();
@@ -98,6 +127,7 @@
        } else {
          this.dataForm.itemId = ''
        }
        this.flag2 = true
      },
      add() {
        this.$refs.AddOrUpdate.$refs.dialog.init(null, {
@@ -105,10 +135,18 @@
          shipName: this.dataForm.shipName
        })
      },
      async assess() {
        if (!this.dataForm.productId || !this.dataForm.taskId || !this.dataForm.itemId || !this.dataForm.confidence) {
          this.$tip.alert("有未填写的数据")
        }
        let res = await this.$http.post('/taskReliability/ReliabilityAssess/assess', this.dataForm)
        console.log(res.data)
        this.dataList = res.data
      },
      async getProductList() {
        let res = await this.$http.get('/basicInfo/XhProductModel/getTaskProductList')
        this.productList = res.data
        this.onProductSelected(this.productList[0])
        await this.onProductSelected(this.productList[0])
      },
      async getTaskList() {
        let params = {
@@ -118,10 +156,32 @@
        console.log(res.data)
        this.taskList = res.data
        if (this.taskList.length > 0) {
          this.dataForm.taskModelId = this.taskList[0].id
          this.dataForm.taskId = this.taskList[0].id
        } else {
          this.dataForm.taskModelId = ''
          this.dataForm.taskId = ''
        }
        this.flag1 = true
      },
      handleExpand() {
        this.isExpand = !this.isExpand
        this.$nextTick(() => {
          this.forArr(this.dataList, this.isExpand)
        })
        if (this.isExpand === true) {
          this.expandText = '一键折叠'
        }
        if (this.isExpand === false) {
          this.expandText = '一键展开'
        }
      },
      // 遍历
      forArr(arr, isExpand) {
        arr.forEach(i => {
          this.$refs.multipleTable.toggleRowExpansion(i, isExpand)
          if (i.children) {
            this.forArr(i.children, isExpand)
          }
        })
      },
    }
  }
web/src/views/modules/taskReliability/RelisbilityAssess-AddOrUpdate.vue
@@ -1,8 +1,8 @@
<template>
  <zt-dialog ref="dialog" @confirm="formSubmit" :hasConfirm="true">
    <el-form :model="dataForm" ref="dataForm" :disabled="dataForm.disabled" label-width="120px">
      <zt-form-item label="总体" prop="shipName">
        <el-input v-model="dataForm.shipName"></el-input>
      <zt-form-item label="总体节点" prop="shipName">
        <el-input v-model="dataForm.shipName" :readonly="true"></el-input>
      </zt-form-item>
      <zt-form-item label="评定数据名称" prop="name" rules="required">
        <el-input v-model="dataForm.name"></el-input>
@@ -22,6 +22,7 @@
          <div style="display:inline-block;font-size: 14px;" class="el-upload__tip">&nbsp;&nbsp;&nbsp;只能上传.xlsx或.xls的文件,且不超过2G</div>
          <el-button slot="trigger" size="small" type="primary" style="font-size: 15px">选取文件</el-button>
          <el-button type="primary" size="small" style="margin-left:20px;font-size: 15px" @click="submitUpload()">提 交</el-button>
          <el-button type="primary" size="small" style="margin-left:20px;font-size: 15px" @click="exportData()">下载数据模板</el-button>
        </el-upload>
      </zt-form-item>
      <el-progress :text-inside="true" :stroke-width="30" :percentage="progress.speed"></el-progress>
@@ -134,8 +135,10 @@
          this.$refs.dialog.close()
          this.$emit('refreshDataList')
        }
      }
      },
      exportData() {
        window.location.href = './评定数据导入模板.xlsx'
      },
    }
  }
</script>
web/src/views/modules/taskReliability/SchemeCompar.vue
@@ -23,10 +23,10 @@
        <div class="fa-card-a" style="position: relative;height: calc(100vh - 230px)">
          <div v-if="isShow">
            <el-button v-if="isZk" type="info" size="small" icon="el-icon-caret-bottom"
                       style="position: absolute;right: 10%;top: 10%;z-index: 1" @click="zk()"></el-button>
                       style="position: absolute;right: 10%;top: 9%;z-index: 1" @click="zk()"></el-button>
            <el-button v-if="!isZk" type="info" size="small" icon="el-icon-caret-right"
                       style="position: absolute;right: 10%;top: 10%;z-index: 1" @click="zk()"></el-button>
            <div v-if="isZk" style="position: absolute;right: 10%;top: 15%">
                       style="position: absolute;right: 10%;top: 9%;z-index: 1" @click="zk()"></el-button>
            <div v-if="isZk" style="position: absolute;right: 10%;top: 13%">
              <el-table :data="tableData" border style="width: 500px">
                <el-table-column
                  prop="name"