Browse Source

工作汇报

master
赵鹏 1 month ago
parent
commit
406a73b125
  1. 37
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/pdf/HtmlToPdfInterceptor.java
  2. 207
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/pdf/WkHtmlToPdfUtil.java
  3. 2
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
  4. 11
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/jobinfo/JobInfoController.java
  5. 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/jobinfo/vo/JobInfoPageReqVO.java
  6. 15
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/jobinfo/vo/JobInfoRespDetailVO.java
  7. 11
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/jobinfo/vo/JobInfoRespVO.java
  8. 11
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/jobinfo/vo/JobInfoSaveReqVO.java
  9. 6
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/jobinfo/JobInfoDO.java
  10. 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/jobinfo/JobInfoService.java
  11. 45
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/jobinfo/JobInfoServiceImpl.java
  12. 3
      yudao-server/src/main/resources/application-dev.yaml
  13. 3
      yudao-server/src/main/resources/application-local.yaml

37
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/pdf/HtmlToPdfInterceptor.java

@ -1,2 +1,37 @@
package cn.iocoder.yudao.framework.common.util.pdf;public class HtmlToPdfInterceptor {
package cn.iocoder.yudao.framework.common.util.pdf;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* html转pdf拦截器
* @author liqiang
* @date 2021/05/12
*/
public class HtmlToPdfInterceptor extends Thread {
/**
* 输入流对象
*/
private InputStream is;
public HtmlToPdfInterceptor(InputStream is){
this.is = is;
}
@Override
public void run(){
try{
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
//输出内容
System.out.println(line.toString());
}
}catch (IOException e){
e.printStackTrace();
}
}
}

207
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/pdf/WkHtmlToPdfUtil.java

