WangRuiLin 1 рік тому
батько
коміт
90a58e83b3
23 змінених файлів з 1072 додано та 542 видалено
  1. 21 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TElecCompRecordController.java
  2. 27 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TElectronComponentController.java
  3. 26 14
      cirs-biz/src/main/java/com/cirs/biz/domain/TVerificationTaskDetail.java
  4. 2 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TElectronComponentMapper.java
  5. 2 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITElecCompRecordService.java
  6. 4 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITElectronComponentService.java
  7. 55 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TElecCompRecordServiceImpl.java
  8. 62 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TElectronComponentServiceImpl.java
  9. 6 2
      cirs-biz/src/main/resources/mapper/biz/TElectronComponentMapper.xml
  10. 11 6
      cirs-biz/src/main/resources/mapper/biz/TVerificationTaskDetailMapper.xml
  11. 1 1
      cirs-system/src/main/java/com/cirs/system/service/impl/SysMenuServiceImpl.java
  12. 2 2
      cirs-ui/.env.development
  13. 7 0
      cirs-ui/src/api/biz/component.js
  14. 10 0
      cirs-ui/src/api/biz/evaluation.js
  15. 8 0
      cirs-ui/src/api/biz/record.js
  16. 7 7
      cirs-ui/src/layout/components/Navbar.vue
  17. 382 244
      cirs-ui/src/views/biz/component/index.vue
  18. 1 1
      cirs-ui/src/views/biz/detail/index.vue
  19. 148 73
      cirs-ui/src/views/biz/evaluation/index.vue
  20. 52 50
      cirs-ui/src/views/biz/recommend/index.vue
  21. 134 38
      cirs-ui/src/views/biz/record/index.vue
  22. 80 80
      cirs-ui/src/views/biz/task/index.vue
  23. 24 24
      cirs-ui/src/views/biz/time/index.vue

+ 21 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TElecCompRecordController.java

@@ -2,6 +2,8 @@ package com.cirs.biz.controller;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
+
+import com.cirs.biz.domain.TVerificationTask;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -20,6 +22,7 @@ import com.cirs.biz.domain.TElecCompRecord;
 import com.cirs.biz.service.ITElecCompRecordService;
 import com.cirs.common.utils.poi.ExcelUtil;
 import com.cirs.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 元器件使用经历Controller
@@ -113,4 +116,22 @@ public class TElecCompRecordController extends BaseController
     {
         return toAjax(tElecCompRecordService.deleteTElecCompRecordByIds(ids));
     }
+
+    @PreAuthorize("@ss.hasPermi('biz:task:import')")
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<TElecCompRecord> util = new ExcelUtil<TElecCompRecord>(TElecCompRecord.class);
+        List<TElecCompRecord> recordList = util.importExcel(file.getInputStream());
+        String operName = getUsername();
+        String message = tElecCompRecordService.importRecord(recordList, updateSupport, operName);
+        return success(message);
+    }
+
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<TElecCompRecord> util = new ExcelUtil<TElecCompRecord>(TElecCompRecord.class);
+        util.importTemplateExcel(response, "元器件使用记录数据");
+    }
 }

+ 27 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TElectronComponentController.java

@@ -5,6 +5,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 
 import com.cirs.biz.domain.RecommendInfo;
+import com.cirs.biz.domain.TVerificationTask;
 import com.cirs.biz.mapper.RecommendInfoMapper;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +25,7 @@ import com.cirs.biz.domain.TElectronComponent;
 import com.cirs.biz.service.ITElectronComponentService;
 import com.cirs.common.utils.poi.ExcelUtil;
 import com.cirs.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 元器件Controller
@@ -53,6 +55,13 @@ public class TElectronComponentController extends BaseController
         return getDataTable(list);
     }
 
+    @PreAuthorize("@ss.hasPermi('biz:component:all')")
+    @GetMapping("/all")
+    public List<TElectronComponent> allinfo(TElectronComponent tElectronComponent)
+    {
+        return tElectronComponentService.getAll();
+    }
+
     /**
      * 导出元器件列表
      */
@@ -120,4 +129,22 @@ public class TElectronComponentController extends BaseController
     {
         return toAjax(tElectronComponentService.deleteTElectronComponentByIds(ids));
     }
+
+    @PreAuthorize("@ss.hasPermi('biz:component:import')")
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<TElectronComponent> util = new ExcelUtil<TElectronComponent>(TElectronComponent.class);
+        List<TElectronComponent> componentList = util.importExcel(file.getInputStream());
+        String operName = getUsername();
+        String message = tElectronComponentService.importComponent(componentList, updateSupport, operName);
+        return success(message);
+    }
+
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<TElectronComponent> util = new ExcelUtil<TElectronComponent>(TElectronComponent.class);
+        util.importTemplateExcel(response, "任务数据");
+    }
 }

+ 26 - 14
cirs-biz/src/main/java/com/cirs/biz/domain/TVerificationTaskDetail.java

@@ -22,6 +22,8 @@ public class TVerificationTaskDetail extends BaseEntity
     @Excel(name = "任务id")
     private String taskId;
 
+    @Excel(name = "使用场景")
+    private String useScene;
     /** 查询条件 */
     @Excel(name = "查询条件")
     private String searchCondition;
@@ -59,18 +61,27 @@ public class TVerificationTaskDetail extends BaseEntity
     private String calculate3;
 
     /** 召回率 */
-    @Excel(name = "召回率")
-    private String accuracy;
+//    @Excel(name = "召回率")
+//    private String accuracy;
 
-    public void setId(Long id) 
+    public void setId(Long id)
     {
         this.id = id;
     }
 
-    public Long getId() 
+    public Long getId()
     {
         return id;
     }
+    public void setUseScene(String useScene)
+    {
+        this.useScene = useScene;
+    }
+
+    public String getUseScene()
+    {
+        return useScene;
+    }
     public void setTaskId(String taskId) 
     {
         this.taskId = taskId;
@@ -161,21 +172,22 @@ public class TVerificationTaskDetail extends BaseEntity
     {
         return calculate3;
     }
-    public void setAccuracy(String accuracy) 
-    {
-        this.accuracy = accuracy;
-    }
-
-    public String getAccuracy() 
-    {
-        return accuracy;
-    }
+//    public void setAccuracy(String accuracy)
+//    {
+//        this.accuracy = accuracy;
+//    }
+//
+//    public String getAccuracy()
+//    {
+//        return accuracy;
+//    }
 
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
             .append("id", getId())
             .append("taskId", getTaskId())
+            .append("useScene",getUseScene())
             .append("searchCondition", getSearchCondition())
             .append("result1", getResult1())
             .append("result2", getResult2())
@@ -185,7 +197,7 @@ public class TVerificationTaskDetail extends BaseEntity
             .append("calculate1", getCalculate1())
             .append("calculate2", getCalculate2())
             .append("calculate3", getCalculate3())
-            .append("accuracy", getAccuracy())
+//            .append("accuracy", getAccuracy())
             .append("createBy", getCreateBy())
             .append("createTime", getCreateTime())
             .append("updateBy", getUpdateBy())

+ 2 - 0
cirs-biz/src/main/java/com/cirs/biz/mapper/TElectronComponentMapper.java

@@ -58,4 +58,6 @@ public interface TElectronComponentMapper
      * @return 结果
      */
     public int deleteTElectronComponentByIds(Long[] ids);
+
+    public List<TElectronComponent> getAll();
 }

+ 2 - 0
cirs-biz/src/main/java/com/cirs/biz/service/ITElecCompRecordService.java

