OA表单打印,输入框回填
This commit is contained in:
parent
a36568cb05
commit
aadb902d22
@ -59,4 +59,14 @@ public class OaFormReportRouteController extends DefaultBaseController {
|
|||||||
oaFormReportRouteService.show(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse);
|
oaFormReportRouteService.show(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("print/code/{formCode}/version/{formVersion}/uid/{uid}")
|
||||||
|
public void print(@PathVariable("formCode") String formCode,
|
||||||
|
@PathVariable("formVersion") Integer formVersion,
|
||||||
|
@PathVariable("uid") String uid,
|
||||||
|
HttpSession httpSession,
|
||||||
|
HttpServletRequest httpServletRequest,
|
||||||
|
HttpServletResponse httpServletResponse) {
|
||||||
|
oaFormReportRouteService.print(formCode, formVersion, uid, httpSession, httpServletRequest, httpServletResponse);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
package ink.wgink.module.activiti.enums.oa.field;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName: FieldBackFillEnum
|
||||||
|
* @Description: 字段回填
|
||||||
|
* @Author: wanggeng
|
||||||
|
* @Date: 2022/5/11 17:38
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
public enum FieldBackFillEnum {
|
||||||
|
|
||||||
|
NO_BACK_FILL("noBackFill", "不回填"),
|
||||||
|
CURRENT_USER_NAME("currentUserName", "当前用户昵称"),
|
||||||
|
CURRENT_USER_DEPARTMENT("currentUserDepartment", "当前用户部门");
|
||||||
|
|
||||||
|
private String value;
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
FieldBackFillEnum(String value, String text) {
|
||||||
|
this.value = value;
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value == null ? "" : value.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text == null ? "" : text.trim();
|
||||||
|
}
|
||||||
|
}
|
@ -27,10 +27,10 @@ public class NodeFormFieldVO {
|
|||||||
private Boolean isEditable;
|
private Boolean isEditable;
|
||||||
@ApiModelProperty(name = "isVisible", value = "是否可见")
|
@ApiModelProperty(name = "isVisible", value = "是否可见")
|
||||||
private Boolean isVisible;
|
private Boolean isVisible;
|
||||||
@ApiModelProperty(name = "editHistory", value = "编辑历史")
|
@ApiModelProperty(name = "editHistory", value = "签批类型(编辑历史)")
|
||||||
private String editHistory;
|
private String editHistory;
|
||||||
@ApiModelProperty(name = "autoFillBack", value = "自动填充")
|
@ApiModelProperty(name = "autoBackFill", value = "自动回填")
|
||||||
private String autoFillBack;
|
private String autoBackFill;
|
||||||
|
|
||||||
public String getFieldId() {
|
public String getFieldId() {
|
||||||
return fieldId == null ? "" : fieldId.trim();
|
return fieldId == null ? "" : fieldId.trim();
|
||||||
@ -96,12 +96,12 @@ public class NodeFormFieldVO {
|
|||||||
this.editHistory = editHistory;
|
this.editHistory = editHistory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAutoFillBack() {
|
public String getAutoBackFill() {
|
||||||
return autoFillBack == null ? "" : autoFillBack.trim();
|
return autoBackFill == null ? "" : autoBackFill.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAutoFillBack(String autoFillBack) {
|
public void setAutoBackFill(String autoBackFill) {
|
||||||
this.autoFillBack = autoFillBack;
|
this.autoBackFill = autoBackFill;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -123,8 +123,8 @@ public class NodeFormFieldVO {
|
|||||||
.append(isVisible);
|
.append(isVisible);
|
||||||
sb.append(",\"editHistory\":\"")
|
sb.append(",\"editHistory\":\"")
|
||||||
.append(editHistory).append('\"');
|
.append(editHistory).append('\"');
|
||||||
sb.append(",\"autoFillBack\":\"")
|
sb.append(",\"autoBackFill\":\"")
|
||||||
.append(autoFillBack).append('\"');
|
.append(autoBackFill).append('\"');
|
||||||
sb.append('}');
|
sb.append('}');
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
@ -49,17 +49,31 @@ public interface IOaFormReportRouteService {
|
|||||||
*/
|
*/
|
||||||
void show(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
|
void show(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打印
|
||||||
|
*
|
||||||
|
* @param formCode
|
||||||
|
* @param formVersion
|
||||||
|
* @param uid
|
||||||
|
* @param httpSession
|
||||||
|
* @param httpServletRequest
|
||||||
|
* @param httpServletResponse
|
||||||
|
*/
|
||||||
|
void print(String formCode, Integer formVersion, String uid, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询页面
|
* 查询页面
|
||||||
*
|
*
|
||||||
* @param formCode
|
* @param formCode
|
||||||
* @param formVersion
|
* @param formVersion
|
||||||
|
* @param ccId
|
||||||
* @param httpSession
|
* @param httpSession
|
||||||
* @param httpServletRequest
|
* @param httpServletRequest
|
||||||
* @param httpServletResponse
|
* @param httpServletResponse
|
||||||
*/
|
*/
|
||||||
void updateRead(String formCode, Integer formVersion, String ccId, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
|
void updateRead(String formCode, Integer formVersion, String ccId, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APP新增页面
|
* APP新增页面
|
||||||
*
|
*
|
||||||
|
@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import ink.wgink.common.base.DefaultBaseService;
|
import ink.wgink.common.base.DefaultBaseService;
|
||||||
import ink.wgink.exceptions.SearchException;
|
import ink.wgink.exceptions.SearchException;
|
||||||
import ink.wgink.interfaces.user.IUserBaseService;
|
import ink.wgink.interfaces.user.IUserBaseService;
|
||||||
|
import ink.wgink.module.activiti.enums.oa.TaskCommentTypeEnum;
|
||||||
|
import ink.wgink.module.activiti.pojo.bos.oa.TaskCommentBO;
|
||||||
import ink.wgink.module.activiti.pojo.dtos.oa.NodeButtonDTO;
|
import ink.wgink.module.activiti.pojo.dtos.oa.NodeButtonDTO;
|
||||||
import ink.wgink.module.activiti.pojo.dtos.oa.NodeFieldDTO;
|
import ink.wgink.module.activiti.pojo.dtos.oa.NodeFieldDTO;
|
||||||
import ink.wgink.module.activiti.pojo.pos.oa.OaNodeAssigneePO;
|
import ink.wgink.module.activiti.pojo.pos.oa.OaNodeAssigneePO;
|
||||||
@ -12,8 +14,12 @@ import ink.wgink.module.activiti.pojo.vos.oa.page.*;
|
|||||||
import ink.wgink.module.activiti.service.activiti.IActivitiModelService;
|
import ink.wgink.module.activiti.service.activiti.IActivitiModelService;
|
||||||
import ink.wgink.module.activiti.service.oa.*;
|
import ink.wgink.module.activiti.service.oa.*;
|
||||||
import ink.wgink.module.form.enums.design.FormTypeEnum;
|
import ink.wgink.module.form.enums.design.FormTypeEnum;
|
||||||
|
import ink.wgink.module.form.pojo.pos.design.FormPO;
|
||||||
|
import ink.wgink.module.form.service.design.IFormDesignService;
|
||||||
import ink.wgink.module.form.service.design.IFormFieldService;
|
import ink.wgink.module.form.service.design.IFormFieldService;
|
||||||
|
import ink.wgink.module.form.service.design.IFormService;
|
||||||
import ink.wgink.module.form.service.report.IFormReportRouteService;
|
import ink.wgink.module.form.service.report.IFormReportRouteService;
|
||||||
|
import ink.wgink.module.form.service.report.IFormReportService;
|
||||||
import ink.wgink.pojo.bos.UserInfoBO;
|
import ink.wgink.pojo.bos.UserInfoBO;
|
||||||
import ink.wgink.pojo.dtos.user.UserDTO;
|
import ink.wgink.pojo.dtos.user.UserDTO;
|
||||||
import org.activiti.bpmn.model.FlowNode;
|
import org.activiti.bpmn.model.FlowNode;
|
||||||
@ -22,8 +28,10 @@ import org.activiti.bpmn.model.UserTask;
|
|||||||
import org.activiti.engine.HistoryService;
|
import org.activiti.engine.HistoryService;
|
||||||
import org.activiti.engine.RepositoryService;
|
import org.activiti.engine.RepositoryService;
|
||||||
import org.activiti.engine.TaskService;
|
import org.activiti.engine.TaskService;
|
||||||
|
import org.activiti.engine.history.HistoricProcessInstance;
|
||||||
import org.activiti.engine.history.HistoricTaskInstance;
|
import org.activiti.engine.history.HistoricTaskInstance;
|
||||||
import org.activiti.engine.repository.ProcessDefinition;
|
import org.activiti.engine.repository.ProcessDefinition;
|
||||||
|
import org.activiti.engine.task.Comment;
|
||||||
import org.activiti.engine.task.Task;
|
import org.activiti.engine.task.Task;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
@ -34,6 +42,7 @@ import javax.servlet.http.HttpServletRequest;
|
|||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -70,6 +79,10 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
|
|||||||
private INodeButtonService nodeButtonService;
|
private INodeButtonService nodeButtonService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IOaCcService oaCcService;
|
private IOaCcService oaCcService;
|
||||||
|
@Autowired
|
||||||
|
private IFormService formService;
|
||||||
|
@Autowired
|
||||||
|
private IFormReportService formReportService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(String processDefinitionId, String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
|
public void save(String processDefinitionId, String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
|
||||||
@ -144,6 +157,77 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
|
|||||||
formReportRouteService.show(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model);
|
formReportRouteService.show(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void print(String formCode, Integer formVersion, String uid, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
|
||||||
|
FormPO formPO = formService.getPOByCodeAndVersion(formCode, formVersion);
|
||||||
|
if (formPO == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 处理附件、文件、视频、音频、签批等功能
|
||||||
|
Map<String, Object> reportForm = formReportService.get(formCode, formVersion, uid);
|
||||||
|
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().processInstanceId(reportForm.get(IFormDesignService.PROCESS_INSTANCE_ID).toString()).singleResult();
|
||||||
|
if (historicProcessInstance == null) {
|
||||||
|
throw new SearchException("流程实例不存在");
|
||||||
|
}
|
||||||
|
// 设置签字
|
||||||
|
setSign(reportForm, historicProcessInstance);
|
||||||
|
// 设置会签
|
||||||
|
setJointlySign(reportForm);
|
||||||
|
formReportRouteService.setModal(formPO, reportForm);
|
||||||
|
formReportRouteService.showPage(reportForm, formCode, formPO.getPrintPageCode(), httpSession, httpServletRequest, httpServletResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置签批
|
||||||
|
*
|
||||||
|
* @param reportForm
|
||||||
|
* @param historicProcessInstance
|
||||||
|
*/
|
||||||
|
private void setSign(Map<String, Object> reportForm, HistoricProcessInstance historicProcessInstance) {
|
||||||
|
Map<String, Object> processVariables = historicProcessInstance.getProcessVariables();
|
||||||
|
for (Map.Entry<String, Object> reportFormEntry : reportForm.entrySet()) {
|
||||||
|
Object signObject = processVariables.get(reportFormEntry.getKey() + IOaFormReportService.EDIT_SIGN_KEY_SUFFIX);
|
||||||
|
if (signObject != null) {
|
||||||
|
reportFormEntry.setValue(signObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置会签
|
||||||
|
*
|
||||||
|
* @param reportForm
|
||||||
|
*/
|
||||||
|
private void setJointlySign(Map<String, Object> reportForm) {
|
||||||
|
List<Comment> processInstanceComments = taskService.getProcessInstanceComments(reportForm.get(IFormDesignService.PROCESS_INSTANCE_ID).toString());
|
||||||
|
Map<String, String> jointlySignMap = new HashMap<>(16);
|
||||||
|
// 先处理会签字段
|
||||||
|
for (Comment comment : processInstanceComments) {
|
||||||
|
// 会签字段
|
||||||
|
if (!StringUtils.equals(TaskCommentTypeEnum.JOINTLY_SIGN.getValue(), comment.getType())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
TaskCommentBO taskCommentBO = JSONObject.parseObject(comment.getFullMessage(), TaskCommentBO.class);
|
||||||
|
String jointlySignedValue = jointlySignMap.get(taskCommentBO.getFieldName());
|
||||||
|
if (jointlySignedValue == null) {
|
||||||
|
jointlySignedValue = "";
|
||||||
|
}
|
||||||
|
if (!jointlySignedValue.isEmpty()) {
|
||||||
|
jointlySignedValue += "\n";
|
||||||
|
}
|
||||||
|
jointlySignedValue += "签批人:" + taskCommentBO.getUserName() + "。签批内容:" + taskCommentBO.getContent() + "。签批时间:" + taskCommentBO.getTime();
|
||||||
|
jointlySignMap.put(taskCommentBO.getFieldName(), jointlySignedValue);
|
||||||
|
}
|
||||||
|
// 替换会签的内容
|
||||||
|
for (Map.Entry<String, Object> reportFormEntry : reportForm.entrySet()) {
|
||||||
|
String jointlySignValue = jointlySignMap.get(reportFormEntry.getKey());
|
||||||
|
if (StringUtils.isBlank(jointlySignValue)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
reportFormEntry.setValue(jointlySignValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateRead(String formCode, Integer formVersion, String ccId, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
|
public void updateRead(String formCode, Integer formVersion, String ccId, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
|
||||||
oaCcService.updateRead(ccId, 1);
|
oaCcService.updateRead(ccId, 1);
|
||||||
@ -187,7 +271,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
|
|||||||
fieldVO.setIsEditable(nodeFieldDTO.getIsEditable());
|
fieldVO.setIsEditable(nodeFieldDTO.getIsEditable());
|
||||||
fieldVO.setIsVisible(nodeFieldDTO.getIsVisible());
|
fieldVO.setIsVisible(nodeFieldDTO.getIsVisible());
|
||||||
fieldVO.setEditHistory(nodeFieldDTO.getEditHistory());
|
fieldVO.setEditHistory(nodeFieldDTO.getEditHistory());
|
||||||
nodeFieldDTO.getAutoBackFill();
|
fieldVO.setAutoBackFill(nodeFieldDTO.getAutoBackFill());
|
||||||
return fieldVO;
|
return fieldVO;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
model.put("fields", JSONObject.toJSONString(fieldVOs));
|
model.put("fields", JSONObject.toJSONString(fieldVOs));
|
||||||
@ -216,9 +300,11 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
|
|||||||
if (StringUtils.isBlank(currentTaskId)) {
|
if (StringUtils.isBlank(currentTaskId)) {
|
||||||
formButtonVO.setBtnGoBack(0);
|
formButtonVO.setBtnGoBack(0);
|
||||||
formButtonVO.setBtnForcedEnd(0);
|
formButtonVO.setBtnForcedEnd(0);
|
||||||
|
formButtonVO.setBtnPrint(0);
|
||||||
} else {
|
} else {
|
||||||
formButtonVO.setBtnGoBack(nodeButtonDTO.getBtnGoBack());
|
formButtonVO.setBtnGoBack(nodeButtonDTO.getBtnGoBack());
|
||||||
formButtonVO.setBtnForcedEnd(nodeButtonDTO.getBtnForcedEnd());
|
formButtonVO.setBtnForcedEnd(nodeButtonDTO.getBtnForcedEnd());
|
||||||
|
formButtonVO.setBtnPrint(nodeButtonDTO.getBtnPrint());
|
||||||
}
|
}
|
||||||
if (formButtonVO.getBtnGoBack() == 1) {
|
if (formButtonVO.getBtnGoBack() == 1) {
|
||||||
LOG.debug("存在回退按钮,查询历史节点");
|
LOG.debug("存在回退按钮,查询历史节点");
|
||||||
|
@ -30,8 +30,8 @@
|
|||||||
`field_explain` varchar(255) DEFAULT NULL COMMENT '字段描述',
|
`field_explain` varchar(255) DEFAULT NULL COMMENT '字段描述',
|
||||||
`is_visible` int(1) DEFAULT '1' COMMENT '是否可见',
|
`is_visible` int(1) DEFAULT '1' COMMENT '是否可见',
|
||||||
`is_editable` int(1) DEFAULT '1' COMMENT '是否可编辑',
|
`is_editable` int(1) DEFAULT '1' COMMENT '是否可编辑',
|
||||||
`editHistory` varchar(255) DEFAULT NULL COMMENT '编辑历史',
|
`editHistory` varchar(255) DEFAULT 'noRecord' COMMENT '编辑历史',
|
||||||
`auto_back_fill` varchar(255) DEFAULT NULL COMMENT '自动回填',
|
`auto_back_fill` varchar(255) DEFAULT 'noBackFill' COMMENT '自动回填',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `node_field_id` (`node_field_id`),
|
UNIQUE KEY `node_field_id` (`node_field_id`),
|
||||||
KEY `deployment_id` (`deployment_id`),
|
KEY `deployment_id` (`deployment_id`),
|
||||||
@ -106,6 +106,9 @@
|
|||||||
</if>
|
</if>
|
||||||
<if test="editHistory != null and editHistory != ''">
|
<if test="editHistory != null and editHistory != ''">
|
||||||
edit_history = #{editHistory},
|
edit_history = #{editHistory},
|
||||||
|
</if>
|
||||||
|
<if test="autoBackFill != null and autoBackFill != ''">
|
||||||
|
auto_back_fill = #{autoBackFill},
|
||||||
</if>
|
</if>
|
||||||
node_field_id = #{nodeFieldId}
|
node_field_id = #{nodeFieldId}
|
||||||
WHERE
|
WHERE
|
||||||
|
@ -350,7 +350,8 @@
|
|||||||
<td>
|
<td>
|
||||||
<select class="form-control input-sm" ng-model="formField.autoBackFill">
|
<select class="form-control input-sm" ng-model="formField.autoBackFill">
|
||||||
<option value="noBackFill">不回填</option>
|
<option value="noBackFill">不回填</option>
|
||||||
<option value="currentUser">当前用户</option>
|
<option value="currentUserName" ng-if="formField.fieldTag == 'input'">当前用户昵称</option>
|
||||||
|
<option value="currentUserDepartment" ng-if="formField.fieldTag == 'input'">当前用户部门</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package ink.wgink.module.form.service.report;
|
package ink.wgink.module.form.service.report;
|
||||||
|
|
||||||
|
import ink.wgink.module.form.pojo.pos.design.FormPO;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
@ -27,6 +29,7 @@ public interface IFormReportRouteService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增页面
|
* 新增页面
|
||||||
|
*
|
||||||
* @param formCode
|
* @param formCode
|
||||||
* @param formVersion
|
* @param formVersion
|
||||||
* @param httpSession
|
* @param httpSession
|
||||||
@ -151,4 +154,25 @@ public interface IFormReportRouteService {
|
|||||||
* @param model
|
* @param model
|
||||||
*/
|
*/
|
||||||
void appShow(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> model);
|
void appShow(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> model);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 展示页面
|
||||||
|
*
|
||||||
|
* @param modal
|
||||||
|
* @param formCode
|
||||||
|
* @param pageCode
|
||||||
|
* @param httpSession
|
||||||
|
* @param httpServletRequest
|
||||||
|
* @param httpServletResponse
|
||||||
|
*/
|
||||||
|
void showPage(Map<String, Object> modal, String formCode, String pageCode, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置model
|
||||||
|
*
|
||||||
|
* @param formPO
|
||||||
|
* @param modal
|
||||||
|
*/
|
||||||
|
void setModal(FormPO formPO, Map<String, Object> modal);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import ink.wgink.exceptions.base.SystemException;
|
|||||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||||
import ink.wgink.module.form.enums.design.FormStatusEnum;
|
import ink.wgink.module.form.enums.design.FormStatusEnum;
|
||||||
import ink.wgink.module.form.pojo.pos.design.FormPO;
|
import ink.wgink.module.form.pojo.pos.design.FormPO;
|
||||||
|
import ink.wgink.module.form.service.design.IFormFieldService;
|
||||||
import ink.wgink.module.form.service.design.IFormService;
|
import ink.wgink.module.form.service.design.IFormService;
|
||||||
import ink.wgink.module.form.service.report.IFormReportRouteService;
|
import ink.wgink.module.form.service.report.IFormReportRouteService;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -36,6 +37,8 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IFormService formService;
|
private IFormService formService;
|
||||||
|
@Autowired
|
||||||
|
private IFormFieldService formFieldService;
|
||||||
private Configuration configuration = new Configuration(Configuration.getVersion());
|
private Configuration configuration = new Configuration(Configuration.getVersion());
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
@ -181,7 +184,8 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF
|
|||||||
* @param httpServletRequest
|
* @param httpServletRequest
|
||||||
* @param httpServletResponse
|
* @param httpServletResponse
|
||||||
*/
|
*/
|
||||||
private void showPage(Map<String, Object> modal, String formCode, String pageCode, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
|
@Override
|
||||||
|
public void showPage(Map<String, Object> modal, String formCode, String pageCode, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
|
||||||
httpServletResponse.setContentType("text/html; charset=" + ISystemConstant.CHARSET_UTF8);
|
httpServletResponse.setContentType("text/html; charset=" + ISystemConstant.CHARSET_UTF8);
|
||||||
try {
|
try {
|
||||||
Template template = getTemplate(formCode, pageCode);
|
Template template = getTemplate(formCode, pageCode);
|
||||||
@ -202,7 +206,8 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF
|
|||||||
* @param modal
|
* @param modal
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private void setModal(FormPO formPO, Map<String, Object> modal) {
|
@Override
|
||||||
|
public void setModal(FormPO formPO, Map<String, Object> modal) {
|
||||||
modal.put("contextPath", httpServletRequest.getContextPath() + "/");
|
modal.put("contextPath", httpServletRequest.getContextPath() + "/");
|
||||||
modal.put("formName", formPO.getFormName());
|
modal.put("formName", formPO.getFormName());
|
||||||
modal.put("formCode", formPO.getFormCode());
|
modal.put("formCode", formPO.getFormCode());
|
||||||
|
@ -3,6 +3,7 @@ function OaFormUtil(layui) {
|
|||||||
var win = $(window);
|
var win = $(window);
|
||||||
var layer = layui.layer;
|
var layer = layui.layer;
|
||||||
var upload = layui.upload;
|
var upload = layui.upload;
|
||||||
|
var form = layui.form;
|
||||||
var restAjax = layui.restajax;
|
var restAjax = layui.restajax;
|
||||||
var processImageEnlargeScale = 0;
|
var processImageEnlargeScale = 0;
|
||||||
|
|
||||||
@ -277,7 +278,41 @@ function OaFormUtil(layui) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 禁止字段操作
|
* 初始化回填字段
|
||||||
|
* @param fields
|
||||||
|
* @param currentUser
|
||||||
|
*/
|
||||||
|
this.backFillFields = function(fields, currentUser) {
|
||||||
|
var obj = {};
|
||||||
|
for (var i = 0, item; item = fields[i++];) {
|
||||||
|
if(item.autoBackFill === 'currentUserName') {
|
||||||
|
obj[item.fieldName] = currentUser.userName;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(item.autoBackFill === 'currentUserDepartment') {
|
||||||
|
if(currentUser.departments.length == 1) {
|
||||||
|
obj[item.fieldName] = currentUser.departments[0].departmentName;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(currentUser.departments.length > 1) {
|
||||||
|
obj[item.fieldName] = currentUser.departments[0].departmentName;
|
||||||
|
var options = '';
|
||||||
|
for(var j = 0, jItem; jItem = currentUser.departments[j++];) {
|
||||||
|
options += '<option value="'+ jItem.departmentName +'">'+ jItem.departmentName +'</option>'
|
||||||
|
}
|
||||||
|
var parent = $('#'+ item.fieldName +'Block');
|
||||||
|
parent.empty();
|
||||||
|
parent.append('<select name="'+ item.fieldName +'">'+ options +'</select>');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
form.val('dataForm', obj);
|
||||||
|
form.render(null, 'dataForm');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 禁止字段操作,禁止操作的字段不参与提交
|
||||||
* @param fields {Array} [{fieldName:'', isEditable: 0|1}]
|
* @param fields {Array} [{fieldName:'', isEditable: 0|1}]
|
||||||
*/
|
*/
|
||||||
this.disableFields = function (fields) {
|
this.disableFields = function (fields) {
|
||||||
@ -326,6 +361,9 @@ function OaFormUtil(layui) {
|
|||||||
var isApp = opt.isApp;
|
var isApp = opt.isApp;
|
||||||
var processInstanceId = opt.processInstanceId;
|
var processInstanceId = opt.processInstanceId;
|
||||||
var taskId = opt.taskId;
|
var taskId = opt.taskId;
|
||||||
|
var formCode = opt.formCode;
|
||||||
|
var formVersion = opt.formVersion;
|
||||||
|
var uid = opt.uid;
|
||||||
var onPreview = typeof (opt.onPreview) === 'function' ? opt.onPreview : null;
|
var onPreview = typeof (opt.onPreview) === 'function' ? opt.onPreview : null;
|
||||||
|
|
||||||
function initButton() {
|
function initButton() {
|
||||||
@ -412,6 +450,7 @@ function OaFormUtil(layui) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 附件
|
||||||
$(document.body).on('click', '#showAttachmentBtn', function () {
|
$(document.body).on('click', '#showAttachmentBtn', function () {
|
||||||
var attachments = $('#attachments').val();
|
var attachments = $('#attachments').val();
|
||||||
var attachmentArray = attachments.split(',');
|
var attachmentArray = attachments.split(',');
|
||||||
@ -468,6 +507,7 @@ function OaFormUtil(layui) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 附件删除
|
||||||
$(document.body).on('click', '.delete-attachment-btn', function () {
|
$(document.body).on('click', '.delete-attachment-btn', function () {
|
||||||
var id = this.dataset.id;
|
var id = this.dataset.id;
|
||||||
var name = this.dataset.name;
|
var name = this.dataset.name;
|
||||||
@ -483,6 +523,7 @@ function OaFormUtil(layui) {
|
|||||||
$(this).parent().parent().parent().remove();
|
$(this).parent().parent().parent().remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 附件预览
|
||||||
$(document.body).on('click', '.operation .preview-btn', function () {
|
$(document.body).on('click', '.operation .preview-btn', function () {
|
||||||
var id = this.dataset.id;
|
var id = this.dataset.id;
|
||||||
var name = this.dataset.name;
|
var name = this.dataset.name;
|
||||||
@ -497,7 +538,15 @@ function OaFormUtil(layui) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 回退
|
// 打印
|
||||||
|
$(document.body).on('click', '#printBtn', function() {
|
||||||
|
if(!formCode || !formVersion || !uid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.open(restAjax.path('route/oa-form-report/print/code/{formCode}/version/{formVersion}/uid/{uid}', [formCode, formVersion, uid]), '_blank');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 回退页面
|
||||||
$(document.body).on('click', '#goBackBtn', function () {
|
$(document.body).on('click', '#goBackBtn', function () {
|
||||||
if (!taskId) {
|
if (!taskId) {
|
||||||
return;
|
return;
|
||||||
|
@ -127,8 +127,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
{field:'printPageCode', width:100, title: '打印代码', align:'center',
|
{field:'printPageCode', width:100, title: 'OA打印', align:'center',
|
||||||
templet: function(item) {
|
templet: function(item) {
|
||||||
|
if(item.formType === 'default') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
return '<div class="layui-btn-group">' +
|
return '<div class="layui-btn-group">' +
|
||||||
'<button class="layui-btn layui-btn-xs" lay-event="printPageCodeEvent">打印页面</button>' +
|
'<button class="layui-btn layui-btn-xs" lay-event="printPageCodeEvent">打印页面</button>' +
|
||||||
'</div>';
|
'</div>';
|
||||||
@ -295,7 +298,7 @@
|
|||||||
})
|
})
|
||||||
} else if(event === 'printPageCodeEvent') {
|
} else if(event === 'printPageCodeEvent') {
|
||||||
top.dialog.open({
|
top.dialog.open({
|
||||||
title: '打印页面模板',
|
title: '打印页面模板【需要打印的内容添加到 startprint 与 endprint 之间,两个注释不能删除,变量用 ${XXX}占位(视频、音频、文件、附件只打印文件名称)】',
|
||||||
url: top.restAjax.path('route/form/get-print-page-code?formId={formId}&formCode={formCode}&formVersion={formVersion}', [data.formId, data.formCode, data.formVersion]),
|
url: top.restAjax.path('route/form/get-print-page-code?formId={formId}&formCode={formCode}&formVersion={formVersion}', [data.formId, data.formCode, data.formVersion]),
|
||||||
width: '99%',
|
width: '99%',
|
||||||
height: '99%',
|
height: '99%',
|
||||||
|
@ -4,29 +4,32 @@
|
|||||||
<base href="${r'${contextPath}'}"/>
|
<base href="${r'${contextPath}'}"/>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>${r'${formName}'}</title>
|
<title>${r'${formName}'}</title>
|
||||||
<meta name="renderer" content="webkit">
|
<!-- 这里写样式 -->
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<style></style>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
|
||||||
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
|
|
||||||
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
|
|
||||||
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
|
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="layui-anim layui-anim-fadein">
|
<div>
|
||||||
|
<!--startprint-->
|
||||||
|
|
||||||
|
<!-- 这里是打印位置 -->
|
||||||
|
|
||||||
|
<!--endprint-->
|
||||||
</div>
|
</div>
|
||||||
<script src="assets/layuiadmin/layui/layui.js"></script>
|
|
||||||
<script>
|
<script>
|
||||||
layui.config({
|
function printPage() {
|
||||||
base: 'assets/layuiadmin/'
|
var bodyHtml = window.document.body.innerHTML
|
||||||
}).extend({
|
var sprnstr = '<!--startprint-->';
|
||||||
index: 'lib/index'
|
var eprnstr = '<!--endprint-->';
|
||||||
}).use(['index'], function () {
|
var printHtml = bodyHtml.substr(bodyHtml.indexOf(sprnstr) + 17);
|
||||||
|
printHtml = printHtml.substring(0, printHtml.indexOf(eprnstr));
|
||||||
});
|
window.document.body.innerHTML = printHtml;
|
||||||
|
window.print();
|
||||||
|
setTimeout(function() {
|
||||||
|
window.close();
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
// 打印
|
||||||
|
printPage();
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -85,6 +85,9 @@
|
|||||||
isApp:false,
|
isApp:false,
|
||||||
processInstanceId: $('#processInstanceId').val(),
|
processInstanceId: $('#processInstanceId').val(),
|
||||||
taskId: $('#taskId').val(),
|
taskId: $('#taskId').val(),
|
||||||
|
formCode: $('#formCode').val(),
|
||||||
|
formVersion: $('#formVersion').val(),
|
||||||
|
uid: uid,
|
||||||
onPreview: function(obj) {
|
onPreview: function(obj) {
|
||||||
// 这里写预览的逻辑,没有不写此方法
|
// 这里写预览的逻辑,没有不写此方法
|
||||||
// console.log(obj);
|
// console.log(obj);
|
||||||
|
Loading…
Reference in New Issue
Block a user