Commit 1c6224b2 authored by 赵啸非's avatar 赵啸非

修改上传附件事件

parent 8ab87b69
......@@ -9,6 +9,10 @@ function vModel(self, dataObject) {
}
//判断是否为上传组件
if(self.conf.compType === 'upload'){
//增加上传回调事件
dataObject.attrs['on-success']= (response, file)=> {
self.$emit("input", response.url);
}
dataObject.attrs['before-upload'] = file=>{
//非限定后缀不允许上传
const fileName = file.name;
......@@ -29,6 +33,7 @@ function vModel(self, dataObject) {
export default {
render(h) {
let dataObject = {
attrs: {},
props: {},
......
import {isAttr,jsonClone} from '../utils/index';
import { isAttr, jsonClone } from '../utils/index';
import childrenItem from './slot/index';
import {remoteData} from './mixin';
import { remoteData } from './mixin';
function vModel(self, dataObject) {
if (self.conf.ele === 'el-upload') {
dataObject.attrs['on-success'] = (response, file) => {
self.$emit("input", response.url);
}
dataObject.attrs['on-remove'] = (file, fileList) => {
self.$emit('deleteUpload', file, fileList)
}
}
dataObject.on.input = val => {
self.$emit('input', val)
}
}
export default {
render(h) {
render(h) {
let dataObject = {
attrs: {},
props: {},
......@@ -19,16 +29,16 @@ export default {
//远程获取数据
this.getRemoteData();
const confClone = jsonClone(this.conf);
const children = childrenItem(h,confClone);
const children = childrenItem(h, confClone);
Object.keys(confClone).forEach(key => {
const val = confClone[key]
if (dataObject[key]) {
dataObject[key] = val
} else if (!isAttr(key)) {
dataObject.props[key] = val
} else if(key ==='width'){
dataObject.style= 'width:'+val;
}else {
} else if (key === 'width') {
dataObject.style = 'width:' + val;
} else {
dataObject.attrs[key] = val
}
})
......@@ -37,5 +47,5 @@ export default {
return h(confClone.ele, dataObject, children)
},
props: ['conf'],
mixins:[remoteData]
mixins: [remoteData]
}
......@@ -17,7 +17,6 @@ export default {
on: {},
style: {}
}
//远程获取数据
this.getRemoteData();
const confClone = jsonClone(this.conf);
......
......@@ -17,7 +17,7 @@ public enum ComponentEnum {
RADIO("r", "单选框"),
DATE("date", "日期选择栏"),
AREA("area", "区域选择栏"),
IMAGE("image", "图片选择"),
IMAGE("@image", "图片选择"),
DYNAMIC_TABLE("dt", "动态表格"),;
private String value;
......
......@@ -31,20 +31,25 @@ public class DesignImageComponent extends DesignComponent {
columnsItem.setId(cons.getVal());
columnsItem.set_id(cons.getVal());
columnsItem.setCompType("upload");
columnsItem.setCompName(cons.getLabel());
columnsItem.setCompIcon("button");
columnsItem.setCompName("附件");
columnsItem.setCompIcon("att");
columnsItem.setEle("el-upload");
columnsItem.setViewType("component");
columnsItem.setConfig(true);
columnsItem.setShowLabel(true);
columnsItem.setLabel(cons.getLabel());
columnsItem.setLabelWidth(120);
columnsItem.setType("primary");
columnsItem.setText("按钮");
columnsItem.setPlain(true);
columnsItem.setRound(false);
columnsItem.setCircle(false);
columnsItem.setLoading(false);
columnsItem.setMultiple(false);
columnsItem.setRequired(false);
columnsItem.setAction(cons.getUploadFileUrl());
columnsItem.setName("file");
columnsItem.setShowFileList(true);
columnsItem.setListType("picture-card");
columnsItem.setShowTip(false);
columnsItem.setTips("点击按钮上传附件");
columnsItem.setAccept("jpg,png,jpeg,bmp");
columnsItem.setFileSize(10);
columnsItem.setLayout("colItem");
return columnsItem;
......
......@@ -31,4 +31,7 @@ public class ComponentCons {
private List<TableColItem> colList;
private String uploadFileUrl;
}
......@@ -11,6 +11,9 @@ import com.alibaba.fastjson.JSON;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.PictureRenderData;
import com.deepoove.poi.data.PictureType;
import com.deepoove.poi.data.Pictures;
import com.deepoove.poi.plugin.table.MultipleRowTableRenderPolicy;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
......@@ -44,10 +47,7 @@ import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.*;
import java.nio.charset.Charset;
import java.util.Date;
import java.util.HashMap;
......@@ -114,7 +114,7 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD
//解析模板变量
//docTemplateService.parseDocXml(subEntity, context);
//TODO
docTemplateService.parseDocxToJson(subEntity,context);
docTemplateService.parseDocxToJson(subEntity, context);
}
super.saveAfter(entity, context);
}
......@@ -138,7 +138,7 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD
}
if (!sourceEntity.getDocTemplateEntity().getTemplatePath().equals(entity.getDocTemplateEntity().getTemplatePath())) {
// docTemplateService.parseDocXml(entity.getDocTemplateEntity(), context);
// docTemplateService.parseDocXml(entity.getDocTemplateEntity(), context);
}
super.updateBefore(entity, context);
......@@ -241,7 +241,7 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD
try {
// 渲染模板
StringWriter sw = new StringWriter();
// template.process(data, sw);
// template.process(data, sw);
MultipartFile multipartFile = new MockMultipartFile(templateName, templateName,
ContentType.APPLICATION_OCTET_STREAM.toString(), sw.toString().getBytes(Charset.forName("UTF-8")));
String mergedocPath = uploadService.saveFileUpload(multipartFile, "/mergedoc", context.getUser());
......@@ -268,7 +268,6 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD
}
@Override
public String submitOtherSystem(String form, Long templateId, String previewPath, String mergeDocPath, Context context) {
......@@ -304,21 +303,25 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD
Map<String, Object> data = mapper.readValue(docFormVo.getFormContent(), Map.class);
//遍历查看是否有图片数据,多选框
data.entrySet().stream().forEach(entry -> {
if (entry.getKey().indexOf("image") != -1) {
if (entry.getKey().indexOf("@image") != -1) {
//获取值 读取本地图片
String imagepath = uploadService.getFilePath(entry.getValue().toString());
log.info("Image path: " + imagepath);
BufferedImage image = ImgUtil.read(imagepath);
String ext = FileUtil.getSuffix(imagepath);
String imageStr = ImgUtil.toBase64(image, ext);
entry.setValue(imageStr);
try {
PictureRenderData pictureRenderData = Pictures.ofStream(new FileInputStream(imagepath), PictureType.JPEG)
.size(100, 120).create();
data.put(StrUtil.removePrefixIgnoreCase(entry.getKey(),"@"),pictureRenderData);
//entry.setValue(pictureRenderData);
} catch (FileNotFoundException e) {
log.error("error", e);
}
}
//构建填充复选框值
if (entry.getKey().indexOf("ck_") != -1 && entry.getKey().indexOf("v") != -1) {
if (entry.getKey().indexOf("ck_") != -1 && entry.getKey().indexOf("<") != -1) {
//获取复选框选项,并渲染值
String ckStr = StringUtils.substringBetween(entry.getKey(), "v", "v");
String ckStr = StringUtils.substringBetween(entry.getKey(), "<", ">");
//获取所有选项
List<String> checkboxs = StrUtil.splitTrim(ckStr, "_", -1);
List<String> checkboxs = StrUtil.splitTrim(ckStr, "-", -1);
//选中的项
List<String> ckList = Convert.toList(String.class, entry.getValue());
//合并
......@@ -337,37 +340,28 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD
).collect(Collectors.joining(""));
entry.setValue(ckStrs);
}
//TODO 单选
//绑定动态表单
if (entry.getKey().indexOf("dt_") != -1 ) {
if (entry.getKey().indexOf("dt_") != -1) {
builder.bind(entry.getKey(), new MultipleRowTableRenderPolicy());
}
});
//查询是否有多选框,
//获取模板文件地址
DocTemplateEntity docTemplateEntity = docTemplateService.get(docFormVo.getTemplateId());
if (!ObjectUtils.isEmpty(docTemplateEntity)) {
String path = filePath + docTemplateEntity.getTemplatePath();
int index = StrUtil.lastIndexOfIgnoreCase(path, "/");
String templatePath = path.substring(0, index);
//FreeMarkerUtils.initFreeMarkerPath(templatePath);
String templateName = FileUtil.getName(path);
Configure config = builder.build();
XWPFTemplate template = null;
ByteArrayOutputStream byteArrayOutputStream = null;
try {
// ClassPathResource classPathResource = new ClassPathResource(path);
template = XWPFTemplate.compile(path, config).render(data);
byteArrayOutputStream = new ByteArrayOutputStream();
template.write(byteArrayOutputStream);
MultipartFile multipartFile = new MockMultipartFile(templateName, templateName,
ContentType.APPLICATION_OCTET_STREAM.toString(),byteArrayOutputStream.toByteArray());
ContentType.APPLICATION_OCTET_STREAM.toString(), byteArrayOutputStream.toByteArray());
String mergedocPath = uploadService.saveFileUpload(multipartFile, "/mergedoc", context.getUser());
log.info("mergedocPath:" + mergedocPath);
String mergedoc = this.filePath + mergedocPath;
......@@ -376,13 +370,11 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD
String preView = this.filePath + "/preview/" + fileName;
WordUtil.convertWordToJPEG(mergedoc, preView);
log.info("preView:" + mergedocPath);
//下载地址拼装
String returnStr = mergedocPath + ";" + "/preview/" + fileName;
return returnStr;
} catch (Exception e) {
log.error("渲染模板失败:", e);
// return new byte[0];
} finally {
try {
template.close();
......@@ -391,7 +383,6 @@ public class DocBaseinfoServiceImpl extends AbstractCRUDServiceImpl<DocBaseinfoD
log.error("ioEx:", e);
}
}
}
} catch (JsonProcessingException e) {
log.error("转换异常", e);
......
......@@ -22,6 +22,7 @@ import com.mortals.framework.web.BaseCRUDJsonMappingController;
import com.mortals.xhx.module.doc.baseinfo.model.vo.DocBaseinfoVo;
import com.mortals.xhx.module.doc.baseinfo.service.DocBaseinfoService;
import java.util.Date;
import java.util.Map;
import java.util.List;
import java.util.stream.Collectors;
......@@ -89,13 +90,15 @@ public class DocBaseinfoController extends BaseCRUDJsonBodyMappingController<Doc
try {
String paths = this.getService().mergeFormToDoc(docFormVo, getContext());
String[] vals = paths.split(";");
// String redirectUrl = this.getService().submitOtherSystem(form, templateId, vals[0], vals[1], getContext());
String redirectUrl = this.getService().submitOtherSystem(docFormVo.getFormContent(), docFormVo.getTemplateId(), vals[0], vals[1], getContext());
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
jsonObject.put("mergeDoc", vals[0]);
jsonObject.put("preview", vals[1]);
// jsonObject.put("redirectUrl", redirectUrl);
docFormService.save(docFormVo,getContext());
jsonObject.put("redirectUrl", redirectUrl);
docFormVo.setCreateTime(new Date());
docFormVo.setCreateUserId(getContextUserId(getContext()));
docFormVo.setCreateUser("");
docFormService.save(docFormVo, getContext());
} catch (Exception e) {
log.error("合成表单异常", e);
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
......
......@@ -40,7 +40,7 @@ public class DocFormController extends BaseCRUDJsonBodyMappingController<DocForm
public static void main(String[] args) {
DocFormEntity docFormEntity = new DocFormEntity();
docFormEntity.setFormContent("{\"i_1_标题\":\"234\",\"date_1_会议时间\":\"2022 年 09 月 12 日\",\"i_1_会议地点\":\"24\",\"dt_1_汇报\":[{\"i_1_汇报人\":\"2313213\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"1231313\",\"index\":0},{\"i_1_汇报人\":\"啊啊啊\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"巴巴爸爸\",\"index\":1}],\"i_1_记录人\":\"滚滚滚\",\"ck_1_政治面貌_v党员_非党员_党员先锋岗v\":[\"党员\",\"非党员\"],\"r_1_证件类型_v身份证_军官证_残疾证v\":\"残疾证\",\"s_1_设备类型_v呼叫器_窗口屏_评价器v\":\"窗口屏\"}");
docFormEntity.setFormContent("{\"i_1_标题\":\"1231\",\"date_1_会议时间\":\"2022 年 09 月 14 日\",\"i_1_会议地点\":\"312313\",\"dt_1_汇报\":[{\"i_1_汇报人\":\"12313\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"12313\",\"index\":0},{\"i_1_汇报人\":\"333\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"3333\",\"index\":1}],\"i_1_记录人\":\"11123\",\"ck_1_政治面貌_<党员-非党员-党员先锋岗>\":[\"党员\"],\"r_1_证件类型_<身份证-军官证-残疾证>\":\"身份证\",\"s_1_设备类型_<呼叫器-窗口屏-评价器>\":\"窗口屏\",\"@image_1_照片\":\"/file/uploadfile/1663825533953.jpg\"}");
docFormEntity.setTemplateId(50L);
System.out.println(JSON.toJSONString(docFormEntity));
......
......@@ -52,6 +52,9 @@ public class DocTemplateServiceImpl extends AbstractCRUDServiceImpl<DocTemplateD
@Value("${upload.path}")
private String filePath;
@Value("${upload.url:http://localhost:8084/m/file/commonupload?prePath=/file/uploadfile}")
private String uploadUrl;
@Override
protected void saveAfter(DocTemplateEntity entity, Context context) throws AppException {
if (!ObjectUtils.isEmpty(entity.getDocFormEntity())) {
......@@ -228,7 +231,6 @@ public class DocTemplateServiceImpl extends AbstractCRUDServiceImpl<DocTemplateD
root.setConfig(config);
List<ListItem> collect = new ArrayList<>();
for (MetaTemplate item : template.getElementTemplates()) {
System.out.println(item.variable());
//识别简单输入
String val = StrUtil.strip(item.variable(), "{{", "}}");
List<String> keys = StrSplitter.split(val, "_", true, true);
......@@ -240,6 +242,7 @@ public class DocTemplateServiceImpl extends AbstractCRUDServiceImpl<DocTemplateD
cons.setLabel(label);
cons.setVal(val);
cons.setEl(item.variable());
cons.setUploadFileUrl(uploadUrl);
if (type.equalsIgnoreCase(ComponentEnum.DYNAMIC_TABLE.getValue())) {
List<TableColItem> colList = new ArrayList<>();
......
......@@ -30,8 +30,9 @@ Authorization: {{authToken}}
Content-Type: application/json
{
"formContent": "{\"i_1_标题\":\"234\",\"date_1_会议时间\":\"2022 年 09 月 12 日\",\"i_1_会议地点\":\"24\",\"dt_1_汇报\":[{\"i_1_汇报人\":\"2313213\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"1231313\",\"index\":0},{\"i_1_汇报人\":\"啊啊啊\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"巴巴爸爸\",\"index\":1}],\"i_1_记录人\":\"滚滚滚\",\"ck_1_政治面貌_v党员_非党员_党员先锋岗v\":[\"党员\",\"非党员\"],\"r_1_证件类型_v身份证_军官证_残疾证v\":\"残疾证\",\"s_1_设备类型_v呼叫器_窗口屏_评价器v\":\"窗口屏\"}",
"templateId": 50
"deleted": 0,
"formContent": "{\"i_1_标题\":\"1231\",\"date_1_会议时间\":\"2022 年 09 月 14 日\",\"i_1_会议地点\":\"312313\",\"dt_1_汇报\":[{\"i_1_汇报人\":\"12313\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"12313\",\"index\":0},{\"i_1_汇报人\":\"333\",\"date_1_汇报时间\":\"\",\"t_1_汇报内容\":\"3333\",\"index\":1}],\"i_1_记录人\":\"11123\",\"ck_1_政治面貌_<党员-非党员-党员先锋岗>\":[\"党员\"],\"r_1_证件类型_<身份证-军官证-残疾证>\":\"身份证\",\"s_1_设备类型_<呼叫器-窗口屏-评价器>\":\"窗口屏\",\"@image_1_照片\":\"/file/uploadfile/1663825533953.jpg\"}",
"templateId": 52
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment