合并分支 'dev_third_stage' 到 'master'

Dev third stage

查看合并请求 laws-nio/laws-weilai!78
This commit is contained in:
李雪涛
2022-07-12 15:19:56 +08:00
31 changed files with 1011 additions and 108 deletions
@@ -239,6 +239,10 @@ CREATE TABLE `laws_technology_evaluation` (
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '法规技术评估表' ROW_FORMAT = DYNAMIC;
-- 上报库认证类别参数信息 添加字段 2022-07-11
ALTER TABLE `laws_weilai`.`report_cert_category_params_info`
ADD COLUMN `params_manifest_id` varchar(50) NULL COMMENT '上报库id' AFTER `version`;
-- 法规技术评估-流程明细表
CREATE TABLE `laws_technology_evaluation_flow_detail` (
`id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
@@ -322,3 +326,11 @@ CREATE TABLE `laws_technology_evaluation_result` (
`acti_proc_inst_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '流程实例id',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '法规技术评估-评估结果表' ROW_FORMAT = Dynamic;
-- 增加评估方式树形字典。
INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `create_by`, `create_time`, `update_by`, `update_time`, `sys_org_code`, `sys_dict_id`, `has_child`, `en_name`, `description`, `is_tag_dict`, `attribute_type`, `is_read_only`, `del_flag`, `item_value`, `sort_order`) VALUES ('1546745025973256194', '0', '评1', NULL, 'admin', '2022-07-12 14:35:26', 'admin', '2022-07-12 14:36:36', 'A01', '1546744902203539458', '1', 'P1', '333', 1, NULL, NULL, 0, NULL, 1);
INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `create_by`, `create_time`, `update_by`, `update_time`, `sys_org_code`, `sys_dict_id`, `has_child`, `en_name`, `description`, `is_tag_dict`, `attribute_type`, `is_read_only`, `del_flag`, `item_value`, `sort_order`) VALUES ('1546745149692641282', '0', '评2', NULL, 'admin', '2022-07-12 14:35:55', NULL, NULL, 'A01', '1546744902203539458', NULL, 'P2', NULL, 1, NULL, NULL, 0, NULL, 2);
INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `create_by`, `create_time`, `update_by`, `update_time`, `sys_org_code`, `sys_dict_id`, `has_child`, `en_name`, `description`, `is_tag_dict`, `attribute_type`, `is_read_only`, `del_flag`, `item_value`, `sort_order`) VALUES ('1546745318161055745', '1546745025973256194', '评1+1', NULL, 'admin', '2022-07-12 14:36:36', NULL, NULL, 'A01', '1546744902203539458', NULL, 'P1+1', NULL, 1, NULL, NULL, 0, NULL, 1);
INSERT INTO `sys_dict` (`id`, `dict_name`, `dict_code`, `description`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`, `type`, `dict_en_name`, `is_tag_dict`, `is_read_only`, `attribute_type`, `order_num`) VALUES ('1546744902203539458', '评估方式', 'evaluation_method', '评估方式', 0, 'admin', '2022-07-12 14:34:56', NULL, NULL, NULL, NULL, 1, 0, '2', 1);
@@ -1552,6 +1552,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
ReportCertCategoryParamsInfoEO addCcpi = new ReportCertCategoryParamsInfoEO();
BeanUtils.copyProperties(ccpi, addCcpi);
addCcpi.setId(UUID.randomUUID().toString().replace("-",""));
addCcpi.setParamsManifestId(reportId); // 绑定上报库
addReportCertCategoryParamsInfoEOList.add(addCcpi);
}
@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.system.base.controller.JeroController;
import com.jero.modules.cert.report.entity.ParamsReportConfigEO;
import com.jero.modules.cert.report.entity.ParamsReportDetailEO;
import com.jero.modules.cert.report.service.IParamsReportConfigEOService;
import com.jero.modules.cert.report.service.IParamsReportDetailEOService;
import com.jero.modules.cert.report.vo.ParamsReportDetailVO;
import io.swagger.annotations.Api;
@@ -38,6 +40,9 @@ public class ParamsReportDetailEOController extends JeroController<ParamsReportD
@Autowired
private IParamsReportDetailEOService paramsReportDetailEOService;
@Autowired
private IParamsReportConfigEOService paramsReportConfigEOService;
/**
* 表头中英文切换
*
@@ -148,4 +153,27 @@ public class ParamsReportDetailEOController extends JeroController<ParamsReportD
paramsReportDetailEOService.exportCustom(paramsReportDetailVO, response, request);
}
// @ApiOperation(value = "上报库参数项-自定义导出excel")
// @GetMapping(value = "/exportCustomExcel")
//// @RequiresPermissions("report:detail:export:custom")
// public void exportCustomExcel(ParamsReportDetailVO paramsReportDetailVO,
// HttpServletResponse response,
// HttpServletRequest request) {
// paramsReportDetailEOService.exportCustomExcel(paramsReportDetailVO, response, request);
// }
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "上报库参数配置-查看单个详情")
@ApiOperation(value="上报库参数配置-查看单个详情", notes="上报库参数配置-查看单个详情")
@GetMapping(value = "/getConfig")
// @RequiresPermissions("report:detail:list")
public Result<ParamsReportConfigEO> getById(@RequestParam(name = "id") String id) {
ParamsReportConfigEO paramsReportConfigEO = paramsReportConfigEOService.getById(id);
return Result.OK(paramsReportConfigEO);
}
}
@@ -29,4 +29,8 @@ public class ReportCertCategoryParamsInfoEO extends CertCategoryParamsInfoEO imp
@ApiModelProperty(value = "发布时版本")
private Integer version;
/**上报库id*/
@ApiModelProperty(value = "上报库id")
private String paramsManifestId;
}
@@ -103,10 +103,11 @@
prd.id as id,
prd.nio_number as nio_number,
prd.params_name as params_name,
prd.control_type as control_type,
rccpi.params_number as cert_number,
rccpi.params_name as cert_params_name
from params_report_detail prd
left join report_cert_category_params_info rccpi on prd.nio_number = rccpi.nio_number
left join report_cert_category_params_info rccpi on (prd.params_manifest_id = rccpi.params_manifest_id and prd.nio_number = rccpi.nio_number)
<include refid="BaseQuerySqlForExport"/>
<if test="idList != null and idList.size > 0">
and prd.id in
@@ -15,5 +15,6 @@
<result column="cert_category" property="certCategory" />
<result column="params_template_id" property="paramsTemplateId" />
<result column="version" property="version" />
<result column="params_manifest_id" property="paramsManifestId" />
</resultMap>
</mapper>
@@ -588,7 +588,8 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl<ParamsReportDet
// 添加导出历史
String uploadFileName = fileOriName + ".zip";
MultipartFile mFile = new MockMultipartFile(uploadFileName, uploadFileName, ContentType.APPLICATION_OCTET_STREAM.toString(), fis); // 用于上传
InputStream uploadFileio = new FileInputStream(new File(fileNowPath+".zip"));
MultipartFile mFile = new MockMultipartFile(uploadFileName, uploadFileName, "text/plain", uploadFileio); // 用于上传
OSSFile ossFile = ossFileService.uploadLocalOfCos(mFile, "/report", "", CutEnum.CN.getValue()); // 上传导出的压缩包
ParamsReportExportHistoryEO paramsReportExportHistoryEO = new ParamsReportExportHistoryEO();
paramsReportExportHistoryEO.setExportType(ExportTypeEnum.NORMAL.getValue());
@@ -597,6 +598,7 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl<ParamsReportDet
paramsReportExportHistoryEO.setExportTime(new Date());
paramsReportExportHistoryEOService.add(paramsReportExportHistoryEO);
uploadFileio.close();
os.flush();
os.close(); // 后开先关
fis.close(); // 先开后关
@@ -77,10 +77,10 @@ public class ParamsInfoEO implements Serializable {
private String paramsName;
/**技术领域*/
@Excel(name = "*技术领域", width = 15)
// @Excel(name = "*技术领域", width = 15)
// @Dict(dicCode = "technology_territory")
@ApiModelProperty(value = "技术领域")
private String technologyTerritory;
private String technologyTerritory; // 2022-07-12 需求去掉技术领域
/**参数批次*/
@Excel(name = "*参数批次", width = 15, dicCode = "params_batch")
@@ -455,7 +455,7 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
if (CutEnum.CN.getValue().equals(cut)) {
// 查询导出数据
List<ParamsInfoEO> paramsInfoEOList = paramsInfoEOMapper.selectListWithCert(paramsInfoVO); // 中文数据导出
getTreeDictItemText(paramsInfoEOList, cut);
// getTreeDictItemText(paramsInfoEOList, cut);
List<Map<String, Object>> sheetsList = new ArrayList<>();
sheetsList = getCnExportSheetsList(paramsInfoEOList, fileNowPath, paramsTemplateId);
workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.XSSF);
@@ -463,7 +463,7 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
} else if (CutEnum.EN.getValue().equals(cut)) {
// 查询导出数据
List<ParamsInfoEnExport> paramsInfoEnExportList = paramsInfoEOMapper.selectListWithCertForEnExport(paramsInfoVO); // 英文数据导出
getTreeDictItemTextForEnExport(paramsInfoEnExportList);
// getTreeDictItemTextForEnExport(paramsInfoEnExportList);
List<Map<String, Object>> sheetsList = new ArrayList<>();
sheetsList = getEnExportSheetsList(paramsInfoEnExportList, fileNowPath, paramsTemplateId);
workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.XSSF);
@@ -839,7 +839,7 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
// 第几个sheet页
if (numSheet == 0) { // 企业参数表
if (CutEnum.EN.getValue().equals(cut)) {
String fields[] ={ "*NIO Number", "*Is Must", "*Params Name","*Technical Field","*Params Batch","*Duty Territory",
String fields[] ={ "*NIO Number", "*Is Must", "*Params Name","*Params Batch","*Duty Territory",
"Description", "*Control Type", "Control Verify", "Control Values", "File Template"};
params.setImportFields(fields);
@@ -847,7 +847,7 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
List<ParamsInfoEnImport> paramsInfoEOListEn = resultEn.getList();
copyParamsInfoList(paramsInfoEOListEn, paramsInfoEOList);
} else {
String fields[] ={ "*NIO编号", "*是否必填", "*参数名称","*技术领域","*参数批次","*责任领域",
String fields[] ={ "*NIO编号", "*是否必填", "*参数名称","*参数批次","*责任领域",
"参数说明", "*控件类型", "控件校验", "控件备选值", "附件模板"};
params.setImportFields(fields);
@@ -1069,7 +1069,7 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
String cut){
List<CertCategoryParamsInfoCnImport> certCategoryParamsInfoEOList = new ArrayList<>();
// 树形数据字典
List<SysCategory> categoryList = sysCategoryService.queryByTreeDicCode("technology_territory");
// List<SysCategory> categoryList = sysCategoryService.queryByTreeDicCode("technology_territory");
// 普通数据字典
List<SysDictItem> dictItemList = new ArrayList<>();
List<String> dictCodeList = new ArrayList<>();
@@ -1091,12 +1091,12 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
//普通数据字典
List<String> itemNameList = new ArrayList<>();
if (CutEnum.CN.getValue().equals(cut)) {
treeNameList = categoryList.stream().map(SysCategory::getName).collect(Collectors.toList());
// treeNameList = categoryList.stream().map(SysCategory::getName).collect(Collectors.toList());
itemNameList = dictItemList.stream().map(SysDictItem::getItemText).collect(Collectors.toList());
certCategoryMap = dictItemList.stream().filter(e->"cert_category".equals(e.getDictCode())).collect(Collectors.toMap(c->c.getItemText(),c->c.getItemValue()));
} else if(CutEnum.EN.getValue().equals(cut)){
treeNameList = categoryList.stream().map(SysCategory::getEnName).collect(Collectors.toList());
// treeNameList = categoryList.stream().map(SysCategory::getEnName).collect(Collectors.toList());
itemNameList = dictItemList.stream().map(SysDictItem::getEnName).collect(Collectors.toList());
certCategoryMap = dictItemList.stream().filter(e->"cert_category".equals(e.getDictCode())).collect(Collectors.toMap(c->c.getEnName(),c->c.getItemValue()));
@@ -1177,15 +1177,15 @@ public class ParamsInfoEOServiceImpl extends ServiceImpl<ParamsInfoEOMapper, Par
countError += (int)resultMap.get("countError");
// 技术领域
String technologyTerritory = dto.getTechnologyTerritory();
resultMap = validateMustAndLength(technologyTerritory, "技术领域", "Technical Field", IsMustEnum.YES.getValue(), "1000", false, cut);
errorMsg += (String)resultMap.get("errorMsg");
countError += (int)resultMap.get("countError");
resultMap = getCodeByName(technologyTerritory,"技术领域", "Technical Field","treeDicCode",null,treeNameList,categoryList,cut);
errorMsg += (String)resultMap.get("errorMsg");
countError += (int)resultMap.get("countError");
technologyTerritory = (String)resultMap.get("value");
dto.setTechnologyTerritory(technologyTerritory);
// String technologyTerritory = dto.getTechnologyTerritory();
// resultMap = validateMustAndLength(technologyTerritory, "技术领域", "Technical Field", IsMustEnum.YES.getValue(), "1000", false, cut);
// errorMsg += (String)resultMap.get("errorMsg");
// countError += (int)resultMap.get("countError");
// resultMap = getCodeByName(technologyTerritory,"技术领域", "Technical Field","treeDicCode",null,treeNameList,categoryList,cut);
// errorMsg += (String)resultMap.get("errorMsg");
// countError += (int)resultMap.get("countError");
// technologyTerritory = (String)resultMap.get("value");
// dto.setTechnologyTerritory(technologyTerritory);
// 参数批次
String paramsBatch = dto.getParamsBatch();
@@ -28,7 +28,7 @@ public class ParamsInfoCnImport {
private String paramsName;
/**技术领域*/
@Excel(name = "*技术领域", width = 15)
// @Excel(name = "*技术领域", width = 15)
@ApiModelProperty(value = "技术领域")
private String technologyTerritory;
@@ -60,8 +60,8 @@ public class ParamsInfoEnExport {
private String paramsName;
/**技术领域*/
@Excel(name = "*Technical Field", width = 15)
// @Dict(dicCode = "technology_territory")
// @Excel(name = "*Technical Field", width = 15)
//// @Dict(dicCode = "technology_territory")
@ApiModelProperty(value = "技术领域")
private String technologyTerritory;
@@ -28,7 +28,7 @@ public class ParamsInfoEnImport {
private String paramsName;
/**技术领域*/
@Excel(name = "*Technical Field", width = 15)
// @Excel(name = "*Technical Field", width = 15)
@ApiModelProperty(value = "技术领域")
private String technologyTerritory;
@@ -594,4 +594,13 @@ public class SysCategoryController {
return Result.OK(sysCategoryService.getSysCategoryTree(flag));
}
/**
* 只查询评估方式的树形数据字典
* @return
*/
@GetMapping("/getEvaluationMethodTree")
public Result getevaluationMethodTree() {
String flag = "evaluation_method";
return Result.OK(sysCategoryService.getSysCategoryTree(flag));
}
}
@@ -273,6 +273,8 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
String dictId = "";
if("deliverable_template".equals(flag)){
dictId = sysCategoryMapper.getDictId("deliverable_template");
}else if("evaluation_method".equals(flag)){
dictId = sysCategoryMapper.getDictId("evaluation_method");
}else{
dictId = sysCategoryMapper.getFieldInfo("technology_territory");
}
@@ -3,6 +3,7 @@ package com.jero.modules.lawsOpinionGather.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -19,7 +20,6 @@ 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;
@@ -153,10 +153,23 @@ public class LawsOpinionAssessmentResultEOController extends JeroController<Laws
* @param request
* @param lawsOpinionAssessmentResultEO
*/
@RequestMapping(value = "/exportXls")
/*@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, LawsOpinionAssessmentResultEO lawsOpinionAssessmentResultEO) {
return super.exportXls(request, lawsOpinionAssessmentResultEO, LawsOpinionAssessmentResultEO.class, "法规意见收集-评估结果表");
}
}*/
/**
* 导出excel
* @param response
* @param request
* @param lawsOpinionAssessmentResultEO
*/
@RequestMapping(value = "/exportXls")
public void exportXls(HttpServletResponse response,HttpServletRequest request,
LawsOpinionAssessmentResultEO lawsOpinionAssessmentResultEO,
@RequestParam Map<String,Object> params) {
this.lawsOpinionAssessmentResultEOService.exportXls(response,request, lawsOpinionAssessmentResultEO,params);
}
/**
* 通过excel导入数据
@@ -4,6 +4,7 @@ import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -82,6 +83,8 @@ public class LawsOpinionAssessmentResultEO implements Serializable {
@Excel(name = "附件", width = 15)
@ApiModelProperty(value = "附件")
private String accessoryFile;
@TableField(exist = false)
private String accessoryFileName;
/**提出时间*/
@Excel(name = "提出时间", width = 15, format = "yyyy-MM-dd")
@@ -5,7 +5,9 @@ import com.jero.modules.lawsOpinionGather.entity.LawsOpinionAssessmentResultEO;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* @Description: 法规意见收集-评估结果表
@@ -67,4 +69,6 @@ public interface ILawsOpinionAssessmentResultEOService extends IService<LawsOpin
* @param json
*/
void insertBatch(JSONObject json);
void exportXls(HttpServletResponse response, HttpServletRequest request, LawsOpinionAssessmentResultEO lawsOpinionAssessmentResultEO, Map<String,Object> params);
}
@@ -1,23 +1,44 @@
package com.jero.modules.lawsOpinionGather.service.impl;
import cn.hutool.core.util.ZipUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.utils.IOUtils;
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.common.constant.enums.CutEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.oss.CosBootUtil;
import com.jero.modules.lawsOpinionGather.entity.LawsOpinionAssessmentResultEO;
import com.jero.modules.lawsOpinionGather.entity.LawsOpinionGatherEO;
import com.jero.modules.lawsOpinionGather.mapper.LawsOpinionAssessmentResultEOMapper;
import com.jero.modules.lawsOpinionGather.service.ILawsOpinionAssessmentResultEOService;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.system.util.PDFUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.shiro.SecurityUtils;
import org.aspectj.util.FileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Description: 法规意见收集-评估结果表
@@ -28,6 +49,12 @@ import javax.servlet.http.HttpServletRequest;
@Service
public class LawsOpinionAssessmentResultEOServiceImpl extends ServiceImpl<LawsOpinionAssessmentResultEOMapper, LawsOpinionAssessmentResultEO> implements ILawsOpinionAssessmentResultEOService {
@Value(value = "${jero.path.upload}")
private String uploadpath;
@Autowired
private IOSSFileService iOSSFileService;
/**
* 保存
*
@@ -125,4 +152,201 @@ public class LawsOpinionAssessmentResultEOServiceImpl extends ServiceImpl<LawsOp
this.saveBatch(lawsOpinionAssessmentResultEOList);
}
}
@Override
public void exportXls(HttpServletResponse response, HttpServletRequest request, LawsOpinionAssessmentResultEO lawsOpinionAssessmentResultEO, Map<String,Object> params) {
Integer pageNo = (Integer) params.get("pageNo");
Integer pageSize = (Integer) params.get("pageSize");
String exportAll = (String)params.get("exportAll");
String ids = (String)params.get("ids");
String cut = (String)params.get("cut");
String exportType = (String)params.get("exportType");
List<LawsOpinionAssessmentResultEO> exportData = new ArrayList<>();
QueryWrapper<LawsOpinionAssessmentResultEO> queryWrapper = QueryGenerator.initQueryWrapper(lawsOpinionAssessmentResultEO, request.getParameterMap());
if(StringUtils.isNotEmpty(ids)){
List<String> idList = Arrays.asList(ids.split(","));
queryWrapper.lambda().in(LawsOpinionAssessmentResultEO::getId,idList);
}
if(StringUtils.equals(exportAll,"yes")){
exportData = this.baseMapper.selectList(queryWrapper);
}else {
Page<LawsOpinionAssessmentResultEO> page = new Page<LawsOpinionAssessmentResultEO>(pageNo, pageSize);
IPage<LawsOpinionAssessmentResultEO> pageList = this.page(page, queryWrapper);
exportData = pageList.getRecords();
}
this.disposeData(exportData,cut);
String title = "";
String fileName = "";
if(StringUtils.equals(cut, CutEnum.CN.getValue())){
title = "相关章节,问题/建议,理由,附件,评估人,提出时间";
fileName = "评估结果 " + ".xlsx";
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
title = "Related section,IssueOrSuggest,Reason,Accessory,Evaluator,Submit Date";
fileName = "Evaluation results " + ".xlsx";
}
OutputStream os = null;
HSSFWorkbook workbook = new HSSFWorkbook();
try {
response.setHeader("Content-Disposition",
"attachment; filename=" + fileName);
response.setContentType("application/force-download");
HSSFSheet sheet = workbook.createSheet("sheet1");
CellStyle titleCellStyle = workbook.createCellStyle();
titleCellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直居中
titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//水平居中
titleCellStyle.setWrapText(true);//自动换行
Row firstRow = sheet.createRow(0);
//创建表头
String[] titleArr = title.split(",");
for (int i=0; i<=5; i++){
sheet.setColumnWidth(i,4000);
Cell cell = firstRow.createCell(i);
cell.setCellStyle(titleCellStyle);
cell.setCellValue(titleArr[i]);
}
//设置导出数据
if(CollectionUtils.isNotEmpty(exportData)) {
for (int dataIndex = 0; dataIndex < exportData.size(); dataIndex++) {
Row dataRow = sheet.createRow(dataIndex + 1);
dataRow.createCell(0).setCellValue(exportData.get(dataIndex).getRelatedSection());
dataRow.createCell(1).setCellValue(exportData.get(dataIndex).getIssueOrSuggest());
dataRow.createCell(2).setCellValue(exportData.get(dataIndex).getReason());
dataRow.createCell(3).setCellValue(exportData.get(dataIndex).getAccessoryFileName());
dataRow.createCell(4).setCellValue(exportData.get(dataIndex).getCreateBy());
String submitTimeStr = disposeDate(exportData.get(dataIndex).getSubmitTime());
dataRow.createCell(5).setCellValue(submitTimeStr);
}
}
if ("excel".equals(exportType)) {
os = response.getOutputStream();
workbook.write(os);
os.flush();
}else {
String path = uploadpath + "/tempZip/evaluationResults";
File fileTemp = new File(path);
if (fileTemp.exists()) {
fileTemp.delete();
}
fileTemp.mkdirs();
//excel
OutputStream excelOS = new FileOutputStream(path + File.separator + fileName);
workbook.write(excelOS);
excelOS.flush();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
for (LawsOpinionAssessmentResultEO data : exportData) {
String accessoryFile = data.getAccessoryFile();
List<OSSFile> fileInfosList = iOSSFileService.getFileInfos(accessoryFile);
if (fileInfosList.size() != 0) {
for (OSSFile ossFile : fileInfosList) {
String url = ossFile.getUrl();
//判断文件是否存在
if(StringUtils.isNotBlank(url)){
//判断文件是否存在
boolean b = CosBootUtil.doesObjectExist(url);
if(b){
InputStream download = CosBootUtil.download(url);
if(url.endsWith(".pdf") || url.endsWith(".PDF")){
String currentTime = sdf.format(new Date());
String waterContent = loginUser.getUsername() + " " + currentTime;
File newFile = PDFUtils.PDFWatermark(download,uploadpath,ossFile.getFileName(),waterContent);
download = new FileInputStream(newFile.getPath());
}
copyFile(download, path + File.separator + ossFile.getFileName());
}
}
}
}
}
ZipUtil.zip(path, path + ".zip");
//文件
FileInputStream fis = new FileInputStream(path + ".zip");
os = response.getOutputStream();
int len = 0;
while ((len = fis.read()) != -1) {
os.write(len);
}
os.flush();
fis.close();
}
}catch (IOException ex){
if(CutEnum.CN.getValue().equals(cut)){
throw new JeroBootException("下载文件失败");
}else{
throw new JeroBootException("Failed to download file");
}
}finally {
IOUtils.closeQuietly(os);
File file = new File(uploadpath + "/tempZip/evaluationResults");
FileUtil.deleteContents(file);
File fileTemp = new File(uploadpath + "/tempZip/evaluationResults.zip");
FileUtil.deleteContents(fileTemp);
}
}
public static void copyFile(InputStream in, String newFile) throws IOException {
File file2 = new File(newFile);
if (!file2.exists()) {
file2.createNewFile();
}
try (FileOutputStream ou = new FileOutputStream(newFile);) {
byte[] bs = new byte[1024];
int count = 0;
while ((count = in.read(bs, 0, bs.length)) != -1) {
ou.write(bs, 0, count);
}
ou.flush();
} catch (IOException e) {
e.printStackTrace();
throw new IOException("复制文件失败!");
} finally {
in.close();
}
}
/**
* 处理数据
* @param datas
* @param cut
*/
public void disposeData(List<LawsOpinionAssessmentResultEO> datas,String cut){
if(CollectionUtils.isNotEmpty(datas)){
for (LawsOpinionAssessmentResultEO data : datas) {
if(StringUtils.isNotEmpty(data.getAccessoryFile())){
List<OSSFile> accessoryFileList = iOSSFileService.getFileInfos(data.getAccessoryFile());
String accessoryFileName = accessoryFileList.stream().map(OSSFile::getFileName).collect(Collectors.joining(","));
data.setAccessoryFileName(accessoryFileName);
}
}
}
}
public String disposeDate(Date date){
String result = "";
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if(date != null){
result = sdf.format(date);
}
}catch (Exception ex){
ex.printStackTrace();
log.error("处理日期失败:" +ex.getMessage());
}
return result;
}
}
+4
View File
@@ -195,6 +195,10 @@ export function downloadFile(url, fileName, parameter, callback) {
}
} catch (e) {
if (!data || data.size === 0) {
index.showDrawer({
loading: false,
isTrue: isTrue
})
Vue.prototype['$message'].warning('文件下载失败')
return
}
+6
View File
@@ -1112,4 +1112,10 @@ module.exports = {
selectedStandard:'Selected standard',
standardDecompositionDocument:'Standard decomposition document',
pleaseSelectStandardFirst:'Please select a standard first',
RelevantMaterials:'RelevantMaterials',
evaluatorFeedback:'Evaluator feedback',
nameTechnicalDocument:'Name of technical document',
chapter:'chapter',
problemDescription:'Problem description',
filingExternalOpinions:'Filing of external opinions',
}
+6
View File
@@ -1112,8 +1112,14 @@ module.exports = {
RegulationTaskConfirmationNotification:'任务确认通知',
evaluationMethod:'评估方式',
uploadRelevantMaterials:'相关资料上传',
RelevantMaterials:'相关资料',
processBackground:'流程背景',
selectedStandard:'所选标准',
standardDecompositionDocument:'带入标准分解单',
pleaseSelectStandardFirst:'请先选择标准',
evaluatorFeedback:'评估人反馈',
nameTechnicalDocument:'技术文件名称',
chapter:'章节',
problemDescription:'问题说明',
filingExternalOpinions:'对外意见归档',
}
@@ -44,13 +44,13 @@
/>
</div>
<div>
<span class="text">对外意见归档:</span>
<div @click="clickButtonToUpload('opinionArchiveId')"
<span class="text">{{$t('filingExternalOpinions')}}:</span>
<div @click="clickButtonToUpload('opinionArchiveId')" style="color: #21c9cc"
v-if="formInline.createBy == this.userInfoQuery.username" class="operator-text">
<a-icon type="cloud-upload" />
{{$t('clickUpload')}}
</div>
<div @click="seeFileClick(formInline.opinionArchiveId)" class="operator-text">
<div @click="seeFileClick(formInline.opinionArchiveId)" style="color: #21c9cc" class="operator-text">
<a-icon type="eye" />
{{$t('viewFile')}}
</div>
@@ -177,11 +177,13 @@
//导出
handleExport() {
let query = {
lawsOpinionGatherId: this.lawsOpinionGatherId,
actiProcInstId: this.actiProcInstId
pageSize:this.pageSize,
pageNo:this.pageNo
// lawsOpinionGatherId: this.lawsOpinionGatherId,
// actiProcInstId: this.actiProcInstId
}
downloadFile('/lawsOpinionGather/lawsOpinionAssessmentResultEO/exportXls',
this.$t('evaluationResults') + '.xls', query)
this.$t('evaluationResults') + '.zip', query)
},
getData(row) {
this.visible = true
@@ -206,7 +208,9 @@
getList() {
let query = {
lawsOpinionGatherId: this.lawsOpinionGatherId,
actiProcInstId: this.actiProcInstId
actiProcInstId: this.actiProcInstId,
pageSize:this.pageSize,
pageNo:this.pageNo
}
this.loading = true
getAction('/lawsOpinionGather/lawsOpinionAssessmentResultEO/page', query).then((res) => {
@@ -135,20 +135,20 @@
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text"
:title="$t('releaseDate')">{{$t('releaseDate')}}</span>
</div>
<a-form-model-item class="itemModel" prop="issueTime">
<a-input class="box-input"
:disabled="disabled"
v-model="formInline.issueTime"
:placeholder="$t('PleaseEnter')+$t('releaseDate')"/>
</a-form-model-item>
</div>
</a-col>
<!-- <a-col :span="12">-->
<!-- <div class="box-title-text">-->
<!-- <div class="title-text">-->
<!-- <span class="title-text-text"-->
<!-- :title="$t('releaseDate')">{{$t('releaseDate')}}</span>-->
<!-- </div>-->
<!-- <a-form-model-item class="itemModel" prop="issueTime">-->
<!-- <a-input class="box-input"-->
<!-- :disabled="disabled"-->
<!-- v-model="formInline.issueTime"-->
<!-- :placeholder="$t('PleaseEnter')+$t('releaseDate')"/>-->
<!-- </a-form-model-item>-->
<!-- </div>-->
<!-- </a-col>-->
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
@@ -163,8 +163,6 @@
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
@@ -180,6 +178,9 @@
</div>
</a-col>
</a-row>
<!-- <a-row :gutter="24">-->
<!-- </a-row>-->
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
@@ -391,8 +392,21 @@
methods: {
...mapGetters(['userInfo']),
getStandData(value) {
console.log(value)
this.formInline.titleCn = value.serial_number + ' ' + value.title
this.formInline.titleEn = value.serial_number + ' ' + value.title_en
this.formInline.technologyTerritory = value.technology_territory_dict
this.formInline.applyCar = value.shi4_yong4_che1_xing2_dict
this.formInline.applyScope = value.shi4_yong4_fan4_wei2_dict
this.formInline.state = value.state_dict
this.formInline.newCarImplementTime = value.xin1_che1_xing2_shi2_shi1_ri4_qi1
this.formInline.productionCarImplementTime = value.implement_time
var curPath = window.document.location.href
var pathname = window.document.location.pathname
var pos = curPath.indexOf(pathname)
var localhostPath = curPath.substring(0, pos)
this.formInline.link = localhostPath + '/docManage/library/detail?id=' + value.id
this.formInline = {...this.formInline}
},
getSysCategoryTree() {
getAction('/sys/category/getSysCategoryTree', {}).then((res) => {
@@ -50,6 +50,7 @@
v-model="formInline.memoriesChapter"
:maxTagCount="1"
:disabled="disabled"
@change="changeTree"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
class="box-input"
style="width: 100%"
@@ -187,6 +188,9 @@
getAction('/report/lawsMonthlyReportTitleTemplateEO/list', {}).then((res) => {
if (res.success) {
this.chapterContentsList = res.result || []
this.chapterContentsList.forEach(val => {
val.disabled = true
})
} else {
this.chapterContentsList = []
}
@@ -245,6 +249,13 @@
handleCancel() {
this.visible = false
},
changeTree(value, node, extra) {
if (value.length > 1) {
value.shift()
}
this.formInline.memoriesChapter = value
this.formInline = { ...this.formInline }
},
handleSubmit() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
@@ -86,8 +86,8 @@
})
},
prcClick(row) {
let index = row.taskIds.lastIndexOf(',')
row.taskIds = row.taskIds.slice(0, index)
// let index = row.taskIds.lastIndexOf(',')
// row.taskIds = row.taskIds.slice(0, index)
if (row.prcType == '1') {
let newUrl = this.$router.resolve({
path: '/handshakeProcess',
@@ -0,0 +1,316 @@
<template>
<div class="box">
<div class="box-text">
<div class="header-text">
{{title}}
</div>
</div>
<div class="content-text">
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text" :title="$t('complianceResults')">{{$t('complianceResults')}}</span>
</div>
<a-form-model-item class="itemModel" prop="flag">
<a-radio-group style="margin-top: 2px" class="box-input" v-model="formInline.flag">
<a-radio value="0">
{{$t('accord')}}
</a-radio>
<a-radio value="1">
{{$t('nonConformity')}}
</a-radio>
</a-radio-group>
</a-form-model-item>
</div>
</a-col>
</a-row>
<div v-for="(item,index) in formInline.dataList" :key="index">
<div class="feedbackPoint">
{{$t('feedbackPoint')+(index+1)}}
<a-icon class="icon-size"
@click="addData"
v-if="(formInline.dataList.length-1) == index"
type="plus-circle"/>
<a-icon class="icon-size"
@click="deleteData"
v-if="formInline.dataList.length > 1 && (formInline.dataList.length - 1) == index"
type="minus-circle"/>
</div>
<a-row :gutter="24">
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text" :title="$t('relevantSections')">{{$t('relevantSections')}}</span>
</div>
<a-form-model-item class="itemModel"
:prop="'dataList.'+index+'.relatedSection'"
:rules="[{ required: true, message: $t('relevantSections') + $t('cannotEmpty'), trigger: 'blur'},
{max: 300,message: $t('relevantSections') + $t('cannotExceed') + 300 + $t('Characters'),trigger: 'blur'
}]">
<a-input class="box-input"
:disabled="disabled"
v-model="item.relatedSection"
:placeholder="$t('PleaseEnter')+$t('relevantSections')"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text"
:title="$t('problemDescription')">{{$t('problemDescription')}}</span>
</div>
<a-form-model-item class="itemModel" :prop="'dataList.'+index+'.issueOrSuggest'"
:rules="[{ required: true, message: $t('problemDescription') + $t('cannotEmpty'), trigger: 'blur'},
{max: 300,message: $t('problemDescription') + $t('cannotExceed') + 300 + $t('Characters'),trigger: 'blur'
}]">
<a-input class="box-input"
:disabled="disabled"
v-model="item.issueOrSuggest"
:placeholder="$t('PleaseEnter')+$t('problemDescription')"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" :title="$t('enclosure')">{{$t('enclosure')}}</span>
</div>
<a-form-model-item class="itemModel" prop="accessoryFile">
<a-button type="primary" class="button-text"
@click="clickButtonToUpload('accessoryFile',index)">
{{ (item.accessoryFile === 'null' || item.accessoryFile === '' ||
item.accessoryFile == null) ? $t('clickUpload') : $t('viewUploadedFiles')
}}
</a-button>
</a-form-model-item>
</div>
</a-col>
</a-row>
</div>
</a-form-model>
</div>
<uploadFile ref="uploadFile" :disabled="disabled" @uploadSuccess="uploadSuccess"></uploadFile>
</div>
</template>
<script>
import { getAction, postAction } from '@/api/manage'
import uploadFile from '@/components/uploadFile/file'
export default {
name: 'evaluatorFeedback',
components: {
uploadFile
},
props: {
title: {
type: String,
default: ''
},
feedbackDataList: {
type: Array,
default: (() => {
return []
})
}
},
data() {
return {
formInline: {},
disabled: false,
rules: {
flag:[
{
required: true,
message: this.$t('complianceResults') + this.$t('cannotEmpty'),
trigger: 'change'
},
],
relatedSection: [
{
required: true,
message: this.$t('relevantSections') + this.$t('cannotEmpty'),
trigger: 'blur'
},
{
max: 300,
message: this.$t('relevantSections') + this.$t('cannotExceed') + 300 + this.$t('Characters'),
trigger: 'blur'
}
],
issueOrSuggest: [
{
required: true,
message: this.$t('problemDescription') + this.$t('cannotEmpty'),
trigger: 'blur'
},
{
max: 300,
message: this.$t('problemDescription') + this.$t('cannotExceed') + 300 + this.$t('Characters'),
trigger: 'blur'
}
]
},
uploadIndex: '',
dataList: []
}
},
mounted() {
this.$nextTick(() => {
if (this.feedbackDataList && this.feedbackDataList.length > 0) {
this.formInline.dataList = this.feedbackDataList
} else {
this.formInline.dataList = [
{
relatedSection: '',
issueOrSuggest: '',
reason: '',
accessoryFile: ''
}
]
}
this.formInline = { ...this.formInline }
})
},
methods: {
clickButtonToUpload(item, index) {
this.$refs.uploadFile.perentHandleFunc()
this.$refs.uploadFile.visible = true
this.uploadName = item
this.uploadIndex = index
getAction('sys/common/getFileInfos', { id: this.formInline.dataList[this.uploadIndex][this.uploadName] }).then((res) => {
if (res.success) {
this.$refs.uploadFile.perentHandleFunc(res.result)
} else {
this.$refs.uploadFile.perentHandleFunc()
}
})
},
/** 上传文件的回调 */
uploadSuccess(data) {
let attIdList = []
if (data && data.length > 0) {
data.map(item => {
attIdList.push(item.id || data.name)
})
}
/** 赋值给当前对应的表单文件 */
this.formInline.dataList[this.uploadIndex][this.uploadName] = attIdList.join(',')
this.formInline = [...this.formInline]
},
addData() {
this.formInline.dataList.push({
relatedSection: '',
issueOrSuggest: '',
reason: '',
accessoryFile: ''
})
this.formInline = [...this.formInline]
},
deleteData() {
this.formInline.dataList.pop()
this.formInline = [...this.formInline]
},
submitData(callBack){
this.$refs.ruleForm.validate(valid => {
if (valid) {
callBack && callBack(this.formInline)
}
})
},
}
}
</script>
<style scoped lang="less">
.box {
padding: 0 24px 24px 24px;
box-sizing: border-box;
}
.box-text {
display: flex;
justify-content: space-between;
height: 60px;
line-height: 40px;
.header-text {
font-size: 16px;
font-weight: 400;
color: #000F16;
}
}
.box-title-text {
line-height: 1.4;
display: flex;
/*align-items: center;*/
}
.title-text {
width: 88px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 48px;
color: #000F16;
}
.box-input {
display: inline-block;
height: 38px;
width: 100%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
margin-bottom: 12px;
}
.Required {
color: red;
margin-right: 4px;
}
.title-text-text {
margin-top: 9px;
}
.button-text {
height: 38px;
width: calc(100% - 100px);
line-height: 38px;
background: #fff;
border: 1px #00B3BE solid;
color: #00B3BE;
}
.feedbackPoint {
font-size: 14px;
font-weight: 400;
color: #000F16;
margin-bottom: 10px;
}
.icon-size {
font-size: 18px;
margin-left: 8px;
cursor: pointer;
}
</style>
@@ -0,0 +1,217 @@
<template>
<div class="box">
<div class="box-text">
<div class="header-text">
{{title}}
</div>
</div>
<div class="content-text">
<a-table
ref="table"
:loading="loading"
:pagination="false"
:scroll="{x: '100%'}"
:data-source="dataSource"
:columns="columns"
>
</a-table>
</div>
<uploadFile ref="uploadFile" :disabled="disabled" @uploadSuccess="uploadSuccess"></uploadFile>
</div>
</template>
<script>
import { getAction, postAction } from '@/api/manage'
import uploadFile from '@/components/uploadFile/file'
export default {
name: 'evaluatorFeedback',
components: {
uploadFile
},
props: {
title: {
type: String,
default: ''
},
},
data() {
return {
disabled:false,
loading:false,
uploadIndex:'',
dataSource:[],
columns:[
{
title: this.$t('clauseNo'),
dataIndex: 'items_num',
align: 'center',
ellipsis: true
},
{
title: this.$t('clauseName'),
dataIndex: 'items_name',
align: 'center',
ellipsis: true
},
{
title: this.$t('clauseContent'),
dataIndex: 'iterms_conditions',
align: 'center',
ellipsis: true
},
{
title: this.$t('evaluationMethod'),
dataIndex: 'evaluationMethod',
align: 'center',
ellipsis: true
},
{
title: this.$t('nameTechnicalDocument'),
dataIndex: 'nameTechnicalDocument',
align: 'center',
ellipsis: true
},
{
title: this.$t('chapter'),
dataIndex: 'chapter',
align: 'center',
ellipsis: true
},
{
title: this.$t('opinion'),
dataIndex: 'opinion',
align: 'center',
ellipsis: true
},
{
title: this.$t('enclosure'),
dataIndex: 'enclosure',
align: 'center',
ellipsis: true
},
{
title: this.$t('complianceResults'),
dataIndex: 'complianceResults',
align: 'center',
ellipsis: true
},
],
}
},
mounted() {
},
methods: {
clickButtonToUpload(item,index) {
this.$refs.uploadFile.perentHandleFunc()
this.$refs.uploadFile.visible = true
this.uploadName = item
this.uploadIndex = index
getAction('sys/common/getFileInfos', { id: this.dataList[this.uploadIndex][this.uploadName] }).then((res) => {
if (res.success) {
this.$refs.uploadFile.perentHandleFunc(res.result)
} else {
this.$refs.uploadFile.perentHandleFunc()
}
})
},
/** 上传文件的回调 */
uploadSuccess(data) {
let attIdList = []
if (data && data.length > 0) {
data.map(item => {
attIdList.push(item.id || data.name)
})
}
/** 赋值给当前对应的表单文件 */
this.dataList[this.uploadIndex][this.uploadName] = attIdList.join(',')
this.dataList = [...this.dataList]
},
}
}
</script>
<style scoped lang="less">
.box {
padding: 0 24px 24px 24px;
box-sizing: border-box;
}
.box-text {
display: flex;
justify-content: space-between;
height: 60px;
line-height: 40px;
.header-text {
font-size: 16px;
font-weight: 400;
color: #000F16;
}
}
.box-title-text {
line-height: 1.4;
display: flex;
/*align-items: center;*/
}
.title-text {
width: 88px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 48px;
color: #000F16;
}
.box-input {
display: inline-block;
height: 38px;
width: 100%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
margin-bottom: 12px;
}
.Required {
color: red;
margin-right: 4px;
}
.title-text-text {
margin-top: 9px;
}
.button-text {
height: 38px;
width: calc(100% - 100px);
line-height: 38px;
background: #fff;
border: 1px #00B3BE solid;
color: #00B3BE;
}
.feedbackPoint {
font-size: 14px;
font-weight: 400;
color: #000F16;
margin-bottom: 10px;
}
.icon-size {
font-size: 18px;
margin-left: 8px;
cursor: pointer;
}
</style>
@@ -7,16 +7,16 @@
</div>
<div class="content-text">
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<div v-for="(item,index) in dataList" :key="index">
<div v-for="(item,index) in formInline.dataList" :key="index">
<div class="feedbackPoint">
{{$t('feedbackPoint')+(index+1)}}
<a-icon class="icon-size"
@click="addData"
v-if="(dataList.length-1) == index"
v-if="(formInline.dataList.length-1) == index"
type="plus-circle"/>
<a-icon class="icon-size"
@click="deleteData"
v-if="dataList.length > 1 && (dataList.length - 1) == index"
v-if="formInline.dataList.length > 1 && (formInline.dataList.length - 1) == index"
type="minus-circle"/>
</div>
<a-row :gutter="24">
@@ -26,7 +26,11 @@
<span class="Required">*</span>
<span class="title-text-text" :title="$t('relevantSections')">{{$t('relevantSections')}}</span>
</div>
<a-form-model-item class="itemModel" prop="relatedSection">
<a-form-model-item class="itemModel"
:prop="'dataList.'+index+'.relatedSection'"
:rules="[{ required: true, message: $t('relevantSections') + $t('cannotEmpty'), trigger: 'blur'},
{max: 300,message: $t('relevantSections') + $t('cannotExceed') + 300 + $t('Characters'),trigger: 'blur'
}]">
<a-input class="box-input"
:disabled="disabled"
v-model="item.relatedSection"
@@ -41,7 +45,10 @@
<span class="title-text-text"
:title="$t('questionsSuggestions')">{{$t('questionsSuggestions')}}</span>
</div>
<a-form-model-item class="itemModel" prop="issueOrSuggest">
<a-form-model-item class="itemModel" :prop="'dataList.'+index+'.issueOrSuggest'"
:rules="[{ required: true, message: $t('questionsSuggestions') + $t('cannotEmpty'), trigger: 'blur'},
{max: 300,message: $t('questionsSuggestions') + $t('cannotExceed') + 300 + $t('Characters'),trigger: 'blur'
}]">
<a-input class="box-input"
:disabled="disabled"
v-model="item.issueOrSuggest"
@@ -101,44 +108,48 @@
type: String,
default: ''
},
feedbackDataList:{
feedbackDataList: {
type: Array,
default: (()=>{
return []
default: (() => {
return []
})
},
}
},
data() {
return {
formInline: {},
disabled:false,
disabled: false,
rules: {},
uploadIndex:'',
uploadIndex: '',
dataList: []
}
},
mounted() {
if (this.feedbackDataList && this.feedbackDataList.length > 0){
this.dataList = this.feedbackDataList
this.dataList = [...this.dataList]
}else{
this.dataList = [
{
relatedSection: '',
issueOrSuggest: '',
reason: '',
accessoryFile: ''
}
]
}
this.$nextTick(() => {
if (this.feedbackDataList && this.feedbackDataList.length > 0) {
this.formInline.dataList = this.feedbackDataList
this.formInline = { ...this.formInline }
} else {
this.formInline.dataList = [
{
relatedSection: '',
issueOrSuggest: '',
reason: '',
accessoryFile: ''
}
]
}
this.formInline = { ...this.formInline }
})
},
methods: {
clickButtonToUpload(item,index) {
clickButtonToUpload(item, index) {
this.$refs.uploadFile.perentHandleFunc()
this.$refs.uploadFile.visible = true
this.uploadName = item
this.uploadIndex = index
getAction('sys/common/getFileInfos', { id: this.dataList[this.uploadIndex][this.uploadName] }).then((res) => {
getAction('sys/common/getFileInfos', { id: this.formInline.dataList[this.uploadIndex][this.uploadName] }).then((res) => {
if (res.success) {
this.$refs.uploadFile.perentHandleFunc(res.result)
} else {
@@ -155,21 +166,21 @@
})
}
/** 赋值给当前对应的表单文件 */
this.dataList[this.uploadIndex][this.uploadName] = attIdList.join(',')
this.dataList = [...this.dataList]
this.formInline.dataList[this.uploadIndex][this.uploadName] = attIdList.join(',')
this.formInline = { ...this.formInline }
},
addData() {
this.dataList.push({
this.formInline.dataList.push({
relatedSection: '',
issueOrSuggest: '',
reason: '',
accessoryFile: ''
})
this.dataList = [...this.dataList]
this.formInline = { ...this.formInline }
},
deleteData() {
this.dataList.pop()
this.dataList = [...this.dataList]
this.formInline.dataList.pop()
this.formInline = { ...this.formInline }
}
}
}
@@ -12,11 +12,16 @@
:url="url"
:standardContentQuery="queryProject"
/>
<feedbackInformation
<evaluatorFeedback
v-if="isDisplay"
ref="feedbackInformationRef"
ref="evaluatorFeedbackRef"
:feedbackDataList="feedbackDataList"
:title="$t('feedbackInformation')"
:title="$t('evaluatorFeedback')"
/>
<evaluatorFeedbackList
v-if="isDisplay"
ref="evaluatorFeedbackListRef"
:title="$t('evaluatorFeedback')"
/>
<footerProcess
v-if="isDisplay"
@@ -37,7 +42,8 @@
import standardContent from '../../components/standardContent'
import circulationHistory from '../../components/regulatoryCirculationHistory'
import footerProcess from '../../components/footerProcess'
import feedbackInformation from '../../components/feedbackInformation'
import evaluatorFeedback from '../../components/evaluatorFeedback'
import evaluatorFeedbackList from '../../components/evaluatorFeedbackList'
import { getAction, postAction, deleteAction, downloadFile } from '@/api/manage'
import moment from 'moment'
import { mapGetters } from 'vuex'
@@ -48,10 +54,10 @@
standardContent,
circulationHistory,
footerProcess,
feedbackInformation
evaluatorFeedback,
evaluatorFeedbackList
},
data() {
return {
title: this.$t('collectionOfRegulatoryOpinions'),
url: {
@@ -80,14 +86,17 @@
value: 'endTime'
},
{
title: this.$t('enclosure'),
value: 'accessory_id',
title: this.$t('evaluationMethod'),
value: 'evaluationMethod',
},
{
title: this.$t('RelevantMaterials'),
value: 'RelevantMaterials',
type: 2
},
{},
{
title: this.$t('taskDescription'),
value: 'taskExplain'
title: this.$t('processBackground'),
value: 'processBackground'
}
// {
// title: this.$t('remarks'),
@@ -97,10 +106,10 @@
}
},
mounted() {
this.isDisplay = false
this.queryTaskDetailByTask(() => {
this.lawsOpinionAssessmentResult()
})
this.isDisplay = true
// this.queryTaskDetailByTask(() => {
// this.lawsOpinionAssessmentResult()
// })
},
methods: {
...mapGetters(['userInfo']),
@@ -161,8 +170,9 @@
})
},
submit() {
let dataList = this.$refs.feedbackInformationRef.dataList
this.insertBatch(dataList, 2)
this.$refs.evaluatorFeedbackRef.submitData()
// let dataList = this.$refs.feedbackInformationRef.dataList
// this.insertBatch(dataList, 2)
},
completeTask() {
let query = {
@@ -134,7 +134,7 @@
},
preservation() {
this.loading = true
let dataList = this.$refs.feedbackInformationRef.dataList
let dataList = this.$refs.feedbackInformationRef.formInline.dataList
this.insertBatch(dataList, 1)
},
insertBatch(list, num) {
@@ -162,7 +162,7 @@
})
},
submit() {
let dataList = this.$refs.feedbackInformationRef.dataList
let dataList = this.$refs.feedbackInformationRef.formInline.dataList
this.insertBatch(dataList, 2)
},
completeTask() {
@@ -154,8 +154,8 @@
})
},
dealWith(row) {
let index = row.taskIds.lastIndexOf(',')
row.taskIds = row.taskIds.slice(0, index)
// let index = row.taskIds.lastIndexOf(',')
// row.taskIds = row.taskIds.slice(0, index)
if (row.prcType == '1') {
let newUrl = this.$router.resolve({
path: '/handshakeProcess',