@ -1,2 +1,207 @@
package cn.iocoder.yudao.framework.common.util.pdf;public class WkHtmlToPdfUtil {
package cn.iocoder.yudao.framework.common.util.pdf;
import java.io.File;
/**
* Input表单或JavaScript脚本支持--enable-forms下面这些是网友整理的参数说明
* wkhtmltopdf [OPTIONS]... <input file> [More input files] <output file>
* 常规选项
* --allow <path> 允许加载从指定的文件夹中的文件或文件可重复
* --book* 设置一会打印一本书的时候通常设置的选项
* --collate 打印多份副本时整理
* --cookie <name> <value> 设置一个额外的cookie可重复
* --cookie-jar <path> 读取和写入的Cookie并在提供的cookie jar文件
* --copies <number> 复印打印成pdf文件数默认为1
* --cover* <url> 使用HTML文件作为封面它会带页眉和页脚的TOC之前插入
* --custom-header <name> <value> 设置一个附加的HTTP头可重复
* --debug-javascript 显示的javascript调试输出
* --default-header* 添加一个缺省的头部与页面的左边的名称页面数到右边例如 --header-left '[webpage]' --header-right '[page]/[toPage]' --header-line
* --disable-external-links* 禁止生成链接到远程网页
* --disable-internal-links* 禁止使用本地链接
* --disable-javascript 禁止让网页执行JavaScript
* --disable-pdf-compression* 禁止在PDF对象使用无损压缩
* --disable-smart-shrinking* 禁止使用WebKit的智能战略收缩使像素/ DPI比没有不变
* --disallow-local-file-access 禁止允许转换的本地文件读取其他本地文件除非explecitily允许用 --allow
* --dpi <dpi> 显式更改DPI这对基于X11的系统没有任何影响
* --enable-plugins 启用已安装的插件如Flash
* --encoding <encoding> 设置默认的文字编码
* --extended-help 显示更广泛的帮助详细介绍了不常见的命令开关
* --forms* 打开HTML表单字段转换为PDF表单域
* --grayscale PDF格式将在灰阶产生
* --help Display help
* --htmldoc 输出程序HTML帮助
* --ignore-load-errors 忽略claimes加载过程中已经遇到了一个错误页面
* --lowquality 产生低品质的PDF/ PS有用缩小结果文档的空间
* --manpage 输出程序手册页
* --margin-bottom <unitreal> 设置页面下边距 (default 10mm)
* --margin-left <unitreal> 将左边页边距 (default 10mm)
* --margin-right <unitreal> 设置页面右边距 (default 10mm)
* --margin-top <unitreal> 设置页面上边距 (default 10mm)
* --minimum-font-size <)
* --no-background 不打印背景
* --orientation <orientation> 设置方向为横向或纵向
* --page-height <unitreal> 页面高度 (default unit millimeter)
* --page-offset* <offset> 设置起始页码 (default )
* --page-size <size> 设置纸张大小: A4, Letter, etc.
* --page-width <unitreal> 页面宽度 (default unit millimeter)
* --password <password> HTTP验证密码
* --post <name> <value> Add an additional post field (repeatable)
* --post-file <name> <path> Post an aditional file (repeatable)
* --print-media-type* 使用的打印介质类型而不是屏幕
* --proxy <proxy> 使用代理
* --quiet Be less verbose
* --read-args-from-stdin 读取标准输入的命令行参数
* --readme 输出程序自述
* --redirect-delay <msec> 等待几毫秒为JS-重定向(default )
* --replace* <name> <value> 替换名称值的页眉和页脚可重复
* --stop-slow-scripts 停止运行缓慢的JavaScripts
* --title <text> 生成的PDF文件的标题第一个文档的标题使用如果没有指定
* --toc* 插入的内容的表中的文件的开头
* --use-xserver* 使用X服务器一些插件和其他的东西没有X11可能无法正常工作
* --user-style-sheet <url> 指定用户的样式表加载在每一页中
* --username <username> HTTP认证的用户名
* --version 输出版本信息退出
* --zoom <)
* <p>
* 页眉和页脚选项
* --header-center* <text> (设置在中心位置的页眉内容)
* --header-font-name* <name> (default Arial)(设置页眉的字体名称)
* --header-font-size* <size> (设置页眉的字体大小)
* --header-html* <url> (添加一个HTML页眉后面是网址)
* --header-left* <text> (左对齐的页眉文本)
* --header-line* (显示一条线在页眉下)
* --header-right* <text> (右对齐页眉文本)
* --header-spacing* <real> (设置页眉和内容的距离默认0)
* --footer-center* <text> (设置在中心位置的页脚内容)
* --footer-font-name* <name> (设置页脚的字体名称)
* --footer-font-size* <size> (设置页脚的字体大小default )
* --footer-html* <url> (添加一个HTML页脚后面是网址)
* --footer-left* <text> (左对齐的页脚文本)
* --footer-line* 显示一条线在页脚内容上)
* --footer-right* <text> (右对齐页脚文本)
* --footer-spacing* <real> (设置页脚和内容的距离)
* <p>
* 页脚和页眉
* [page] 由当前正在打印的页的数目代替
* [frompage] 由要打印的第一页的数量取代
* [topage] 由最后一页要打印的数量取代
* [webpage] 通过正在打印的页面的URL替换
* [section] 由当前节的名称替换
* [subsection] 由当前小节的名称替换
* [date] 由当前日期系统的本地格式取代
* [time] 由当前时间系统的本地格式取代
* <p>
* 轮廓选项
* --dump-outline <file> 转储目录到一个文件
* --outline 显示目录文章中h1h2来定
* --outline-depth <level> 设置目录的深度默认为4
* <p>
* 表内容选项中
* --toc-depth* <level> Set the depth of the toc (default)
* --toc-disable-back-links* Do not link from section header to toc
* --toc-disable-links* Do not link from toc to sections
* --toc-font-name* <name> Set the font used for the toc (default Arial)
* --toc-header-font-name* <name> The font of the toc header (if unset use --toc-font-name)
* --toc-header-font-size* <size> The font size of the toc header (default)
* --toc-header-text* <text> The header text of the toc (default Table Of Contents)
* --toc-l1-font-size* <size> Set the font size on level of the toc (default)
* --toc-l1-indentation* <num> Set indentation on level of the toc (default)
* --toc-l2-font-size* <size> Set the font size on level of the toc (default)
* --toc-l2-indentation* <num> Set indentation on level of the toc (default)
* --toc-l3-font-size* <size> Set the font size on level of the toc (default)
* --toc-l3-indentation* <num> Set indentation on level of the toc (default)
* --toc-l4-font-size* <size> Set the font size on level of the toc (default)
* --toc-l4-indentation* <num> Set indentation on level of the toc (default)
* --toc-l5-font-size* <size> Set the font size on level of the toc (default)
* --toc-l5-indentation* <num> Set indentation on level of the toc (default)
* --toc-l6-font-size* <size> Set the font size on level of the toc (default)
* --toc-l6-indentation* <num> Set indentation on level of the toc (default)
* --toc-l7-font-size* <size> Set the font size on level of the toc (default)
* --toc-l7-indentation* <num> Set indentation on level of the toc (default)
* --toc-no-dots* Do not use dots, in the toc
* ------------------------------------------------------------------------------------------------------------
* @author liqiang
* @date 2021/05/12
*/
public class WkHtmlToPdfUtil {
/**
* 页面大小
*/
public static String PAGE_SIZE_A4 = " --page-size A4 ";
/**
* 页码数字
*/
public static String FOOTER_CENTER = " --footer-center \"第[page]页\" ";
/**
* 页码大小
*/
public static String FOOTER_FONT_SIZE =" --footer-font-size 10 ";
/**
* 页码字体
*/
public static String FOOTER_FONT_NAME =" --footer-font-name \"Microsoft YaHei\" ";
/**
* 打印参数
*/
public static String DPI = " --dpi 300 ";
public static String LOAD_ERROR_HANDLING_IGNORE = " --load-error-handling ignore ";
/**
* 关闭缩放
*/
public static String DISABLE_SMART_SHRINKING = " --disable-smart-shrinking ";
/**
* html转pdf
*
* @param srcPath html路径可以是硬盘上的路径也可以是网络路径
* @param file pdf文件
* @return 转换成功返回true
*/
public static boolean convert(String srcPath, File file,String toPdfTool,String params) {
File parent = file.getParentFile();
// 如果pdf保存路径不存在,则创建路径
if (!parent.exists()) {
parent.mkdirs();
}
StringBuilder cmd = new StringBuilder();
// String toPdfTool;
// if (!System.getProperty("os.name").contains("Windows")) {
// // 根据系统
// // 非windows 系统
// toPdfTool = "/usr/local/bin/wkhtmltopdf";
// } else {
// toPdfTool = "D:/htmlTopdf/wkhtmltopdf/bin/wkhtmltopdf.exe";
// }
toPdfTool += "wkhtmltopdf ";
// 这里可以拼接页眉页脚等参数 参数详情在上方
cmd.append(toPdfTool);
cmd.append(params);
cmd.append(srcPath);
cmd.append(" ");
cmd.append(file.getAbsolutePath());
boolean result = true;
try {
Process proc = Runtime.getRuntime().exec(cmd.toString());
HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());
HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());
error.start();
output.start();
proc.waitFor();
} catch (Exception e) {
result = false;
e.printStackTrace();
}
return result;
}
}

