jinlin
2024-01-31 9025b9cf7ec8610003d445a31d93e35e7bd73c2e
修改
35个文件已修改
1个文件已添加
1035 ■■■■■ 已修改文件
modules/mainPart/src/main/java/com/zt/life/modules/baselineRelease/controller/BaselineReleaseController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/controller/ConfigAuditReportController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemOutbound/controller/ConfigItemOutboundController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/controller/ConfigItemWarehouseController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/dao/WarehouseConfigItemDao.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/service/ConfigItemWarehouseService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/service/WarehouseConfigItemService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/contractReview/controller/ContractReviewController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/SoftwareTestOrderController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/dao/ProjectDao.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/service/ProjectService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskMeasureController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/controller/TestCheckOrderController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/model/TestReviewComment.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/configItemWarehouse/WarehouseConfigItemDao.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/EnvironAnalysisDao.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/ProjectDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/testReviewComment/TestReviewCommentDao.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/views/modules/sys/menu.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/router.js 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/layout/main-navbar.vue 401 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/layout/main.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/configItemOutbound/ConfigItemOutbound-AddOrUpdate.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/riskTraceRecord/RiskTraceItem-AddOrUpdate.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/testCheckOrder/TestCheckOrder.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/testReviewComment/TestReviewComment-AddOrUpdate.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/testReviewComment/TestReviewComment.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/userHelp/userHelp.vue 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/pages/login.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/common/src/main/java/com/zt/core/context/User.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/baselineRelease/controller/BaselineReleaseController.java
@@ -17,6 +17,7 @@
import com.zt.life.modules.baselineRelease.service.BaselineReleaseService;
import com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem;
import com.zt.life.modules.configItemWarehouse.service.WarehouseConfigItemService;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.modules.testCheckOrder.dto.CheckOrderDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -43,6 +44,9 @@
public class BaselineReleaseController {
    @Autowired
    private BaselineReleaseService baselineReleaseService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private WarehouseConfigItemService configItemService;
@@ -99,6 +103,7 @@
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        baselineReleaseService.delete(ids);
        projectService.deleteItem(ids,"baseline_release_remark","baseline_id");
        return Result.ok();
    }
modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/controller/ConfigAuditReportController.java
@@ -15,6 +15,7 @@
import com.zt.life.modules.configAuditReport.dto.ConfigAuditDto;
import com.zt.life.modules.configAuditReport.model.ConfigAuditReport;
import com.zt.life.modules.configAuditReport.service.ConfigAuditReportService;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.sys.dto.OssDto;
import com.zt.life.sys.service.SysOssConfigService;
import com.zt.modules.coderule.service.SysCodeRuleService;
@@ -45,6 +46,9 @@
public class ConfigAuditReportController {
    @Autowired
    private ConfigAuditReportService configAuditReportService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
@@ -113,6 +117,8 @@
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        configAuditReportService.delete(ids);
        projectService.deleteItem(ids,"config_audit_report_content","report_id");
        projectService.deleteItem(ids,"config_audit_report_problem","report_id");
        return Result.ok();
    }
modules/mainPart/src/main/java/com/zt/life/modules/configItemOutbound/controller/ConfigItemOutboundController.java
@@ -18,6 +18,7 @@
import com.zt.life.modules.configItemOutbound.service.ConfigItemOutboundService;
import com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem;
import com.zt.life.modules.configItemWarehouse.service.WarehouseConfigItemService;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.sys.dto.OssDto;
import com.zt.life.sys.service.SysOssConfigService;
import com.zt.modules.coderule.service.SysCodeRuleService;
@@ -48,6 +49,9 @@
public class ConfigItemOutboundController {
    @Autowired
    private ConfigItemOutboundService configItemOutboundService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
@@ -113,7 +117,7 @@
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        configItemOutboundService.delete(ids);
        projectService.deleteItem(ids,"config_item_outbound_detail","outbound_id");
        return Result.ok();
    }
    @GetMapping("exportConfigOutbound")
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/controller/ConfigItemWarehouseController.java
@@ -16,8 +16,11 @@
import com.zt.life.modules.configItemWarehouse.model.ConfigItemWarehouse;
import com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem;
import com.zt.life.modules.configItemWarehouse.service.ConfigItemWarehouseService;
import com.zt.life.modules.configItemWarehouse.service.WarehouseConfigItemService;
import com.zt.life.modules.itemCirculatOrder.dto.ItemCirculatOrderDto;
import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrderTechnical;
import com.zt.life.modules.project.model.Project;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.sys.dto.OssDto;
import com.zt.life.sys.service.SysOssConfigService;
import com.zt.modules.coderule.service.SysCodeRuleService;
@@ -48,6 +51,9 @@
public class ConfigItemWarehouseController {
    @Autowired
    private ConfigItemWarehouseService configItemWarehouseService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
@@ -117,9 +123,12 @@
    @LogOperation("删除")
    public Result delete(@RequestBody Long[] ids) {
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        configItemWarehouseService.delete(ids);
        projectService.deleteItem(ids,"config_item_warehouse_cm","warehouse_id");
        projectService.deleteItem(ids,"config_item_warehouse_detail","warehouse_id");
        projectService.deleteItem(ids,"config_item_warehouse_qa","warehouse_id");
        return Result.ok();
    }
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/dao/WarehouseConfigItemDao.java
@@ -23,4 +23,6 @@
    List<WarehouseConfigItem> itemList(Long projectId,String ids);
    List<WarehouseConfigItem> selectList(Long projectId,String ids,String type);
    WarehouseConfigItem getBySrc(Long projectId, Long srcId);
}
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/service/ConfigItemWarehouseService.java
@@ -222,7 +222,7 @@
            data.setCmAuditList((List<WarehouseCmAudit>) cmList);
            List<?> qaList = this.itemQaList("warehouse_qa_audit");
            data.setQaAuditList((List<WarehouseQaAudit>) qaList);
            List<?> resultList = new ArrayList<>();
            List<WarehouseConfigItem> resultList = new ArrayList<>();
            if ("1".equals(libraryType)) {
                List<String> srcId = technicalService.getsrcId(projectId);
/*                String ids = String.join(", ", srcId.stream()
@@ -230,9 +230,15 @@
                        .collect(Collectors.toList()));*/
                String ids = String.join(", ", srcId);
                resultList = configItemService.ConfigItemList(projectId, ids);
                for (WarehouseConfigItem item :resultList){
                    if (ids.contains(item.getSrcId().toString()) && item.getSrcId()!=null && StringUtils.isNotBlank(ids)){
                        WarehouseConfigItem item2 = configItemService.getBySrc(projectId,item.getSrcId());
                        item.setVersion(null);
                        item.setRetrospectVersion(item2.getVersion());
                    }
                }
            }
            List<?> ConfigItemList = resultList;
            data.setConfigItemList((List<WarehouseConfigItem>) ConfigItemList);
            data.setConfigItemList(resultList);
        }
        if (projectId != null) {
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/service/WarehouseConfigItemService.java
@@ -55,4 +55,8 @@
    public List<WarehouseConfigItem> warehouseConfigList(Long projectId, String ids, String type) {
        return baseDao.selectList(projectId, ids, type);
    }
    public WarehouseConfigItem getBySrc(Long projectId, Long srcId) {
        return baseDao.getBySrc(projectId, srcId);
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/contractReview/controller/ContractReviewController.java
@@ -17,6 +17,7 @@
import com.zt.life.modules.contractReview.service.ContractReviewService;
import com.zt.life.modules.itemCirculatOrder.dto.ItemCirculatOrderDto;
import com.zt.life.modules.itemCirculatOrder.service.ItemCirculatOrderService;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.sys.dto.OssDto;
import com.zt.life.sys.service.SysOssConfigService;
import com.zt.modules.coderule.service.SysCodeRuleService;
@@ -47,6 +48,9 @@
public class ContractReviewController {
    @Autowired
    private ContractReviewService contractReviewService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
@@ -114,6 +118,7 @@
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        contractReviewService.delete(ids);
        projectService.deleteItem(ids,"contract_review_item","review_id");
        return Result.ok();
    }
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java
@@ -18,6 +18,7 @@
import com.zt.life.modules.itemCirculatOrder.service.ItemCirculatOrderService;
import com.zt.life.modules.itemCirculatOrder.service.ItemCirculatOrderTechnicalService;
import com.zt.life.modules.project.dto.SoftwareTestOrderDto;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.sys.dto.OssDto;
import com.zt.life.sys.service.SysOssConfigService;
import com.zt.modules.coderule.service.SysCodeRuleService;
@@ -51,6 +52,9 @@
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private SysOssConfigService sysOssConfigService;
@@ -113,6 +117,7 @@
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        itemCirculatOrderService.delete(ids);
        projectService.deleteItem(ids,"item_circulat_order_technical","circulat_order_id");
        return Result.ok();
    }
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironController.java
@@ -14,7 +14,7 @@
import com.zt.common.validator.group.UpdateGroup;
import com.zt.life.modules.project.dto.EnvironDto;
import com.zt.life.modules.project.model.Environ;
import com.zt.life.modules.project.service.EnvironService;
import com.zt.life.modules.project.service.*;
import com.zt.life.sys.dto.OssDto;
import com.zt.life.sys.service.SysOssConfigService;
import com.zt.modules.coderule.service.SysCodeRuleService;
@@ -50,6 +50,9 @@
public class EnvironController {
    @Autowired
    private EnvironService environService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private SysOssConfigService sysOssConfigService;
@@ -116,7 +119,9 @@
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        environService.delete(ids);
        projectService.deleteItem(ids,"environ_analysis","environ_id");
        projectService.deleteItem(ids,"environ_hardware_resources","environ_id");
        projectService.deleteItem(ids,"environ_software_resources","environ_id");
        return Result.ok();
    }
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/SoftwareTestOrderController.java
@@ -53,6 +53,9 @@
    private SoftwareTestOrderService softwareTestOrderService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
    @Autowired
@@ -121,7 +124,8 @@
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        softwareTestOrderService.delete(ids);
        projectService.deleteItem(ids,"software_test_order_deliverable","order_id");
        projectService.deleteItem(ids,"software_test_order_measured","order_id");
        return Result.ok();
    }
