合并分支 'dev_third_stage' 到 'master'

Dev third stage

查看合并请求 laws-nio/laws-weilai!166
This commit is contained in:
高嵩
2022-09-07 18:58:48 +08:00
41 changed files with 3602 additions and 257 deletions
@@ -1089,3 +1089,15 @@ INSERT INTO `laws_weilai`.`country_national_flag` (`id`, `create_by`, `create_ti
-- 增加 中国台湾 数据字典数据 2022-09-06
INSERT INTO `laws_weilai`.`sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `is_tag_dict`, `is_read_only`, `attribute_type`, `del_flag`, `en_name`) VALUES ('1567085557701386242', '1493782108399820801', '中国台湾', '96d49ba5797d4791906ce2baee87d4bc', '中国台湾', 1, 1, 'admin', '2022-09-06 17:41:27', 'admin', '2022-09-06 17:41:35', 1, NULL, NULL, '0', 'Tai Wan China');
-- 问题知识库-评论回复表。 2022-09-07
CREATE TABLE `laws_weilai`.`problem_knowledge_base_reply` (
`id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
`update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新日期',
`sys_org_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属部门',
`comment_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '问题知识库-评论表id',
`reply_content` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '回复内容',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '问题知识库-评论回复表' ROW_FORMAT = Dynamic;
@@ -1434,8 +1434,8 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr;
String href = "<a href='/ParameterItemCollection" + urlParamsStr + "'" + " target='_blank'>the link</a>,";
String content = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " and other parameter items, please enter the link to handle it.";
String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " please enter " + href + " to handle it.";
String msgTitle = "You have a homo parameter task to complete";
String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " and other parameter items, please enter " + href + " and fill in the relevant information.";
String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete";
// 发送系统消息
SysAnnouncement sysAnnouncement = new SysAnnouncement();
@@ -1563,7 +1563,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr;
String href = "<a href='/ParameterItemCollection" + urlParamsStr + "'" + " target='_blank'>the link</a>,";
String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter " + href + " and fill in the relevant information.";
String msgTitle = "You have a homo parameter task to complete";
String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete";
// 发送系统消息
SysAnnouncement sysAnnouncement = new SysAnnouncement();
@@ -1697,7 +1697,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr;
String href = "<a href='/ParameterItemCollection" + urlParamsStr + "'" + " target='_blank'>the link</a>,";
String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter " + href + " and fill in the relevant information.";
String msgTitle = "You have a homo parameter task to complete";
String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete";
// 发送系统消息
SysAnnouncement sysAnnouncement = new SysAnnouncement();
@@ -70,6 +70,11 @@
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
@@ -1,26 +1,24 @@
package com.jero.modules.system.util;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.pdf.*;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfBrushes;
import com.spire.pdf.graphics.PdfFont;
import com.spire.pdf.graphics.PdfFontFamily;
import com.spire.pdf.graphics.PdfStringFormat;
import com.spire.pdf.graphics.PdfTextAlignment;
import com.spire.pdf.graphics.PdfTilingBrush;
import com.spire.pdf.graphics.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.*;
@Slf4j
public class PDFUtils {
public static void main(String[] args) throws IOException {
File file = new File("E:\\DeskTop\\动态资料\\加入IEEE会员 - 副本 - 副本.pdf");
@@ -75,7 +73,7 @@ public class PDFUtils {
brush.getGraphics().save();
brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 1.5, (float) brush.getSize().getHeight() / 3);
brush.getGraphics().rotateTransform(-45);
brush.getGraphics().drawString(watermark, new PdfFont(PdfFontFamily.Helvetica, 10),
brush.getGraphics().drawString(watermark, new PdfFont(PdfFontFamily.Times_Roman, 10),
PdfBrushes.getViolet(), 0 , 0 , new PdfStringFormat(PdfTextAlignment.Center));
brush.getGraphics().restore();
brush.getGraphics().setTransparency(1);
@@ -84,7 +82,7 @@ public class PDFUtils {
page.getCanvas().drawRectangle(brush, loRect);
}
public static File PDFWatermark(InputStream in,String uploadpath, String fileName,String waterMark) throws FileNotFoundException {
public static File PDFWatermarkInvalid(InputStream in,String uploadpath, String fileName,String waterMark) throws FileNotFoundException {
//创建PdfDocument类的对象
PdfDocument pdf = new PdfDocument();
//加载测试文档
@@ -203,4 +201,109 @@ public class PDFUtils {
// }
// return buffer;
// }
public static File PDFWatermark(InputStream in,String uploadpath, String fileName,String waterMark) {
String newFilePath = "";
// 待加水印的文件
PdfReader reader = null;
PdfStamper stamper = null;
FileOutputStream os = null;
try {
byte[] byes = IOUtils.toByteArray(in);
//生成临时文件 , 读取完删除
String path = uploadpath + File.separator + fileName;
newFilePath = path.replace(fileName, "transformation" + fileName);
reader = new PdfReader(byes);
// 加完水印的文件
os = new FileOutputStream(newFilePath);
stamper = new PdfStamper(reader, os);
int total = reader.getNumberOfPages() + 1;
BaseFont basefont = BaseFont.createFont("/static/times.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
// 方法二这里的字体设置比较关键这个设置是支持中文的写法
// BaseFont basefont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系统字体
PdfContentByte under;
com.itextpdf.text.Rectangle pageRect = null;
//水印倾斜角度0-360
int angle = 45;
//数值越大每页竖向水印越少
int heightDensity = 10;
//数值越大每页横向水印越少
int widthDensity = 1;
int textH = 0;
int textW = 0;
JLabel label = new JLabel();
FontMetrics metrics;
label.setText(waterMark);
metrics = label.getFontMetrics(label.getFont());
//字符串的高, 只和字体有关
textH = metrics.getHeight();
//字符串的宽
textW = metrics.stringWidth(label.getText());
// 循环对每页插入水印
for (int i = 1; i < total; i++) {
pageRect = stamper.getReader().getPageSizeWithRotation(i);
// 获得PDF最顶层
under = stamper.getOverContent(i);
under.saveState();
// set Transparency
PdfGState gs = new PdfGState();
// 设置透明度
gs.setFillOpacity(0.5f);
under.setGState(gs);
under.restoreState();
under.beginText();
under.setFontAndSize(basefont, pageRect.getHeight() / 100);
under.setColorFill(BaseColor.PINK);
// 水印文字成45度角倾斜
for (int height = textH; height < pageRect.getHeight() * 3; height = height + textH * heightDensity) {
for (int width = textW; width < pageRect.getWidth() * 1.5 + textW; width = width + textW * widthDensity) {
// rotation:倾斜角度
under.showTextAligned(Element.ALIGN_CENTER, waterMark, width - textW, height - textH, angle);
}
}
// 添加水印文字
under.endText();
under.setLineWidth(1f);
under.stroke();
}
} catch (IOException e) {
e.printStackTrace();
log.error(e.getMessage());
} catch (DocumentException e) {
e.printStackTrace();
log.error(e.getMessage());
} finally {
try {
stamper.close();
if (os != null) {
os.close();
}
if (reader != null) {
reader.close();
}
} catch (DocumentException e) {
e.printStackTrace();
log.error(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
return new File(newFilePath);
}
}
@@ -167,4 +167,16 @@ public class SarFileCompareItemController extends JeroController<SarFileCompareI
return super.importExcel(request, response, SarFileCompareItem.class);
}
/**
* 条款对比高亮
*/
@AutoLog(value = "文档对比信息条款表-条款对比高亮")
@ApiOperation(value="文档对比信息条款表-条款对比高亮", notes="文档对比信息条款表-条款对比高亮")
@GetMapping(value = "/clauseComparison")
public Result<?> clauseComparison(@RequestParam(name="leftId",required=true) String leftId,
@RequestParam(name="rightId",required=true) String rightId) {
List<String> res = sarFileCompareItemService.clauseComparison(leftId,rightId);
return Result.OK(res);
}
}
@@ -1,5 +1,7 @@
package com.jero.modules.compare.entity;
import com.jero.modules.system.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
@@ -25,7 +27,10 @@ public class SarFileCompareMenuVo extends SarFileCompareMenu {
this.setLeftOrRight(menu.getLeftOrRight());
this.setItemName(menu.getItemName());
this.setKey(menu.getId());
this.setTitle(menu.getName() + menu.getItemName());
this.setTitle(menu.getName());
if(StringUtils.isNoneBlank(menu.getItemName())){
this.setTitle(menu.getName() + menu.getItemName());
}
this.setRemarks(menu.getRemarks());
}
@@ -72,4 +72,6 @@ public interface ISarFileCompareItemService extends IService<SarFileCompareItem>
List<SarFileCompareItem> queryListByInfoId(String infoId);
Map<String, SarFileCompareItem> queryMapByInfoId(String infoId);
List<String> clauseComparison(String lid,String rid);
}
@@ -6,6 +6,7 @@ import com.jero.modules.compare.entity.SarFileCompareItem;
import com.jero.modules.compare.mapper.SarFileCompareItemMapper;
import com.jero.modules.compare.service.ISarFileCompareItemService;
import com.jero.modules.compare.utils.CompareConst;
import com.jero.modules.compare.utils.DiffUtils;
import com.jero.modules.system.util.StringUtils;
import org.springframework.stereotype.Service;
@@ -122,4 +123,13 @@ public class SarFileCompareItemServiceImpl extends ServiceImpl<SarFileCompareIte
}
return resMap;
}
@Override
public List<String> clauseComparison(String lid, String rid) {
SarFileCompareItem leftItem = this.queryById(lid);
SarFileCompareItem rightItem = this.queryById(rid);
DiffUtils dmp = new DiffUtils();
List<String> htmlDiffStr = dmp.getHtmlDiffStr(leftItem.getItemsText(), rightItem.getItemsText());
return htmlDiffStr;
}
}
@@ -81,6 +81,7 @@ public class ExtRepoDataServiceImpl extends ServiceImpl<ExtRepoDataMapper, ExtRe
public void editById(ExtRepoData extRepoData) {
Date now = new Date();
extRepoData.setUpdateTime(now);
extRepoData.setCreateTime(null);
saveOrUpdate(extRepoData);
}
@@ -45,6 +45,9 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -298,10 +301,12 @@ public class LawsTechnologyEvaluationItemResultEOServiceImpl extends ServiceImpl
cell.setCellValue(titleArr[i]);
}
List<FileSplitValImgExportDto> allImgList = new ArrayList<>(); // 存储文件数据
//设置导出数据
if(CollectionUtils.isNotEmpty(exportData)) {
List<FileSpiltValTableExportDto> allTableList = new ArrayList<>(); // 存储表格数据
List<FileSplitValImgExportDto> allImgList = new ArrayList<>(); // 存储文件数据
SarFileSplitItemsEOPage page = new SarFileSplitItemsEOPage();
for (int dataIndex = 0; dataIndex < exportData.size(); dataIndex++) {
@@ -318,7 +323,11 @@ public class LawsTechnologyEvaluationItemResultEOServiceImpl extends ServiceImpl
List<SarFileSplitItemsValEO> getValList = this.sarFileSplitItemsValEOService.queryByList(valEOPage);
List<FileSplitValExportDto> valContentList = this.fileSplitItemsEOService.combineItemValInfo(getValList,allTableList,allImgList,page); //TODO
if(CollectionUtils.isNotEmpty(valContentList)){
itemContent = valContentList.get(0).getValContent();
String contents = "";
for (FileSplitValExportDto fileSplitValExportDto : valContentList) {
contents += fileSplitValExportDto.getValContent() + "\n";
}
itemContent = contents;
}
}
@@ -341,6 +350,12 @@ public class LawsTechnologyEvaluationItemResultEOServiceImpl extends ServiceImpl
fileTemp.delete();
}
fileTemp.mkdirs();
//下载图片内容到导出的压缩包中
if (allImgList != null && !allImgList.isEmpty()) {
downLoadImgList(allImgList,path);
}
//excel
OutputStream excelOS = new FileOutputStream(path + File.separator + fileName);
workbook.write(excelOS);
@@ -434,4 +449,43 @@ public class LawsTechnologyEvaluationItemResultEOServiceImpl extends ServiceImpl
}
return evaluationMethodsName;
}
public void downLoadImgList(List<FileSplitValImgExportDto> allImgList, String fileNowPath) {
for(FileSplitValImgExportDto imgExportDto : allImgList){
String oldPath = imgExportDto.getImgPath();
String newPath = fileNowPath + File.separator + imgExportDto.getImgName();
if (CosBootUtil.doesObjectExist(oldPath)){
try (InputStream in = CosBootUtil.download(oldPath);) {
copyFile1(in, newPath);
} catch (IOException e) {
e.printStackTrace();
log.error(e.getMessage(), e);
}
}
}
}
public void copyFile1(InputStream in, String destPath) throws IOException {
BufferedInputStream bis = new BufferedInputStream(in);
BufferedOutputStream bos =
new BufferedOutputStream(Files.newOutputStream(Paths.get(destPath),
StandardOpenOption.CREATE,
StandardOpenOption.TRUNCATE_EXISTING,
StandardOpenOption.WRITE));
// 打开输入流
// FileInputStream fis = new FileInputStream(srcPath);
// 打开输出流
// FileOutputStream fos = new FileOutputStream(destPath);
// 读取和写入信息
byte[] bytes = new byte[1024 * 1024];
int len;
while ((len = bis.read(bytes)) > 0) {
bos.write(bytes, 0, len);
}
// 关闭流 先开后关 后开先关
// 先开后关先开的输入流再开的输出流那么应该先关输出流再关输入流
// 先关外层再关内层如BufferedInputStream包装了一个FileInputStream那么先关BufferedInputStream再关FileInputStream
bos.close(); // 后开先关
bis.close(); // 先开后关
}
}
@@ -11,6 +11,7 @@ import com.jero.modules.problemKnowledgeBase.service.IProblemKnowledgeBaseCommen
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.modules.problemKnowledgeBase.vo.ProblemKnowledgeBaseCommentVO;
import lombok.extern.slf4j.Slf4j;
import com.jero.common.system.base.controller.JeroController;
import org.springframework.beans.factory.annotation.Autowired;
@@ -67,8 +68,8 @@ public class ProblemKnowledgeBaseCommentEOController extends JeroController<Prob
@AutoLog(value = "问题知识库评论表-列表查询")
@ApiOperation(value="问题知识库评论表-列表查询", notes="问题知识库评论表-列表查询")
@GetMapping(value = "/list")
public Result<List<ProblemKnowledgeBaseCommentEO>> queryList(ProblemKnowledgeBaseCommentEO problemKnowledgeBaseCommentEO,HttpServletRequest req) {
List<ProblemKnowledgeBaseCommentEO> list = problemKnowledgeBaseCommentEOService.queryList(problemKnowledgeBaseCommentEO,req);
public Result<List<ProblemKnowledgeBaseCommentVO>> queryList(ProblemKnowledgeBaseCommentEO problemKnowledgeBaseCommentEO, HttpServletRequest req) {
List<ProblemKnowledgeBaseCommentVO> list = this.problemKnowledgeBaseCommentEOService.getInfoList(problemKnowledgeBaseCommentEO,req);
return Result.OK(list);
}
@@ -2,6 +2,7 @@ package com.jero.modules.problemKnowledgeBase.service;
import com.jero.modules.problemKnowledgeBase.entity.ProblemKnowledgeBaseCommentEO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.problemKnowledgeBase.vo.ProblemKnowledgeBaseCommentVO;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@@ -60,4 +61,6 @@ public interface IProblemKnowledgeBaseCommentEOService extends IService<ProblemK
* @return
*/
List<ProblemKnowledgeBaseCommentEO> queryList(ProblemKnowledgeBaseCommentEO problemKnowledgeBaseCommentEO, HttpServletRequest req);
List<ProblemKnowledgeBaseCommentVO> getInfoList(ProblemKnowledgeBaseCommentEO problemKnowledgeBaseCommentEO, HttpServletRequest req);
}
@@ -5,9 +5,20 @@ import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.problemKnowledgeBase.entity.ProblemKnowledgeBaseCommentEO;
import com.jero.modules.problemKnowledgeBase.mapper.ProblemKnowledgeBaseCommentEOMapper;
import com.jero.modules.problemKnowledgeBase.service.IProblemKnowledgeBaseCommentEOService;
import com.jero.modules.problemKnowledgeBase.vo.ProblemKnowledgeBaseCommentVO;
import com.jero.modules.project.entity.ProblemKnowledgeBaseReplyEO;
import com.jero.modules.project.service.IProblemKnowledgeBaseReplyEOService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@@ -24,6 +35,8 @@ import javax.servlet.http.HttpServletRequest;
@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public class ProblemKnowledgeBaseCommentEOServiceImpl extends ServiceImpl<ProblemKnowledgeBaseCommentEOMapper, ProblemKnowledgeBaseCommentEO> implements IProblemKnowledgeBaseCommentEOService {
@Autowired
private IProblemKnowledgeBaseReplyEOService problemKnowledgeBaseReplyEOService;
/**
* 保存
*
@@ -96,4 +109,36 @@ public class ProblemKnowledgeBaseCommentEOServiceImpl extends ServiceImpl<Proble
List<ProblemKnowledgeBaseCommentEO> result = this.list(queryWrapper);
return result;
}
@Override
public List<ProblemKnowledgeBaseCommentVO> getInfoList(ProblemKnowledgeBaseCommentEO problemKnowledgeBaseCommentEO, HttpServletRequest req) {
List<ProblemKnowledgeBaseCommentVO> result = new ArrayList<>();
List<ProblemKnowledgeBaseCommentEO> problemKnowledgeBaseCommentEOList = this.queryList(problemKnowledgeBaseCommentEO, req);
if(CollectionUtils.isNotEmpty(problemKnowledgeBaseCommentEOList)){
List<String> commentIdList = problemKnowledgeBaseCommentEOList.stream().map(ProblemKnowledgeBaseCommentEO::getId).distinct().collect(Collectors.toList());
QueryWrapper<ProblemKnowledgeBaseReplyEO> replyQueryWrapper = new QueryWrapper<>();
replyQueryWrapper.lambda().in(ProblemKnowledgeBaseReplyEO::getCommentId,commentIdList);
List<ProblemKnowledgeBaseReplyEO> problemKnowledgeBaseReplyEOList = this.problemKnowledgeBaseReplyEOService.list(replyQueryWrapper);
problemKnowledgeBaseCommentEOList.forEach(commentEO -> {
List<ProblemKnowledgeBaseCommentVO> commentVOList = new ArrayList<>();
problemKnowledgeBaseReplyEOList.forEach(replyEO -> {
if(StringUtils.equals(commentEO.getId(),replyEO.getCommentId())){
ProblemKnowledgeBaseCommentVO commentVO = new ProblemKnowledgeBaseCommentVO();
BeanUtils.copyProperties(replyEO, commentVO);
commentVO.setCommentContent(replyEO.getReplyContent());
commentVOList.add(commentVO);
}
});
ProblemKnowledgeBaseCommentVO commentVO = new ProblemKnowledgeBaseCommentVO();
BeanUtils.copyProperties(commentEO, commentVO);
commentVO.setProblemKnowledgeBaseCommentVOList(commentVOList);
result.add(commentVO);
});
}
return result;
}
}
@@ -0,0 +1,62 @@
package com.jero.modules.problemKnowledgeBase.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.List;
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="problem_knowledge_base_comment对象", description="问题知识库评论表")
public class ProblemKnowledgeBaseCommentVO implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@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*/
@ApiModelProperty(value = "问题知识库id")
private java.lang.String problemKnowledgeBaseId;
/**评论内容*/
@ApiModelProperty(value = "评论内容")
private java.lang.String commentContent;
/**评论用户id*/
@ApiModelProperty(value = "评论用户id")
private java.lang.String commentUserId;
private List<ProblemKnowledgeBaseCommentVO> problemKnowledgeBaseCommentVOList;
}
@@ -0,0 +1,170 @@
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.ProblemKnowledgeBaseReplyEO;
import com.jero.modules.project.service.IProblemKnowledgeBaseReplyEOService;
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-09-07
* @Version: V1.0
*/
@Api(tags="问题知识库-评论回复表")
@RestController
@RequestMapping("/project/problemKnowledgeBaseReplyEO")
@Slf4j
public class ProblemKnowledgeBaseReplyEOController extends JeroController<ProblemKnowledgeBaseReplyEO, IProblemKnowledgeBaseReplyEOService> {
@Autowired
private IProblemKnowledgeBaseReplyEOService problemKnowledgeBaseReplyEOService;
/**
* 分页列表查询
*
* @param problemKnowledgeBaseReplyEO
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "问题知识库-评论回复表-分页列表查询")
@ApiOperation(value="问题知识库-评论回复表-分页列表查询", notes="问题知识库-评论回复表-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(ProblemKnowledgeBaseReplyEO problemKnowledgeBaseReplyEO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<ProblemKnowledgeBaseReplyEO> queryWrapper = QueryGenerator.initQueryWrapper(problemKnowledgeBaseReplyEO, req.getParameterMap());
Page<ProblemKnowledgeBaseReplyEO> page = new Page<ProblemKnowledgeBaseReplyEO>(pageNo, pageSize);
IPage<ProblemKnowledgeBaseReplyEO> pageList = problemKnowledgeBaseReplyEOService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "问题知识库-评论回复表-列表查询")
@ApiOperation(value="问题知识库-评论回复表-列表查询", notes="问题知识库-评论回复表-列表查询")
@GetMapping(value = "/list")
public Result<List<ProblemKnowledgeBaseReplyEO>> queryList() {
List<ProblemKnowledgeBaseReplyEO> list = problemKnowledgeBaseReplyEOService.queryList();
return Result.OK(list);
}
/**
* 添加
*
* @param problemKnowledgeBaseReplyEO
* @return
*/
@AutoLog(value = "问题知识库-评论回复表-添加")
@ApiOperation(value="问题知识库-评论回复表-添加", notes="问题知识库-评论回复表-添加")
@PostMapping(value = "/add")
public Result<?> add(@Validated @RequestBody ProblemKnowledgeBaseReplyEO problemKnowledgeBaseReplyEO) {
problemKnowledgeBaseReplyEOService.add(problemKnowledgeBaseReplyEO);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param problemKnowledgeBaseReplyEO
* @return
*/
@AutoLog(value = "问题知识库-评论回复表-编辑")
@ApiOperation(value="问题知识库-评论回复表-编辑", notes="问题知识库-评论回复表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody ProblemKnowledgeBaseReplyEO problemKnowledgeBaseReplyEO) {
problemKnowledgeBaseReplyEOService.editById(problemKnowledgeBaseReplyEO);
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) {
problemKnowledgeBaseReplyEOService.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.problemKnowledgeBaseReplyEOService.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) {
ProblemKnowledgeBaseReplyEO problemKnowledgeBaseReplyEO = problemKnowledgeBaseReplyEOService.queryById(id);
if(problemKnowledgeBaseReplyEO==null) {
return Result.error("未找到对应数据");
}
return Result.OK(problemKnowledgeBaseReplyEO);
}
/**
* 导出excel
*
* @param request
* @param problemKnowledgeBaseReplyEO
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, ProblemKnowledgeBaseReplyEO problemKnowledgeBaseReplyEO) {
return super.exportXls(request, problemKnowledgeBaseReplyEO, ProblemKnowledgeBaseReplyEO.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, ProblemKnowledgeBaseReplyEO.class);
}
}
@@ -0,0 +1,74 @@
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-09-07
* @Version: V1.0
*/
@Data
@TableName("problem_knowledge_base_reply")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="problem_knowledge_base_reply对象", description="问题知识库-评论回复表")
public class ProblemKnowledgeBaseReplyEO 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 commentId;
/**回复内容*/
@Excel(name = "回复内容", width = 15)
@ApiModelProperty(value = "回复内容")
private java.lang.String replyContent;
}
@@ -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.ProblemKnowledgeBaseReplyEO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 问题知识库-评论回复表
* @Author: jero-boot
* @Date: 2022-09-07
* @Version: V1.0
*/
public interface ProblemKnowledgeBaseReplyEOMapper extends BaseMapper<ProblemKnowledgeBaseReplyEO> {
}
@@ -0,0 +1,14 @@
<?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.ProblemKnowledgeBaseReplyEOMapper">
<resultMap id="ProblemKnowledgeBaseReplyEOResultMap" type="com.jero.modules.project.entity.ProblemKnowledgeBaseReplyEO">
<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="comment_id" property="commentId" />
<result column="reply_content" property="replyContent" />
</resultMap>
</mapper>
@@ -0,0 +1,61 @@
package com.jero.modules.project.service;
import com.jero.modules.project.entity.ProblemKnowledgeBaseReplyEO;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: 问题知识库-评论回复表
* @Author: jero-boot
* @Date: 2022-09-07
* @Version: V1.0
*/
public interface IProblemKnowledgeBaseReplyEOService extends IService<ProblemKnowledgeBaseReplyEO> {
/**
* 保存
*
* @param problemKnowledgeBaseReplyEO
* @return
*/
void add(ProblemKnowledgeBaseReplyEO problemKnowledgeBaseReplyEO);
/**
* 更新
*
* @param problemKnowledgeBaseReplyEO
* @return
*/
void editById(ProblemKnowledgeBaseReplyEO problemKnowledgeBaseReplyEO);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*
* @param id
* @return
*/
ProblemKnowledgeBaseReplyEO queryById(String id);
/**
* 列表查询
*
* @return
*/
List<ProblemKnowledgeBaseReplyEO> queryList();
}
@@ -0,0 +1,89 @@
package com.jero.modules.project.service.impl;
import com.jero.modules.project.entity.ProblemKnowledgeBaseReplyEO;
import com.jero.modules.project.mapper.ProblemKnowledgeBaseReplyEOMapper;
import com.jero.modules.project.service.IProblemKnowledgeBaseReplyEOService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Date;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 问题知识库-评论回复表
* @Author: jero-boot
* @Date: 2022-09-07
* @Version: V1.0
*/
@Service
public class ProblemKnowledgeBaseReplyEOServiceImpl extends ServiceImpl<ProblemKnowledgeBaseReplyEOMapper, ProblemKnowledgeBaseReplyEO> implements IProblemKnowledgeBaseReplyEOService {
/**
* 保存
*
* @param problemKnowledgeBaseReplyEO
* @return
*/
@Override
public void add(ProblemKnowledgeBaseReplyEO problemKnowledgeBaseReplyEO) {
Date now = new Date();
problemKnowledgeBaseReplyEO.setCreateTime(now);
problemKnowledgeBaseReplyEO.setUpdateTime(now);
save(problemKnowledgeBaseReplyEO);
}
/**
* 更新
*
* @param problemKnowledgeBaseReplyEO
* @return
*/
@Override
public void editById(ProblemKnowledgeBaseReplyEO problemKnowledgeBaseReplyEO) {
Date now = new Date();
problemKnowledgeBaseReplyEO.setUpdateTime(now);
saveOrUpdate(problemKnowledgeBaseReplyEO);
}
/**
* 通过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 ProblemKnowledgeBaseReplyEO queryById(String id) {
return getById(id);
}
/**
* 列表查询
*
* @return
*/
@Override
public List<ProblemKnowledgeBaseReplyEO> queryList() {
return list();
}
}
@@ -216,6 +216,8 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
@Autowired
ProjectRelatedPersonnelServiceImpl projectRelatedPersonnelService;
@Autowired
private IProjectLawsInventoryRejectCauseEOService projectLawsInventoryRejectCauseEOService;
/**
* 保存
*
@@ -597,9 +599,14 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
removeById(id);
this.projectTaskInventoryEOService.deleteByProjectLawsInventoryIds(Arrays.asList(id.split(",")));
QueryWrapper<ConditionAssessmentEO> removeWrapper = new QueryWrapper<>();
removeWrapper.lambda().eq(ConditionAssessmentEO::getProjectLawsInventoryId,id);
this.conditionAssessmentEOService.remove(removeWrapper);
//删除该条法规清单数据的 项目当前状态数据
QueryWrapper<ConditionAssessmentEO> conditionAssessmentRemoveWrapper = new QueryWrapper<>();
conditionAssessmentRemoveWrapper.lambda().eq(ConditionAssessmentEO::getProjectLawsInventoryId,id);
this.conditionAssessmentEOService.remove(conditionAssessmentRemoveWrapper);
//删除该条法规清单数据的拒绝原因
QueryWrapper<ProjectLawsInventoryRejectCauseEO> rejectCauseRemoveWrapper = new QueryWrapper<>();
rejectCauseRemoveWrapper.lambda().eq(ProjectLawsInventoryRejectCauseEO::getProjectLawsInventoryId,id);
this.projectLawsInventoryRejectCauseEOService.remove(rejectCauseRemoveWrapper);
}
/**
@@ -635,9 +642,15 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
removeByIds(ids);
this.projectTaskInventoryEOService.deleteByProjectLawsInventoryIds(ids);
QueryWrapper<ConditionAssessmentEO> removeWrapper = new QueryWrapper<>();
removeWrapper.lambda().in(ConditionAssessmentEO::getProjectLawsInventoryId,ids);
this.conditionAssessmentEOService.remove(removeWrapper);
//删除该条法规清单数据的 项目当前状态数据
QueryWrapper<ConditionAssessmentEO> conditionAssessmentRemoveWrapper = new QueryWrapper<>();
conditionAssessmentRemoveWrapper.lambda().in(ConditionAssessmentEO::getProjectLawsInventoryId,ids);
this.conditionAssessmentEOService.remove(conditionAssessmentRemoveWrapper);
//删除该条法规清单数据的拒绝原因
QueryWrapper<ProjectLawsInventoryRejectCauseEO> rejectCauseRemoveWrapper = new QueryWrapper<>();
rejectCauseRemoveWrapper.lambda().in(ProjectLawsInventoryRejectCauseEO::getProjectLawsInventoryId,ids);
this.projectLawsInventoryRejectCauseEOService.remove(rejectCauseRemoveWrapper);
}
/**
@@ -1385,14 +1398,29 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
projectLawsInventoryEO.setInventoryAffirmStatus(InventoryAffirmStatusEnum.LIST_TO_CONFIRM.getValue());
projectLawsInventoryEO.setInventoryAffirmDueDate(sdf.parse(inventoryAffirmDueDate));
LambdaUpdateWrapper<ProjectLawsInventoryEO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(ProjectLawsInventoryEO::getRegulationOwnerSubmitStatus,null);
updateWrapper.set(ProjectLawsInventoryEO::getHomologationEngineerSubmitStatus,null);
updateWrapper.eq(ProjectLawsInventoryEO::getId,projectLawsInventoryEO.getId());
super.update(projectLawsInventoryEO, updateWrapper);
userIdList.add(projectLawsInventoryEO.getHomologationEngineerId());
userIdList.add(projectLawsInventoryEO.getRegulationOwnerId());
//认证工程师标识 如果认证工程师提交状态为空 或认证工程师拒绝过给认证工程师任务让他处理
boolean homologationEngineerFlag = (
StringUtils.isEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())
|| StringUtils.equals(projectLawsInventoryEO.getHomologationEngineerSubmitStatus(),"1")
);
//法规工程师标识 如果法规工程师提交状态为空 或法规工程师拒绝过给法规工程师任务让他处理
boolean regulationOwnerFlag = (
StringUtils.isEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus())
|| StringUtils.equals(projectLawsInventoryEO.getRegulationOwnerSubmitStatus(),"1")
);
if(homologationEngineerFlag){
updateWrapper.set(ProjectLawsInventoryEO::getHomologationEngineerSubmitStatus,null);
userIdList.add(projectLawsInventoryEO.getHomologationEngineerId());
}
if(regulationOwnerFlag){
updateWrapper.set(ProjectLawsInventoryEO::getRegulationOwnerSubmitStatus,null);
userIdList.add(projectLawsInventoryEO.getRegulationOwnerId());
}
if(homologationEngineerFlag || regulationOwnerFlag){
super.update(projectLawsInventoryEO, updateWrapper);
}
}
}
@@ -494,7 +494,7 @@ public class LawsMonthlyReportWriteEOServiceImpl extends ServiceImpl<LawsMonthly
os.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
IOUtils.closeQuietly(os);
File file = new File(uploadpath + "/tempZip"+l);
@@ -28,17 +28,22 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFldChar;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblLayoutType;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblLayoutType;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import java.io.InputStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class WordUtil {
@@ -410,11 +415,12 @@ public class WordUtil {
String stateName = dictItem(sysDictItems, state,cut, DictCodeReportEnum.STATE.getValue());
String useMethodName = dictItem(sysDictItems, useMethod,cut, DictCodeReportEnum.USEMETHOD.getValue());
XWPFTable table = document.createTable(12, 2);
//表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//固定列宽(英文和数字的时候自动换行)
CTTblLayoutType ctTblLayoutType = tablePr.isSetTblLayout() ? tablePr.getTblLayout() : tablePr.addNewTblLayout();
ctTblLayoutType.setType(STTblLayoutType.FIXED);
//表格宽度
CTJc cTJc = tablePr.addNewJc();
//居中
@@ -478,57 +484,62 @@ public class WordUtil {
//第12行
setCell(table, 11,"Link",link);
}
// if(CutEnum.CN.getValue().equals(cut)){
// //第1行
// setCell(table.getRow(0), "相关领域",technologyTerritoryName);
// //第2行
// setCell(table.getRow(1), "适用车型",applyCarName);
// //第3行
// setCell(table.getRow(2), "适用范围",applyScopeName);
// //第4行
// setCell(table.getRow(3), "状态",stateName);
// //第5行
// setCell(table.getRow(4), "用法",useMethodName);
// //第6行
// setCell(table.getRow(5), "实施车型",implementCar);
// //第7行
// setCell(table.getRow(6), "新车型实施日期",newCarImplementTime);
// //第8行
// setCell(table.getRow(7), "在产车实施日期",productionCarImplementTime);
// //第9行
// setCell(table.getRow(8), "主要内容",contentCn);
// //第10行
// setCell(table.getRow(9), "NIO工作进展",workProgressCn);
// //第11行
// setCell(table.getRow(10), "法规联系人",lawsContact);
// //第12行
// setCell(table.getRow(11), "链接",link);
// }else{
// //第1行
// setCell(table.getRow(0), "Related Areas",technologyTerritoryName);
// //第2行
// setCell(table.getRow(1), "Vehicle Type",applyCarName);
// //第3行
// setCell(table.getRow(2), "Scope",applyScopeName);
// //第4行
// setCell(table.getRow(3), "Status",stateName);
// //第5行
// setCell(table.getRow(4), "usage",useMethodName);
// //第6行
// setCell(table.getRow(5), "Implementation Model",implementCar);
// //第7行
// setCell(table.getRow(6), "New Type Execution Date",newCarImplementTime);
// //第8行
// setCell(table.getRow(7), "New Vehicle Execution Date",productionCarImplementTime);
// //第9行
// setCell(table.getRow(8), "Main Content",contentEn);
// //第10行
// setCell(table.getRow(9), "NIO Work Progress",workProgressEn);
// //第11行
// setCell(table.getRow(10), "Regulatory Contact",lawsContact);
// //第12行
// setCell(table.getRow(11), "Link",link);
// }
// ctTblLayoutType.setType(STTblLayoutType.FIXED);
}
/**
* 已固定长度分隔字符串
* @param str
* @return
*/
public List<String> splitStr(String str){
//检查参数是否合法
if (null == str || str.equals("")) {
return new ArrayList<>();
}
int length = 3;
int n = (str.length() + length - 1) / length; //获取整个字符串可以被切割成字符子串的个数
List<String> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
if (i < (n - 1)) {
list.add(str.substring(i * length, (i + 1) * length)) ;
} else {
list.add(str.substring(i * length));
}
}
return list;
}
/**
* 判断字符串是否完全由数字组成
* @param str
* @return
*/
public boolean verifyFigure(String str){
Pattern p = Pattern.compile("[0-9]*");
Matcher m = p.matcher(str);
return m.matches();
}
/**
* 判断字符串是否完全由字母组成
* @param str
* @return
*/
public boolean verifyEn(String str){
Pattern enPatten = Pattern.compile("^[a-zA-Z]*");
Matcher enMatch = enPatten.matcher(str);
return enMatch.matches();
}
/**
* 判断字符串是否完全由数字和字母组成
* @param str
* @return
*/
public boolean verifyFigureAndEn(String str){
Pattern figureAndEnPattern = Pattern.compile("[0-9a-zA-Z]{1,}");
Matcher figureAndEnMatcher = figureAndEnPattern.matcher(str);
return figureAndEnMatcher.matches();
}
/**
@@ -553,6 +564,9 @@ public class WordUtil {
//表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//固定列宽(英文和数字的时候自动换行)
CTTblLayoutType ctTblLayoutType = tablePr.isSetTblLayout() ? tablePr.getTblLayout() : tablePr.addNewTblLayout();
ctTblLayoutType.setType(STTblLayoutType.FIXED);
//表格宽度
CTJc cTJc = tablePr.addNewJc();
//居中
@@ -597,6 +611,9 @@ public class WordUtil {
XWPFTable table = document.createTable(newOpinionTemplateEOList.size()+1, 4);
//表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//固定列宽(英文和数字的时候自动换行)
CTTblLayoutType ctTblLayoutType = tablePr.isSetTblLayout() ? tablePr.getTblLayout() : tablePr.addNewTblLayout();
ctTblLayoutType.setType(STTblLayoutType.FIXED);
//表格宽度
CTJc cTJc = tablePr.addNewJc();
//居中
@@ -632,6 +649,9 @@ public class WordUtil {
XWPFTable table = document.createTable(newStandardTemplateEOList.size()+1, 5);
//表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//固定列宽(英文和数字的时候自动换行)
CTTblLayoutType ctTblLayoutType = tablePr.isSetTblLayout() ? tablePr.getTblLayout() : tablePr.addNewTblLayout();
ctTblLayoutType.setType(STTblLayoutType.FIXED);
//表格宽度
CTJc cTJc = tablePr.addNewJc();
//居中
@@ -809,11 +829,29 @@ public class WordUtil {
ctTblWidth0.setW(BigInteger.valueOf(2000));
CTTblWidth ctTblWidth1 = table.getRow(number).getCell(1).getCTTc().addNewTcPr().addNewTcW();
ctTblWidth1.setType(STTblWidth.DXA);
ctTblWidth1.setW(BigInteger.valueOf(5000));
ctTblWidth1.setW(BigInteger.valueOf(6000));
// XWPFParagraph para = table.getRow(number).getCell(1).getParagraphs().get(0);
// XWPFRun run = para.createRun();//对某个段落设置格式
// run.addBreak();//换行
table.getRow(number).getCell(0).setText(fieldName);
table.getRow(number).getCell(1).setText(technologyTerritory);
}
// private static void setCell(XWPFTable table, int number, String fieldName,String technologyTerritory) {
//
// table.getRow(number).setHeight(500);
// CTTblWidth ctTblWidth0 = table.getRow(number).getCell(0).getCTTc().addNewTcPr().addNewTcW();
// ctTblWidth0.setType(STTblWidth.DXA);
// ctTblWidth0.setW(BigInteger.valueOf(2000));
// CTTblWidth ctTblWidth1 = table.getRow(number).getCell(1).getCTTc().addNewTcPr().addNewTcW();
// ctTblWidth1.setType(STTblWidth.DXA);
// ctTblWidth1.setW(BigInteger.valueOf(5000));
//
// table.getRow(number).getCell(0).setText(fieldName);
// table.getRow(number).getCell(1).setText(technologyTerritory);
// }
// private static void setCell(XWPFTableRow tableRow, String fieldName,String technologyTerritory) {
//
// tableRow.setHeight(500);
@@ -1519,7 +1519,7 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService {
list1.add("</text>");
mapTemp.put("pre_tags", list);
mapTemp.put("post_tags", list1);
mapTemp.put("fragment_size", 500);//高亮字段内容长度去除html样式标签统计字数设置为200
mapTemp.put("fragment_size", 320);//高亮字段内容长度去除html样式标签统计字数设置为200
mapTemp.put("number_of_fragments", 1);//高亮内容默认分为5段, 此处设置为一段
mapTemp.put("type", "plain");
mapHighlight.put(key, mapTemp);
@@ -3209,7 +3209,7 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
}
} else if ("TEXT".equals(type)) {
lastOne.setValContent(lastOne.getValContent()+itemsValEO.getItemContent() + "\n");
lastOne.setValContent(StringUtils.isNotEmpty(lastOne.getValContent())? lastOne.getValContent() : "" + itemsValEO.getItemContent() + "\n");
valContent.add(lastOne);
//第一次
@@ -180,6 +180,7 @@ export default {
},
mounted() {
this.getSeach()
this.queryParam = {...this.queryParam}
},
methods: {
searchQuery() {
@@ -199,6 +200,7 @@ export default {
this.searchList.forEach((item, index) => {
if(item.db_field_name === 'serialNumber') {
this.queryParam[item.db_field_name] = this.searchalonesplit
this.queryParam = {...this.queryParam}
}
})
}
@@ -209,6 +211,7 @@ export default {
// },
dateChange(item) {
this.queryParam[item] = moment(this.queryParam[item]).format('YYYY-MM-DD')
},
onChange(item) {
if (this.queryParam[item] && this.queryParam[item].length > 0) {
@@ -856,7 +856,37 @@
.table .ant-table-column-title {
font-weight: bold;
}
</style>
<style scoped lang="less">
.box {
width: 100%;
height: calc(100% - 100px);
overflow: auto;
}
.text {
margin-right: 10px;
}
.page {
text-align: right;
margin-top: 20px;
}
/deep/ .ant-table-tbody .yellow {
background-color: #ffff001f !important;
height: 40px !important;
border: none !important;
padding: 0 !important;
}
::v-deep .ant-table-row:first-child {
background: #fff!important;
/*opacity: 0.9;*/
}
::v-deep .ant-table-body {
background: transparent!important;
}
.content-text {
width: 100%;
display: flex;
@@ -891,37 +921,6 @@
}
}
</style>
<style scoped>
.box {
width: 100%;
height: calc(100% - 100px);
overflow: auto;
}
.text {
margin-right: 10px;
}
.page {
text-align: right;
margin-top: 20px;
}
/deep/ .ant-table-tbody .yellow {
background-color: #ffff001f !important;
height: 40px !important;
border: none !important;
padding: 0 !important;
}
::v-deep .ant-table-row:first-child {
background: #fff!important;
/*opacity: 0.9;*/
}
::v-deep .ant-table-body {
background: transparent!important;
}
</style>
<style>
.resize-table-th {
position: relative;
@@ -222,7 +222,7 @@
dataSource: [],
pageNo: 1,
pageSize: 10,
pageSizeOptions: ['10', '20','30', '50'],
pageSizeOptions: ['100', '200'],
total: 0,
searchParmes: {},
loading: false,
@@ -672,7 +672,37 @@
.table .ant-table-column-title {
font-weight: bold;
}
</style>
<style scoped lang="less">
.box {
width: 100%;
height: calc(100% - 100px);
overflow: auto;
}
.text {
margin-right: 10px;
}
.page {
text-align: right;
margin-top: 20px;
}
/deep/ .ant-table-tbody .yellow {
background-color: #ffff001f !important;
height: 40px !important;
border: none !important;
padding: 0 !important;
}
::v-deep .ant-table-row:first-child {
background: #fff!important;
opacity: 0.9;
}
::v-deep .ant-table-body {
background: transparent!important;
}
.content-text {
width: 100%;
display: flex;
@@ -706,37 +736,6 @@
}
}
</style>
<style scoped>
.box {
width: 100%;
height: calc(100% - 100px);
overflow: auto;
}
.text {
margin-right: 10px;
}
.page {
text-align: right;
margin-top: 20px;
}
/deep/ .ant-table-tbody .yellow {
background-color: #ffff001f !important;
height: 40px !important;
border: none !important;
padding: 0 !important;
}
::v-deep .ant-table-row:first-child {
background: #fff!important;
opacity: 0.9;
}
::v-deep .ant-table-body {
background: transparent!important;
}
</style>
<style>
.resize-table-th {
position: relative;
@@ -41,9 +41,9 @@
</div>
</div>
<div class="drawer-bootom-button">
<a-button @click="handleCancel" type="danger">{{$t('cancel')}}</a-button>
</div>
<!-- <div class="drawer-bootom-button">-->
<!-- <a-button @click="handleCancel" type="danger">{{$t('cancel')}}</a-button>-->
<!-- </div>-->
</a-drawer>
<classificationMaintenanceAdd ref="classificationMaintenanceAddRef"
@classificationMaintenanceAddForm="classificationMaintenanceAddForm"/>
@@ -46,9 +46,9 @@
</div>
</div>
<div class="drawer-bootom-button">
<a-button @click="handleCancel" type="danger">{{$t('cancel')}}</a-button>
</div>
<!-- <div class="drawer-bootom-button">-->
<!-- <a-button @click="handleCancel" type="danger">{{$t('cancel')}}</a-button>-->
<!-- </div>-->
</a-drawer>
<countryCardReleaseModelAdd ref="countryCardReleaseModelAddRef"
@countryCardReleaseModelAddForm="countryCardReleaseModelAddForm"/>
@@ -3,9 +3,9 @@
<div class="doc-detail-wrap">
<div class="doc-detail-header" style="position: fixed;top: 0">
<div class="doc-detail-title">
<!-- <span style="line-height: 66px;display: inline-block;float: left">-->
<!-- <a-icon type="arrow-left" style="margin-right: 6px;"/>-->
<!-- </span>-->
<!-- <span style="line-height: 66px;display: inline-block;float: left">-->
<!-- <a-icon type="arrow-left" style="margin-right: 6px;"/>-->
<!-- </span>-->
{{header_text}}
</div>
</div>
@@ -35,7 +35,7 @@
</div>
</div>
<div class="content-box-box" v-else>
<div class="content-box-box" :class="{'content-box-box-color':index % 2 == 1 ? true : false}" v-else>
<a v-if="index2 == 0 && item2.relevantUrl"
style="color: rgb(33, 201, 204)"
:class="{'content-box-box-text-admin':!item2.lableName || item2.lableName == 'null' || item2.lableName == 'undefined'? true : false}"
@@ -116,7 +116,7 @@
}
},
mounted() {
document.title = 'Country Card'+ '-' + this.$t('details')
document.title = 'Country Card' + '-' + this.$t('details')
this.queryCountry(() => {
this.replacePage()
})
@@ -385,8 +385,8 @@
.content-box-box {
width: 340px;
display: inline-block;
height: 80px;
line-height: 80px;
height: 60px;
line-height: 60px;
text-align: center;
background: #fff;
border-right: 1px #d9d9d9 solid;
@@ -421,7 +421,7 @@
}
.content-box-top {
height: 80px;
height: 60px;
}
.content-box-top:first-child {
@@ -442,6 +442,10 @@
}
.content-box-box-text-admin {
height: 80px !important;
height: 60px !important;
}
.content-box-box-color {
background: #f2f2f2;
}
</style>
@@ -41,9 +41,9 @@
</div>
</div>
<div class="drawer-bootom-button">
<a-button @click="handleCancel" type="danger">{{$t('cancel')}}</a-button>
</div>
<!-- <div class="drawer-bootom-button">-->
<!-- <a-button @click="handleCancel" type="danger">{{$t('cancel')}}</a-button>-->
<!-- </div>-->
</a-drawer>
<optionMaintenanceAdd ref="optionMaintenanceAddRef"
@optionMaintenanceAddForm="optionMaintenanceAddForm"/>
@@ -2,7 +2,7 @@
<div class="doc-detail">
<div class="doc-detail-wrap">
<div class="doc-detail-header" style="position: fixed;top: 0">
<div class="doc-detail-title">
<div class="doc-detail-title" :title="queryForm.title">
<!-- <span style="line-height: 66px;display: inline-block;float: left">-->
<!-- <a-icon type="arrow-left" @click="back" style="margin-right: 6px;"/>-->
<!-- </span>-->
@@ -15,76 +15,99 @@
</div>
</div>
</div>
<div style="padding-top: 68px;background: #fff">
<div class="detail-content" style="padding: 24px">
<div class="content-text-top">
<span style="margin-right: 10px">
{{$t('issuedBy')}}:{{this.queryForm.createBy}}
</span>
<span>
{{$t('releaseDate')}}:{{this.queryForm.createTime?this.queryForm.createTime.slice(0,11):''}}
</span>
</div>
<div class="content-text">
<div class="text-field" v-for="(item,index) in standardContentList" :key="index">
<span class="text-field-left" :title="item.title">{{item.title}}</span>
<span class="text-field-right text-field-right-url"
@click="clickButtonToUpload(queryForm[item.value])"
v-if="item.type == 2 && queryForm[item.value]"
>{{ $t('viewFile') }}</span>
<div class="doc-detail-box">
<div style="padding-top: 68px;" class="doc-detail-box-text">
<div class="detail-content" style="padding: 24px">
<!-- <div class="content-text-top">-->
<!-- <span style="margin-right: 10px">-->
<!-- {{$t('issuedBy')}}:{{this.queryForm.createBy}}-->
<!-- </span>-->
<!-- <span>-->
<!-- {{$t('releaseDate')}}:{{this.queryForm.createTime?this.queryForm.createTime.slice(0,11):''}}-->
<!-- </span>-->
<!-- </div>-->
<div class="content-text">
<div class="text-field" v-for="(item,index) in standardContentList" :key="index">
<span class="text-field-left" :title="item.title">{{item.title}}</span>
<span class="text-field-right text-field-right-url"
@click="clickButtonToUpload(queryForm[item.value])"
v-if="item.type == 2 && queryForm[item.value]"
>{{ $t('viewFile') }}</span>
<span class="text-field-right"
:title="queryForm[item.value]" v-else>
<span class="text-field-right"
:title="queryForm[item.value]" v-else>
{{queryForm[item.value]}}
</span>
</div>
</div>
</div>
<div class="content" v-html="queryForm.content"></div>
<div class="content-icon">
<div class="division"></div>
<div class="content ql-editor" v-html="queryForm.content"></div>
<div class="content-icon">
<span class="content-icon-text">
<a-icon class="icon" type="eye"/>
<span>{{this.queryForm.browsingHistoryCount}}</span>
</span>
<span class="content-icon-text" @click="likeClick()">
<span class="content-icon-text" @click="likeClick()">
<a-icon class="icon" :class="{'icon-active':this.isPraise}" type="like"/>
<span>{{this.queryForm.praiseCount}}</span>
</span>
<span class="content-icon-text" @click="starClick()">
<span class="content-icon-text" @click="starClick()">
<a-icon class="icon" :class="{'icon-active':this.isCollect}" type="star"/>
<span>{{this.queryForm.collectCount}}</span>
</span>
</div>
<div class="box-text">
<div class="header-text">
{{$t('comment')}}
</div>
</div>
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<a-form-model-item class="itemModel" prop="commentContent">
<a-textarea :placeholder="$t('pleaseEnter')+$t('comment')"
v-model.trim="formInline.commentContent"
:rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
<div class="content-button">
<a-button class="header-btn submit" :loading="loading" @click="release" type="primary">{{$t('release')}}
</a-button>
</div>
<div v-for="(item,index) in releaseList">
<div class="box-text">
<div class="division"></div>
<div class="box-text" style="margin-top: 24px">
<div class="header-text">
<span style="margin-right: 20px">{{item.createBy}}</span>
{{item.createTime}}
{{$t('comment')}}
</div>
</div>
<div class="content">
{{item.commentContent}}
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<a-form-model-item class="itemModel" prop="commentContent">
<a-textarea :placeholder="$t('pleaseEnter')+$t('comment')"
v-model.trim="formInline.commentContent"
:rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
<div class="content-button">
<a-button class="header-btn submit" :loading="loading" @click="release" type="primary">{{$t('release')}}
</a-button>
</div>
<div v-for="(item,index) in releaseList" style="margin-bottom: 30px">
<div class="box-text-index">
<div class="header-text-index">
<span style="margin-right: 20px" class="header-text-index-left">{{item.createBy}}</span>
<span class="header-text-index-text">{{item.createTime}}</span>
<span class="box-icon" @click="messageClick(item)">
<a-icon type="message"/>
</span>
</div>
</div>
<div class="content-index">
{{item.commentContent}}
</div>
<div class="box-comment"
v-for="(val,index1) in item.problemKnowledgeBaseCommentVOList"
v-if="item.problemKnowledgeBaseCommentVOList && item.problemKnowledgeBaseCommentVOList.length > 0">
<div class="box-text-index">
<div class="header-text-index">
<span style="margin-right: 20px" class="header-text-index-left">{{val.createBy}}</span>
<span class="header-text-index-text">{{val.createTime}}</span>
<span class="box-icon" @click="messageClick(item)">
<a-icon type="message"/>
</span>
</div>
</div>
<div class="content-index">
{{val.commentContent}}
</div>
</div>
</div>
</div>
</div>
@@ -92,6 +115,34 @@
</div>
<viewFileModel ref="viewFileModelRef"/>
<SelectedBy ref="SelectedByRef" :title="$t('forward')" @SelectedByForm="SelectedByForm"></SelectedBy>
<a-modal
:title="$t('replyToComments')"
:width="700"
:visible="visibleComment"
:confirm-loading="confirmLoading"
:maskClosable="false"
@ok="handleOkComment"
@cancel="handleCancelComment"
>
<a-form-model :model="formInlineComment" class="formAdd" :rules="rulesComment" ref="ruleFormComment">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text" :title="$t('replyToComments')">{{$t('replyToComments')}}</span>
</div>
<a-form-model-item class="itemModel" :prop="'replyContent'">
<a-textarea
:placeholder="$t('PleaseEnter')+$t('replyToComments')"
:disabled="false"
v-model="formInlineComment.replyContent" :rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</div>
</template>
@@ -100,6 +151,10 @@
import SelectedBy from '@/components/SelectedBy/index'
import { getAction, postAction, downloadFile, putAction } from '@/api/manage'
import { mapGetters } from 'vuex'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
import { quillEditor } from 'vue-quill-editor'
export default {
name: 'problemKnowledgeBaseView',
@@ -109,6 +164,10 @@
},
data() {
return {
visibleComment: false,
confirmLoading: false,
CommentQuery: {},
formInlineComment: {},
standardContentList: [
{
title: this.$t('problemClassification'),
@@ -122,9 +181,17 @@
title: this.$t('standardNo'),
value: 'standNumber'
},
// {
// title: this.$t('title'),
// value: 'title'
// },
{
title: this.$t('title'),
value: 'title'
title:this.$t('issuedBy'),
value: 'createBy'
},
{
title:this.$t('releaseDate'),
value: 'createTime'
},
{
title: this.$t('enclosure'),
@@ -134,6 +201,20 @@
],
queryForm: {},
formInline: {},
rulesComment: {
replyContent: [
{
required: true,
message: this.$t('replyToComments') + this.$t('cannotEmpty'),
trigger: 'blur'
},
{
max: 300,
message: this.$t('replyToComments') + this.$t('cannotExceed') + 300 + this.$t('Characters'),
trigger: 'blur'
}
]
},
rules: {
commentContent: [
{
@@ -156,6 +237,39 @@
},
methods: {
...mapGetters(['userInfo']),
messageClick(val) {
this.CommentQuery = val
this.visibleComment = true
this.formInlineComment = {}
this.$nextTick(() => {
this.$refs.ruleFormComment.clearValidate()
})
},
handleOkComment() {
this.$refs.ruleFormComment.validate(valid => {
if (valid) {
let query = {
commentId: this.CommentQuery.id,
replyContent: this.formInlineComment.replyContent
}
this.confirmLoading = true
postAction('/project/problemKnowledgeBaseReplyEO/add', query).then((res) => {
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'))
this.visibleComment = false
this.confirmLoading = false
this.releaseData()
} else {
this.confirmLoading = false
this.$message.success(this.$t('operationFailed'))
}
})
}
})
},
handleCancelComment() {
this.visibleComment = false
},
SelectedByForm(userIds) {
let query = {
userIds: userIds,
@@ -311,7 +425,6 @@
.doc-detail {
background: #fff;
height: 100%;
.doc-detail-wrap {
.doc-detail-header {
width: 100%;
@@ -415,7 +528,7 @@
.text-field-right-url {
color: #00B3BE !important;
cursor: pointer;
margin-top: 10px;
/*margin-top: 10px;*/
}
}
}
@@ -425,6 +538,9 @@
color: #040B29;
font-weight: 400;
word-break: break-word;
padding: 24px 0;
box-sizing: border-box;
margin-top: 32px;
}
.content-icon {
@@ -449,12 +565,12 @@
}
.content-icon-text .icon {
font-size: 24px;
font-size: 20px;
color: #3b4249 !important;
}
.content-icon-text .icon-active {
font-size: 24px;
font-size: 20px;
color: #00B3BE !important;
}
@@ -532,10 +648,80 @@
.content-text-top {
width: 100%;
text-align: right;
color: #040B29;
color: #6F7385;
font-weight: 400;
font-size: 16px;
font-size: 14px;
margin-bottom: 20px;
}
.doc-detail-box {
width: 100%;
background: #f2f2f2;
}
.doc-detail-box-text {
width: 75%;
margin: 0 auto;
background: #fff;
/*position: absolute;*/
min-height: 100vh;
/*left: 50%;*/
/*transform: translateX(-50%);*/
}
.division {
height: 20px;
position: absolute;
left: 0;
width: 100%;
background: #f2f2f2;
margin-top: 20px;
}
.content-index {
font-size: 14px;
color: #000F16;
font-weight: 400;
word-break: break-word;
padding: 12px 0;
box-sizing: border-box;
}
.header-text-index {
font-size: 16px;
font-weight: 400;
margin-top: 10px;
height: 35px;
color: #000F16;
line-height: 40px;
}
.box-icon {
margin-right: 10px;
float: right;
cursor: pointer;
}
.box-comment {
width: calc(100% - 80px);
margin-left: 80px;
background: #f2f2f2;
padding: 6px 24px;
box-sizing: border-box;
}
.Required {
color: red;
margin-right: 4px;
}
.header-text-index-left {
font-size: 16px;
font-weight: 700;
}
.header-text-index-text {
font-size: 14px;
color: #848684;
}
</style>
@@ -75,7 +75,8 @@
title: this.$t('clauseNo'),
dataIndex: 'itemNum',
align: 'center',
ellipsis: true
ellipsis: true,
width: 120
},
{
title: this.$t('clauseName'),
@@ -11,7 +11,7 @@
<div class="myList-box-content-box" v-for="(item,index) in dataSource" :key="index" @click="prcClick(item)">
<div class="top">
<span class="top-text" :title="item.prcName">{{item.prcName}}</span>
<span class="top-admin" :title="prcTypeName[item.prcType]">{{prcTypeName[item.prcType]}}</span>
<!-- <span class="top-admin" :title="prcTypeName[item.prcType]">{{prcTypeName[item.prcType]}}</span>-->
</div>
<div class="button">
{{item.creatTime}}
@@ -161,25 +161,24 @@
font-family: Blue Sky Noto;
font-weight: 400;
color: #040B29;
max-width: 50%;
max-width: calc(100% - 72px);
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.top-admin {
font-size: 16px;
font-family: Blue Sky Noto;
display: inline-block;
font-weight: 400;
color: #040B29;
margin-left: 4px;
max-width: calc(50% - 72px);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/*.top-admin {*/
/* font-size: 16px;*/
/* font-family: Blue Sky Noto;*/
/* display: inline-block;*/
/* font-weight: 400;*/
/* color: #040B29;*/
/* margin-left: 4px;*/
/* max-width: calc(50% - 72px);*/
/* overflow: hidden;*/
/* text-overflow: ellipsis;*/
/* white-space: nowrap;*/
/*}*/
}
.button {
@@ -51,6 +51,7 @@
</div>
<div class="detail-content-content-right-data-text" v-html="item.itemsText"></div>
</div>
<JLoading :loading="loadingText">{{$t('dataLoading')}}</JLoading>
</div>
</div>
</div>
@@ -143,7 +144,7 @@
</template>
<script>
import { postAction, putAction } from '../../../../api/manage'
import { postAction, putAction, getAction } from '../../../../api/manage'
export default {
name: 'documentDataComparison',
@@ -152,6 +153,7 @@
formInline: {},
formInlineText: {},
dataLoadingText: '',
loadingText:false,
rules: {
comment: [
{
@@ -322,6 +324,7 @@
detailLeft[num].classList.add('detail-content-content-right-data-color')
}
this.dataLeft = item
this.dataLeft.numIndex = num
if (this.isMatching) {
let detailRightColor = document.getElementsByClassName('detail-content-content-right-data-color-right')
if (detailRightColor && detailRightColor.length > 0) {
@@ -335,6 +338,8 @@
detailRight[item.targetStand].classList.add('detail-content-content-right-data-color-right')
detailContent[0].scrollTop = detailRight[item.targetStand].offsetTop - 150
}
this.dataRight.numIndex = item.targetStand
this.clauseComparison()
}
}
},
@@ -352,6 +357,7 @@
detailRight[num].classList.add('detail-content-content-right-data-color-right')
}
this.dataRight = item
this.dataRight.numIndex = num
if (this.isMatching) {
let detailLeftColor = document.getElementsByClassName('detail-content-content-right-data-color')
if (detailLeftColor && detailLeftColor.length > 0) {
@@ -359,15 +365,34 @@
}
if (item.targetStand > -1) {
this.dataLeft = this.resultData.textLeft[item.targetStand]
this.dataLeft.numIndex = item.targetStand
let detailContent = document.getElementsByClassName('detail-content-content-right-top')
let detailLeft = document.getElementsByClassName('detail-content-content-right-data')
if (detailLeft && detailLeft.length > 0 && item.targetStand >= 0) {
detailLeft[item.targetStand].classList.add('detail-content-content-right-data-color')
detailContent[0].scrollTop = detailLeft[item.targetStand].offsetTop - 150
}
this.clauseComparison()
// this.resultData = { ...this.resultData }
}
}
},
clauseComparison() {
let query = {
leftId: this.dataLeft.id,
rightId: this.dataRight.id
}
this.loadingText = true
getAction('/compare/sarFileCompareItem/clauseComparison', query).then((res) => {
if (res.success) {
this.loadingText = false
this.resultData.textLeft[this.dataLeft.numIndex].itemsText = res.result[0]
this.resultData.textRight[this.dataRight.numIndex].itemsText = res.result[1]
}else{
this.loadingText = false
}
})
},
onSelectLeft(selectedKeys, exports) {
let node = exports.node.$vnode.data.props.dataRef
let detailLeft = document.getElementsByClassName('detail-content-content-right-data')
@@ -377,7 +402,7 @@
return
}
for (let i = 0; i < this.resultData.textLeft.length; i++) {
if (node.parentId && node.itemName == this.resultData.textLeft[i].itemsName) {
if (node.parentId && node.menuId == this.resultData.textLeft[i].menuId) {
detailContent[0].scrollTop = detailLeft[i].offsetTop - 150
return
}
@@ -392,7 +417,7 @@
return
}
for (let i = 0; i < this.resultData.textRight.length; i++) {
if (node.parentId && node.itemName == this.resultData.textRight[i].itemsName) {
if (node.parentId && node.menuId == this.resultData.textRight[i].menuId) {
detailContent[0].scrollTop = detailRight[i].offsetTop - 150
return
}
@@ -642,4 +667,13 @@
border: 1px red solid;
}
::v-deep .delClass {
background: #ff7168;
font-weight: 700;
}
::v-deep .insertClass {
background: rgba(85, 183, 255, .6);
font-weight: 700;
}
</style>
+2 -2
View File
@@ -131,7 +131,7 @@
:columns="columns"
>
<span slot="projectName" slot-scope="text,record" :title="text">
{{ text && text.length > 15 ? text.slice(0, 14) + '...' : text }}
{{ text && text.length > 20 ? text.slice(0, 18) + '...' : text }}
</span>
<span slot="fileName" slot-scope="text,record" :title="text">
{{ text && text.length > 15 ? text.slice(0, 14) + '...' : text }}
@@ -366,7 +366,7 @@ export default {
align: 'center',
dataIndex: 'fileDescription',
scopedSlots: { customRender: 'projectName' },
width: 150
width: 300
},
{
title: this.$t('uploadedBy'),
@@ -434,7 +434,9 @@ export default {
<style lang="less" scoped>
@import '~@assets/less/common.less';
/deep/.ant-card-body{
margin-top: -28px;
}
.doc-detail {
background: #fff;
height: 100%;
@@ -44,7 +44,7 @@
:columns="columns"
>
<span slot="projectName" slot-scope="text,record" :title="text">
{{ text && text.length > 25 ? text.slice(0, 24) + '...' : text }}
{{ text && text.length > 15 ? text.slice(0, 14) + '...' : text }}
</span>
<span slot="templateName" slot-scope="text,record" :title="text">
{{ text && text.length > 25 ? text.slice(0, 21) + '...' : text }}