@@ -61,4 +61,6 @@ public interface ITElecCompRecordService
     public int deleteTElecCompRecordById(Long id);
 
     public List<UseInfofromRecord> getBycomponentId(Long componentId);
+
+    public String importRecord(List<TElecCompRecord> recordList, boolean updateSupport, String operName);
 }

+ 4 - 0
cirs-biz/src/main/java/com/cirs/biz/service/ITElectronComponentService.java

@@ -58,4 +58,8 @@ public interface ITElectronComponentService
      * @return 结果
      */
     public int deleteTElectronComponentById(Long id);
+
+    public List<TElectronComponent> getAll();
+
+    public String importComponent(List<TElectronComponent> componentList, boolean updateSupport, String operName);
 }

+ 55 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TElecCompRecordServiceImpl.java

@@ -2,14 +2,22 @@ package com.cirs.biz.service.impl;
 
 import java.util.List;
 
+import com.cirs.biz.domain.TElectronComponent;
 import com.cirs.biz.domain.UseInfofromRecord;
+import com.cirs.common.exception.ServiceException;
 import com.cirs.common.utils.DateUtils;
+import com.cirs.common.utils.StringUtils;
+import com.cirs.common.utils.bean.BeanValidators;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.cirs.biz.mapper.TElecCompRecordMapper;
 import com.cirs.biz.domain.TElecCompRecord;
 import com.cirs.biz.service.ITElecCompRecordService;
 