modules/mainPart/src/main/java/com/zt/life/modules/project/dao/ProjectDao.java
@@ -22,4 +22,6 @@
    List<Project> getList(Map<String, Object> params);
    MyProjectRoleDto getMyProjectRole(Long projectId, Long userId);
    void deleteItem(Map<String, Object> params);
}
modules/mainPart/src/main/java/com/zt/life/modules/project/service/ProjectService.java
@@ -55,4 +55,15 @@
        MyProjectRoleDto data = baseDao.getMyProjectRole(projectId, userId);
        return data;
    }
    public void deleteItem(Long[] ids, String tableName, String fieldName) {
        for (Long id : ids){
            Map<String, Object> params = new HashMap<>();
            params.put("id", id);
            params.put("tableName", tableName);
            params.put("fieldName", fieldName);
            baseDao.deleteItem(params);
        }
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java
@@ -14,6 +14,7 @@
import com.zt.common.validator.group.UpdateGroup;
import com.zt.life.modules.configAuditReport.dto.ConfigAuditDto;
import com.zt.life.modules.project.model.ProjectUserName;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.modules.qaAuditReport.dto.QaAuditReportDto;
import com.zt.life.modules.qaAuditReport.model.QaAuditReport;
import com.zt.life.modules.qaAuditReport.service.QaAuditReportService;
@@ -48,6 +49,9 @@
public class QaAuditReportController {
    @Autowired
    private QaAuditReportService qaAuditReportService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
@@ -118,6 +122,7 @@
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        qaAuditReportService.delete(ids);
        projectService.deleteItem(ids,"qa_audit_report_incongruent","report_id");
        return Result.ok();
    }
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskMeasureController.java
@@ -12,6 +12,7 @@
import com.zt.common.validator.group.AddGroup;
import com.zt.common.validator.group.DefaultGroup;
import com.zt.common.validator.group.UpdateGroup;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.modules.riskTraceRecord.model.RiskMeasure;
import com.zt.life.modules.riskTraceRecord.service.RiskMeasureService;
import io.swagger.annotations.Api;
@@ -38,6 +39,9 @@
public class RiskMeasureController {
    @Autowired
    private RiskMeasureService riskMeasureService;
    @Autowired
    private ProjectService projectService;
    @GetMapping("page")
    @ApiOperation("分页")
@@ -90,6 +94,8 @@
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        riskMeasureService.delete(ids);
        projectService.deleteItem(ids,"risk_trace_item","risk_id");
        projectService.deleteItem(ids,"risk_trace_record","risk_id");
        return Result.ok();
    }
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/controller/TestCheckOrderController.java
@@ -14,6 +14,7 @@
import com.zt.common.validator.group.UpdateGroup;
import com.zt.life.modules.project.dto.EnvironDto;
import com.zt.life.modules.project.dto.SoftwareTestOrderDto;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.modules.testCheckOrder.dto.CheckOrderDto;
import com.zt.life.modules.testCheckOrder.model.TestCheckOrder;
import com.zt.life.modules.testCheckOrder.service.TestCheckOrderService;
@@ -45,6 +46,9 @@
public class TestCheckOrderController {
    @Autowired
    private TestCheckOrderService testCheckOrderService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
@@ -105,6 +109,7 @@
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        testCheckOrderService.delete(ids);
        projectService.deleteItem(ids,"test_check_order_list","check_order_id");
        return Result.ok();
    }
modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/model/TestReviewComment.java
@@ -40,4 +40,8 @@
    @ApiModelProperty(value = "项目名称")
    private String softwareName;
    @TableField(exist = false)
    @ApiModelProperty(value = "项目标识")
    private String softwareIdentity;
}
modules/mainPart/src/main/resources/mapper/configItemWarehouse/WarehouseConfigItemDao.xml
@@ -2,12 +2,11 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zt.life.modules.configItemWarehouse.dao.WarehouseConfigItemDao">
    <select id="getList" resultType="com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem">
        select a.*
        from config_item_warehouse_detail a
        select *
        from config_item_warehouse_detail
        <where>
            a.is_delete = 0
            is_delete = 0
            <if test="warehouseId!=null">
                and warehouse_id = ${warehouseId}
            </if>
