Merge remote-tracking branch 'origin/master'

This commit is contained in:
wangzhijiang
2022-05-05 18:54:04 +08:00
47 changed files with 3072 additions and 420 deletions
@@ -1,6 +1,7 @@
package com.jero.modules.cert.template.controller; package com.jero.modules.cert.template.controller;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -233,7 +234,8 @@ public class ParamsInfoEOController extends JeroController<ParamsInfoEO, IParams
HttpServletRequest request) { HttpServletRequest request) {
String cut = (String) map.get("cut"); String cut = (String) map.get("cut");
String exportName = (String) map.get("exportName"); String exportName = (String) map.get("exportName");
ParamsInfoVO paramsInfoVO = (ParamsInfoVO) map.get("paramsInfoVO"); String paramsInfoVOJson = (String) map.get("paramsInfoVO");
ParamsInfoVO paramsInfoVO = JSONObject.parseObject(paramsInfoVOJson, ParamsInfoVO.class);
paramsInfoEOService.exportParamsInfo(cut, paramsInfoVO, exportName, response, request); paramsInfoEOService.exportParamsInfo(cut, paramsInfoVO, exportName, response, request);
} }
@@ -19,11 +19,11 @@ public interface CertCategoryParamsInfoEOMapper extends BaseMapper<CertCategoryP
* @param nioNumber * @param nioNumber
* @return * @return
*/ */
List<CertCategoryParamsInfoEO> selectListByNioNumber(@Param("nioNumber") String nioNumber); List<CertCategoryParamsInfoEO> selectListByNioNumberAndTemplateId(@Param("nioNumber") String nioNumber, @Param("paramsTemplateId") String paramsTemplateId);
List<CertCategoryParamsInfoEO> selectListByParamsTemplateIds(@Param("paramsTemplateIds") String paramsTemplateIds); List<CertCategoryParamsInfoEO> selectListByParamsTemplateIds(@Param("paramsTemplateIds") String paramsTemplateIds);
int deleteByNioNumberList(@Param("list") List<String> nioNumberList); int deleteByNioNumberListAndTemplateId(@Param("list") List<String> nioNumberList, @Param("paramsTemplateId") String paramsTemplateId);
int deleteByParamsTemplateIds(@Param("paramsTemplateIds") String paramsTemplateIds); int deleteByParamsTemplateIds(@Param("paramsTemplateIds") String paramsTemplateIds);
} }
@@ -16,10 +16,11 @@
<result column="params_template_id" property="paramsTemplateId" /> <result column="params_template_id" property="paramsTemplateId" />
</resultMap> </resultMap>
<select id="selectListByNioNumber" resultMap="CertCategoryParamsInfoEOResultMap" parameterType="java.lang.String"> <select id="selectListByNioNumberAndTemplateId" resultMap="CertCategoryParamsInfoEOResultMap">
select * select *
from cert_category_params_info from cert_category_params_info
where nio_number in where params_template_id = #{paramsTemplateId}
and nio_number in
<foreach collection="nioNumber.split(',')" index="index" separator="," open="(" close=")" item="item"> <foreach collection="nioNumber.split(',')" index="index" separator="," open="(" close=")" item="item">
#{item} #{item}
</foreach> </foreach>
@@ -34,9 +35,10 @@
</foreach> </foreach>
</select> </select>
<delete id="deleteByNioNumberList" parameterType="java.util.List"> <delete id="deleteByNioNumberListAndTemplateId">
delete from cert_category_params_info delete from cert_category_params_info
where nio_number in where params_template_id = #{paramsTemplateId}
and nio_number in
<foreach collection="list" index="index" separator="," open="(" close=")" item="nioNumber"> <foreach collection="list" index="index" separator="," open="(" close=")" item="nioNumber">
#{nioNumber} #{nioNumber}
</foreach> </foreach>
@@ -1,8 +1,7 @@
package com.jero.modules.cert.template.service; package com.jero.modules.cert.template.service;
import com.jero.modules.cert.template.entity.CertCategoryParamsInfoEO;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param; import com.jero.modules.cert.template.entity.CertCategoryParamsInfoEO;
import java.util.List; import java.util.List;
@@ -61,11 +60,11 @@ public interface ICertCategoryParamsInfoEOService extends IService<CertCategoryP
*/ */
List<CertCategoryParamsInfoEO> queryList(); List<CertCategoryParamsInfoEO> queryList();
List<CertCategoryParamsInfoEO> selectListByNioNumber(String nioNumber); List<CertCategoryParamsInfoEO> selectListByNioNumber(String nioNumber, String paramsTemplateId);
List<CertCategoryParamsInfoEO> selectListByParamsTemplateIds(String paramsTemplateIds); List<CertCategoryParamsInfoEO> selectListByParamsTemplateIds(String paramsTemplateIds);
int deleteByNioNumberList(List<String> nioNumberList); int deleteByNioNumberList(List<String> nioNumberList, String paramsTemplateId);
int deleteByParamsTemplateIds(String paramsTemplateIds); int deleteByParamsTemplateIds(String paramsTemplateIds);
} }
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.cert.template.entity.CertCategoryParamsInfoEO; import com.jero.modules.cert.template.entity.CertCategoryParamsInfoEO;
import com.jero.modules.cert.template.mapper.CertCategoryParamsInfoEOMapper; import com.jero.modules.cert.template.mapper.CertCategoryParamsInfoEOMapper;
import com.jero.modules.cert.template.service.ICertCategoryParamsInfoEOService; import com.jero.modules.cert.template.service.ICertCategoryParamsInfoEOService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;
@@ -18,6 +19,8 @@ import java.util.List;
@Service @Service
public class CertCategoryParamsInfoEOServiceImpl extends ServiceImpl<CertCategoryParamsInfoEOMapper, CertCategoryParamsInfoEO> implements ICertCategoryParamsInfoEOService { public class CertCategoryParamsInfoEOServiceImpl extends ServiceImpl<CertCategoryParamsInfoEOMapper, CertCategoryParamsInfoEO> implements ICertCategoryParamsInfoEOService {
@Autowired
private CertCategoryParamsInfoEOMapper certCategoryParamsInfoEOMapper;
/** /**
* 保存 * 保存
* *
@@ -89,22 +92,22 @@ public class CertCategoryParamsInfoEOServiceImpl extends ServiceImpl<CertCategor
} }
@Override @Override
public List<CertCategoryParamsInfoEO> selectListByNioNumber(String nioNumber) { public List<CertCategoryParamsInfoEO> selectListByNioNumber(String nioNumber, String paramsTemplateId) {
return baseMapper.selectListByNioNumber(nioNumber); return certCategoryParamsInfoEOMapper.selectListByNioNumberAndTemplateId(nioNumber, paramsTemplateId);
} }
@Override @Override
public List<CertCategoryParamsInfoEO> selectListByParamsTemplateIds(String paramsTemplateIds) { public List<CertCategoryParamsInfoEO> selectListByParamsTemplateIds(String paramsTemplateIds) {
return baseMapper.selectListByParamsTemplateIds(paramsTemplateIds); return certCategoryParamsInfoEOMapper.selectListByParamsTemplateIds(paramsTemplateIds);
} }
@Override @Override
public int deleteByNioNumberList(List<String> nioNumberList) { public int deleteByNioNumberList(List<String> nioNumberList, String paramsTemplateId) {
return baseMapper.deleteByNioNumberList(nioNumberList); return certCategoryParamsInfoEOMapper.deleteByNioNumberListAndTemplateId(nioNumberList, paramsTemplateId);
} }
@Override @Override
public int deleteByParamsTemplateIds(String paramsTemplateIds) { public int deleteByParamsTemplateIds(String paramsTemplateIds) {
return baseMapper.deleteByParamsTemplateIds(paramsTemplateIds); return certCategoryParamsInfoEOMapper.deleteByParamsTemplateIds(paramsTemplateIds);
} }
} }
@@ -69,6 +69,8 @@ import static com.jero.modules.split.util.ExcelUtil.checkObjAllFieldsIsNull;
@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) @Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, ParamsInfoEO> implements IParamsInfoEOService { public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, ParamsInfoEO> implements IParamsInfoEOService {
@Autowired
private ParamsInfoEOMapper paramsInfoEOMapper;
@Autowired @Autowired
private ICertCategoryParamsInfoEOService certCategoryParamsInfoEOService; private ICertCategoryParamsInfoEOService certCategoryParamsInfoEOService;
@@ -160,7 +162,7 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
ParamsInfoEO oldParamsInfoEO = getById(paramsInfoId); ParamsInfoEO oldParamsInfoEO = getById(paramsInfoId);
String oldNioNumber = oldParamsInfoEO.getNioNumber(); String oldNioNumber = oldParamsInfoEO.getNioNumber();
// 认证类别参数项 先删除后添加 // 认证类别参数项 先删除后添加
certCategoryParamsInfoEOService.deleteByNioNumberList(Arrays.asList(oldNioNumber)); certCategoryParamsInfoEOService.deleteByNioNumberList(Arrays.asList(oldNioNumber), paramsTemplateId);
// 批量添加认证类别参数项 // 批量添加认证类别参数项
List<CertCategoryParamsInfoEO> certCategoryParamsInfoEOList = paramsInfoEO.getCertCategoryParamsInfoEOList(); List<CertCategoryParamsInfoEO> certCategoryParamsInfoEOList = paramsInfoEO.getCertCategoryParamsInfoEOList();
@@ -195,7 +197,8 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
// 关联删除认证类别参数项 // 关联删除认证类别参数项
ParamsInfoEO paramsInfoEO = getById(id); ParamsInfoEO paramsInfoEO = getById(id);
String nioNumber = paramsInfoEO.getNioNumber(); String nioNumber = paramsInfoEO.getNioNumber();
certCategoryParamsInfoEOService.deleteByNioNumberList(Arrays.asList(nioNumber)); String paramsTemplateId = paramsInfoEO.getParamsTemplateId();
certCategoryParamsInfoEOService.deleteByNioNumberList(Arrays.asList(nioNumber), paramsTemplateId);
// TODO 关联删除附件模板文件信息和文件 // TODO 关联删除附件模板文件信息和文件
removeById(id); removeById(id);
} }
@@ -212,9 +215,10 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
queryWrapper.in(ParamsInfoEO::getId, ids); queryWrapper.in(ParamsInfoEO::getId, ids);
List<ParamsInfoEO> paramsInfoEOList = list(queryWrapper); List<ParamsInfoEO> paramsInfoEOList = list(queryWrapper);
if (CollectionUtil.isNotEmpty(paramsInfoEOList)) { if (CollectionUtil.isNotEmpty(paramsInfoEOList)) {
String paramsTemplateId = paramsInfoEOList.get(0).getParamsTemplateId();
List<String> nioNumberList = paramsInfoEOList.stream().map(ParamsInfoEO::getNioNumber).collect(Collectors.toList()); List<String> nioNumberList = paramsInfoEOList.stream().map(ParamsInfoEO::getNioNumber).collect(Collectors.toList());
// 关联删除认证类别参数项 // 关联删除认证类别参数项
certCategoryParamsInfoEOService.deleteByNioNumberList(nioNumberList); certCategoryParamsInfoEOService.deleteByNioNumberList(nioNumberList, paramsTemplateId);
// TODO 关联删除附件模板文件信息和文件 // TODO 关联删除附件模板文件信息和文件
} }
@@ -231,7 +235,15 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
public ParamsInfoEO queryById(String id) { public ParamsInfoEO queryById(String id) {
ParamsInfoEO paramsInfoEO = getById(id); ParamsInfoEO paramsInfoEO = getById(id);
// 关联查询认证类别参数 // 关联查询认证类别参数
List<CertCategoryParamsInfoEO> certCategoryParamsInfoEOList = certCategoryParamsInfoEOService.selectListByNioNumber(paramsInfoEO.getNioNumber()); List<CertCategoryParamsInfoEO> certCategoryParamsInfoEOList = certCategoryParamsInfoEOService.selectListByNioNumber(paramsInfoEO.getNioNumber(), paramsInfoEO.getParamsTemplateId());
// 认证类别 数据字典 map
List<SysDictItem> sysDictItemList = sysDictItemService.selectItemsByDictCode("cert_category");
Map<String, String> certCategoryMap = sysDictItemList.stream().collect(Collectors.toMap(c->c.getItemValue(), c->c.getItemText()));
for (CertCategoryParamsInfoEO certCategoryParamsInfoEO : certCategoryParamsInfoEOList) {
certCategoryParamsInfoEO.setCertCategory_dictText(certCategoryMap.get(certCategoryParamsInfoEO.getCertCategory()));
}
paramsInfoEO.setCertCategoryParamsInfoEOList(certCategoryParamsInfoEOList); paramsInfoEO.setCertCategoryParamsInfoEOList(certCategoryParamsInfoEOList);
return paramsInfoEO; return paramsInfoEO;
} }
@@ -345,20 +357,21 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
nowFile.mkdirs(); nowFile.mkdirs();
String fileName = exportName + ".xlsx"; String fileName = exportName + ".xlsx";
String paramsTemplateId = paramsInfoVO.getParamsTemplateId();
if (CutEnum.CN.getValue().equals(cut)) { if (CutEnum.CN.getValue().equals(cut)) {
// 查询导出数据 // 查询导出数据
List<ParamsInfoEO> paramsInfoEOList = baseMapper.selectListWithCert(paramsInfoVO); // 中文数据导出 List<ParamsInfoEO> paramsInfoEOList = paramsInfoEOMapper.selectListWithCert(paramsInfoVO); // 中文数据导出
getTreeDictItemText(paramsInfoEOList, cut); getTreeDictItemText(paramsInfoEOList, cut);
List<Map<String, Object>> sheetsList = new ArrayList<>(); List<Map<String, Object>> sheetsList = new ArrayList<>();
sheetsList = getCnExportSheetsList(paramsInfoEOList, fileNowPath); sheetsList = getCnExportSheetsList(paramsInfoEOList, fileNowPath, paramsTemplateId);
workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.XSSF); workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.XSSF);
} else if (CutEnum.EN.getValue().equals(cut)) { } else if (CutEnum.EN.getValue().equals(cut)) {
// 查询导出数据 // 查询导出数据
List<ParamsInfoEnExport> paramsInfoEnExportList = baseMapper.selectListWithCertForEnExport(paramsInfoVO); // 英文数据导出 List<ParamsInfoEnExport> paramsInfoEnExportList = paramsInfoEOMapper.selectListWithCertForEnExport(paramsInfoVO); // 英文数据导出
getTreeDictItemTextForEnExport(paramsInfoEnExportList); getTreeDictItemTextForEnExport(paramsInfoEnExportList);
List<Map<String, Object>> sheetsList = new ArrayList<>(); List<Map<String, Object>> sheetsList = new ArrayList<>();
sheetsList = getEnExportSheetsList(paramsInfoEnExportList, fileNowPath); sheetsList = getEnExportSheetsList(paramsInfoEnExportList, fileNowPath, paramsTemplateId);
workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.XSSF); workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.XSSF);
} }
@@ -391,7 +404,7 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
} }
} }
private List<Map<String, Object>> getCnExportSheetsList(List<ParamsInfoEO> paramsInfoEOList, String fileNowPath) throws IOException { private List<Map<String, Object>> getCnExportSheetsList(List<ParamsInfoEO> paramsInfoEOList, String fileNowPath, String paramsTemplateId) throws IOException {
if (CollectionUtil.isEmpty(paramsInfoEOList)) { if (CollectionUtil.isEmpty(paramsInfoEOList)) {
throw new JeroBootException("没有可导出的数据"); throw new JeroBootException("没有可导出的数据");
@@ -411,7 +424,7 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
// 查询导出参数项中认证类别最大级 // 查询导出参数项中认证类别最大级
List<String> nioNumber = paramsInfoEOList.stream().map(ParamsInfoEO::getNioNumber).collect(Collectors.toList()); List<String> nioNumber = paramsInfoEOList.stream().map(ParamsInfoEO::getNioNumber).collect(Collectors.toList());
List<CertCategoryParamsInfoEO> certCategoryParamsInfoEOList = certCategoryParamsInfoEOService.selectListByNioNumber(StringUtils.join(nioNumber, ",")); List<CertCategoryParamsInfoEO> certCategoryParamsInfoEOList = certCategoryParamsInfoEOService.selectListByNioNumber(StringUtils.join(nioNumber, ","),paramsTemplateId);
List<String> certCategoryNameList = new ArrayList<>(); List<String> certCategoryNameList = new ArrayList<>();
Map<String, String> certCategoryMap = new HashMap<>(); Map<String, String> certCategoryMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(certCategoryParamsInfoEOList)) { if (CollectionUtil.isNotEmpty(certCategoryParamsInfoEOList)) {
@@ -478,7 +491,7 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
return sheetsList; return sheetsList;
} }
private List<Map<String, Object>> getEnExportSheetsList(List<ParamsInfoEnExport> paramsInfoEnExportList, String fileNowPath) throws IOException { private List<Map<String, Object>> getEnExportSheetsList(List<ParamsInfoEnExport> paramsInfoEnExportList, String fileNowPath, String paramsTemplateId) throws IOException {
if (CollectionUtil.isEmpty(paramsInfoEnExportList)) { if (CollectionUtil.isEmpty(paramsInfoEnExportList)) {
throw new JeroBootException("没有可导出的数据"); throw new JeroBootException("没有可导出的数据");
@@ -498,7 +511,7 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
// 查询导出参数项中认证类别最大级 // 查询导出参数项中认证类别最大级
List<String> nioNumber = paramsInfoEnExportList.stream().map(ParamsInfoEnExport::getNioNumber).collect(Collectors.toList()); List<String> nioNumber = paramsInfoEnExportList.stream().map(ParamsInfoEnExport::getNioNumber).collect(Collectors.toList());
List<CertCategoryParamsInfoEO> certCategoryParamsInfoEOList = certCategoryParamsInfoEOService.selectListByNioNumber(StringUtils.join(nioNumber, ",")); List<CertCategoryParamsInfoEO> certCategoryParamsInfoEOList = certCategoryParamsInfoEOService.selectListByNioNumber(StringUtils.join(nioNumber, ","),paramsTemplateId);
List<String> certCategoryNameList = new ArrayList<>(); List<String> certCategoryNameList = new ArrayList<>();
Map<String, String> certCategoryMap = new HashMap<>(); Map<String, String> certCategoryMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(certCategoryParamsInfoEOList)) { if (CollectionUtil.isNotEmpty(certCategoryParamsInfoEOList)) {
@@ -798,17 +811,21 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
if (checkObjAllFieldsIsNull(importDto)) { if (checkObjAllFieldsIsNull(importDto)) {
continue; continue;
} }
String[] fileIdList = importDto.getFileTemplateName().split(","); // 处理文件connectId
String connectId = UUID.randomUUID().toString().replace("-", ""); if (StringUtils.isNotBlank(importDto.getFileTemplateName())) { // 判空,否则报空指针异常
List<OSSFile> updateFileList = new ArrayList<>(); String[] fileIdList = importDto.getFileTemplateName().split(",");
for (int i=0; i<fileIdList.length; i++) { String connectId = UUID.randomUUID().toString().replace("-", "");
OSSFile ossFile = new OSSFile(); List<OSSFile> updateFileList = new ArrayList<>();
ossFile.setId(fileIdList[i]); for (int i = 0; i < fileIdList.length; i++) {
ossFile.setConnectId(connectId); OSSFile ossFile = new OSSFile();
ossFile.setId(fileIdList[i]);
ossFile.setConnectId(connectId);
updateFileList.add(ossFile);
}
ossFileService.updateBatchById(updateFileList);
importDto.setFileTemplateConnectId(connectId);
} }
ossFileService.updateBatchById(updateFileList);
importDto.setFileTemplateConnectId(connectId);
ParamsInfoEO target = new ParamsInfoEO(); ParamsInfoEO target = new ParamsInfoEO();
BeanUtils.copyProperties(importDto, target); BeanUtils.copyProperties(importDto, target);
target.setId(UUID.randomUUID().toString().replace("-","")); target.setId(UUID.randomUUID().toString().replace("-",""));
@@ -1314,11 +1331,11 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
@Override @Override
public int deleteByParamsTemplateIds(String paramsTemplateIds) { public int deleteByParamsTemplateIds(String paramsTemplateIds) {
return baseMapper.deleteByParamsTemplateIds(paramsTemplateIds); return paramsInfoEOMapper.deleteByParamsTemplateIds(paramsTemplateIds);
} }
@Override @Override
public List<ParamsInfoEO> selectListByParamsTemplateIds(String paramsTemplateIds) { public List<ParamsInfoEO> selectListByParamsTemplateIds(String paramsTemplateIds) {
return baseMapper.selectListByParamsTemplateIds(paramsTemplateIds); return paramsInfoEOMapper.selectListByParamsTemplateIds(paramsTemplateIds);
} }
} }
@@ -2363,7 +2363,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
} }
} }
private void sendWebsocket(String msgId, String msgTet) { public void sendWebsocket(String msgId, String msgTet) {
JSONObject obj = new JSONObject(); JSONObject obj = new JSONObject();
obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC);
obj.put(WebsocketConst.MSG_ID, msgId); obj.put(WebsocketConst.MSG_ID, msgId);
@@ -2424,7 +2424,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
@NotNull @NotNull
private SysAnnouncement getSysAnnouncement(List<String> userIdList, String content, String contentInfo) { public SysAnnouncement getSysAnnouncement(List<String> userIdList, String content, String contentInfo) {
SysAnnouncement sysAnnouncement = new SysAnnouncement(); SysAnnouncement sysAnnouncement = new SysAnnouncement();
sysAnnouncement.setDelFlag("0"); sysAnnouncement.setDelFlag("0");
sysAnnouncement.setSendStatus("0"); sysAnnouncement.setSendStatus("0");
@@ -1,7 +1,8 @@
package com.jero.modules.dummy.service; package com.jero.modules.dummy.service;
import com.jero.modules.dummy.entity.DummyReadEO;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.dummy.entity.DummyReadEO;
import java.util.List; import java.util.List;
/** /**
@@ -18,7 +19,7 @@ public interface IDummyReadEOService extends IService<DummyReadEO> {
* @param dummyReadEO * @param dummyReadEO
* @return * @return
*/ */
void add(DummyReadEO dummyReadEO); void add(DummyReadEO dummyReadEO);
/** /**
* 更新 * 更新
@@ -26,7 +27,7 @@ public interface IDummyReadEOService extends IService<DummyReadEO> {
* @param dummyReadEO * @param dummyReadEO
* @return * @return
*/ */
void editById(DummyReadEO dummyReadEO); void editById(DummyReadEO dummyReadEO);
/** /**
* 通过id删除 * 通过id删除
@@ -34,7 +35,7 @@ public interface IDummyReadEOService extends IService<DummyReadEO> {
* @param id * @param id
* @return * @return
*/ */
void deleteById(String id); void deleteById(String id);
/** /**
* 批量删除 * 批量删除
@@ -42,7 +43,7 @@ public interface IDummyReadEOService extends IService<DummyReadEO> {
* @param ids * @param ids
* @return * @return
*/ */
void deleteByIds(List<String> ids); void deleteByIds(List<String> ids);
/** /**
* 通过id查询 * 通过id查询
@@ -50,12 +51,16 @@ public interface IDummyReadEOService extends IService<DummyReadEO> {
* @param id * @param id
* @return * @return
*/ */
DummyReadEO queryById(String id); DummyReadEO queryById(String id);
/** /**
* 列表查询 * 列表查询
* *
* @return * @return
*/ */
List<DummyReadEO> queryList(); List<DummyReadEO> queryList();
/**查询订阅虚拟清单的用户*/
List<String> queryReadUserInfo(String dummyInventoryBaseId);
} }
@@ -6,7 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.common.system.vo.LoginUser; import com.jero.common.system.vo.LoginUser;
import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl;
import com.jero.modules.domain.service.DomainUserRelService;
import com.jero.modules.dummy.entity.DummyContentChangeEO; import com.jero.modules.dummy.entity.DummyContentChangeEO;
import com.jero.modules.dummy.entity.DummyInventoryBaseEO; import com.jero.modules.dummy.entity.DummyInventoryBaseEO;
import com.jero.modules.dummy.entity.DummyInventoryInfoEO; import com.jero.modules.dummy.entity.DummyInventoryInfoEO;
@@ -19,16 +22,23 @@ import com.jero.modules.dummy.service.IDummyInventoryBaseEOService;
import com.jero.modules.dummy.service.IDummyInventoryInfoEOService; import com.jero.modules.dummy.service.IDummyInventoryInfoEOService;
import com.jero.modules.dummy.service.IDummyReadEOService; import com.jero.modules.dummy.service.IDummyReadEOService;
import com.jero.modules.dummy.util.ListDiff; import com.jero.modules.dummy.util.ListDiff;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.message.websocket.WebSocket;
import com.jero.modules.system.entity.SysAnnouncement;
import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysAnnouncementService;
import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.service.ISysUserService;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import javax.annotation.Resource;
import java.util.Date; import java.io.IOException;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -50,8 +60,18 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
private IDummyContentChangeEOService iDummyContentChangeEOService; private IDummyContentChangeEOService iDummyContentChangeEOService;
@Autowired @Autowired
private IDummyInventoryInfoEOService iDummyInventoryInfoEOService; private IDummyInventoryInfoEOService iDummyInventoryInfoEOService;
@Autowired
private BussDocumentLibraryEOServiceImpl bussDocumentLibraryEOService;
@Autowired
private DomainUserRelService domainUserRelService;
@Autowired
private ISysAnnouncementService sysAnnouncementService;
@Value(value = "${jero.backUrl}")
private String backUrl;
@Resource
private IFeishuService iFeishuService;
@Resource
private WebSocket webSocket;
/** /**
* 保存 * 保存
* *
@@ -193,7 +213,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
//发布与撤回均需要发消息(向订阅的人员发消息) //发布与撤回均需要发消息(向订阅的人员发消息)
//首次发布不发消息 //首次发布不发消息
//(1)首次发布将虚拟清单的基础数据和详情数据存入维护清单内容变更表_dummy_content_change //(1)首次发布将虚拟清单的基础数据和详情数据存入维护清单内容变更表_dummy_content_change
//(2)撤回再次编辑完后再次发布 //(2)撤回再次编辑完后再次发布,发消息
//A. 分别判断基础数据和详情数据同上次发布的数据是否发生变化 //A. 分别判断基础数据和详情数据同上次发布的数据是否发生变化
//发生变化-->发消息,删除dummy_content_change中上一次存入的数据,将本次数据存入 //发生变化-->发消息,删除dummy_content_change中上一次存入的数据,将本次数据存入
//没有变化-->不发消息,数据不处理 //没有变化-->不发消息,数据不处理
@@ -257,7 +277,6 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
baseCJList.get(i); baseCJList.get(i);
dummyInventoryBaseEOList.get(i); dummyInventoryBaseEOList.get(i);
baseDiff = ListDiff.compareObject(baseCJList.get(i), dummyInventoryBaseEOList.get(i)); baseDiff = ListDiff.compareObject(baseCJList.get(i), dummyInventoryBaseEOList.get(i));
System.out.println(baseDiff);//不同的字段原,,{name=[虚拟清单33331122211, 虚拟清单3333444]}
} }
//4.对比详情表数据 //4.对比详情表数据
@@ -266,40 +285,60 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
//4.2详情表数据(一条基础数据可能对应多个详情数据---一对多) //4.2详情表数据(一条基础数据可能对应多个详情数据---一对多)
//数据库里原来的详情数据 //数据库里原来的详情数据
for(DummyContentChangeEO dummyContentChangeEO : dummyContentChangeEOInfoList){ Map<String, String> infoDiff = null;
List<Map<String, String>> infoDiffList=null;
String addSerialNumber=null;
String deleteSerialNumber=null;
List<String> addSerialNumberList =null;
List<String> deleteSerialNumberList =null;
//对比,获取值不同的字段
for(DummyContentChangeEO dummyContentChangeEO : dummyContentChangeEOInfoList) {
String infoCJ = dummyContentChangeEO.getContentJson(); String infoCJ = dummyContentChangeEO.getContentJson();
List<DummyInventoryInfoEO> infoCJList = JSONArray.parseArray(infoCJ,DummyInventoryInfoEO.class);//json转list List<DummyInventoryInfoEO> infoCJList = JSONArray.parseArray(infoCJ, DummyInventoryInfoEO.class);//json转list
//对比,获取值不同的字段 //获取数据库和传入同时存在的编号
Map<String, String> infoDiff = null; List<String> infoCJBaseSerialNumberList = infoCJList.stream().map(e -> e.getSerialNumber()).collect(Collectors.toList());
if(infoCJList.size()==dummyInventoryInfoEOList.size()) {//现在的详情数据数量和数据库里的一样 List<String> dummyInventoryInfoEOSerialNumberList = dummyInventoryInfoEOList.stream().map(e -> e.getSerialNumber()).collect(Collectors.toList());
for (int i = 0; i < infoCJList.size(); i++) { if (CollectionUtils.isNotEmpty(dummyInventoryInfoEOSerialNumberList)) {
DummyInventoryInfoEO h = infoCJList.get(i); dummyInventoryInfoEOSerialNumberList.removeIf(s -> !infoCJBaseSerialNumberList.contains(s));
DummyInventoryInfoEO g = dummyInventoryInfoEOList.get(i);
infoDiff = ListDiff.compareObject(infoCJList.get(i), dummyInventoryInfoEOList.get(i));
System.out.println(infoDiff);//不同的字段原,
}
}else{//现在的详情数据数量和数据库里的不一样<--详情的id不一样
String diffId=null;
StringBuilder diffIdBuilder=new StringBuilder();
for(DummyInventoryInfoEO dummyInventoryInfoEO : infoCJList) {
diffId = dummyInventoryInfoEOList.stream().filter(e -> !dummyInventoryInfoEO.equals(e.getId()))
.map(f->f.getId()).collect(Collectors.joining(","));
diffIdBuilder.append(diffId).append(",");
}
diffIdBuilder.substring(0,diffIdBuilder.toString().length()-1);
} }
System.out.println(infoCJList); System.out.println(dummyInventoryInfoEOSerialNumberList);
//4.2.1处理原有详情数据
for (int i = 0; i < infoCJList.size(); i++) {
infoDiff = ListDiff.compareObject(infoCJList.get(i), dummyInventoryInfoEOList.get(i));
infoDiffList.add(infoDiff);
}
//4.2.2处理新增数据
List<String> infoCJSerialNumberList = infoCJList.stream().map(e -> e.getSerialNumber()).collect(Collectors.toList());
for (DummyInventoryInfoEO dummyInventoryInfoEO : infoCJList) {
addSerialNumberList = dummyInventoryInfoEOList.stream().filter(e -> !dummyInventoryInfoEO.equals(e.getId()))
.map(f -> f.getSerialNumber()).collect(Collectors.toList());
}
//去掉发布时传入的和数据库同时有的数据
for(String midSerialNumber:infoCJSerialNumberList){
addSerialNumberList.remove(midSerialNumber);
}
addSerialNumber =StringUtils.join(addSerialNumberList,",");
// JsonDiff.compareJson(infoCJjson,info,null); //4.2.3处理删除的数据
for (DummyInventoryInfoEO dummyInventoryInfoEO : infoCJList) {
deleteSerialNumberList = dummyInventoryInfoEOList.stream().filter(e -> !dummyInventoryInfoEO.equals(e.getId()))
.map(f -> f.getSerialNumber()).collect(Collectors.toList());
}
for(String midSerialNumber:deleteSerialNumberList){
infoCJSerialNumberList.remove(midSerialNumber);
}
deleteSerialNumber=StringUtils.join(infoCJSerialNumberList,",");
} }
//向订阅该领域管理的人发消息和飞书
sendMsg(baseDiff,dummyContentChangeEOBaseList.get(0).getConnectId(),infoDiff,addSerialNumber,deleteSerialNumber);
//6.数据对比完成后.删除之前保存的dummy_inventory_info中的数据,重新保存最新的数据 //5.数据对比完成后.删除之前保存的dummy_inventory_info中的数据,重新保存最新的数据
} }
@@ -312,4 +351,167 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
} }
private void sendMsg(Map<String, String> baseDiff, String idTemp,Map<String, String> infoDiff,String addSerialNumber,String deleteSerialNumber) {
String baseName=queryById(idTemp).getName();//基础表id
List<String> userNameList = dummyReadEOService.queryReadUserInfo(idTemp);
List<String> userIdList=sysUserService.queryUserIdListByNameList(userNameList).stream().map(e->e.getId()).collect(Collectors.toList());
//给发送消息的用户
if(userIdList.size() == 0){
return;
}
List<SysUser> sysUsers = sysUserService.listByIds(userIdList);
List<String> thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList());
if (userIdList.size() != 0) {
String href = backUrl + "/dummy/dummyInventoryBaseEO/issue?id=" + idTemp;
//The xx virtual list you subscribed to has been updated as follows:1 . xxxxx 2.xxxx
String content ="The " + baseName + " virtual list you subscribed to has been updated.";
String contentInfo ="The " + baseName + " virtual list you subscribed to has been updated as follows : " + "\r\n";
setContentInfo(contentInfo,baseDiff,infoDiff,addSerialNumber,deleteSerialNumber);
//封装消息的实体类
SysAnnouncement sysAnnouncement = bussDocumentLibraryEOService.getSysAnnouncement(userIdList, content, contentInfo);
sysAnnouncementService.saveAnnouncement(sysAnnouncement);
bussDocumentLibraryEOService.sendWebsocket(idTemp, idTemp);
//飞书
try {
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), content, MessageTypeEnum.PUSH.getName(), href);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
}
}
public void setContentInfo(String contentInfo,Map<String, String> baseDiff,Map<String, String> infoDiff,String addSerialNumber,String deleteSerialNumber) {
int row = 1;
//设置虚拟清单列表的修改消息
if(MapUtils.isNotEmpty(baseDiff)) {
//虚拟清单名称
if (StringUtils.isNotBlank(baseDiff.get("name"))) {
List<String> nameList = Arrays.asList(baseDiff.get("name").split(","));
String baseDiffOldName = nameList.get(0);
String baseDiffNewName = nameList.get(1);
contentInfo += row + ". The name of virtual list has been changed from " + baseDiffOldName + " to " + baseDiffNewName + ".\r\n";
row++;
}
//适用说明
if (StringUtils.isNotBlank(baseDiff.get("useExplain"))) {
List<String> useExplainList = Arrays.asList(baseDiff.get("useExplain").split(","));
String baseDiffOldUseExplain = useExplainList.get(0);
String baseDiffNewUseExplain = useExplainList.get(1);
contentInfo += row + ". The applicable instructions of virtual list has been changed from " + baseDiffOldUseExplain + " to " + baseDiffNewUseExplain + ".\r\n";
row++;
}
}
//设置维护清单的新增消息
if (StringUtils.isNotBlank(addSerialNumber)) {
contentInfo += row + ". " + "This virtual list has been added serial number : " + addSerialNumber + ".\r\n";
row++;
}
//设置维护清单的删除消息
if (StringUtils.isNotBlank(deleteSerialNumber)) {
contentInfo += row + ". " + "This virtual list has been deleted serial number : " + deleteSerialNumber + ".\r\n";
row++;
}
//设置维护清单的修改消息
if(MapUtils.isNotEmpty(infoDiff)) {
//技术领域
if (StringUtils.isNotBlank(infoDiff.get("technologyTerritory"))) {
List<String> technologyTerritoryList = Arrays.asList(infoDiff.get("technologyTerritory").split(","));
String infoDiffOldTechnologyTerritory = technologyTerritoryList.get(0);
String infoDiffNewTechnologyTerritory = technologyTerritoryList.get(1);
contentInfo += row + ". " + infoDiffOldTechnologyTerritory + " has been changed to" + infoDiffNewTechnologyTerritory + ".\r\n";
row++;
}
//新车型实施日期
if (StringUtils.isNotBlank(infoDiff.get("xin1Che1Xing2Shi2Shi1Ri4Qi1"))) {
List<String> xin1Che1Xing2Shi2Shi1Ri4Qi1List = Arrays.asList(infoDiff.get("xin1Che1Xing2Shi2Shi1Ri4Qi1").split(","));
String infoDiffOldXin1Che1Xing2Shi2Shi1Ri4Qi1 = xin1Che1Xing2Shi2Shi1Ri4Qi1List.get(0);
String infoDiffNewXin1Che1Xing2Shi2Shi1Ri4Qi1 = xin1Che1Xing2Shi2Shi1Ri4Qi1List.get(1);
contentInfo += row + ". " + infoDiffOldXin1Che1Xing2Shi2Shi1Ri4Qi1 + " has been changed to" + infoDiffNewXin1Che1Xing2Shi2Shi1Ri4Qi1 + ".\r\n";
row++;
}
//在产车实施日期
if (StringUtils.isNotBlank(infoDiff.get("implementTime"))) {
List<String> implementTimeList = Arrays.asList(infoDiff.get("implementTime").split(","));
String infoDiffOldImplementTime = implementTimeList.get(0);
String infoDiffNewImplementTime = implementTimeList.get(1);
contentInfo += row + ". " + infoDiffOldImplementTime + " has been changed to" + infoDiffNewImplementTime + ".\r\n";
row++;
}
//WVTA ID
if (StringUtils.isNotBlank(infoDiff.get("wvtaId"))) {
List<String> wvtaIdList = Arrays.asList(infoDiff.get("wvtaId").split(","));
String infoDiffOldWvtaId = wvtaIdList.get(0);
String infoDiffNewWvtaId = wvtaIdList.get(1);
contentInfo += row + ". " + infoDiffOldWvtaId + " has been changed to" + infoDiffNewWvtaId + ".\r\n";
row++;
}
//子标题
if (StringUtils.isNotBlank(infoDiff.get("subtitle"))) {
List<String> subtitleList = Arrays.asList(infoDiff.get("subtitle").split(","));
String infoDiffOldSubtitle = subtitleList.get(0);
String infoDiffNewSubtitle = subtitleList.get(1);
contentInfo += row + ". " + infoDiffOldSubtitle + " has been changed to" + infoDiffNewSubtitle + ".\r\n";
row++;
}
//实施类别
if (StringUtils.isNotBlank(infoDiff.get("implementType"))) {
List<String> implementTypeList = Arrays.asList(infoDiff.get("implementType").split(","));
String infoDiffOldImplementType = implementTypeList.get(0);
String infoDiffNewImplementType = implementTypeList.get(1);
contentInfo += row + ". " + infoDiffOldImplementType + " has been changed to" + infoDiffNewImplementType + ".\r\n";
row++;
}
//认证类型
if (StringUtils.isNotBlank(infoDiff.get("attestationType"))) {
List<String> attestationTypeList = Arrays.asList(infoDiff.get("attestationType").split(","));
String infoDiffOldAttestationType = attestationTypeList.get(0);
String infoDiffNewAttestationType = attestationTypeList.get(1);
contentInfo += row + ". " + infoDiffOldAttestationType + " has been changed to" + infoDiffNewAttestationType + ".\r\n";
row++;
}
//认证级别
//责任领域
//备注
//设计符合性确认-交付物类型
//设计符合性确认-交付物模板
//设计符合性确认-发起人
//设计符合性确认-责任人
//prehomo确认-交付物类型
//prehomo确认-交付物模板
//prehomo确认-发起人
//prehomo确认-责任人
//验证符合性确认-交付物类型
//验证符合性确认-交付物模板
//验证符合性确认-发起人
//验证符合性确认-责任人
}
}
public void setContent(String contentInfo,Map<String, String> infoDiff, String field,int row){
if (StringUtils.isNotBlank(infoDiff.get(field))) {
List<String> list = Arrays.asList(infoDiff.get(field).split(","));
String infoDiffOld = list.get(0);
String infoDiffNew = list.get(1);
contentInfo += row + ". " + infoDiffOld + " has been changed to" + infoDiffNew + ".\r\n";
row++;
}
}
} }
@@ -579,7 +579,9 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (String s : deliverableTemplate.split(",")) { for (String s : deliverableTemplate.split(",")) {
List<OSSFile> collect = fileInfos.stream().filter(e -> s.equals(e.getId())).collect(Collectors.toList()); List<OSSFile> collect = fileInfos.stream().filter(e -> s.equals(e.getId())).collect(Collectors.toList());
sb.append(collect.get(0).getFileName() + ","); if(collect.size() != 0){
sb.append(collect.get(0).getFileName() + ",");
}
} }
String sbStr = ""; String sbStr = "";
if(StringUtils.isNotBlank(sb)){ if(StringUtils.isNotBlank(sb)){
@@ -1,12 +1,17 @@
package com.jero.modules.dummy.service.impl; package com.jero.modules.dummy.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.dummy.entity.DummyReadEO; import com.jero.modules.dummy.entity.DummyReadEO;
import com.jero.modules.dummy.mapper.DummyReadEOMapper; import com.jero.modules.dummy.mapper.DummyReadEOMapper;
import com.jero.modules.dummy.service.IDummyReadEOService; import com.jero.modules.dummy.service.IDummyReadEOService;
import me.zhyd.oauth.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Date; import java.util.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.stream.Collectors;
/** /**
* @Description: 虚拟清单订阅表 * @Description: 虚拟清单订阅表
@@ -16,6 +21,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
*/ */
@Service @Service
public class DummyReadEOServiceImpl extends ServiceImpl<DummyReadEOMapper, DummyReadEO> implements IDummyReadEOService { public class DummyReadEOServiceImpl extends ServiceImpl<DummyReadEOMapper, DummyReadEO> implements IDummyReadEOService {
@Autowired
private DummyReadEOMapper dummyReadEOMapper;
/** /**
* 保存 * 保存
@@ -24,12 +32,12 @@ public class DummyReadEOServiceImpl extends ServiceImpl<DummyReadEOMapper, Dummy
* @return * @return
*/ */
@Override @Override
public void add(DummyReadEO dummyReadEO) { public void add(DummyReadEO dummyReadEO) {
Date now = new Date(); Date now = new Date();
dummyReadEO.setCreateTime(now); dummyReadEO.setCreateTime(now);
dummyReadEO.setUpdateTime(now); dummyReadEO.setUpdateTime(now);
save(dummyReadEO); save(dummyReadEO);
} }
/** /**
* 更新 * 更新
@@ -38,11 +46,11 @@ public class DummyReadEOServiceImpl extends ServiceImpl<DummyReadEOMapper, Dummy
* @return * @return
*/ */
@Override @Override
public void editById(DummyReadEO dummyReadEO) { public void editById(DummyReadEO dummyReadEO) {
Date now = new Date(); Date now = new Date();
dummyReadEO.setUpdateTime(now); dummyReadEO.setUpdateTime(now);
saveOrUpdate(dummyReadEO); saveOrUpdate(dummyReadEO);
} }
/** /**
* 通过id删除 * 通过id删除
@@ -51,9 +59,9 @@ public class DummyReadEOServiceImpl extends ServiceImpl<DummyReadEOMapper, Dummy
* @return * @return
*/ */
@Override @Override
public void deleteById(String id) { public void deleteById(String id) {
removeById(id); removeById(id);
} }
/** /**
* 批量删除 * 批量删除
@@ -62,9 +70,9 @@ public class DummyReadEOServiceImpl extends ServiceImpl<DummyReadEOMapper, Dummy
* @return * @return
*/ */
@Override @Override
public void deleteByIds(List<String> ids) { public void deleteByIds(List<String> ids) {
removeByIds(ids); removeByIds(ids);
} }
/** /**
* 通过id查询 * 通过id查询
@@ -73,17 +81,35 @@ public class DummyReadEOServiceImpl extends ServiceImpl<DummyReadEOMapper, Dummy
* @return * @return
*/ */
@Override @Override
public DummyReadEO queryById(String id) { public DummyReadEO queryById(String id) {
return getById(id); return getById(id);
} }
/** /**
* 列表查询 * 列表查询
* *
* @return * @return
*/ */
@Override @Override
public List<DummyReadEO> queryList() { public List<DummyReadEO> queryList() {
return list(); return list();
} }
/**
* 查询订阅虚拟清单的用户
*
* @return
*/
@Override
public List<String> queryReadUserInfo(String dummyInventoryBaseId) {
//获取订阅该虚拟清单的所有用户信息
if(StringUtils.isNotEmpty(dummyInventoryBaseId)){
QueryWrapper<DummyReadEO> queryWrapper = new QueryWrapper<>();
queryWrapper.select("create_by").eq("dummy_inventory_base_id",dummyInventoryBaseId);
List<String> readUserList = list(queryWrapper).stream().map(e -> e.getCreateBy()).distinct().collect(Collectors.toList());
return readUserList;
}else{
throw new JeroBootException("The virtual inventory is not subscribed.");//该虚拟清单未被订阅
}
}
} }
@@ -19,8 +19,8 @@ public class ListDiff <T> {
e.printStackTrace(); e.printStackTrace();
} }
if( ! equals(v1, v2) if( ! equals(v1, v2) && !f.getName().contains("create")
&& !f.getName().equals("updateTime") ){ && !f.getName().contains("update") ){
StringBuilder v1String= new StringBuilder(String.valueOf(v1)); StringBuilder v1String= new StringBuilder(String.valueOf(v1));
StringBuilder v2String= new StringBuilder(String.valueOf(v2)); StringBuilder v2String= new StringBuilder(String.valueOf(v2));
@@ -28,7 +28,7 @@ public class ListDiff <T> {
result.put(f.getName(), v1String.append(",").append(v2String).toString()); result.put(f.getName(), v1String.append(",").append(v2String).toString());
System.out.println("zlzl");
} }
} }
return result; return result;
@@ -29,6 +29,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@@ -330,4 +331,37 @@ public class ProjectLawsInventoryEOController extends JeroController<ProjectLaws
return Result.OK(dummyInventoryBaseEO.getCut(),pageList); return Result.OK(dummyInventoryBaseEO.getCut(),pageList);
} }
@ApiOperation(value = "模板下载")
@GetMapping(value = "/exportTemplate")
public void exportTemplate(ProjectLawsInventoryEO projectLawsInventoryEO, HttpServletResponse response, HttpServletRequest request) throws Exception {
projectLawsInventoryEOService.exportTemplate(projectLawsInventoryEO,response,request);
}
/**
* 导出数据
* @param request
* @param projectLawsInventoryEO
*/
@RequestMapping(value = "/exportData")
public void exportData(HttpServletResponse response,
HttpServletRequest request,
ProjectLawsInventoryEO projectLawsInventoryEO) {
projectLawsInventoryEOService.exportData(response,request, projectLawsInventoryEO);
}
/**
* 导入数据
*
* @param file
* @param projectLawsInventoryEO
* @return
*/
@RequestMapping(value = "/importData", method = RequestMethod.POST)
public Result<?> importData(@RequestParam(value = "file", required = false) MultipartFile file,
ProjectLawsInventoryEO projectLawsInventoryEO) {
projectLawsInventoryEOService.importData(file,projectLawsInventoryEO);
return Result.OK("导入成功");
}
} }
@@ -0,0 +1,171 @@
package com.jero.modules.project.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jero.common.api.vo.Result;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.project.entity.ProjectVersionInfoEO;
import com.jero.modules.project.service.IProjectVersionInfoEOService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import com.jero.common.system.base.controller.JeroController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.jero.common.aspect.annotation.AutoLog;
/**
* @Description: 法规清单定板详情表
* @Author: jero-boot
* @Date: 2022-05-05
* @Version: V1.0
*/
@Api(tags="法规清单定板详情表")
@RestController
@RequestMapping("/project/projectVersionInfoEO")
@Slf4j
public class ProjectVersionInfoEOController extends JeroController<ProjectVersionInfoEO, IProjectVersionInfoEOService> {
@Autowired
private IProjectVersionInfoEOService projectVersionInfoEOService;
/**
* 分页列表查询
*
* @param projectVersionInfoEO
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "法规清单定板详情表-分页列表查询")
@ApiOperation(value="法规清单定板详情表-分页列表查询", notes="法规清单定板详情表-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(ProjectVersionInfoEO projectVersionInfoEO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<ProjectVersionInfoEO> queryWrapper = QueryGenerator.initQueryWrapper(projectVersionInfoEO, req.getParameterMap());
Page<ProjectVersionInfoEO> page = new Page<ProjectVersionInfoEO>(pageNo, pageSize);
IPage<ProjectVersionInfoEO> pageList = projectVersionInfoEOService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "法规清单定板详情表-列表查询")
@ApiOperation(value="法规清单定板详情表-列表查询", notes="法规清单定板详情表-列表查询")
@GetMapping(value = "/list")
public Result<List<ProjectVersionInfoEO>> queryList(ProjectVersionInfoEO projectVersionInfoEO,
HttpServletRequest req) {
List<ProjectVersionInfoEO> list = projectVersionInfoEOService.queryInfoList(projectVersionInfoEO,req);
return Result.OK(list);
}
/**
* 添加
*
* @param projectVersionInfoEO
* @return
*/
@AutoLog(value = "法规清单定板详情表-添加")
@ApiOperation(value="法规清单定板详情表-添加", notes="法规清单定板详情表-添加")
@PostMapping(value = "/add")
public Result<?> add(@Validated @RequestBody ProjectVersionInfoEO projectVersionInfoEO) {
projectVersionInfoEOService.add(projectVersionInfoEO);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param projectVersionInfoEO
* @return
*/
@AutoLog(value = "法规清单定板详情表-编辑")
@ApiOperation(value="法规清单定板详情表-编辑", notes="法规清单定板详情表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody ProjectVersionInfoEO projectVersionInfoEO) {
projectVersionInfoEOService.editById(projectVersionInfoEO);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "法规清单定板详情表-通过id删除")
@ApiOperation(value="法规清单定板详情表-通过id删除", notes="法规清单定板详情表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
projectVersionInfoEOService.deleteById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "法规清单定板详情表-批量删除")
@ApiOperation(value="法规清单定板详情表-批量删除", notes="法规清单定板详情表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.projectVersionInfoEOService.deleteByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "法规清单定板详情表-通过id查询")
@ApiOperation(value="法规清单定板详情表-通过id查询", notes="法规清单定板详情表-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
ProjectVersionInfoEO projectVersionInfoEO = projectVersionInfoEOService.queryById(id);
if(projectVersionInfoEO==null) {
return Result.error("未找到对应数据");
}
return Result.OK(projectVersionInfoEO);
}
/**
* 导出excel
*
* @param request
* @param projectVersionInfoEO
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, ProjectVersionInfoEO projectVersionInfoEO) {
return super.exportXls(request, projectVersionInfoEO, ProjectVersionInfoEO.class, "法规清单定板详情表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, ProjectVersionInfoEO.class);
}
}
@@ -0,0 +1,239 @@
package com.jero.modules.project.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
/**
* @Description: 法规清单定板详情表
* @Author: jero-boot
* @Date: 2022-05-05
* @Version: V1.0
*/
@Data
@TableName("project_version_info")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="project_version_info对象", description="法规清单定板详情表")
public class ProjectVersionInfoEO implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private java.lang.String sysOrgCode;
/**法规清单版本id*/
@Excel(name = "法规清单版本id", width = 15)
@ApiModelProperty(value = "法规清单版本id")
private java.lang.String historyVersionsId;
/**项目库id*/
@Excel(name = "项目库id", width = 15)
@ApiModelProperty(value = "项目库id")
private java.lang.String projectLibraryId;
/**编号*/
@Excel(name = "编号", width = 15)
@ApiModelProperty(value = "编号")
private java.lang.String serialNumber;
/**标题*/
@Excel(name = "标题", width = 15)
@ApiModelProperty(value = "标题")
private java.lang.String title;
/**子标题*/
@Excel(name = "子标题", width = 15)
@ApiModelProperty(value = "子标题")
private java.lang.String subtitle;
/**对应标准*/
@Excel(name = "对应标准", width = 15)
@ApiModelProperty(value = "对应标准")
private java.lang.String correspondingStandard;
/**实施类别*/
@Excel(name = "实施类别", width = 15)
@ApiModelProperty(value = "实施类别")
private java.lang.String implementType;
/**新车型实施日期*/
@Excel(name = "新车型实施日期", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "新车型实施日期")
private java.util.Date xin1Che1Xing2Shi2Shi1Ri4Qi1;
/**在产车实施日期*/
@Excel(name = "在产车实施日期", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "在产车实施日期")
private java.util.Date implementTime;
/**认证类型*/
@Excel(name = "认证类型", width = 15)
@ApiModelProperty(value = "认证类型")
private java.lang.String attestationType;
/**认证级别*/
@Excel(name = "认证级别", width = 15)
@ApiModelProperty(value = "认证级别")
private java.lang.String attestationRank;
/**WVTA ID*/
@Excel(name = "WVTA ID", width = 15)
@ApiModelProperty(value = "WVTA ID")
private java.lang.String wvtaId;
/**责任领域*/
@Excel(name = "责任领域", width = 15)
@ApiModelProperty(value = "责任领域")
private java.lang.String dutyTerritory;
/**法规工程师*/
@Excel(name = "法规工程师", width = 15)
@ApiModelProperty(value = "法规工程师")
private java.lang.String regulationOwnerId;
/**认证工程师*/
@Excel(name = "认证工程师", width = 15)
@ApiModelProperty(value = "认证工程师")
private java.lang.String homologationEngineerId;
/**工程接口人*/
@Excel(name = "工程接口人", width = 15)
@ApiModelProperty(value = "工程接口人")
private java.lang.String engineeringInterfacePerson;
/**备注*/
@Excel(name = "备注", width = 15)
@ApiModelProperty(value = "备注")
private java.lang.String remark;
/**设计符合性确认-交付物类型*/
@Excel(name = "设计符合性确认-交付物类型", width = 15)
@ApiModelProperty(value = "设计符合性确认-交付物类型")
private java.lang.String designDeliverableType;
/**设计符合性确认-交付物模板*/
@Excel(name = "设计符合性确认-交付物模板", width = 15)
@ApiModelProperty(value = "设计符合性确认-交付物模板")
private java.lang.String designDeliverableTemplate;
/**设计符合性确认-发起人*/
@Excel(name = "设计符合性确认-发起人", width = 15)
@ApiModelProperty(value = "设计符合性确认-发起人")
private java.lang.String designInitiator;
/**设计符合性确认-责任人*/
@Excel(name = "设计符合性确认-责任人", width = 15)
@ApiModelProperty(value = "设计符合性确认-责任人")
private java.lang.String designDuty;
/**设计符合性确认-截止时间*/
@Excel(name = "设计符合性确认-截止时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "设计符合性确认-截止时间")
private java.util.Date designDueDate;
/**prehomo确认-交付物类型*/
@Excel(name = "prehomo确认-交付物类型", width = 15)
@ApiModelProperty(value = "prehomo确认-交付物类型")
private java.lang.String prehomoDeliverableType;
/**prehomo确认-交付物模板*/
@Excel(name = "prehomo确认-交付物模板", width = 15)
@ApiModelProperty(value = "prehomo确认-交付物模板")
private java.lang.String prehomoDeliverableTemplate;
/**prehomo确认-发起人*/
@Excel(name = "prehomo确认-发起人", width = 15)
@ApiModelProperty(value = "prehomo确认-发起人")
private java.lang.String prehomoInitiator;
/**prehomo确认-责任人*/
@Excel(name = "prehomo确认-责任人", width = 15)
@ApiModelProperty(value = "prehomo确认-责任人")
private java.lang.String prehomoDuty;
/**prehomo确认-截止时间*/
@Excel(name = "prehomo确认-截止时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "prehomo确认-截止时间")
private java.util.Date prehomoDueDate;
/**验证符合性确认-交付物类型*/
@Excel(name = "验证符合性确认-交付物类型", width = 15)
@ApiModelProperty(value = "验证符合性确认-交付物类型")
private java.lang.String verifyDeliverableType;
/**验证符合性确认-交付物模板*/
@Excel(name = "验证符合性确认-交付物模板", width = 15)
@ApiModelProperty(value = "验证符合性确认-交付物模板")
private java.lang.String verifyDeliverableTemplate;
/**验证符合性确认-发起人*/
@Excel(name = "验证符合性确认-发起人", width = 15)
@ApiModelProperty(value = "验证符合性确认-发起人")
private java.lang.String verifyInitiator;
/**验证符合性确认-责任人*/
@Excel(name = "验证符合性确认-责任人", width = 15)
@ApiModelProperty(value = "验证符合性确认-责任人")
private java.lang.String verifyDuty;
/**验证符合性确认-截止时间*/
@Excel(name = "验证符合性确认-截止时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "验证符合性确认-截止时间")
private java.util.Date verifyDueDate;
/**任务发布状态*/
@Excel(name = "任务发布状态", width = 15)
@ApiModelProperty(value = "任务发布状态")
private java.lang.String taskReleaseStatus;
}
@@ -0,0 +1,17 @@
package com.jero.modules.project.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jero.modules.project.entity.ProjectVersionInfoEO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 法规清单定板详情表
* @Author: jero-boot
* @Date: 2022-05-05
* @Version: V1.0
*/
public interface ProjectVersionInfoEOMapper extends BaseMapper<ProjectVersionInfoEO> {
}
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.project.mapper.ProjectVersionInfoEOMapper">
<resultMap id="ProjectVersionInfoEOResultMap" type="com.jero.modules.project.entity.ProjectVersionInfoEO">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="sys_org_code" property="sysOrgCode" />
<result column="history_versions_id" property="historyVersionsId" />
<result column="project_library_id" property="projectLibraryId" />
<result column="serial_number" property="serialNumber" />
<result column="title" property="title" />
<result column="subtitle" property="subtitle" />
<result column="corresponding_standard" property="correspondingStandard" />
<result column="implement_type" property="implementType" />
<result column="xin1_che1_xing2_shi2_shi1_ri4_qi1" property="xin1Che1Xing2Shi2Shi1Ri4Qi1" />
<result column="implement_time" property="implementTime" />
<result column="attestation_type" property="attestationType" />
<result column="attestation_rank" property="attestationRank" />
<result column="wvta_id" property="wvtaId" />
<result column="duty_territory" property="dutyTerritory" />
<result column="regulation_owner_id" property="regulationOwnerId" />
<result column="homologation_engineer_id" property="homologationEngineerId" />
<result column="engineering_interface_person" property="engineeringInterfacePerson" />
<result column="remark" property="remark" />
<result column="design_deliverable_type" property="designDeliverableType" />
<result column="design_deliverable_template" property="designDeliverableTemplate" />
<result column="design_initiator" property="designInitiator" />
<result column="design_duty" property="designDuty" />
<result column="design_due_date" property="designDueDate" />
<result column="prehomo_deliverable_type" property="prehomoDeliverableType" />
<result column="prehomo_deliverable_template" property="prehomoDeliverableTemplate" />
<result column="prehomo_initiator" property="prehomoInitiator" />
<result column="prehomo_duty" property="prehomoDuty" />
<result column="prehomo_due_date" property="prehomoDueDate" />
<result column="verify_deliverable_type" property="verifyDeliverableType" />
<result column="verify_deliverable_template" property="verifyDeliverableTemplate" />
<result column="verify_initiator" property="verifyInitiator" />
<result column="verify_duty" property="verifyDuty" />
<result column="verify_due_date" property="verifyDueDate" />
<result column="task_release_status" property="taskReleaseStatus" />
</resultMap>
</mapper>
@@ -4,8 +4,10 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.common.api.vo.Result; import com.jero.common.api.vo.Result;
import com.jero.modules.project.entity.ProjectLawsInventoryEO; import com.jero.modules.project.entity.ProjectLawsInventoryEO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -97,4 +99,19 @@ public interface IProjectLawsInventoryEOService extends IService<ProjectLawsInve
* @param projectLawsInventoryEO * @param projectLawsInventoryEO
*/ */
void setBatch(ProjectLawsInventoryEO projectLawsInventoryEO); void setBatch(ProjectLawsInventoryEO projectLawsInventoryEO);
/**
* 模板下载
* @param projectLawsInventoryEO
* @param response
* @param request
*/
void exportTemplate(ProjectLawsInventoryEO projectLawsInventoryEO, HttpServletResponse response, HttpServletRequest request);
void exportData(HttpServletResponse response,
HttpServletRequest request,
ProjectLawsInventoryEO projectLawsInventoryEO);
void importData(MultipartFile file,
ProjectLawsInventoryEO projectLawsInventoryEO);
} }
@@ -0,0 +1,67 @@
package com.jero.modules.project.service;
import com.jero.modules.project.entity.ProjectVersionInfoEO;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @Description: 法规清单定板详情表
* @Author: jero-boot
* @Date: 2022-05-05
* @Version: V1.0
*/
public interface IProjectVersionInfoEOService extends IService<ProjectVersionInfoEO> {
/**
* 保存
*
* @param projectVersionInfoEO
* @return
*/
void add(ProjectVersionInfoEO projectVersionInfoEO);
/**
* 更新
*
* @param projectVersionInfoEO
* @return
*/
void editById(ProjectVersionInfoEO projectVersionInfoEO);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*
* @param id
* @return
*/
ProjectVersionInfoEO queryById(String id);
/**
* 列表查询
*
* @return
*/
List<ProjectVersionInfoEO> queryList();
List<ProjectVersionInfoEO> queryInfoList(ProjectVersionInfoEO projectVersionInfoEO,
HttpServletRequest req);
}
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.system.vo.LoginUser; import com.jero.common.system.vo.LoginUser;
import com.jero.modules.project.entity.ProjectCommentEO; import com.jero.modules.project.entity.ProjectCommentEO;
import com.jero.modules.project.entity.ProjectReplyEO; import com.jero.modules.project.entity.ProjectReplyEO;
import com.jero.modules.project.enums.ProjectRoleEnum;
import com.jero.modules.project.mapper.ProjectCommentEOMapper; import com.jero.modules.project.mapper.ProjectCommentEOMapper;
import com.jero.modules.project.service.IProjectCommentEOService; import com.jero.modules.project.service.IProjectCommentEOService;
import com.jero.modules.project.service.IProjectReplyEOService; import com.jero.modules.project.service.IProjectReplyEOService;
@@ -30,6 +31,8 @@ public class ProjectCommentEOServiceImpl extends ServiceImpl<ProjectCommentEOMap
@Autowired @Autowired
private IProjectReplyEOService iProjectReplyEOService; private IProjectReplyEOService iProjectReplyEOService;
@Autowired
private ProjectLawsInventoryEOServiceImpl projectLawsInventoryEOService;
/** /**
* 保存 * 保存
* *
@@ -103,9 +106,17 @@ public class ProjectCommentEOServiceImpl extends ServiceImpl<ProjectCommentEOMap
@Override @Override
public List<ProjectCommentVO> getInfoList(ProjectCommentEO projectCommentEOTemp) { public List<ProjectCommentVO> getInfoList(ProjectCommentEO projectCommentEOTemp) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//评论的内容
LambdaQueryWrapper<ProjectCommentEO> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ProjectCommentEO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(ProjectCommentEO::getCreateBy,sysUser.getUsername()).in(ProjectCommentEO::getProjectLibraryId,projectCommentEOTemp.getProjectLibraryId());
//验证当前用户在该项目中是什么角色
int isProjectRole = projectLawsInventoryEOService.checkUserRole(projectCommentEOTemp.getProjectLibraryId(), sysUser.getId(), "");
if(!ProjectRoleEnum.STUDIO_ENGINEER.getValue().equals(String.valueOf(isProjectRole))){
//studio工程师(某一条项目中所有的评论和回复)
//其他角色(只能看自己评论,自己回复和studio工程师回复的)
wrapper.in(ProjectCommentEO::getCreateBy,sysUser.getUsername());
}
//评论的内容
wrapper.in(ProjectCommentEO::getProjectLibraryId,projectCommentEOTemp.getProjectLibraryId());
wrapper.orderByDesc(ProjectCommentEO::getCreateTime); wrapper.orderByDesc(ProjectCommentEO::getCreateTime);
List<ProjectCommentEO> projectCommentEOS = this.list(wrapper); List<ProjectCommentEO> projectCommentEOS = this.list(wrapper);
List<String> projectCommentIdList = projectCommentEOS.stream().map(ProjectCommentEO::getId).collect(Collectors.toList()); List<String> projectCommentIdList = projectCommentEOS.stream().map(ProjectCommentEO::getId).collect(Collectors.toList());
@@ -1,9 +1,18 @@
package com.jero.modules.project.service.impl; package com.jero.modules.project.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.modules.project.entity.ProjectHistoryVersionsEO; import com.jero.modules.project.entity.ProjectHistoryVersionsEO;
import com.jero.modules.project.entity.ProjectLawsInventoryEO;
import com.jero.modules.project.entity.ProjectVersionInfoEO;
import com.jero.modules.project.mapper.ProjectHistoryVersionsEOMapper; import com.jero.modules.project.mapper.ProjectHistoryVersionsEOMapper;
import com.jero.modules.project.service.IProjectHistoryVersionsEOService; import com.jero.modules.project.service.IProjectHistoryVersionsEOService;
import com.jero.modules.project.service.IProjectLawsInventoryEOService;
import com.jero.modules.project.service.IProjectVersionInfoEOService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Date; import java.util.Date;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -17,6 +26,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@Service @Service
public class ProjectHistoryVersionsEOServiceImpl extends ServiceImpl<ProjectHistoryVersionsEOMapper, ProjectHistoryVersionsEO> implements IProjectHistoryVersionsEOService { public class ProjectHistoryVersionsEOServiceImpl extends ServiceImpl<ProjectHistoryVersionsEOMapper, ProjectHistoryVersionsEO> implements IProjectHistoryVersionsEOService {
@Autowired
private IProjectLawsInventoryEOService projectLawsInventoryEOService;
@Autowired
private IProjectVersionInfoEOService iProjectVersionInfoEOService;
/** /**
* 保存 * 保存
* *
@@ -29,7 +42,24 @@ public class ProjectHistoryVersionsEOServiceImpl extends ServiceImpl<ProjectHist
projectHistoryVersionsEO.setCreateTime(now); projectHistoryVersionsEO.setCreateTime(now);
projectHistoryVersionsEO.setUpdateTime(now); projectHistoryVersionsEO.setUpdateTime(now);
save(projectHistoryVersionsEO); save(projectHistoryVersionsEO);
} //定版详情
//1. 法规清单信息
LambdaQueryWrapper<ProjectLawsInventoryEO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(ProjectLawsInventoryEO::getProjectLibraryId,projectHistoryVersionsEO.getProjectLibraryId());
List<ProjectLawsInventoryEO> projectLawsInventoryEOS = projectLawsInventoryEOService.list(wrapper);
List<ProjectVersionInfoEO> projectVersionInfoEOS = new ArrayList<>();
if(projectLawsInventoryEOS.size() != 0){
for (ProjectLawsInventoryEO projectLawsInventoryEO : projectLawsInventoryEOS) {
ProjectVersionInfoEO projectVersionInfoEO = new ProjectVersionInfoEO();
projectVersionInfoEO.setHistoryVersionsId(projectHistoryVersionsEO.getId());
BeanUtils.copyProperties(projectLawsInventoryEO, projectVersionInfoEO);
projectVersionInfoEOS.add(projectVersionInfoEO);
}
}
if(projectVersionInfoEOS.size() != 0){
iProjectVersionInfoEOService.saveBatch(projectVersionInfoEOS);
}
}
/** /**
* 更新 * 更新
@@ -1,6 +1,7 @@
package com.jero.modules.project.service.impl; package com.jero.modules.project.service.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.utils.IOUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -45,14 +46,28 @@ import com.jero.modules.system.service.ISysUserService;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -103,6 +118,8 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
private ProjectNameInfoEOMapper projectNameInfoEOMapper; private ProjectNameInfoEOMapper projectNameInfoEOMapper;
@Autowired @Autowired
private IDummyInventoryInfoEOService dummyInventoryInfoEOService; private IDummyInventoryInfoEOService dummyInventoryInfoEOService;
@Value(value = "${jero.path.upload}")
private String uploadpath;
/** /**
* 保存 * 保存
@@ -1310,6 +1327,162 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
projectLawsInventoryEO.setVerifyDuty(dummyInventoryInfoEO.getVerifyDuty()); projectLawsInventoryEO.setVerifyDuty(dummyInventoryInfoEO.getVerifyDuty());
} }
return projectLawsInventoryEO; return projectLawsInventoryEO;
}
@Override
public void exportTemplate(ProjectLawsInventoryEO projectLawsInventoryEO, HttpServletResponse response, HttpServletRequest request) {
OutputStream os = null;
HSSFWorkbook workbook = new HSSFWorkbook();
String fileOriName = "法规清单导入模板.xls";
String filePath = uploadpath + File.separator + fileOriName;
try {
String titleOne = "";
String titleTwo = "";
if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){
titleOne = "*编号,子标题,WVTA ID," +
"实施类别,认证类型,*认证级别," +
"*责任领域,*法规工程师,*认证工程师,*工程接口人," +
"备注," +
"设计符合性确认,Pre-homo确认,验证符合性确认";
titleTwo = "交付物类型,交付物模板,发起人,责任人,截止时间,交付物类型,交付物模板,发起人,责任人,截止时间,交付物类型,交付物模板,发起人,责任人,截止时间,";
}else{
titleOne = "*serial number,subtitle,WVTA ID," +
"*implementation category,certification type,*certification level," +
"*area of responsibility,*laws engineer,*authentication engineer,*engineering interface person," +
"remarks," +
"design compliance check,pre-homo check,validation compliance chech";
titleTwo = "type of deliverables,deliverable template,initiator,person liable,deadline," +
"type of deliverables,deliverable template,initiator,person liable,deadline," +
"type of deliverables,deliverable template,initiator,person liable,deadline";
}
List<String> list = Arrays.asList(titleOne.split(","));
int index = 0;
if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){
index = list.indexOf("备注") + 1;
}else{
index = list.indexOf("remarks") + 1;
}
//创建临时文件夹
File nowFile = new File(filePath);
if (nowFile.exists()) {
nowFile.delete();
}
nowFile.mkdirs();
HSSFSheet sheet = workbook.createSheet("虚拟清单导入模板");
sheet.setDefaultColumnWidth(16);//列宽
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setWrapText(true);//自动换行
cellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//水平居中
HSSFCellStyle cellStyleTemp = workbook.createCellStyle();
cellStyleTemp.setWrapText(true);//自动换行
int count = 1;
int startLine = 0;
int endLine = 0;
int line = 4;
for (int i = 0; i < index; i++) {
//合并单元格
CellRangeAddress region1 =
new CellRangeAddress(0, 1, i, i);
sheet.addMergedRegion(region1);
}
for (int i = index; i < 15; i++) {
if(count > 1){
startLine = startLine + line + 1;
endLine = startLine + line;
}else{
startLine = i;
endLine = i + line;
}
//合并单元格
CellRangeAddress region1 =
new CellRangeAddress(0, 0, startLine, endLine); //参数1起始行 参数2终止行 参数3起始列 参数4终止列
sheet.addMergedRegion(region1);
count ++;
}
CellRangeAddress region =
new CellRangeAddress(2, 2, 0, 25); //参数1起始行 参数2终止行 参数3起始列 参数4终止列
sheet.addMergedRegion(region);
String explain= "";
if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){
explain = "填写说明\n" +
"1.导入数据从第四行开始\n" +
"2.所有带*号的字段必须填写\n"+
"3.认证类型,认证级别,实施类别,交付物类型,发起人,责任人,字段是单选属性,必须和系统中的对应字段选项相匹配\n" +
"4.责任领域,字段是多选属性,必须和系统中的对应字段选项相匹配,填写多个时采用英文或中文逗号分割\n" +
"5.编号,子标题,WVTA ID,备注,填写文本内容\n" +
"6.交付物模板字段为文件属性,填写时需要在本文件同级目录下以标准号为名称建立文件夹,并在文件夹下放置文件,假设在AAA标准号下放置了B.docx,则应填写AAA/B.docx";
}else{
explain = "filling explanation\n" +
"1.import data starts at the fourth line\n" +
"2.all fields marked with * must be filled in\n"+
"3.certification type,certification level,implementation category,type of deliverables,initiator,person liable,Fields are radio attributes that must match the corresponding field option in the system\n" +
"4.area of responsibility, field is a multi-select attribute and must match the corresponding field in the system. If multiple fields are filled in, separate them by commas (,)\n" +
"5.serial number,subtitle,WVTA ID,remarks,Fill in the text\n" +
"6.deliverable template,When filling in the field, you need to create a folder in the directory of the same level as the file with the name of the standard number and place the file in the folder. If b. diocx is stored under the AAA standard number, enter AAA/B. diocx";
}
for (int i = 0; i < 3; i++) {
//表头
Row row = sheet.createRow(i);//开始创建标题行
String[] headerArr = titleOne.split(",");
int lineTemp = index;
if (i == 0) {
for (int m = 0; m < headerArr.length; m++) {
if(m < index){
row.createCell(m).setCellValue(headerArr[m]);
}else{
row.createCell(lineTemp).setCellValue(headerArr[m]);
Cell cell = row.getCell(lineTemp);
cell.setCellStyle(cellStyle);
lineTemp = lineTemp + 5;
}
}
}else if(i == 1){
//titleTwo
String[] headerArrTwo = titleTwo.split(",");
for (int j = 0; j < headerArrTwo.length; j++) {
row.createCell(11+j).setCellValue(headerArrTwo[j]);
}
}else{
short height = (short) (7 * 252);
row.setHeight((short) height);
Cell cell = row.createCell(0);
cell.setCellStyle(cellStyleTemp);
cell.setCellValue(new HSSFRichTextString(explain));
}
}
response.setHeader("Content-Disposition",
"attachment; filename=\"" + fileOriName + ".xls");
response.setContentType("application/force-download");
response.flushBuffer();
os = response.getOutputStream();
workbook.write(os);
} catch (Exception e) {
e.printStackTrace();
throw new JeroBootException("下载文件失败,请重试");
} finally {
IOUtils.closeQuietly(os);
}
}
@Override
public void exportData(HttpServletResponse response, HttpServletRequest request, ProjectLawsInventoryEO projectLawsInventoryEO) {
}
@Override
public void importData(MultipartFile file, ProjectLawsInventoryEO projectLawsInventoryEO) {
} }
} }
@@ -0,0 +1,101 @@
package com.jero.modules.project.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.project.entity.ProjectVersionInfoEO;
import com.jero.modules.project.mapper.ProjectVersionInfoEOMapper;
import com.jero.modules.project.service.IProjectVersionInfoEOService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Date;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import javax.servlet.http.HttpServletRequest;
/**
* @Description: 法规清单定板详情表
* @Author: jero-boot
* @Date: 2022-05-05
* @Version: V1.0
*/
@Service
public class ProjectVersionInfoEOServiceImpl extends ServiceImpl<ProjectVersionInfoEOMapper, ProjectVersionInfoEO> implements IProjectVersionInfoEOService {
/**
* 保存
*
* @param projectVersionInfoEO
* @return
*/
@Override
public void add(ProjectVersionInfoEO projectVersionInfoEO) {
Date now = new Date();
projectVersionInfoEO.setCreateTime(now);
projectVersionInfoEO.setUpdateTime(now);
save(projectVersionInfoEO);
}
/**
* 更新
*
* @param projectVersionInfoEO
* @return
*/
@Override
public void editById(ProjectVersionInfoEO projectVersionInfoEO) {
Date now = new Date();
projectVersionInfoEO.setUpdateTime(now);
saveOrUpdate(projectVersionInfoEO);
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
public void deleteById(String id) {
removeById(id);
}
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
public ProjectVersionInfoEO queryById(String id) {
return getById(id);
}
/**
* 列表查询
*
* @return
*/
@Override
public List<ProjectVersionInfoEO> queryList() {
return list();
}
@Override
public List<ProjectVersionInfoEO> queryInfoList(ProjectVersionInfoEO projectVersionInfoEO, HttpServletRequest req) {
QueryWrapper<ProjectVersionInfoEO> queryWrapper = QueryGenerator.initQueryWrapper(projectVersionInfoEO, req.getParameterMap());
queryWrapper.orderByDesc("create_time");
List<ProjectVersionInfoEO> projectVersionInfoEOS = this.list(queryWrapper);
return projectVersionInfoEOS;
}
}
-15
View File
@@ -113,21 +113,6 @@ export function downFile(url,parameter){
}) })
} }
/**
* 下载文件 用于excel导出 -- post
* @param url
* @param parameter
* @returns {*}
*/
export function downFilePost(url,parameter){
return axios({
url: url,
data: parameter,
method:'post' ,
responseType: 'blob'
})
}
/** /**
* 下载文件 * 下载文件
* @param url 文件路径 * @param url 文件路径
+12
View File
@@ -706,6 +706,12 @@ module.exports = {
uploadTime: 'Upload time', uploadTime: 'Upload time',
enclosure: 'enclosure', enclosure: 'enclosure',
// 认证 // 认证
parameter: 'parameter',
changeExtension: 'change Extension',
detailedList: 'detailedList',
collectionCompletionTime: 'collection Completion Time',
parameterTemplateName: 'parameter Template Name',
onlyThree: 'Only letters, numbers and horizontal bars (-) can be entered',
templateName: 'template Name', templateName: 'template Name',
pleaseSelectData: 'please Select Data', pleaseSelectData: 'please Select Data',
templateCopy: 'template Copy', templateCopy: 'template Copy',
@@ -743,4 +749,10 @@ module.exports = {
replyToComments:'Reply to comments', replyToComments:'Reply to comments',
noComment:'No comment', noComment:'No comment',
theReceived:'The final version can be made only when the list confirmation status and task confirmation status of all data are received', theReceived:'The final version can be made only when the list confirmation status and task confirmation status of all data are received',
notEvaluated:'Not evaluated',
cannotExceed:'cannot exceed',
Characters:'Characters',
standardInformation:'standardInformation',
VirtualList:'VirtualList',
importTemplate:'import template',
} }
+14 -2
View File
@@ -55,7 +55,7 @@ module.exports = {
close: '关闭', close: '关闭',
no: '没有任何', no: '没有任何',
click: '点击', click: '点击',
add: '新增', add: '添加',
FilterMatching: '过滤条件匹配', FilterMatching: '过滤条件匹配',
AllMatching: '所有条件都要求匹配', AllMatching: '所有条件都要求匹配',
AnyOneMatches: '条件中的任意一个匹配', AnyOneMatches: '条件中的任意一个匹配',
@@ -580,6 +580,7 @@ module.exports = {
selectDisplayList: '请选择是否列表展示', selectDisplayList: '请选择是否列表展示',
documentSplitDisplay: '文档拆分模块展示', documentSplitDisplay: '文档拆分模块展示',
VirtualListName: '虚拟清单名称', VirtualListName: '虚拟清单名称',
VirtualList:'虚拟清单',
listStatus: '清单状态', listStatus: '清单状态',
creater: '创建人', creater: '创建人',
withdraw: '撤回', withdraw: '撤回',
@@ -686,7 +687,7 @@ module.exports = {
projectDetails:'项目详情', projectDetails:'项目详情',
listOfRegulations:'法规清单', listOfRegulations:'法规清单',
taskList:'任务清单', taskList:'任务清单',
TaskParameterCollection:'任务参数收集', TaskParameterCollection:'认证参数收集',
nonConformance:'未符合项', nonConformance:'未符合项',
deadlineForConfirmationOfDesignCompliance:'设计符合性确认截止时间', deadlineForConfirmationOfDesignCompliance:'设计符合性确认截止时间',
prehomoConfirmationDeadline:'PreHomo确认截止时间', prehomoConfirmationDeadline:'PreHomo确认截止时间',
@@ -712,6 +713,12 @@ module.exports = {
uploadTime:'上传时间', uploadTime:'上传时间',
enclosure:'附件', enclosure:'附件',
// 认证 // 认证
parameter: '参数',
changeExtension: '变更扩展',
detailedList: '清单',
collectionCompletionTime: '收集完成时间',
parameterTemplateName: '参数模板名称',
onlyThree: '只能输入字母数字横杠-三种内容',
templateName: '模板名称', templateName: '模板名称',
pleaseSelectData: '请选择数据', pleaseSelectData: '请选择数据',
templateCopy: '模板复制', templateCopy: '模板复制',
@@ -748,4 +755,9 @@ module.exports = {
replyToComments:'回复评论', replyToComments:'回复评论',
noComment:'暂无评论', noComment:'暂无评论',
theReceived:'所有数据的清单确认状态和任务确认状态都为接受才可以定版', theReceived:'所有数据的清单确认状态和任务确认状态都为接受才可以定版',
notEvaluated:'未评估',
cannotExceed:'不能超出',
Characters:'个字符',
standardInformation:'标准信息',
importTemplate:'导入模板',
} }
@@ -44,6 +44,10 @@
paramsTemplateId: { paramsTemplateId: {
type: String, type: String,
default: '' default: ''
},
projectLibraryId: {
type: String,
default: ''
} }
}, },
data() { data() {
@@ -60,6 +64,8 @@
return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '&dummyInventoryBaseId=' + this.dummyInventoryBaseId return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '&dummyInventoryBaseId=' + this.dummyInventoryBaseId
} else if (this.paramsTemplateId) { } else if (this.paramsTemplateId) {
return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '&paramsTemplateId=' + this.paramsTemplateId return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '&paramsTemplateId=' + this.paramsTemplateId
} else if (this.projectLibraryId) {
return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '&projectLibraryId=' + this.projectLibraryId
} }
return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut
} }
@@ -92,6 +92,7 @@
this.$route.path == '/virtualListDetails' || this.$route.path == '/virtualListDetails' ||
this.$route.path == '/ProjectDetails' || this.$route.path == '/ProjectDetails' ||
this.$route.path == '/handshakeProcess' || this.$route.path == '/handshakeProcess' ||
this.$route.path == '/historicalVersion' ||
this.$route.path == '/processDetails') { this.$route.path == '/processDetails') {
return false return false
} else { } else {
@@ -429,7 +429,7 @@
|| res.field_show_type === '11') { || res.field_show_type === '11') {
rule.push({ rule.push({
max: res.db_length, max: res.db_length,
message: res.db_field_txt + '不能超出' + res.db_length + '个字符', message: res.db_field_txt + this.$t('cannotExceed') + res.db_length + this.$t('Characters'),
trigger: 'blur' trigger: 'blur'
}) })
} }
+5
View File
@@ -342,6 +342,11 @@ export const constantRouterMap = [
name: 'handshakeProcess', name: 'handshakeProcess',
component: () => import(/* webpackChunkName: "user" */ '@/views/processCenter/processForm/handshakeProcess/index') component: () => import(/* webpackChunkName: "user" */ '@/views/processCenter/processForm/handshakeProcess/index')
}, },
{
path: '/historicalVersion',
name: 'historicalVersion',
component: () => import(/* webpackChunkName: "user" */ '@/views/projectManagement/historicalVersion/index')
},
{ {
path: '/processDetails', path: '/processDetails',
name: 'processDetails', name: 'processDetails',
@@ -138,7 +138,7 @@
<a class="text-operation" @click="deleteLib(record)">{{$t('deleteLib')}}</a> <a class="text-operation" @click="deleteLib(record)">{{$t('deleteLib')}}</a>
</span> </span>
<span slot="titleName" slot-scope="text,record" :title="text"> <span slot="titleName" slot-scope="text,record" :title="text">
{{text && text.length > 20 ? text.slice(0,19)+'...':text}} {{text && text.length > 10 ? text.slice(0,9)+'...':text}}
</span> </span>
<span slot="designDeliverableTemplateName" slot-scope="text,record"> <span slot="designDeliverableTemplateName" slot-scope="text,record">
<span>{{record.designDeliverableType_dictText}}</span><br v-if="record.designDeliverableType_dictText"> <span>{{record.designDeliverableType_dictText}}</span><br v-if="record.designDeliverableType_dictText">
@@ -290,6 +290,12 @@
fixed: 'left', fixed: 'left',
scopedSlots: { customRender: 'titleName' } scopedSlots: { customRender: 'titleName' }
}, },
{
title: this.$t('zoneOfApplication'),
align: 'center',
ellipsis: true,
dataIndex: 'region_dictText'
},
{ {
title: this.$t('scopeOfApplication'), title: this.$t('scopeOfApplication'),
align: 'center', align: 'center',
@@ -308,12 +314,6 @@
ellipsis: true, ellipsis: true,
dataIndex: 'correspondingStandardName' dataIndex: 'correspondingStandardName'
}, },
{
title: this.$t('zoneOfApplication'),
align: 'center',
ellipsis: true,
dataIndex: 'region_dictText'
},
{ {
title: this.$t('implementationCategory'), title: this.$t('implementationCategory'),
align: 'center', align: 'center',
@@ -568,17 +568,18 @@
}, },
//模板下载 //模板下载
handleModule() { handleModule() {
downloadFile(this.url.exportTemplate, '模板下载.xls', {}) downloadFile(this.url.exportTemplate, this.$t('VirtualList')+this.$t('importTemplate')+'.xls', {})
}, },
//导出 //导出
handleExport() { handleExport() {
let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys)) let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys))
let query = { let query = {
...this.queryParam, ...this.queryParam,
...this.queryParamQuery,
ids: selectedRowKeys.join(','), ids: selectedRowKeys.join(','),
dummyInventoryBaseId: this.$route.query.id dummyInventoryBaseId: this.$route.query.id
} }
downloadFile(this.url.exportData, this.$route.query.name + '虚拟清单.zip', query, this.Deselect) downloadFile(this.url.exportData, this.$route.query.name + this.$t('VirtualList')+'.zip', query, this.Deselect)
}, },
Deselect() { Deselect() {
this.selectedRowKeys = [] this.selectedRowKeys = []
@@ -99,7 +99,7 @@
</div> </div>
<a-form-model-item class="itemModel" prop="name"> <a-form-model-item class="itemModel" prop="name">
<a-input class="box-input-add" <a-input class="box-input-add"
v-model="formInline.name" v-model.trim="formInline.name"
:placeholder="$t('PleaseEnter')+$t('VirtualListName')"/> :placeholder="$t('PleaseEnter')+$t('VirtualListName')"/>
</a-form-model-item> </a-form-model-item>
</div> </div>
@@ -107,12 +107,13 @@
<a-col :span="24"> <a-col :span="24">
<div class="box-title-text-add"> <div class="box-title-text-add">
<div class="title-text-add"> <div class="title-text-add">
<span class="Required">*</span>
<span class="title-text-text" :title="$t('instructionForUse')">{{$t('instructionForUse')}}</span> <span class="title-text-text" :title="$t('instructionForUse')">{{$t('instructionForUse')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="instructionForUse"> <a-form-model-item class="itemModel" prop="useExplain">
<a-textarea <a-textarea
:placeholder="$t('PleaseEnter')+$t('instructionForUse')" :placeholder="$t('PleaseEnter')+$t('instructionForUse')"
v-model="formInline.useExplain" :rows="4"/> v-model.trim="formInline.useExplain" :rows="4"/>
</a-form-model-item> </a-form-model-item>
</div> </div>
</a-col> </a-col>
@@ -139,11 +140,30 @@
selectedRowKeys: [], selectedRowKeys: [],
formInline: {}, formInline: {},
rules: { rules: {
name: [{ name: [
required: true, {
message: this.$t('VirtualListName') + this.$t('cannotEmpty'), required: true,
trigger: 'blur' message: this.$t('VirtualListName') + this.$t('cannotEmpty'),
}] trigger: 'blur'
},
{
max: 100,
message: this.$t('VirtualListName') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
trigger: 'blur'
}
],
useExplain: [
{
required: true,
message: this.$t('instructionForUse') + this.$t('cannotEmpty'),
trigger: 'blur'
},
{
max: 500,
message: this.$t('instructionForUse') + this.$t('cannotExceed') + 500 + this.$t('Characters'),
trigger: 'blur'
}
]
}, },
visible: false, visible: false,
dataSource: [], dataSource: [],
@@ -200,6 +220,9 @@
this.title = '新增' this.title = '新增'
this.formInline = {} this.formInline = {}
this.visible = true this.visible = true
this.$nextTick(() => {
this.$refs.ruleForm.clearValidate()
})
}, },
//批量删除 //批量删除
handleDel() { handleDel() {
@@ -229,6 +252,9 @@
this.title = '编辑' this.title = '编辑'
this.formInline = JSON.parse(JSON.stringify(item)) this.formInline = JSON.parse(JSON.stringify(item))
this.visible = true this.visible = true
this.$nextTick(() => {
this.$refs.ruleForm.clearValidate()
})
}, },
//撤回 //撤回
withdraw(val) { withdraw(val) {
@@ -18,7 +18,7 @@
<span class="title-text-text" <span class="title-text-text"
:title="$t('NiONumber')">{{$t('NiONumber')}}</span> :title="$t('NiONumber')">{{$t('NiONumber')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="paramsTemplateName"> <a-form-model-item class="itemModel" prop="nioNumber">
<a-input class="box-input" <a-input class="box-input"
:disabled="disabled" :disabled="disabled"
v-model="formInline.nioNumber" v-model="formInline.nioNumber"
@@ -31,7 +31,7 @@
<div class="title-text"> <div class="title-text">
<span class="title-text-text" :title="$t('Required')">{{$t('Required')}}</span> <span class="title-text-text" :title="$t('Required')">{{$t('Required')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="state"> <a-form-model-item class="itemModel" prop="isMust">
<a-select :placeholder="$t('PleaseSelect')+$t('Required')" v-model='formInline.isMust'> <a-select :placeholder="$t('PleaseSelect')+$t('Required')" v-model='formInline.isMust'>
<a-select-option :key="'1'" :value="'1'">{{$t('yes')}} <a-select-option :key="'1'" :value="'1'">{{$t('yes')}}
</a-select-option> </a-select-option>
@@ -49,7 +49,7 @@
<span class="title-text-text" <span class="title-text-text"
:title="$t('ParameterName')">{{$t('ParameterName')}}</span> :title="$t('ParameterName')">{{$t('ParameterName')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="paramsTemplateName"> <a-form-model-item class="itemModel" prop="paramsName">
<a-input class="box-input" <a-input class="box-input"
:disabled="disabled" :disabled="disabled"
v-model="formInline.paramsName" v-model="formInline.paramsName"
@@ -83,7 +83,7 @@
<span class="title-text-text" <span class="title-text-text"
:title="$t('parameterBatch')">{{$t('parameterBatch')}}</span> :title="$t('parameterBatch')">{{$t('parameterBatch')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="paramsTemplateName"> <a-form-model-item class="itemModel" prop="paramsBatch">
<j-dict-select-tag class="box-input" v-model="formInline.paramsBatch" <j-dict-select-tag class="box-input" v-model="formInline.paramsBatch"
:disabled="disabled" :disabled="disabled"
:placeholder="$t('PleaseSelect')+$t('parameterBatch')" :placeholder="$t('PleaseSelect')+$t('parameterBatch')"
@@ -97,7 +97,7 @@
<div class="title-text"> <div class="title-text">
<span class="title-text-text" :title="$t('areaOfResponsibility')">{{$t('areaOfResponsibility')}}</span> <span class="title-text-text" :title="$t('areaOfResponsibility')">{{$t('areaOfResponsibility')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="technologyTerritory"> <a-form-model-item class="itemModel" prop="dutyTerritory">
<j-dict-select-tag class="box-input" v-model="formInline.dutyTerritory" <j-dict-select-tag class="box-input" v-model="formInline.dutyTerritory"
:disabled="disabled" :disabled="disabled"
:placeholder="$t('PleaseSelect')+$t('areaOfResponsibility')" :placeholder="$t('PleaseSelect')+$t('areaOfResponsibility')"
@@ -114,7 +114,7 @@
<span class="title-text-text" <span class="title-text-text"
:title="$t('ParameterDescription')">{{$t('ParameterDescription')}}</span> :title="$t('ParameterDescription')">{{$t('ParameterDescription')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="paramsTemplateName"> <a-form-model-item class="itemModel" prop="description">
<a-input class="box-input" <a-input class="box-input"
:disabled="disabled" :disabled="disabled"
v-model="formInline.description" v-model="formInline.description"
@@ -130,7 +130,7 @@
<span class="title-text-text" <span class="title-text-text"
:title="$t('ParameterName')">{{$t('certificationCategory')}}</span> :title="$t('ParameterName')">{{$t('certificationCategory')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="paramsTemplateName"> <a-form-model-item class="itemModel" prop="certCategory">
<j-multi-select-tag class="box-input" v-model="formInline.certCategory" <j-multi-select-tag class="box-input" v-model="formInline.certCategory"
@change='Onchange' @change='Onchange'
v-on:changelabel='Onchangelabel' v-on:changelabel='Onchangelabel'
@@ -184,7 +184,7 @@
<span class="title-text-text" <span class="title-text-text"
:title="$t('controlAlternatives')">{{$t('controlAlternatives')}}</span> :title="$t('controlAlternatives')">{{$t('controlAlternatives')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="paramsTemplateName"> <a-form-model-item class="itemModel" prop="controlValues">
<a-input class="box-input" <a-input class="box-input"
:disabled="disabled" :disabled="disabled"
v-model="formInline.controlValues" v-model="formInline.controlValues"
@@ -202,7 +202,7 @@
</div> </div>
<a-form-model-item class="itemModel" prop="paramsTemplateName"> <a-form-model-item class="itemModel" prop="paramsTemplateName">
<a-button type="primary" class="button-text" <a-button type="primary" class="button-text"
@click="clickButtonToUpload()"> @click="clickButtonToUpload('fileTemplateConnectId')">
{{ (formInline.fileTemplateConnectId === 'null' || formInline.fileTemplateConnectId === '' || {{ (formInline.fileTemplateConnectId === 'null' || formInline.fileTemplateConnectId === '' ||
formInline.fileTemplateConnectId == null) ? $t('clickUpload') : $t('viewUploadedFiles')}} formInline.fileTemplateConnectId == null) ? $t('clickUpload') : $t('viewUploadedFiles')}}
</a-button> </a-button>
@@ -221,7 +221,7 @@
<span class="title-text-text" <span class="title-text-text"
:title="$t('standard')">{{$t('standard')}}</span> :title="$t('standard')">{{$t('standard')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="paramsTemplateName"> <a-form-model-item class="itemModel" prop="paramsNumber">
<a-input class="box-input" <a-input class="box-input"
:disabled="disabled" :disabled="disabled"
v-model="item.paramsNumber" v-model="item.paramsNumber"
@@ -234,7 +234,7 @@
<div class="title-text"> <div class="title-text">
<span class="title-text-text" :title="$t('ParameterName')">{{$t('ParameterName')}}</span> <span class="title-text-text" :title="$t('ParameterName')">{{$t('ParameterName')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="technologyTerritory"> <a-form-model-item class="itemModel" prop="paramsName">
<a-input class="box-input" <a-input class="box-input"
:disabled="disabled" :disabled="disabled"
v-model="item.paramsName" v-model="item.paramsName"
@@ -250,7 +250,7 @@
<span class="title-text-text" <span class="title-text-text"
:title="$t('ParameterDescription')">{{$t('ParameterDescription')}}</span> :title="$t('ParameterDescription')">{{$t('ParameterDescription')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="paramsTemplateName"> <a-form-model-item class="itemModel" prop="description">
<a-input class="box-input" <a-input class="box-input"
:disabled="disabled" :disabled="disabled"
v-model="item.description" v-model="item.description"
@@ -316,24 +316,40 @@ export default {
confirmLoading: false, confirmLoading: false,
visible: false, visible: false,
rules: { rules: {
ipdInfo: [ nioNumber:[
{ { required: true, message: this.$t('PleaseEnter')+this.$t('NiONumber'), trigger: 'change' },
pattern: /(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%$#_]*)?/, // {
message: this.$t('pleaseEnterTheCorrectWebAddress') // pattern: /(?!^\d+$)(?!^[a-zA-Z]+$)[0-9a-zA-Z]{1,15}/,
} // message: this.$t('onlyThree'),
// trigger: 'change'
// }
], ],
vehicleDevelopmentPlan: [ isMust: [
{ { required: true, message: this.$t('pleaseSelect')+this.$t('Required'), trigger: 'change' },
pattern: /(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%$#_]*)?/, ],
message: this.$t('pleaseEnterTheCorrectWebAddress') paramsName: [
} { required: true, message: this.$t('pleaseSelect')+this.$t('Required'), trigger: 'change' },
{ min:1, max: 30, message: this.$t('cantExeed')+'30'+this.$t('characters'), trigger: 'blur' },
],
technologyTerritory: [
{ required: true, message: this.$t('pleaseSelect')+this.$t('technicalField'), trigger: 'change' },
],
paramsBatch: [
{ required: true, message: this.$t('PleaseSelect')+this.$t('parameterBatch'), trigger: 'change' },
],
dutyTerritory: [
{ required: true, message: this.$t('PleaseSelect')+this.$t('areaOfResponsibility'), trigger: 'change' },
],
description: [
{ min:1, max: 200, message: this.$t('cantExeed')+'200'+this.$t('characters'), trigger: 'blur' },
],
controlType: [
{ required: true, message: this.$t('pleaseSelect')+this.$t('controlType'), trigger: 'change' },
],
controlValues: [
{ required: true, message: this.$t('PleaseEnter')+this.$t('controlAlternatives'), trigger: 'change' },
{ min:1, max: 500, message: this.$t('cantExeed')+'500'+this.$t('characters'), trigger: 'blur' },
], ],
attestationPlan: [
{
pattern: /(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%$#_]*)?/,
message: this.$t('pleaseEnterTheCorrectWebAddress')
}
]
}, },
disabled: false, disabled: false,
projectNameList: [], projectNameList: [],
@@ -360,23 +376,21 @@ export default {
this.formInline = { ...this.formInline } this.formInline = { ...this.formInline }
}, },
clickButtonToUpload(item) { clickButtonToUpload(item) {
// this.$refs.uploadFile.perentHandleFunc()
// this.$refs.uploadFile.state = item.flag
this.$refs.uploadFile.visible = true this.$refs.uploadFile.visible = true
// this.uploadName = item.db_field_name getAction('sys/common/getFileInfos', { id: this.formInline[item] }).then((res) => {
// getAction('sys/common/getFileInfos', { id: this.formInline[item.db_field_name] }).then((res) => { if (res.success) {
// if (res.success) { this.$refs.uploadFile.perentHandleFunc(res.result)
// this.$refs.uploadFile.perentHandleFunc(res.result) } else {
// } else { this.$refs.uploadFile.perentHandleFunc()
// this.$refs.uploadFile.perentHandleFunc() }
// } })
// })
}, },
Onchangelabel(val) { Onchangelabel(val) {
let _tt = []
console.log(val,'val,,,,')
// this.formInline.certCategoryParamsInfoEOList = [] // this.formInline.certCategoryParamsInfoEOList = []
val.forEach((item) => { val.forEach((item) => {
this.contentList.push({ _tt.push({
textVal: item.text, // tab textVal: item.text, // tab
certCategory: '', // 所属认证类别 certCategory: '', // 所属认证类别
paramsNumber: '', // 编号 paramsNumber: '', // 编号
@@ -384,6 +398,7 @@ export default {
description: ''// 参数说明 description: ''// 参数说明
}) })
}) })
this.contentList = _tt
}, },
Onchange() { Onchange() {
@@ -420,6 +435,11 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.formInline = value this.formInline = value
}) })
// if(value.certCategoryParamsInfoEOList.length > 0 ) {
// this.contentList = value.certCategoryParamsInfoEOList
// }
console.log(this.contentList,'this.contentList')
console.log(value.certCategoryParamsInfoEOList,'lllll')
}, },
handleCancel() { handleCancel() {
this.visible = false this.visible = false
@@ -55,9 +55,9 @@
<div class="operator-text" v-has="'document:importZip'"> <div class="operator-text" v-has="'document:importZip'">
<ImportFile :url="url" :isTrue="false" :accept="'.zip'" :paramsTemplateId='this.$route.query.id'/> <ImportFile :url="url" :isTrue="false" :accept="'.zip'" :paramsTemplateId='this.$route.query.id'/>
</div> </div>
<div @click="handleModule" class="operator-text" v-has="'document:exportTemplate'"> <div @click="releaseVersion" class="operator-text" v-has="'document:exportTemplate'">
<a-icon type="rocket"/> <a-icon type="rocket"/>
{{$t('Version')}} {{$t('releaseVersion')}}
</div> </div>
<div @click="handleDel" class="operator-text" v-has="'document:deleteBatch'"> <div @click="handleDel" class="operator-text" v-has="'document:deleteBatch'">
<a-icon type="delete"/> <a-icon type="delete"/>
@@ -199,17 +199,43 @@ export default {
paramsTemplateId: this.$route.query.id, paramsTemplateId: this.$route.query.id,
...this.queryParam, ...this.queryParam,
ids: this.selectedRowKeys.join(','), ids: this.selectedRowKeys.join(','),
// exportName: '参数项列表.xlsx'
} }
let _xx = JSON.stringify(_tt) let _xx = JSON.stringify(_tt)
let _yy = { let _yy = { paramsInfoVO : _xx, exportName: '参数项列表' }
downloadFile('params/paramsInfo/exportParamsInfoZip', '参数项列表.zip', { paramsInfoVO : _xx, exportName: '参数项列表' } , this.Deselect)
} },
downloadFile('params/paramsInfo/exportParamsInfoZip', '参数项列表.zip', { paramsInfoVO : _xx }, this.Deselect) // 发布版本
releaseVersion() {
let _this = this
axios({
url: `/jero-boot/params/paramsInfo/publish?paramsTemplateId=${this.$route.query.id}`,
method: 'get',
transformRequest: [function (data) {
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
}
return ret
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'X-Access-Token':_this.token
}
})
.then( (res) =>{
if (res.data.success) {
_this.$message.success(res.data.result)
}else{
_this.$message.warning(res.data.result)
}
})
.catch( (error) =>{
console.log(error);
});
}, },
//下载模板 //下载模板
handleModule() { handleModule() {
downloadFile('params/paramsInfo/exportTemplate', '参数项列表.xls', {}) downloadFile('params/paramsInfo/exportTemplate', '参数项列表.xlsx', {})
}, },
handleToggleSearch() { handleToggleSearch() {
this.toggleSearchStatus = !this.toggleSearchStatus this.toggleSearchStatus = !this.toggleSearchStatus
@@ -221,10 +247,6 @@ export default {
//添加 //添加
handleAdd() { handleAdd() {
this.$refs.addModelRef.addModel() this.$refs.addModelRef.addModel()
},
// 复制
handlecody(){
}, },
//批量删除 //批量删除
handleDel() { handleDel() {
@@ -39,7 +39,7 @@
<a-icon type="container"/> <a-icon type="container"/>
{{$t('taskList')}} {{$t('taskList')}}
</div> </div>
<div class="Virtual-detail-left-text" :title="$t('TaskParameterCollection')" @click="textClick(3,'任务参数收集')"> <div class="Virtual-detail-left-text" :title="$t('TaskParameterCollection')" @click="textClick(3,'认证参数收集')">
<a-icon type="container"/> <a-icon type="container"/>
{{$t('TaskParameterCollection')}} {{$t('TaskParameterCollection')}}
</div> </div>
@@ -52,7 +52,7 @@
<ProjectDetailsName v-if="textTitle === '项目详情'"/> <ProjectDetailsName v-if="textTitle === '项目详情'"/>
<listOfRegulations v-else-if="textTitle === '法规清单'"/> <listOfRegulations v-else-if="textTitle === '法规清单'"/>
<TaskList v-else-if="textTitle === '任务清单'"/> <TaskList v-else-if="textTitle === '任务清单'"/>
<TaskParameterCollection v-else-if="textTitle === '任务参数收集'"/> <TaskParameterCollection v-else-if="textTitle === '认证参数收集'"/>
<nonConformance v-else-if="textTitle === '未符合项'"/> <nonConformance v-else-if="textTitle === '未符合项'"/>
</div> </div>
</div> </div>
@@ -102,25 +102,15 @@
</div> </div>
<div class="process-content-right-xian"></div> <div class="process-content-right-xian"></div>
</div> </div>
<a-tabs style="margin-top: 20px" default-active-key="1" class="ant-tabs"> <a-tabs style="margin-top: 20px" v-model="activeKey" class="ant-tabs">
<a-tab-pane key="1" :tab="$t('DeliverableStatus')"> <a-tab-pane :key="$t('CurrentStatusOfTheProject')" :tab="$t('CurrentStatusOfTheProject')">
<div class="box-content"> <currentStatusOfTheProjectEcharts v-if="activeKey == $t('CurrentStatusOfTheProject')"/>
<div class="box-content-left">
<div id="main"></div>
</div>
<div class="box-content-right">
</div>
</div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="2" :tab="$t('CurrentStatusOfTheProject')"> <a-tab-pane :key="$t('DeliverableStatus')" :tab="$t('DeliverableStatus')">
Tab 2 <deliverableStatusEchart v-if="activeKey == $t('DeliverableStatus')"/>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="3" :tab="$t('CertificationProgress')"> <a-tab-pane :key="$t('CertificationProgress')" :tab="$t('CertificationProgress')">
Tab 3 <certificationProgressEchart v-if="activeKey == $t('CertificationProgress')"/>
</a-tab-pane>
<a-tab-pane key="4" :tab="$t('NonConformance')">
Tab 4
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
<listOfRelevantPersonnel ref="listOfRelevantPersonnelRef"/> <listOfRelevantPersonnel ref="listOfRelevantPersonnelRef"/>
@@ -135,17 +125,24 @@
import { getAction, postAction, downloadFile, putAction } from '@/api/manage' import { getAction, postAction, downloadFile, putAction } from '@/api/manage'
import addModel from './addModel' import addModel from './addModel'
import settingList from './settingList' import settingList from './settingList'
import currentStatusOfTheProjectEcharts from './currentStatusOfTheProjectEcharts'
import deliverableStatusEchart from './deliverableStatusEchart'
import certificationProgressEchart from './certificationProgressEchart'
export default { export default {
name: 'ProjectDetails', name: 'ProjectDetails',
components: { components: {
listOfRelevantPersonnel, listOfRelevantPersonnel,
addModel, addModel,
settingList settingList,
currentStatusOfTheProjectEcharts,
deliverableStatusEchart,
certificationProgressEchart
}, },
data() { data() {
return { return {
queryForm: {}, queryForm: {},
activeKey: this.$t('CurrentStatusOfTheProject'),
url: { url: {
queryById: 'project/projectLibraryBase/queryById', queryById: 'project/projectLibraryBase/queryById',
add: 'project/projectLibraryBase/add', add: 'project/projectLibraryBase/add',
@@ -161,7 +158,6 @@
mounted() { mounted() {
this.getForm() this.getForm()
this.getSetting() this.getSetting()
this.mainEcharts()
}, },
methods: { methods: {
getForm() { getForm() {
@@ -185,26 +181,6 @@
settingListForm() { settingListForm() {
this.getSetting() this.getSetting()
}, },
mainEcharts() {
var myChart = echarts.init(document.getElementById('main'))
myChart.setOption({
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
xAxis: {
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
},
yAxis: {},
series: [
{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}
]
})
},
ListOfRelevantPersonnelClick() { ListOfRelevantPersonnelClick() {
this.$refs.listOfRelevantPersonnelRef.getData() this.$refs.listOfRelevantPersonnelRef.getData()
}, },
@@ -329,29 +305,6 @@
} }
} }
.box-content {
width: 100%;
display: flex;
justify-content: space-between;
.box-content-left {
width: calc(50% - 12px);
height: 300px;
border: 2px #eff1f3 solid;
#main {
width: 100%;
height: 100%;
}
}
.box-content-right {
width: calc(50% - 12px);
height: 300px;
border: 2px #eff1f3 solid;
}
}
@media screen and (min-width: 600px) and (max-width: 1600px) { @media screen and (min-width: 600px) and (max-width: 1600px) {
.process-content-right-top { .process-content-right-top {
@@ -43,14 +43,49 @@
<div style="width: 100%"> <div style="width: 100%">
<a-table <a-table
ref="table" ref="table"
bordered
:loading="loading" :loading="loading"
:pagination="false" :pagination="false"
:scroll="{x: true}" :scroll="{x: true}"
rowKey="id"
:data-source="dataSource" :data-source="dataSource"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
:columns="columns" :columns="columns"
> >
<div slot="standardInformation" slot-scope="text,result" class="box-left">
<a class="box-content">GB-7258-2017</a><br/>
<a>及东盟火车大师傅但是</a>
</div>
<div slot="areaOfResponsibility" slot-scope="text,result" class="box-left">
<span class="box-content">1212sdfdsf</span><br/>
<span>责任领土</span>
</div>
<div slot="confirmationOfDesignConformity" slot-scope="text,result" class="box-left">
<span class="box-content">截止时间: 2022-06-01</span><br/>
<span class="box-content">流程状态: 待审核</span><br/>
<span class="box-content-color">待追踪</span>
<div class="content-box">
<div class="content-box-jiao"></div>
</div>
</div>
<div slot="PrehomoConfirmation" slot-scope="text,result" class="box-left">
<span class="box-content">截止时间: 2022-06-01</span><br/>
<span class="box-content">流程状态: 待审核</span><br/>
<span class="box-content-color">待追踪</span>
</div>
<div slot="verificationAndConformityconfirmation" slot-scope="text,result" class="box-left">
<span class="box-content">截止时间: 2022-06-01</span><br/>
<span class="box-content">流程状态: 待审核</span><br/>
<span class="box-content-color">待追踪</span>
</div>
<div slot="CertificationProgress" slot-scope="text,result">
<span class="box-content-color">
实验通过
</span>
</div>
<div slot="CurrentProjectStatusEvaluation" slot-scope="text,result">
<div class="Current-color">
<div class="Current-color-box"></div>
</div>
</div>
</a-table> </a-table>
</div> </div>
<certificationDirectory :url="url" ref="certificationDirectoryRef"/> <certificationDirectory :url="url" ref="certificationDirectoryRef"/>
@@ -59,9 +94,10 @@
<script> <script>
import certificationDirectory from './certificationDirectory' import certificationDirectory from './certificationDirectory'
export default { export default {
name: 'TaskList', name: 'TaskList',
components:{ components: {
certificationDirectory certificationDirectory
}, },
data() { data() {
@@ -70,105 +106,52 @@
{ {
title: this.$t('serialNumber'), title: this.$t('serialNumber'),
align: 'center', align: 'center',
width: 100, width: 80,
fixed: 'left' customRender: function(t, r, index) {
return parseInt(index) + 1
}
}, },
{ {
title: this.$t('standard'), title: this.$t('standardInformation'),
align: 'center', align: 'center',
dataIndex: 'standard', dataIndex: 'standard',
fixed: 'left' scopedSlots: { customRender: 'standardInformation' }
}, },
{ {
title: this.$t('areaOfResponsibility'), title: this.$t('areaOfResponsibility'),
align: 'center', align: 'center',
dataIndex: 'areaOfResponsibility', dataIndex: 'areaOfResponsibility',
fixed: 'left' scopedSlots: { customRender: 'areaOfResponsibility' }
}, },
{ {
title: this.$t('confirmationOfDesignConformity'), title: this.$t('confirmationOfDesignConformity'),
children: [ align: 'center',
{ dataIndex: 'confirmationOfDesignConformity',
title: this.$t('TaskRequirements'), scopedSlots: { customRender: 'confirmationOfDesignConformity' }
dataIndex: 'TaskRequirements',
align: 'center'
},
{
title: this.$t('Sponsor'),
dataIndex: 'Sponsor',
align: 'center'
},
{
title: this.$t('TaskCutOffTime'),
dataIndex: 'TaskCutOffTime',
align: 'center'
},
{
title: this.$t('status'),
dataIndex: 'status',
align: 'center'
}
]
}, },
{ {
title: this.$t('PrehomoConfirmation'), title: this.$t('PrehomoConfirmation'),
children: [ align: 'center',
{ dataIndex: 'PrehomoConfirmation',
title: this.$t('TaskRequirements'), scopedSlots: { customRender: 'PrehomoConfirmation' }
dataIndex: 'TaskRequirements',
align: 'center'
},
{
title: this.$t('Sponsor'),
dataIndex: 'Sponsor',
align: 'center'
},
{
title: this.$t('TaskCutOffTime'),
dataIndex: 'TaskCutOffTime',
align: 'center'
},
{
title: this.$t('status'),
dataIndex: 'status',
align: 'center'
}
]
}, },
{ {
title: this.$t('verificationAndConformityconfirmation'), title: this.$t('verificationAndConformityconfirmation'),
children: [ align: 'center',
{ dataIndex: 'verificationAndConformityconfirmation',
title: this.$t('TaskRequirements'), scopedSlots: { customRender: 'verificationAndConformityconfirmation' }
dataIndex: 'TaskRequirements',
align: 'center'
},
{
title: this.$t('Sponsor'),
dataIndex: 'Sponsor',
align: 'center'
},
{
title: this.$t('TaskCutOffTime'),
dataIndex: 'TaskCutOffTime',
align: 'center'
},
{
title: this.$t('status'),
dataIndex: 'status',
align: 'center'
}
]
}, },
{ {
title: this.$t('CertificationProgress'), title: this.$t('CertificationProgress'),
align: 'center', align: 'center',
width: 150,
dataIndex: 'CertificationProgress', dataIndex: 'CertificationProgress',
scopedSlots: { customRender: 'CertificationProgress' } scopedSlots: { customRender: 'CertificationProgress' }
}, },
{ {
title: this.$t('CurrentProjectStatusEvaluation'), title: this.$t('CurrentProjectStatusEvaluation'),
align: 'center', align: 'center',
width: 150,
dataIndex: 'CurrentProjectStatusEvaluation', dataIndex: 'CurrentProjectStatusEvaluation',
scopedSlots: { customRender: 'CurrentProjectStatusEvaluation' } scopedSlots: { customRender: 'CurrentProjectStatusEvaluation' }
} }
@@ -177,7 +160,7 @@
queryParam: {}, queryParam: {},
url: {}, url: {},
loading: false, loading: false,
dataSource: [] dataSource: [{}]
} }
}, },
mounted() { mounted() {
@@ -196,7 +179,7 @@
}, },
CertificationDirectory() { CertificationDirectory() {
this.$refs.certificationDirectoryRef.addModel() this.$refs.certificationDirectoryRef.addModel()
} }
} }
} }
@@ -254,6 +237,61 @@
cursor: pointer; cursor: pointer;
border-radius: 4px; border-radius: 4px;
} }
.box-left {
position: relative;
}
.content-box {
position: absolute;
width: calc(100% + 32px);
height: calc(100% + 32px);
top: -16px;
left: -16px;
border: 1px seagreen solid;
}
.content-box-jiao {
position: absolute;
right: 0;
width: 0;
height: 0;
border-right: 30px solid red;
border-bottom: 30px solid transparent
}
.box-content {
margin-bottom: 8px;
display: inline-block;
text-align: left;
}
.box-content-color {
padding: 6px 14px;
box-sizing: border-box;
background: #1ABBC4;
color: #2F8DF3;
border-radius: 4px;
}
.Current-color {
display: inline-block;
width: 26px;
height: 26px;
line-height: 32px;
text-align: center;
background: #fff;
border-radius: 50%;
border: 1px red solid;
}
.Current-color-box {
display: inline-block;
width: 18px;
height: 18px;
background: red;
border-radius: 50%;
}
</style> </style>
<style> <style>
.box-input .ant-select-selection { .box-input .ant-select-selection {
@@ -4,10 +4,10 @@
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :md="6" :sm="8"> <a-col :md="6" :sm="8">
<div class="box-title-text"> <div class="box-title-text">
<div class="title-text" :title="$t('certificationType')"> <div class="title-text" :title="$t('title')">
<span>{{$t('certificationType')}}</span> <span>{{$t('title')}}</span>
</div> </div>
<a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('certificationType')" <a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('title')"
v-model="queryParam.certificationType"></a-input> v-model="queryParam.certificationType"></a-input>
</div> </div>
</a-col> </a-col>
@@ -22,22 +22,15 @@
<div class="table-operator"> <div class="table-operator">
<div @click="handleAdd" class="operator-text"> <div @click="handleAdd" class="operator-text">
<a-icon type="plus"/> <a-icon type="plus"/>
{{$t('add')}} {{$t('add')}}{{ $t('detailedList') }}
</div> </div>
<div @click="handleModule" class="operator-text"> <div @click="handleModule" class="operator-text">
<a-icon type="download"/> <a-icon type="bulb"/>
{{$t('templateDownload')}} {{$t('changeExtension')}}
</div>
<div class="operator-text" v-has="'document:importZip'">
<ImportFile :url="url" :isTrue="true" @getList="getPersonnelList" :accept="'.zip'"/>
</div> </div>
<div @click="handleDel" class="operator-text"> <div @click="handleDel" class="operator-text">
<a-icon type="delete"/> <a-icon type="copy"/>
{{$t('BatchDelete')}} {{$t('copy')}}{{$t('parameter')}}{{ $t('detailedList') }}
</div>
<div @click="handleExport" class="operator-text">
<a-icon type="export" :rotate="-90"/>
{{$t('export')}}
</div> </div>
</div> </div>
<div style="width: 100%"> <div style="width: 100%">
@@ -56,53 +49,58 @@
</span> </span>
</a-table> </a-table>
</div> </div>
<a-modal v-model="areaVisible">
<parameter-template v-if='areaVisible'></parameter-template>
</a-modal>
</a-card> </a-card>
</template> </template>
<script> <script>
import ImportFile from '@/components/ImportFile/index' import ImportFile from '@/components/ImportFile/index'
import ParameterTemplate from '../dialog/ParameterTemplate'
export default { export default {
name: 'TaskParameterCollection', name: 'TaskParameterCollection',
components:{ components:{
ImportFile ImportFile,
ParameterTemplate
}, },
data(){ data(){
return{ return{
columns:[ columns:[
{ {
title: this.$t('NiONumber'), title: this.$t('title'),
align: 'center', align: 'center',
dataIndex: 'NiONumber', dataIndex: 'title',
},
{
title: this.$t('ParameterName'),
align: 'center',
dataIndex: 'ParameterName',
},
{
title: this.$t('ParameterDescription'),
align: 'center',
dataIndex: 'ParameterDescription',
}, },
{ {
title: this.$t('status'), title: this.$t('status'),
align: 'center', align: 'center',
dataIndex: 'status', dataIndex: 'title',
}, },
{ {
title: this.$t('Operator'), title: this.$t('parameterTemplateName'),
align: 'center', align: 'center',
dataIndex: 'Operator', dataIndex: 'ParameterDescription',
}, },
{ {
title: this.$t('operationTime'), title: this.$t('collectionCompletionTime'),
align: 'center', align: 'center',
dataIndex: 'operationTime', dataIndex: 'title',
}, },
{ {
title: this.$t('Version'), title: this.$t('Version'),
align: 'center', align: 'center',
dataIndex: 'Version', dataIndex: 'title',
},
{
title: this.$t('creator'),
align: 'center',
dataIndex: 'title',
},
{
title: this.$t('createTime'),
align: 'center',
dataIndex: 'title',
}, },
{ {
title: this.$t('operation'), title: this.$t('operation'),
@@ -116,7 +114,8 @@
queryParam: {}, queryParam: {},
url: {}, url: {},
loading: false, loading: false,
dataSource: [] dataSource: [],
areaVisible: false, // 弹框的控制
} }
}, },
mounted() { mounted() {
@@ -138,7 +137,7 @@
}, },
handleAdd(){ handleAdd(){
this.areaVisible = true
}, },
handleModule(){ handleModule(){
@@ -218,34 +218,34 @@
message: this.$t('pleaseEnterTheCorrectWebAddress') message: this.$t('pleaseEnterTheCorrectWebAddress')
} }
], ],
projectNameId:[ projectNameId: [
{ {
required: true, required: true,
message: this.$t('entryName') + this.$t('cannotEmpty'), message: this.$t('entryName') + this.$t('cannotEmpty'),
trigger: 'change' trigger: 'change'
} }
], ],
targetMarket:[ targetMarket: [
{ {
required: true, required: true,
message: this.$t('targetMarket') + this.$t('cannotEmpty'), message: this.$t('targetMarket') + this.$t('cannotEmpty'),
trigger: 'change' trigger: 'change'
} }
], ],
projectStatus:[ projectStatus: [
{ {
required: true, required: true,
message: this.$t('projectStatus') + this.$t('cannotEmpty'), message: this.$t('projectStatus') + this.$t('cannotEmpty'),
trigger: 'change' trigger: 'change'
} }
], ],
studioEngineerName:[ studioEngineerName: [
{ {
required: true, required: true,
message: this.$t('StudioEngineer') + this.$t('cannotEmpty'), message: this.$t('StudioEngineer') + this.$t('cannotEmpty'),
trigger: 'change' trigger: 'change'
} }
], ]
}, },
disabled: false, disabled: false,
projectNameList: [], projectNameList: [],
@@ -269,12 +269,16 @@
this.visible = true this.visible = true
this.title = '新增' this.title = '新增'
this.formInline = {} this.formInline = {}
this.$nextTick(() => {
this.$refs.ruleForm.clearValidate()
})
}, },
editModel(value) { editModel(value) {
this.visible = true this.visible = true
this.title = '编辑' this.title = '编辑'
this.$nextTick(() => { this.$nextTick(() => {
this.formInline = value this.formInline = value
this.$refs.ruleForm.clearValidate()
}) })
}, },
handleCancel() { handleCancel() {
@@ -323,9 +327,9 @@
this.formInline[value] = id this.formInline[value] = id
this.formInline = { ...this.formInline } this.formInline = { ...this.formInline }
}, },
projectNameChange(value){ projectNameChange(value) {
console.log(value) console.log(value)
}, }
} }
} }
</script> </script>
@@ -0,0 +1,104 @@
<template>
<div class="box-content">
<div class="box-content-left">
<div id="main-left"></div>
</div>
<div class="box-content-right">
<div id="main-right"></div>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts'
export default {
name: 'certificationProgress',
data() {
return {}
},
mounted() {
this.mainLeftEcharts()
},
methods: {
getEcharts(chart, title, color, data) {
var myChart = echarts.init(document.getElementById(chart))
myChart.setOption({
title: {
text: title
},
tooltip: {
trigger: 'item'
},
legend: {
itemWidth: 12,
itemHeight: 12,
bottom: '0',
left: 'center',
itemGap: 30,
icon: 'circle'
},
series: [
{
name: title,
type: 'pie',
radius: ['40%', '54%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
labelLine: {
show: false
},
color: color,
data: data
}
]
})
},
mainLeftEcharts() {
let data = [
{ value: 1048, name: '待审查' },
{ value: 735, name: '审查中' },
{ value: 580, name: '审查完成' }
]
this.getEcharts('main-left', '内部审查进度', ['#00BEBE', '#FDB033', '#2F8DF3'], data)
}
}
}
</script>
<style scoped lang="less">
.box-content {
width: 100%;
display: flex;
justify-content: space-between;
.box-content-left {
width: calc(50% - 12px);
height: 398px;
border: 2px #eff1f3 solid;
#main-left {
width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
}
}
.box-content-right {
width: calc(50% - 12px);
height: 398px;
border: 2px #eff1f3 solid;
#main-right {
width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
}
}
}
</style>
@@ -9,6 +9,9 @@
@close="handleCancel" @close="handleCancel"
:visible="visible"> :visible="visible">
<div class="button-box"> <div class="button-box">
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('comment')"
v-model="commentContent"></j-input>
<a-button @click="submitQuery" style="margin-right: 8px;" type="primary">{{$t('query')}}</a-button>
<a-button @click="handleSubmit" type="primary">{{$t('publishComment')}}</a-button> <a-button @click="handleSubmit" type="primary">{{$t('publishComment')}}</a-button>
</div> </div>
<div class="comment-box" v-if="dataList && dataList.length > 0"> <div class="comment-box" v-if="dataList && dataList.length > 0">
@@ -29,8 +32,8 @@
<a-icon type="message"/> <a-icon type="message"/>
</div> </div>
</div> </div>
<div class="inside-box" v-if="item.ProjectCommentVOList && item.ProjectCommentVOList.length > 0"> <div class="inside-box" v-if="item.projectCommentVOList && item.projectCommentVOList.length > 0">
<div class="box-content-inside" v-for="(val,indexOne) in item.ProjectCommentVOList" :key="indexOne"> <div class="box-content-inside" v-for="(val,indexOne) in item.projectCommentVOList" :key="indexOne">
<div class="img-box"> <div class="img-box">
<img src="../../../assets/daiban.png" class="img" alt=""> <img src="../../../assets/daiban.png" class="img" alt="">
</div> </div>
@@ -41,7 +44,7 @@
<div class="box-text-text"> <div class="box-text-text">
{{val.content}} {{val.content}}
</div> </div>
<div class="box-icon" @click="messageClick(val)"> <div class="box-icon" @click="messageClick(item)">
<a-icon type="message"/> <a-icon type="message"/>
</div> </div>
</div> </div>
@@ -99,6 +102,7 @@
visible: false, visible: false,
dataList: [], dataList: [],
formInline: {}, formInline: {},
commentContent:'',
loading: false, loading: false,
title: this.$t('comment'), title: this.$t('comment'),
confirmLoading: false, confirmLoading: false,
@@ -143,10 +147,13 @@
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.ruleForm.clearValidate() this.$refs.ruleForm.clearValidate()
}) })
},
submitQuery(){
}, },
getList() { getList() {
this.loading = true this.loading = true
getAction(this.url.list, { projectLibraryId: this.$route.query.id }).then((res) => { getAction(this.url.list, { projectLibraryId: this.$route.query.id,commentContent:this.commentContent }).then((res) => {
if (res.success) { if (res.success) {
this.loading = false this.loading = false
this.dataList = res.result || [] this.dataList = res.result || []
@@ -336,12 +343,6 @@
line-height: 48px; line-height: 48px;
} }
.box-input {
display: inline-block;
height: 38px;
width: 100%;
}
.itemModel { .itemModel {
width: calc(100% - 64px); width: calc(100% - 64px);
display: inline-block; display: inline-block;
@@ -361,4 +362,8 @@
text-align: center; text-align: center;
margin-top: 40px; margin-top: 40px;
} }
.box-input{
width: calc(100% - 168px);
margin-right: 8px;
}
</style> </style>
@@ -0,0 +1,145 @@
<template>
<div class="box-content">
<div class="box-content-left">
<div id="main-left"></div>
</div>
<div class="box-content-right">
<div id="main-right">
<a-table
ref="table"
:loading="loading"
:pagination="false"
:scroll="{x: true}"
:data-source="dataSource"
:columns="columns"
>
</a-table>
</div>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts'
export default {
name: 'CurrentStatusOfTheProjectEcharts',
data() {
return {
loading:false,
dataSource:[],
columns:[
{
title: this.$t('nonConformity'),
align: 'center',
dataIndex: 'nonConformity',
scopedSlots: { customRender: 'titleName' }
},
{
title: this.$t('Tracked'),
align: 'center',
dataIndex: 'Tracked',
scopedSlots: { customRender: 'titleName' }
},
{
title: this.$t('accord'),
align: 'center',
dataIndex: 'accord',
scopedSlots: { customRender: 'titleName' }
},
{
title: this.$t('notEvaluated'),
align: 'center',
dataIndex: 'notEvaluated',
scopedSlots: { customRender: 'titleName' }
},
],
}
},
mounted() {
this.mainLeftEcharts()
},
methods: {
getEcharts(chart, title, color, data) {
var myChart = echarts.init(document.getElementById(chart))
myChart.setOption({
title: {
text: title
},
tooltip: {
trigger: 'item'
},
legend: {
itemWidth: 12,
itemHeight: 12,
bottom: '0',
left: 'center',
itemGap: 30,
icon: 'circle'
},
series: [
{
name: title,
type: 'pie',
radius: ['40%', '54%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
labelLine: {
show: false
},
color: color,
data: data
}
]
})
},
mainLeftEcharts() {
let data = [
{ value: 1048, name: this.$t('nonConformity') },
{ value: 735, name: this.$t('Tracked') },
{ value: 580, name: this.$t('accord') },
{ value: 580, name: this.$t('notEvaluated') }
]
this.getEcharts('main-left', this.$t('CurrentStatusOfTheProject'), ['#2F8DF3', '#FF8543', '#37CED1', '#FDB033', '#9DB9D4'], data)
},
}
}
</script>
<style scoped lang="less">
.box-content {
width: 100%;
display: flex;
justify-content: space-between;
.box-content-left {
width: calc(50% - 12px);
height: 398px;
border: 2px #eff1f3 solid;
#main-left {
width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
}
}
.box-content-right {
width: calc(50% - 12px);
height: 398px;
border: 2px #eff1f3 solid;
#main-right {
width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
}
}
}
</style>
@@ -0,0 +1,113 @@
<template>
<div class="box-content">
<div class="box-content-left">
<div id="main-left"></div>
</div>
<div class="box-content-right">
<div id="main-right"></div>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts'
export default {
name: 'DeliverableStatusEchart',
data() {
return {}
},
mounted() {
this.mainLeftEcharts()
this.mainRightEcharts()
},
methods: {
getEcharts(chart, title, color, data) {
var myChart = echarts.init(document.getElementById(chart))
myChart.setOption({
title: {
text: title
},
tooltip: {
trigger: 'item'
},
legend: {
itemWidth: 12,
itemHeight: 12,
bottom: '0',
left: 'center',
itemGap: 30,
icon: 'circle'
},
series: [
{
name: title,
type: 'pie',
radius: ['40%', '54%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
labelLine: {
show: false
},
color: color,
data: data
}
]
})
},
mainLeftEcharts() {
let data = [
{ value: 1048, name: '待审查' },
{ value: 735, name: '审查中' },
{ value: 580, name: '审查完成' }
]
this.getEcharts('main-left', '内部审查进度', ['#00BEBE', '#FDB033', '#2F8DF3'], data)
},
mainRightEcharts() {
let data = [
{ value: 1048, name: '待审查' },
{ value: 735, name: '审查中' },
{ value: 580, name: '审查完成' }
]
this.getEcharts('main-right', '法规握手进度', ['#00BEBE', '#FDB033', '#2F8DF3'], data)
}
}
}
</script>
<style scoped lang="less">
.box-content {
width: 100%;
display: flex;
justify-content: space-between;
.box-content-left {
width: calc(50% - 12px);
height: 398px;
border: 2px #eff1f3 solid;
#main-left {
width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
}
}
.box-content-right {
width: calc(50% - 12px);
height: 398px;
border: 2px #eff1f3 solid;
#main-right {
width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
}
}
}
</style>
@@ -24,31 +24,31 @@
</template> </template>
<script> <script>
import { getAction, postAction, } from '@/api/manage' import { getAction, postAction } from '@/api/manage'
export default { export default {
name: 'historicalVersionList', name: 'historicalVersionList',
data(){ data() {
return{ return {
visible:false, visible: false,
confirmLoading:false, confirmLoading: false,
dataSource:[], dataSource: [],
loading:false, loading: false,
url:{ url: {
list:'project/projectHistoryVersionsEO/list', list: 'project/projectHistoryVersionsEO/list'
}, },
columns: [ columns: [
{ {
title: this.$t('versionName'), title: this.$t('versionName'),
dataIndex: 'versionName', dataIndex: 'versionsName',
align: 'center', align: 'center',
ellipsis: true, ellipsis: true
}, },
{ {
title: this.$t('finalizationTime'), title: this.$t('finalizationTime'),
dataIndex: 'finalizationTime', dataIndex: 'createTime',
align: 'center', align: 'center',
ellipsis: true, ellipsis: true,
width: 180
}, },
{ {
title: this.$t('operation'), title: this.$t('operation'),
@@ -61,8 +61,8 @@
}, },
mounted() { mounted() {
}, },
methods:{ methods: {
getList(){ getList() {
this.visible = true this.visible = true
this.historicalList() this.historicalList()
}, },
@@ -72,7 +72,7 @@
handleCancel() { handleCancel() {
this.visible = false this.visible = false
}, },
historicalList(){ historicalList() {
let query = { let query = {
projectLibraryId: this.$route.query.id projectLibraryId: this.$route.query.id
} }
@@ -86,9 +86,13 @@
} }
}) })
}, },
seeClick(item){ seeClick(item) {
let newUrl = this.$router.resolve({
}, path: '/historicalVersion',
query: item
})
window.open(newUrl.href, '_blank')
}
} }
} }
</script> </script>
@@ -67,7 +67,8 @@
<a-popconfirm overlayClassName='popconfirm' placement="bottomRight"> <a-popconfirm overlayClassName='popconfirm' placement="bottomRight">
<template slot="title" id="popconfirm"> <template slot="title" id="popconfirm">
<div class="operator-text-title"> <div class="operator-text-title">
<ImportFile :url="url" :isTrue="true" :accept="'.xls'" @getList="getPersonnelList"/> <ImportFile :url="url" :projectLibraryId=$route.query.id :isTrue="true" :accept="'.zip'"
@getList="getPersonnelList"/>
</div> </div>
<div @click="handleModule" class="operator-text-title"> <div @click="handleModule" class="operator-text-title">
<a-icon type="download"/> <a-icon type="download"/>
@@ -531,6 +532,9 @@
updateStatusBatch: '/project/projectLawsInventoryEO/updateStatusBatch', updateStatusBatch: '/project/projectLawsInventoryEO/updateStatusBatch',
matchRelevantPeople: '/project/projectLawsInventoryEO/matchRelevantPeople', matchRelevantPeople: '/project/projectLawsInventoryEO/matchRelevantPeople',
queryPersonByProject: '/project/projectRelatedPersonnel/queryPersonByProjectId', queryPersonByProject: '/project/projectRelatedPersonnel/queryPersonByProjectId',
importZipUrl: '/project/projectLawsInventoryEO/importData',
exportTemplate: '/project/projectLawsInventoryEO/exportTemplate',
exportData: '/project/projectLawsInventoryEO/exportData',
setBatch: '/project/projectLawsInventoryEO/setBatch',//批量设置 setBatch: '/project/projectLawsInventoryEO/setBatch',//批量设置
copyUrl: '/project/projectLawsInventoryEO/copyInfoByIds',//复制 copyUrl: '/project/projectLawsInventoryEO/copyInfoByIds',//复制
transferUrl: '/project/projectLawsInventoryEO/getPageInfoDummy'//调取 transferUrl: '/project/projectLawsInventoryEO/getPageInfoDummy'//调取
@@ -599,10 +603,17 @@
methods: { methods: {
...mapGetters(['userInfo']), ...mapGetters(['userInfo']),
handleModule() { handleModule() {
downloadFile(this.url.exportTemplate, this.$t('listOfRegulations') + this.$t('importTemplate') + '.xls', {})
}, },
handleExport() { handleExport() {
let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys))
let query = {
...this.queryParam,
ids: selectedRowKeys.join(','),
...this.queryParamQuery,
projectLibraryId: this.$route.query.id
}
downloadFile(this.url.exportData, this.$route.query.projectName + this.$t('listOfRegulations') + '.zip', query, this.Deselect)
}, },
//复制 //复制
copyClick() { copyClick() {
@@ -0,0 +1,350 @@
<template>
<div class="diolag-area">
<div class="table-operator">
<div class="operator-text">
{{$t('parameterTemplate')}}
</div>
</div>
<a-spin :spinning="spinLoading">
<a-form-model
class="tag-module"
ref="ruleForm"
:model="form"
:rules="rules"
:label-col="labelCol"
:wrapper-col="wrapperCol"
>
<a-form-model-item :label="$t('Module')" prop="isModel">
<j-dict-select-tag type="list" v-model="form.isModel" dictCode="module" :placeholder="$t('PleaseSelectModule')" />
</a-form-model-item>
<a-form-model-item ref="showArea" :label="$t('DisplayArea')" prop="showArea">
<a-input
v-model="form.showArea"
@blur="
() => {
$refs.showArea.onFieldBlur();
}
"
/>
</a-form-model-item>
<a-form-model-item ref="enName" :label="$t('enName')" prop="enName">
<a-input
v-model="form.enName"
@blur="
() => {
$refs.enName.onFieldBlur();
}
"
/>
</a-form-model-item>
<a-form-model-item ref="sort" :label="$t('SortNumber')" prop="sort">
<a-input-number
style="width:100%"
v-model="form.sort"
:min="1"
:formatter="limitNumber"
:parser="limitNumber"
@blur="
() => {
$refs.sort.onFieldBlur();
}
"
/>
</a-form-model-item>
</a-form-model>
</a-spin>
<a-table
class="table-area"
ref="table"
size="middle"
rowKey="id"
:columns="columns"
:dataSource="areaTable"
:pagination="false"
:loading="loading"
:scroll="{x: 600}"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<a slot="name" slot-scope="text">{{ text }}</a>
<span slot="action" slot-scope="text, record">
<a class="action-edit" @click="editArea(record.id)" v-has="'area:edit'" >{{$t('edit')}}</a>
<a style="color:red" href="javascript:;" @click=" deleteArea(record.id)" v-has="'area:delete'">{{$t('delete')}}</a>
</span>
</a-table>
</div>
</template>
<script>
import { putAction,postAction,getAction,deleteAction } from '@/api/manage'
export default {
name: 'diolagArea',
components:{
},
data(){
return{
title:this.$t('add'),
queryParams:{
pageNo:1,
pageSize:10
},
total:0,
selectedRowKeys: [],
loading: false,
ipagination:true,
editId:'',
columns: [
{
title: this.$t('zoneOfApplication'),
dataIndex: 'showArea',
key: 'showArea',
align: "center",
ellipsis: true,
},
{
title: this.$t('parameterTemplate'),
align: "center",
dataIndex: 'enName',
ellipsis: true,
}
],
newVisible:false,
labelCol: {
xs: { span: 24 },
sm: { span: 7 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 14 },
},
form: {
isModel:'1',
showArea:'',
enName:'',
sort:''
},
rules: {
isModel:[
{ required: true, message: this.$t('PleaseSelectModule'), trigger: 'change' },
],
enName:[
{ max: 100, message: this.$t('CannotExceed100characters'), trigger: 'blur' },
],
showArea:[
{ required: true, message: this.$t('enterDisplayArea'), trigger: 'blur' },
{ min:1, max: 50, message: this.$t('charactersLength'), trigger: 'blur' },
],
sort:[
{ required: true, message: this.$t('enterSortingNumber'), trigger: 'change' },
]
},
areaTable:[],
flag:false, //表单提交标识
spinLoading:false,
}
},
props:{
// areaTable:Array
},
mounted() {
this.loadData()
},
methods:{
loadData(){
this.loading=true
let params={
...this.queryParams
}
postAction(`tag/onlCgformArea/page`,params).then(res=>{
if(res.success){
this.areaTable=[...res.result.records]
this.total=res.result.total
}
}).finally(()=>{
this.loading=false
})
},
onSelectChange(selectedRowKeys) {
// console.log('selectedRowKeys changed: ', selectedRowKeys);
this.selectedRowKeys = selectedRowKeys;
},
handleTableChange(){
},
showModal() {
this.title=this.$t('add')
this.newVisible = true;
this.form={
}
},
//新增
hideModal() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
this.flag=true
this.spinLoading=true
//编辑
if(this.form.id){
putAction(`tag/onlCgformArea/edit`,this.form).then((res)=>{
if(res.success){
this.$message.success(this.$t('OperationSuccessful'));
this.loadData()
this.form={
isModel:'',
showArea:'',
enName:'',
sort:''
}
}else{
this.$message.warning(res.message)
this.form={
isModel:'',
showArea:'',
enName:'',
sort:''
}
}
}).finally(()=>{
this.flag=false
this.spinLoading=false
this.newVisible = false;
this.form={
isModel:'',
showArea:'',
enName:'',
sort:''
}
})
}else{
//新增
postAction(`/tag/onlCgformArea/add`,this.form).then(res=>{
if(res.success){
this.$message.success( this.$t('OperationSuccessful'));
this.loadData()
this.form={
isModel:'',
showArea:'',
enName:'',
sort:''
}
}else{
// this.$message.warning(this.$t('operationFailed'))
this.$message.warning(res.message)
}
}
).finally(()=>{
this.flag=false
this.spinLoading=false
this.newVisible = false;
})
}
} else {
// console.log('error submit!!');
return false;
}
});
},
cancelModel(){
this.newVisible=false
this.$refs.ruleForm.resetFields();
},
//删除按钮
deleteArea(val){
this.$confirm({
title: this.$t('confirmDeletion'),
content: '',
onOk:
async () => {
getAction(`tag/onlCgformArea/delete`, { id: val }).then((res) => {
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'));
if(this.areaTable.length==1&&this.queryParams.pageNo!=1){
this.queryParams.pageNo=this.queryParams.pageNo-1
}
this.loadData()
}else{
// this.$message.warning(res.message)
if(res.message=='该展示区域有关联数据无法删除'){
this.$message.warning(this.$t('noDelete'))
}else{
this.$message.warning(this.$t('operationFailed'));
}
}
})
}
})
},
//编辑按钮
editArea(val){
this.title=this.$t('edit')
this.newVisible = true;
let params={
id:val
}
getAction(`tag/onlCgformArea/queryById`, params).then((res) => {
if(res.success){
this.form={...res.result}
// this.$emit('updateOk',res.result)
}
})
},
//点击页数
onChangePage(page,pageSize){
this.queryParams.pageNo = page
this.loadData()
},
//一页显示条数
SizeChange(page,pageSize){
this.queryParams.pageSize = pageSize
this.queryParams.pageNo=1
this.loadData()
},
//正则替换小数点
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
}
}
}
}
</script>
<style lang="less" scoped>
@import '~@assets/less/common.less';
.diolag-area{
.table-area{
margin: 20px 0;
.action-edit{
margin-right: 10px;
}
}
.table-del{
color: red;
}
}
</style>
<style lang="less">
.area-module{
.ant-modal-wrap{
.ant-modal{
.ant-modal-content{
.ant-modal-footer{
text-align: center;
}
}
}
}
}
</style>
@@ -0,0 +1,673 @@
<template>
<a-card :bordered="false">
<div class="header-text">
{{ $t('DocumentStandard') }}
</div>
<div class="table-page-search-wrapper">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('standard')">
<span>{{ $t('standard') }}</span>
</div>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('standard')"
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('title')">
<span>{{ $t('title') }}</span>
</div>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('title')"
v-model="queryParam.title"></j-input>
</div>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" style="width: 44px" :title="$t('subtitle')">
<span>{{ $t('subtitle') }}</span>
</div>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('subtitle')"
v-model="queryParam.subtitle"></j-input>
</div>
</a-col>
<span style="float: right;overflow: hidden;margin-right: 11px" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<globalAdvancedQuery ref="globalAdvancedQueryRef"
@handleSuperQuery="handleSuperQuery"
:fieldList="fieldList"/>
<a-button class="box-button" type="primary" @click="searchQuery">{{ $t('query') }}</a-button>
<a-button class="box-button" style="margin-left: 8px"
@click="searchReset">{{ $t('reset') }}</a-button>
</a-col>
</span>
</a-row>
</div>
<div style="width: 100%">
<a-table
ref="table"
:loading="loading"
:pagination="false"
:scroll="{x: true}"
rowKey="id"
:data-source="dataSource"
:row-selection="{ selectedRowKeys: selectedRowKeys}"
:columns="columns"
>
<span slot="titleName" slot-scope="text,record" :title="text">
{{ text && text.length > 20 ? text.slice(0, 19) + '...' : text }}
</span>
<span slot="designDeliverableTemplateName" slot-scope="text,record">
<span>{{ record.designDeliverableType_dictText }}</span><br v-if="record.designDeliverableType_dictText">
<a v-if="record.designDeliverableTemplate && record.designDeliverableTemplate.split(',').length == 1"
@click="pdfPreviewClick(record.designDeliverableTemplateName,record.designDeliverableTemplate)">
{{ record.designDeliverableTemplateName }}
</a>
<a v-else-if="record.designDeliverableTemplate && record.designDeliverableTemplate.split(',').length > 1"
@click="clickButtonToUpload(record.designDeliverableTemplate)">{{ $t('viewFile') }}</a>
<span v-else>--</span>
</span>
<span slot="prehomoDeliverableTemplateName" slot-scope="text,record">
<span>{{ record.prehomoDeliverableType_dictText }}</span><br v-if="record.prehomoDeliverableType_dictText">
<a v-if="record.prehomoDeliverableTemplate && record.prehomoDeliverableTemplate.split(',').length == 1"
@click="pdfPreviewClick(record.prehomoDeliverableTemplateName,record.prehomoDeliverableTemplate)">
{{ record.prehomoDeliverableTemplateName }}
</a>
<a v-else-if="record.prehomoDeliverableTemplate && record.prehomoDeliverableTemplate.split(',').length > 1"
@click="clickButtonToUpload(record.prehomoDeliverableTemplate)">{{ $t('viewFile') }}</a>
<span v-else>--</span>
</span>
<span slot="verifyDeliverableTemplateName" slot-scope="text,record">
<span>{{ record.verifyDeliverableType_dictText }}</span><br v-if="record.verifyDeliverableType_dictText">
<a v-if="record.verifyDeliverableTemplate && record.verifyDeliverableTemplate.split(',').length == 1"
@click="pdfPreviewClick(record.verifyDeliverableTemplateName,record.verifyDeliverableTemplate)">
{{ record.verifyDeliverableTemplateName }}
</a>
<a v-else-if="record.verifyDeliverableTemplate && record.verifyDeliverableTemplate.split(',').length > 1"
@click="clickButtonToUpload(record.verifyDeliverableTemplate)">{{ $t('viewFile') }}</a>
<span v-else>--</span>
</span>
</a-table>
</div>
<a-modal
:title="$t('deliverableTemplate')"
:width="600"
:visible="visibleFile"
:maskClosable="false"
@ok="visibleFile = false"
@cancel="visibleFile = false"
>
<a-table
class="table"
:columns="columnsFile"
:pagination="false"
:scroll="{x:500,y: 400}"
:data-source="dataSourceFile"
:loading="loading"
>
<span slot="fileOperation" slot-scope="record">
<a class="text" @click="pdfPreview(record)">
{{ $t('See') }}
</a>
<a class="text" @click="download(record)">
{{ $t('download') }}
</a>
</span>
</a-table>
</a-modal>
</a-card>
</template>
<script>
import ImportFile from '@/components/ImportFile/index'
import globalAdvancedQuery from '@/components/globalAdvancedQuery/index'
import { getAction, postAction, downloadFile, deleteAction } from '@/api/manage'
import { mapGetters } from 'vuex'
import { Base64 } from 'js-base64'
export default {
name: 'index',
components: {
globalAdvancedQuery,
ImportFile
},
data() {
return {
columns: [
{
title: this.$t('standard'),
align: 'center',
dataIndex: 'serialNumber',
width: 180,
fixed: 'left',
scopedSlots: { customRender: 'titleName' }
},
{
title: this.$t('title'),
align: 'center',
dataIndex: 'title',
width: 180,
fixed: 'left',
scopedSlots: { customRender: 'titleName' }
},
{
title: this.$t('subtitle'),
align: 'center',
dataIndex: 'subtitle',
width: 180,
fixed: 'left',
scopedSlots: { customRender: 'titleName' }
},
{
title: this.$t('listConfirmationStatus'),
align: 'center',
ellipsis: true,
dataIndex: 'inventoryAffirmStatusName'
},
{
title: this.$t('taskAffirmStatus'),
align: 'center',
ellipsis: true,
dataIndex: 'taskAffirmStatusName'
},
// {
// title: this.$t('taskReleaseStatus'),
// align: 'center',
// dataIndex: 'taskReleaseStatus'
// },
{
title: this.$t('correspondingStandard'),
align: 'center',
ellipsis: true,
dataIndex: 'correspondingStandard'
},
{
title: this.$t('implementationCategory'),
align: 'center',
ellipsis: true,
dataIndex: 'implementType_dictText'
},
{
title: this.$t('ImplementationDate'),
align: 'center',
ellipsis: true,
dataIndex: 'xin1Che1Xing2Shi2Shi1Ri4Qi1'
},
{
title: this.$t('vehicleInProductionDate'),
align: 'center',
ellipsis: true,
dataIndex: 'implementTime'
},
{
title: 'WVTA ID',
align: 'center',
dataIndex: 'wvtaId',
ellipsis: true
},
{
title: this.$t('certificationType'),
align: 'center',
ellipsis: true,
dataIndex: 'attestationType_dictText'
},
{
title: this.$t('certificationLevel'),
align: 'center',
ellipsis: true,
dataIndex: 'attestationRank_dictText'
},
//
{
title: this.$t('areaOfResponsibility'),
align: 'center',
ellipsis: true,
dataIndex: 'dutyTerritory_dictText'
},
{
title: this.$t('regulatoryEngineer'),
align: 'center',
ellipsis: true,
dataIndex: 'regulationOwnerName'
},
{
title: this.$t('certifiedEngineer'),
align: 'center',
ellipsis: true,
dataIndex: 'homologationEngineerName'
},
{
title: this.$t('engineeringInterfacePerson'),
align: 'center',
ellipsis: true,
dataIndex: 'engineeringInterfacePersonName'
},
{
title: this.$t('remarks'),
align: 'center',
ellipsis: true,
dataIndex: 'remark'
},
{
title: this.$t('confirmationOfDesignConformity'),
children: [
{
title: this.$t('Deliverables'),
dataIndex: 'designDeliverableTemplateName',
align: 'center',
scopedSlots: { customRender: 'designDeliverableTemplateName' }
},
{
title: this.$t('Sponsor'),
dataIndex: 'designInitiatorName',
align: 'center'
},
{
title: this.$t('personLiable'),
dataIndex: 'designDutyName',
align: 'center'
},
{
title: this.$t('TaskCutOffTime'),
dataIndex: 'designDueDate',
align: 'center'
}
]
},
{
title: this.$t('PrehomoConfirmation'),
children: [
{
title: this.$t('Deliverables'),
dataIndex: 'prehomoDeliverableTemplateName',
align: 'center',
scopedSlots: { customRender: 'prehomoDeliverableTemplateName' }
},
{
title: this.$t('Sponsor'),
dataIndex: 'prehomoInitiatorName',
align: 'center'
},
{
title: this.$t('personLiable'),
dataIndex: 'prehomoDutyName',
align: 'center'
},
{
title: this.$t('TaskCutOffTime'),
dataIndex: 'prehomoDueDate',
align: 'center'
}
]
},
{
title: this.$t('verificationAndConformityconfirmation'),
children: [
{
title: this.$t('Deliverables'),
dataIndex: 'verifyDeliverableTemplateName',
align: 'center',
scopedSlots: { customRender: 'verifyDeliverableTemplateName' }
},
{
title: this.$t('Sponsor'),
dataIndex: 'verifyInitiatorName',
align: 'center'
},
{
title: this.$t('personLiable'),
dataIndex: 'verifyDutyName',
align: 'center'
},
{
title: this.$t('TaskCutOffTime'),
dataIndex: 'verifyDueDate',
align: 'center'
}
]
}
],
columnsFile: [
{
title: this.$t('deliverableTemplate'),
dataIndex: 'fileName',
align: 'center',
width: 260,
ellipsis: true
},
{
title: this.$t('operation'),
align: 'center',
width: 130,
scopedSlots: { customRender: 'fileOperation' }
}
],
visibleFile: false,
dataSourceFile: [],
queryParamQuery: {},
selectedRowKeys: [],
visible: false,
formInline: {},
queryParam: {},
url: {
list: '/project/projectVersionInfoEO/list'
},
downLoadFileUrl: window._CONFIG['domianPreviewURL'] + '/sys/common/download',
loading: false,
dataSource: [],
// fieldList | array || 需要查询的列集合示例如下type类型有:date/datetime/string/int/number
fieldList: [
{
type: 'string',
value: 'correspondingStandard',
text: this.$t('correspondingStandard')
},
{
type: '',
value: 'implementType',
text: this.$t('implementationCategory'),
dictCode: 'implement_type'//只要 dictCode 有值无论 type 是什么都显示为字典下拉框
},
{
type: 'date',
value: 'xin1Che1Xing2Shi2Shi1Ri4Qi1',
text: this.$t('ImplementationDate')
},
{
type: 'date',
value: 'implementTime',
text: this.$t('vehicleInProductionDate')
},
{
type: 'string',
value: 'wvtaId',
text: 'WVTA ID'
},
{
type: '',
value: 'attestationType',
text: this.$t('certificationType'),
dictCode: 'attestation_type'//只要 dictCode 有值无论 type 是什么都显示为字典下拉框
},
{
type: '',
value: 'attestationRank',
text: this.$t('certificationLevel'),
dictCode: 'attestation_rank'//只要 dictCode 有值无论 type 是什么都显示为字典下拉框
},
{
type: '',
value: 'dutyTerritory',
text: this.$t('areaOfResponsibility'),
dictCode: 'duty_territory'//只要 dictCode 有值无论 type 是什么都显示为字典下拉框
}
]
}
},
mounted() {
this.getList()
},
methods: {
...mapGetters(['userInfo']),
searchQuery() {
this.getList()
},
searchReset() {
this.$refs.globalAdvancedQueryRef.resetLine()
this.$refs.globalAdvancedQueryRef.emitCallback()
this.queryParam = {}
this.getList()
},
handleSuperQuery(params, matchType) {
let sqp = {}
if (!params || (params && params.length == 0)) {
sqp['superQueryParams'] = ''
this.$refs.globalAdvancedQueryRef.superQueryFlag = false
} else {
this.$refs.globalAdvancedQueryRef.superQueryFlag = true
sqp['superQueryParams'] = encodeURI(JSON.stringify(params))
sqp['superQueryMatchType'] = matchType
}
this.queryParamQuery = sqp
this.getList()
},
getList() {
let query = {
...this.queryParamQuery,
...this.queryParam,
historyVersionsId: this.$route.query.id
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
this.dataSource = res.result
this.loading = false
} else {
this.loading = false
}
})
},
pdfPreview(fileQuery) {
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 })
}
},
pdfPreviewClick(name, id) {
let fileName = name
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=' + id))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + id + fileSuffix)
window.open(url, '_blank')
} else if (fileSuffix == '.xlsx' || fileSuffix == '.xls') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + id + fileSuffix)
window.open(url, '_blank')
} else {
downloadFile('/sys/common/downLoadFile', name, { id: id })
}
},
download(item) {
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id })
},
clickButtonToUpload(item) {
this.loading = true
this.visibleFile = true
getAction('sys/common/getFileInfos', { id: item }).then((res) => {
if (res.success) {
this.dataSourceFile = res.result
this.loading = false
} else {
this.dataSourceFile = []
this.loading = false
}
})
}
}
}
</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-content {
padding: 0 38px 0 38px;
box-sizing: border-box;
font-size: 16px;
.box-title-text-add {
line-height: 1.4;
}
.title-text-add {
display: inline-block;
font-weight: 500;
margin-right: 16px;
height: 42px;
line-height: 42px;
}
}
}
.header-text {
font-size: 16px;
font-weight: 400;
height: 60px;
color: #000F16;
line-height: 40px;
}
.box-title-text {
line-height: 1.4;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.box-title-text-index {
line-height: 1.4;
display: flex;
}
.title-text {
width: 32px;
color: #000F16;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
margin-top: 3px;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.title-text-index {
width: 110px;
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;
line-height: 40px;
}
.box-input {
display: inline-block;
width: 70%;
height: 38px;
margin-top: 2px;
}
.Required {
color: red;
margin-right: 4px;
}
.box-button {
height: 38px;
}
.text-operation {
margin-right: 8px;
}
.page {
text-align: right;
margin-top: 20px;
}
.operator-text-left {
font-size: 14px;
margin-right: 20px;
background: #eff1f3;
padding: 8px 8px;
cursor: pointer;
border-radius: 4px;
}
/deep/ .ant-popover-buttons {
display: none !important;
}
.operator-text-title {
cursor: pointer;
margin-right: 22px;
font-size: 14px;
font-weight: 400;
color: #040B29;
margin-bottom: 22px;
}
</style>
<style>
.box-input .ant-select-selection {
height: 38px !important;
}
.box-input .ant-select-selection__rendered {
line-height: 38px;
}
.popconfirm .ant-popover-buttons {
display: none !important;
}
.popconfirm .anticon-exclamation-circle {
display: none !important;
}
</style>