2
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java

@ -211,4 +211,6 @@ public interface ErrorCodeConstants {
ErrorCode ROLE_ERROR = new ErrorCode(1-003-005-004, "请分配角色后再查看");
ErrorCode POLICY_NOT_EXISTS = new ErrorCode(1-003-006-001, "政策法规不存在");
ErrorCode JOB_INFO_NOT_EXISTS = new ErrorCode(1-003-007-001, "工作汇报不存在");
}

11
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/jobinfo/JobInfoController.java

@ -63,9 +63,9 @@ public class JobInfoController {
@GetMapping("/get")
@Operation(summary = "获得工作汇报")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<JobInfoRespVO> getJobInfo(@RequestParam("id") Long id) {
public CommonResult<JobInfoRespDetailVO> getJobInfo(@RequestParam("id") Long id) {
JobInfoDO jobInfo = jobInfoService.getJobInfo(id);
return success(BeanUtils.toBean(jobInfo, JobInfoRespVO.class));
return success(BeanUtils.toBean(jobInfo, JobInfoRespDetailVO.class));
}
@GetMapping("/page")
@ -75,6 +75,13 @@ public class JobInfoController {
return success(BeanUtils.toBean(pageResult, JobInfoRespVO.class));
}
@GetMapping("/jobDetail")
@Operation(summary = "获取详细信息")
public CommonResult<String> getJobDetail(Long id) {
String s = jobInfoService.htmlToPdf(id);
return success(s);
}
@GetMapping("/export-excel")
@Operation(summary = "导出工作汇报 Excel")
@ApiAccessLog(operateType = EXPORT)

3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/jobinfo/vo/JobInfoPageReqVO.java

@ -25,4 +25,7 @@ public class JobInfoPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "pdfURl")
private String pdfUrl;
}

15
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/jobinfo/vo/JobInfoRespDetailVO.java

@ -1,23 +1,22 @@
package cn.iocoder.yudao.module.system.controller.admin.jobinfo.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import lombok.Data;
import java.time.LocalDate;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 工作汇报 Response VO")
@Data
@ExcelIgnoreUnannotated
public class JobInfoRespVO {
public class JobInfoRespDetailVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26792")
@ExcelProperty("id")
@ -27,6 +26,9 @@ public class JobInfoRespVO {
@ExcelProperty("汇报标题")
private String title;
@Schema(description = "汇报详情")
private String content;
@Schema(description = "汇报日期")
@ExcelProperty("汇报日期")
@JsonSerialize(using = LocalDateSerializer.class) // 序列化(响应)
@ -42,4 +44,7 @@ public class JobInfoRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "pdfURl")
private String pdfUrl;
}

11
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/jobinfo/vo/JobInfoRespVO.java

@ -1,5 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.jobinfo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
@ -24,6 +29,9 @@ public class JobInfoRespVO {
@Schema(description = "汇报日期")
@ExcelProperty("汇报日期")
@JsonSerialize(using = LocalDateSerializer.class) // 序列化(响应)
@JsonDeserialize(using = LocalDateDeserializer.class) // 反序列化(请求)
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate jobDate;
@Schema(description = "汇报人姓名", example = "赵六")
@ -34,4 +42,7 @@ public class JobInfoRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "pdfURl")
private String pdfUrl;
}