@@ -27,9 +26,6 @@
        JOIN project p ON p.id = ${projectId}
        WHERE t.is_delete = 0
        AND i.id = t.circulat_order_id
        <if test="ids!=null and ids!=''">
            AND t.id not in (${ids})
        </if>
        UNION
        SELECT (@row_number := @row_number + 1) AS no,
        p.secret_class,
@@ -41,9 +37,6 @@
        JOIN project p ON p.id = ${projectId}
        WHERE s.is_delete = 0
        AND s.project_id = ${projectId}
        <if test="ids!=null and ids!=''">
            AND s.id not in (${ids})
        </if>
        UNION
        SELECT (@row_number := @row_number + 1) AS no,
        p.secret_class,
@@ -55,9 +48,6 @@
        JOIN project p ON p.id = ${projectId}
        WHERE i.is_delete = 0
        AND i.project_id = ${projectId}
        <if test="ids!=null and ids!=''">
            AND i.id not in (${ids})
        </if>
    </select>
    <select id="selectList" resultType="com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem">
        SET @row_number = 0;
@@ -76,4 +66,10 @@
            and a.library_type=${type}
        </if>
    </select>
    <select id="getBySrc" resultType="com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem">
        select *
        from config_item_warehouse_detail
        where project_id =${projectId} and is_delete =0 and src_id =${srcId}
        ORDER BY UPDATE_DATE DESC
    </select>
</mapper>
modules/mainPart/src/main/resources/mapper/project/EnvironAnalysisDao.xml
@@ -2,7 +2,6 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zt.life.modules.project.dao.EnvironAnalysisDao">
    <select id="getList" resultType="com.zt.life.modules.project.model.EnvironAnalysis">
        select a.*
        from environ_analysis a
modules/mainPart/src/main/resources/mapper/project/ProjectDao.xml
@@ -2,6 +2,9 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zt.life.modules.project.dao.ProjectDao">
    <delete id="deleteItem">
        update ${tableName} set is_delete = 1 where ${fieldName} = ${id}
    </delete>
    <select id="getList" resultType="com.zt.life.modules.project.model.Project">
        select *
modules/mainPart/src/main/resources/mapper/testReviewComment/TestReviewCommentDao.xml
@@ -4,7 +4,7 @@
<mapper namespace="com.zt.life.modules.testReviewComment.dao.TestReviewCommentDao">
    <select id="getList" resultType="com.zt.life.modules.testReviewComment.model.TestReviewComment">
        select a.*,p.software_name
        select a.*,p.software_name,p.software_identity
        from test_review_comment a
        INNER JOIN  project p ON p.id = a.project_id
        <where>
web/packages/views/modules/sys/menu.vue
@@ -9,6 +9,7 @@
            </el-form>
            <el-table v-loading="table.dataLoading" :data="table.dataList" border row-key="id"
                      class="myTable"
                      :cell-style="cellStyle"
                      v-adaptive="{bottomOffset:50}"
                      height="650px"
                      :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
@@ -52,6 +53,11 @@
    AddOrUpdate
  },
  methods: {
    cellStyle({column}) {
      if (column.label === '名称') {
        return 'text-align: left !important;'
      }
    },
    isNotPlatform(row) {
      return true;
      return !this.$equalsIgnoreType(row.type, this.$dict.MenuType.PLATFORM)// 平台不允许修改删除
web/src/router.js
@@ -14,26 +14,7 @@
  if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
  return originalPush.call(this, location).catch(err => err)
}
/*// 首页
pageRoutes.push({
  path: '/TestDjxlHome',
  name: 'TestDjxlHome',
  meta: {title: '登录页', isTab: true},
  component: () => import('./views/pages/TestDjxlHome')
})
pageRoutes.push({
  path: '/szDjxlHome',
  name: 'szDjxlHome',
  meta: {title: '登录页', isTab: true},
  component: () => import('./views/pages/szDjxlHome')
})
// 登录页
pageRoutes.push({
  path: '/index',
  name: 'index',
  meta: {title: '登录页', isTab: true},
  component: () => import('./views/pages/login')
})
// 视频播放页
pageRoutes.push({
  path: '/userHelp',
@@ -41,44 +22,7 @@
  meta: {title: '帮助页', isTab: true},
  component: () => import('./views/modules/userHelp/userHelp')
})
// 登录页
pageRoutes.push({
  path: '/login',
  name: 'login',
  meta: {title: '首页', isTab: true},
  component: () => import('./views/pages/login')
})
// 登录页
pageRoutes.push({
  path: '/single',
  name: 'single',
  meta: {title: '首页', isTab: true},
  component: () => import('./views/pages/single-sign')
})
pageRoutes.push({
  path: '/auth',
  name: 'auth',
  meta: {title: 'SSO登录', isTab: true},
  component: () => import('./views/pages/auth')
})
// pageRoutes.push({
//   path: '/index',
//   component: () => import('./views/modules/index'),
//   name: 'index',
//   meta: {
//     title: '门户',
//     isTab: true
//   }
// })
pageRoutes.push({
  path: '/dashboard',
  component: () => import('./views/modules/index/dashboard'),
  name: 'dashboard',
  meta: {
    title: '态势感知',
    isTab: true
  }
})*/
// 登录页
pageRoutes.push({
  path: '/login',
@@ -111,48 +55,7 @@
      component: () => import('./views/modules/sys/task/taskCenter'),
      name: 'home',
      meta: {title: '首页', isTab: true}
    },
/*    {path: '/single',
      component: () => import('./views/modules/home'),
      name: 'single',
      meta: {title: '首页', isTab: true}
    },*/
    /*{
      path: '/miantainHome-home',
      component: () => import('./views/modules/home'),
      name: 'home_wx',
      meta: {title: '首页', isTab: true}
    },
    {
      path: '/replaceProblemHome-home',
      component: () => import('./views/modules/replaceProblemHome/home'),
      name: 'home_ghz',
      meta: {title: '首页', isTab: true}
    },
    {
      path: '/technology-home',
      component: () => import('./views/modules/sys/sysPage/technology-home'),
      name: 'home_jszt',
      meta: {title: '首页', isTab: true}
    },
    {
      path: '/repair-outline',
      component: () => import('./views/modules/prevent/repair-outline'),
      name: 'home_yfxwx',
      meta: {title: '大纲', isTab: true}
    },*/
    // {
    //   path: '/eqmmt-index',
    //   component: () => import('./views/modules/eqmmt/home/home'),
    //   name: 'home_qc',
    //   meta: {title: '首页', isTab: true}
    // },
    // {
    //   path: '/train-home',
    //   component: () => import('./views/modules/sys/sysPage/train-home'),
    //   name: 'home_qc',
    //   meta: {title: '首页', isTab: true}
    // }
    }
  ]
}
web/src/views/layout/main-navbar.vue
@@ -36,13 +36,6 @@
        <!--        <el-menu-item>-->
        <!--          <local-ship-selector v-model="localShip" placeholder="舷号"/>-->
        <!--        </el-menu-item>-->
          <el-menu-item v-if="help_show" index="4">
            <el-badge :value="feedCount" class="item" :hidden="!isAdmin">
            <el-tooltip class="item" effect="dark" content="意见反馈" placement="bottom">
              <i @click="toFeedBack()" style="font-size: 24px;margin-top:22px" class="el-icon-edit-outline"></i>
            </el-tooltip>
            </el-badge>
          </el-menu-item>
