合并分支 'fix_20230508' 到 'master'

Fix 20230508

查看合并请求 laws-nio/laws-weilai!322
This commit is contained in:
高嵩
2023-05-10 21:29:03 +08:00
41 changed files with 2752 additions and 613 deletions
@@ -28,10 +28,7 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.*;
/**
* <p>
@@ -331,4 +328,24 @@ public class SysDictItemController {
}
}
/**
* 获取一级责任领域(统计节点)信息接口
* @param params
* @return
*/
@RequestMapping(value = "/getFirstLevelDutyTerritory", method = RequestMethod.GET)
@ApiOperation("获取一级责任领域(统计节点)信息接口")
public Result<Object> getFirstLevelDutyTerritory(@RequestParam Map<String,Object> params) {
List<Map<String,Object>> result = new ArrayList<>();
List<SysDictItem> sysDictItems = this.sysDictItemService.selectItemsAll();
Map<String, List<SysDictItem>> firstLevelDutyTerritoryMap = this.sysDictItemService.getFirstLevelSysDictItemByDictCode(DictCodeEnum.DUTY_TERRITORY.getValue(),sysDictItems);
for (Map.Entry<String, List<SysDictItem>> dutyTerritoryMap : firstLevelDutyTerritoryMap.entrySet()) {
Map<String,Object> map = new HashMap<>();
map.put("key",dutyTerritoryMap.getKey());
map.put("value",dutyTerritoryMap.getValue());
result.add(map);
}
return Result.OK(result);
}
}
@@ -143,6 +143,7 @@ public class SysUserController {
}
user.setOrgCode(null);
QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(user, newReqMap);
queryWrapper.orderByAsc("username");
//TODO 外部模拟登陆临时账号,列表不显示
queryWrapper.ne("username", "_reserve_user_external");
String[] orgCode = reqMap.get("orgCode");
@@ -16,6 +16,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.modules.dummy.entity.DummyInventoryInfoEO;
import lombok.extern.slf4j.Slf4j;
import com.jero.common.system.base.controller.JeroController;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -57,7 +58,16 @@ public class AuthDummyInventoryInfoEOController extends JeroController<AuthDummy
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<AuthDummyInventoryInfoEO> queryWrapper = QueryGenerator.initQueryWrapper(authDummyInventoryInfoEO, req.getParameterMap());
queryWrapper.orderByDesc("create_time");
String orderByField = authDummyInventoryInfoEO.getOrderByField();
String orderBy = authDummyInventoryInfoEO.getOrderBy();
// 如果排序字段不为空
if(StringUtils.isNotEmpty(orderByField)){
// 转换字段
orderByField = this.authDummyInventoryInfoEOService.convertOrderByField(orderByField);
queryWrapper.orderBy(true, "1".equals(orderBy)?true:false, orderByField);
}else {
queryWrapper.orderByDesc("create_time");
}
Page<AuthDummyInventoryInfoEO> page = new Page<AuthDummyInventoryInfoEO>(pageNo, pageSize);
IPage<AuthDummyInventoryInfoEO> pageList = this.authDummyInventoryInfoEOService.page(page, queryWrapper);
this.authDummyInventoryInfoEOService.disposeData(pageList.getRecords(),authDummyInventoryInfoEO.getCut());
@@ -113,6 +113,8 @@ public interface IAuthDummyInventoryInfoEOService extends IService<AuthDummyInve
*/
void disposeData(List<AuthDummyInventoryInfoEO> datas, String cut);
String convertOrderByField(String orderByField);
/**
* 获取责任领域名称
* @param cut
@@ -607,8 +607,8 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
List<AuthDummyInventoryInfoEO> authDummyInventoryInfoEOList = this.list(queryWrapper);
return authDummyInventoryInfoEOList;
}
private String convertOrderByField(String orderByField) {
@Override
public String convertOrderByField(String orderByField) {
if(StringUtils.isEmpty(orderByField)){
return null;
}
@@ -620,6 +620,7 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
case "serialNumber" : return "serial_number";
case "dutyTerritory" : return "duty_territory";
case "deliverableType" : return "deliverable_type";
case "attestationTypeName" : return "attestation_type";
default: return null;
}
}
@@ -35,13 +35,16 @@ import com.jero.modules.cert.template.entity.ParamsTemplateEO;
import com.jero.modules.cert.template.enums.ControlTypeEnum;
import com.jero.modules.cert.template.service.IParamsInfoPublishEOService;
import com.jero.modules.cert.template.service.IParamsTemplateEOService;
import com.jero.modules.enums.DictCodeEnum;
import com.jero.modules.project.entity.ProjectRelatedPersonnel;
import com.jero.modules.project.service.IProjectLibraryBaseService;
import com.jero.modules.project.service.IProjectRelatedPersonnelService;
import com.jero.modules.project.service.IProjectUserPermissionService;
import com.jero.modules.system.entity.SysDictItem;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.enums.DicCodeEnum;
import com.jero.modules.system.mapper.SysDictMapper;
import com.jero.modules.system.service.ISysDictItemService;
import com.jero.modules.system.service.ISysDictService;
import com.jero.modules.system.service.ISysUserService;
import org.apache.commons.collections4.CollectionUtils;
@@ -125,6 +128,9 @@ public class ParamsManifestEOServiceImpl extends ServiceImpl<ParamsManifestEOMap
@Autowired
private ISysDictService sysDictService;
@Autowired
private ISysDictItemService sysDictItemService;
/**
* 保存
*
@@ -877,8 +883,8 @@ public class ParamsManifestEOServiceImpl extends ServiceImpl<ParamsManifestEOMap
@Override
public Map<String, Object> getStatisticsForProjectDetails(String paramsManifestId, String cut) {
// 查询所有责任领域
List<DictModel> dutyTerritoryDictList = sysDictMapper.queryDictItemsByCode("duty_territory");
List<SysDictItem> sysDictItems = this.sysDictItemService.selectItemsAll();
Map<String, List<SysDictItem>> firstLevelDutyTerritoryMap = this.sysDictItemService.getFirstLevelSysDictItemByDictCode(DictCodeEnum.DUTY_TERRITORY.getValue(),sysDictItems);
Map<String, Object> result = new LinkedHashMap<>();
List<String> dutyTerritoryNameList = new LinkedList<>();
@@ -898,60 +904,122 @@ public class ParamsManifestEOServiceImpl extends ServiceImpl<ParamsManifestEOMap
paramsCollectManifestEO.setParamsManifestId(paramsManifestId);
List<Map<String, Object>> listAll = paramsCollectManifestEOMapper.listInfoForExport(paramsCollectManifestEO, null);
// 循环责任领域,计算每个责任领域中的四种状态数据
for (DictModel item : dutyTerritoryDictList) {
if(ObjectUtil.isNotEmpty(firstLevelDutyTerritoryMap)){
for (Map.Entry<String, List<SysDictItem>> dutyTerritoryMap : firstLevelDutyTerritoryMap.entrySet()) {
String firstLevelDutyTerritory = dutyTerritoryMap.getKey();
List<SysDictItem> dutyTerritoryList = dutyTerritoryMap.getValue();
if(StringUtils.isEmpty(firstLevelDutyTerritory) || CollectionUtils.isEmpty(dutyTerritoryList)){
continue;
}
// 计算数量
double notStartNumber = listAll.stream().filter(e -> (CollectManifestStateEnum.WAIT_COLLECT.getValue().equals(e.get("state"))
double notStartNumber = 0;
double collectingNumber = 0;
double submitNumber = 0;
double syncReportNumber = 0;
for (SysDictItem dictItem : dutyTerritoryList) {
// 计算数量
notStartNumber += listAll.stream().filter(e -> (CollectManifestStateEnum.WAIT_COLLECT.getValue().equals(e.get("state"))
|| CollectManifestStateEnum.SDT_BACK.getValue().equals(e.get("state"))
|| CollectManifestStateEnum.CHANGE.getValue().equals(e.get("state"))) && item.getValue().equals(e.get("duty_territory")))
.count(); // 未开始的参数项 数量
|| CollectManifestStateEnum.CHANGE.getValue().equals(e.get("state"))) && dictItem.getItemValue().equals(e.get("duty_territory")))
.count(); // 未开始的参数项 数量
double collectingNumber = listAll.stream().filter(e -> (CollectManifestStateEnum.WAIT_SDT.getValue().equals(e.get("state"))
collectingNumber += listAll.stream().filter(e -> (CollectManifestStateEnum.WAIT_SDT.getValue().equals(e.get("state"))
|| CollectManifestStateEnum.WAIT_FILL.getValue().equals(e.get("state"))
|| CollectManifestStateEnum.DRE_BACK.getValue().equals(e.get("state"))
|| CollectManifestStateEnum.CERT_BACK.getValue().equals(e.get("state"))) && item.getValue().equals(e.get("duty_territory")))
.count(); // 收集中的参数项 数量
|| CollectManifestStateEnum.CERT_BACK.getValue().equals(e.get("state"))) && dictItem.getItemValue().equals(e.get("duty_territory")))
.count(); // 收集中的参数项 数量
double submitNumber = listAll.stream().filter(e -> CollectManifestStateEnum.SUBMIT.getValue().equals(e.get("state")) && item.getValue().equals(e.get("duty_territory")))
.count(); // 已提交的参数项 数量
submitNumber += listAll.stream().filter(e -> CollectManifestStateEnum.SUBMIT.getValue().equals(e.get("state")) && dictItem.getItemValue().equals(e.get("duty_territory")))
.count(); // 已提交的参数项 数量
double syncReportNumber = listAll.stream().filter(e -> CollectManifestStateEnum.SYNC_REPORT.getValue().equals(e.get("state")) && item.getValue().equals(e.get("duty_territory")))
.count(); // 已同步上报库的参数项 数量
syncReportNumber += listAll.stream().filter(e -> CollectManifestStateEnum.SYNC_REPORT.getValue().equals(e.get("state")) && dictItem.getItemValue().equals(e.get("duty_territory")))
.count(); // 已同步上报库的参数项 数量
}
// 计算百分比
double total = notStartNumber + collectingNumber + submitNumber + syncReportNumber; // 当前责任领域参数项总数
String notStartPercent = getRatio(notStartNumber, total); // 未开始的参数项 百分比
String collectingPercent = getRatio(collectingNumber, total); // 收集中的参数项 百分比
String submitPercent = getRatio(submitNumber, total); // 已提交的参数项 百分比
String syncReportPercent = getRatio(syncReportNumber, total); // 已同步上报库的参数项 百分比
// 计算百分比
double total = notStartNumber + collectingNumber + submitNumber + syncReportNumber; // 当前责任领域参数项总数
String notStartPercent = getRatio(notStartNumber, total); // 未开始的参数项 百分比
String collectingPercent = getRatio(collectingNumber, total); // 收集中的参数项 百分比
String submitPercent = getRatio(submitNumber, total); // 已提交的参数项 百分比
String syncReportPercent = getRatio(syncReportNumber, total); // 已同步上报库的参数项 百分比
// 累加
totalAll += total;
notStartTotal += notStartNumber;
collectingTotal += collectingNumber;
submitTotal += submitNumber;
syncReportTotal += syncReportNumber;
// 累加
totalAll += total;
notStartTotal += notStartNumber;
collectingTotal += collectingNumber;
submitTotal += submitNumber;
syncReportTotal += syncReportNumber;
// 组装数据 返回前端
if (notStartNumber == collectingNumber && collectingNumber == submitNumber && submitNumber == syncReportNumber && syncReportNumber == 0) {
continue;
}
getData(notStartList, notStartNumber, notStartPercent);
getData(collectingList, collectingNumber, collectingPercent);
getData(submitList, submitNumber, submitPercent);
getData(syncReportList, syncReportNumber, syncReportPercent);
// 组装数据 返回前端
if (notStartNumber == collectingNumber && collectingNumber == submitNumber && submitNumber == syncReportNumber && syncReportNumber == 0) {
continue;
dutyTerritoryNameList.add(firstLevelDutyTerritory);
}
if (CutEnum.EN.getValue().equals(cut)) {
dutyTerritoryNameList.add(item.getTextEn());
} else {
dutyTerritoryNameList.add(item.getText());
}
getData(notStartList, notStartNumber, notStartPercent);
getData(collectingList, collectingNumber, collectingPercent);
getData(submitList, submitNumber, submitPercent);
getData(syncReportList, syncReportNumber, syncReportPercent);
}
// // 查询所有责任领域
// List<DictModel> dutyTerritoryDictList = sysDictMapper.queryDictItemsByCode("duty_territory");
// // 循环责任领域,计算每个责任领域中的四种状态数据
// for (DictModel item : dutyTerritoryDictList) {
//
// // 计算数量
// double notStartNumber = listAll.stream().filter(e -> (CollectManifestStateEnum.WAIT_COLLECT.getValue().equals(e.get("state"))
// || CollectManifestStateEnum.SDT_BACK.getValue().equals(e.get("state"))
// || CollectManifestStateEnum.CHANGE.getValue().equals(e.get("state"))) && item.getValue().equals(e.get("duty_territory")))
// .count(); // 未开始的参数项 数量
//
// double collectingNumber = listAll.stream().filter(e -> (CollectManifestStateEnum.WAIT_SDT.getValue().equals(e.get("state"))
// || CollectManifestStateEnum.WAIT_FILL.getValue().equals(e.get("state"))
// || CollectManifestStateEnum.DRE_BACK.getValue().equals(e.get("state"))
// || CollectManifestStateEnum.CERT_BACK.getValue().equals(e.get("state"))) && item.getValue().equals(e.get("duty_territory")))
// .count(); // 收集中的参数项 数量
//
// double submitNumber = listAll.stream().filter(e -> CollectManifestStateEnum.SUBMIT.getValue().equals(e.get("state")) && item.getValue().equals(e.get("duty_territory")))
// .count(); // 已提交的参数项 数量
//
// double syncReportNumber = listAll.stream().filter(e -> CollectManifestStateEnum.SYNC_REPORT.getValue().equals(e.get("state")) && item.getValue().equals(e.get("duty_territory")))
// .count(); // 已同步上报库的参数项 数量
//
// // 计算百分比
// double total = notStartNumber + collectingNumber + submitNumber + syncReportNumber; // 当前责任领域参数项总数
// String notStartPercent = getRatio(notStartNumber, total); // 未开始的参数项 百分比
// String collectingPercent = getRatio(collectingNumber, total); // 收集中的参数项 百分比
// String submitPercent = getRatio(submitNumber, total); // 已提交的参数项 百分比
// String syncReportPercent = getRatio(syncReportNumber, total); // 已同步上报库的参数项 百分比
//
// // 累加
// totalAll += total;
// notStartTotal += notStartNumber;
// collectingTotal += collectingNumber;
// submitTotal += submitNumber;
// syncReportTotal += syncReportNumber;
//
//
// // 组装数据 返回前端
// if (notStartNumber == collectingNumber && collectingNumber == submitNumber && submitNumber == syncReportNumber && syncReportNumber == 0) {
// continue;
// }
//
// if (CutEnum.EN.getValue().equals(cut)) {
// dutyTerritoryNameList.add(item.getTextEn());
// } else {
// dutyTerritoryNameList.add(item.getText());
// }
//
// getData(notStartList, notStartNumber, notStartPercent);
// getData(collectingList, collectingNumber, collectingPercent);
// getData(submitList, submitNumber, submitPercent);
// getData(syncReportList, syncReportNumber, syncReportPercent);
//
// }
// 设置全部
if (CutEnum.EN.getValue().equals(cut)) {
dutyTerritoryNameList.add(0, "All");
@@ -106,12 +106,87 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
@Override
public IPage<DummyInventoryInfoEO> getPageInfo(DummyInventoryInfoEO dummyInventoryInfoEO,HttpServletRequest req) {
long startTime = System.currentTimeMillis();
String orderBy = dummyInventoryInfoEO.getOrderBy();
String orderByField = dummyInventoryInfoEO.getOrderByField();
QueryWrapper<DummyInventoryInfoEO> queryWrapper = QueryGenerator.initQueryWrapper(dummyInventoryInfoEO, req.getParameterMap());
queryWrapper.orderByDesc("create_time");
//新车型实施日期,在产车实施日期(排序)
if("xin1_che1_xing2_shi2_shi1_ri4_qi1".equals(orderByField) || "implement_time".equals(orderByField)){
if(OrderEnum.POSITIVE.getValue().equals(orderBy)){
queryWrapper.orderByAsc(orderByField);
}else if(OrderEnum.REVERSE.getValue().equals(orderBy)){
queryWrapper.orderByDesc(orderByField);
}
}
if(StringUtils.isBlank(orderByField)){
queryWrapper.orderByDesc("create_time","serial_number");
}
if(StringUtils.isNotEmpty(dummyInventoryInfoEO.getImplementTimeString())){
String[] implementTimeArr = dummyInventoryInfoEO.getImplementTimeString().split(",");
QueryWrapper<PhasedImplementationDetailsEO> phasedDetailsQueryWrap = new QueryWrapper<>();
phasedDetailsQueryWrap.lambda().like(PhasedImplementationDetailsEO::getImplementationType,ImplementationTypeEnum.CAR_IN_PRODUCTION.getItemValue());
phasedDetailsQueryWrap.lambda().ge(PhasedImplementationDetailsEO::getImplementationDate,implementTimeArr[0]);
phasedDetailsQueryWrap.lambda().le(PhasedImplementationDetailsEO::getImplementationDate,implementTimeArr[1]);
List<String> bussDocumentLibraryIdList = this.phasedImplementationDetailsEOService.list(phasedDetailsQueryWrap)
.stream().map(PhasedImplementationDetailsEO::getBussDocumentLibraryId).collect(Collectors.toList());
queryWrapper.and(query -> {
query.and(q -> {
q.lambda().ge(DummyInventoryInfoEO::getImplementTime,implementTimeArr[0]);
q.lambda().le(DummyInventoryInfoEO::getImplementTime,implementTimeArr[1]);
});
if(CollectionUtils.isNotEmpty(bussDocumentLibraryIdList)){
query.or(q -> {
q.lambda().in(DummyInventoryInfoEO::getBussDocumentLibraryId,bussDocumentLibraryIdList);
});
}
});
}
if(StringUtils.isNotEmpty(dummyInventoryInfoEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1String())){
String[] newCarTimeArr = dummyInventoryInfoEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1String().split(",");
QueryWrapper<PhasedImplementationDetailsEO> phasedDetailsQueryWrap = new QueryWrapper<>();
phasedDetailsQueryWrap.lambda().like(PhasedImplementationDetailsEO::getImplementationType,ImplementationTypeEnum.NEW_CAR_MODEL.getItemValue());
phasedDetailsQueryWrap.lambda().ge(PhasedImplementationDetailsEO::getImplementationDate,newCarTimeArr[0]);
phasedDetailsQueryWrap.lambda().le(PhasedImplementationDetailsEO::getImplementationDate,newCarTimeArr[1]);
List<String> bussDocumentLibraryIdList = this.phasedImplementationDetailsEOService.list(phasedDetailsQueryWrap)
.stream().map(PhasedImplementationDetailsEO::getBussDocumentLibraryId).collect(Collectors.toList());
queryWrapper.and(query -> {
query.and(q -> {
q.lambda().ge(DummyInventoryInfoEO::getXin1Che1Xing2Shi2Shi1Ri4Qi1,newCarTimeArr[0]);
q.lambda().le(DummyInventoryInfoEO::getXin1Che1Xing2Shi2Shi1Ri4Qi1,newCarTimeArr[1]);
});
if(CollectionUtils.isNotEmpty(bussDocumentLibraryIdList)){
query.or(q -> {
q.lambda().in(DummyInventoryInfoEO::getBussDocumentLibraryId,bussDocumentLibraryIdList);
});
}
});
}
Page<DummyInventoryInfoEO> page = new Page<DummyInventoryInfoEO>(dummyInventoryInfoEO.getPageNo(), dummyInventoryInfoEO.getPageSize());
IPage<DummyInventoryInfoEO> pageInfo = this.page(page, queryWrapper);
//技术领域处理
// treeDict(dummyInventoryInfoEO, pageInfo);
List<DummyInventoryInfoEO> dummyInventoryInfoEOList = pageInfo.getRecords();
log.info("一阶段消耗时间:" + (System.currentTimeMillis() - startTime));
//数据字典
List<SysDictItem> sysDictItems = sysDictItemServiceImpl.selectItemsAll();
//技术领域处理
treeDict(dummyInventoryInfoEO, dummyInventoryInfoEOList,sysDictItems);
log.info("二阶段消耗时间:" + (System.currentTimeMillis() - startTime));
this.dataDicDispose(dummyInventoryInfoEOList,dummyInventoryInfoEO.getCut());
log.info("三阶段消耗时间:" + (System.currentTimeMillis() - startTime));
treeDict(dummyInventoryInfoEO, dummyInventoryInfoEOList,sysDictItems);
// 数据处理
this.disposeData(dummyInventoryInfoEOList,dummyInventoryInfoEO.getCut());
//表头排序
dummyInventoryInfoEOList = hearSort(orderBy, orderByField, dummyInventoryInfoEOList);
return pageInfo;
}
@@ -634,18 +709,18 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
if("xin1Che1Xing2Shi2Shi1Ri4Qi1String".equals(orderByField)){
if(OrderEnum.POSITIVE.getValue().equals(orderBy)){
Collections.sort(dummyInventoryInfoEOList,(e1, e2)->{
if(e1.getXin1Che1Xing2Shi2Shi1Ri4Qi1() != null && e2.getXin1Che1Xing2Shi2Shi1Ri4Qi1() != null){
String e1xin1Che1Xing2Shi2Shi1Ri4Qi = DateUtils.formatDate(e1.getXin1Che1Xing2Shi2Shi1Ri4Qi1());
String e2xin1Che1Xing2Shi2Shi1Ri4Qi = DateUtils.formatDate(e2.getXin1Che1Xing2Shi2Shi1Ri4Qi1());
if(e1.getXin1Che1Xing2Shi2Shi1Ri4Qi1String() != null && e2.getXin1Che1Xing2Shi2Shi1Ri4Qi1String() != null){
String e1xin1Che1Xing2Shi2Shi1Ri4Qi = DateUtils.formatDate(e1.getXin1Che1Xing2Shi2Shi1Ri4Qi1String());
String e2xin1Che1Xing2Shi2Shi1Ri4Qi = DateUtils.formatDate(e2.getXin1Che1Xing2Shi2Shi1Ri4Qi1String());
return comparator.compare(e1xin1Che1Xing2Shi2Shi1Ri4Qi,e2xin1Che1Xing2Shi2Shi1Ri4Qi);
}
return 0;
});
}else if(OrderEnum.REVERSE.getValue().equals(orderBy)){
Collections.sort(dummyInventoryInfoEOList,(e1,e2)->{
if(e1.getXin1Che1Xing2Shi2Shi1Ri4Qi1() != null && e2.getXin1Che1Xing2Shi2Shi1Ri4Qi1() != null){
String e1xin1Che1Xing2Shi2Shi1Ri4Qi = DateUtils.formatDate(e1.getXin1Che1Xing2Shi2Shi1Ri4Qi1());
String e2xin1Che1Xing2Shi2Shi1Ri4Qi = DateUtils.formatDate(e2.getXin1Che1Xing2Shi2Shi1Ri4Qi1());
if(e1.getXin1Che1Xing2Shi2Shi1Ri4Qi1String() != null && e2.getXin1Che1Xing2Shi2Shi1Ri4Qi1String() != null){
String e1xin1Che1Xing2Shi2Shi1Ri4Qi = DateUtils.formatDate(e1.getXin1Che1Xing2Shi2Shi1Ri4Qi1String());
String e2xin1Che1Xing2Shi2Shi1Ri4Qi = DateUtils.formatDate(e2.getXin1Che1Xing2Shi2Shi1Ri4Qi1String());
return comparator.compare(e2xin1Che1Xing2Shi2Shi1Ri4Qi,e1xin1Che1Xing2Shi2Shi1Ri4Qi);
}
return 0;
@@ -656,18 +731,18 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
if("implementTimeString".equals(orderByField)){
if(OrderEnum.POSITIVE.getValue().equals(orderBy)){
Collections.sort(dummyInventoryInfoEOList,(e1, e2)->{
if(e1.getImplementTime() != null && e2.getImplementTime() != null){
String e1ImplementTime = DateUtils.formatDate(e1.getImplementTime());
String e2ImplementTime = DateUtils.formatDate(e2.getImplementTime());
if(e1.getImplementTimeString() != null && e2.getImplementTimeString() != null){
String e1ImplementTime = DateUtils.formatDate(e1.getImplementTimeString());
String e2ImplementTime = DateUtils.formatDate(e2.getImplementTimeString());
return comparator.compare(e1ImplementTime,e2ImplementTime);
}
return 0;
});
}else if(OrderEnum.REVERSE.getValue().equals(orderBy)){
Collections.sort(dummyInventoryInfoEOList,(e1,e2)->{
if(e1.getImplementTime() != null && e2.getImplementTime() != null){
String e1ImplementTime = DateUtils.formatDate(e1.getImplementTime());
String e2ImplementTime = DateUtils.formatDate(e2.getImplementTime());
if(e1.getImplementTimeString() != null && e2.getImplementTimeString() != null){
String e1ImplementTime = DateUtils.formatDate(e1.getImplementTimeString());
String e2ImplementTime = DateUtils.formatDate(e2.getImplementTimeString());
return comparator.compare(e2ImplementTime,e1ImplementTime);
}
return 0;
@@ -81,9 +81,7 @@ public class ProjectLawsInventoryEOController extends JeroController<ProjectLaws
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<ProjectLawsInventoryEO> queryWrapper = QueryGenerator.initQueryWrapper(projectLawsInventoryEO, req.getParameterMap());
Page<ProjectLawsInventoryEO> page = new Page<ProjectLawsInventoryEO>(pageNo, pageSize);
IPage<ProjectLawsInventoryEO> pageList = projectLawsInventoryEOService.page(page, queryWrapper);
IPage<ProjectLawsInventoryEO> pageList = this.projectLawsInventoryEOService.queryPage(projectLawsInventoryEO,pageNo,pageSize,req);
return Result.OK(pageList);
}
@@ -566,4 +564,11 @@ public class ProjectLawsInventoryEOController extends JeroController<ProjectLaws
@RequestParam Map<String,Object> params) {
this.projectLawsInventoryEOService.exportNotComplianList(response,request, params);
}
@AutoLog(value = "项目库-法规清单表-定版校验")
@ApiOperation(value="项目库-法规清单表-定版校验", notes="项目库-法规清单表-定版校验")
@GetMapping(value = "/finalizationVerify")
public Result<?> finalizationVerify(@RequestParam Map<String,Object> params){
return this.projectLawsInventoryEOService.finalizationVerify(params);
}
}
@@ -45,8 +45,8 @@ public class ProjectStatusBoardController {
@ApiOperation(value="时间轴列表", notes="时间轴列表")
@GetMapping(value = "/timelineList")
@RequiresPermissions("ProjectStatusBoard:info")
public Result<?> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req) {
List<Map<String,Object>> result = iProjectStatusBoardService.timelineList(projectLibraryBase, req);
public Result<?> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req,@RequestParam("queryAllProject") boolean queryAllProject) {
List<Map<String,Object>> result = iProjectStatusBoardService.timelineList(projectLibraryBase, req,queryAllProject);
if(result==null) {
return Result.error("未找到对应数据");
}
@@ -85,8 +85,8 @@ public class ProjectStatusBoardController {
// 导出excel文件
@RequestMapping(value = "/exportXls")
public void exportXls(HttpServletResponse response, HttpServletRequest request, ProjectLibraryBase projectLibraryBase) {
this.iProjectStatusBoardService.exportXls(response,request, projectLibraryBase);
public void exportXls(HttpServletResponse response, HttpServletRequest request, ProjectLibraryBase projectLibraryBase,@RequestParam("queryAllProject") boolean queryAllProject) {
this.iProjectStatusBoardService.exportXls(response,request, projectLibraryBase,queryAllProject);
}
@@ -254,4 +254,8 @@ public class ProjectCertificationInventoryEO implements Serializable {
/**认证类型*/
@ApiModelProperty(value = "认证类型")
private String attestationType;
/**一级责任领域**/
@TableField(exist = false)
private String firstLevelDutyTerritory;
}
@@ -530,4 +530,8 @@ public class ProjectLawsInventoryEO implements Serializable {
/**流程类型展示名称*/
@TableField(exist = false)
private String flowTypeName;
/**一级责任领域**/
@TableField(exist = false)
private String firstLevelDutyTerritory;
}
@@ -304,4 +304,8 @@ public interface IProjectLawsInventoryEOService extends IService<ProjectLawsInve
* @return
*/
Map<String, Object> groupByVerifyStatus(List<ProjectLawsInventoryEO> pliEos);
IPage<ProjectLawsInventoryEO> queryPage(ProjectLawsInventoryEO projectLawsInventoryEO, Integer pageNo, Integer pageSize, HttpServletRequest req);
Result<?> finalizationVerify(Map<String, Object> params);
}
@@ -22,7 +22,7 @@ public interface IProjectStatusBoardService {
* @param req
* @return
*/
List<Map<String,Object>> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req);
List<Map<String,Object>> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req,boolean queryAllProject);
List<String> timeline(String startTime, String endTime);
@@ -39,5 +39,5 @@ public interface IProjectStatusBoardService {
* @param request
* @param projectLibraryBase
*/
void exportXls(HttpServletResponse response, HttpServletRequest request, ProjectLibraryBase projectLibraryBase);
void exportXls(HttpServletResponse response, HttpServletRequest request, ProjectLibraryBase projectLibraryBase,boolean queryAllProject);
}
@@ -30,6 +30,7 @@ import com.jero.modules.document.entity.BussDocumentLibraryEO;
import com.jero.modules.document.mapper.BussDocumentLibraryEOMapper;
import com.jero.modules.document.service.IBussDocumentLibraryEOService;
import com.jero.modules.dummy.enums.OrderEnum;
import com.jero.modules.enums.DictCodeEnum;
import com.jero.modules.feishu.enums.TemplateInfoEnum2;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.oss.entity.OSSFile;
@@ -1415,6 +1416,36 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
String roleCode = projectCertificationInventoryEO.getRoleCode();
// 创建查询权限
this.createQueryPermission(queryWrapper,roleCode);
// 根据一级责任领域统计节点查询该一级责任领域下所有子责任领域的法规清单数据
String dutyTerritoryStr = "";
if(StringUtils.isNotEmpty(projectCertificationInventoryEO.getFirstLevelDutyTerritory())){
List<SysDictItem> sysDictItems = this.sysDictItemServiceImpl.selectItemsAll();
List<SysDictItem> dutyTerritorys = new ArrayList<>();
Map<String, List<SysDictItem>> firstLevelDTMap = this.sysDictItemServiceImpl.getFirstLevelSysDictItemByDictCode(DictCodeEnum.DUTY_TERRITORY.getValue(), sysDictItems);
String[] firstLevelDTArr = projectCertificationInventoryEO.getFirstLevelDutyTerritory().split(",");
for (String firstLevelDT : firstLevelDTArr){
if(CollectionUtils.isNotEmpty(firstLevelDTMap.get(firstLevelDT))){
dutyTerritorys.addAll(firstLevelDTMap.get(firstLevelDT));
}
}
if(CollectionUtils.isNotEmpty(dutyTerritorys)){
dutyTerritoryStr = dutyTerritorys.stream().map(SysDictItem::getItemValue).distinct().collect(Collectors.joining(","));
}
}
if (StringUtils.isNotEmpty(dutyTerritoryStr)) {
String finalDutyTerritoryStr = dutyTerritoryStr.replaceAll("\\*","");
queryWrapper.and(query -> {
query.lambda().like(ProjectCertificationInventoryEO::getDutyTerritory, finalDutyTerritoryStr);
if(StringUtils.contains(finalDutyTerritoryStr,",")){
String[] dutyTerritoryArr = finalDutyTerritoryStr.split(",");
for (String duty : dutyTerritoryArr) {
query.or(q -> {
q.like("duty_territory",duty);
});
}
}
});
}
IPage<ProjectCertificationInventoryEO> pageList = this.page(page, queryWrapper);
this.disposeData(pageList.getRecords(),cut);
List<ProjectCertificationInventoryEO> records = this.hearSort(projectCertificationInventoryEO, pageList.getRecords());
@@ -1467,6 +1498,23 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
}
}
// 认证类型 attestationTypeName
if(StringUtils.equals("attestationTypeName",orderByField)){
if(OrderEnum.POSITIVE.getValue().equals(orderBy)){
Collections.sort(datas,(e1, e2)->{
String e1AttestationTypeName = (StringUtils.isNotEmpty(e1.getAttestationTypeName()) ? e1.getAttestationTypeName() : "");
String e2AttestationTypeName = (StringUtils.isNotEmpty(e2.getAttestationTypeName()) ? e2.getAttestationTypeName() : "");
return comparator.compare(e1AttestationTypeName,e2AttestationTypeName);
});
}else if(OrderEnum.REVERSE.getValue().equals(orderBy)){
Collections.sort(datas,(e1,e2)->{
String e1AttestationTypeName = (StringUtils.isNotEmpty(e1.getAttestationTypeName()) ? e1.getAttestationTypeName() : "");
String e2AttestationTypeName = (StringUtils.isNotEmpty(e2.getAttestationTypeName()) ? e2.getAttestationTypeName() : "");
return comparator.compare(e2AttestationTypeName,e1AttestationTypeName);
});
}
}
// WVTA ID wvtaId
if(StringUtils.equals("wvtaId",orderByField)){
if(OrderEnum.POSITIVE.getValue().equals(orderBy)){
@@ -40,6 +40,7 @@ import com.jero.modules.dummy.service.IDummyInventoryInfoEOService;
import com.jero.modules.dummy.service.impl.DummyInventoryBaseEOServiceImpl;
import com.jero.modules.dummy.util.DeepCopyListUtil;
import com.jero.modules.dummy.util.ListDiff;
import com.jero.modules.enums.DictCodeEnum;
import com.jero.modules.feishu.enums.TemplateInfoEnum2;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsg2Vo;
@@ -1454,6 +1455,38 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
});
}
}
// 认证类型 attestationType
if("attestationType".equals(orderByField)){
if(OrderEnum.POSITIVE.getValue().equals(orderBy)){
Collections.sort(result,(e1, e2)->{
String e1AttestationType = StringUtils.isNotBlank(e1.getAttestationType()) ? e1.getAttestationType() : "";
String e2AttestationType = StringUtils.isNotBlank(e2.getAttestationType()) ? e2.getAttestationType() : "";
return comparator.compare(e1AttestationType,e2AttestationType);
});
}else if(OrderEnum.REVERSE.getValue().equals(orderBy)){
Collections.sort(result,(e1,e2)->{
String e1AttestationType = StringUtils.isNotBlank(e1.getAttestationType()) ? e1.getAttestationType() : "";
String e2AttestationType = StringUtils.isNotBlank(e2.getAttestationType()) ? e2.getAttestationType() : "";
return comparator.compare(e2AttestationType,e1AttestationType);
});
}
}
// 认证级别 attestationRank
if("attestationRank".equals(orderByField)){
if(OrderEnum.POSITIVE.getValue().equals(orderBy)){
Collections.sort(result,(e1, e2)->{
String e1AttestationRank = StringUtils.isNotBlank(e1.getAttestationRank()) ? e1.getAttestationRank() : "";
String e2AttestationRank = StringUtils.isNotBlank(e2.getAttestationRank()) ? e2.getAttestationRank() : "";
return comparator.compare(e1AttestationRank,e2AttestationRank);
});
}else if(OrderEnum.REVERSE.getValue().equals(orderBy)){
Collections.sort(result,(e1,e2)->{
String e1AttestationRank = StringUtils.isNotBlank(e1.getAttestationRank()) ? e1.getAttestationRank() : "";
String e2AttestationRank = StringUtils.isNotBlank(e2.getAttestationRank()) ? e2.getAttestationRank() : "";
return comparator.compare(e2AttestationRank,e1AttestationRank);
});
}
}
// WVTA ID wvtaId
if ("wvtaId".equals(orderByField)) {
if (OrderEnum.POSITIVE.getValue().equals(orderBy)) {
@@ -13364,6 +13397,117 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
return result;
}
@Override
public IPage<ProjectLawsInventoryEO> queryPage(ProjectLawsInventoryEO projectLawsInventoryEO, Integer pageNo, Integer pageSize, HttpServletRequest req) {
String dutyTerritoryStr = "";
if (StringUtils.isNotEmpty(projectLawsInventoryEO.getDutyTerritory())) {
dutyTerritoryStr = projectLawsInventoryEO.getDutyTerritory();
projectLawsInventoryEO.setDutyTerritory(null);
}
// 根据一级责任领域统计节点查询该一级责任领域下所有子责任领域的法规清单数据
if(StringUtils.isNotEmpty(projectLawsInventoryEO.getFirstLevelDutyTerritory())){
List<SysDictItem> sysDictItems = this.sysDictItemServiceImpl.selectItemsAll();
List<SysDictItem> dutyTerritorys = new ArrayList<>();
Map<String, List<SysDictItem>> firstLevelDTMap = this.sysDictItemServiceImpl.getFirstLevelSysDictItemByDictCode(DictCodeEnum.DUTY_TERRITORY.getValue(), sysDictItems);
String[] firstLevelDTArr = projectLawsInventoryEO.getFirstLevelDutyTerritory().split(",");
for (String firstLevelDT : firstLevelDTArr){
if(CollectionUtils.isNotEmpty(firstLevelDTMap.get(firstLevelDT))){
dutyTerritorys.addAll(firstLevelDTMap.get(firstLevelDT));
}
}
if(CollectionUtils.isNotEmpty(dutyTerritorys)){
dutyTerritoryStr = dutyTerritorys.stream().map(SysDictItem::getItemValue).distinct().collect(Collectors.joining(","));
}
}
QueryWrapper<ProjectLawsInventoryEO> queryWrapper = QueryGenerator.initQueryWrapper(projectLawsInventoryEO, req.getParameterMap());
queryWrapper.orderByDesc("create_time","serial_number");
if (StringUtils.isNotEmpty(dutyTerritoryStr)) {
String finalDutyTerritoryStr = dutyTerritoryStr.replaceAll("\\*","");
queryWrapper.and(query -> {
query.lambda().like(ProjectLawsInventoryEO::getDutyTerritory, finalDutyTerritoryStr);
if(StringUtils.contains(finalDutyTerritoryStr,",")){
String[] dutyTerritoryArr = finalDutyTerritoryStr.split(",");
for (String duty : dutyTerritoryArr) {
query.or(q -> {
q.like("duty_territory",duty);
});
}
}
});
}
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
int isProjectRole = Integer.parseInt(projectLawsInventoryEO.getRoleCode());
if(isProjectRole != Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue())
&& isProjectRole != Integer.parseInt(ProjectRoleEnum.MANAGER.getValue())
&& isProjectRole != Integer.parseInt(ProjectRoleEnum.ADMIN.getValue())
&& isProjectRole != Integer.parseInt(ProjectRoleEnum.VIEWER.getValue())){
// 创建查询权限
this.createQueryPermission(isProjectRole,currentUser,queryWrapper);
}
Page<ProjectLawsInventoryEO> page = new Page<ProjectLawsInventoryEO>(pageNo, pageSize);
IPage<ProjectLawsInventoryEO> pageList = this.page(page, queryWrapper);
List<ProjectLawsInventoryEO> result = pageList.getRecords();
if (isProjectRole == Integer.parseInt(ProjectRoleEnum.VIEWER.getValue())) {
//查当前用户Viewer对应责任领域
List<String> dutyTerritoryList = this.projectUserDutyTerritoryService.queryDutyTerritoryByUserId(currentUser.getId());
if (ObjectUtils.isNotEmpty(dutyTerritoryList)) {
result = result.stream().filter(e -> dutyTerritoryList.contains(e.getDutyTerritory())).collect(Collectors.toList());
} else {
result = new ArrayList<>();
}
}
this.dataDispose(result,currentUser,isProjectRole,projectLawsInventoryEO.getCut());
this.dataDictDispose(result,projectLawsInventoryEO.getCut());
//表头排序
result = this.hearSort(projectLawsInventoryEO, result);
return pageList;
}
@Override
public Result<?> finalizationVerify(Map<String, Object> params) {
boolean result = false; // 返回true可以定版返回false 不能定版
String projectLibraryId = (String) params.get("projectLibraryId");
if(StringUtils.isEmpty(projectLibraryId)){
throw new JeroBootException("项目库id不能为空,请检查!");
}
QueryWrapper<ProjectLawsInventoryEO> pliQueryWrap = new QueryWrapper<>();
pliQueryWrap.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId,projectLibraryId);
List<ProjectLawsInventoryEO> pliEoList = this.list(pliQueryWrap);
if(CollectionUtils.isNotEmpty(pliEoList)){
for (ProjectLawsInventoryEO pliEo : pliEoList) {
String designFlowStatus = pliEo.getDesignFlowStatus();
String verifyFlowStatus = pliEo.getVerifyFlowStatus();
boolean designFlowStatusFlag = (
StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue())
|| StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue())
|| StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.CONFORMITY.getValue())
|| StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.INCONFORMITY.getValue())
|| StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.TO_TRACK.getValue())
|| StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.UNINVOLVED.getValue())
);
boolean verifyFlowStatusFlag = (
StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue())
|| StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue())
|| StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.CONFORMITY.getValue())
|| StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.INCONFORMITY.getValue())
|| StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.TO_TRACK.getValue())
|| StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.UNINVOLVED.getValue())
);
if(designFlowStatusFlag && verifyFlowStatusFlag){
result = true;
}else {
result = false;
break;
}
}
}
return Result.OK(result);
}
@Override
public Map<String, List<Map<String, Object>>> queryDutyPersonByProjectId(Map<String, Object> params) {
Map<String, List<Map<String, Object>>> result = new HashMap<>();
@@ -1518,7 +1518,15 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
//任务确认统计
List<Map<String,Object>> taskToConfirmMapList = this.projectLawsInventoryEOService.getTaskToConfirmStatistics(projectLawsInventoryEOList);
int taskAffirmStatusCount = 0;
if(CollectionUtils.isNotEmpty(taskToConfirmMapList)){
//taskAffirmStatusCount
for (Map<String, Object> taskToConfirm : taskToConfirmMapList) {
taskAffirmStatusCount += (int) taskToConfirm.get("taskAffirmStatusCount");
}
}
taskToConfirmMap.put("taskToConfirmMapList",taskToConfirmMapList);
taskToConfirmMap.put("count",taskAffirmStatusCount);
result.put("taskToConfirmMap",taskToConfirmMap);
//当前项目状态统计 获取一个 最差的结果 统计的数据 就是studio看到的数据
@@ -1549,12 +1557,26 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
//设计符合性
List<Map<String,Object>> designComplianceMapList = this.projectLawsInventoryEOService.getDesignComplianceStatistice(projectLawsInventoryEOList);
int designFlowTaskStatusCount = 0;
if(CollectionUtils.isNotEmpty(designComplianceMapList)){
for (Map<String, Object> designCompliance : designComplianceMapList) {
designFlowTaskStatusCount += (int) designCompliance.get("designFlowTaskStatusCount");
}
}
designComplianceMap.put("designComplianceMapList",designComplianceMapList);
designComplianceMap.put("count",designFlowTaskStatusCount);
result.put("designComplianceMap",designComplianceMap);
//验证符合性
List<Map<String,Object>> verifyComplianceMapList = this.projectLawsInventoryEOService.getVerifyComplianceStatistice(projectLawsInventoryEOList);
int verifyFlowTaskStatusCount = 0;
if(CollectionUtils.isNotEmpty(verifyComplianceMapList)){
for (Map<String, Object> verifyCompliance : verifyComplianceMapList) {
verifyFlowTaskStatusCount += (int) verifyCompliance.get("verifyFlowTaskStatusCount");
}
}
verifyComplianceMap.put("verifyComplianceMapList",verifyComplianceMapList);
verifyComplianceMap.put("count",verifyFlowTaskStatusCount);
result.put("verifyComplianceMap",verifyComplianceMap);
//认证进度统计
@@ -1594,12 +1616,26 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
if(CollectionUtils.isNotEmpty(pciEoList)){
// 认证清单-任务确认统计
List<Map<String,Object>> rzTaskToConfirmMapList = this.projectCertificationInventoryEOService.getTaskToConfirmStatistics(pciEoList);
int taskAffirmStatusCount = 0;
if(CollectionUtils.isNotEmpty(rzTaskToConfirmMapList)){
for (Map<String, Object> rzTaskToConfirm : rzTaskToConfirmMapList) {
taskAffirmStatusCount += (int) rzTaskToConfirm.get("taskAffirmStatusCount");
}
}
rzTaskToConfirmMap.put("rzTaskToConfirmMapList",rzTaskToConfirmMapList);
rzTaskToConfirmMap.put("count",taskAffirmStatusCount);
result.put("rzTaskToConfirmMap",rzTaskToConfirmMap);
// Pre-Homo 统计
List<Map<String,Object>> prehomoMapList = this.projectCertificationInventoryEOService.getPrehomoStatistice(pciEoList);
int preHomoCount = 0;
if (CollectionUtils.isNotEmpty(prehomoMapList)) {
for (Map<String, Object> prehomo : prehomoMapList) {
preHomoCount += (int) prehomo.get("taskAffirmStatusCount");
}
}
prehomoMap.put("prehomoMapList",prehomoMapList);
prehomoMap.put("count",preHomoCount);
result.put("prehomoMap",prehomoMap);
// 认证进度 统计
@@ -1609,6 +1645,28 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
certificationProgressMap.put("allMapList",allMapList);// 全部
certificationProgressMap.put("carMapList",carMapList);// 整车
certificationProgressMap.put("partMapList",partMapList);// 零部件
int allCount = 0;
if(CollectionUtils.isNotEmpty(allMapList)){
for (Map<String, Object> all : allMapList) {
allCount += (int) all.get("certificationProgressCount");
}
}
int carCount = 0;
if(CollectionUtils.isNotEmpty(carMapList)){
for (Map<String, Object> car : carMapList) {
carCount += (int) car.get("certificationProgressCount");
}
}
int partCount = 0;
if(CollectionUtils.isNotEmpty(partMapList)){
for (Map<String, Object> part : partMapList) {
partCount += (int) part.get("certificationProgressCount");
}
}
certificationProgressMap.put("allCount",allCount);// 全部
certificationProgressMap.put("carCount",carCount);// 整车
certificationProgressMap.put("partCount",partCount);// 零部件
result.put("certificationProgressMap",certificationProgressMap);
}
@@ -1816,6 +1874,7 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
}
}
if(CollectionUtils.isNotEmpty(dataList)){
this.projectDetailsStatisticsGroupByTerritoryHearSort(dataList,params);
result.put("dataList",dataList);
return result;
}
@@ -1977,11 +2036,50 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
dataList.add(dataMap);
}
}
this.projectDetailsStatisticsGroupByTerritoryHearSort(dataList,params);
result.put("dataList",dataList);
}
return result;
}
/**
* 项目库详情统计-根据责任领域分组统计数据-表头排序
* @param dataList
* @param params
*/
private void projectDetailsStatisticsGroupByTerritoryHearSort(List<Map<String, Object>> dataList,Map<String,Object> params) {
String orderByField = (String) params.get("orderByField");
String orderBy = (String) params.get("orderBy");
if(CollectionUtils.isNotEmpty(dataList) && StringUtils.isNotEmpty(orderByField) && StringUtils.isNotEmpty(orderBy)){
Collator comparator = Collator.getInstance(Locale.CHINESE);
Collections.sort(dataList,(data1,data2)->{
String param1 = "";
String param2 = "";
// 一级责任领域名称
if("dutyTerritoryName".equals(orderByField)){
param1 = StringUtils.isNotEmpty((String) data1.get("dutyTerritoryName")) ? (String) data1.get("dutyTerritoryName") : "";
param2 = StringUtils.isNotEmpty((String) data2.get("dutyTerritoryName")) ? (String) data2.get("dutyTerritoryName") : "";
}
// 数量
if("amount".equals(orderByField)){
param1 = StringUtils.isNotEmpty(String.valueOf(data1.get("amount"))) ? String.valueOf(data1.get("amount")) : "";
param2 = StringUtils.isNotEmpty(String.valueOf(data2.get("amount"))) ? String.valueOf(data2.get("amount")) : "";
}
// 占比
if("percentage".equals(orderByField)){
param1 = StringUtils.isNotEmpty((String) data1.get("percentage")) ? (String) data1.get("percentage") : "";
param2 = StringUtils.isNotEmpty((String) data2.get("percentage")) ? (String) data2.get("percentage") : "";
}
if(OrderEnum.POSITIVE.getValue().equals(orderBy)){
return comparator.compare(param1,param2);
}else if(OrderEnum.REVERSE.getValue().equals(orderBy)){
return comparator.compare(param2,param1);
}
return 0;
});
}
}
@Override
public void exportProjectDetailsStatisticsGroupByTerritoryXls(HttpServletResponse response, HttpServletRequest request, Map<String, Object> params) {
Map<String, Object> projectDetailsStatisticsGroupByTerritory = getProjectDetailsStatisticsGroupByTerritory(params);
@@ -1990,7 +2088,7 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
String sheetName = "";
String title = "";
if (StringUtils.equals(cut,CutEnum.CN.getValue())) {
title = "责任领域,数量,占比";
title = "责任领域,数量,责任领域内占比";
if(StringUtils.equals(OperatorTypeEnum.QUERY_FG_TASK_TO_CONFIRM_STATISTICS.getValue(),operatorType)){
sheetName = "法规任务确认";
}else if(StringUtils.equals(OperatorTypeEnum.QUERY_DESIGN_STATISTICS.getValue(),operatorType)){
@@ -2024,7 +2122,7 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
sheetName = "认证进度";
}*/
}else if (StringUtils.equals(cut,CutEnum.EN.getValue())) {
title = "Responsible Field,Quantity,Proportion";
title = "Responsible Field,Quantity,Proportion within the area of responsibility";
if(StringUtils.equals(OperatorTypeEnum.QUERY_FG_TASK_TO_CONFIRM_STATISTICS.getValue(),operatorType)){
sheetName = "Regulation Task Confirmation";
}else if(StringUtils.equals(OperatorTypeEnum.QUERY_DESIGN_STATISTICS.getValue(),operatorType)){
@@ -30,6 +30,7 @@ import com.jero.modules.system.service.IProjectUserBrandService;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.system.service.impl.SysDictItemServiceImpl;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
@@ -38,6 +39,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.shiro.SecurityUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -49,6 +51,7 @@ import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.stream.Collectors;
/**
@@ -56,6 +59,7 @@ import java.util.stream.Collectors;
* @date 2022/5/13 9:59
* @auth zhn
*/
@Slf4j
@Service
public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService {
private static DecimalFormat df = new DecimalFormat("#.00");
@@ -98,7 +102,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
*/
@SneakyThrows
@Override
public List<Map<String,Object>> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req) {
public List<Map<String,Object>> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req,boolean queryAllProject) {
if(StringUtils.isNotBlank(projectLibraryBase.getProjectName())){
String s = projectLibraryBase.getProjectName().replaceAll("\\*", "");
projectLibraryBase.setProjectName(s);
@@ -107,6 +111,13 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//项目库信息
List<ProjectLibraryBase> projectLibraryBaseList = projectLibraryBaseService.getList(projectLibraryBase);
if(!queryAllProject){
// 如果不是查询所有项目只查询主项目
projectLibraryBaseList = projectLibraryBaseList.stream().filter(plbEo -> {
boolean flag = (StringUtils.isEmpty(plbEo.getParentId()) || StringUtils.equals(plbEo.getProjectVersion(),"00"));
return flag;
}).collect(Collectors.toList());
}
List<List<TimeNodeVO>> list = new ArrayList<>();
List<Map<String,Object>> result = new ArrayList<>();
@@ -538,12 +549,25 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
@Override
public void exportXls(HttpServletResponse response, HttpServletRequest request,ProjectLibraryBase projectLibraryBase) {
public void exportXls(HttpServletResponse response, HttpServletRequest request,ProjectLibraryBase projectLibraryBase,boolean queryAllProject) {
long startTime = System.currentTimeMillis();
String fileName = "";
String cut = projectLibraryBase.getCut();
OutputStream ops = null;
HSSFWorkbook workbook = new HSSFWorkbook();
if(StringUtils.isNotBlank(projectLibraryBase.getProjectName())){
String s = projectLibraryBase.getProjectName().replaceAll("\\*", "");
projectLibraryBase.setProjectName(s);
}
List<ProjectLibraryBase> plbEoList = this.projectLibraryBaseService.getList(projectLibraryBase);
if(!queryAllProject){
// 如果不是查询所有项目只查询主项目
plbEoList = plbEoList.stream().filter(plbEo -> {
boolean flag = (StringUtils.isEmpty(plbEo.getParentId()) || StringUtils.equals(plbEo.getProjectVersion(),"00"));
return flag;
}).collect(Collectors.toList());
}
List<SysDictItem> dictItemList = sysDictItemServiceImpl.selectItemsByDictCode("region");
for (ProjectLibraryBase libraryBase : plbEoList) {
targetMarket(projectLibraryBase, dictItemList, libraryBase);
@@ -552,10 +576,49 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
List<ProjectCertificationInventoryEO> pciEoList = this.projectCertificationInventoryEOService.list();
List<ProjectTaskPlanning> ptpEoList = this.projectTaskPlanningService.list();
List<ParamsManifestEO> pmEoList = this.paramsManifestEOService.list();
log.info("一阶段消耗时间:" + (System.currentTimeMillis() - startTime));
List<ParamsCollectManifestEO> pcmEoList = this.paramsCollectManifestEOService.getList(null);
this.exportCrossProjectProgress(workbook,projectLibraryBase,plbEoList,pliEoList,pciEoList,pmEoList,pcmEoList,ptpEoList);
this.exportOverviewCrossProjectProgress(workbook,projectLibraryBase,plbEoList,pliEoList,pciEoList,pmEoList,pcmEoList,ptpEoList);
log.info("二阶段消耗时间:" + (System.currentTimeMillis() - startTime));
// this.exportCrossProjectProgress(workbook,projectLibraryBase,plbEoList,pliEoList,pciEoList,pmEoList,pcmEoList,ptpEoList);
// this.exportOverviewCrossProjectProgress(workbook,projectLibraryBase,plbEoList,pliEoList,pciEoList,pmEoList,pcmEoList,ptpEoList);
HSSFSheet corssProjectProgressSheet = createCorssProjectProgressSheet(workbook, projectLibraryBase);
HSSFSheet overviewCrossProjectProgressSheet = this.createOverviewCrossProjectProgressSheet(workbook, projectLibraryBase);
CellStyle cellStyleTitle = workbook.createCellStyle();
cellStyleTitle.setAlignment(HorizontalAlignment.CENTER);
cellStyleTitle.setVerticalAlignment(VerticalAlignment.CENTER);
// 多线程代码
// 创建线程一
List<ProjectLibraryBase> finalPlbEoList = plbEoList;
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
exportCrossProjectProgressSetData(finalPlbEoList, corssProjectProgressSheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList);
}
});
// 创建线程二
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
exportOverviewCrossProjectProgressSetData(finalPlbEoList, overviewCrossProjectProgressSheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList,cellStyleTitle);
}
});
// 启动线程一和线程二
thread1.start();
thread2.start();
// 等待线程一和线程二执行完毕
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
response.setHeader("Content-Disposition",
"attachment; filename=" + fileName);
@@ -573,6 +636,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
}finally {
IOUtils.closeQuietly(ops);
}
log.info("总消耗时间:" + (System.currentTimeMillis() - startTime));
}
/**
@@ -586,7 +650,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
* @param pcmEoList
* @param ptpEoList
*/
private void exportCrossProjectProgress(HSSFWorkbook workbook,
private void exportCrossProjectProgress(HSSFSheet sheet,
ProjectLibraryBase projectLibraryBase,
List<ProjectLibraryBase> plbEoList,
List<ProjectLawsInventoryEO> pliEoList,
@@ -594,6 +658,11 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
List<ParamsManifestEO> pmEoList,
List<ParamsCollectManifestEO> pcmEoList,
List<ProjectTaskPlanning> ptpEoList) {
this.exportCrossProjectProgressSetData(plbEoList, sheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList);
}
@NotNull
private HSSFSheet createCorssProjectProgressSheet(HSSFWorkbook workbook, ProjectLibraryBase projectLibraryBase) {
String cut = projectLibraryBase.getCut();
String sheetName = "项目进度";
String firstTitle = "项目," +
@@ -682,8 +751,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
secondRowCell.setCellValue(secondTitleArr[i-1]);
}
}
this.exportCrossProjectProgressSetData(plbEoList, sheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList);
return sheet;
}
/**
@@ -707,6 +775,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
List<ProjectTaskPlanning> ptpEoList) {
int dataIndex = 2;
for (ProjectLibraryBase plbEo : plbEoList) {
long startTime = System.currentTimeMillis();
Row dataRow = sheet.createRow(dataIndex);
dataRow.createCell(0).setCellValue(plbEo.getShowName());
@@ -900,6 +969,8 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
dataRow.createCell(55).setCellValue(parameterCollectingPercentageStr + percentSign);
dataRow.createCell(56).setCellValue(certificationSubmissionStr);
dataIndex ++;
log.info("11111处理"+ dataIndex +"个项目消耗时间:" + (System.currentTimeMillis() - startTime));
}
}
@@ -914,14 +985,19 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
* @param pcmEoList
* @param ptpEoList
*/
private void exportOverviewCrossProjectProgress(HSSFWorkbook workbook,
private void exportOverviewCrossProjectProgress(HSSFSheet sheet,
ProjectLibraryBase projectLibraryBase,
List<ProjectLibraryBase> plbEoList,
List<ProjectLawsInventoryEO> pliEoList,
List<ProjectCertificationInventoryEO> pciEoList,
List<ParamsManifestEO> pmEoList,
List<ParamsCollectManifestEO> pcmEoList,
List<ProjectTaskPlanning> ptpEoList) {
List<ProjectTaskPlanning> ptpEoList,
CellStyle cellStyleTitle) {
this.exportOverviewCrossProjectProgressSetData(plbEoList, sheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList,cellStyleTitle);
}
public HSSFSheet createOverviewCrossProjectProgressSheet(HSSFWorkbook workbook, ProjectLibraryBase projectLibraryBase){
String cut = projectLibraryBase.getCut();
String sheetName = "项目进度概览";
String firstTitle = "项目,R&H Studio,法规符合性管理,认证活动管理";
@@ -975,7 +1051,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
secondRowCell.setCellValue(secondTitleArr[i]);
}
}
this.exportOverviewCrossProjectProgressSetData(plbEoList, sheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList,cellStyleTitle);
return sheet;
}
/**
@@ -1001,6 +1077,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
CellStyle cellStyleTitle) {
int dataIndex = 2;
for (ProjectLibraryBase plbEo : plbEoList) {
long startTime = System.currentTimeMillis();
List<ProjectTaskPlanning> ptpEoListTemp = ptpEoList.stream().filter(ptpEo -> StringUtils.equals(ptpEo.getProjectId(), plbEo.getId())).collect(Collectors.toList());
String legalTaskConfirmationStr = "";
String designDeadlineStr = "";
@@ -1131,6 +1208,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
}
}
dataIndex += 2;
log.info("22222处理"+ dataIndex +"个项目消耗时间:" + (System.currentTimeMillis() - startTime));
}
}
+15 -6
View File
@@ -180,18 +180,18 @@
}
.ant-table-column-title {
font-weight: bold!important;
font-weight: bold !important;
}
.ant-table-thead > tr > th {
background: #f3f6f6!important;
padding-top: 12px!important;
padding-bottom: 12px!important;
background: #f3f6f6 !important;
padding-top: 12px !important;
padding-bottom: 12px !important;
}
.ant-table-tbody > tr > td {
padding-top: 12px!important;
padding-bottom: 12px!important;
padding-top: 12px !important;
padding-bottom: 12px !important;
}
.ant-tooltip-inner {
@@ -206,4 +206,13 @@
.ant-menu-inline-collapsed-tooltip a {
color: #333 !important;
}
.page .ant-select-selection--single {
height: 32px !important;
line-height: 32px !important;
}
.page .ant-select-selection__rendered{
height: 32px !important;
line-height: 32px !important;
}
</style>
+12 -8
View File
@@ -735,7 +735,7 @@ module.exports = {
regulatoryTaskConfirmation: 'Regulation Task Confirmed ',
certificationStart: 'Homo Completed ',
preHomoCompletion: 'Pre-Homo Completed ',
certificationEnd: 'Homo Approved ',
certificationEnd: 'Homo KO',
directoryName: 'Catalogue Name',
batch: 'Batch',
uploadTime: 'Upload Time',
@@ -1447,12 +1447,12 @@ module.exports = {
select:'select',
onlyDataWithProcessStatusDeleted:'Only data with process status of list to be released and approved can be deleted',
complianceCertificationProgram:'Compliance & Homologation Program',
listPublishing:'List Release',
responsibilityConfirmation:'Responsibility Confirm',
designVerification:'Design Check',
getStarted:'Pre-Homo Starts',
certificationStartOne:'Homo Starts',
verificationAndVerification:'Validation Check',
listPublishing:'List Publishing',
responsibilityConfirmation:'Responsibility Confirmation',
designVerification:'Design Verification',
getStarted:'Get Started',
certificationStartOne:'Certification Start',
verificationAndVerification:'Verification And Verification',
projectInterfacePersonRegulationEngineerSetting:'Project Interface Person - Regulation Engineer Setting',
projectInterfacePersonCertificationEngineerSetting:'Project Interface Person - Certification Engineer Setting',
registrationnumber:'Product registration number',
@@ -1705,7 +1705,7 @@ module.exports = {
softwareversion:'Software version',
returntofill:'Return to fill',
thereAreCurrentlyNoRegulationsToHandle:'No regulations to be processed now',
certificationSubmission:'Application Submitted',
certificationSubmission:'Certification Submission',
upgradecompletion:'Upgrade completion',
implementedupgrade:'Whether the implemented upgrade is consistent with the record',
numberofvehicles:'Number of vehicles that have completed upgrades',
@@ -1827,4 +1827,8 @@ module.exports = {
proportion:'Proportion',
projectProgressStatistics:'Project Progress Statistics',
GRPSystemProjectProgressStatistics:'GRP system project progress statistics',
statisticalNodes:'Statistical Nodes',
proportionWithInTheAreaOfResponsibility:'Proportion within the area of responsibility',
contentsearch:'Content Search',
masterProject:'Master Project',
}
+4
View File
@@ -1928,4 +1928,8 @@ module.exports = {
proportion:'占比',
projectProgressStatistics:'项目进度统计',
GRPSystemProjectProgressStatistics:'GRP系统项目进度统计',
statisticalNodes:'统计节点',
proportionWithInTheAreaOfResponsibility:'责任领域内占比',
contentsearch:'内容搜索',
masterProject:'主项目',
}
@@ -5,6 +5,7 @@
:mode="isSingleChoice?'':'multiple'"
class="itemModelStand-input"
show-search
:allowClear="isSingleChoice ? true : false"
:label-in-value="isSingleChoice ? false:true"
:value="selectValue"
:placeholder="$t('PleaseSelect')+query.db_field_txt"
@@ -147,6 +148,8 @@
let username = []
if (this.selectValue.length > 0) {
this.selectValue.forEach(res => {
let reg = /[\t\r\f\n\s]*/g
res.label = res.label.replace(reg, '')
id.push(res.key)
username.push(res.label)
})
@@ -75,6 +75,9 @@
<a-input-number v-model="form.sortOrder" :placeholder="$t('PleaseEnterDisplayOrder')" style="width: 100%"
:min="1" :max="99999" :formatter="limitNumber" :parser="limitNumber"/>
</a-form-model-item>
<a-form-model-item :label="$t('statisticalNodes')" prop="statNode" v-if="record.id == '1513417672023441409'">
<a-input v-model.trim="form.statNode" :placeholder="$t('pleaseEnter')+$t('statisticalNodes')"/>
</a-form-model-item>
<a-form-model-item :label="$t('describe')" prop="description">
<a-input v-model.trim="form.description" :placeholder="$t('PleaseEnterDescription')"/>
</a-form-model-item>
@@ -139,6 +142,14 @@
{ min: 1, max: 100, message: this.$t('cantExeed') + '100' + this.$t('characters'), trigger: 'blur' },
{ validator: this.test }
],
statNode:[
{ required: true, message: this.$t('statisticalNodes')+ this.$t('cannotEmpty'), trigger: 'blur' },
{
max: 100,
message: this.$t('statisticalNodes') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
trigger: 'blur'
}
],
valueType:[
{ required: true, message: this.$t('type') + this.$t('cannotEmpty'), trigger: 'change' },
],
@@ -314,9 +314,22 @@
<span v-else>--</span>
</span>
</a-table>
<div class="buttom-box" v-if="dataSource && dataSource.length > 0">
{{$t('total')+' '+this.dataSource.length+' '+ $t('strip')}}
<div class="page" v-if="dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:pageSizeOptions="['50','100','200','300']"
:current="pageNo"
@change="onChangeSize"
@showSizeChange="SizeChange"
/>
</div>
<!-- <div class="buttom-box" v-if="dataSource && dataSource.length > 0">-->
<!-- {{$t('total')+' '+this.dataSource.length+' '+ $t('strip')}}-->
<!-- </div>-->
</div>
</a-card>
</div>
@@ -403,6 +416,9 @@
orderBy: '1',
istable: true,
orderByField: '',
pageNo: 1,
pageSize: 50,
total: 0,
downLoadFileUrl: window._CONFIG['domianPreviewURL'] + '/sys/common/download',
downLoadImgUrl: window._CONFIG['domianWebImgURL'] + '/sys/common/download',
dataSourceFile: [],
@@ -424,7 +440,7 @@
url: {
addModelList: '/dummy/dummyInventoryInfoEO/queryPageDummy',
queryConditionInventory: '/dummy/dummyInventoryInfoEO/queryConditionInventory',
list: '/dummy/dummyInventoryInfoEO/list',
list: '/dummy/dummyInventoryInfoEO/page',
addModel: '/dummy/dummyInventoryInfoEO/add',
editModel: '/dummy/dummyInventoryInfoEO/edit',
deleteBatch: '/dummy/dummyInventoryInfoEO/deleteBatch',
@@ -1231,6 +1247,15 @@
}
})
},
onChangeSize(page, pageSize) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList() {
if (this.queryParam.xin1Che1Xing2Shi2Shi1Ri4Qi1String && this.queryParam.xin1Che1Xing2Shi2Shi1Ri4Qi1String instanceof Array) {
this.queryParam.xin1Che1Xing2Shi2Shi1Ri4Qi1String = this.queryParam.xin1Che1Xing2Shi2Shi1Ri4Qi1String.join(',')
@@ -1243,12 +1268,21 @@
...this.queryParamQuery,
orderBy: this.orderBy,
orderByField: this.orderByField,
dummyInventoryBaseId: this.$route.query.id
dummyInventoryBaseId: this.$route.query.id,
pageNo: this.pageNo,
pageSize: this.pageSize
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
this.dataSource = res.result || []
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
// this.dataSource = res.result || []
if (this.dataSource.length == 0) {
this.$nextTick(() => {
let anttablebody = document.getElementsByClassName('ant-table-body')
@@ -1727,6 +1761,11 @@
padding-left: 16px!important;
border-right: 1px solid #e8e8e8;
}
.page {
text-align: right;
margin-top: 20px;
margin-bottom: 20px;
}
</style>
<style lang="less">
.popconfirm {
@@ -48,6 +48,40 @@
:maskClosable="false"
@close="handleCancel"
>
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="12" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('contentsearch')">
<span>{{$t('contentsearch')}}</span>
</div>
<a-input
class="box-input"
:placeholder="$t('PleaseEnter')+$t('contentsearch')"
v-model='queryParam.realname' />
</div>
</a-col>
<a-col :md="12" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('module')">
<span>{{$t('module')}}</span>
</div>
<j-dict-select-tag class="box-input" type="select"
v-model="queryParam.module"
dictCode="O_T_A_che1_xing2_mo2_kuai4"
:placeholder="$t('PleaseSelect')+$t('module')"/>
</div>
</a-col>
<span style="float: right;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button class="box-button" @click="searchReset">{{$t('reset')}}</a-button>
<a-button class="box-button" style="margin-left: 8px" type="primary" @click="searchQuery">{{$t('query')}}</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!-- :components="drag(columnshistory,'columnshistory')"-->
<a-table
class="table"
@@ -118,9 +152,16 @@ export default {
data() {
return {
title: '',
queryParam: {
projectName:this.$route.query.projectName?this.$route.query.projectName:''
queryParam: {},
labelCol: {
xs: { span: 24 },
sm: { span: 7 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 14 }
},
rules: {},
visible:false,
confirmLoading: false,
pageNohistory: 1,
@@ -198,6 +239,7 @@ export default {
},
bussLogList(val) {
let query = {
...this.queryParam,
pageNo: this.pageNohistory,
pageSize: this.pageSizehistory,
otaId:localStorage.getItem('otaId')
@@ -213,6 +255,13 @@ export default {
}
})
},
searchQuery() {
this.bussLogList()
},
searchReset() {
this.queryParam = {}
this.bussLogList()
},
handleOk() {
this.pageNohistory = 1
this.visible = false
@@ -48,6 +48,40 @@
:maskClosable="false"
@close="handleCancel"
>
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="12" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('contentsearch')">
<span>{{$t('contentsearch')}}</span>
</div>
<a-input
class="box-input"
:placeholder="$t('PleaseEnter')+$t('contentsearch')"
v-model='queryParam.realname' />
</div>
</a-col>
<a-col :md="12" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('module')">
<span>{{$t('module')}}</span>
</div>
<j-dict-select-tag class="box-input" type="select"
v-model="queryParam.module"
dictCode="O_T_A_che1_xing2_mo2_kuai4"
:placeholder="$t('PleaseSelect')+$t('module')"/>
</div>
</a-col>
<span style="float: right;overflow: hidden;margin-right: 17px" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button class="box-button" @click="searchReset">{{$t('reset')}}</a-button>
<a-button class="box-button" style="margin-left: 8px" type="primary" @click="searchQuery">{{$t('query')}}</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!-- :components="drag(columnshistory,'columnshistory')"-->
<a-table
class="table"
@@ -118,9 +152,17 @@ export default {
data() {
return {
title: '',
queryParam: {
projectName:this.$route.query.projectName?this.$route.query.projectName:''
queryParam: {},
labelCol: {
xs: { span: 24 },
sm: { span: 7 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 14 }
},
rules: {},
spinLoading: false,
visible:false,
confirmLoading: false,
pageNohistory: 1,
@@ -199,6 +241,7 @@ export default {
},
bussLogList(val) {
let query = {
...this.queryParam,
pageNo: this.pageNohistory,
pageSize: this.pageSizehistory,
otaId:localStorage.getItem('otaId')
@@ -214,6 +257,13 @@ export default {
}
})
},
searchQuery() {
this.bussLogList()
},
searchReset() {
this.queryParam = {}
this.bussLogList()
},
handleOk() {
this.pageNohistory = 1
this.visible = false
@@ -302,7 +352,7 @@ export default {
.title-text {
width: 20%;
min-width: 110px;
min-width: 90px;
color: #000F16;
display: inline-block;
font-weight: 500;
@@ -6,6 +6,27 @@
{{$t('ParameteItemCollectionList')}}({{$t(this.$route.query.projectName)}}) {{$t(this.$route.query.title)}}
</span>
</div>
<div class="Virtual-detail-title-right">
<a-popconfirm overlayClassName="popconfirmDetailsText"
:visible="visible"
@visibleChange="handleVisibleChange"
placement="bottomRight">
<template slot="title" id="popconfirmDetails">
<div @click="roleSwitchingClick(item.value)"
v-for="(item,index) in RoleType"
class="operator-text-title"
:class="{'operator-text-title-color':item.label == rolename ? true : false}"
:title="item.label">
{{ item.label }}
</div>
<JLoading :loading="JTextLoading"></JLoading>
</template>
<div class="operator-text" style="position: relative;margin-right: 0">
<a-icon type="select"/>
{{rolename}}
</div>
</a-popconfirm>
</div>
</div>
<div style="padding-top: 54px;background: #fff;height: 100%">
<div class="detail-content" style="height: 100%">
@@ -33,28 +54,28 @@
v-model="formInline.paramsName"></a-input>
</div>
</a-col>
<!-- <a-col :md="6" :sm="8">-->
<!-- <div class="box-title-text">-->
<!-- <div class="title-text" :title="$t('NareaOfResponsibility')">-->
<!-- <span>{{$t('NareaOfResponsibility')}}</span>-->
<!-- </div>-->
<!-- <j-multi-select-tag class="box-input" v-model="formInline.dutyTerritory"-->
<!-- :placeholder="$t('PleaseSelect')+$t('NareaOfResponsibility')"-->
<!-- :type="'select'"-->
<!-- :triggerChange="false" :dictCode="'duty_territory'"/>-->
<!-- </div>-->
<!-- </a-col>-->
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('certificationCategory')">
<span>{{$t('certificationCategory')}}</span>
</div>
<j-dict-select-tag class="box-input" v-model="formInline.certCategory"
:placeholder="$t('PleaseSelect')+$t('certificationCategory')"
:type="'select'"
:triggerChange="false" :dictCode="'cert_category'"/>
</div>
</a-col>
<!-- <a-col :md="6" :sm="8">-->
<!-- <div class="box-title-text">-->
<!-- <div class="title-text" :title="$t('NareaOfResponsibility')">-->
<!-- <span>{{$t('NareaOfResponsibility')}}</span>-->
<!-- </div>-->
<!-- <j-multi-select-tag class="box-input" v-model="formInline.dutyTerritory"-->
<!-- :placeholder="$t('PleaseSelect')+$t('NareaOfResponsibility')"-->
<!-- :type="'select'"-->
<!-- :triggerChange="false" :dictCode="'duty_territory'"/>-->
<!-- </div>-->
<!-- </a-col>-->
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('certificationCategory')">
<span>{{$t('certificationCategory')}}</span>
</div>
<j-dict-select-tag class="box-input" v-model="formInline.certCategory"
:placeholder="$t('PleaseSelect')+$t('certificationCategory')"
:type="'select'"
:triggerChange="false" :dictCode="'cert_category'"/>
</div>
</a-col>
<template v-if="toggleSearchStatus">
<a-col :md="6" :sm="8">
<div class="box-title-text">
@@ -269,9 +290,9 @@
{{$t('CompulsoryWithdrawal')}}
</div>
<!-- 列表设置-->
<!-- v-if="!this.$route.query.it"-->
<!-- v-if="!this.$route.query.it"-->
<a-popconfirm :visible="customizevisible" overlayClassName="popconfirmIndex"
placement="bottomRight" >
placement="bottomRight">
<template slot="title" id="popconfirmmize">
<div style="max-height:360px;overflow:scroll;overflow-x: auto;width: 211px">
<a-checkbox
@@ -283,13 +304,15 @@
>{{ $t('selectAll') }}
</a-checkbox>
<a-checkbox-group @change="onChange" v-model="checkedList" class="customize-text">
<a-checkbox class="customize-text-title" :disabled="item.disabled" v-for="(item, key) in customizeList"
<a-checkbox class="customize-text-title" :disabled="item.disabled"
v-for="(item, key) in customizeList"
:key="key" :value="item.field">{{ item.db_field_txt }}
</a-checkbox>
</a-checkbox-group>
<div class="drawer-bootom-button">
<a-button @click="cancel" style="margin-right: 16px">{{ $t('cancel') }}</a-button>
<a-button @click="handleSubmitcustomize" type="primary" :loading="confirmLoading">{{ $t('determine') }}
<a-button @click="handleSubmitcustomize" type="primary" :loading="confirmLoading">{{ $t('determine')
}}
</a-button>
</div>
</div>
@@ -300,31 +323,13 @@
</div>
</a-popconfirm>
<!-- 角色切换 -->
<!-- <div class="operator-text"-->
<!-- v-if="!this.$route.query.it"-->
<!-- @click="roleSwitchingClick">-->
<!-- <a-icon type="select"/>-->
<!-- {{ $t('roleSwitching') }} ({{ $t(this.rolename)}})-->
<!-- </div>-->
<a-popconfirm overlayClassName="popconfirmDetails"
:visible="visible"
@visibleChange="handleVisibleChange"
placement="bottomRight">
<template slot="title" id="popconfirmDetails">
<div @click="roleSwitchingClick(item.value)"
v-for="(item,index) in RoleType"
class="operator-text-title"
:class="{'operator-text-title-color':item.label == rolename ? true : false}"
:title="item.label">
{{ item.label }}
</div>
<JLoading :loading="JTextLoading"></JLoading>
</template>
<div class="operator-text" style="position: relative">
<a-icon type="select"/>
{{rolename}}
</div>
</a-popconfirm>
<!-- <div class="operator-text"-->
<!-- v-if="!this.$route.query.it"-->
<!-- @click="roleSwitchingClick">-->
<!-- <a-icon type="select"/>-->
<!-- {{ $t('roleSwitching') }} ({{ $t(this.rolename)}})-->
<!-- </div>-->
</div>
<div style="width: 100%">
<!-- 表格-10控件-->
@@ -868,7 +873,7 @@
// status: 2
// }
// ],
customizeList:[],
customizeList: [],
selectedRowKeys: [],
textLoading: false,
formInline: {},
@@ -885,7 +890,7 @@
},
loading: false,
dataSource: [],
statuList:[],
statuList: [],
areaVisible: false, // 弹框的控制
configureareaVisible: false, // 配置的彈框
pageNo: 1,
@@ -1118,7 +1123,7 @@
}
},
roleSwitchingClick(roleCode) {
console.log(roleCode,1111)
console.log(roleCode, 1111)
this.JTextLoading = true
// this.visibleRoleSwitching = true
this.$nextTick(() => {
@@ -1163,34 +1168,34 @@
} else {
// this.$refs.ruleFormRoleSwitching.validate(valid => {
// if (valid) {
let query = {
userType: roleCode,
paramsManifestId: this.$route.query.id,
projectId: this.$route.query.projectId,
userId: this.userInfo().id
}
this.confirmLoadingRoleSwitching = true
postAction('/params/userTypeLog/edit', query).then((res) => {
if (res.success) {
this.currentPersonRole = roleCode
this.$message.success(this.$t('OperationSuccessful'))
this.visibleRoleSwitching = false
this.confirmLoadingRoleSwitching = false
this.JTextLoading = false
this.visible = false
localStorage.setItem('currentPersonRole', JSON.stringify(roleCode))
this.RoleType.forEach((item, index) => {
if (item.value == this.currentPersonRole) {
this.rolename = item.label
}
})
this.selectedRowKeysValue = []
} else {
this.confirmLoadingRoleSwitching = false
this.JTextLoading = false
this.$message.warning(this.$t('operationFailed'))
let query = {
userType: roleCode,
paramsManifestId: this.$route.query.id,
projectId: this.$route.query.projectId,
userId: this.userInfo().id
}
this.confirmLoadingRoleSwitching = true
postAction('/params/userTypeLog/edit', query).then((res) => {
if (res.success) {
this.currentPersonRole = roleCode
this.$message.success(this.$t('OperationSuccessful'))
this.visibleRoleSwitching = false
this.confirmLoadingRoleSwitching = false
this.JTextLoading = false
this.visible = false
localStorage.setItem('currentPersonRole', JSON.stringify(roleCode))
this.RoleType.forEach((item, index) => {
if (item.value == this.currentPersonRole) {
this.rolename = item.label
}
})
this.selectedRowKeysValue = []
} else {
this.confirmLoadingRoleSwitching = false
this.JTextLoading = false
this.$message.warning(this.$t('operationFailed'))
}
})
// }
// })
}
@@ -1823,27 +1828,27 @@
this.selectedValue = this.checkedList
this.indeterminate = false
},
getcustomizeList(item){
getcustomizeList(item) {
let params = {
paramsManifestId: this.$route.query.id,
projectName:this.$route.query.projectName,
projectName: this.$route.query.projectName,
flag: '7'
}
getAction('params/collectManifest/getHeader', params).then((res) => {
if (res.success) {
let List = []
let sList = []
res.result.forEach((item,index) => {
if(!item.isLock){
if(item.headFieldCn == '操作'){
res.result.forEach((item, index) => {
if (!item.isLock) {
if (item.headFieldCn == '操作') {
item.field = 'operation'
item.disabled = true
}else if(item.headFieldCn == 'NIO编号' || item.headFieldCn == '参数名称'){
} else if (item.headFieldCn == 'NIO编号' || item.headFieldCn == '参数名称') {
item.disabled = true
}
List.push(item)
}
if(item.isLock) {
if (item.isLock) {
sList.push(item)
}
})
@@ -1851,7 +1856,7 @@
this.statuList = sList
}
})
if(item){
if (item) {
console.log(item)
this.checkedList = item
}
@@ -2222,7 +2227,7 @@
returnDataJurisdiction() {
// 退回的状态权限
let homoJurisdictionReturn = this.homoJurisdictionReturn()
console.log(homoJurisdictionReturn,'homoJurisdictionReturn')
console.log(homoJurisdictionReturn, 'homoJurisdictionReturn')
if (homoJurisdictionReturn == 1) {
this.returnData()
} else if (homoJurisdictionReturn == 0) {
@@ -2306,9 +2311,9 @@
})
let _this = this
let param = {
ids: _array.join(',') ,
paramsManifestId:this.$route.query.id,
projectId:this.$route.query.projectId,
ids: _array.join(','),
paramsManifestId: this.$route.query.id,
projectId: this.$route.query.projectId
}
let url = ''
@@ -2512,9 +2517,11 @@
.popconfirmIndex .anticon-exclamation-circle {
display: none !important;
}
::v-deep .ant-table-fixed-header .ant-table-body-inner {
overflow: visible;
}
popconfirmmize {
z-index: 999;
}
@@ -2530,6 +2537,7 @@
.popconfirmmize .ant-popover-message {
padding: 4px 0 36px !important;
}
::v-deep .ant-popover-buttons {
display: none !important;
}
@@ -2639,6 +2647,7 @@
.Required {
color: red;
}
.customize-text {
/*height: 1533px;*/
display: flex;
@@ -2653,6 +2662,7 @@
color: #040B29;
margin-bottom: 22px;
}
.drawer-bootom-button {
position: absolute;
bottom: 0;
@@ -2665,6 +2675,7 @@
background: #fff;
border-radius: 0 0 2px 2px;
}
.ant-table-placeholder {
padding: 0;
border-top: none;
@@ -2673,9 +2684,11 @@
.itemModelComment .ant-form-item-control-wrapper {
width: 100% !important;
}
.second {
padding: 0 !important;
}
.doc-detail {
background: #fff;
height: 100%;
@@ -2751,6 +2764,10 @@
line-height: 68px;
}
.Virtual-detail-title-right {
float: right;
}
.doc-detail-right {
width: 800px;
line-height: 68px;
@@ -2782,9 +2799,11 @@
.text-wraning {
word-break: break-word;
}
.operator-text-title-color {
color: #00B3BE;
}
</style>
<style lang='less'>
.popconfirmIndex .ant-popover-message-title {
@@ -2792,16 +2811,16 @@
}
</style>
<style>
.popconfirmDetails {
z-index: 999;
/*top: 42px !important;*/
}
.popconfirmDetailsText {
z-index: 1000;
top: 42px !important;
}
.popconfirmDetails .ant-popover-buttons {
display: none !important;
}
.popconfirmDetailsText .ant-popover-buttons {
display: none !important;
}
.popconfirmDetails .anticon-exclamation-circle {
display: none !important;
}
.popconfirmDetailsText .anticon-exclamation-circle {
display: none !important;
}
</style>
@@ -2,14 +2,24 @@
<div>
<div class="box-content">
<div class="box-content-left">
<div class="total-text">
<span>{{$t('totalTable')+' : '+mainLeftNum}}</span>
</div>
<div id="main-left"></div>
</div>
<div class="box-content-right">
<div class="total-text">
<span>{{$t('totalTable')+' : '+mainRightNum}}</span>
</div>
<div id="main-right"></div>
</div>
</div>
<div class="box-content">
<div class="box-content-bottom">
<div class="total-text-text" :class="{'total-text-text-cntop':long == 'zh-cn' ? true:false,
'total-text-text-entop':long == 'zh-cn' ? false:true}">
<span>{{$t('totalTable')+' : '+mainBottomNum}}</span>
</div>
<div class="box-content-text">
<div class="box-content-text-text" @click="boxContentClick(0)">
{{$t('whole')}}
@@ -50,8 +60,12 @@
url: {
getProjectDetailsStatistics: '/project/projectLibraryBase/getProjectDetailsStatistics'
},
certificationProgressMap:{},
num:'0',
certificationProgressMap: {},
num: '0',
mainLeftNum: 0,
mainRightNum: 0,
mainBottomNum: 0,
long: localStorage.getItem('language') || 'zh-cn'
}
},
mounted() {
@@ -92,6 +106,7 @@
dataEcharts(dataSource) {
let data = []
let color = []
this.mainLeftNum = 0
if (dataSource && dataSource.length > 0) {
this.dataSource = [{}]
dataSource.forEach(res => {
@@ -100,7 +115,7 @@
value: res.taskAffirmStatusCount,
name: this.$t('notLaunch'),
color: '#00B3BE',
status:res.taskAffirmStatus
status: res.taskAffirmStatus
})
color.push('#00B3BE')
} else if (res.taskAffirmStatus == 'List to confirm') {
@@ -108,7 +123,7 @@
value: res.taskAffirmStatusCount,
name: this.$t('listToConfirm'),
color: '#FDA71C',
status:res.taskAffirmStatus
status: res.taskAffirmStatus
})
color.push('#FDA71C')
} else if (res.taskAffirmStatus == 'Accepted') {
@@ -116,7 +131,7 @@
value: res.taskAffirmStatusCount,
name: this.$t('accept'),
color: '#26BC4B',
status:res.taskAffirmStatus
status: res.taskAffirmStatus
})
color.push('#26BC4B')
} else if (res.taskAffirmStatus == 'Rejected') {
@@ -124,17 +139,19 @@
value: res.taskAffirmStatusCount,
name: this.$t('refuse'),
color: '#E83030',
status:res.taskAffirmStatus
status: res.taskAffirmStatus
})
color.push('#E83030')
}
this.mainLeftNum += res.taskAffirmStatusCount
})
}
this.getEcharts('main-left', this.$t('certificationTaskConfirmation'), color, data)
},
mainRightEcharts(dataSource){
mainRightEcharts(dataSource) {
let data = []
let color = []
this.mainRightNum = 0
if (dataSource && dataSource.length > 0) {
this.dataSource = [{}]
dataSource.forEach(res => {
@@ -143,7 +160,7 @@
value: res.taskAffirmStatusCount,
name: this.$t('notLaunch'),
color: '#00B3BE',
status:res.taskAffirmStatus
status: res.taskAffirmStatus
})
color.push('#00B3BE')
} else if (res.taskAffirmStatus == 'List to confirm') {
@@ -151,7 +168,7 @@
value: res.taskAffirmStatusCount,
name: this.$t('listToConfirm'),
color: '#FDA71C',
status:res.taskAffirmStatus
status: res.taskAffirmStatus
})
color.push('#FDA71C')
} else if (res.taskAffirmStatus == 'Review and pass') {
@@ -159,7 +176,7 @@
value: res.taskAffirmStatusCount,
name: this.$t('reviewAndPass'),
color: '#26BC4B',
status:res.taskAffirmStatus
status: res.taskAffirmStatus
})
color.push('#26BC4B')
} else if (res.taskAffirmStatus == 'Review and return') {
@@ -167,17 +184,19 @@
value: res.taskAffirmStatusCount,
name: this.$t('reviewAndReturn'),
color: '#E83030',
status:res.taskAffirmStatus
status: res.taskAffirmStatus
})
color.push('#E83030')
}
this.mainRightNum += res.taskAffirmStatusCount
})
}
this.getEcharts('main-right', this.$t('preHomoFlow'), color, data)
},
mainBottomEcharts(dataSource){
mainBottomEcharts(dataSource) {
let data = []
let color = []
this.mainBottomNum = 0
if (dataSource && dataSource.length > 0) {
dataSource.forEach(res => {
if (res.certificationProgress == 'Not start') {
@@ -185,7 +204,7 @@
value: res.certificationProgressCount,
name: this.$t('Notatthe'),
color: '#00B3BE',
status:res.certificationProgress
status: res.certificationProgress
})
color.push('#00B3BE')
} else if (res.certificationProgress == 'In progress') {
@@ -193,7 +212,7 @@
value: res.certificationProgressCount,
name: this.$t('inProgress'),
color: '#FDA71C',
status:res.certificationProgress
status: res.certificationProgress
})
color.push('#FDA71C')
} else if (res.certificationProgress == 'Test passed') {
@@ -201,7 +220,7 @@
value: res.certificationProgressCount,
name: this.$t('experimentPassed'),
color: '#26BC4B',
status:res.certificationProgress
status: res.certificationProgress
})
color.push('#26BC4B')
} else if (res.certificationProgress == 'Test failed') {
@@ -209,34 +228,35 @@
value: res.certificationProgressCount,
name: this.$t('experimentFailed'),
color: '#E83030',
status:res.certificationProgress
status: res.certificationProgress
})
color.push('#E83030')
}else if (res.certificationProgress == 'Component report not submitted') {
} else if (res.certificationProgress == 'Component report not submitted') {
data.push({
value: res.certificationProgressCount,
name: this.$t('componentReportNotSubmitted'),
color: '#FDA71C',
status:res.certificationProgress
status: res.certificationProgress
})
color.push('#FDA71C')
}else if (res.certificationProgress == 'Component report submitted') {
} else if (res.certificationProgress == 'Component report submitted') {
data.push({
value: res.certificationProgressCount,
name: this.$t('componentReportSubmitted'),
color: '#6FD682',
status:res.certificationProgress
status: res.certificationProgress
})
color.push('#6FD682')
}else if (res.certificationProgress == 'Component report has been stored') {
} else if (res.certificationProgress == 'Component report has been stored') {
data.push({
value: res.certificationProgressCount,
name: this.$t('componentReportHasBeenStored'),
color: '#26BC4B',
status:res.certificationProgress
status: res.certificationProgress
})
color.push('#26BC4B')
}
this.mainBottomNum += res.certificationProgressCount
})
}
this.getEcharts('main-bottom', this.$t('CertificationProgress'), color, data)
@@ -249,14 +269,14 @@
},
tooltip: {
trigger: 'item',
textStyle : {
fontWeight : 'normal',
fontSize : 14,
color:'#040B29',
fontFamily:'BlueSkyNoto',
textStyle: {
fontWeight: 'normal',
fontSize: 14,
color: '#040B29',
fontFamily: 'BlueSkyNoto'
},
formatter: function (parms) {
let str = parms.marker+' '+parms.data.name+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+parms.data.value+' ('+parms.percent+'%)'
formatter: function(parms) {
let str = parms.marker + ' ' + parms.data.name + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + parms.data.value + ' (' + parms.percent + '%)'
return str
}
},
@@ -300,11 +320,11 @@
query.operatorType = 'queryPrehomoStatistics'
query.status = params.data.status
} else if (params.seriesName === this.$t('CertificationProgress')) {
if (this.num == '0'){
if (this.num == '0') {
query.operatorType = 'queryCertificationProgressStatisticsAll'
}else if(this.num == '1'){
} else if (this.num == '1') {
query.operatorType = 'queryCertificationProgressStatisticsCar'
}else if(this.num == '2'){
} else if (this.num == '2') {
query.operatorType = 'queryCertificationProgressStatisticsPart'
}
query.status = params.data.status
@@ -327,12 +347,12 @@
boxContentTextText[num].classList.add('box-content-text-color')
}
this.num = num
if (num == 0){
this.mainBottomEcharts( this.certificationProgressMap.allMapList || [])
}else if(num == 1){
this.mainBottomEcharts( this.certificationProgressMap.carMapList || [])
}else if(num == 2){
this.mainBottomEcharts( this.certificationProgressMap.partMapList || [])
if (num == 0) {
this.mainBottomEcharts(this.certificationProgressMap.allMapList || [])
} else if (num == 1) {
this.mainBottomEcharts(this.certificationProgressMap.carMapList || [])
} else if (num == 2) {
this.mainBottomEcharts(this.certificationProgressMap.partMapList || [])
}
}
}
@@ -350,6 +370,7 @@
.box-content-left {
width: calc(50% - 10px);
height: 346px;
position: relative;
border: 2px #eff1f3 solid;
border-radius: 6px;
margin-top: 4px;
@@ -365,6 +386,7 @@
.box-content-right {
width: calc(50% - 10px);
height: 346px;
position: relative;
border: 2px #eff1f3 solid;
border-radius: 6px;
margin-top: 4px;
@@ -384,6 +406,7 @@
position: relative;
border-radius: 6px;
margin-top: 20px;
overflow: hidden;
.box-content-text {
height: 30px;
@@ -429,4 +452,27 @@
}
}
.total-text {
position: absolute;
right: 28px;
top: 19px;
font-size: 18px;
font-weight: bold;
}
.total-text-text {
position: absolute;
right: 28px;
top: 21px;
font-size: 18px;
font-weight: bold;
}
.total-text-text-cntop {
right: 180px;
}
.total-text-text-entop {
right: 290px;
}
</style>
@@ -43,17 +43,39 @@
</a-select>
</div>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('standardNo')">
<span>{{ $t('standardNo') }}</span>
</div>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('standardNo')"
v-model="queryParam.serialNumber"></j-input>
</div>
</a-col>
<template v-if="toggleSearchStatus">
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('standardNo')">
<span>{{ $t('standardNo') }}</span>
</div>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('standardNo')"
v-model="queryParam.serialNumber"></j-input>
</div>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('statisticalNodes')">
<span>{{ $t('statisticalNodes') }}</span>
</div>
<a-select :placeholder="$t('PleaseSelect')+$t('statisticalNodes')"
allowClear
class="box-input"
show-search
optionFilterProp="label"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
v-model="queryParam.firstLevelDutyTerritory">
<a-select-option v-for="(item, key) in firstLevelDutyTerritoryList"
:key="key"
:label="item.key"
:value="item.key">
<span style="display: inline-block;width: 100%" :title=" item.key ">
{{ item.key }}
</span>
</a-select-option>
</a-select>
</div>
</a-col>
</template>
<span style="float: right;overflow: hidden;margin-right: 11px; " class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
@@ -62,10 +84,10 @@
<globalAdvancedQuery ref="globalAdvancedQueryRef"
@handleSuperQuery="handleSuperQuery"
:fieldList="fieldList"/>
<!-- <a @click="handleToggleSearch" style="margin-left: 8px">-->
<!-- {{ !toggleSearchStatus ? $t('open') : $t('away') }}-->
<!-- <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>-->
<!-- </a>-->
<a @click="handleToggleSearch" style="margin-left: 8px">
{{ !toggleSearchStatus ? $t('open') : $t('away') }}
<a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
</a>
</a-col>
</span>
</a-row>
@@ -537,7 +559,7 @@
export default {
name: 'index',
props: ['isDisplayNum'],
props: ['isDisplayNum','areaOfResponsibility'],
mixins: [ResizeColumnProvide, ResizeHeader],
components: {
globalAdvancedQuery,
@@ -827,16 +849,19 @@
toDoIds: [],
toDoNotConditions: [],
userInfoQuery: {},
DeliverableTreeList: []
DeliverableTreeList: [],
firstLevelDutyTerritoryList:[],
}
},
mounted() {
// this.getList()
this.getFirstLevelDutyTerritory()
this.long = localStorage.getItem('language') || 'zh-cn'
this.loading = true
this.userInfoQuery = this.userInfo()
if (this.areaOfResponsibility && this.areaOfResponsibility.dutyTerritory) {
this.queryParam.dutyTerritory = this.areaOfResponsibility.dutyTerritory
console.log(this.areaOfResponsibility)
if (this.areaOfResponsibility && this.areaOfResponsibility.dutyTerritoryName) {
this.queryParam.firstLevelDutyTerritory = this.areaOfResponsibility.dutyTerritoryName
this.queryParam = { ...this.queryParam }
}
this.getProcessStatus()
@@ -884,6 +909,15 @@
},
methods: {
...mapGetters(['userInfo']),
getFirstLevelDutyTerritory() {
getAction('/sys/dictItem/getFirstLevelDutyTerritory', {}).then((res) => {
if (res.success) {
this.firstLevelDutyTerritoryList = res.result
} else {
this.firstLevelDutyTerritoryList = []
}
})
},
addConfigurationClick() {
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
this.$refs.addConfigurationRef.getData(JSON.parse(JSON.stringify(this.selectedRowKeys)))
@@ -1045,9 +1079,9 @@
}
this.dataSource = res.result.records || []
this.dataSource.forEach(value => {
if (value.flowStatusName =='清单待校核'){
if (value.flowStatusName == '清单待校核') {
value.flowStatusName = '任务待发起'
}else if(value.flowStatusName =='List to be checked'){
} else if (value.flowStatusName == 'List to be checked') {
value.flowStatusName = 'The task is to be initiated'
}
})
@@ -2365,6 +2399,7 @@
.page {
text-align: right;
margin-top: 20px;
margin-bottom: 20px;
}
.operator-text-left {
@@ -2561,10 +2596,12 @@
background: #dbf6e2;
color: #26BD4B;
}
.componentColor{
.componentColor {
background: #EDFCEF;
color: #6FD682;
}
.nonConformityColor {
background: #f3dddd;
color: #E83030;
@@ -8,11 +8,12 @@
<div class="process-content-content" :style="val.left"
v-for="(val,indexOne) in timeData" :key="indexOne" v-if="val.g">
<div class="process-content-right-top" :title="val.name">{{ val.name }}</div>
<div class="process-content-right-button" :title="val.time.slice(0, 11)">{{ val.time.slice(0, 11) }}</div>
<!-- <div class="process-content-right-button" v-if="indexOne % 2 == 1" :title="val.name">{{ val.name }}-->
<!-- </div>-->
<a-tooltip placement="topLeft" overlayClassName="tooltipColor">
<template slot="title">
<span>{{ val.time.slice(0, 11) }}</span>
<span>{{ val.name }}</span>
</template>
<img v-if="val.status == 1" src="../../../assets/heiTop.png" class="process-content-left"
alt="">
@@ -27,12 +28,12 @@
</div>
<div class="process-content-contentOne" :style="val.left"
v-for="(val,indexTwo) in timeData" v-if="!val.g">
<!-- <div class="process-content-right-top" v-if="indexOne % 2 == 0" :title="val.name">{{ val.name }}</div>-->
<div class="process-content-right-top" :title="val.time.slice(0, 11)">{{ val.time.slice(0, 11) }}</div>
<div class="process-content-right-button" :title="val.name">{{ val.name }}
</div>
<a-tooltip placement="topLeft" overlayClassName="tooltipColor">
<template slot="title">
<span>{{ val.time.slice(0, 11) }}</span>
<span>{{ val.name }}</span>
</template>
<img v-if="val.status == 1" src="../../../assets/huiBottom.png" class="process-content-left"
alt="">
@@ -192,10 +193,10 @@
width: 83px;
font-size: 12px;
font-weight: 400;
color: #6F7385;
color: #9C9FAC;
position: absolute;
left: 50%;
top: 36px;
top: -36px;
transform: translate(-50%, -50%);
overflow: hidden;
display: -webkit-box;
@@ -229,13 +230,13 @@
.process-content-right-top {
font-size: 12px;
color: #040B29;
width: 83px;
background: #fff;
display: inline-block;
overflow: hidden;
position: absolute;
top: -12px;
color: #9C9FAC;
top: 57px;
left: 50%;
transform: translate(-50%, -50%);
overflow: hidden;
@@ -253,10 +254,12 @@
width: 83px;
font-size: 12px;
font-weight: 400;
color: #6F7385;
color: #040B29;
background: #fff;
position: absolute;
left: 50%;
top: 36px;
line-height: 11px;
transform: translate(-50%, -50%);
overflow: hidden;
display: -webkit-box;
@@ -68,6 +68,31 @@
</a-input-group>
</div>
</a-col>
<template v-if="toggleSearchStatus">
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('statisticalNodes')">
<span>{{ $t('statisticalNodes') }}</span>
</div>
<a-select :placeholder="$t('PleaseSelect')+$t('statisticalNodes')"
allowClear
show-search
class="box-input"
optionFilterProp="label"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
v-model="queryParam.firstLevelDutyTerritory">
<a-select-option v-for="(item, key) in firstLevelDutyTerritoryList"
:key="key"
:label="item.key"
:value="item.key">
<span style="display: inline-block;width: 100%" :title=" item.key ">
{{ item.key }}
</span>
</a-select-option>
</a-select>
</div>
</a-col>
</template>
<!-- <template v-if="toggleSearchStatus">-->
<!-- <a-col :md="6" :sm="8">-->
<!-- <div class="box-title-text">-->
@@ -97,10 +122,10 @@
<globalAdvancedQuery ref="globalAdvancedQueryRef"
@handleSuperQuery="handleSuperQuery"
:fieldList="fieldList"/>
<!-- <a @click="handleToggleSearch" style="margin-left: 8px">-->
<!-- {{ !toggleSearchStatus ? $t('open') : $t('away') }}-->
<!-- <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>-->
<!-- </a>-->
<a @click="handleToggleSearch" style="margin-left: 8px">
{{ !toggleSearchStatus ? $t('open') : $t('away') }}
<a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
</a>
</a-col>
</span>
</a-row>
@@ -143,10 +168,10 @@
{{ $t('copy') }}
</div>
<!-- 列表设置-->
<!-- v-if="this.roleSwitchingCode == '0' || this.roleSwitchingCode == '1' || this.roleSwitchingCode == '13'"-->
<!-- v-if="this.roleSwitchingCode == '0' || this.roleSwitchingCode == '1' || this.roleSwitchingCode == '13'"-->
<a-popconfirm :visible="customizevisible" overlayClassName="popconfirmmize"
placement="bottomRight"
>
>
<template slot="title" id="popconfirmmize">
<div style="max-height:360px;overflow:scroll;overflow-x: auto;">
<a-checkbox
@@ -388,22 +413,22 @@
:title="text">{{text}}</a>
</span>
</a-table>
<!-- <div class="page" v-if="dataSource.length > 0">-->
<!-- <a-pagination-->
<!-- :show-total="total => $t('total')+` ${total} `+$t('strip')"-->
<!-- show-quick-jumper-->
<!-- show-size-changer-->
<!-- :page-size.sync="pageSize"-->
<!-- :total="total"-->
<!-- :pageSizeOptions="['50','100','200','300']"-->
<!-- :current="pageNo"-->
<!-- @change="onChangeSize"-->
<!-- @showSizeChange="SizeChange"-->
<!-- />-->
<!-- </div>-->
<div class="buttom-box" v-if="dataSource && dataSource.length > 0">
{{ $t('total') + ' ' + this.dataSource.length + ' ' + $t('strip') }}
<div class="page" v-if="dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:pageSizeOptions="['50','100','200','300']"
:current="pageNo"
@change="onChangeSize"
@showSizeChange="SizeChange"
/>
</div>
<!-- <div class="buttom-box" v-if="dataSource && dataSource.length > 0">-->
<!-- {{ $t('total') + ' ' + this.dataSource.length + ' ' + $t('strip') }}-->
<!-- </div>-->
</div>
<listAddModel :url="url" @addModelList="addModelList" ref="addModelRef"/>
<listEditModel :url="url" @editModelList="addModelList" ref="editModelRef"/>
@@ -685,6 +710,7 @@
confirmLoadingQuestion: false,
isDesignCompliance: false,
isVerifyingCompliance: false,
firstLevelDutyTerritoryList: [],
pageNo: 1,
pageSize: 50,
total: 0,
@@ -748,14 +774,16 @@
align: 'left',
ellipsis: true,
dataIndex: 'attestationType_dictText',
width: 180
width: 180,
sorter: true
},
{
title: this.$t('certificationLevel'),
align: 'left',
ellipsis: true,
dataIndex: 'attestationRank_dictText',
width: 180
width: 180,
sorter: true
},
{
title: this.$t('areaOfResponsibility'),
@@ -1176,7 +1204,7 @@
url: {
addModelList: '/project/projectLawsInventoryEO/queryPageDummy',
queryConditionInventory: '/project/projectLawsInventoryEO/queryConditionInventory',
list: '/project/projectLawsInventoryEO/list',
list: '/project/projectLawsInventoryEO/page',
addModel: 'project/projectLawsInventoryEO/add',
editModel: '/project/projectLawsInventoryEO/edit',
deleteBatch: '/project/projectLawsInventoryEO/deleteBatch',
@@ -1248,7 +1276,7 @@
value: 'attestationRank',
text: this.$t('certificationLevel'),
dictCode: 'attestation_rank'//只要 dictCode 有值无论 type 是什么都显示为字典下拉框
},
}
// {
// type: 'deliverables',
// value: 'designDeliverableType',
@@ -1431,6 +1459,11 @@
},
mounted() {
this.getFirstLevelDutyTerritory()
if (this.areaOfResponsibilityList && this.areaOfResponsibilityList.dutyTerritoryName) {
this.queryParam.firstLevelDutyTerritory = this.areaOfResponsibilityList.dutyTerritoryName
this.queryParam = { ...this.queryParam }
}
this.JLoading = true
this.getHeader()
this.queryLawEngineerByProjectId()
@@ -1440,10 +1473,6 @@
this.getRoleByUserId(() => {
this.getAndUserId()
})
if (this.areaOfResponsibilityList && this.areaOfResponsibilityList.dutyTerritory) {
this.queryParam.dutyTerritory = this.areaOfResponsibilityList.dutyTerritory
this.queryParam = { ...this.queryParam }
}
},
computed: {
columnsFile() {
@@ -1481,6 +1510,15 @@
},
methods: {
...mapGetters(['userInfo']),
getFirstLevelDutyTerritory() {
getAction('/sys/dictItem/getFirstLevelDutyTerritory', {}).then((res) => {
if (res.success) {
this.firstLevelDutyTerritoryList = res.result
} else {
this.firstLevelDutyTerritoryList = []
}
})
},
modifyOperatorClick(name) {
if (this.selectedRowKeys.length == 0) {
this.$message.warning(this.$t('selectLeastOne'))
@@ -1520,7 +1558,7 @@
}
},
modifyOperatorForm() {
this
this.pageNo = 1
this.getList()
},
//收起/展开
@@ -1639,12 +1677,10 @@
if (name == this.$t('designComplianceProcess')) {
if (row.designFlowStatus == 'Task to be confirmed' || row.designFlowStatus == 'Duty Person Rejected') {
TaskKey = 'zrrqr'
} else if (row.designFlowStatus == 'Results to be submitted') {
} else if (row.designFlowStatus == 'Results to be submitted' || row.designFlowStatus == 'Non-Compliance' || row.designFlowStatus == 'To be tracked') {
TaskKey = 'zrrtjjfw'
} else if (row.designFlowStatus == 'Results to be reviewed' ||
row.designFlowStatus == 'Compliance' ||
row.designFlowStatus == 'Non-Compliance' ||
row.designFlowStatus == 'To be tracked' ||
row.designFlowStatus == 'NA') {
TaskKey = 'fggcssh'
}
@@ -1669,12 +1705,10 @@
} else {
if (row.verifyFlowStatus == 'Task to be confirmed' || row.verifyFlowStatus == 'Duty Person Rejected') {
TaskKey = 'zrrqr'
} else if (row.verifyFlowStatus == 'Results to be submitted') {
} else if (row.verifyFlowStatus == 'Results to be submitted' || row.verifyFlowStatus == 'Non-Compliance' || row.verifyFlowStatus == 'To be tracked') {
TaskKey = 'zrrtjjfw'
} else if (row.verifyFlowStatus == 'Results to be reviewed' ||
row.verifyFlowStatus == 'Compliance' ||
row.verifyFlowStatus == 'Non-Compliance' ||
row.verifyFlowStatus == 'To be tracked' ||
row.verifyFlowStatus == 'NA') {
TaskKey = 'fggcssh'
}
@@ -1798,7 +1832,7 @@
content: _this.$t('ConfirmReplication'),
onOk() {
let idList = JSON.parse(JSON.stringify(_this.selectedRowKeys))
getAction(_this.url.copyUrl, { ids: idList.join(','),operateType:operateType }).then((res) => {
getAction(_this.url.copyUrl, { ids: idList.join(','), operateType: operateType }).then((res) => {
if (res.success) {
_this.$message.success(_this.$t('OperationSuccessful'))
_this.selectedRowKeys = []
@@ -2156,6 +2190,7 @@
if (res.success) {
_this.$message.success(_this.$t('OperationSuccessful'))
_this.selectedRowKeys = []
_this.pageNo = 1
_this.getList()
} else {
_this.$message.warning(_this.$t('operationFailed'))
@@ -2188,6 +2223,7 @@
// this.confirmLoadingRoleSwitching = false
this.$emit('getRoleSwitch', roleSwitchingCode)
this.selectedRowKeys = []
this.pageNo = 1
this.getList()
} else {
this.confirmLoadingRoleSwitching = false
@@ -2306,6 +2342,7 @@
//搜索
searchQuery() {
this.selectedRowKeys = []
this.pageNo = 1
this.getList()
},
//重置
@@ -2319,6 +2356,7 @@
addModelList() {
this.selectedRowKeys = []
this.pageNo = 1
this.getList()
},
customizeListForm(val) {
@@ -2329,6 +2367,7 @@
},
transferListFormHomo() {
this.$refs.transferListRef.handleCancel()
this.pageNo = 1
this.getList()
},
handleSuperQuery(params, matchType) {
@@ -2342,6 +2381,7 @@
sqp['superQueryMatchType'] = matchType
}
this.queryParamQuery = sqp
this.pageNo = 1
this.getList()
},
@@ -2359,24 +2399,28 @@
this.orderByField = 'designDutyId'
} else if (sorter.columnKey == 'verifyDutyIdName') {
this.orderByField = 'verifyDutyId'
} else if (sorter.columnKey == 'verifyFlowStatusName') {
} else if (sorter.columnKey == 'verifyFlowStatusName') {
this.orderByField = 'verifyFlowStatus'
} else if (sorter.columnKey == 'designFlowStatusName') {
} else if (sorter.columnKey == 'designFlowStatusName') {
this.orderByField = 'designFlowStatus'
} else if (sorter.columnKey == 'attestationType_dictText') {
this.orderByField = 'attestationType'
} else if (sorter.columnKey == 'attestationRank_dictText') {
this.orderByField = 'attestationRank'
} else {
this.orderByField = sorter.columnKey
}
this.getList()
},
// onChangeSize(page, pageSize) {
// this.pageNo = page
// this.getList()
// },
// SizeChange(page, pageSize) {
// this.pageNo = 1
// this.pageSize = pageSize
// this.getList()
// },
onChangeSize(page, pageSize) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList() {
let roleCode = this.roleSwitchingCode
let queryParam = JSON.parse(JSON.stringify(this.queryParam))
@@ -2395,20 +2439,20 @@
projectLibraryId: this.$route.query.id,
orderBy: this.orderBy,
orderByField: this.orderByField,
roleCode: roleCode
// pageNo: this.pageNo,
// pageSize: this.pageSize
roleCode: roleCode,
pageNo: this.pageNo,
pageSize: this.pageSize
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
// if (res.result.current > 1 && res.result.records.length == 0) {
// this.pageNo = 1
// this.getList()
// return
// }
this.dataSource = res.result || []
// this.total = res.result.total
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
this.JLoading = false
if (this.dataSource.length == 0) {
@@ -2814,12 +2858,16 @@
}
if (dataList[i].designFlowStatus == 'List to be checked' || dataList[i].designFlowStatus == 'Duty Person Rejected') {
if (dataList[i].designDeliverableType && dataList[i].designDutyId && dataList[i].designDueDate) {
this.requestsNum++
this.startProcessList.push({
dataList: dataList[i],
type: 2,
requestsNum: this.requestsNum
})
if (dataList[i].designDeliverableType == '1645667531513237506'){
}else{
this.requestsNum++
this.startProcessList.push({
dataList: dataList[i],
type: 2,
requestsNum: this.requestsNum
})
}
// _this.startProcess(dataList[i], 2, this.requestsNum)
}
} else {
@@ -2828,12 +2876,16 @@
}
if (dataList[i].verifyFlowStatus == 'List to be checked' || dataList[i].verifyFlowStatus == 'Duty Person Rejected') {
if (dataList[i].verifyDeliverableType && dataList[i].verifyDutyId && dataList[i].verifyDueDate) {
this.requestsNum++
this.startProcessList.push({
dataList: dataList[i],
type: 4,
requestsNum: this.requestsNum
})
if (dataList[i].verifyDeliverableType == '1645667531513237506'){
}else{
this.requestsNum++
this.startProcessList.push({
dataList: dataList[i],
type: 4,
requestsNum: this.requestsNum
})
}
// _this.startProcess(dataList[i], 4, this.requestsNum)
}
} else {
@@ -296,12 +296,10 @@
if (row.flowType == '2') {
if (row.flowStatus == 'Task to be confirmed' || row.flowStatus == 'Duty Person Rejected') {
TaskKey = 'zrrqr'
} else if (row.flowStatus == 'Results to be submitted') {
} else if (row.flowStatus == 'Results to be submitted' || row.flowStatus == 'Non-Compliance' ||row.flowStatus == 'To be tracked') {
TaskKey = 'zrrtjjfw'
} else if (row.flowStatus == 'Results to be reviewed' ||
row.flowStatus == 'Compliance' ||
row.flowStatus == 'Non-Compliance' ||
row.flowStatus == 'To be tracked' ||
row.flowStatus == 'NA') {
TaskKey = 'fggcssh'
}
@@ -322,12 +320,10 @@
} else if(row.flowType == '4'){
if (row.flowStatus == 'Task to be confirmed' || row.flowStatus == 'Duty Person Rejected') {
TaskKey = 'zrrqr'
} else if (row.flowStatus == 'Results to be submitted') {
} else if (row.flowStatus == 'Results to be submitted' || row.flowStatus == 'Non-Compliance' ||row.flowStatus == 'To be tracked') {
TaskKey = 'zrrtjjfw'
} else if (row.flowStatus == 'Results to be reviewed' ||
row.flowStatus == 'Compliance' ||
row.flowStatus == 'Non-Compliance' ||
row.flowStatus == 'To be tracked' ||
row.flowStatus == 'NA') {
TaskKey = 'fggcssh'
}
@@ -111,12 +111,11 @@
this.syncReport = res.result.syncReport ? res.result.syncReport : []
this.dutyTerritory = res.result.dutyTerritory ? res.result.dutyTerritory : []
this.getEcharts()
}
}
})
},
getoptions() {
let id = ''
if (this.idList && this.idList.length > 0) {
@@ -134,6 +133,7 @@
}
})
},
getonChange(value) {
this.collectingpercentage = []
this.collectingquantity = []
@@ -145,6 +145,7 @@
this.syncReportquantity = []
this.getData(value)
},
onChange(value) {
this.collectingpercentage = []
this.collectingquantity = []
@@ -155,8 +156,8 @@
this.syncReportpercentage = []
this.syncReportquantity = []
this.getEcharts()
},
getEcharts(chart, title, color, data, num) {
this.collecting.forEach((item, index) => {
this.collectingpercentage.push(item.percentage)
@@ -342,6 +343,7 @@
option && myChart.setOption(option, true)
},
mainLeftEcharts(data, color) {
this.getEcharts('main-left', this.$t('Parametercollection'), color, data, 1)
},
@@ -59,7 +59,7 @@
this.$emit('projectStatusForm',this.activeKey)
},
currentStatus(item) {
this.$emit('TaskListChange', item)
this.$emit('currentStatus', item)
},
versionStatisticsClick() {
this.$refs.versionStatisticsRef.addModel(JSON.parse(JSON.stringify(this.selectedRowKeys)))
@@ -1,15 +1,22 @@
<template>
<div class="box-content">
<div class="box-content-top">
<div class="total-text">
<span>{{$t('totalTable')+' : '+mainTopNum}}</span>
</div>
<div id="main-top"></div>
</div>
<div class="box-content-left">
<div class="total-text">
<span>{{$t('totalTable')+' : '+mainLeftNum}}</span>
</div>
<div id="main-left"></div>
</div>
<div class="box-content-right">
<div id="main-right">
<div class="total-text">
<span>{{$t('totalTable')+' : '+mainRightNum}}</span>
</div>
<div id="main-right"> </div>
</div>
<responsibilityList @responsibility="responsibility" ref="responsibilityListRef"/>
</div>
@@ -39,6 +46,9 @@
url: {
getProjectDetailsStatistics: '/project/projectLibraryBase/getProjectDetailsStatistics'
},
mainTopNum: 0,
mainLeftNum: 0,
mainRightNum: 0,
columns: [
{
title: this.$t('red'),
@@ -99,14 +109,14 @@
},
tooltip: {
trigger: 'item',
textStyle : {
fontWeight : 'normal',
fontSize : 14,
color:'#040B29',
fontFamily:'BlueSkyNoto',
textStyle: {
fontWeight: 'normal',
fontSize: 14,
color: '#040B29',
fontFamily: 'BlueSkyNoto'
},
formatter: function (parms) {
let str = parms.marker+' '+parms.data.name+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+parms.data.value+' ('+parms.percent+'%)'
formatter: function(parms) {
let str = parms.marker + ' ' + parms.data.name + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + parms.data.value + ' (' + parms.percent + '%)'
return str
}
},
@@ -138,26 +148,26 @@
})
myChart.on('click', (params) => {
let query = {}
if (params.seriesName == this.$t('regulatoryTaskConfirmation')){
if (params.seriesName == this.$t('regulatoryTaskConfirmation')) {
query = {
title: params.seriesName,
projectLibraryId: this.$route.query.id,
operatorType: 'queryFGTaskToConfirmStatistics',
status:params.data.status
status: params.data.status
}
}else if(params.seriesName == this.$t('designCompliance')){
} else if (params.seriesName == this.$t('designCompliance')) {
query = {
title: params.seriesName,
projectLibraryId: this.$route.query.id,
operatorType: 'queryDesignStatistics',
status:params.data.status
status: params.data.status
}
}else if(params.seriesName == this.$t('verifyCompliance')){
} else if (params.seriesName == this.$t('verifyCompliance')) {
query = {
title: params.seriesName,
projectLibraryId: this.$route.query.id,
operatorType: 'queryVerifyStatistics',
status:params.data.status
status: params.data.status
}
}
this.$refs.responsibilityListRef.getData(query)
@@ -167,6 +177,7 @@
mainTopEcharts(dataSource) {
let data = []
let color = []
this.mainTopNum = 0
if (dataSource && dataSource.length > 0) {
this.dataSource = [{}]
dataSource.forEach(res => {
@@ -203,14 +214,16 @@
})
color.push('#E83030')
}
this.mainTopNum += res.taskAffirmStatusCount
})
}
this.getEcharts('main-top', this.$t('regulatoryTaskConfirmation'), color, data)
},
mainLeftEcharts(dataSource){
mainLeftEcharts(dataSource) {
let data = []
let color = []
this.mainLeftNum = 0
if (dataSource && dataSource.length > 0) {
this.dataSource = [{}]
dataSource.forEach(res => {
@@ -219,7 +232,7 @@
value: res.designFlowTaskStatusCount,
name: this.$t('notLaunch'),
color: '#00B3BE',
status:res.designFlowTaskStatus
status: res.designFlowTaskStatus
})
color.push('#00B3BE')
} else if (res.designFlowTaskStatus == 'List to confirm') {
@@ -227,7 +240,7 @@
value: res.designFlowTaskStatusCount,
name: this.$t('listToConfirm'),
color: '#FDA71C',
status:res.designFlowTaskStatus
status: res.designFlowTaskStatus
})
color.push('#FDA71C')
} else if (res.designFlowTaskStatus == 'Compliance') {
@@ -235,7 +248,7 @@
value: res.designFlowTaskStatusCount,
name: this.$t('compliance'),
color: '#26BC4B',
status:res.designFlowTaskStatus
status: res.designFlowTaskStatus
})
color.push('#26BC4B')
} else if (res.designFlowTaskStatus == 'Non-Compliance') {
@@ -243,18 +256,20 @@
value: res.designFlowTaskStatusCount,
name: this.$t('nonCompliance'),
color: '#707486',
status:res.designFlowTaskStatus
status: res.designFlowTaskStatus
})
color.push('#707486')
}
this.mainLeftNum += res.designFlowTaskStatusCount
})
}
this.getEcharts('main-left', this.$t('designCompliance'), color, data)
},
mainRightEcharts(dataSource){
mainRightEcharts(dataSource) {
let data = []
let color = []
this.mainRightNum = 0
if (dataSource && dataSource.length > 0) {
this.dataSource = [{}]
dataSource.forEach(res => {
@@ -263,7 +278,7 @@
value: res.verifyFlowTaskStatusCount,
name: this.$t('notLaunch'),
color: '#00B3BE',
status:res.verifyFlowTaskStatus
status: res.verifyFlowTaskStatus
})
color.push('#00B3BE')
} else if (res.verifyFlowTaskStatus == 'List to confirm') {
@@ -271,7 +286,7 @@
value: res.verifyFlowTaskStatusCount,
name: this.$t('listToConfirm'),
color: '#FDA71C',
status:res.verifyFlowTaskStatus
status: res.verifyFlowTaskStatus
})
color.push('#FDA71C')
} else if (res.verifyFlowTaskStatus == 'Compliance') {
@@ -279,7 +294,7 @@
value: res.verifyFlowTaskStatusCount,
name: this.$t('compliance'),
color: '#26BC4B',
status:res.verifyFlowTaskStatus
status: res.verifyFlowTaskStatus
})
color.push('#26BC4B')
} else if (res.verifyFlowTaskStatus == 'Non-Compliance') {
@@ -287,17 +302,17 @@
value: res.verifyFlowTaskStatusCount,
name: this.$t('nonCompliance'),
color: '#707486',
status:res.verifyFlowTaskStatus
status: res.verifyFlowTaskStatus
})
color.push('#707486')
}
this.mainRightNum += res.verifyFlowTaskStatusCount
})
}
this.getEcharts('main-right', this.$t('verifyCompliance'), color, data)
},
responsibility(item) {
console.log(item)
this.$emit('currentStatus', item)
}
}
@@ -313,6 +328,7 @@
.box-content-top {
width: 100%;
position: relative;
margin-top: 4px;
height: 346px;
border: 2px #eff1f3 solid;
@@ -330,6 +346,7 @@
width: calc(50% - 10px);
margin-top: 20px;
height: 346px;
position: relative;
border: 2px #eff1f3 solid;
border-radius: 6px;
@@ -345,6 +362,7 @@
width: calc(50% - 10px);
margin-top: 20px;
height: 346px;
position: relative;
border-radius: 6px;
border: 2px #eff1f3 solid;
@@ -367,4 +385,12 @@
text-overflow: ellipsis;
white-space: nowrap;
}
.total-text {
position: absolute;
right: 28px;
top: 19px;
font-size: 18px;
font-weight: bold;
}
</style>
@@ -1,38 +1,39 @@
<template>
<a-modal
:title="title"
:width="800"
:visible="visible"
:confirm-loading="confirmLoading"
:maskClosable="false"
@cancel="visible = false"
<a-modal
:title="title"
:width="800"
:visible="visible"
:confirm-loading="confirmLoading"
:maskClosable="false"
@cancel="visible = false"
>
<template slot="footer">
<a-button key="back" @click="visible = false">
{{$t('cancel')}}
</a-button>
</template>
<!-- <div style="text-align: right;margin-bottom: 10px">-->
<!-- <div @click="handleExport" class="operator-text">-->
<!-- <a-icon type="export" :rotate="-90"/>-->
<!-- {{$t('export')}}-->
<!-- </div>-->
<!-- </div>-->
<a-table
ref="table"
:components="drag(columns,'columns')"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:400}"
:data-source="dataSource"
@change="tableOnChange"
:columns="columns"
>
<template slot="footer">
<a-button key="back" @click="visible = false">
{{$t('cancel')}}
</a-button>
</template>
<div style="text-align: right;margin-bottom: 10px">
<div @click="handleExport" class="operator-text">
<a-icon type="export" :rotate="-90"/>
{{$t('export')}}
</div>
</div>
<a-table
ref="table"
:components="drag(columns,'columns')"
:loading="loading"
:pagination="false"
:scroll="{x: true,y:400}"
:data-source="dataSource"
:columns="columns"
>
<!-- @click="areaOfResponsibilityClick(result)"-->
<span slot="areaOfResponsibility" slot-scope="text,result">
<!-- -->
<a slot="areaOfResponsibility" @click="areaOfResponsibilityClick(result)" slot-scope="text,result">
{{text}}
</span>
</a-table>
</a-modal>
</a>
</a-table>
</a-modal>
</template>
<script>
@@ -62,6 +63,7 @@
align: 'left',
width: 150,
ellipsis: true,
sorter: true,
scopedSlots: { customRender: 'areaOfResponsibility' }
},
{
@@ -69,14 +71,16 @@
dataIndex: 'amount',
align: 'left',
ellipsis: true,
width: 150
width: 150,
sorter: true
},
{
title: this.$t('proportion'),
title: this.$t('proportionWithInTheAreaOfResponsibility'),
dataIndex: 'percentage',
align: 'left',
ellipsis: true,
width: 150
width: 240,
sorter: true
}
]
}
@@ -88,11 +92,39 @@
this.visible = true
this.title = data.title
this.queryParam = data
this.getList(data)
this.getList()
},
getList(data) {
tableOnChange(pagination, filters, sorter) {
this.orderBy = sorter.order == 'ascend' ? '1' : '2'
if (sorter.columnKey == 'attestationRank_dictText') {
this.orderByField = 'attestationRank'
} else if (sorter.columnKey == 'dutyTerritory_dictText') {
this.orderByField = 'dutyTerritory'
} else if (sorter.columnKey == 'designDeliverableTypeName') {
this.orderByField = 'designDeliverableType'
} else if (sorter.columnKey == 'verifyDeliverableTypeName') {
this.orderByField = 'verifyDeliverableType'
} else if (sorter.columnKey == 'designDutyIdName') {
this.orderByField = 'designDutyId'
} else if (sorter.columnKey == 'verifyDutyIdName') {
this.orderByField = 'verifyDutyId'
} else if (sorter.columnKey == 'verifyFlowStatusName') {
this.orderByField = 'verifyFlowStatus'
} else if (sorter.columnKey == 'designFlowStatusName') {
this.orderByField = 'designFlowStatus'
} else {
this.orderByField = sorter.columnKey
}
this.getList()
},
getList() {
this.loading = true
getAction(this.url.GroupByTerritory, data).then((res) => {
let query = {
...this.queryParam,
orderBy: this.orderBy,
orderByField: this.orderByField,
}
getAction(this.url.GroupByTerritory, query).then((res) => {
if (res.success) {
this.loading = false
this.dataSource = res.result.dataList || []
@@ -108,14 +140,14 @@
handleCancel() {
this.visible = false
},
// areaOfResponsibilityClick(item) {
// if (this.queryParam.operatorType == 'queryFGTaskToConfirmStatistics' ||
// this.queryParam.operatorType == 'queryDesignStatistics' ||
// this.queryParam.operatorType == 'queryVerifyStatistics') {
// item.isListing = '1'
// }
// this.$emit('responsibility', item)
// }
areaOfResponsibilityClick(item) {
if (this.queryParam.operatorType == 'queryFGTaskToConfirmStatistics' ||
this.queryParam.operatorType == 'queryDesignStatistics' ||
this.queryParam.operatorType == 'queryVerifyStatistics') {
item.isListing = '1'
}
this.$emit('responsibility', item)
}
}
}
</script>
@@ -11,6 +11,151 @@
<a-spin :spinning="confirmLoading">
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G0">
G0</span>
</div>
<a-form-model-item class="itemModel" prop="zero">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G0'"
@change="dateChange({db_field_name:'zero'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.zero"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G1">
G1</span>
</div>
<a-form-model-item class="itemModel" prop="one">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G1'"
@change="dateChange({db_field_name:'one'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.one"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G2">
G2</span>
</div>
<a-form-model-item class="itemModel" prop="two">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G2'"
@change="dateChange({db_field_name:'two'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.two"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G3">
G3</span>
</div>
<a-form-model-item class="itemModel" prop="three">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G3'"
@change="dateChange({db_field_name:'three'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.three"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G4">
G4</span>
</div>
<a-form-model-item class="itemModel" prop="four">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G4'"
@change="dateChange({db_field_name:'four'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.four"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G5">
G5</span>
</div>
<a-form-model-item class="itemModel" prop="five">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G5'"
@change="dateChange({db_field_name:'five'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.five"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G6">
G6</span>
</div>
<a-form-model-item class="itemModel" prop="six">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G6'"
@change="dateChange({db_field_name:'six'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.six"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G7">
G7</span>
</div>
<a-form-model-item class="itemModel" prop="seven">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G7'"
@change="dateChange({db_field_name:'seven'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.seven"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
@@ -165,150 +310,6 @@
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G0">
G0</span>
</div>
<a-form-model-item class="itemModel" prop="zero">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G0'"
@change="dateChange({db_field_name:'zero'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.zero"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G1">
G1</span>
</div>
<a-form-model-item class="itemModel" prop="one">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G1'"
@change="dateChange({db_field_name:'one'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.one"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G2">
G2</span>
</div>
<a-form-model-item class="itemModel" prop="two">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G2'"
@change="dateChange({db_field_name:'two'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.two"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G3">
G3</span>
</div>
<a-form-model-item class="itemModel" prop="three">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G3'"
@change="dateChange({db_field_name:'three'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.three"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G4">
G4</span>
</div>
<a-form-model-item class="itemModel" prop="four">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G4'"
@change="dateChange({db_field_name:'four'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.four"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G5">
G5</span>
</div>
<a-form-model-item class="itemModel" prop="five">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G5'"
@change="dateChange({db_field_name:'five'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.five"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G6">
G6</span>
</div>
<a-form-model-item class="itemModel" prop="six">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G6'"
@change="dateChange({db_field_name:'six'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.six"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" title="G7">
G7</span>
</div>
<a-form-model-item class="itemModel" prop="seven">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+'G7'"
@change="dateChange({db_field_name:'seven'})"
format="YYYY-MM-DD"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.seven"
:disabled="false"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-spin>
@@ -35,7 +35,7 @@
</div>
</a-col>
<template v-if="toggleSearchStatus">
<a-col :md="6" :sm="8">
<a-col :md="6" :sm="8" v-if="isPersonnelSelection">
<div class="box-title-text">
<div class="title-text" :title="$t('StudioEngineer')">
<span>{{$t('StudioEngineer')}}</span>
@@ -48,7 +48,7 @@
v-model="queryParam.studioEngineerName"/>
</div>
</a-col>
<a-col :md="6" :sm="8">
<a-col :md="6" :sm="8" v-if="isPersonnelSelection">
<div class="box-title-text">
<div class="title-text" :title="$t('certifiedEngineer')">
<span>{{$t('certifiedEngineer')}}</span>
@@ -199,6 +199,7 @@
formInline: {},
rules: {},
visible: false,
isPersonnelSelection:true,
dataSource: [],
confirmLoading: false,
url: {
@@ -404,6 +405,10 @@
this.getList()
},
searchReset() {
this.isPersonnelSelection = false
this.$nextTick(()=>{
this.isPersonnelSelection = true
})
this.pageNo = 1
this.queryParam = {}
this.getList()
@@ -101,7 +101,7 @@
</a-select>
</div>
</a-col>
<a-col :md="6" :sm="8">
<a-col :md="6" :sm="8" v-if="isPersonnelSelection">
<div class="box-title-text">
<div class="title-text" :title="$t('Sponsor')">
<span>{{$t('Sponsor')}}</span>
@@ -114,7 +114,7 @@
v-model="queryParam.initiatorName"/>
</div>
</a-col>
<a-col :md="6" :sm="8">
<a-col :md="6" :sm="8" v-if="isPersonnelSelection">
<div class="box-title-text">
<div class="title-text" :title="$t('personLiable')">
<span>{{$t('personLiable')}}</span>
@@ -274,6 +274,7 @@
pageNo: 1,
orderBy: '1',
orderByField: '',
isPersonnelSelection:true,
url: {
page: '/project/ncrTrackController/queryPage',
exportData: '/project/ncrTrackController/exportData'
@@ -336,6 +337,10 @@
}
},
searchReset() {
this.isPersonnelSelection = false
this.$nextTick(()=>{
this.isPersonnelSelection = true
})
this.pageNo = 1
this.queryParam = {}
this.getList()
@@ -392,6 +397,7 @@
PersonnelSelectionChange(value, id) {
this.queryParam[value] = id
this.queryParam = { ...this.queryParam }
console.log(this.queryParam)
},
//流程状态点击事件
@@ -402,12 +408,10 @@
if (row.prcType == '2') {
if (row.flowStatus == 'Task to be confirmed' || row.flowStatus == 'Duty Person Rejected') {
TaskKey = 'zrrqr'
} else if (row.flowStatus == 'Results to be submitted') {
} else if (row.flowStatus == 'Results to be submitted' || row.flowStatus == 'Non-Compliance' || row.flowStatus == 'To be tracked') {
TaskKey = 'zrrtjjfw'
} else if (row.flowStatus == 'Results to be reviewed' ||
row.flowStatus == 'Compliance' ||
row.flowStatus == 'Non-Compliance' ||
row.flowStatus == 'To be tracked' ||
row.flowStatus == 'NA') {
TaskKey = 'fggcssh'
}
@@ -429,12 +433,10 @@
} else if(row.prcType == '4'){
if (row.flowStatus == 'Task to be confirmed' || row.flowStatus == 'Duty Person Rejected') {
TaskKey = 'zrrqr'
} else if (row.flowStatus == 'Results to be submitted') {
} else if (row.flowStatus == 'Results to be submitted' || row.flowStatus == 'Non-Compliance' || row.flowStatus == 'To be tracked') {
TaskKey = 'zrrtjjfw'
} else if (row.flowStatus == 'Results to be reviewed' ||
row.flowStatus == 'Compliance' ||
row.flowStatus == 'Non-Compliance' ||
row.flowStatus == 'To be tracked' ||
row.flowStatus == 'NA') {
TaskKey = 'fggcssh'
}
@@ -68,13 +68,21 @@
</a-row>
</a-form>
</div>
<div class="box-top">
<div class="box-top" style="position: relative">
<!-- <span class="box-top-text">{{ $t('regulatoryCertificationTaskPlan') }}</span>-->
<!-- <span class="box-top-text fullScreenView" @click="TaskPlanListClick">{{ $t('fullScreenView') }}</span>-->
<span style="float: right" @click="handleExport" class="box-top-text-right">
<a-icon type="export" :rotate="-90"/>
{{ $t('export') }}
</span>
<div class="box-header-text">
<div class="box-header-text-text" @click="boxContentClick(0)">
{{$t('whole')}}
</div>
<div class="box-header-text-text" @click="boxContentClick(1)">
{{$t('masterProject')}}
</div>
</div>
<div class="box-top-content" style="position: relative">
<!-- <div id="main"></div>-->
<!-- <div class="axis-tip"></div>-->
@@ -127,18 +135,20 @@
v-if="!val.g"
v-for="(val,indexTwo) in item.data[0]">
<!-- <div class="process-content-right-top" v-if="indexOne % 2 == 0" :title="val.name">{{ val.name }}</div>-->
<div class="process-content-right-button" :title="val.name">{{ val.name }}
<div @click="statusClick(val)" class="process-content-right-button" :title="val.name">{{ val.name }}
</div>
<a-tooltip placement="topLeft" overlayClassName="tooltipColor">
<template slot="title">
<span>{{ val.time.slice(0, 11) }}</span>
</template>
<img v-if="val.status == 1" src="../../../assets/huiBottom.png" class="process-content-left"
alt="">
<img v-else-if="val.status == 2" src="../../../assets/kongBottom.png"
<img @click="statusClick(val)" v-if="val.status == 1" src="../../../assets/huiBottom.png"
class="process-content-left"
alt="">
<img v-else-if="val.status == 3" src="../../../assets/shiBottom.png" class="process-content-left"
<img @click="statusClick(val)" v-else-if="val.status == 2" src="../../../assets/kongBottom.png"
class="process-content-left"
alt="">
<img @click="statusClick(val)" v-else-if="val.status == 3" src="../../../assets/shiBottom.png"
class="process-content-left"
alt="">
</a-tooltip>
@@ -152,8 +162,8 @@
</div>
</div>
</div>
<JLoading :loading="loadingMain">{{ this.$t('dataLoading') }}</JLoading>
</div>
<JLoading :loading="loadingMain">{{ this.$t('dataLoading') }}</JLoading>
</div>
<!-- <div class="box-bottom">-->
<!-- <span class="box-top-text">{{ $t('projectStatusAndProgress') }}</span>-->
@@ -206,11 +216,13 @@
<!-- </a-table>-->
<!-- </div>-->
<!-- </div>-->
<statistics ref="statisticsRef"/>
</a-card>
</template>
<script>
import { getAction, postAction, deleteAction, downloadFile } from '@/api/manage'
import statistics from './components/statistics'
import * as echarts from 'echarts'
import moment from 'moment'
import { ResizeHeader, ResizeColumnProvide } from '@/mixins/header'
@@ -218,6 +230,9 @@
export default {
name: 'index',
mixins: [ResizeHeader, ResizeColumnProvide],
components: {
statistics
},
data() {
return {
queryParam: {},
@@ -302,11 +317,22 @@
],
startTime: undefined,
endTime: undefined,
handlingTime: ''
handlingTime: '',
num: 0,
queryAllProject: true
}
},
mounted() {
this.getList()
let boxContentTextColor = document.getElementsByClassName('box-header-text-color')
if (boxContentTextColor && boxContentTextColor.length > 0) {
boxContentTextColor[0].classList.remove('box-header-text-color')
}
let boxContentTextText = document.getElementsByClassName('box-header-text-text')
if (boxContentTextText && boxContentTextText.length > 0) {
boxContentTextText[0].classList.add('box-header-text-color')
}
this.queryAllProject = true
// this.getList()
this.getTimeline()
this.handlingTime = moment(new Date()).format('YYYY-MM-DD')
// this.handlingTime = '2023-04-30'
@@ -379,7 +405,8 @@
let query = {
startTime: this.startTime || this.getNewDate('before', 6),
endTime: this.endTime || this.getNewDate('after', 5),
...this.queryParam
...this.queryParam,
queryAllProject: this.queryAllProject
}
this.loadingMain = true
getAction(this.url.timeline, query).then((res) => {
@@ -412,7 +439,8 @@
let query = {
startTime: this.startTime || this.getNewDate('before', 6),
endTime: this.endTime || this.getNewDate('after', 5),
...this.queryParam
...this.queryParam,
queryAllProject: this.queryAllProject
}
getAction(this.url.timelineList, query).then((res) => {
if (res.success) {
@@ -526,7 +554,7 @@
},
searchQuery() {
this.getTimeline()
this.getList()
// this.getList()
},
searchReset() {
this.queryParam = {}
@@ -534,20 +562,20 @@
this.startTime = undefined
this.endTime = undefined
this.getTimeline()
this.getList()
},
getList() {
this.loading = true
getAction(this.url.list, this.queryParam).then((res) => {
if (res.success) {
this.loading = false
this.dataSource = res.result || []
} else {
this.loading = false
this.dataSource = []
}
})
// this.getList()
},
// getList() {
// this.loading = true
// getAction(this.url.list, this.queryParam).then((res) => {
// if (res.success) {
// this.loading = false
// this.dataSource = res.result || []
// } else {
// this.loading = false
// this.dataSource = []
// }
// })
// },
projectNameClick() {
let newUrl = this.$router.resolve({
path: '/projectStatusAndProgress'
@@ -567,10 +595,31 @@
let query = {
...this.queryParam,
startTime: this.startTime || this.getNewDate('before', 6),
endTime: this.endTime || this.getNewDate('after', 5)
endTime: this.endTime || this.getNewDate('after', 5),
queryAllProject: this.queryAllProject
}
downloadFile('/project/ProjectStatusBoardController/exportXls',
this.$t('GRPSystemProjectProgressStatistics') + '.xls', query, this.Deselect)
},
statusClick(val) {
this.$refs.statisticsRef.getData(val)
},
boxContentClick(num) {
let boxContentTextColor = document.getElementsByClassName('box-header-text-color')
if (boxContentTextColor && boxContentTextColor.length > 0) {
boxContentTextColor[0].classList.remove('box-header-text-color')
}
let boxContentTextText = document.getElementsByClassName('box-header-text-text')
if (boxContentTextText && boxContentTextText.length > 0) {
boxContentTextText[num].classList.add('box-header-text-color')
}
this.num = num
if (num == 0) {
this.queryAllProject = true
} else if (num == 1) {
this.queryAllProject = false
}
this.getTimeline()
}
}
}
@@ -866,6 +915,7 @@
font-weight: 400;
color: #6F7385;
position: absolute;
cursor: pointer;
background: #fff;
left: 50%;
top: 36px;
@@ -940,4 +990,38 @@
margin-top: 8px !important;
}
.box-header-text {
height: 30px;
background: #F5F6F7;
border-radius: 4px;
position: absolute;
right: 88px;
top: -9px;
display: flex;
z-index: 116;
justify-content: space-between;
padding: 0 2px 0 2px;
.box-header-text-text {
display: inline-block;
font-size: 12px;
color: #6F7385;
line-height: 30px;
margin-right: 10px;
cursor: pointer;
margin-left: 10px;
}
.box-header-text-color {
box-shadow: 0px 1px 2px rgba(0, 0, 60, 0.01), 0px 2px 4px rgba(0, 22, 60, 0.02), 0px 4px 6px rgba(0, 22, 60, 0.0229458);
border-radius: 4px;
padding: 4px 6px;
background: #FFFFFF;
border: 1px solid #E6E7EC;
color: #01A0AC;
line-height: normal;
margin-right: 0;
margin-left: 0;
}
}
</style>
@@ -237,9 +237,22 @@
</span>
</a-table>
<div class="buttom-box" v-if="dataSource && dataSource.length > 0">
{{$t('total')+' '+this.dataSource.length+' '+ $t('strip')}}
<div class="page" v-if="dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:pageSizeOptions="['50','100','200','300']"
:current="pageNo"
@change="onChangeSize"
@showSizeChange="SizeChange"
/>
</div>
<!-- <div class="buttom-box" v-if="dataSource && dataSource.length > 0">-->
<!-- {{$t('total')+' '+this.dataSource.length+' '+ $t('strip')}}-->
<!-- </div>-->
</div>
</a-card>
</div>
@@ -288,8 +301,11 @@
isbutton: false,
toggleSearchStatus:false,
dataSource: [],
pageNo: 1,
pageSize: 50,
total: 0,
url: {
list: '/authDummy/authDummyInventoryInfoEO/list',
list: '/authDummy/authDummyInventoryInfoEO/page',
logList: '/authDummy/authDummyLog/page',//更新log
exportTemplate: '/authDummy/authDummyInventoryInfoEO/exportTemplate',//模板下载
exportData: '/authDummy/authDummyInventoryInfoEO/exportData',//导出
@@ -535,17 +551,35 @@
getPersonnelList(){
this.getList()
},
onChangeSize(page, pageSize) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList() {
let query = {
...this.queryParam,
orderBy: this.orderBy,
orderByField: this.orderByField,
authDummyInventoryBaseId: this.$route.query.id
authDummyInventoryBaseId: this.$route.query.id,
pageNo: this.pageNo,
pageSize: this.pageSize
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
this.dataSource = res.result || []
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
// this.dataSource = res.result || []
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
@@ -723,4 +757,12 @@
color: #00B3BE;
cursor: pointer;
}
.page {
text-align: right;
margin-top: 20px;
margin-bottom: 20px;
}
::v-deep .ant-card-body {
padding: 14px 32px 0 32px;
}
</style>