1. 业务开发
2. 配置导入导出
最核心的导入导出配置管理。
导出采用SQL配置,只接受id为参数,前端需要组织好需要导出的数据id数组。
导入采用JSON配置,支持一对一多表导入。
3. 导入导出前端组件
首先在cms>content>main.ftl页面引入组件
<#include "/component/ms-imp.ftl">
<#include "/component/ms-exp.ftl">
3.1. 导入组件
在页面添加组件标签,可以根据参数进行调整
<ms-imp style="margin-right: 8px"
id="文章"
type="word"
limit="1"
:multiple="true"
img-dir="/upload/1/cms/content/editor/"
:columns="{categoryId:form.categoryId}"
:disabled="!form.categoryId"
@success="list" >
</ms-imp>
参数 | 是否必填 | 说明 |
---|---|---|
id | 是 | 导入导出配置名称 |
type | 是 | 导入类型 支持word excel |
multiple | 否 | true批量导入\false逐条导入 |
img-dir | 否 | 图片存放路径,推荐存放在upload文件夹下 |
disabled | 否 | 禁用状态 true禁用\false启用 |
columns | 否 | json参数,只有word有效果,excel无效,columns的参数key必须与json配置的columns的key一致 |
success | 否 | 导入成功调用方法,例如:list(),刷新当前页面数据 |
limit | 否 | 限制导入的文件数量 |
[!tip]
columns根据excel列名与表字段对应,注意excel导入组件不支持columns属性
3.2. 导出组件
<ms-exp style="margin-right: 8px"
id="文章" type="word|excel"
:ids="ids"
:disabled="!selectionList.length" >
</ms-exp>
参数 | 是否必填 | 说明 |
---|---|---|
id | 是 | 导入导出配置名称 |
ids | 是 | 用于传递导出sql配置的参数 |
type | 是 | 导出类型支持word excel |
disabled | 否 | 禁用状态 true禁用\false启用 |
获取ids参考代码
...
//el-table选中数据
handleSelectionChange: function (val) {
//组织ids
that.ids = [];
val.forEach(row => that.ids.push(row.id));
},
...
[!tip]
需要先在Vue实例中定义ids变量
3.3. 工具类wordUtil
/**
* word通用工具,需要依赖poi与docx4j
* 1、poi的转换处理比较麻烦,稳定性不是很好,例如:word2html 结果再转回word格式有差异
* 2、docx4j处理比较方便,推荐使用,兼容性好
* 3、poi与docx4j都存在jar包版本冲突问题,需注意pom.xml
*/
/**
* 基于docx4j,html转换word
* 参考:https://github.com/plutext/docx4j-ImportXHTML/blob/master/src/samples/java/org/docx4j/samples/XhtmlToDocxAndBack.java
*
* @param content html内容
* @param docPath doc生成路径
* @param imgPath 图片资源路径
* @throws JAXBException
* @throws Docx4JException
*/
public static void html2Docx(String content, String docPath, String imgPath)
/**
* 基于docx4j,word转换html
* 参考:https://github.com/plutext/docx4j-ImportXHTML/blob/master/src/samples/java/org/docx4j/samples/DocxToXhtmlAndBack.java
*
* @param docPath doc文档路径
* @param imgPath 图片保存资源路径
* @return 返回html内容 null:生成临时文件失败
* @throws Exception
*/
public static String docx2Html(String docPath, String imgPath)
/**
* 基于poi,word转换html,推荐使用docx4j
* 导入word,核心就是将word文件转html存入数据库
* 流程:
* 1、通过第三方工具xdocreport与poi
* 2、word转html
* 3、读取html的内容
* 临时文件生成再当前项目temp文件夹;
*
* @param wordPath word路径
* @param uploadDir 保存文件夹的目录存放路径,null资源文件夹采用base64位显示 ,例如:图片最终地址 baseDir/imgDir/文件名称
* @param imgDir word中的图片存放路径,当baseDir==null,imgDir参数无效
* @return 返回html内容
*/
public static String word2Html(String wordPath, String uploadDir, String imgDir)
/**
* 针对老的word进行图片资源处理
*/
static class ImageConverter extends WordToHtmlConverter {
public ImageConverter(Document document) {
super(document);
}
@Override
protected void processImageWithoutPicturesManager(Element currentBlock, boolean inlined, Picture picture) {
Element imgNode = currentBlock.getOwnerDocument().createElement("img");
StringBuffer sb = new StringBuffer();
sb.append(Base64.getMimeEncoder().encodeToString(picture.getRawContent()));
sb.insert(0, "data:" + picture.getMimeType() + ";base64,");
imgNode.setAttribute("src", sb.toString());
currentBlock.appendChild(imgNode);
}
}