<!--        <el-menu-item>-->
<!--          <el-badge :value="feedCount" class="item" :hidden="!isAdmin">-->
<!--          <el-button @click="toFeedBack()" type="text">意见反馈</el-button>-->
@@ -179,7 +172,6 @@
<!--        </el-tab-pane>-->
<!--      </el-tabs>-->
<!--    </el-dialog>-->
    <sysFeedBack ref="sysFeedBack" @refreshDataList="getFeedCount"></sysFeedBack>
  </div>
</template>
@@ -266,234 +258,6 @@
        isAdmin:false
      }
    },
    computed: {
      systemList() {
        return [
          {
            permission: ['menu:technicalConditions'],
            path: 'http://' +
              location.hostname +
              ':8080/technicalConditions/boatSystemStructure',
/*              ?username=' +
              Cookies.get('username') + '&loginType=' +
              Cookies.get('loginType') + '&token=' +
              Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),*/
            key: 'technicalConditions',
            text: '技术状态'
          },
          {
            permission: ['menu:replaceProblem'],
            path: 'http://' +
              location.hostname +
              ':8080/replaceProblem/replaceProjectHomePage',
              // ?username=' +
              // Cookies.get('username') + '&loginType=' +
              // Cookies.get('loginType') + '&token=' +
              // Cookies.get('singleSignToken') + '&area=' +
              // Cookies.get('area'),
            key: 'replaceProblem',
            text: '改换装'
          },
          {
            permission: ['menu:jszl'],
            path: 'http://' +
              location.hostname +
              ':1811/login?username=' +
              Cookies.get('username') + '&loginType=' +
              Cookies.get('loginType') + '&token=' +
              Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            text: '技术资料',
          },
          {
            permission: ['menu:smj'],
            path:
              'http://' +
              location.hostname + ':8020/#/single?' + 'username=' +
              Cookies.get('username') + '&system=smj' +
              '&loginType=' +
              Cookies.get('loginType') + '&token=' +
              Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            text: '寿命件数据'
          },
          {
            permission: ['menu:ajqc'],
            path:
              'http://' +
              location.hostname +
              ':1812/login?username=' +
              Cookies.get('username') + '&loginType=' +
              Cookies.get('loginType') + '&token=' +
              Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            text: '器材数据',
            disabled: !(Cookies.get('area') === 'O')
          },
          {
            permission: ['menu:ajqc'],
            path:
              'http://' +
              location.hostname +
              ':1800/login?username=' +
              Cookies.get('username') + '&loginType=' +
              Cookies.get('loginType') + '&token=' +
              Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            text: '器材数据',
            disabled: !(Cookies.get('area') === '1')
          },
          {
            permission: ['menu:syajqc'],
            path:
              'http://' +
              location.hostname +
              ':1813/login?username=' +
              Cookies.get('username') + '&loginType=' +
              Cookies.get('loginType') + '&token=' +
              Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            text: '器材数据',
            disabled: !(Cookies.get('area') === '2')
          },
          {
            permission: ['menu:qddjxl'],
            path: 'http://' +
                location.hostname +
              ':8080/qdGradeRepair/maintenanceHome?username=' +
              Cookies.get('username') + '&loginType=' +
              Cookies.get('loginType') + '&token=' +
              Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            key: 'qdGradeRepair',
            text: '等级修理',
            disabled: !(Cookies.get('area') === '1')
          },
          {
            permission: ['menu:qdlqx'],
            path: 'http://' +
                location.hostname +
              ':8080/qdRepair/qdlndex?username=' +
              Cookies.get('username') + '&loginType=' +
              Cookies.get('loginType') + '&token=' +
              Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            key: 'qdRepair',
            text: '临抢修',
            disabled: !(Cookies.get('area') === '1')
          },
          {
            permission: ['menu:sydjxl'],
            path: 'http://' +
              location.hostname + ':8020/#/single?' + 'username=' +
              Cookies.get('username') + '&system=wxxt' +
              '&loginType=' +
              Cookies.get('loginType') +
              '&token=' + Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            key: 'gradeRepair',
            text: '修理数据',
            disabled: !(Cookies.get('area') === 'O')
          },
          {
            permission: ['menu:sydjxl'],
            path:
              'http://' +
              location.hostname + ':8020/#/single?' + 'username=' +
              Cookies.get('username') + '&loginType=' +
              Cookies.get('loginType') + '&system=djxl' +
              '&token=' + Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            key: 'gradeRepair',
            text: '等级修理',
            disabled: !(Cookies.get('area') === '2')
          },
          {
            permission: ['menu:peixun'],
            path:
              'http://' +
              location.hostname + ':8221/single?' + 'username=' +
              Cookies.get('username') + '&loginType=' +
              Cookies.get('loginType') + '&token=' +
              Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            key: 'peixun',
            text: '培训系统'
          },
          {
            permission: ['menu:preventivemaintenance'],
            path: 'http://' +
              location.hostname + ':8080/preventiveMaintenance/troopProject?username=' +
              Cookies.get('username') +
              '&loginType=' +
              Cookies.get('loginType') +
              '&token=' + Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            key: 'preventiveMaintenance',
            text: '预防性维修'
          },
          // {
          //   permission: ['menu:checkManage'],
          //   path: '/stateManagement/manage', key: 'stateManagement',
          //   text: '应急排查'
          // },
          {
            permission: ['menu:pinggu'],
            path:
              'http://' +
              location.hostname + ':8701/user/ssoLogin?' + 'username=' +
              Cookies.get('username') + '&loginType=' +
              Cookies.get('loginType') +
              '&token=' + Cookies.get('singleSignToken') + '&area=' +
              Cookies.get('area'),
            key: 'pinggu',
            disabled: Cookies.get('area') === '2',
            text: '技术状态评估'
          }
          // ,
          // {
          //   permission: 0,
          //   path: '/qualityProblem/inhandle', key: 'qualityProblem',
          //   text: '质量问题管理'
          // },
          // {
          //   permission: ['menu:feedback'], path: ' /feedback/knowledge', key: 'feedback',
          //   text: '经验反馈',
          //   img: require('@/assets/image/select/situationlmg/21.png'),
          //   imgdisabled: require('@/assets/image/select/situationImg/21.disabled.png')
          // },
          // {
          //   permission: ['menu:system'], key: 'system',
          //   text: '系统配置'
          // },
          // {
          //   permission: ['menu:workflow'], key: 'workflow',
          //   text: '协同办公',
          //   img: require('@/assets/image/select/situationlmg/22.png'),
          //   imgdisabled: require('@/assets/image/select/situationlmg/22.disabled.png')
          // }
        ]
      },
      systemName() {
        if (Cookies.get('system') == 'djxl') {
          return this.systemList[10].text
        } else if (Cookies.get('system') == 'smj'){
          return this.systemList[3].text
        } else if (Cookies.get('system') == 'wxxt'){
          return this.systemList[9].text
        }
      }
    },
    // components: {
    //   // UpdatePassword,
    //   InfiniteLoading,
    //   TableStructMaintain,
    //   TableRelation,
    //   QuestionSolution,
    //   DatabaseTableInfo,
    //   sysFeedBack
    // },
    created() {
      let that = this
      this.getUserRoleInfo()
@@ -501,7 +265,6 @@
        that.isOpen = true
      })
      //this.systemList = window.SITE_CONFIG['menuList']
      console.log(this.systemList, 'this.systemList')
      this.loginType=Cookies.get('loginType')
      // Cookies.get('loginType')
    },
