Merge remote-tracking branch 'origin/master'

This commit is contained in:
wangzhijiang
2022-05-26 17:05:11 +08:00
58 changed files with 1319 additions and 170 deletions
@@ -76,7 +76,7 @@ public class ParamsManifestEOController extends JeroController<ParamsManifestEO,
@ApiOperation(value="参数清单-参数模板列表查询", notes="参数清单-参数模板列表查询")
@GetMapping(value = "/getParamsTemplatePage")
// @RequiresPermissions("params:manifest:add")
public Result<?> getParamsTemplateList(ParamsTemplateEO paramsTemplateEO,
public Result<?> getParamsTemplatePage(ParamsTemplateEO paramsTemplateEO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
@RequestParam(name="cut") String cut) {
@@ -233,6 +233,24 @@ public class ParamsManifestEOController extends JeroController<ParamsManifestEO,
return Result.OK(paramsManifestVOPage);
}
/**
* 参数模板列表查询
*
* @return
*/
@AutoLog(value = "参数清单-复制-参数模板列表查询")
@ApiOperation(value="参数清单-复制-参数模板列表查询", notes="参数清单-复制-参数模板列表查询")
@GetMapping(value = "/getParamsTemplatePageOfCopy")
// @RequiresPermissions("params:manifest:copy")
public Result<?> getParamsTemplatePageOfCopy(ParamsTemplateEO paramsTemplateEO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
@RequestParam(name="cut") String cut) {
Page<ParamsTemplateEO> page = new Page<ParamsTemplateEO>(pageNo, pageSize);
IPage<ParamsTemplateEO> pageList = paramsManifestEOService.getNewestPublishPage(page, paramsTemplateEO);
return Result.OK(cut, pageList);
}
/**
* 复制清单
* 分页
@@ -28,7 +28,6 @@ import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -100,8 +99,8 @@ public class SysCategoryController {
@AutoLog(value = "标签内容-查询字典配置的父级名称")
@ApiOperation(value = "标签内容-查询字典配置的父级名称", notes = "标签内容-查询字典配置的父级名称")
@GetMapping(value = "/queryPid")
public Result<List<SysCategory>> queryPid() {
List<SysCategory> list = sysCategoryService.queryPid();
public Result<List<SysCategory>> queryPid(SysCategory sysCategory) {
List<SysCategory> list = sysCategoryService.queryPid(sysCategory);
return Result.OK(list);
}
@@ -84,7 +84,7 @@ public class SysDictItemController {
@CacheEvict(value= CacheConstant.SYS_DICT_CACHE, allEntries=true)
public Result<SysDictItem> add(@RequestBody SysDictItem sysDictItem) {
Result<SysDictItem> result = new Result<SysDictItem>();
sysDictItemService.setAddOrdderNum(sysDictItem);
sysDictItemService.setAddOrderNum(sysDictItem);
//查询同名数据
List<SysDictItem> exitDictItemList = sysDictItemMapper.selctItemByName(sysDictItem.getItemText(),sysDictItem.getDictId());
if(CollectionUtils.isNotEmpty(exitDictItemList)){
@@ -90,5 +90,5 @@ public interface ISysCategoryService extends IService<SysCategory> {
void setEditOrderNum(SysCategory sysCategory);
List<SysCategory> queryPid();
List<SysCategory> queryPid(SysCategory sysCategory);
}
@@ -31,7 +31,7 @@ public interface ISysDictItemService extends IService<SysDictItem> {
*/
public void updateDictDelFlag(int delFlag,String id);
void setAddOrdderNum(SysDictItem sysDictItem);
void setAddOrderNum(SysDictItem sysDictItem);
void setEditOrderNum(SysDictItem sysDictItem);
}
@@ -387,9 +387,11 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
}
@Override
public List<SysCategory> queryPid() {
public List<SysCategory> queryPid(SysCategory sysCategory) {
QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("pid",0);
queryWrapper.eq("sys_dict_id",sysCategory.getSysDictId())
.eq("pid",0)
.orderByDesc("sort_order");
List<SysCategory> list = list(queryWrapper);
return list;
}
@@ -57,23 +57,25 @@ public class SysDictItemServiceImpl extends ServiceImpl<SysDictItemMapper, SysDi
}
@Override
public void setAddOrdderNum(SysDictItem sysDictItem) {
public void setAddOrderNum(SysDictItem sysDictItem) {
Integer inputOrderNum = sysDictItem.getSortOrder();
if(inputOrderNum != null) {
//查询展示顺序相同的
QueryWrapper<SysDictItem> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0)
.eq("dict_id",sysDictItem.getDictId())
.orderByAsc("order_num");
queryWrapper.eq("order_num", inputOrderNum);
.eq("is_tag_dict",sysDictItem.getIsTagDict())
.orderByAsc("sort_order");
queryWrapper.eq("sort_order", inputOrderNum);
Integer orderNumCount = sysDictItemMapper.selectCount(queryWrapper);
if (orderNumCount > 0) {//有重复展示顺序的,后面的号全+1
//设置排序
QueryWrapper<SysDictItem> orderNumQueryWrapper = new QueryWrapper<>();
orderNumQueryWrapper.ge("order_num", inputOrderNum)
orderNumQueryWrapper.ge("sort_order", inputOrderNum)
.eq("dict_id",sysDictItem.getDictId())
.eq("del_flag", CommonConstant.DEL_FLAG_0)
.orderByAsc("order_num");
.eq("is_tag_dict",sysDictItem.getIsTagDict())
.orderByAsc("sort_order");
List<SysDictItem> geOrderNumList = list(orderNumQueryWrapper);
//判断相邻的序号,去掉不邻的
@@ -101,6 +103,7 @@ public class SysDictItemServiceImpl extends ServiceImpl<SysDictItemMapper, SysDi
QueryWrapper<SysDictItem> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0)
.eq("dict_id",sysDictItem.getDictId())
.eq("is_tag_dict",sysDictItem.getIsTagDict())
.orderByAsc("sort_order");
Integer orderNumData = list(queryWrapper).stream().filter(e -> e.getId().equals(sysDictItem.getId()))
.map(e -> e.getSortOrder()).collect(Collectors.toList()).get(0);
@@ -112,6 +115,7 @@ public class SysDictItemServiceImpl extends ServiceImpl<SysDictItemMapper, SysDi
orderNumQueryWrapper.ge("sort_order", inputOrderNum)
.eq("dict_id",sysDictItem.getDictId())
.eq("del_flag", CommonConstant.DEL_FLAG_0)
.eq("is_tag_dict",sysDictItem.getIsTagDict())
.orderByAsc("sort_order");
List<SysDictItem> geOrderNumList = list(orderNumQueryWrapper);
@@ -725,17 +725,31 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
List<OnlCgformField> treeOnlCgformFieldList = fieldList.stream().filter(e -> FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType())).collect(Collectors.toList());
List<String> treeList = treeOnlCgformFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList());
List<OnlCgformField> onlCgformFieldDateMoreList = fieldList.stream().filter(e -> FieldTypeEnum.DATE_MORE.getValue().equals(e.getFieldShowType())).collect(Collectors.toList());
List<OnlCgformField> onlCgformFieldPersonList = fieldList.stream().filter(e -> FieldTypeEnum.PERSON.getValue().equals(e.getFieldShowType())).collect(Collectors.toList());
List<String> personList = onlCgformFieldPersonList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList());
List<String> dateMoreList = onlCgformFieldDateMoreList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList());
//通过id查询数据
List<Map<String, Object>> dataList = bussDocumentLibraryEOMapper.selectMapsAll(id);
//多选日期
List<String> userNameList = new ArrayList<>();
for (Map.Entry<String, Object> entry : dataList.get(0).entrySet()) {
String key = entry.getKey();
if(personList.contains(key)){
String value = (String) entry.getValue();
userNameList.addAll(Arrays.asList(value.split(",")));
}
if(dateMoreList.contains(key) && ObjectUtils.isNotEmpty(entry.getValue())){
String value = (String) entry.getValue();
entry.setValue(Arrays.asList(value.split(",")));
}
}
List<SysUser> userList = new ArrayList<>();
if(userNameList.size() != 0){
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
wrapper.in(SysUser::getUsername,userNameList);
userList = sysUserService.list(wrapper);
}
//查询所有
List<Map<String, Object>> mapList = bussDocumentLibraryEOMapper.selectMapsAll(null);
@@ -750,6 +764,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
}
}
dataList.get(0).put("replaced_standard", StringUtils.join(replacedStandardNameList, ","));
List<String> personKeyList = new ArrayList<>();
for (Map.Entry<String, Object> entry : dataList.get(0).entrySet()) {
if(treeList.contains(entry.getKey())){
String value = (String) entry.getValue();
@@ -759,6 +774,28 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
dataList.get(0).put(entry.getKey(), null);
}
}
if(personList.contains(entry.getKey())){
if(StringUtils.isNotBlank((String)entry.getValue())){
personKeyList.add(entry.getKey());
}
}
}
//标准选择字段,添加id(用于回显)
if(personKeyList.size() != 0){
for (String personKey : personKeyList) {
String value = (String)dataList.get(0).get(personKey);
List<SysUser> users = new ArrayList<>();
if(userList.size() != 0 && StringUtils.isNotBlank(value)){
for (String s : value.split(",")) {
List<SysUser> sysUserList = userList.stream().filter(e -> e.getUsername().equals(s)).collect(Collectors.toList());
users.addAll(sysUserList);
}
if(users.size() != 0){
List<String> userIdList = users.stream().map(SysUser::getId).collect(Collectors.toList());
dataList.get(0).put(personKey + "_id",StringUtils.join(userIdList,","));
}
}
}
}
return dataList;
}
@@ -186,13 +186,13 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String designDeliverableTemplateName;
/**设计符合性确认-发起人*/
@Excel(name = "design-Initiator", width = 15,dicCode ="fa1_qi3_ren2")
@Excel(name = "design-Initiator", width = 15)
@ApiModelProperty(value = "设计符合性确认-发起人")
@Dict(dicCode ="fa1_qi3_ren2")
private String designInitiator;
/**设计符合性确认-责任人*/
@Excel(name = "design-Assignee", width = 15,dicCode ="ze2_ren4_ren2")
@Excel(name = "design-Assignee", width = 15)
@ApiModelProperty(value = "设计符合性确认-责任人")
@Dict(dicCode ="ze2_ren4_ren2")
private String designDuty;
@@ -213,13 +213,13 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String prehomoDeliverableTemplateName;
/**prehomo确认-发起人*/
@Excel(name = "Prehomo-Initiator", width = 15,dicCode ="fa1_qi3_ren2")
@Excel(name = "Prehomo-Initiator", width = 15)
@ApiModelProperty(value = "prehomo确认-发起人")
@Dict(dicCode ="fa1_qi3_ren2")
private String prehomoInitiator;
/**prehomo确认-责任人*/
@Excel(name = "Prehomo-Assignee", width = 15,dicCode ="ze2_ren4_ren2")
@Excel(name = "Prehomo-Assignee", width = 15)
@ApiModelProperty(value = "prehomo确认-责任人")
@Dict(dicCode ="ze2_ren4_ren2")
private String prehomoDuty;
@@ -240,13 +240,13 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String verifyDeliverableTemplateName;
/**验证符合性确认-发起人*/
@Excel(name = "verify-Initiator", width = 15,dicCode ="fa1_qi3_ren2")
@Excel(name = "verify-Initiator", width = 15)
@ApiModelProperty(value = "验证符合性确认-发起人")
@Dict(dicCode ="fa1_qi3_ren2")
private String verifyInitiator;
/**验证符合性确认-责任人*/
@Excel(name = "verify-Assignee", width = 15,dicCode ="ze2_ren4_ren2")
@Excel(name = "verify-Assignee", width = 15)
@ApiModelProperty(value = "验证符合性确认-责任人")
@Dict(dicCode ="ze2_ren4_ren2")
private String verifyDuty;
@@ -174,7 +174,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
//订阅标识
List<String> ids = records.stream().map(DummyInventoryBaseEO::getId).collect(Collectors.toList());
LambdaQueryWrapper<DummyReadEO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(DummyReadEO::getDummyInventoryBaseId, ids);
wrapper.in(DummyReadEO::getDummyInventoryBaseId, ids).in(DummyReadEO::getCreateBy,sysUser.getUsername());
List<DummyReadEO> dummyReadEOS = iDummyReadEOService.list(wrapper);
List<String> dummyReadIdList = dummyReadEOS.stream().map(DummyReadEO::getDummyInventoryBaseId).collect(Collectors.toList());
for (DummyInventoryBaseEO record : pageList.getRecords()) {
@@ -685,7 +685,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
//封装消息的实体类
SysAnnouncement sysAnnouncement = bussDocumentLibraryEOService.getSysAnnouncement(userIdList, content, contentInfo);
sysAnnouncementService.saveAnnouncement(sysAnnouncement);
bussDocumentLibraryEOService.sendWebsocket(idTemp, idTemp);
bussDocumentLibraryEOService.sendWebsocket(idTemp, contentInfo);
//飞书
try {
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentInfo, MessageTypeEnum.PUSH.getName(), href);
@@ -148,7 +148,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String username = sysUser.getUsername();
String serialNumber = list.stream().map(e->e.getSerialNumber()).collect(Collectors.joining(","));
String contentLog = username+"向清单中添加了标准\""+serialNumber+"\"";
String contentLog = username+"向清单中添加了标准"+serialNumber+"";
dummyLogEOService.updateLog(contentLog, dummyInventoryInfoEO.getDummyInventoryBaseId());
}
}
@@ -167,7 +167,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
//更新log
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String username = sysUser.getUsername();
String contentLog = username+"编辑了清单中的\"" + dummyInventoryInfoEO.getSerialNumber() + "\"标准:";
String contentLog = username+"编辑了清单中的" + dummyInventoryInfoEO.getSerialNumber() + "标准:";
List<DummyInventoryInfoEO> infoEOList = new ArrayList<>();
infoEOList.add(dummyInventoryInfoEO);
//查询数据库里原来的数据
@@ -234,7 +234,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
String username = sysUser.getUsername();
String projectId = dummyInventoryInfoEOList.get(0).getDummyInventoryBaseId();
String serialNumber = dummyInventoryInfoEOList.stream().map(e->e.getSerialNumber()).collect(Collectors.joining(","));
String contentLog = username+"删除了清单中的\""+serialNumber+"\"标准";
String contentLog = username+"删除了清单中的"+serialNumber+"标准";
dummyLogEOService.updateLog(contentLog, projectId);
}
@@ -258,7 +258,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
public List<DummyInventoryInfoEO> queryList(DummyInventoryInfoEO dummyInventoryInfoEO,HttpServletRequest req) {
QueryWrapper<DummyInventoryInfoEO> queryWrapper = QueryGenerator.initQueryWrapper(dummyInventoryInfoEO,req.getParameterMap());
// queryWrapper.in("dummy_inventory_base_id",dummyInventoryInfoEO.getDummyInventoryBaseId());
queryWrapper.orderByDesc("create_time");
queryWrapper.orderByDesc("create_time","serial_number");
List<DummyInventoryInfoEO> dummyInventoryInfoEOList = this.list(queryWrapper);
//技术领域处理
@@ -287,7 +287,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
String username = sysUser.getUsername();
String projectId = dummyInventoryInfoEOList.get(0).getDummyInventoryBaseId();
String serialNumber = dummyInventoryInfoEOList.stream().map(e->e.getSerialNumber()).collect(Collectors.joining(","));
String contentLog = username+"复制了\""+serialNumber+"\"";
String contentLog = username+"复制了"+serialNumber+"";
dummyLogEOService.updateLog(contentLog, projectId);
}
}
@@ -303,7 +303,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
//更新log
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String username = sysUser.getUsername();
String contentLog = username+"批量设置了";
String contentLog = username+"批量设置了";
StringBuilder contentLogBuilder = new StringBuilder(contentLog);
//根据id查询数据库中完整信息,翻译
@@ -423,6 +423,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
this.updateBatchById(dummyInventoryInfoEOList);
contentLog = contentLogBuilder.substring(0, contentLogBuilder.length() - 1);
contentLog += "";
dummyLogEOService.updateLog(contentLog, projectId);
}
}
@@ -1193,7 +1194,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
String serialNumber = serialNumberBuilder.substring(0, serialNumberBuilder.length() - 1);
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String username = sysUser.getUsername();
String contentLog = username+"向清单中导入了\""+serialNumber+"\"标准";
String contentLog = username+"向清单中导入了"+serialNumber+"标准";
dummyLogEOService.updateLog(contentLog, dataList.get(0).getDummyInventoryBaseId());
}
}
@@ -1538,7 +1539,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
//文件
List<OSSFile> fileInfos = getOssFiles(dataList);
//数据转换(文件名称,技术领域,对应标准)
//数据转换(文件名称,技术领域,对应标准,发起人,责任人)
dataTransition(dataList, fileInfos,dummyInventoryInfoEO);
OutputStream os = null;
@@ -1713,6 +1714,11 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
private void dataTransition(List<DummyInventoryInfoEO> dataList, List<OSSFile> fileInfos,DummyInventoryInfoEO dummyInventoryInfoEO) {
//技术领域
List<SysCategory> sysCategoryList = sysCategoryService.list();
//普通数据字典
List<SysDictItem> dictItemList = sysDictItemServiceImpl.selectItemsAll();
List<SysDictItem> sysDictItemInitiator = dictItemList.stream().filter(e -> "fa1_qi3_ren2".equals(e.getDictCode())).collect(Collectors.toList());
List<SysDictItem> sysDictItemDuty = dictItemList.stream().filter(e -> "ze2_ren4_ren2".equals(e.getDictCode())).collect(Collectors.toList());
//文档库数据
List<String> correspondingStandardIdList = new ArrayList<>();
for (DummyInventoryInfoEO inventoryInfoEO : dataList) {
@@ -1721,33 +1727,49 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
correspondingStandardIdList.addAll(Arrays.asList(correspondingStandard.split(",")));
}
}
// LambdaQueryWrapper<BussDocumentLibraryEO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
// lambdaQueryWrapper.in(BussDocumentLibraryEO::getId,correspondingStandardIdList);
// List<BussDocumentLibraryEO> bussDocumentLibraryEOList = iBussDocumentLibraryEOService.list(lambdaQueryWrapper);
for (DummyInventoryInfoEO inventoryInfoEO : dataList) {
String correspondingStandard = inventoryInfoEO.getCorrespondingStandard();
String technologyTerritory = inventoryInfoEO.getTechnologyTerritory();
String designDeliverableTemplate = inventoryInfoEO.getDesignDeliverableTemplate();
String prehomoDeliverableTemplate = inventoryInfoEO.getPrehomoDeliverableTemplate();
String verifyDeliverableTemplate = inventoryInfoEO.getVerifyDeliverableTemplate();
//对应标准
// if(StringUtils.isNotBlank(correspondingStandard)){
// StringBuilder sb = new StringBuilder();
// for (String s : correspondingStandard.split(",")) {
// List<BussDocumentLibraryEO> collect = bussDocumentLibraryEOList.stream()
// .filter(e -> s.equals(e.getId())).collect(Collectors.toList());
// if(collect.size() != 0){
// sb.append(collect.get(0).getSerialNumber() + ",");
// }else{
// sb.append(s + ",");
// }
// }
// if(StringUtils.isNotBlank(sb)){
// String substring = sb.substring(0, sb.length() - 1);
// inventoryInfoEO.setCorrespondingStandard(substring);
// }
// }
//技术的发起人,责任人
String designInitiator = inventoryInfoEO.getDesignInitiator();
String designInitiatorPerson = getPerson(dummyInventoryInfoEO, sysDictItemInitiator, designInitiator);
if(StringUtils.isNotBlank(designInitiatorPerson)){
inventoryInfoEO.setDesignInitiator(designInitiatorPerson);
}
String designDuty = inventoryInfoEO.getDesignDuty();
String designDutyPerson = getPerson(dummyInventoryInfoEO, sysDictItemDuty, designDuty);
if(StringUtils.isNotBlank(designDutyPerson)){
inventoryInfoEO.setDesignDuty(designDutyPerson);
}
//pre的发起人,责任人
String prehomoInitiator = inventoryInfoEO.getPrehomoInitiator();
String prehomoInitiatorPerson = getPerson(dummyInventoryInfoEO, sysDictItemInitiator, prehomoInitiator);
if(StringUtils.isNotBlank(prehomoInitiatorPerson)){
inventoryInfoEO.setPrehomoInitiator(prehomoInitiatorPerson);
}
String prehomoDuty = inventoryInfoEO.getPrehomoDuty();
String prehomoDutyPerson = getPerson(dummyInventoryInfoEO, sysDictItemDuty, prehomoDuty);
if(StringUtils.isNotBlank(prehomoDutyPerson)){
inventoryInfoEO.setPrehomoDuty(prehomoDutyPerson);
}
//验证的发起人,责任人
String verifyInitiator = inventoryInfoEO.getVerifyInitiator();
String verifyInitiatorPerson = getPerson(dummyInventoryInfoEO, sysDictItemInitiator, verifyInitiator);
if(StringUtils.isNotBlank(verifyInitiatorPerson)){
inventoryInfoEO.setVerifyInitiator(verifyInitiatorPerson);
}
String verifyDuty = inventoryInfoEO.getVerifyDuty();
String verifyDutyPerson = getPerson(dummyInventoryInfoEO, sysDictItemDuty, verifyDuty);
if(StringUtils.isNotBlank(verifyDutyPerson)){
inventoryInfoEO.setVerifyDuty(verifyDutyPerson);
}
//技术领域
if(StringUtils.isNotBlank(technologyTerritory)){
StringBuilder sb = new StringBuilder();
@@ -1786,6 +1808,27 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
}
}
private String getPerson(DummyInventoryInfoEO dummyInventoryInfoEO, List<SysDictItem> sysDictItemList, String designInitiator) {
if(StringUtils.isNotBlank(designInitiator)){
StringBuilder sb = new StringBuilder();
for (String s : designInitiator.split(",")) {
List<SysDictItem> itemList = sysDictItemList.stream().filter(e -> s.equals(e.getItemValue())).collect(Collectors.toList());
if(itemList.size() != 0){
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
sb.append(itemList.get(0).getItemText()+",");
}else{
sb.append(itemList.get(0).getEnName()+",");
}
}
if(StringUtils.isNotBlank(sb)){
String substring = sb.substring(0, sb.length() - 1);
return substring;
}
}
}
return null;
}
/**
* 模板名称转换
* @param fileInfos
@@ -112,7 +112,7 @@ public class HomeFunctionModuleEOServiceImpl extends ServiceImpl<HomeFunctionMod
LambdaQueryWrapper<HomeFunctionModuleEO> wrapperTemp = new LambdaQueryWrapper<>();
wrapperTemp.in(HomeFunctionModuleEO::getCreateBy,loginUser.getUsername()).orderByAsc(HomeFunctionModuleEO::getState).orderByAsc(HomeFunctionModuleEO::getSort);
List<HomeFunctionModuleEO> homeFunctionModuleEOS = this.list(wrapperTemp);
if(homeFunctionModuleEOList.size() == 0){
if(homeFunctionModuleEOS.size() == 0){
if(CutEnum.EN.getValue().equals(cut)){
for (HomeFunctionModuleEO homeFunctionModuleEO : homeFunctionModuleEOList) {
homeFunctionModuleEO.setIconName(homeFunctionModuleEO.getIconNameEn());
@@ -1473,7 +1473,9 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
//翻译传入的数据
List<ProjectLawsInventoryEO> inputList = new ArrayList<>();
inputList.add(projectLawsInventoryEO);
ProjectLawsInventoryEO projectLawsInventoryEONew = new ProjectLawsInventoryEO();
BeanUtils.copyProperties(projectLawsInventoryEO,projectLawsInventoryEONew);
inputList.add(projectLawsInventoryEONew);
translateData(inputList);
ProjectLawsInventoryEO inputInfoEO = inputList.get(0);
@@ -259,7 +259,7 @@ public class FileSplitItemsEOController extends JeroController<SarFileSplitItems
@RequiresPermissions("split:sarFileSplitItems:page")
public Result<List<Map<String, Object>>> getHeader(@RequestParam(name = "flag") String flag,
@RequestParam(name = "cut") String cut) {
List<Map<String, Object>> list = languageSwitchService.getHeader(flag, cut);
List<Map<String, Object>> list = fileSplitItemsEOService.getHeader(flag, cut);
return Result.OK(list);
}
@@ -243,7 +243,7 @@ public class SarFileSplitInfoController extends JeroController<SarFileSplitInfoE
@RequiresPermissions("split:sarFileSplitInfo:page")
public Result<List<Map<String, Object>>> getHeader(@RequestParam(name = "flag") String flag,
@RequestParam(name = "cut") String cut) {
List<Map<String, Object>> list = languageSwitchService.getHeader(flag, cut);
List<Map<String, Object>> list = sarFileSplitInfoService.getHeader(flag, cut);
return Result.OK(list);
}
@@ -81,4 +81,6 @@ public interface IFileSplitItemsEOService extends IService<SarFileSplitItemsEO>
String getFieldForExport();
int insertForeach(List<SarFileSplitItemsEO> messageList); // 拆分已入库文件专用
List<Map<String, Object>> getHeader(String flag, String cut);
}
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.split.entity.SarFileSplitInfoEO;
import java.util.List;
import java.util.Map;
/**
* @Description: 文档拆分表
@@ -65,4 +66,7 @@ public interface ISarFileSplitInfoService extends IService<SarFileSplitInfoEO> {
boolean bindToDocumentLibrary(String id, String connectId, String fileName);
void dataProcessing(String cut, List<SarFileSplitInfoEO> sarFileSplitInfoEOList);
List<Map<String, Object>> getHeader(String flag, String cut);
}
@@ -23,6 +23,7 @@ import com.jero.generater.modules.online.cgform.entity.OnlCgformField;
import com.jero.generater.modules.online.cgform.service.impl.OnlCgformFieldServiceImpl;
import com.jero.modules.document.enums.FieldTypeEnum;
import com.jero.modules.document.service.IBussDocumentLibraryEOService;
import com.jero.modules.ocr.util.LineHumpUtil;
import com.jero.modules.ocr.util.UUIDUtils;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
@@ -3574,4 +3575,47 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
return dao.insertForeach(messageList);
}
/**
* 列表表头中英文切换
*
* @return
*/
@Override
public List<Map<String, Object>> getHeader(String flag, String cut) {
List<OnlCgformField> fieldList = onlCgformFieldService.getFieldList(flag);
if (fieldList.size() != 0) {
//过滤列表字段(is_show_list-->列表是否显示0否 1是)
fieldList = fieldList.stream().filter(e -> YesOrNoEnum.YES.getValue().equals(String.valueOf(e.getIsShowList()))).collect(Collectors.toList());
}
List<Map<String, Object>> list = new ArrayList<>();
for (OnlCgformField onlCgformField : fieldList) {
Map<String, Object> map = new HashMap<>();
if(FieldTypeEnum.TEXT_LINK.getValue().equals(onlCgformField.getFieldShowType())){
map.put("urlClick","true");
}
if("file_name".equals(onlCgformField.getDbFieldName())
|| "iterms_conditions".equals(onlCgformField.getDbFieldName())){
//跳转详情的标识
map.put("click","true");
}
//日期添加排序标识
if ("create_time".equals(onlCgformField.getDbFieldName())) {
map.put("sort", "true");//列表排序标识
}
if ("update_time".equals(onlCgformField.getDbFieldName())) {
map.put("sort", "true");//列表排序标识
}
String dbFieldName = onlCgformField.getDbFieldName();
map.put("db_field_name", dbFieldName);
if(CutEnum.CN.getValue().equals(cut)){
map.put("db_field_txt", onlCgformField.getDbFieldTxt());//字段中文名
}else{
map.put("db_field_txt", onlCgformField.getDbFieldEnName());//字段英文名
}
list.add(map);
}
return list;
}
}
@@ -10,6 +10,8 @@ import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.generater.modules.online.cgform.entity.OnlCgformField;
import com.jero.generater.modules.online.cgform.service.impl.OnlCgformFieldServiceImpl;
import com.jero.modules.document.enums.FieldTypeEnum;
import com.jero.modules.ocr.util.LineHumpUtil;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.split.entity.SarFileSplitInfoEO;
@@ -263,4 +265,50 @@ public class SarFileSplitInfoServiceImpl extends ServiceImpl<SarFileSplitInfoMap
}
}
}
/**
* 列表表头中英文切换
*
* @return
*/
@Override
public List<Map<String, Object>> getHeader(String flag, String cut) {
List<OnlCgformField> fieldList = onlCgformFieldService.getFieldList(flag);
if (fieldList.size() != 0) {
//过滤列表字段(is_show_list-->列表是否显示0否 1是)
fieldList = fieldList.stream().filter(e -> YesOrNoEnum.YES.getValue().equals(String.valueOf(e.getIsShowList()))).collect(Collectors.toList());
}
List<Map<String, Object>> list = new ArrayList<>();
for (OnlCgformField onlCgformField : fieldList) {
Map<String, Object> map = new HashMap<>();
if(FieldTypeEnum.TEXT_LINK.getValue().equals(onlCgformField.getFieldShowType())){
map.put("urlClick","true");
}
if("file_name".equals(onlCgformField.getDbFieldName())
|| "serial_number".equals(onlCgformField.getDbFieldName())
|| "title".equals(onlCgformField.getDbFieldName())){
//跳转详情的标识
map.put("click","true");
}
//日期添加排序标识
if ("create_time".equals(onlCgformField.getDbFieldName())) {
map.put("sort", "true");//列表排序标识
}
if ("update_time".equals(onlCgformField.getDbFieldName())) {
map.put("sort", "true");//列表排序标识
}
String dbFieldName = onlCgformField.getDbFieldName();
map.put("db_field_name", LineHumpUtil.lineToHump(dbFieldName));
if(CutEnum.CN.getValue().equals(cut)){
map.put("db_field_txt", onlCgformField.getDbFieldTxt());//字段中文名
}else{
map.put("db_field_txt", onlCgformField.getDbFieldEnName());//字段英文名
}
list.add(map);
}
return list;
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 765 B

+7 -6
View File
@@ -73,7 +73,7 @@ module.exports = {
lessOrEqual: 'Less Than Or Equal To',
user: 'User',
numericalValue: 'Numerical Value',
not: 'No',
not: 'No.',
EnterValue: 'Please Enter a Value',
SavedQuery: 'Saved Query',
NoQueriesSaved: 'No Queries Were Saved',
@@ -612,7 +612,7 @@ module.exports = {
task: 'Task',
TaskCutOffTime: 'Due Date',
Transfer: 'Transfer',
CertificationDirectory: 'Certification directory',
CertificationDirectory: 'Certification Catalogue',
TaskRequirements: 'Task requirements',
CertificationProgress: 'Homo Progress',
CurrentProjectStatusEvaluation: 'Current State',
@@ -675,7 +675,7 @@ module.exports = {
The: 'The',
submitted: 'Data has been submitted and cannot be submitted again',
basicInformationOfParameters: 'Basic information of parameters',
regulatoryCertificationTaskPlan: 'Regulatory / certification task plan',
regulatoryCertificationTaskPlan: 'Regulatory / Certification Task Plan',
bringInRelevantPersonnel: 'Bring in relevant personnel',
confirmBringInRelevantPersonnel: 'Confirm Bring in relevant personnel',
problemType: 'Problem type',
@@ -781,7 +781,7 @@ module.exports = {
notEvaluated: 'Not evaluated',
cannotExceed: 'Cannot exceed',
Characters: 'Characters',
standardInformation: 'StandardInformation',
standardInformation: 'Standard Information',
VirtualList: 'VirtualList',
importTemplate: 'Import Template',
verificationConfirmationDeadline: 'Verification compliance confirmation deadline',
@@ -811,9 +811,9 @@ module.exports = {
yellow: 'Yellow',
resultReported: 'Result Reported',
TheDoesNotContainData: 'The maintenance list of the virtual list does not contain data',
number: 'No',
number: 'No.',
Deadline: 'Deadline',
toBeConfirmed: 'To be confirmed',
toBeConfirmed: 'No rating',
designComplianceReview: 'Confirm design conformance',
preHomeConfirmation: 'Pre-Homo confirmation',
verificationComplianceReview: 'Verify conformance validation',
@@ -893,4 +893,5 @@ module.exports = {
ExportReport:'Export Report',
basicInformation:'Basic Information',
replyFromProjectContact:'Reply from project contact person',
pleaseUpload:'Please Upload',
}
+1
View File
@@ -898,4 +898,5 @@ module.exports = {
ExportReport:'导出报告',
basicInformation:'基础信息',
replyFromProjectContact:'工程接口人回复',
pleaseUpload:'请上传',
}
@@ -109,6 +109,7 @@
if (this.isSingleChoice) {
if (this.userIds.length > 1) {
this.$message.warning(this.$t('onlyOnePersonCanBeSelected'))
return
}
}
let userIds = JSON.parse(JSON.stringify(this.userIds))
@@ -13,12 +13,12 @@
@change="tableOnChange"
>
<span slot="showContent" slot-scope="text, record" class="item-solt">
<a-tooltip placement="top" class="item-content-tooltip" >
<template slot="title" class="item-content-title">
<span class="item-content-show" v-html="record.iterms_conditions"></span>
</template>
<span class="content-show" href="javascript:;" @click="showContent">{{record.iterms_conditions&&record.iterms_conditions!=='null'?record.iterms_conditions.replace(/<.*?>/ig, ' ') : ''}}</span>
</a-tooltip>
<!-- <a-tooltip placement="top" class="item-content-tooltip" >-->
<!-- <template slot="title" class="item-content-title">-->
<!-- <span class="item-content-show" v-html="record.iterms_conditions"></span>-->
<!-- </template>-->
<span class="content-show" href="javascript:;" @click="showContent(text,record)">{{record.iterms_conditions&&record.iterms_conditions!=='null'?record.iterms_conditions.replace(/<.*?>/ig, ' ') : ''}}</span>
<!-- </a-tooltip>-->
</span>
<span slot="operation" slot-scope="record" class="operate">
+14 -12
View File
@@ -34,16 +34,11 @@
{{text && text.length > 18?text.slice(0,17)+'...':text}}
</span>
</span>
<!-- <span slot="numberText" slot-scope="text,record">-->
<!-- <span class="text" :title="text">-->
<!-- {{text && text.length > 18?text.slice(0,17)+'...':text}}-->
<!-- </span>-->
<!-- </span>-->
<!-- <span slot="titleText" slot-scope="text,record">-->
<!-- <span class="text" :title="text">-->
<!-- {{text && text.length > 18?text.slice(0,17)+'...':text}}-->
<!-- </span>-->
<!-- </span>-->
<span slot="detail" slot-scope="text,record">
<a class="text" :title="text" @click="urlClick(text,record)">
{{text}}
</a>
</span>
</a-table>
</div>
<div class="page" v-if="dataSource.length > 0">
@@ -130,7 +125,9 @@
this.getTableList()
},
methods: {
urlClick(text,record) {
this.$emit('detailClick', record)
},
getTextWith(text, fontStyle) {
var canvas = document.createElement('canvas')
var context = canvas.getContext('2d')
@@ -159,9 +156,14 @@
// scope.row.itermsConditions ? scope.row.itermsConditions.replace(/<.*?>/ig, ' ') : ''
}
this.columns[index].scopedSlots = {
customRender: 'detailText'
}
if(res.db_field_txt === "编号" || res.db_field_txt === "标题" ){
this.columns[index].scopedSlots = {
customRender: 'detailText'
customRender: 'detail'
}
}
})
let width = 0
@@ -17,7 +17,7 @@
@change="handleChange">
<!-- <p><a-icon style="font-size: 67px;color: #c0c4cc;" type="cloud-upload" /></p>-->
<a-icon type="export" :rotate="-90" />
拆分文件
{{$t('splitFile')}}
</a-upload>
<!-- </a-modal>-->
</div>
+1 -1
View File
@@ -54,7 +54,7 @@
position: absolute;
top: 0;
left: 0;
z-index: 9999900;
z-index: 999;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.9);
@@ -93,6 +93,8 @@
this.$route.path == '/taskListProcess' ||
this.$route.path == '/ProjectDetails' ||
this.$route.path == '/handshakeProcess' ||
this.$route.path == '/projectStatusAndProgress' ||
this.$route.path == '/TaskPlanList' ||
this.$route.path == '/historicalVersion' ||
this.$route.path == '/dashboard/analysis' ||
this.$route.path == '/processDetails') {
@@ -572,6 +572,7 @@
display: inline-block;
margin-top: 2px;
height: 40px;
margin-bottom: 24px;
}
.itemModel-text {
+1 -1
View File
@@ -6,7 +6,7 @@
:collapsible="collapsible"
v-model="collapsed"
:trigger="null">
<logo/>
<logo :collapsed="collapsed"/>
<s-menu
:collapsed="collapsed"
:menu="menus"
@@ -27,7 +27,7 @@
<div v-else :class="['top-nav-header-index', theme]">
<div class="header-index-wide">
<div class="header-index-left" :style="topMenuStyle.headerIndexLeft">
<logo class="top-nav-header" :show-title="device !== 'mobile'" :style="topMenuStyle.topNavHeader"/>
<logo class="top-nav-header" :show-title="device !== 'mobile'" :style="topMenuStyle.topNavHeader"/>
<div v-if="device !== 'mobile'" :style="topMenuStyle.topSmenuStyle">
<s-menu
mode="horizontal"
+15 -3
View File
@@ -2,10 +2,11 @@
<div class="logo">
<router-link :to="{name:'dashboard'}">
<!-- update-begin- author:sunjianlei --- date:20190814 --- for: logo颜色根据主题颜色变化 -->
<img src="~@/assets/logo.png" alt="logo" class="logoImg">
<img v-if="!collapsed" src="~@/assets/logo.png" alt="logo" class="logoImg">
<img v-if="collapsed" src="~@/assets/logoOne.png" alt="logo" class="logoImgOne">
<!-- <img v-else src="~@/assets/logo.png" alt="logo">-->
<!-- update-begin- author:sunjianlei --- date:20190814 --- for: logo颜色根据主题颜色变化 -->
<span v-if="showTitle" class="logoTitle">{{ title }}</span>
<span v-if="showTitle && !collapsed" class="logoTitle">{{ title }}</span>
</router-link>
</div>
</template>
@@ -26,8 +27,16 @@
type: Boolean,
default: true,
required: false
},
collapsed: {
type: Boolean,
required: false,
default: false
}
}
},
mounted() {
console.log(this.collapsed)
},
}
</script>
<style lang="less" scoped>
@@ -63,6 +72,9 @@
height: 29px;
}
/*.logoImgOne{*/
/* width: ;*/
/*} */
.logoTitle {
font-size: 25px;
font-weight: 300 !important;
+10
View File
@@ -372,6 +372,16 @@ export const constantRouterMap = [
name: 'ocrSplit',
component: () => import(/* webpackChunkName: "user" */ '@/views/documentManage/ocr/OcrSplit')
},
{
path: '/projectStatusAndProgress',
name: 'projectStatusAndProgress',
component: () => import(/* webpackChunkName: "user" */ '@/views/projectManagement/projectStatusBoard/components/projectStatusAndProgress')
},
{
path: '/TaskPlanList',
name: 'TaskPlanList',
component: () => import(/* webpackChunkName: "user" */ '@/views/projectManagement/projectStatusBoard/components/TaskPlanList')
},
// {
// path: '/',
// name: 'index',
@@ -18,7 +18,7 @@
</div>
<div class="solid"></div>
</div>
<div v-else style="height: 240px;position: relative">
<div v-else style="height: 200px;position: relative">
<JNoData/>
</div>
<JLoading :loading="loading">{{$t('dataLoading')}}</JLoading>
@@ -14,7 +14,7 @@
<span class="top-admin" :title="prcTypeName[item.prcType]">{{prcTypeName[item.prcType]}}</span>
</div>
<div class="button">
{{moment(item.createTime).format('YYYY-MM-DD HH:mm:ss')}}
{{item.creatTime}}
</div>
<div class="with">
{{$t('Pending')}}
@@ -77,6 +77,7 @@
import { ACCESS_TOKEN } from '@/store/mutation-types'
import ImportFile from '@/components/ImportFile/index'
import Vue from 'vue'
import moment from 'moment'
export default {
name: 'docLibrary',
@@ -141,7 +142,8 @@
...this.$refs.searchRef.queryParam,
id: this.idList.join(',')
}
downloadFile('document/bussDocumentLibraryEO/exportExcel', this.$t('DocumentLibrary')+'.xls', query, this.Deselect)
let handlingTime = moment(new Date()).format('YYYY-MM-DD')
downloadFile('document/bussDocumentLibraryEO/exportExcel', this.$t('DocumentLibrary')+handlingTime+'.xls', query, this.Deselect)
},
Deselect() {
this.$refs.tableDataRef.selectedRowKeys = []
@@ -154,7 +156,8 @@
id: this.idList.join(','),
flag: 'file'
}
downloadFile('document/bussDocumentLibraryEO/exportZip', '文档库.zip', query, this.Deselect)
let handlingTime = moment(new Date()).format('YYYY-MM-DD')
downloadFile('document/bussDocumentLibraryEO/exportZip', this.$t('DocumentLibrary')+handlingTime+'.zip', query, this.Deselect)
},
//新增
handleAdd() {
@@ -162,7 +165,8 @@
},
//下载模板
handleModule() {
downloadFile('document/bussDocumentLibraryEO/exportTemplate', '文档库导入模板.xls', {})
downloadFile('document/bussDocumentLibraryEO/exportTemplate', this.$t('importTemplate')+this.$t('importTemplate')+'.xls', {})
},
//批量删除
handleDel() {
@@ -22,7 +22,7 @@
</div>
<div class="operator-text" @click="downLoad" v-has="'split:sarFileSplitItems:template'">
<a-icon type="download" />
模板下载
{{$t('templateDownload')}}
</div>
</div>
<div class="imports-table-detail">
@@ -113,7 +113,7 @@
:footer="false"
@cancel="handleCancel"
>
<p>{{contentValue}}</p>
<p v-html='contentValue'></p>
</a-modal>
<!-- 添加节点-->
<a-modal
@@ -332,8 +332,9 @@
},
methods: {
//显示条款内容弹框
showContent(){
// this.contentVisible=true
showContent(val){
this.contentVisible=true
this.contentValue = val
},
//关闭条款内容弹框
handleCancel(){
@@ -1283,6 +1284,10 @@
}
}
.ant-modal-body{
max-height: 500px;
overflow-y: auto;
}
.split-detail-table{
.ant-table-body{
overflow: auto!important;
@@ -52,11 +52,14 @@
</a-form-model-item>
<a-form-model-item :label="$t('ParentName')" prop="pid" v-if="parentVisible">
<a-select v-model="form.pid" @change="handleChange" :placeholder="$t('pleaseSelect')" allowClear>
<a-select-option :value="item.id" v-for="(item, index) in parentData" :key="item.id">
<a-select-option :value="item.id" v-for="(item, index) in parentDataPid" :key="item.id">
{{item.name}}
</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item :label="$t('DisplayOrder')" prop="sortOrder">
<a-input-number v-model="form.sortOrder" :placeholder="$t('PleaseEnterDisplayOrder')" style="width: 100%" :min="1" :formatter="limitNumber" :parser="limitNumber" />
</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>
@@ -105,6 +108,9 @@
{ required: true, message: this.$t('enterName'), trigger: 'blur' },
{ min:1, max: 100, message: this.$t('cantExeed')+'100'+this.$t('characters'), trigger: 'blur' },
],
sortOrder: [
{ required: true, message: this.$t('PleaseEnterDisplayOrder'),trigger: 'blur'},
],
// itemValue:[
// { required: true, message: this.$t('enterDataValue'), trigger: 'blur' },
// { min:1, max: 30, message: this.$t('cantExeed')+'30'+this.$t('characters'), trigger: 'blur' },
@@ -131,6 +137,7 @@
editPId:'',
tabletreeDataSource:[],
flag:false, //提交表单标识
parentDataPid: []
}
},
watch: {
@@ -194,7 +201,16 @@
})
}
},
//正则替换小数点
limitNumber(value) {
if (typeof value === 'string') {
return !isNaN(Number(value)) ? value.replace(/\./g, '') : 0
} else if (typeof value === 'number') {
return !isNaN(value) ? String(value).replace(/\./g, '') : 0
} else {
return 0
}
},
//将数据拼成树形结构
toTree(config) {
config.forEach(function(item) {
@@ -249,23 +265,17 @@
this.parentVisible=true
this.editPId=''
//
// this.getAllTree()
this.getAllTree()
}
},
// getAllTree() {
// postAction(`sys/category/queryPageList`,{
// sysDictId:this.record.id,
// isTagDict:1
// }).then(res=>{
// console.log(res,'res,,,')
// // this.tabletreeDataSource=[...res.result.records]
// // this.total=res.result.total
// // let data = this.toTree(this.tabletreeDataSource)
// // this.tabletreeData=data
// // this.parentData=this.getParents
// // this.dataFlag=true
// })
// },
getAllTree() {
getAction(`sys/category/queryPid`,{
sysDictId:this.record.id,
isTagDict:1
}).then(res=>{
this.parentDataPid = res.result
})
},
//保存
hideModal(){
this.$refs.ruleForm.validate(valid => {
@@ -52,7 +52,9 @@
<j-dict-select-tag type="list" v-model="form.attributeType" dictCode="attribute_type"
:placeholder="$t('PleaseSelectLabelType')"/>
</a-form-model-item>
<a-form-model-item :label="$t('DisplayOrder')" prop="orderNum" class="tag-item">
<a-input-number v-model="form.orderNum" :placeholder="$t('PleaseEnterDisplayOrder')" style="width: 100%" :min="1" :formatter="limitNumber" :parser="limitNumber" />
</a-form-model-item>
<a-form-model-item ref="describe" :label="$t('describe')" prop="description" class="tag-item">
<a-input
v-model.trim="form.description"
@@ -72,6 +74,11 @@
<a class="action-edit" @click="actionEdit(record)" v-has="'dict:edit'">{{$t('edit')}}</a>
<a class="action-delete" href="javascript:;" @click="onDelete(record)" v-has="'dict:logicDelete'">{{$t('delete')}}</a>
</template>
<template slot="describe" slot-scope="text, record">
<span class="text" :title="text">
{{text && text.length > 18?text.slice(0,17)+'...':text}}
</span>
</template>
</a-table>
<div class="page" v-if="tableData.length > 0">
<a-pagination
@@ -145,9 +152,16 @@
title: this.$t('describe'),
align: 'center',
dataIndex: 'description',
scopedSlots: { customRender: 'describe' },
ellipsis: true,
width: 300
},
{
title: this.$t('DisplayOrder'),
align: 'center',
width: 100,
dataIndex: 'orderNum'
},
{
title: this.$t('operation'),
dataIndex: 'action',
@@ -166,6 +180,9 @@
{ required: true, message: this.$t('PleaseSelectLabelType'), trigger: 'blur' }
],
orderNum: [
{ required: true, message: this.$t('PleaseEnterDisplayOrder'),trigger: 'blur'},
],
description: [
{ min: 1, max: 200, message: this.$t('cantExeed') + '200' + this.$t('characters'), trigger: 'blur' }
]
@@ -183,6 +200,16 @@
this.loadData()
},
methods: {
//正则替换小数点
limitNumber(value) {
if (typeof value === 'string') {
return !isNaN(Number(value)) ? value.replace(/\./g, '') : 0
} else if (typeof value === 'number') {
return !isNaN(value) ? String(value).replace(/\./g, '') : 0
} else {
return 0
}
},
//获取列表数据
loadData(param) {
this.loading = true
@@ -11,24 +11,30 @@
{{item.db_field_txt}}
</a-select-option>
</a-select>
<a-input-search
allowClear
<a-input
:maxLength="100"
v-model="selectValueTwo"
style="width: calc(100% - 128px)"
:placeholder="$t('pleaseEnter')+$t('searchContent')"
@search="onSearch"
></a-input-search>
></a-input>
</a-input-group>
<a-input-search
<a-input
v-model="selectValueTwo"
:maxLength="100"
v-else-if="active === $t('whole')"
class="inputSearch"
allow-clear
:placeholder="$t('pleaseEnter')+$t('searchContent')"
@search="wholeOnSearch"
></a-input-search>
></a-input>
<a-button class="textSearch"
v-if="active === $t('DocumentLibrary')"
@click="onSearch(selectValueTwo)"
>{{$t('query')}}
</a-button>
<a-button class="textSearch"
v-if="active === $t('whole')"
@click="wholeOnSearch(selectValueTwo)"
>{{$t('query')}}
</a-button>
<a-button class="textSearch"
v-if="active === $t('whole') || active === $t('DocumentLibrary')"
@click="wholeTextSearch(selectValueTwo)"
@@ -237,7 +243,7 @@
}
</style>
<style>
.inputSearch .ant-input {
.inputSearch {
height: 40px;
line-height: 40px;
}
@@ -774,6 +774,7 @@
display: inline-block;
margin-top: 2px;
height: 40px;
margin-bottom: 24px;
}
.itemModel-text {
@@ -4,7 +4,7 @@
<div class="header-text">
{{$t('engineeringConfirmation')}}
<a-icon :title="$t('pleaseReviewTask')"
type="question-circle" />
type="question-circle"/>
</div>
</div>
<div class="header-content">
@@ -395,7 +395,7 @@
{
title: 'ID',
dataIndex: 'serialNumber',
align: 'left',
align: 'left'
},
{
title: this.$t('completedBy'),
@@ -604,7 +604,7 @@
this.dataSourceTable.forEach(val => {
this.distributionEngineerList.push({
name: val.userName,
id:val.id,
id: val.id,
userId: val.userId,
deliveryInstructions: val.deliveryInstructions
})
@@ -614,7 +614,7 @@
}
this.formInline.userId = userId.join(',')
this.formInline.userName = userName.join(',')
this.formInline = {...this.formInline}
this.formInline = { ...this.formInline }
}
this.loadingTable = false
} else {
@@ -670,6 +670,7 @@
},
PersonnelSelectionChange(value, id) {
this.formInline[value] = id
this.distributionEngineerList = []
if (id) {
this.formInline.userName.split(',').forEach((res, index) => {
this.distributionEngineerList.push({
@@ -190,7 +190,6 @@
postAction('/workFlow/completeTask', query).then((res) => {
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'))
this.loading = false
if (this.$route.query.taskDefinitionKey == 'zrrjsrw' || this.$route.query.taskDefinitionKey == 'zrrqr') {
if (value.flag == 0) {
if (this.queryProject.verifyDeliverableType) {
@@ -204,21 +203,32 @@
}
if (!this.queryProject.verifyDeliverableType && !this.queryProject.prehomoDeliverableType &&
!this.queryProject.designDeliverableType) {
window.close()
setTimeout(() => {
this.loading = false
window.close()
}, 1000)
// this.$router.push({
// path: '/ProcessCenter'
// })
}
} else {
window.close()
setTimeout(() => {
this.loading = false
window.close()
}, 1000)
// this.$router.push({
// path: '/ProcessCenter'
// })
}
} else {
this.$router.push({
path: '/ProcessCenter'
})
setTimeout(() => {
this.loading = false
window.close()
}, 1000)
// this.$router.push({
// path: '/ProcessCenter'
// })
}
} else {
this.loading = false
@@ -252,13 +262,12 @@
if (res.success) {
this.visible = false
setTimeout(() => {
this.loading = false
window.close()
}, 2000)
}, 3000)
// this.$router.push({
// path: '/ProcessCenter'
// })
} else {
this.$message.warning(this.$t('operationFailed'))
}
})
},
@@ -302,13 +302,16 @@
}
putAction(this.url.dreSubmit, query).then((res) => {
if (res.success) {
this.loading = false
this.$message.success(this.$t('OperationSuccessful'))
// this.$router.push({
// path: '/ProjectDetails',
// query: this.$route.query
// })
window.close()
setTimeout(() => {
this.loading = false
window.close()
}, 1000)
} else {
this.loading = false
this.$message.warning(this.$t('operationFailed'))
@@ -326,7 +329,6 @@
postAction('/workFlow/completeTask', query).then((res) => {
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'))
this.loading = false
this.edit()
// this.$router.push({
// path: '/ProjectDetails',
@@ -345,7 +347,10 @@
}
putAction(this.url.edit, query).then((res) => {
if (res.success) {
window.close()
setTimeout(() => {
this.loading = false
window.close()
}, 1000)
}
})
},
@@ -50,9 +50,9 @@
</div>
</div>
<div class="Virtual-detail-right">
<ProjectDetailsName v-if="textTitle === '项目详情'"/>
<ProjectDetailsName @TaskListChange="TaskListChange" v-if="textTitle === '项目详情'"/>
<listOfRegulations v-else-if="textTitle === '法规清单'"/>
<TaskList :isDisplayNum="isDisplayNum" v-else-if="textTitle === '任务清单'"/>
<TaskList :isDisplayNum="isDisplayNum" :areaOfResponsibility="areaOfResponsibility" v-else-if="textTitle === '任务清单'"/>
<ParameterItemCollectionList v-else-if="textTitle === '认证参数收集'" :paramsManifest='paramsManifest'/>
<nonConformance v-else-if="textTitle === '未符合项'"/>
</div>
@@ -92,6 +92,7 @@
title: this.$t('projectDetails'),
textTitle: '认证参数收集',
isDisplayNum: '',
areaOfResponsibility:{},
url: {
logList: '/project/projectLawsInventoryLogEO/page',
historicalVersionUrl: '',
@@ -144,7 +145,17 @@
this.isDisplayNum = res.result
}
})
}
},
TaskListChange(item){
this.areaOfResponsibility = item
this.textTitle = '任务清单'
let textColor = document.getElementsByClassName('Virtual-detail-left-text-color')
if (textColor && textColor.length > 0) {
textColor[0].classList.remove('Virtual-detail-left-text-color')
}
let text = document.getElementsByClassName('Virtual-detail-left-text')
text[2].classList.add('Virtual-detail-left-text-color')
},
}
}
</script>
@@ -51,7 +51,8 @@
<div class="Virtual-detail-right">
<ProjectDetailsName @TaskListChange="TaskListChange" v-if="textTitle === '项目详情'"/>
<listOfRegulations v-else-if="textTitle === '法规清单'"/>
<TaskList :isDisplayNum="isDisplayNum" :areaOfResponsibility="areaOfResponsibility" v-else-if="textTitle === '任务清单'"/>
<TaskList :isDisplayNum="isDisplayNum" :areaOfResponsibility="areaOfResponsibility"
v-else-if="textTitle === '任务清单'"/>
<TaskParameterCollection v-else-if="textTitle === '认证参数收集'"/>
<nonConformance v-else-if="textTitle === '未符合项'"/>
</div>
@@ -89,29 +90,47 @@
data() {
return {
title: this.$t('projectDetails'),
isDisplayNum:'',
isDisplayNum: '',
textTitle: '项目详情',
url: {
logList: '/project/projectLawsInventoryLogEO/page',
historicalVersionUrl: '',
queryUserPremissionByProjectLibraryId: '/project/projectCertificationDirectoryEO/queryUserPremissionByProjectLibraryId'
},
areaOfResponsibility:{},
areaOfResponsibility: {}
}
},
mounted() {
this.textColor()
this.textColor(0)
this.getTaskId()
if (this.$route.query.type) {
if (this.$route.query.type == '101') {
this.textColor(0)
this.textTitle = '详情详情'
} else if (this.$route.query.type == '102') {
this.textColor(1)
this.textTitle = '法规清单'
} else if (this.$route.query.type == '103') {
this.textColor(2)
this.textTitle = '任务清单'
} else if (this.$route.query.type == '104') {
this.textColor(3)
this.textTitle = '未符合项'
} else if (this.$route.query.type == '105') {
this.textColor(4)
this.textTitle = '认证参数收集'
}
}
},
methods: {
textColor() {
textColor(num) {
let textColor = document.getElementsByClassName('Virtual-detail-left-text-color')
if (textColor && textColor.length > 0) {
textColor[0].classList.remove('Virtual-detail-left-text-color')
}
let text = document.getElementsByClassName('Virtual-detail-left-text')
if (text && text.length > 0) {
text[0].classList.add('Virtual-detail-left-text-color')
text[num].classList.add('Virtual-detail-left-text-color')
}
},
textClick(num, name) {
@@ -138,11 +157,11 @@
}
getAction(this.url.queryUserPremissionByProjectLibraryId, query).then((res) => {
if (res.success) {
this.isDisplayNum = res.result
this.isDisplayNum = res.result
}
})
},
TaskListChange(item){
TaskListChange(item) {
this.areaOfResponsibility = item
this.textTitle = '任务清单'
let textColor = document.getElementsByClassName('Virtual-detail-left-text-color')
@@ -151,7 +170,7 @@
}
let text = document.getElementsByClassName('Virtual-detail-left-text')
text[2].classList.add('Virtual-detail-left-text-color')
},
}
}
}
</script>
@@ -415,7 +415,7 @@
font-size: 14px;
margin-right: 16px;
margin-top: 3px;
text-align: right;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@@ -74,7 +74,7 @@
</span>
</a-select-option>
<a-select-option :value="'4'">
<a-select-option :value="'4'" disabled>
<span style="display: inline-block;width: 100%">
{{ $t('blue') }}
</span>
@@ -127,7 +127,7 @@
</span>
</a-select-option>
<a-select-option :value="'4'">
<a-select-option :value="'4'" disabled>
<span style="display: inline-block;width: 100%">
{{ $t('blue') }}
</span>
@@ -486,6 +486,7 @@
display: inline-block;
margin-top: 2px;
height: 40px;
margin-bottom: 24px;
}
.Required {
@@ -20,7 +20,7 @@
<a-form-model-item class="itemModel">
<a-input class="box-input"
:disabled="disabled"
v-model="formInline.directoryName"
v-model.trim="formInline.directoryName"
:placeholder="$t('PleaseEnter')+$t('directoryName')"/>
</a-form-model-item>
</div>
@@ -33,7 +33,7 @@
<a-form-model-item class="itemModel">
<a-input class="box-input"
:disabled="disabled"
v-model="formInline.lot"
v-model.trim="formInline.lot"
:placeholder="$t('PleaseEnter')+$t('batch')"/>
</a-form-model-item>
</div>
@@ -80,7 +80,7 @@
<a-form-model-item class="itemModel">
<a-input class="box-input"
:disabled="disabled"
v-model="formInline.detectionReportLocation"
v-model.trim="formInline.detectionReportLocation"
:placeholder="$t('PleaseEnter')+$t('testReportLocation')"/>
</a-form-model-item>
</div>
@@ -97,7 +97,7 @@
<a-textarea
style="width: 100%"
:placeholder="$t('PleaseEnter')+$t('explain')"
v-model="formInline.explainInfo" :rows="4"/>
v-model.trim="formInline.explainInfo" :rows="4"/>
</a-form-model-item>
</div>
</a-col>
@@ -257,6 +257,7 @@
display: inline-block;
margin-top: 2px;
height: 40px;
margin-bottom: 24px;
}
.title-text-text {
@@ -126,7 +126,7 @@
name: this.$t('experimentFailed'),
status: res.certificationProgress
})
color.push('#FF8543')
color.push('#E83030')
this.dataSource[0].experimentFailed = res.certificationProgressCount
} else if (res.certificationProgress == 'Test passed') {
data.push({
@@ -1256,6 +1256,7 @@
display: inline-block;
margin-top: 2px;
height: 40px;
margin-bottom: 24px;
}
.itemModel-text {
@@ -1077,9 +1077,11 @@
}
})
} else {
let index = 0
for (let i = 0; i < this.dataSource.length; i++) {
for (let j = 0; j < selectedRowKeys.length; j++) {
if (this.dataSource[i].id == selectedRowKeys[j]) {
index++
this.dataSource[i].taskAffirmDueDate = this.formInline.taskAffirmDueDate
Object.keys(this.dataSource[i]).forEach(res => {
if (this.dataSource[i][res] && this.dataSource[i][res] instanceof String) {
@@ -1089,7 +1091,7 @@
})
setTimeout(() => {
this.confirmLoading = true
this.startProcess(this.dataSource[i])
this.startProcess(this.dataSource[i],index)
}, 500)
}
}
@@ -1099,7 +1101,7 @@
})
},
startProcess(value) {
startProcess(value,index) {
let query = {
type: 1,
msg: JSON.stringify(value).replace(/\"/g, '\''),
@@ -1110,12 +1112,12 @@
}
postAction('/workFlow/startProcess', query).then((res) => {
if (res.success) {
this.completeTask(value, res.result)
this.completeTask(value, res.result,index)
}
})
},
completeTask(value, taskId) {
completeTask(value, taskId,index) {
let handlingTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
value.handlingTime = handlingTime
let query = {
@@ -1125,11 +1127,13 @@
}
postAction('/workFlow/completeTask', query).then((res) => {
if (res.success) {
this.visible = false
this.selectedRowKeys = []
this.$message.success(this.$t('OperationSuccessful'))
this.confirmLoading = false
this.getList()
if (index == this.selectedRowKeys.length){
this.visible = false
this.selectedRowKeys = []
this.$message.success(this.$t('OperationSuccessful'))
this.confirmLoading = false
this.getList()
}
} else {
this.$message.warning(this.$t('operationFailed'))
}
@@ -0,0 +1,207 @@
<template>
<div>
<a-modal v-model="visible"
:maskClosable="false"
@ok="handleOk"
:confirm-loading="confirmLoading"
@cancel="handleCancel"
:title="title">
<a-upload-dragger
accept='*.*'
:disabled="disabled"
class="ant-upload-list"
:class="{'uploadFile':isUploadFile}"
name="file"
:file-list="myfileList"
:multiple="true"
:action="uploadAction+'?state='+state+'&cut='+cut"
:headers="headers"
@preview="preview"
:before-upload="beforeUpload"
:remove='remove'
@change="handleChange">
<p v-if="!isUploadFile">
<a-icon class="action-upload" type="cloud-upload"/>
</p>
<p v-if="!isUploadFile" class="ant-upload-text" style="font-size: 14px;line-height: 30px">
{{this.$t('clickUpload')}}</p>
</a-upload-dragger>
</a-modal>
</div>
</template>
<script>
import Vue from 'vue'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { getAction, postAction, downFile, downloadFile } from '@/api/manage'
import { Base64 } from 'js-base64'
export default {
name: 'resultReportedUpload',
props: ['disableds', 'disabled', 'thisFileUploadUrl', 'readonly', 'thisFileType', 'isUploadFile'],
data() {
return {
visible: false,
title: this.$t('upload1') + this.$t('resultReported'),
uploadAction: window._CONFIG['domianURL'] + '/sys/common/upload',
state: undefined,
myuploadAction: window._CONFIG['domianURL'] + this.thisFileUploadUrl,
upDataList: [],
downLoadFileUrl: window._CONFIG['domianPreviewURL'] + '/sys/common/download',
fileList: [],
myfileList: [],
isLoding: false,
cut: '',
confirmLoading: false,
uploadQuery: {},
}
},
created() {
const token = Vue.ls.get(ACCESS_TOKEN)
this.headers = { 'X-Access-Token': token }
this.containerId = 'container-ty-' + new Date().getTime()
},
mounted() {
let long = localStorage.getItem('language')
this.cut = ''
if (long && long == 'zh-cn') {
this.cut = 'cn'
} else if (long && long == 'en-us') {
this.cut = 'en'
}
},
methods: {
clickButtonToUploadFile(item) {
this.uploadQuery = item
this.myfileList = []
this.visible = true
getAction('sys/common/getFileInfos', { id: item }).then((res) => {
if (res.success) {
let data = res.result
if (data && data.length > 0) {
this.myfileList.forEach((res) => {
res.name = res.fileName
res.uid = res.id
})
}
}
})
},
handleOk() {
if (this.myfileList && this.myfileList.length == 0) {
this.$message.warning(this.$t('pleaseUpload') + this.$t('resultReported'))
} else {
}
},
handleCancel() {
this.visible = false
},
beforeUpload(file) {
this.fileTypeSatus = true
this.$message.destroy()
},
remove() {
this.fileTypeSatus = true
},
handleChange(info) {
let { file } = info
const status = info.file.status
info.fileList.forEach((val, index) => {
if (val.response && !val.response.result) {
this.$message.error(val.response.message)
info.fileList.splice(index, 1)
}
})
if (status === 'error') {
this.$message.destroy()
this.$message.error(`${info.file.name}` + this.$t('FileUploadFailed'))
} else if (status === 'removed') {
this.myfileList = info.fileList
this.fileList = []
this.myfileList.forEach((res) => {
if (res.response) {
this.fileList.push(res.response.result)
} else {
this.fileList.push(res)
}
})
if (this.myfileList.length > 0) {
this.$message.destroy()
this.$message.success(`${info.file.name}` + this.$t('DeletedSuccessfully'))
}
} else if (status === 'done') {
this.fileList = []
this.myfileList = info.fileList
if (info.fileList.length > 20) {
info.fileList.splice(20)
this.myfileList = info.fileList
this.myfileList.forEach((res) => {
if (res.response) {
this.fileList.push(res.response.result)
} else {
this.fileList.push(res)
}
})
this.$message.destroy()
this.$message.error(this.$t('UploadMost'))
return
}
this.myfileList.forEach((res) => {
if (res.response) {
this.fileList.push(res.response.result)
} else {
this.fileList.push(res)
}
})
if (this.myfileList.length > 0) {
this.$message.destroy()
if (file.response.success) {
this.$message.success(`${info.file.name}` + this.$t('FileUploadedSuccessfully'))
}
}
} else if (status === 'uploading') {
this.myfileList = info.fileList
// this.$message.success(`${info.file.name} 文件上传成功`);
}
},
resetFileList() {
this.myfileList = []
this.fileList = []
},
preview(file) {
let fileQuery = file.response ? file.response.result : file
let fileName = fileQuery.fileName
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix === '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
} else if (fileSuffix === '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
} else if (fileSuffix === '.xlsx' || fileSuffix === '.xls') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
} else {
downloadFile('/sys/common/downLoadFile', fileQuery.fileName, { id: fileQuery.id })
}
}
}
}
</script>
<style>
.ant-upload-list-item-name {
color: rgba(0, 0, 0, 0.65) !important;
}
.action-upload {
font-size: 67px;
color: #c0c4cc;
}
.uploadFile {
}
</style>
@@ -0,0 +1,372 @@
<template>
<div class="doc-detail">
<div class="Virtual-detail-header" style="position: fixed;top: 0">
<div class="Virtual-detail-title">
<span>
{{this.$t('regulatoryCertificationTaskPlan')}}
</span>
</div>
</div>
<div style="padding: 87px 0 0 0;background: #ffffff;height:100%">
<div class="detail-content" style="height: 100%">
<span style="float: right" class="box-top-text-right">
<a-range-picker
:placeholder="[this.$t('startMonth'), this.$t('endMonth')]"
format="YYYY-MM"
v-model="getTime"
:mode="mode2"
:open="open"
@openChange="openChange"
@panelChange="panelChange"
@change="hodeChange"
>
<div slot="renderExtraFooter" style="width: 100%;display: block">
<div style="text-align: right;width: 100%">
<a @click="okChange">{{$t('determine')}}</a>
</div>
</div>
</a-range-picker>
</span>
<div class="box-top-content">
<div id="main"></div>
<div class="axis-tip"></div>
<JLoading :loading="loadingMain">{{this.$t('dataLoading')}}</JLoading>
</div>
</div>
</div>
</div>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
import moment from 'moment'
import * as echarts from 'echarts'
export default {
name: 'TaskPlanList',
data() {
return {
url: {
timeline: '/project/ProjectStatusBoardController/timeline',
timelineList: '/project/ProjectStatusBoardController/timelineList'
},
startTime: undefined,
endTime: undefined,
mode2: ['month', 'month'],
loading: false,
loadingMain: false,
dataSource: [],
open: false,
getTime: []
}
},
mounted() {
this.getTimeline()
},
methods: {
getTimeline() {
let query = {
startTime: this.startTime,
endTime: this.endTime
}
this.loadingMain = true
getAction(this.url.timeline, query).then((res) => {
if (res.success) {
this.getTimelineList(res.result)
}
})
},
openChange(val) {
this.open = val
},
okChange() {
this.open = false
this.getTimeline()
},
hodeChange() {
this.getTime = []
this.startTime = undefined
this.endTime = undefined
this.getTimeline()
},
panelChange(value, mode) {
this.getTime = value
this.startTime = moment(value[0]).format('YYYY-MM')
this.endTime = moment(value[1]).format('YYYY-MM')
},
getTimelineList(time) {
let query = {
startTime: this.startTime,
endTime: this.endTime
}
getAction(this.url.timelineList, query).then((res) => {
if (res.success) {
this.getEcharts(time, res.result)
}
})
},
getEcharts(timeList, timeData) {
var chartDom = document.getElementById('main')
var myChart = echarts.init(chartDom)
var option
let list = []
let listTime = []
for (let i = 0; i < timeList.length; i++) {
for (let j = 0; j < 31; j++) {
let num
if ((j + 1) < 10) {
num = '0' + (j + 1)
} else {
num = (j + 1)
}
listTime.push(timeList[i])
list.push(timeList[i] + '-' + num)
}
}
const hours = listTime
const days = []
let content = []
if (timeData && timeData.length > 0) {
timeData.forEach(res => {
days.push(res.projectName)
content.push(res.data[0])
})
}
let timeDataList = []
let data = []
for (let j = 0; j < content.length; j++) {
for (let k = 0; k < content[j].length; k++) {
content[j][k].index = j
timeDataList.push(content[j][k])
}
}
for (let i = 0; i < list.length; i++) {
for (let j = 0; j < timeDataList.length; j++) {
let time = JSON.stringify(timeDataList[j].time).slice(1, 11)
if (time == list[i]) {
data.push([i, timeDataList[j].index, 14, j])
}
}
}
let num = timeList.length * 3
if (num < 31) {
num = 31
}
option = {
legend: {
data: ['Punch Card'],
left: 'right'
},
tooltip: {
position: 'left',
formatter: function(params) {
return (
timeDataList[params.value[3]].name + '<br/>' +
timeDataList[params.value[3]].time.slice(0, 11)
)
}
},
grid: {
top: 10,
left: 40,
right: 40,
containLabel: true
},
xAxis: {
type: 'category',
data: hours,
boundaryGap: false,
splitLine: {
show: false
},
axisTick: {
show: false
},
position: 'top',
axisLabel: {
showMinLabel: true,
interval: num,
textStyle: {
fontFamily: 'Blue Sky Noto',
color: '#000F16',
fontSize: '16'
}
},
axisLine: {
show: false
}
},
yAxis: {
type: 'category',
data: days,
splitLine: {
show: false
},
axisLine: {
show: false
},
axisTick: {
show: false
},
scale: true,
triggerEvent: true,
axisLabel: {
textStyle: {
fontFamily: 'Blue Sky Noto',
color: '#000F16',
fontSize: '16'
},
margin: 50,
formatter: function(params) {
var val = ''
if (params.length > 8) {
val = params.substr(0, 8) + '...'
return val
} else {
return params
}
}
}
},
series: [
{
type: 'scatter',
symbolSize: function(val) {
return val[2] * 2
},
data: data,
animationDelay: function(idx) {
return idx * 5
}
}
]
}
this.loadingMain = false
option && myChart.setOption(option, true)
window.onresize = () => {
myChart.resize()
}
myChart.on('mouseover', 'yAxis.category', function(e) {
console.log(e)
let axisTip = document.querySelector('.axis-tip')
console.log(axisTip)
axisTip.innerText = e.value
axisTip.style.left = 100 + 'px'
axisTip.style.top = (e.event.event.y) - 180 + 'px'
axisTip.style.display = 'block'
})
myChart.on('mouseout', 'yAxis.category', function(e) {
let axisTip = document.querySelector('.axis-tip')
axisTip.innerText = ''
axisTip.style.display = 'none'
})
}
}
}
</script>
<style lang="less" scoped>
@import '~@assets/less/common.less';
.doc-detail {
background: #fff;
height: 100%;
.Virtual-detail-header {
width: 100%;
height: 68px;
line-height: 68px;
padding: 0 32px 0 32px;
box-sizing: border-box;
display: flex;
justify-content: space-between;
border-bottom: 2px #eff1f3 solid;
background: #fff;
.Virtual-detail-title {
display: inline-block;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
font-size: 20px;
font-weight: 400;
color: #040B29;
line-height: 68px;
}
}
}
.box-title-text {
line-height: 1.4;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.title-text {
width: 70px;
color: #000F16;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
margin-top: 3px;
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.box-input {
display: inline-block;
width: 70%;
height: 38px;
margin-top: 2px;
}
.box-top-text {
font-size: 16px;
font-weight: 500;
color: #000F16;
display: inline-block;
}
.box-top-content {
width: 100%;
height: calc(100vh - 160px);
margin-bottom: 20px;
padding: 10px 20px;
box-sizing: border-box;
overflow: auto;
}
.box-button {
height: 38px;
}
#main {
width: 100%;
height: 100%;
}
.axis-tip {
display: none;
position: absolute;
padding: 5px 5px;
font-size: 12px;
line-height: 18px;
color: #575757;
background: #ffffff;
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.2);
border-radius: 4px;
}
.box-top-text-right {
display: inline-block;
float: right;
height: 38px;
width: 300px;
margin-top: -4px;
margin-right: 20px;
}
</style>
@@ -0,0 +1,215 @@
<template>
<div class="doc-detail">
<div class="Virtual-detail-header" style="position: fixed;top: 0">
<div class="Virtual-detail-title">
<span>
{{this.$t('projectStatusAndProgress')}}
</span>
</div>
</div>
<div style="padding: 77px 0 0 0;background: #ffffff;height:100%">
<div class="detail-content" style="height: 100%">
<a-table
ref="table"
size="middle"
:loading="loading"
:pagination="false"
:scroll="{x: true,y:'calc(100vh - 180px)'}"
:data-source="dataSource"
:columns="columns"
>
<span slot="projectStatusTitle">
<span>{{this.$t('projectStatus')}}</span><br/>
<span>{{'('+$t('red')+'/'+$t('yellow')+'/'+$t('green')+')'}}</span>
</span>
<span slot="CertificationProgressTitle">
<span>{{this.$t('CertificationProgress')}}</span><br/>
<span>{{'('+$t('notInvolved')+'/'+$t('toBeStarted')+'/'+$t('inProgress')+'/'+$t('experimentFailed')+'/'+$t('experimentPassed')+')'}}</span>
</span>
<span slot="listConfirmationStatusTitle">
<span>{{this.$t('listConfirmationStatus')}}</span><br/>
<span>{{'('+$t('notLaunch')+'/'+$t('toBeConfirmed')+'/'+$t('accept')+'/'+$t('refuse')+')'}}</span>
</span>
<span slot="taskAffirmStatusTitle">
<span>{{this.$t('taskAffirmStatus')}}</span><br/>
<span>{{'('+$t('notLaunch')+'/'+$t('toBeConfirmed')+'/'+$t('accept')+'/'+$t('refuse')+')'}}</span>
</span>
<span slot="designComplianceReviewTitle">
<span>{{this.$t('designComplianceReview')}}</span><br/>
<span>{{'('+$t('toBeConfirmed')+'/'+$t('accord')+'/'+$t('nonConformity')+'/'+$t('Tracked')+'/'+$t('notInvolved')+'/'+$t('taskTermination')+')'}}</span>
</span>
<span slot="preHomeConfirmationTitle">
<span>{{this.$t('preHomeConfirmation')}}</span><br/>
<span>{{'('+$t('toBeConfirmed')+'/'+$t('accord')+'/'+$t('nonConformity')+'/'+$t('Tracked')+'/'+$t('notInvolved')+'/'+$t('taskTermination')+')'}}</span>
</span>
<span slot="verificationComplianceReviewTitle">
<span>{{this.$t('verificationComplianceReview')}}</span><br/>
<span>{{'('+$t('toBeConfirmed')+'/'+$t('accord')+'/'+$t('nonConformity')+'/'+$t('Tracked')+'/'+$t('notInvolved')+'/'+$t('taskTermination')+')'}}</span>
</span>
</a-table>
</div>
</div>
</div>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
export default {
name: 'projectStatusAndProgress',
data() {
return {
url: {
list: '/project/ProjectStatusBoardController/scheduleInfoList'
},
loading: false,
dataSource: [],
columns: [
{
title: this.$t('entryName'),
align: 'center',
dataIndex: 'projectName',
width: 180
},
{
title: this.$t('targetMarket'),
align: 'center',
dataIndex: 'targetMarket',
width: 180
},
{
align: 'center',
dataIndex: 'projectStatus',
scopedSlots: { title: 'projectStatusTitle' },
width: 240
},
{
align: 'center',
dataIndex: 'certificationProgress',
width: 340,
scopedSlots: { title: 'CertificationProgressTitle' }
},
{
align: 'center',
dataIndex: 'inventory',
width: 340,
scopedSlots: { title: 'listConfirmationStatusTitle' }
},
{
align: 'center',
dataIndex: 'task',
width: 340,
scopedSlots: { title: 'taskAffirmStatusTitle' }
},
{
align: 'center',
dataIndex: 'design',
width: 440,
scopedSlots: { title: 'designComplianceReviewTitle' }
},
{
dataIndex: 'pre',
align: 'center',
width: 440,
scopedSlots: { title: 'preHomeConfirmationTitle' }
},
{
dataIndex: 'verify',
align: 'center',
width: 440,
scopedSlots: { title: 'verificationComplianceReviewTitle' }
}
]
}
},
mounted() {
this.getList()
},
methods: {
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 = []
}
})
}
}
}
</script>
<style lang="less" scoped>
@import '~@assets/less/common.less';
.doc-detail {
background: #fff;
height: 100%;
.Virtual-detail-header {
width: 100%;
height: 68px;
line-height: 68px;
padding: 0 32px 0 32px;
box-sizing: border-box;
display: flex;
justify-content: space-between;
border-bottom: 2px #eff1f3 solid;
background: #fff;
.Virtual-detail-title {
display: inline-block;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
font-size: 20px;
font-weight: 400;
color: #040B29;
line-height: 68px;
}
.doc-detail-right {
width: 800px;
line-height: 68px;
display: flex;
}
}
.Virtual-detail-left {
width: 240px;
padding: 16px 24px;
box-sizing: border-box;
font-size: 16px;
line-height: 3;
float: left;
.Virtual-detail-left-text {
padding: 2px 12px;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.Virtual-detail-right {
border-left: 2px #eff1f3 solid;
width: calc(100% - 240px);
height: 100%;
float: left;
overflow: auto;
}
}
.Virtual-detail-left-text-color {
background: #eff1f3;
border-radius: 4px;
}
.Virtual-detail-text-right {
}
</style>
@@ -65,6 +65,7 @@
ref="table"
size="middle"
:loading="loading"
:customRow="projectNameClick"
:pagination="false"
:scroll="{x: true,y:500}"
:data-source="dataSource"
@@ -374,9 +375,7 @@
myChart.resize()
}
myChart.on('mouseover', 'yAxis.category', function(e) {
console.log(e)
let axisTip = document.querySelector('.axis-tip')
console.log(axisTip)
axisTip.innerText = e.value
axisTip.style.left = 100 + 'px'
axisTip.style.top = (e.event.event.y) - 180 + 'px'
@@ -387,6 +386,12 @@
axisTip.innerText = ''
axisTip.style.display = 'none'
})
myChart.on('click', (params) => {
let newUrl = this.$router.resolve({
path: '/TaskPlanList'
})
window.open(newUrl.href, '_blank')
})
},
searchQuery() {
this.getList()
@@ -406,6 +411,18 @@
this.dataSource = []
}
})
},
projectNameClick() {
return {
on: {
click: () => {
let newUrl = this.$router.resolve({
path: '/projectStatusAndProgress'
})
window.open(newUrl.href, '_blank')
}
}
}
}
}
}