11
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/jobinfo/vo/JobInfoSaveReqVO.java

@ -1,5 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.jobinfo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
@ -20,9 +25,15 @@ public class JobInfoSaveReqVO {
private String content;
@Schema(description = "汇报日期")
@JsonSerialize(using = LocalDateSerializer.class) // 序列化(响应)
@JsonDeserialize(using = LocalDateDeserializer.class) // 反序列化(请求)
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate jobDate;
@Schema(description = "汇报人姓名", example = "赵六")
private String jobName;
@Schema(description = "pdfURl")
private String pdfUrl;
}

6
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/jobinfo/JobInfoDO.java

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.system.dal.dataobject.jobinfo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDate;
@ -46,4 +47,9 @@ public class JobInfoDO extends BaseDO {
*/
private String jobName;
/**
* pdfUrl
*/
private String pdfUrl;
}

2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/jobinfo/JobInfoService.java

@ -53,4 +53,6 @@ public interface JobInfoService {
*/
PageResult<JobInfoDO> getJobInfoPage(JobInfoPageReqVO pageReqVO);
//使用胡tool的TemplateEngine 填充jobTemp 并保存到本地
String htmlToPdf(Long id);
}

45
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/jobinfo/JobInfoServiceImpl.java

@ -1,20 +1,28 @@
package cn.iocoder.yudao.module.system.service.jobinfo;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil;
import cn.iocoder.yudao.framework.common.util.pdf.WkHtmlToPdfUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.system.controller.admin.jobinfo.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.jobinfo.JobInfoDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.dal.mysql.jobinfo.JobInfoMapper;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
@ -27,6 +35,12 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
@Validated
public class JobInfoServiceImpl implements JobInfoService {
@Value("${yudao.htmlToPdf.tools}")
private String htmlToPdfTools;
@Value("${yudao.htmlToPdf.jobTemp}")
private String htmlToPdfJobTemp;
@Resource
private JobInfoMapper jobInfoMapper;
@ -72,4 +86,29 @@ public class JobInfoServiceImpl implements JobInfoService {
return jobInfoMapper.selectPage(pageReqVO);
}
//使用胡tool的TemplateEngine 填充jobTemp 并保存到本地
@Override
public String htmlToPdf(Long id) {
JobInfoDO jobInfo = getJobInfo(id);
//根据jobTemp 打开文件
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig(htmlToPdfJobTemp, TemplateConfig.ResourceMode.FILE));
Template template = engine.getTemplate("jobTemp.html");
String content = template.render(Dict.create().set("content", jobInfo.getContent()));
// 写入文件并返回File对象
File file = FileUtil.writeUtf8String(content, htmlToPdfJobTemp + "test.html");
// 调用wkhtmltopdf工具转换为pdf
// 这里的htmlToPdfTools是wkhtmltopdf的工具路径,htmlToPdfJobTemp是html文件路径,test.pdf是输出pdf文件路径
File file1 = new File(htmlToPdfJobTemp + "test.pdf");
String params = WkHtmlToPdfUtil.DPI + WkHtmlToPdfUtil.PAGE_SIZE_A4 + WkHtmlToPdfUtil.DISABLE_SMART_SHRINKING+WkHtmlToPdfUtil.LOAD_ERROR_HANDLING_IGNORE;
WkHtmlToPdfUtil.convert(htmlToPdfJobTemp + "test.html", file1, "",params);
return content;
}
}

3
yudao-server/src/main/resources/application-dev.yaml

@ -176,6 +176,9 @@ yudao:
transfer-notify-url: https://yunai.natapp1.cc/admin-api/pay/notify/transfer # 支付渠道的【转账】回调地址
demo: false # 开启演示模式
tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ 地图的密钥 https://lbs.qq.com/service/staticV2/staticGuide/staticDoc
htmlToPdf:
tools: D:\Program Files\wkhtmltopdf\bin #wkhtmltopdf 的安装路径
jobTemp: D:\demo\ #模板文件路径
justauth:
enabled: true

3
yudao-server/src/main/resources/application-local.yaml

@ -228,6 +228,9 @@ yudao:
wxa-subscribe-message:
miniprogram-state: developer # 跳转小程序类型:开发版为 “developer”;体验版为 “trial”为;正式版为 “formal”
tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ 地图的密钥 https://lbs.qq.com/service/staticV2/staticGuide/staticDoc
htmlToPdf:
tools: D:\Program Files\wkhtmltopdf\bin #wkhtmltopdf 的安装路径
jobTemp: D:\demo\ #模板文件路径
justauth:
enabled: true

Loading…
Cancel
Save