@@ -539,7 +302,6 @@
      this.$EventBus.$on('formSubmit', (msg) => {
        this.msg = msg
        this.getOneClassFile()
        // console.log(msg)
      })
      this.$EventBus.$on('reLogin', () => {
@@ -573,29 +335,8 @@
      })*/
      this.getTaskCount()
      this.getFeedCount()
      this.getOneClassFile()
      // console.log(this.$store.state.user,'this.$store.state.user.debug navbar6666666666')
      if (!this.$store.state.debug) {
        setInterval(this.getOneClassFile, 60000)
      }
      if (this.$store.state.user.isCjRole) {
        this.$http.get('/task/taskCenter/page').then(res => {
          console.log(res.data, 'res.data嘿嘿嘿')
          let data = res.data
          for (let val of data) {
            if (val.stepMarker == 'work_cjtx') {
              this.$http.get(`/task/planTask/${val.bizId}`).then(res => {
                let DiffDay = this.getDiffDay(res.data.checkDate, new Date())
                if (DiffDay <= 7 && DiffDay > -1) {
                  return this.$tip.confirm('工程项目' + val.topic + '的第' + res.data.startPeriod + '期的周计划任务审核时间剩余' + DiffDay + '天,请尽快完成任务填写!')
                }
              })
            }
          }
        })
      }
      this.isAdmin = this.$store.state.user.isAdmin
    },
    methods: {
@@ -606,29 +347,6 @@
        }else if(this.system==='djxl') {
          window.open('./help/djxlVideo/index.html','_blank');
        }
      },
      async load($state) {
        //调用获取表格数据的接口
        await this.$http.get(`/task/OneClassFile/fileNotice?pageIndex=${this.pageIndex}&pageSize=${this.pageSize}`).then(res => {
          console.log(res, 'res')
          if (res && res.success) {
            if (this.pageIndex === 1) {
              this.gridData = res.data     //首先加载后端返回的第一页的数据显示在表格中
              $state.complete()   //加载完成的状态
            } else {
              if (!res.data || res.data.length < this.pageSize) {
                $state.complete()   //加载完成的状态
              } else {
                this.gridData = this.gridData.concat(res.data)   //将后端新返回的数据拼接在原表格后面
                $state.loaded()     //加载中的状态
              }
            }
            this.pageIndex++    //鼠标在表格底部滑动时,翻页,即当前页数+1
            console.log('123333333333')
          } else {
            $state.complete()      //加载完成的状态
          }
        })
      },
      getDiffDay(date_1, date_2) {
        // 计算两个日期之间的差值
@@ -649,16 +367,6 @@
            return this.$message.error(res.msg)
          }
          this.userRoleInfo = res.data
          if(this.$store.state.user.isZcRole ||
              this.userRoleInfo.roleName=='总体所角色' ||
              this.userRoleInfo.roleName=='代表室角色' ||
              this.userRoleInfo.roleName=='助理角色'||
              this.userRoleInfo.roleName=='部长角色' ||
              this.userRoleInfo.roleName=='处长角色'){
            this.$store.state.isGoToHome = true
          } else{
            this.$store.state.isGoToHome = false
          }
          console.log(this.userRoleInfo, 'userRoleInfo')
        }).catch(() => {
        })