+import javax.validation.Validator;
+
 /**
  * 元器件使用经历Service业务层处理
  * 
@@ -22,6 +30,10 @@ public class TElecCompRecordServiceImpl implements ITElecCompRecordService
     @Autowired
     private TElecCompRecordMapper tElecCompRecordMapper;
 
+    private static final Logger log = LoggerFactory.getLogger(TElecCompRecordServiceImpl.class);
+
+    @Autowired
+    protected Validator validator;
     /**
      * 查询元器件使用经历
      * 
@@ -103,4 +115,47 @@ public class TElecCompRecordServiceImpl implements ITElecCompRecordService
     public List<UseInfofromRecord> getBycomponentId(Long componentId) {
         return tElecCompRecordMapper.getBycomponentId(componentId);
     }
+
+    @Override
+    public String importRecord(List<TElecCompRecord> recordList, boolean updateSupport, String operName) {
+        if (StringUtils.isNull(recordList) || recordList.size() == 0)
+        {
+            throw new ServiceException("导入元器件数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+
+        for (TElecCompRecord record : recordList)
+        {
+            try
+            {
+
+                BeanValidators.validateWithException(validator, record);
+                record.setCreateBy(operName);
+                tElecCompRecordMapper.insertTElecCompRecord(record);
+                successNum++;
+                successMsg.append("<br/>" + successNum + "、元器件记录 " + record.getId() + " 导入成功");
+
+            }
+            catch (Exception e)
+            {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、元器件记录 " + record.getId() + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0)
+        {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        }
+        else
+        {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
 }

+ 62 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TElectronComponentServiceImpl.java

@@ -1,13 +1,23 @@
 package com.cirs.biz.service.impl;
 
 import java.util.List;
+
+import com.cirs.biz.domain.TVerificationTask;
+import com.cirs.biz.mapper.TVerificationTaskMapper;
+import com.cirs.common.exception.ServiceException;
 import com.cirs.common.utils.DateUtils;
+import com.cirs.common.utils.StringUtils;
+import com.cirs.common.utils.bean.BeanValidators;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.cirs.biz.mapper.TElectronComponentMapper;
 import com.cirs.biz.domain.TElectronComponent;
 import com.cirs.biz.service.ITElectronComponentService;
 
+import javax.validation.Validator;
+
 /**
  * 元器件Service业务层处理
  * 
@@ -20,6 +30,10 @@ public class TElectronComponentServiceImpl implements ITElectronComponentService
     @Autowired
     private TElectronComponentMapper tElectronComponentMapper;
 
+    private static final Logger log = LoggerFactory.getLogger(TElectronComponentServiceImpl.class);
+
+    @Autowired
+    protected Validator validator;
     /**
      * 查询元器件
      * 
@@ -93,4 +107,52 @@ public class TElectronComponentServiceImpl implements ITElectronComponentService
     {
         return tElectronComponentMapper.deleteTElectronComponentById(id);
     }
+
+    @Override
+    public List<TElectronComponent> getAll() {
+        return tElectronComponentMapper.getAll();
+    }
+
+    @Override
+    public String importComponent(List<TElectronComponent> componentList, boolean updateSupport, String operName) {
+        if (StringUtils.isNull(componentList) || componentList.size() == 0)
+        {
+            throw new ServiceException("导入元器件数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+
+        for (TElectronComponent component : componentList)
+        {
+            try
+            {
+
+                BeanValidators.validateWithException(validator, component);
+                component.setCreateBy(operName);
+                tElectronComponentMapper.insertTElectronComponent(component);
+                successNum++;
+                successMsg.append("<br/>" + successNum + "、元器件 " + component.getComponentName() + " 导入成功");
+
+            }
+            catch (Exception e)
+            {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、元器件 " + component.getComponentName() + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0)
+        {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        }
+        else
+        {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
 }

+ 6 - 2
cirs-biz/src/main/resources/mapper/biz/TElectronComponentMapper.xml

@@ -48,7 +48,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectTElectronComponentList" parameterType="TElectronComponent" resultMap="TElectronComponentResult">
         <include refid="selectTElectronComponentVo"/>
-        <where>  
+        <where>
+            <if test="id != null "> and id = #{id}</if>
             <if test="componentName != null  and componentName != ''"> and component_name like concat('%', #{componentName}, '%')</if>
             <if test="manufacturer != null  and manufacturer != ''"> and manufacturer = #{manufacturer}</if>
             <if test="componentModel != null  and componentModel != ''"> and component_model = #{componentModel}</if>
@@ -85,7 +86,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectTElectronComponentVo"/>
         where id = #{id}
     </select>
-        
+    <select id="getAll" resultType="com.cirs.biz.domain.TElectronComponent" resultMap="TElectronComponentResult">
+        <include refid="selectTElectronComponentVo"/>
+    </select>
+
     <insert id="insertTElectronComponent" parameterType="TElectronComponent" useGeneratedKeys="true" keyProperty="id">
         insert into t_electron_component
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 11 - 6
cirs-biz/src/main/resources/mapper/biz/TVerificationTaskDetailMapper.xml

@@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <resultMap type="TVerificationTaskDetail" id="TVerificationTaskDetailResult">
         <result property="id"    column="id"    />
         <result property="taskId"    column="task_id"    />
+        <result property="useScene" column="use_scene"/>
         <result property="searchCondition"    column="search_condition"    />
         <result property="result1"    column="result1"    />
         <result property="result2"    column="result2"    />
@@ -16,7 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="calculate1"    column="calculate1"    />
         <result property="calculate2"    column="calculate2"    />
         <result property="calculate3"    column="calculate3"    />
-        <result property="accuracy"    column="accuracy"    />
+<!--        <result property="accuracy"    column="accuracy"    />-->
         <result property="createBy"    column="create_by"    />
         <result property="createTime"    column="create_time"    />
         <result property="updateBy"    column="update_by"    />
@@ -25,13 +26,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectTVerificationTaskDetailVo">
-        select id, task_id, search_condition, result1, result2, result3, result4, result5, calculate1, calculate2, calculate3, accuracy, create_by, create_time, update_by, update_time, remark from t_verification_task_detail
+        select id, task_id, use_scene,search_condition, result1, result2, result3, result4, result5, calculate1, calculate2, calculate3, create_by, create_time, update_by, update_time, remark from t_verification_task_detail
     </sql>
 
     <select id="selectTVerificationTaskDetailList" parameterType="TVerificationTaskDetail" resultMap="TVerificationTaskDetailResult">
         <include refid="selectTVerificationTaskDetailVo"/>
         <where>  
             <if test="taskId != null  and taskId != ''"> and task_id = #{taskId}</if>
+             <if test="useScene != null and useScene != ''"> and use_scene = #{useScene}</if>
             <if test="searchCondition != null  and searchCondition != ''"> and search_condition = #{searchCondition}</if>
             <if test="result1 != null  and result1 != ''"> and result1 = #{result1}</if>
             <if test="result2 != null  and result2 != ''"> and result2 = #{result2}</if>
@@ -41,7 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="calculate1 != null  and calculate1 != ''"> and calculate1 = #{calculate1}</if>
             <if test="calculate2 != null  and calculate2 != ''"> and calculate2 = #{calculate2}</if>
             <if test="calculate3 != null  and calculate3 != ''"> and calculate3 = #{calculate3}</if>
-            <if test="accuracy != null  and accuracy != ''"> and accuracy = #{accuracy}</if>
+<!--            <if test="accuracy != null  and accuracy != ''"> and accuracy = #{accuracy}</if>-->
         </where>
     </select>
     
@@ -54,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         insert into t_verification_task_detail
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="taskId != null">task_id,</if>
+            <if test="useScene != null">use_scene</if>
             <if test="searchCondition != null">search_condition,</if>
             <if test="result1 != null">result1,</if>
             <if test="result2 != null">result2,</if>
@@ -63,7 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="calculate1 != null">calculate1,</if>
             <if test="calculate2 != null">calculate2,</if>
             <if test="calculate3 != null">calculate3,</if>
-            <if test="accuracy != null">accuracy,</if>
+--             <if test="accuracy != null">accuracy,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
@@ -72,6 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="taskId != null">#{taskId},</if>
+            <if test="useScene != null">#{useScene}</if>
             <if test="searchCondition != null">#{searchCondition},</if>
             <if test="result1 != null">#{result1},</if>
             <if test="result2 != null">#{result2},</if>
@@ -81,7 +85,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="calculate1 != null">#{calculate1},</if>
             <if test="calculate2 != null">#{calculate2},</if>
             <if test="calculate3 != null">#{calculate3},</if>
-            <if test="accuracy != null">#{accuracy},</if>
+--             <if test="accuracy != null">#{accuracy},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
@@ -94,6 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         update t_verification_task_detail
         <trim prefix="SET" suffixOverrides=",">
             <if test="taskId != null">task_id = #{taskId},</if>
+            <if test="useScene != null">use_scene = #{useScene}</if>
             <if test="searchCondition != null">search_condition = #{searchCondition},</if>
             <if test="result1 != null">result1 = #{result1},</if>
             <if test="result2 != null">result2 = #{result2},</if>
@@ -103,7 +108,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="calculate1 != null">calculate1 = #{calculate1},</if>
             <if test="calculate2 != null">calculate2 = #{calculate2},</if>
             <if test="calculate3 != null">calculate3 = #{calculate3},</if>
-            <if test="accuracy != null">accuracy = #{accuracy},</if>
+--             <if test="accuracy != null">accuracy = #{accuracy},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>

+ 1 - 1
cirs-system/src/main/java/com/cirs/system/service/impl/SysMenuServiceImpl.java

@@ -463,7 +463,7 @@ public class SysMenuServiceImpl implements ISysMenuService
         {
             SysMenu t = (SysMenu) iterator.next();
             // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
-            if (t.getParentId() == parentId)
+            if (t.getParentId()!=null&&t.getParentId() == parentId)
             {
                 recursionFn(list, t);
                 returnList.add(t);

+ 2 - 2
cirs-ui/.env.development

@@ -4,8 +4,8 @@ VUE_APP_TITLE = 元器件智能推荐系统
 # 开发环境配置
 ENV = 'development'
 
-# 元器件智能推荐系统/开发环境
-VUE_APP_BASE_API = 'http://localhost:8080'
+# 元器件智能推荐系统/开发环境 http://localhost:8080
+VUE_APP_BASE_API = '/dev-api'
 
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 7 - 0
cirs-ui/src/api/biz/component.js

@@ -41,3 +41,10 @@ export function delComponent(id) {
     method: 'delete'
   })
 }
+//实现下拉框选择
+export function getall() {
+  return request({
+    url: '/biz/component/all',
+    method: 'get'
+  })
+}

+ 10 - 0
cirs-ui/src/api/biz/evaluation.js

@@ -42,3 +42,13 @@ export function delEvaluation(id) {
     method: 'delete'
   })
 }
+//实现下拉框选择
+export function getall() {
+  return request({
+    url: '/biz/component/all',
+    method: 'get'
+  })
+}
+
+
+

+ 8 - 0
cirs-ui/src/api/biz/record.js

@@ -42,3 +42,11 @@ export function delRecord(id) {
     method: 'delete'
   })
 }
+
+//实现下拉框选择
+export function getall() {
+  return request({
+    url: '/biz/component/all',
+    method: 'get'
+  })
+}

+ 7 - 7
cirs-ui/src/layout/components/Navbar.vue

@@ -8,14 +8,14 @@
     <div class="right-menu">
       <template v-if="device!=='mobile'">
         <search id="header-search" class="right-menu-item" />
-        
-        <el-tooltip content="源码地址" effect="dark" placement="bottom">
-          <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
-        </el-tooltip>
 
-        <el-tooltip content="文档地址" effect="dark" placement="bottom">
-          <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
-        </el-tooltip>
+<!--        <el-tooltip content="源码地址" effect="dark" placement="bottom">-->
+<!--          <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />-->
+<!--        </el-tooltip>-->
+
+<!--        <el-tooltip content="文档地址" effect="dark" placement="bottom">-->
+<!--          <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />-->
+<!--        </el-tooltip>-->
 
         <screenfull id="screenfull" class="right-menu-item hover-effect" />
 

+ 382 - 244
cirs-ui/src/views/biz/component/index.vue

@@ -1,228 +1,268 @@
 <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="componentName">
-        <el-input
-          v-model="queryParams.componentName"
-          placeholder="请输入元器件名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="元器件编号" prop="componentId" >
+
+        <el-select v-model="queryParams.id" filterable placeholder="请输入元器件编号">
+          <el-option
+            v-for="item in componentInfo"
+            :value="item.id">
+          </el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="生产厂家" prop="manufacturer">
-        <el-input
-          v-model="queryParams.manufacturer"
-          placeholder="请输入生产厂家"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+      <el-form-item label="元器件名称" prop="componentName" >
+<!--        <el-input-->
+<!--          v-model="queryParams.componentName"-->
+<!--          placeholder="请输入元器件名称"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+        <el-select v-model="queryParams.componentName" filterable placeholder="请输入元器件名称">
+          <el-option
+            v-for="item in componentInfo"
+            :value="item.componentName">
+          </el-option>
+        </el-select>
       </el-form-item>
+<!--      <el-form-item label="生产厂家" prop="manufacturer">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.manufacturer"-->
+<!--          placeholder="请输入生产厂家"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="型号规格" prop="componentModel">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.componentModel"-->
+<!--          placeholder="请输入型号规格"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="型号规格" prop="componentModel">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.componentModel"-->
+<!--          placeholder="请输入型号规格"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
       <el-form-item label="型号规格" prop="componentModel">
-        <el-input
-          v-model="queryParams.componentModel"
-          placeholder="请输入型号规格"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="国产替代型号" prop="replaceDomesticModel">
-        <el-input
-          v-model="queryParams.replaceDomesticModel"
-          placeholder="请输入国产替代型号"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-select v-model="queryParams.componentModel" filterable placeholder="请输入型号规格">
+          <el-option
+            v-for="item in componentInfo"
+            :value="item.componentModel">
+          </el-option>
+        </el-select>
       </el-form-item>
+<!--      <el-form-item label="国产替代型号" prop="replaceDomesticModel">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.replaceDomesticModel"-->
+<!--          placeholder="请输入国产替代型号"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="质量等级" prop="qualityGrade">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.qualityGrade"-->
+<!--          placeholder="请输入质量等级"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
       <el-form-item label="质量等级" prop="qualityGrade">
-        <el-input
-          v-model="queryParams.qualityGrade"
-          placeholder="请输入质量等级"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="供货周期" prop="deliveryCycle">
-        <el-input
-          v-model="queryParams.deliveryCycle"
-          placeholder="请输入供货周期"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="供货量(个/年)" prop="supplyQuantity">
-        <el-input
-          v-model="queryParams.supplyQuantity"
-          placeholder="请输入供货量(个/年)"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="价格" prop="unitPrice">
-        <el-input
-          v-model="queryParams.unitPrice"
-          placeholder="请输入价格"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="ZZKK等级" prop="zzkkLevel">
-        <el-input
-          v-model="queryParams.zzkkLevel"
-          placeholder="请输入ZZKK等级"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="是否在优选目录内" prop="inPreference">
-        <el-input
-          v-model="queryParams.inPreference"
-          placeholder="请输入是否在优选目录内"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="停产断档日期" prop="shutdownDate">
-        <el-date-picker clearable
-          v-model="queryParams.shutdownDate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="请选择停产断档日期">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="封装形式" prop="encapsulationMode">
-        <el-input
-          v-model="queryParams.encapsulationMode"
-          placeholder="请输入封装形式"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="最大正向电流IFM" prop="paramIfm">
-        <el-input
-          v-model="queryParams.paramIfm"
-          placeholder="请输入最大正向电流IFM"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="最大反向工作电压VRRM" prop="paramVrrm">
-        <el-input
-          v-model="queryParams.paramVrrm"
-          placeholder="请输入最大反向工作电压VRRM"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="最大浪涌电流IFSM" prop="paramIfsm">
-        <el-input
-          v-model="queryParams.paramIfsm"
-          placeholder="请输入最大浪涌电流IFSM"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="稳压状态下的动态电阻ZZ" prop="paramZz">
-        <el-input
-          v-model="queryParams.paramZz"
-          placeholder="请输入稳压状态下的动态电阻ZZ"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="最大额定功率PCM" prop="paramPcm">
-        <el-input
-          v-model="queryParams.paramPcm"
-          placeholder="请输入最大额定功率PCM"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+      <el-select v-model="queryParams.qualityGrade" filterable placeholder="请选择质量等级">
+        <el-option
+          v-for="item in qualityoptions"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
       </el-form-item>
-      <el-form-item label="最大集电极电流ICM" prop="paramIcm">
-        <el-input
-          v-model="queryParams.paramIcm"
-          placeholder="请输入最大集电极电流ICM"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="最大集电极-基极电压VCBO" prop="paramVcbo">
-        <el-input
-          v-model="queryParams.paramVcbo"
-          placeholder="请输入最大集电极-基极电压VCBO"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="集电极-发射极电压VCEO" prop="paramVceo">
-        <el-input
-          v-model="queryParams.paramVceo"
-          placeholder="请输入集电极-发射极电压VCEO"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="发射极-基极电压VEBO" prop="paramVebo">
-        <el-input
-          v-model="queryParams.paramVebo"
-          placeholder="请输入发射极-基极电压VEBO"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="漏源电压VDSS" prop="paramVdss">
-        <el-input
-          v-model="queryParams.paramVdss"
-          placeholder="请输入漏源电压VDSS"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="漏极直流电流ID" prop="paramId">
-        <el-input
-          v-model="queryParams.paramId"
-          placeholder="请输入漏极直流电流ID"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="漏-源通态电阻RDS(on)" prop="paramRdsOn">
-        <el-input
-          v-model="queryParams.paramRdsOn"
-          placeholder="请输入漏-源通态电阻RDS(on)"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="抗静电能力" prop="antistaticCapacity">
-        <el-input
-          v-model="queryParams.antistaticCapacity"
-          placeholder="请输入抗静电能力"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="抗辐照能力" prop="radiationResistance">
-        <el-input
-          v-model="queryParams.radiationResistance"
-          placeholder="请输入抗辐照能力"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="重量" prop="weight">
-        <el-input
-          v-model="queryParams.weight"
-          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-form-item label="供货周期" prop="deliveryCycle">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.deliveryCycle"-->
+<!--          placeholder="请输入供货周期"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="供货量(个/年)" prop="supplyQuantity">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.supplyQuantity"-->
+<!--          placeholder="请输入供货量(个/年)"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="价格" prop="unitPrice">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.unitPrice"-->
+<!--          placeholder="请输入价格"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="ZZKK等级" prop="zzkkLevel">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.zzkkLevel"-->
+<!--          placeholder="请输入ZZKK等级"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="是否在优选目录内" prop="inPreference">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.inPreference"-->
+<!--          placeholder="请输入是否在优选目录内"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="停产断档日期" prop="shutdownDate">-->
+<!--        <el-date-picker clearable-->
+<!--          v-model="queryParams.shutdownDate"-->
+<!--          type="date"-->
+<!--          value-format="yyyy-MM-dd"-->
+<!--          placeholder="请选择停产断档日期">-->
+<!--        </el-date-picker>-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="封装形式" prop="encapsulationMode">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.encapsulationMode"-->
+<!--          placeholder="请输入封装形式"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="最大正向电流IFM" prop="paramIfm">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramIfm"-->
+<!--          placeholder="请输入最大正向电流IFM"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="最大反向工作电压VRRM" prop="paramVrrm">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramVrrm"-->
+<!--          placeholder="请输入最大反向工作电压VRRM"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="最大浪涌电流IFSM" prop="paramIfsm">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramIfsm"-->
+<!--          placeholder="请输入最大浪涌电流IFSM"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="稳压状态下的动态电阻ZZ" prop="paramZz">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramZz"-->
+<!--          placeholder="请输入稳压状态下的动态电阻ZZ"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="最大额定功率PCM" prop="paramPcm">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramPcm"-->
+<!--          placeholder="请输入最大额定功率PCM"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="最大集电极电流ICM" prop="paramIcm">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramIcm"-->
+<!--          placeholder="请输入最大集电极电流ICM"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="最大集电极-基极电压VCBO" prop="paramVcbo">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramVcbo"-->
+<!--          placeholder="请输入最大集电极-基极电压VCBO"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="集电极-发射极电压VCEO" prop="paramVceo">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramVceo"-->
+<!--          placeholder="请输入集电极-发射极电压VCEO"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="发射极-基极电压VEBO" prop="paramVebo">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramVebo"-->
+<!--          placeholder="请输入发射极-基极电压VEBO"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="漏源电压VDSS" prop="paramVdss">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramVdss"-->
+<!--          placeholder="请输入漏源电压VDSS"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="漏极直流电流ID" prop="paramId">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramId"-->
+<!--          placeholder="请输入漏极直流电流ID"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="漏-源通态电阻RDS(on)" prop="paramRdsOn">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.paramRdsOn"-->
+<!--          placeholder="请输入漏-源通态电阻RDS(on)"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="抗静电能力" prop="antistaticCapacity">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.antistaticCapacity"-->
+<!--          placeholder="请输入抗静电能力"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="抗辐照能力" prop="radiationResistance">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.radiationResistance"-->
+<!--          placeholder="请输入抗辐照能力"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="重量" prop="weight">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.weight"-->
+<!--          placeholder="请输入重量"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
 
+    </el-form>
+    <div style="padding-left: 1000px">
+      <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery" style="margin-right: 20px">搜索</el-button>
+      <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+    </div>
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
@@ -234,28 +274,28 @@
           v-hasPermi="['biz:component: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="['biz:component: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="['biz:component:remove']"
-        >删除</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="['biz:component: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="['biz:component:remove']"-->
+<!--        >删除</el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -325,7 +365,7 @@
         </template>
       </el-table-column>
     </el-table>
-    
+
     <pagination
       v-show="total>0"
       :total="total"
@@ -334,8 +374,38 @@
       @pagination="getList"
     />
 
+    <!-- 元器件详情导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px">
+      <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" slot="tip">
+          <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的数据
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</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>
     <!-- 添加或修改元器件对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="元器件名称" prop="componentName">
           <el-input v-model="form.componentName" placeholder="请输入元器件名称" />
@@ -442,12 +512,32 @@
 </template>
 
 <script>
-import { listComponent, getComponent, delComponent, addComponent, updateComponent } from "@/api/biz/component";
-
+import { listComponent, getComponent, delComponent, addComponent, updateComponent,getall } from "@/api/biz/component";
+import { getToken } from "@/utils/auth";
 export default {
   name: "Component",
   data() {
     return {
+      componentInfo: null,
+
+      // 选择质量等级
+      qualityoptions:[{
+        value: '等级1',
+        label: '等级1'
+      }, {
+        value: '等级2',
+        label: '等级2'
+      }, {
+        value: '等级3',
+        label: '等级3'
+      }, {
+        value: '等级4',
+        label: '等级4'
+      }, {
+        value: '等级5',
+        label: '等级5'
+      }]
+      ,
       // 遮罩层
       loading: true,
       // 选中数组
@@ -504,16 +594,38 @@ export default {
       form: {},
       // 表单校验
       rules: {
-      }
+      },
+      // 导入参数
+      upload: {
+        // 是否显示弹出层(导入)
+        open: false,
+        // 弹出层标题(导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/biz/component/importData"
+      },
     };
   },
-  created() {
+  async created() {
+    try {
+      this.componentInfo = await getall();
+      console.log(this.componentInfo);
+    } catch (error) {
+      console.error("Error fetching component info:", error);
+    }
     this.getList();
   },
   methods: {
     /** 查询元器件列表 */
     getList() {
       this.loading = true;
+
       listComponent(this.queryParams).then(response => {
         this.componentList = response.rows;
         this.total = response.total;
@@ -633,6 +745,32 @@ export default {
       this.download('biz/component/export', {
         ...this.queryParams
       }, `component_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "元器件批量导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('biz/component/importTemplate', {
+      }, `component_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+// 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
     }
   }
 };

+ 1 - 1
cirs-ui/src/views/biz/detail/index.vue

@@ -317,7 +317,7 @@ export default {
         title: "",
         // 是否禁用上传
         isUploading: false,
-        // 是否更新已经存在的用户数据
+        // 是否更新已经存在的数据
         updateSupport: 0,
         // 设置上传的请求头部
         headers: { Authorization: "Bearer " + getToken() },

+ 148 - 73
cirs-ui/src/views/biz/evaluation/index.vue

@@ -1,13 +1,19 @@
 <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="componentId">
-        <el-input
-          v-model="queryParams.componentId"
-          placeholder="请输入元器件名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+      <el-form-item label="元器件编号" prop="componentId" label-width="200px">
+<!--        <el-input-->
+<!--          v-model="queryParams.componentId"-->
+<!--          placeholder="请输入元器件编号"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+        <el-select v-model="queryParams.componentId" filterable placeholder="请输入元器件编号">
+          <el-option
+            v-for="item in componentInfo"
+            :value="item.id">
+          </el-option>
+        </el-select>
       </el-form-item>
       <el-form-item label="评分" prop="mark">
         <el-input
@@ -32,38 +38,38 @@
     </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="['biz:evaluation: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="['biz:evaluation: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="['biz:evaluation:remove']"
-        >删除</el-button>
-      </el-col>
+<!--      <el-col :span="1.5">-->
+<!--        <el-button-->
+<!--          type="primary"-->
+<!--          plain-->
+<!--          icon="el-icon-plus"-->
+<!--          size="mini"-->
+<!--          @click="handleAdd"-->
+<!--          v-hasPermi="['biz:evaluation: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="['biz:evaluation: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="['biz:evaluation:remove']"-->
+<!--        >删除</el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -82,8 +88,24 @@
       <el-table-column label="编号" align="center" prop="id" />
       <el-table-column label="查询条件" align="center" prop="searchCondition" />
       <el-table-column label="元器件编号" align="center" prop="componentId" />
+      <el-table-column label="元器件名称" align="center" >
+        <template slot-scope="scope">
+          <span>{{ getComponentName(scope.row.componentId) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="元器件型号规格" align="center" >
+        <template slot-scope="scope">
+          <span>{{ getComponentModel(scope.row.componentId) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="元器件质量等级" align="center" >
+        <template slot-scope="scope">
+          <span>{{getComponentQuality(scope.row.componentId)}}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="评分" align="center" prop="mark" />
       <el-table-column label="使用场景" align="center" prop="usedBy" />
+
       <el-table-column label="备注" align="center" prop="remark" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
@@ -114,34 +136,39 @@
     />
 
     <!-- 添加或修改评价对话框 -->
-    <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="searchCondition">
-          <el-input v-model="form.searchCondition" type="textarea" placeholder="请输入内容" />
-        </el-form-item>
-        <el-form-item label="元器件名称" prop="componentId">
-          <el-input v-model="form.componentId" placeholder="请输入元器件名称" />
-        </el-form-item>
-        <el-form-item label="评分" prop="mark">
-          <el-input v-model="form.mark" placeholder="请输入评分" />
-        </el-form-item>
-        <el-form-item label="使用场景" prop="usedBy">
-          <el-input v-model="form.usedBy" placeholder="请输入使用场景" />
-        </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" type="textarea" 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="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="searchCondition">-->
+<!--          <el-input v-model="form.searchCondition" type="textarea" placeholder="请输入内容" />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="元器件编号" prop="componentId">-->
+<!--          <el-select v-model="form.componentId" filterable placeholder="请输入元器件编号">-->
+<!--          <el-option-->
+<!--            v-for="item in componentInfo"-->
+<!--            :value="item.id">-->
+<!--          </el-option>-->
+<!--          </el-select>-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="评分" prop="mark">-->
+<!--          <el-input v-model="form.mark" placeholder="请输入评分" />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="使用场景" prop="usedBy">-->
+<!--          <el-input v-model="form.usedBy" placeholder="请输入使用场景" />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="备注" prop="remark">-->
+<!--          <el-input v-model="form.remark" type="textarea" 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 { listEvaluation, getEvaluation, delEvaluation, addEvaluation, updateEvaluation } from "@/api/biz/evaluation";
+import { listEvaluation, getEvaluation, delEvaluation, addEvaluation, updateEvaluation,getall } from "@/api/biz/evaluation";
 
 export default {
   name: "Evaluation",
@@ -179,12 +206,20 @@ export default {
       // 表单校验
       rules: {
       },
-
-
-
+      componentInfo:[],
+      evaluationMap : new Map(),
+      dataLoaded:false,
     };
   },
-  created() {
+  async created() {
+    try {
+      this.componentInfo = await getall();
+      // console.log(this.componentInfo);
+
+
+    } catch (error) {
+      console.error("Error fetching component info:", error);
+    }
     this.getList();
   },
   methods: {
@@ -194,9 +229,48 @@ export default {
       listEvaluation(this.queryParams).then(response => {
         this.evaluationList = response.rows;
         this.total = response.total;
+        for(let one of this.componentInfo){
+          // this.$set(this.evaluationMap,'key',one.id)
+          // this.$set(this.evaluationMap, 'value',[one.componentName,one.componentModel,one.qualityGrade] )
+          this.evaluationMap.set(one.id.toString(), [one.componentName,one.componentModel,one.qualityGrade])
+
+        }
+        // console.log(this.evaluationMap)
+        this.dataLoaded = true;
         this.loading = false;
       });
     },
+    getComponentName(componentId) {
+
+      let strid = componentId.toString()
+
+      if (this.evaluationMap.has(strid)) {
+
+        return this.evaluationMap.get(strid)[0];
+      } else {
+        return "Data not available";
+      }
+    },
+    getComponentModel(componentId) {
+
+      let strid = componentId.toString()
+
+      if (this.evaluationMap.has(strid)) {
+        return this.evaluationMap.get(strid)[1];
+      } else {
+        return "Data not available";
+      }
+    },
+    getComponentQuality(componentId) {
+
+      let strid = componentId.toString()
+
+      if (this.evaluationMap.has(strid)) {
+        return this.evaluationMap.get(strid)[2];
+      } else {
+        return "Data not available";
+      }
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -235,11 +309,11 @@ export default {
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加评价";
-    },
+    // handleAdd() {
+    //   this.reset();
+    //   this.open = true;
+    //   this.title = "添加评价";
+    // },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
@@ -285,7 +359,8 @@ export default {
       this.download('biz/evaluation/export', {
         ...this.queryParams
       }, `evaluation_${new Date().getTime()}.xlsx`)
-    }
+    },
+
 
 
   }

+ 52 - 50
cirs-ui/src/views/biz/recommend/index.vue

@@ -11,7 +11,7 @@
     </el-select>
     <span>
       <el-input placeholder="请输入查询条件" v-model="searchCondition" style="width:250px"/>
-      <el-button type="primary" @click="evaluation.searchCondition = searchCondition">推荐</el-button>
+      <el-button type="primary" @click="getList">推荐</el-button>
     </span>
     </div>
     <el-table v-loading="loading" :data="componentList" >
@@ -78,99 +78,99 @@
       <el-form  style="border:1px solid #C0C0C0;padding: 5px;margin: auto" ref="form" :model="form" :rules="rules" label-width="200px">
         <h2><b>元器件基本信息</b></h2>
         <el-form-item label="元器件名称" prop="componentName">
-          <el-input v-model="form.componentName" :disabled="true" />
+          <el-input v-model="form.componentName" readonly='true' />
         </el-form-item>
         <el-form-item label="生产厂家" prop="manufacturer">
-          <el-input v-model="form.manufacturer" :disabled="true" />
+          <el-input v-model="form.manufacturer" readonly='true' />
         </el-form-item>
         <el-form-item label="型号规格" prop="componentModel">
-          <el-input v-model="form.componentModel" :disabled="true" />
+          <el-input v-model="form.componentModel" readonly='true' />
         </el-form-item>
         <el-form-item label="国产替代型号" prop="replaceDomesticModel">
-          <el-input v-model="form.replaceDomesticModel" :disabled="true" />
+          <el-input v-model="form.replaceDomesticModel" readonly='true' />
         </el-form-item>
         <el-form-item label="质量等级" prop="qualityGrade">
-          <el-input v-model="form.qualityGrade" :disabled="true" />
+          <el-input v-model="form.qualityGrade" readonly='true' />
         </el-form-item>
         <el-form-item label="供货周期" prop="deliveryCycle">
-          <el-input v-model="form.deliveryCycle" :disabled="true" />
+          <el-input v-model="form.deliveryCycle" readonly='true' />
         </el-form-item>
         <el-form-item label="供货量(个/年)" prop="supplyQuantity">
-          <el-input v-model="form.supplyQuantity" :disabled="true" />
+          <el-input v-model="form.supplyQuantity" readonly='true' />
         </el-form-item>
         <el-form-item label="价格" prop="unitPrice">
-          <el-input v-model="form.unitPrice" :disabled="true" />
+          <el-input v-model="form.unitPrice" readonly='true' />
         </el-form-item>
         <el-form-item label="ZZKK等级" prop="zzkkLevel">
-          <el-input v-model="form.zzkkLevel" :disabled="true" />
+          <el-input v-model="form.zzkkLevel" readonly='true' />
         </el-form-item>
         <el-form-item label="是否在优选目录内" prop="inPreference">
-          <el-input v-model="form.inPreference" :disabled="true" />
+          <el-input v-model="form.inPreference" readonly='true' />
         </el-form-item>
         <el-form-item label="停产断档日期" prop="shutdownDate">
           <el-date-picker clearable
                           v-model="form.shutdownDate"
                           type="date"
                           value-format="yyyy-MM-dd"
-                          :disabled="true">
+                          readonly='true'>
           </el-date-picker>
         </el-form-item>
         <el-form-item label="封装形式" prop="encapsulationMode">
-          <el-input v-model="form.encapsulationMode" :disabled="true" />
+          <el-input v-model="form.encapsulationMode" readonly='true' />
         </el-form-item>
-        <el-form-item label="最大正向电流IFM" prop="paramIfm">
-          <el-input v-model="form.paramIfm" :disabled="true" />
+        <el-form-item label="最大正向电流IFM" prop="paramIfm" v-if="form.paramIfm!==null && form.paramIfm!==''">
+          <el-input v-model="form.paramIfm" readonly='true' />
         </el-form-item>
-        <el-form-item label="最大反向工作电压VRRM" prop="paramVrrm">
-          <el-input v-model="form.paramVrrm" :disabled="true" />
+        <el-form-item label="最大反向工作电压VRRM" prop="paramVrrm" v-if="form.paramVrrm!==null && form.paramVrrm!==''">
+          <el-input v-model="form.paramVrrm" readonly='true' />
         </el-form-item>
-        <el-form-item label="最大浪涌电流IFSM" prop="paramIfsm">
-          <el-input v-model="form.paramIfsm" :disabled="true" />
+        <el-form-item label="最大浪涌电流IFSM" prop="paramIfsm" v-if="form.paramIfsm!==null && form.paramIfsm!==''">
+          <el-input v-model="form.paramIfsm" readonly='true' />
         </el-form-item>
-        <el-form-item label="稳压状态下的动态电阻ZZ" prop="paramZz">
-          <el-input v-model="form.paramZz" :disabled="true" />
+        <el-form-item label="稳压状态下的动态电阻ZZ" prop="paramZz" v-if="form.paramZz!==null && form.paramZz!==''">
+          <el-input v-model="form.paramZz" readonly='true' />
         </el-form-item>
-        <el-form-item label="最大额定功率PCM" prop="paramPcm">
-          <el-input v-model="form.paramPcm" :disabled="true" />
+        <el-form-item label="最大额定功率PCM" prop="paramPcm" v-if="form.paramPcm!==null && form.paramPcm!==''">
+          <el-input v-model="form.paramPcm" readonly='true' />
         </el-form-item>
-        <el-form-item label="最大集电极电流ICM" prop="paramIcm">
-          <el-input v-model="form.paramIcm" :disabled="true" />
+        <el-form-item label="最大集电极电流ICM" prop="paramIcm" v-if="form.paramIcm!==null && form.paramIcm!==''">
+          <el-input v-model="form.paramIcm" readonly='true' />
         </el-form-item>
-        <el-form-item label="最大集电极-基极电压VCBO" prop="paramVcbo">
-          <el-input v-model="form.paramVcbo" :disabled="true" />
+        <el-form-item label="最大集电极-基极电压VCBO" prop="paramVcbo" v-if="form.paramVcbo!==null && form.paramVcbo!==''">
+          <el-input v-model="form.paramVcbo" readonly='true' />
         </el-form-item>
-        <el-form-item label="集电极-发射极电压VCEO" prop="paramVceo">
-          <el-input v-model="form.paramVceo" :disabled="true" />
+        <el-form-item label="集电极-发射极电压VCEO" prop="paramVceo" v-if="form.paramVceo!==null && form.paramVceo!==''">
+          <el-input v-model="form.paramVceo" readonly='true' />
         </el-form-item>
-        <el-form-item label="发射极-基极电压VEBO" prop="paramVebo">
-          <el-input v-model="form.paramVebo" :disabled="true" />
+        <el-form-item label="发射极-基极电压VEBO" prop="paramVebo" v-if="form.paramVebo!==null && form.paramVebo!==''">
+          <el-input v-model="form.paramVebo" readonly='true' />
         </el-form-item>
-        <el-form-item label="漏源电压VDSS" prop="paramVdss">
-          <el-input v-model="form.paramVdss" :disabled="true" />
+        <el-form-item label="漏源电压VDSS" prop="paramVdss" v-if="form.paramVdss!==null && form.paramVdss!==''">
+          <el-input v-model="form.paramVdss" readonly='true' />
         </el-form-item>
-        <el-form-item label="漏极直流电流ID" prop="paramId">
-          <el-input v-model="form.paramId" :disabled="true" />
+        <el-form-item label="漏极直流电流ID" prop="paramId" v-if="form.paramId!==null && form.paramId!==''">
+          <el-input v-model="form.paramId" readonly='true' />
         </el-form-item>
-        <el-form-item label="漏-源通态电阻RDS(on)" prop="paramRdsOn">
-          <el-input v-model="form.paramRdsOn" :disabled="true" />
+        <el-form-item label="漏-源通态电阻RDS(on)" prop="paramRdsOn" v-if="form.paramRdsOn!==null && form.paramRdsOn!==''">
+          <el-input v-model="form.paramRdsOn" readonly='true' />
         </el-form-item>
         <el-form-item label="抗静电能力" prop="antistaticCapacity">
-          <el-input v-model="form.antistaticCapacity" :disabled="true" />
+          <el-input v-model="form.antistaticCapacity" readonly='true' />
         </el-form-item>
         <el-form-item label="抗辐照能力" prop="radiationResistance">
-          <el-input v-model="form.radiationResistance" :disabled="true" />
+          <el-input v-model="form.radiationResistance" readonly='true' />
         </el-form-item>
         <el-form-item label="材料" prop="materials">
-          <el-input v-model="form.materials" type="textarea" :disabled="true"/>
+          <el-input v-model="form.materials" type="textarea" readonly='true'/>
         </el-form-item>
         <el-form-item label="工艺" prop="craft">
-          <el-input v-model="form.craft" type="textarea" :disabled="true" />
+          <el-input v-model="form.craft" type="textarea" readonly='true' />
         </el-form-item>
         <el-form-item label="重量" prop="weight">
-          <el-input v-model="form.weight" :disabled="true" />
+          <el-input v-model="form.weight" readonly='true' />
         </el-form-item>
         <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" type="textarea" :disabled="true" />
+          <el-input v-model="form.remark" type="textarea" readonly='true' />
         </el-form-item>
       </el-form>
 
@@ -195,7 +195,7 @@ export default {
       useInfoList:[],
       eremark:'',//评分的备注
       // 遮罩层
-      loading: true,
+      loading: false,
       // 选中数组
       ids: [],
       // 非单个禁用
@@ -207,7 +207,8 @@ export default {
       // 总条数
       total: 0,
       // 元器件数据
-      componentList: [],
+      componentList: [
+      ],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
@@ -260,9 +261,9 @@ export default {
       pageviewTime:{}
     };
   },
-  created() {
-    this.getList();
-  },
+  // created() {
+  //   this.getList();
+  // },
   methods: {
     // 得到evaluation
     getevaluationdata(row){
@@ -276,6 +277,7 @@ export default {
     /** 查询元器件列表 */
     getList() {
       this.loading = true;
+      this.evaluation.searchCondition = this.searchCondition
       RecommendlistComponent(this.queryParams).then(response => {//queryParams中分页的信息应该是在session中保存,在请求的时候通过session封装到了pagedomain中了
         this.componentList = response.rows;
         let clist = response.rows;
@@ -302,7 +304,7 @@ export default {
       this.evaluation.mark = this.escore
       this.evaluation.remark = this.eremark
       addEvaluation(this.evaluation).then(response => {
-        this.$modal.msgSuccess("评分成功");
+        // this.$modal.msgSuccess("评分成功");
 
         this.showevalatedialog = false
       });
@@ -336,7 +338,7 @@ export default {
       this.currentTime = Date.now()
       this.pageviewTime.viewTime = this.currentTime - this.startTime
       addTime(this.pageviewTime).then(res=>{
-        this.$modal.msgSuccess("详情浏览时间成功")
+        // this.$modal.msgSuccess("详情浏览时间成功")
       })
       console.log("详情关闭")
     }

+ 134 - 38
cirs-ui/src/views/biz/record/index.vue

@@ -1,18 +1,24 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
       <el-form-item label="元器件编号" prop="componentId">
-        <el-input
-          v-model="queryParams.componentId"
-          placeholder="请输入元器件编号"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+<!--        <el-input-->
+<!--          v-model="queryParams.componentId"-->
+<!--          placeholder="请输入元器件编号"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+        <el-select v-model="queryParams.componentId" filterable placeholder="请输入元器件编号">
+          <el-option
+            v-for="item in componentInfo"
+            :value="item.id">
+          </el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="使用场景" prop="usedBy">
+      <el-form-item label="应用设备" prop="usedBy">
         <el-input
           v-model="queryParams.usedBy"
-          placeholder="请输入使用场景"
+          placeholder="请输入应用设备"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -26,7 +32,7 @@
         </el-date-picker>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery" style="margin-right: 20px">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
@@ -42,28 +48,28 @@
           v-hasPermi="['biz:record: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="['biz:record: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="['biz:record:remove']"
-        >删除</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="['biz:record: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="['biz:record:remove']"-->
+<!--        >删除</el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -116,11 +122,47 @@
       @pagination="getList"
     />
 
+    <!-- 元器件记录详情导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px">
+      <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" slot="tip">
+          <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的数据
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</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>
     <!-- 添加或修改元器件使用经历对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="元器件编号" prop="componentId">
-          <el-input v-model="form.componentId" placeholder="请输入元器件编号" />
+<!--          <el-input v-model="form.componentId" placeholder="请输入元器件编号" />-->
+          <el-select v-model="queryParams.componentId" filterable placeholder="请输入元器件编号">
+            <el-option
+              v-for="item in componentIds"
+              :value="item">
+            </el-option>
+          </el-select>
         </el-form-item>
         <el-form-item label="使用场景" prop="usedBy">
           <el-input v-model="form.usedBy" placeholder="请输入使用场景" />
@@ -146,12 +188,13 @@
 </template>
 
 <script>
-import { listRecord, getRecord, delRecord, addRecord, updateRecord } from "@/api/biz/record";
-
+import { listRecord, getRecord, delRecord, addRecord, updateRecord,getall } from "@/api/biz/record";
+import { getToken } from "@/utils/auth";
 export default {
   name: "Record",
   data() {
     return {
+      componentInfo:null,
       // 遮罩层
       loading: true,
       // 选中数组
@@ -182,16 +225,43 @@ export default {
       form: {},
       // 表单校验
       rules: {
-      }
+      },
+      // 导入参数
+      upload: {
+        // 是否显示弹出层(导入)
+        open: false,
+        // 弹出层标题(导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/biz/record/importData"
+      },
     };
   },
-  created() {
+  async created() {
+    try {
+      this.componentInfo = await getall();
+      console.log(this.componentInfo);
+    } catch (error) {
+      console.error("Error fetching component info:", error);
+    }
     this.getList();
   },
   methods: {
     /** 查询元器件使用经历列表 */
     getList() {
       this.loading = true;
+      getall().then(res=>{
+        for(let one of res){
+          this.componentIds.push(one.id)
+
+        }
+      })
       listRecord(this.queryParams).then(response => {
         this.recordList = response.rows;
         this.total = response.total;
@@ -285,6 +355,32 @@ export default {
       this.download('biz/record/export', {
         ...this.queryParams
       }, `record_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "元器件记录导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('biz/record/importTemplate', {
+      }, `record_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+// 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
     }
   }
 };

+ 80 - 80
cirs-ui/src/views/biz/task/index.vue

@@ -9,54 +9,54 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="任务数" prop="subtaskNum">
-        <el-input
-          v-model="queryParams.subtaskNum"
-          placeholder="请输入任务数"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="开始时间" prop="startTime">
-        <el-date-picker clearable
-          v-model="queryParams.startTime"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="请选择开始时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="结束时间" prop="endTime">
-        <el-date-picker clearable
-          v-model="queryParams.endTime"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="请选择结束时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="完成率" prop="progress">
-        <el-input
-          v-model="queryParams.progress"
-          placeholder="请输入完成率"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="准确率" prop="accuracyRate">
-        <el-input
-          v-model="queryParams.accuracyRate"
-          placeholder="请输入准确率"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="召回率" prop="recallRate">
-        <el-input
-          v-model="queryParams.recallRate"
-          placeholder="请输入召回率"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+<!--      <el-form-item label="任务数" prop="subtaskNum">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.subtaskNum"-->
+<!--          placeholder="请输入任务数"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="开始时间" prop="startTime">-->
+<!--        <el-date-picker clearable-->
+<!--          v-model="queryParams.startTime"-->
+<!--          type="date"-->
+<!--          value-format="yyyy-MM-dd"-->
+<!--          placeholder="请选择开始时间">-->
+<!--        </el-date-picker>-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="结束时间" prop="endTime">-->
+<!--        <el-date-picker clearable-->
+<!--          v-model="queryParams.endTime"-->
+<!--          type="date"-->
+<!--          value-format="yyyy-MM-dd"-->
+<!--          placeholder="请选择结束时间">-->
+<!--        </el-date-picker>-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="完成率" prop="progress">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.progress"-->
+<!--          placeholder="请输入完成率"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="准确率" prop="accuracyRate">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.accuracyRate"-->
+<!--          placeholder="请输入准确率"-->
+<!--          clearable-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="召回率" prop="recallRate">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.recallRate"-->
+<!--          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>
@@ -74,35 +74,35 @@
           v-hasPermi="['biz:task: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="['biz:task: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="['biz:task:remove']"
-        >删除</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="['biz:task: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="['biz:task:remove']"-->
+<!--        >删除</el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="info"
           icon="el-icon-upload2"
           size="mini"
           @click="handleImport"
-          v-hasPermi="['biz:task:import']"
+          v-hasPermi="['biz:detail:import']"
         >导入</el-button>
       </el-col>
 
@@ -113,7 +113,7 @@
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
-          v-hasPermi="['biz:task:export']"
+          v-hasPermi="['biz:detail:export']"
         >导出</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -166,7 +166,7 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
-    <!-- 任务导入对话框 -->
+    <!-- 任务详情导入对话框 -->
     <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px">
       <el-upload
         ref="upload"
@@ -186,7 +186,7 @@
           <em>点击上传</em>
         </div>
         <div class="el-upload__tip" slot="tip">
-          <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
+          <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的数据
           <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
         </div>
         <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
@@ -198,7 +198,7 @@
     </el-dialog>
 
     <!-- 添加或修改验证任务对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="任务名称" prop="taskName">
           <el-input v-model="form.taskName" placeholder="请输入任务名称" />
@@ -299,7 +299,7 @@ export default {
         // 设置上传的请求头部
         headers: { Authorization: "Bearer " + getToken() },
         // 上传的地址
-        url: process.env.VUE_APP_BASE_API + "/biz/task/importData"
+        url: process.env.VUE_APP_BASE_API + "/biz/detail/importData"
       },
     };
   },
@@ -405,9 +405,9 @@ export default {
     },
     /** 导出按钮操作 */
     handleExport() {
-      this.download('biz/task/export', {
+      this.download('biz/detail/export', {
         ...this.queryParams
-      }, `task_${new Date().getTime()}.xlsx`)
+      }, `taskdetail_${new Date().getTime()}.xlsx`)
     },
     /** 导入按钮操作 */
     handleImport() {
@@ -416,8 +416,8 @@ export default {
     },
     /** 下载模板操作 */
     importTemplate() {
-      this.download('biz/task/importTemplate', {
-      }, `user_template_${new Date().getTime()}.xlsx`)
+      this.download('biz/detail/importTemplate', {
+      }, `taskdetail_template_${new Date().getTime()}.xlsx`)
     },
     // 文件上传中处理
     handleFileUploadProgress(event, file, fileList) {

+ 24 - 24
cirs-ui/src/views/biz/time/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="130px">
       <el-form-item label="元器件名称" prop="componentId">
         <el-input
           v-model="queryParams.componentId"
@@ -42,28 +42,28 @@
           v-hasPermi="['biz:time: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="['biz:time: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="['biz:time:remove']"
-        >删除</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="['biz:time: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="['biz:time:remove']"-->
+<!--        >删除</el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -113,7 +113,7 @@
     />
 
     <!-- 添加或修改页面浏览时长对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="元器件名称" prop="componentId">
           <el-input v-model="form.componentId" placeholder="请输入元器件名称" />