@@ -691,99 +399,8 @@
          this.$router.push({name: 'login'})
        }
      },
      async addOneClassFile1() {
        let fileIds = ''
        for (let i = 0; i < this.gridData.length; i++) {
          if (this.gridData[i].code === 1) {
            fileIds = fileIds + this.gridData[i].fileId + ','
          }
        }
        let planId = {
          fileIds: fileIds,
          readerid: this.$store.state.user.id
        }
        let res = await this.$http.post(`/task/OneClassFile/documentReadingRecord`, planId)
        if (res.success) {
          this.getOneClassFile('allRead')
        }
      },
      indexMethod(index) {
        return index += 1
      },
      getJsfa(row) {
        let _this = this
        console.log(row, 'row')
        if (row.busiFieldName === '修理技术方案' || row.busiFieldName === '技术方案2') {
          _this.$router.push({
            name: 'sy-maintain-task-xqzb-repair-skill-scheme',
            params: {
              productId: row.productId
            }
          })
        }
        if (row.busiFieldName === '进厂协议') {
          _this.$router.push({
            name: 'sy-maintain-task-jcxl-JT-enteringPlant.vue',
            params: {
              productId: row.productId
            }
          })
        }
        if (row.busiFieldName === '综合验收') {
          _this.$router.push({
            name: 'sy-maintain-task-jyys-synthetical-test',
            params: {
              productId: row.productId
            }
          })
        }
      },
      async getOneClassFile(code) {
        //console.log(code)
        let res = await this.$http.get(`/task/OneClassFile/fileNotice?pageIndex=${this.pageIndex}&pageSize=${this.pageSize}`)
        if (res.success) {
          console.log(res.data)
          if(res.data.length>0){
            if(res.data[0].total!==undefined){
              this.taskCount = res.data[0].total
            }
            // res.data.sort((a, b) => new Date(b.createDate).getTime() - new Date(a.createDate).getTime())
            this.gridData = res.data
            if (code !== 'allRead') {
              this.pageIndex++
            }
            //console.log(this.gridData, 'this.gridData')
          }
        }
      },
      async addOneClassFile(row, code) {
        let fileIds = ''
        for (let i = 0; i < this.gridData.length; i++) {
          if (this.gridData[i].code === 1) {
            fileIds = fileIds + this.gridData[i].fileId + ','
          }
        }
        let planId
        if (code === 1) {
          planId = {
            fileid: row.fileId,
            readerid: this.$store.state.user.id
          }
        }
        if (code === 2) {
          planId = {
            fileIds: fileIds,
            readerid: this.$store.state.user.id
          }
        }
        // let userName = this.$store.state.user.id
        // console.log(userName,'userName userName')
        let res = await this.$http.post(`/task/OneClassFile/documentReadingRecord`, planId)
        if (res.success) {
          this.getOneClassFile()
        }
      },
      task(row) {
        this.getRecordNumber(1)
@@ -812,28 +429,10 @@
          // console.log(this.taskList, "12311")
        }
      },
      async getFeedCount() {
        let count = 0
        let res = await this.$http.get(`/sys/feedback/page`)
        if (res.success) {
          console.log(res.data, "feedback......")
          res.data.forEach((item) => {
            if (item.isFinish === null || item.isFinish === 'undefined') {
              count++
            }
          })
          this.feedCount = count
        }
      },
      goToIndex() {
        console.log(this.$store.state.user.roleName,'this.$store.state.user.roleName')
        this.$router.push({name: 'TestDjxlHome',params: {roleName: this.$store.state.user.roleName}})
        // window.console.log(this.$route.name)
      },
      async toFeedBack(){
        this.$nextTick(() => {
          this.$refs.sysFeedBack.$refs.dialog.init();
        })
      },
      themehangeHandle(val) {
        this.themeColor = val
web/src/views/layout/main.vue
@@ -309,13 +309,6 @@
          // console.log(res,'getAdminRoleInfo');
          this.$store.state.user.isAdmin = res.data.isAdmin
          this.$store.state.user.isAssistant = res.data.isAssistant
          this.$store.state.user.isTyRole = res.data.isTyRole
          this.$store.state.user.isCjRole = res.data.isCjRole
          this.$store.state.user.isZcRole = res.data.isZcRole
          this.$store.state.user.isCzRole = res.data.isCzRole
          this.$store.state.user.isBzRole = res.data.isBzRole
          this.$store.state.user.isTzRole = res.data.isTzRole
          this.$store.state.user.isYwzRole = res.data.isYwzRole
          this.$store.state.user.roles = res.data.roles
          this.$store.state.debug = res.data.debug
          this.$store.state.test = res.data.test
web/src/views/modules/configItemOutbound/ConfigItemOutbound-AddOrUpdate.vue
@@ -331,6 +331,17 @@
      },
      // 表单提交
      async formSubmit(submitType) {
        let flag = true;
        console.log(this.dataForm, "this.dataForm11111")
        this.dataForm.configOutboundList.forEach(item => {
          if (parseInt(item.secretClass) > localStorage.getItem('userSecretClass')) {
            this.$alert("当前项目设置的密级高于当前用户的密级,请重新设置")
            flag =false
          }
        })
        if (!flag){
          return
        }
        if (this.showColumn && submitType == 'bl') {
          for (let item of this.dataForm.configItemList) {
            if (item) {
web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue
@@ -421,19 +421,18 @@
      // 表单提交
      async formSubmit(submitType) {
        let isFiles = true;
        let flag = true;
        console.log(this.dataForm, "this.dataForm11111")
        this.dataForm.configItemList.forEach(item => {
          console.log(item, "his.dataForm.technicalList.forEach")
          item.files.groups.forEach(groups => {
            groups.fields.forEach(files => {
              if (files.files.length === 0) {
                this.$alert("当前存在未上传附件的技术资料,请重新上传")
                isFiles = false
                return isFiles
              }
            })
          })
          if (parseInt(item.secretClass) > localStorage.getItem('userSecretClass')) {
            this.$alert("当前项目设置的密级高于当前用户的密级,请重新设置")
            flag =false
          }
        })
        if (this.showColumn && submitType == 'bl') {
        if (!flag){
          return
        }
        if (this.showColumn && submitType === 'bl') {
          for (let item of this.dataForm.configItemList) {
            if (item) {
              if (this.pageNameCode[item.itemName] && !item.checkId) {
@@ -444,6 +443,18 @@
          }
        }
        if (submitType === 'tj' || submitType === 'bl') {
          this.dataForm.configItemList.forEach(item => {
            console.log(item, "his.dataForm.technicalList.forEach")
            item.files.groups.forEach(groups => {
              groups.fields.forEach(files => {
                if (files.files.length === 0) {
                  this.$alert("当前存在未上传附件的配置项,请重新上传")
                  isFiles = false
                  return isFiles
                }
              })
            })
          })
          if (!isFiles){
            return
          }
web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
@@ -409,20 +409,29 @@
      // 表单提交
      async formSubmit(submitType) {
        let isFiles = true;
        let flag = true;
        console.log(this.dataForm, "this.dataForm11111")
        this.dataForm.technicalList.forEach(item => {
          console.log(item, "his.dataForm.technicalList.forEach")
          item.files.groups.forEach(groups => {
            groups.fields.forEach(files => {
              if (files.files.length === 0) {
                this.$alert("当前存在未上传附件的技术资料,请重新上传")
                isFiles = false
                return isFiles
              }
          if (parseInt(item.secretClass) > localStorage.getItem('userSecretClass')) {
            this.$alert("当前项目设置的密级高于当前用户的密级,请重新设置")
            flag =false
          }
        })
        if (!flag){
          return
        }
        if (submitType === 'tj' || submitType === 'bl') {
          this.dataForm.technicalList.forEach(item => {
            item.files.groups.forEach(groups => {
              groups.fields.forEach(files => {
                if (files.files.length === 0) {
                  this.$alert("当前存在未上传附件的技术资料,请重新上传")
                  isFiles = false
                  return isFiles
                }
              })
            })
          })
        })
        console.log(this.dataForm, "this.dataForm11111")
        if (submitType == 'tj' || submitType == 'bl') {
          if (!isFiles){
            return
          }
@@ -435,7 +444,7 @@
        }
        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/itemCirculatOrder/ItemCirculatOrder/', this.dataForm)
        if (res.success) {
          if (this.stepMarker === 'wplz_wprk' && submitType == 'bl') {
          if (this.stepMarker === 'wplz_wprk' && submitType === 'bl') {
            this.$nextTick(() => {
              this.$refs.addOrUpdate.$refs.dialog.init(null, {
                id: res.data,
web/src/views/modules/riskTraceRecord/RiskTraceItem-AddOrUpdate.vue
@@ -32,7 +32,7 @@
          </el-table-column>
        </el-table>
          <div class="el-risk-flex el-border-top-bottom ">
          <div class="el-risk-flex el-border-top-bottom " style="height:90px">
            <div class="riskWidth riskAlign riskHold" style="width: 35%">
              风险跟踪人员/日期:
            </div>
@@ -106,7 +106,7 @@
              风险措施控制
            </div>
            <div class="el-border-left" style="width: 90%">
              <div class="el-risk-flex el-border-bottom ">
              <div class="el-risk-flex el-border-bottom " style="height:40px">
                <div  class="riskAlign riskHold" style="width: 26%">
                  采取措施:
                </div>
@@ -127,7 +127,7 @@
                  <span v-else>{{dataForm.riskMeasure.summaryMeasure}}</span>
                </el-form-item>
              </div>
              <div class="el-risk-flex el-border-bottom ">
              <div class="el-risk-flex el-border-bottom " style="height:90px">
                <div  class="riskAlign riskHold" style="width: 26%">
                  记录人员/日期:
                </div>
@@ -196,7 +196,7 @@
                  </el-form-item>
                </div>
              </div>
              <div class="el-risk-flex el-border-bottom ">
              <div class="el-risk-flex el-border-bottom " style="height:40px">
                <div  class="riskAlign riskHold" style="width: 26%">
                  措施有效性评估:
                </div>
@@ -217,7 +217,7 @@
                  <span v-else>{{dataForm.riskMeasure.summaryEvaluate}}</span>
                </el-form-item>
              </div>
              <div class="el-risk-flex ">
              <div class="el-risk-flex " style="height:90px">
                <div  class="riskAlign riskHold" style="width:26%">
                  部门负责人/日期:
                </div>
web/src/views/modules/testCheckOrder/TestCheckOrder.vue
@@ -64,7 +64,7 @@
    },
    created() {
      const roleName = localStorage.getItem('roleName')
      if (roleName && roleName.includes('QA')) {
      if (roleName && roleName.includes('审核')) {
        this.showColumn = true;
      }
    },
web/src/views/modules/testReviewComment/TestReviewComment-AddOrUpdate.vue
@@ -20,7 +20,7 @@
      <zt-form-item label="评审人数" prop="reviewerNum" >
        <el-input v-model="dataForm.reviewComment.reviewerNum"></el-input>
      </zt-form-item>
      <div style="height: 60px">
      <div style="height: 60px;width: 75%">
        <el-form-item >
          <config-uploader :lineHeight="true" :busi-type="type" model-name="dataForm" :dataForm="dataForm"
                           v-model="dataForm.files"/>
web/src/views/modules/testReviewComment/TestReviewComment.vue
@@ -16,12 +16,12 @@
          </el-form-item>
        </el-form>
        <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}" border @selection-change="table.selectionChangeHandle">
          <el-table-column type="selection" width="40"/>
          <el-table-column type="selection" align="center" width="40"/>
            <el-table-column prop="reviewDate" label="评审日期"/>
          <el-table-column prop="softwareName" label="项目名称"/>
          <el-table-column prop="softwareIdentity" label="项目标识"/>
          <el-table-column prop="softwareIdentity" label="项目标识" />
          <zt-table-column-handle :table="table"  :hasEdit='false' edit-perm="testReviewComment:update"
                                  delete-perm="testCheckOrder::delete">
                                  delete-perm="testCheckOrder::delete" width="200">
            <template v-slot="{row}">
              <zt-table-button size="small" v-show = "row.accessoryMap" type="primary"
                               @click="preview(row)">预览
web/src/views/modules/userHelp/userHelp.vue
New file
@@ -0,0 +1,229 @@
<template>
  <div id="wai">
    <div class="divLeft">
      <h2 >{{helpDataSys.systemName}}用户操作说明</h2>
      <div v-for="item in helpDataSys.data" :key="item.id">
        <h3 @click="toggleCollapse(helpDataSys.data,item.id)" style="cursor: pointer;font-size: 20px">
          <span :class="{ 'collapsed': item.isCollapsed }">▷</span>
          {{item.user}}
        </h3>
        <ol :class="{'isCollapsed':!item.isCollapsed}" v-show="item.isCollapsed" style="font-weight: initial;line-height: initial;">
          <li v-for="item1 in item.modules" :key="item1.id" style="margin-top: 10px; margin-bottom: 5px">
            <span @click="toggleCollapse(item.modules,item1.id)">{{item1.module}}</span>
            <ol :class="{'isCollapsed':!item1.isCollapsed}" v-show="item1.isCollapsed" class="funcList" style="transition: .5s">
              <li v-for="item2 in item1.functions" :key="item2.id" class="func" @click="clickFunc(item.user, item1.module, item2.function, item2.docFile, item2.videoFile)">
                {{item2.function}}</li>
            </ol>
          </li>
        </ol>
      </div>
    </div>
    <div class="divRight">
      <div style="margin: 10px; display: flex;">
        <div style="flex: 1;">
          <el-radio-group v-model="dispType" @change="dispTypeChange">
            <el-radio class="radio" label="1">操作说明</el-radio>
            <el-radio class="radio" label="2">录屏演示</el-radio>
          </el-radio-group>
        </div>
        <div style="flex: 1; text-align: center" id="helpTitle">
          <h3 ></h3>
        </div>
        <div id="userManual"  style="flex: 1; text-align: right;">
          <el-dropdown trigger="hover">
            <span class="el-dropdown-link">
              下载用户手册<i class="el-icon-arrow-down el-icon--right"></i>
            </span>
            <el-dropdown-menu @click.native.stop>
              <el-dropdown-item v-for="item in helpDataSys.userManual" :key="item.id">
                <a :href="item.file" style="color:#000">{{ item.name }}</a>
              </el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
        </div>
      </div>
      <div style="height: 100%;">
        <div id="divDoc" style="height: 100%;">
          <iframe id="iframe" src="" width="100%" height="95%"></iframe>
        </div>
        <div id="divVideo">
          <video id="video" src="" controls type="video/mp4">
          </video>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
  import Cookies from "js-cookie";
  export default {
    name: 'UserHelp',
    data(){
      return{
        isCollapsed:false,
        system: '',  // djxl, smj
        helpDataSys: '',
        dispType: '1',
        user: '',
        modulename: '',
        funcname: '',
        docfile: '',
        videofile: '',
      }
    },
    mounted() {
      this.system = Cookies.get('system');
      // userhelp_jsondata在/help/helpdata.js中定义,/help/helpdata.js在index.html中引入。
      if (this.system) {
        for (let i = 0; i < userhelp_jsondata.length; i++) {
          if (this.system == userhelp_jsondata[i].system) {
            this.helpDataSys = userhelp_jsondata[i];
          }
        }
      }else{
        this.helpDataSys = userhelp_jsondata[0]
      }
    },
    methods: {
      toggleCollapse(Dates,id) {
        console.log(id)
        for (const item of Dates) {
          console.log(item.id)
          if (item.id === id) {
            item.isCollapsed = !item.isCollapsed; // 切换展开(收缩)状态
            break;
          }
        }
      },
      switchDispType() {
        var myIframe = document.getElementById("iframe");
        var myVideo = document.getElementById("video");
        if (this.dispType=="1") {
          document.getElementById("divVideo").style.display="none";
          document.getElementById("divDoc").style.display="";
          myIframe.src = this.docfile;
          if (!myVideo.paused) {
            myVideo.pause();
          }
        } else {
          document.getElementById("divDoc").style.display="none";
          document.getElementById("divVideo").style.display="";
          if (myVideo.paused) {
            myVideo.src = this.videofile;
            myVideo.volume=0;
            myVideo.play();
          } else {
            myVideo.pause();
            myVideo.src = this.videofile;
            myVideo.volume=0;
            myVideo.play();
          }
        }
      },
      clickFunc(user, modulename, funcname, docfile, videofile) {
        this.user = user;
        this.modulename = modulename;
        this.funcname = funcname;
        this.docfile = docfile;
        this.videofile = videofile;
        var myTitle = document.getElementById("helpTitle");
        myTitle.innerHTML = user+"--"+modulename+"--"+funcname;
        this.switchDispType();
      },
      dispTypeChange() {
        if (this.funcname) {
          this.switchDispType();
        }
      }
    }
  }
</script>
<style>
#video {
  margin: 0;
  width: 100%;
  height: 100%;
  display: block;
}
#wai{ width:100%; height: 100vh; padding:10px; overflow:hidden;background: #062944;color:#FFF}
.divLeft{ float:left; width: 300px; height: 100%; overflow-y:scroll; }
.divRight{ margin-left: 310px; height: 100%;}
.divRight .radio{
  color:#fff;
}
.divLeft>div>h3:hover{
  background-color:rgba(2, 120, 231, 1);
  transition: .5s;
}
.divLeft ol>li>span{
  font-weight: bold;
  list-style-position: inside;
  cursor: pointer;
  display: inline-block;
  font-size: 18px;
  width: 100%;
}
.divLeft ol>li>span:hover{
  /*border: 1px solid rgba(2, 120, 231, 1);*/
  background-color:rgba(2, 120, 231, 1);
  transition: .5s;
}
.funcList{ margin-left: 10px;padding-left:10px;font-size: 16px}
.funcList li {
  padding: 5px;
  color:#fff;
  list-style-position: inside;
}
.funcList li:hover{
  background-color:rgba(2, 120, 231, .6);
  transition: .5s;
}
.func{ text-decoration: none; color: #0000ff; cursor:pointer; }
/* 正常情况下滑块的样式 */
#wai ::-webkit-scrollbar-thumb {
  background-color: rgba(23, 179, 163, 0.2);
  border-radius: 2px;
  -webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .3);
}
#wai ::-webkit-scrollbar-corner{
  background-color: rgba(23, 179, 163, 0.3);
}
/* 鼠标悬浮在该类指向的控件上时滑块的样式 */
#wai :hover::-webkit-scrollbar-thumb {
  background-color: rgba(23, 179, 163, 0.5);
  border-radius: 2px;
  -webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1);
}
/* 鼠标悬浮在滑块上时滑块的样式 */
#wai ::-webkit-scrollbar-thumb:hover {
  background-color: rgba(23, 179, 163, 0.5);
  -webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1);
}
/* 正常时候的主干部分 */
#wai ::-webkit-scrollbar-track {
  border-radius: 2px;
  /*-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0);*/
}
/* 鼠标悬浮在滚动条上的主干部分 */
#wai::-webkit-scrollbar-track:hover {
  /*-webkit-box-shadow: inset 0 0 6px rgba(123, 224, 244, 0.1);*/
  background-color: rgba(23, 179, 163, 0.5);
}
#wai .el-dropdown{
  color:#fff;
}
.collapsed {
  transform: rotate(0.5turn);
}
.isCollapsed{
  display: block;
  transition: .5s;
}
</style>
web/src/views/pages/login.vue
@@ -173,20 +173,12 @@
          // console.log(res,'getAdminRoleInfo');
          this.$store.state.user.isAdmin = res.data.isAdmin
          this.$store.state.user.isAssistant = res.data.isAssistant
          this.$store.state.user.isTyRole = res.data.isTyRole
          this.$store.state.user.isCjRole = res.data.isCjRole
          this.$store.state.user.isZcRole = res.data.isZcRole
          this.$store.state.user.isCzRole = res.data.isCzRole
          this.$store.state.user.isBzRole = res.data.isBzRole
          this.$store.state.user.isTzRole = res.data.isTzRole
          this.$store.state.user.isYwzRole = res.data.isYwzRole
          this.$store.state.user.roles = res.data.roles
          this.$store.state.debug = res.data.debug
          this.$store.state.test = res.data.test
          this.$store.state.menuPos = res.data.menuPos
          window.SITE_CONFIG['isAdmin'] = res.data.isAdmin // 权限
          this.loading = false
          console.log(this.$store.state.user.isZcRole, 'this.$store.state.user.isZcRole')
        }).catch(() => {
          console.log('/user/adminRole', 'adminRole')
        })
@@ -220,13 +212,7 @@
                  console.log(res.data.roleName,'res.data.roleName res.data.roleName')
                  if (res.data.roleName != null &&
                    (res.data.roleName.indexOf('系统管理员') >= 0 ||
                      res.data.roleName.indexOf('全部权限') >= 0 ||
                      res.data.roleName.indexOf('总体所角色') >= 0 ||
                      res.data.roleName.indexOf('代表室角色') >= 0 ||
                      res.data.roleName.indexOf('助理角色') >= 0 ||
                      res.data.roleName.indexOf('总厂角色') >= 0 ||
                      res.data.roleName.indexOf('部长角色') >= 0 ||
                      res.data.roleName.indexOf('处长角色') >= 0)
                      res.data.roleName.indexOf('全部权限') >= 0)
                  ) {
                    console.log('TestDjxlHome')
                    // this.$router.push({name: 'TestDjxlHome', params: {roleName: res.data.roleName}})
zt/common/src/main/java/com/zt/core/context/User.java
@@ -52,18 +52,6 @@
    @JsonProperty("isSuperAdmin")
    private boolean isSuperAdmin;
    @ApiModelProperty(value = "是否为T员用户")
    @JsonProperty("isTyRole")
    private boolean isTyRole;
    @ApiModelProperty(value = "是否为厂家用户")
    @JsonProperty("isCjRole")
    private boolean isCjRole;
    @ApiModelProperty(value = "是否为总厂用户")
    @JsonProperty("isZcRole")
    private boolean isZcRole;
    @ApiModelProperty(value = "公司類型")
    @JsonProperty("unitType")
    @TableField(exist = false)
zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java
@@ -262,43 +262,11 @@
        Map<String, Object> sysUser = new Hashtable();
        sysUser.put("isAdmin", false);
        sysUser.put("isTyRole", false);
        sysUser.put("isYwzRole", false);
        sysUser.put("isTzRole", false);
        sysUser.put("isAssistant", false);
        sysUser.put("isCzRole", false);
        sysUser.put("isBzRole", false);
        sysUser.put("isCjRole", false);
        sysUser.put("isZcRole", false);
        List<RoleDto> roles = sysRoleUserService.getUserRoles(UserContext.getUser().getId());
        if (roles != null && roles.size() > 0) {
            if (roles.stream().filter(p -> p.getCode().equals("xtglybm") || p.getCode().equals("all")).count() > 0) {
                sysUser.put("isAdmin", true);
            }
            if (roles.stream().filter(p -> p.getCode().equals("tybm")).count() > 0) {
                sysUser.put("isTyRole", true);
            }
            if (roles.stream().filter(p -> p.getCode().equals("ywzbm")).count() > 0) {
                sysUser.put("isYwzRole", true);
            }
            if (roles.stream().filter(p -> p.getCode().equals("tzbm")).count() > 0) {
                sysUser.put("isTzRole", true);
            }
            if (roles.stream().filter(p -> p.getCode().equals("zlbm")).count() > 0) {
                sysUser.put("isAssistant", true);
            }
            if (roles.stream().filter(p -> p.getCode().equals("czbm")).count() > 0) {
                sysUser.put("isCzRole", true);
            }
            if (roles.stream().filter(p -> p.getCode().equals("bzbm")).count() > 0) {
                sysUser.put("isBzRole", true);
            }
            if (roles.stream().filter(p -> p.getCode().equals("cjbm") || p.getCode().equals("zcbm")).count() > 0) {
                sysUser.put("isCjRole", true);
            }
            if (roles.stream().filter(p -> p.getCode().equals("zcbm")).count() > 0) {
                sysUser.put("isZcRole", true);
            }
        }
        return sysUser;