完善APP端OA功能

This commit is contained in:
wanggeng 2022-05-17 23:09:14 +08:00
parent 98398ad6f7
commit 231830ece0
12 changed files with 478 additions and 111 deletions

View File

@ -43,7 +43,7 @@ public class OaFormReportController extends DefaultBaseController {
@ApiImplicitParam(name = "formVersion", value = "表单版本", paramType = "path") @ApiImplicitParam(name = "formVersion", value = "表单版本", paramType = "path")
}) })
@PostMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}") @PostMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}")
public SuccessResult save(@PathVariable("processDefinitionId") String processDefinitionId, public synchronized SuccessResult save(@PathVariable("processDefinitionId") String processDefinitionId,
@PathVariable("formCode") String formCode, @PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion, @PathVariable("formVersion") Integer formVersion,
@RequestBody Map<String, Object> params) { @RequestBody Map<String, Object> params) {
@ -60,7 +60,7 @@ public class OaFormReportController extends DefaultBaseController {
@ApiImplicitParam(name = "uid", value = "表单主键", paramType = "path") @ApiImplicitParam(name = "uid", value = "表单主键", paramType = "path")
}) })
@PutMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}/is-need-claim/{isNeedClaim}/uid/{uid}") @PutMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}/is-need-claim/{isNeedClaim}/uid/{uid}")
public SuccessResult update(@PathVariable("taskId") String taskId, public synchronized SuccessResult update(@PathVariable("taskId") String taskId,
@PathVariable("formCode") String formCode, @PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion, @PathVariable("formVersion") Integer formVersion,
@PathVariable("isNeedClaim") Integer isNeedClaim, @PathVariable("isNeedClaim") Integer isNeedClaim,

View File

@ -1,8 +1,10 @@
package ink.wgink.module.activiti.controller.app.api.oa; package ink.wgink.module.activiti.controller.app.api.oa;
import ink.wgink.annotation.CheckRequestBodyAnnotation;
import ink.wgink.common.base.DefaultBaseController; import ink.wgink.common.base.DefaultBaseController;
import ink.wgink.exceptions.ParamsException; import ink.wgink.exceptions.ParamsException;
import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.module.activiti.pojo.vos.oa.UpdateTaskAssigneeVO;
import ink.wgink.module.activiti.service.oa.IOaFormReportService; import ink.wgink.module.activiti.service.oa.IOaFormReportService;
import ink.wgink.module.activiti.util.oa.OaFormReportUtil; import ink.wgink.module.activiti.util.oa.OaFormReportUtil;
import ink.wgink.pojo.ListPage; import ink.wgink.pojo.ListPage;
@ -42,7 +44,7 @@ public class OaFormReportAppController extends DefaultBaseController {
@ApiImplicitParam(name = "formVersion", value = "表单版本", paramType = "path") @ApiImplicitParam(name = "formVersion", value = "表单版本", paramType = "path")
}) })
@PostMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}") @PostMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}")
public SuccessResult save(@RequestHeader("token") String token, public synchronized SuccessResult save(@RequestHeader("token") String token,
@PathVariable("processDefinitionId") String processDefinitionId, @PathVariable("processDefinitionId") String processDefinitionId,
@PathVariable("formCode") String formCode, @PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion, @PathVariable("formVersion") Integer formVersion,
@ -61,7 +63,7 @@ public class OaFormReportAppController extends DefaultBaseController {
@ApiImplicitParam(name = "uid", value = "表单主键", paramType = "path") @ApiImplicitParam(name = "uid", value = "表单主键", paramType = "path")
}) })
@PutMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}/is-need-claim/{isNeedClaim}/uid/{uid}") @PutMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}/is-need-claim/{isNeedClaim}/uid/{uid}")
public SuccessResult update(@RequestHeader("token") String token, public synchronized SuccessResult update(@RequestHeader("token") String token,
@PathVariable("taskId") String taskId, @PathVariable("taskId") String taskId,
@PathVariable("formCode") String formCode, @PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion, @PathVariable("formVersion") Integer formVersion,
@ -76,6 +78,62 @@ public class OaFormReportAppController extends DefaultBaseController {
return new SuccessResult(); return new SuccessResult();
} }
@ApiOperation(value = "更新回退", notes = "更新回退接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "token", value = "token", paramType = "header"),
@ApiImplicitParam(name = "processInstanceId", value = "流程实例ID", paramType = "path"),
@ApiImplicitParam(name = "taskId", value = "当前任务ID", paramType = "path"),
@ApiImplicitParam(name = "nodeId", value = "跳转节点ID", paramType = "path")
})
@PutMapping("update-go-back/process-instance-id/{processInstanceId}/task-id/{taskId}/node-id/{nodeId}")
public synchronized SuccessResult updateGoBack(@RequestHeader("token") String token,
@PathVariable("processInstanceId") String processInstanceId,
@PathVariable("taskId") String taskId,
@PathVariable("nodeId") String nodeId,
@RequestBody Map<String, String> params) {
String reason = params.get(IOaFormReportService.KEY_REASON);
if (StringUtils.isBlank(reason)) {
throw new ParamsException("回退原因不能为空");
}
oaFormReportService.updateGoBack(token, processInstanceId, taskId, nodeId, reason);
return new SuccessResult();
}
@ApiOperation(value = "更新强制结束", notes = "更新强制结束接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "token", value = "token", paramType = "header"),
@ApiImplicitParam(name = "processInstanceId", value = "流程实例ID", paramType = "path"),
@ApiImplicitParam(name = "taskId", value = "当前任务ID", paramType = "path")
})
@PutMapping("update-forced-end/process-instance-id/{processInstanceId}/task-id/{taskId}")
public synchronized SuccessResult updateForcedEnd(@RequestHeader("token") String token,
@PathVariable("processInstanceId") String processInstanceId,
@PathVariable("taskId") String taskId,
@RequestBody Map<String, String> params) {
String reason = params.get(IOaFormReportService.KEY_REASON);
if (StringUtils.isBlank(reason)) {
throw new ParamsException("结束原因不能为空");
}
oaFormReportService.updateForcedEnd(token, processInstanceId, taskId, reason);
return new SuccessResult();
}
@ApiOperation(value = "更新代理人", notes = "更新代理人接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "token", value = "token", paramType = "header"),
@ApiImplicitParam(name = "processInstanceId", value = "流程实例ID", paramType = "path"),
@ApiImplicitParam(name = "taskId", value = "当前任务ID", paramType = "path")
})
@PutMapping("update-assignee/process-instance-id/{processInstanceId}/task-id/{taskId}")
@CheckRequestBodyAnnotation
public synchronized SuccessResult updateAssignee(@RequestHeader("token") String token,
@PathVariable("processInstanceId") String processInstanceId,
@PathVariable("taskId") String taskId,
@RequestBody UpdateTaskAssigneeVO updateTaskAssigneeVO) {
oaFormReportService.updateTaskAssignee(token, processInstanceId, taskId, updateTaskAssigneeVO);
return new SuccessResult();
}
@ApiOperation(value = "查询表单", notes = "更新表单接口") @ApiOperation(value = "查询表单", notes = "更新表单接口")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "token", value = "token", paramType = "header"), @ApiImplicitParam(name = "token", value = "token", paramType = "header"),

View File

@ -28,10 +28,10 @@ public class OaFormReportAppRouteController extends DefaultBaseController {
private IOaFormReportRouteService oaFormReportRouteService; private IOaFormReportRouteService oaFormReportRouteService;
@GetMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}") @GetMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}")
public void get(@RequestParam("token") String token, public void get(@PathVariable("processDefinitionId") String processDefinitionId,
@PathVariable("processDefinitionId") String processDefinitionId,
@PathVariable("formCode") String formCode, @PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion, @PathVariable("formVersion") Integer formVersion,
@RequestParam("token") String token,
HttpSession httpSession, HttpSession httpSession,
HttpServletRequest httpServletRequest, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) { HttpServletResponse httpServletResponse) {
@ -39,11 +39,11 @@ public class OaFormReportAppRouteController extends DefaultBaseController {
} }
@GetMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}/is-need-claim/{isNeedClaim}") @GetMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}/is-need-claim/{isNeedClaim}")
public void update(@RequestHeader("token") String token, public void update(@PathVariable("taskId") String taskId,
@PathVariable("taskId") String taskId,
@PathVariable("formCode") String formCode, @PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion, @PathVariable("formVersion") Integer formVersion,
@PathVariable("isNeedClaim") Integer isNeedClaim, @PathVariable("isNeedClaim") Integer isNeedClaim,
@RequestParam("token") String token,
HttpSession httpSession, HttpSession httpSession,
HttpServletRequest httpServletRequest, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) { HttpServletResponse httpServletResponse) {
@ -51,9 +51,9 @@ public class OaFormReportAppRouteController extends DefaultBaseController {
} }
@GetMapping("show/code/{formCode}/version/{formVersion}") @GetMapping("show/code/{formCode}/version/{formVersion}")
public void show(@RequestHeader("token") String token, public void show(@PathVariable("formCode") String formCode,
@PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion, @PathVariable("formVersion") Integer formVersion,
@RequestParam("token") String token,
HttpSession httpSession, HttpSession httpSession,
HttpServletRequest httpServletRequest, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) { HttpServletResponse httpServletResponse) {

View File

@ -123,6 +123,29 @@ public interface IOaFormReportService {
*/ */
void updateGoBack(String processInstanceId, String currentTaskId, String jumpNodeId, String reason); void updateGoBack(String processInstanceId, String currentTaskId, String jumpNodeId, String reason);
/**
* 更新回退
*
* @param token
* @param processInstanceId
* @param currentTaskId
* @param jumpNodeId
* @param reason
*/
void updateGoBack(String token, String processInstanceId, String currentTaskId, String jumpNodeId, String reason);
/**
* 更新回退
*
* @param userId
* @param userName
* @param processInstanceId
* @param currentTaskId
* @param jumpNodeId
* @param reason
*/
void updateGoBackByUserIdAndUserName(String userId, String userName, String processInstanceId, String currentTaskId, String jumpNodeId, String reason);
/** /**
* 强制结束 * 强制结束
* *
@ -132,6 +155,27 @@ public interface IOaFormReportService {
*/ */
void updateForcedEnd(String processInstanceId, String currentTaskId, String reason); void updateForcedEnd(String processInstanceId, String currentTaskId, String reason);
/**
* 强制结束
*
* @param token
* @param processInstanceId
* @param currentTaskId
* @param reason
*/
void updateForcedEnd(String token, String processInstanceId, String currentTaskId, String reason);
/**
* 强制结束
*
* @param userId
* @param userName
* @param processInstanceId
* @param currentTaskId
* @param reason
*/
void updateForcedEndByUserIdAndUserName(String userId, String userName, String processInstanceId, String currentTaskId, String reason);
/** /**
* 更新任务 * 更新任务
* *
@ -141,6 +185,25 @@ public interface IOaFormReportService {
*/ */
void updateTaskAssignee(String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO); void updateTaskAssignee(String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO);
/**
* 更新任务
* @param token
* @param processInstanceId
* @param taskId
* @param updateTaskAssigneeVO
*/
void updateTaskAssignee(String token, String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO);
/**
* 更新任务
* @param userId
* @param userName
* @param processInstanceId
* @param taskId
* @param updateTaskAssigneeVO
*/
void updateTaskAssigneeByUserIdAndUserName(String userId, String userName, String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO);
/** /**
* 表单详情 * 表单详情
* *

View File

@ -21,6 +21,7 @@ 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.module.form.service.report.IFormReportService;
import ink.wgink.pojo.app.AppTokenUser; import ink.wgink.pojo.app.AppTokenUser;
import ink.wgink.pojo.app.AppTokenUserDepartment;
import ink.wgink.pojo.bos.UserInfoBO; import ink.wgink.pojo.bos.UserInfoBO;
import ink.wgink.pojo.dtos.department.DepartmentSimpleDTO; import ink.wgink.pojo.dtos.department.DepartmentSimpleDTO;
import ink.wgink.pojo.dtos.user.UserDTO; import ink.wgink.pojo.dtos.user.UserDTO;
@ -88,15 +89,17 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
@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) {
Map<String, Object> model = getSaveModel(processDefinitionId); UserInfoBO currentUser = securityComponent.getCurrentUser();
setPageCurrentUser(model); Map<String, Object> model = getSaveModel(currentUser.getUserId(), processDefinitionId);
setPageCurrentUser(currentUser.getUserId(), currentUser.getUserName(), currentUser.getDepartments(), model);
formReportRouteService.save(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model); formReportRouteService.save(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model);
} }
@Override @Override
public void update(String taskId, String formCode, Integer formVersion, Integer isNeedClaim, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { public void update(String taskId, String formCode, Integer formVersion, Integer isNeedClaim, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
Map<String, Object> model = getUpdateModel(taskId, isNeedClaim); UserInfoBO currentUser = securityComponent.getCurrentUser();
setPageCurrentUser(model); Map<String, Object> model = getUpdateModel(currentUser.getUserId(), taskId, isNeedClaim);
setPageCurrentUser(currentUser.getUserId(), currentUser.getUserName(), currentUser.getDepartments(), model);
// 设置代理人 // 设置代理人
formReportRouteService.update(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model); formReportRouteService.update(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model);
} }
@ -135,15 +138,17 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
@Override @Override
public void appSave(String token, String processDefinitionId, String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { public void appSave(String token, String processDefinitionId, String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
Map<String, Object> model = getSaveModel(processDefinitionId); AppTokenUser appTokenUser = getAppTokenUser(token);
setAppPageCurrentUser(token, model); Map<String, Object> model = getSaveModel(appTokenUser.getId(), processDefinitionId);
setAppPageCurrentUser(appTokenUser.getId(), appTokenUser.getName(), appTokenUser.getDepartments(), model);
formReportRouteService.appSave(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model); formReportRouteService.appSave(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model);
} }
@Override @Override
public void appUpdate(String token, String taskId, String formCode, Integer formVersion, Integer isNeedClaim, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { public void appUpdate(String token, String taskId, String formCode, Integer formVersion, Integer isNeedClaim, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
Map<String, Object> model = getUpdateModel(taskId, isNeedClaim); AppTokenUser appTokenUser = getAppTokenUser(token);
setAppPageCurrentUser(token, model); Map<String, Object> model = getUpdateModel(appTokenUser.getId(), taskId, isNeedClaim);
setAppPageCurrentUser(appTokenUser.getId(), appTokenUser.getName(), appTokenUser.getDepartments(), model);
formReportRouteService.appUpdate(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model); formReportRouteService.appUpdate(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model);
} }
@ -170,7 +175,6 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
} }
/** /**
* 设置会签 * 设置会签
* *
@ -211,12 +215,11 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
* *
* @param model * @param model
*/ */
private void setPageCurrentUser(Map<String, Object> model) { private void setPageCurrentUser(String userId, String userName, List<DepartmentSimpleDTO> departmentSimpleDTOS, Map<String, Object> model) {
CurrentUserVO currentUserVO = new CurrentUserVO(); CurrentUserVO currentUserVO = new CurrentUserVO();
UserInfoBO currentUser = securityComponent.getCurrentUser(); currentUserVO.setUserId(userId);
currentUserVO.setUserId(currentUser.getUserId()); currentUserVO.setUserName(userName);
currentUserVO.setUserName(currentUser.getUserName()); currentUserVO.setDepartments(departmentSimpleDTOS);
currentUserVO.setDepartments(currentUser.getDepartments());
model.put("currentUser", JSONObject.toJSONString(currentUserVO)); model.put("currentUser", JSONObject.toJSONString(currentUserVO));
} }
@ -225,12 +228,11 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
* *
* @param model * @param model
*/ */
private void setAppPageCurrentUser(String token, Map<String, Object> model) { private void setAppPageCurrentUser(String userId, String userName, List<AppTokenUserDepartment> appTokenUserDepartments, Map<String, Object> model) {
AppTokenUser appTokenUser = getAppTokenUser(token);
CurrentUserVO currentUserVO = new CurrentUserVO(); CurrentUserVO currentUserVO = new CurrentUserVO();
currentUserVO.setUserId(appTokenUser.getId()); currentUserVO.setUserId(userId);
currentUserVO.setUserName(appTokenUser.getName()); currentUserVO.setUserName(userName);
currentUserVO.setDepartments(appTokenUser.getDepartments().stream().map(appTokenUserDepartment -> { currentUserVO.setDepartments(appTokenUserDepartments.stream().map(appTokenUserDepartment -> {
DepartmentSimpleDTO departmentSimpleDTO = new DepartmentSimpleDTO(); DepartmentSimpleDTO departmentSimpleDTO = new DepartmentSimpleDTO();
departmentSimpleDTO.setDepartmentId(appTokenUserDepartment.getDepartmentId()); departmentSimpleDTO.setDepartmentId(appTokenUserDepartment.getDepartmentId());
departmentSimpleDTO.setDepartmentName(appTokenUserDepartment.getDepartmentName()); departmentSimpleDTO.setDepartmentName(appTokenUserDepartment.getDepartmentName());
@ -245,7 +247,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
* @param processDefinitionId * @param processDefinitionId
* @return * @return
*/ */
private Map<String, Object> getSaveModel(String processDefinitionId) { private Map<String, Object> getSaveModel(String currentUserId, String processDefinitionId) {
Map<String, Object> model = getHashMap(10); Map<String, Object> model = getHashMap(10);
model.put("processDefinitionId", processDefinitionId); model.put("processDefinitionId", processDefinitionId);
model.put("formType", FormTypeEnum.OA.getValue()); model.put("formType", FormTypeEnum.OA.getValue());
@ -257,7 +259,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
LOG.debug("发起流程,查询第一个用户任务"); LOG.debug("发起流程,查询第一个用户任务");
UserTask firstUserTask = activitiModelService.getFirstUserTaskByProcessDefinitionId(processDefinitionId); UserTask firstUserTask = activitiModelService.getFirstUserTaskByProcessDefinitionId(processDefinitionId);
LOG.debug("发起流程,查询第一个用户任务后直连用户任务列表"); LOG.debug("发起流程,查询第一个用户任务后直连用户任务列表");
List<ConfirmAssigneeVO> confirmAssigneeVOs = listConfirmAssignee(deploymentId, firstUserTask); List<ConfirmAssigneeVO> confirmAssigneeVOs = listConfirmAssignee(currentUserId, deploymentId, firstUserTask);
model.put("confirmAssignees", JSON.toJSONString(confirmAssigneeVOs)); model.put("confirmAssignees", JSON.toJSONString(confirmAssigneeVOs));
setPageFields(deploymentId, firstUserTask, model); setPageFields(deploymentId, firstUserTask, model);
@ -268,11 +270,12 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
/** /**
* 编辑页面Model * 编辑页面Model
* *
* @param currentUserId
* @param taskId * @param taskId
* @param isNeedClaim * @param isNeedClaim
* @return * @return
*/ */
private Map<String, Object> getUpdateModel(String taskId, Integer isNeedClaim) { private Map<String, Object> getUpdateModel(String currentUserId, String taskId, Integer isNeedClaim) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (task == null) { if (task == null) {
throw new SearchException("任务不存在"); throw new SearchException("任务不存在");
@ -292,7 +295,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
model.put("processInstanceId", task.getProcessInstanceId()); model.put("processInstanceId", task.getProcessInstanceId());
model.put("isNeedClaim", isNeedClaim); model.put("isNeedClaim", isNeedClaim);
LOG.debug("查询下一个用户任务后直连用户任务列表"); LOG.debug("查询下一个用户任务后直连用户任务列表");
List<ConfirmAssigneeVO> confirmAssigneeVOs = listConfirmAssignee(deploymentId, currentUserTask); List<ConfirmAssigneeVO> confirmAssigneeVOs = listConfirmAssignee(currentUserId, deploymentId, currentUserTask);
model.put("confirmAssignees", JSON.toJSONString(confirmAssigneeVOs)); model.put("confirmAssignees", JSON.toJSONString(confirmAssigneeVOs));
setPageFields(deploymentId, currentUserTask, model); setPageFields(deploymentId, currentUserTask, model);
@ -394,7 +397,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
* @param currentUserTask * @param currentUserTask
* @return * @return
*/ */
private List<ConfirmAssigneeVO> listConfirmAssignee(String deploymentId, UserTask currentUserTask) { private List<ConfirmAssigneeVO> listConfirmAssignee(String currentUserId, String deploymentId, UserTask currentUserTask) {
LOG.debug("1.获取后续任务节点"); LOG.debug("1.获取后续任务节点");
List<UserTask> nextUserTasks = activitiModelService.listNextUserTasksByUserTask(currentUserTask); List<UserTask> nextUserTasks = activitiModelService.listNextUserTasksByUserTask(currentUserTask);
clearUserTask(nextUserTasks); clearUserTask(nextUserTasks);
@ -424,7 +427,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements
// 设置节点类型 // 设置节点类型
confirmAssigneeVO.setNodeType(oaNodeAssigneePO.getNodeType()); confirmAssigneeVO.setNodeType(oaNodeAssigneePO.getNodeType());
// 设置节点代理人列表 // 设置节点代理人列表
List<String> assigneeList = nodeAssigneeService.listAssigneeUserId(securityComponent.getCurrentUser().getUserId(), oaNodeAssigneePO); List<String> assigneeList = nodeAssigneeService.listAssigneeUserId(currentUserId, oaNodeAssigneePO);
List<UserDTO> userDTOs = userBaseService.listByUserIds(assigneeList); List<UserDTO> userDTOs = userBaseService.listByUserIds(assigneeList);
List<ConfirmAssigneeVO.AssigneeVO> assigneeVOs = userDTOs.stream().map(userDTO -> { List<ConfirmAssigneeVO.AssigneeVO> assigneeVOs = userDTOs.stream().map(userDTO -> {
ConfirmAssigneeVO.AssigneeVO assigneeVO = new ConfirmAssigneeVO.AssigneeVO(); ConfirmAssigneeVO.AssigneeVO assigneeVO = new ConfirmAssigneeVO.AssigneeVO();

View File

@ -86,7 +86,7 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo
OaFormReportUnWantedValueBO oaFormReportUnWantedValueBO = getOaFormReportUnWantedValue(params); OaFormReportUnWantedValueBO oaFormReportUnWantedValueBO = getOaFormReportUnWantedValue(params);
LOG.debug("保存表单"); LOG.debug("保存表单");
String uid = formReportService.saveAndReturnId(formCode, formVersion, params); String uid = formReportService.saveByUserIdAndReturnId(userId, formCode, formVersion, params);
LOG.debug("定义流程发起人"); LOG.debug("定义流程发起人");
Map<String, Object> variables = getHashMap(2); Map<String, Object> variables = getHashMap(2);
variables.put(KEY_FORM_CODE, formCode); variables.put(KEY_FORM_CODE, formCode);
@ -157,14 +157,27 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo
@Override @Override
public void updateGoBack(String processInstanceId, String currentTaskId, String jumpNodeId, String reason) { public void updateGoBack(String processInstanceId, String currentTaskId, String jumpNodeId, String reason) {
UserInfoBO currentUser = securityComponent.getCurrentUser();
String userId = currentUser.getUserId();
String userName = currentUser.getUserName();
updateGoBackByUserIdAndUserName(userId, userName, processInstanceId, currentTaskId, jumpNodeId, reason);
}
@Override
public void updateGoBack(String token, String processInstanceId, String currentTaskId, String jumpNodeId, String reason) {
AppTokenUser appTokenUser = getAppTokenUser(token);
String userId = appTokenUser.getId();
String userName = appTokenUser.getName();
updateGoBackByUserIdAndUserName(userId, userName, processInstanceId, currentTaskId, jumpNodeId, reason);
}
@Override
public void updateGoBackByUserIdAndUserName(String userId, String userName, String processInstanceId, String currentTaskId, String jumpNodeId, String reason) {
LOG.debug("OA流程回退"); LOG.debug("OA流程回退");
Task currentTask = taskService.createTaskQuery().taskId(currentTaskId).singleResult(); Task currentTask = taskService.createTaskQuery().taskId(currentTaskId).singleResult();
if (currentTask == null) { if (currentTask == null) {
throw new SearchException("任务不存在或已被处理"); throw new SearchException("任务不存在或已被处理");
} }
UserInfoBO currentUser = securityComponent.getCurrentUser();
String userId = currentUser.getUserId();
String userName = currentUser.getUserName();
List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).list(); List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).list();
BpmnModel bpmnModel = activitiModelService.getBpmnModelByProcessDefinitionId(currentTask.getProcessDefinitionId()); BpmnModel bpmnModel = activitiModelService.getBpmnModelByProcessDefinitionId(currentTask.getProcessDefinitionId());
@ -266,14 +279,27 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo
@Override @Override
public void updateForcedEnd(String processInstanceId, String currentTaskId, String reason) { public void updateForcedEnd(String processInstanceId, String currentTaskId, String reason) {
UserInfoBO currentUser = securityComponent.getCurrentUser();
String userId = currentUser.getUserId();
String userName = currentUser.getUserName();
updateForcedEndByUserIdAndUserName(userId, userName, processInstanceId, currentTaskId, reason);
}
@Override
public void updateForcedEnd(String token, String processInstanceId, String currentTaskId, String reason) {
AppTokenUser appTokenUser = getAppTokenUser(token);
String userId = appTokenUser.getId();
String userName = appTokenUser.getName();
updateForcedEndByUserIdAndUserName(userId, userName, processInstanceId, currentTaskId, reason);
}
@Override
public void updateForcedEndByUserIdAndUserName(String userId, String userName, String processInstanceId, String currentTaskId, String reason) {
LOG.debug("OA强制结束"); LOG.debug("OA强制结束");
Task currentTask = taskService.createTaskQuery().taskId(currentTaskId).singleResult(); Task currentTask = taskService.createTaskQuery().taskId(currentTaskId).singleResult();
if (currentTask == null) { if (currentTask == null) {
throw new SearchException("任务不存在或已被处理"); throw new SearchException("任务不存在或已被处理");
} }
UserInfoBO currentUser = securityComponent.getCurrentUser();
String userId = currentUser.getUserId();
String userName = currentUser.getUserName();
List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).unfinished().list(); List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).unfinished().list();
BpmnModel bpmnModel = activitiModelService.getBpmnModelByProcessDefinitionId(currentTask.getProcessDefinitionId()); BpmnModel bpmnModel = activitiModelService.getBpmnModelByProcessDefinitionId(currentTask.getProcessDefinitionId());
@ -286,7 +312,7 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo
List<SequenceFlow> outgoingFlows = currentUserTask.getOutgoingFlows(); List<SequenceFlow> outgoingFlows = currentUserTask.getOutgoingFlows();
LOG.debug("4. 缓存原始输出流"); LOG.debug("4. 缓存原始输出流");
List<SequenceFlow> oldOutgoingFlows = new ArrayList<>(); List<SequenceFlow> oldOutgoingFlows = new ArrayList<>();
oldOutgoingFlows.addAll(currentUserTask.getOutgoingFlows()); oldOutgoingFlows.addAll(outgoingFlows);
LOG.debug("5. 创建新序列流"); LOG.debug("5. 创建新序列流");
currentUserTask.getOutgoingFlows().clear(); currentUserTask.getOutgoingFlows().clear();
List<SequenceFlow> newOutgoingFlows = new ArrayList<>(); List<SequenceFlow> newOutgoingFlows = new ArrayList<>();
@ -344,7 +370,19 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo
UserInfoBO currentUser = securityComponent.getCurrentUser(); UserInfoBO currentUser = securityComponent.getCurrentUser();
String userId = currentUser.getUserId(); String userId = currentUser.getUserId();
String userName = currentUser.getUserName(); String userName = currentUser.getUserName();
updateTaskAssigneeByUserIdAndUserName(userId, userName, processInstanceId, taskId, updateTaskAssigneeVO);
}
@Override
public void updateTaskAssignee(String token, String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO) {
AppTokenUser appTokenUser = getAppTokenUser(token);
String userId = appTokenUser.getId();
String userName = appTokenUser.getName();
updateTaskAssigneeByUserIdAndUserName(userId, userName, processInstanceId, taskId, updateTaskAssigneeVO);
}
@Override
public void updateTaskAssigneeByUserIdAndUserName(String userId, String userName, String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO) {
taskService.setAssignee(taskId, updateTaskAssigneeVO.getAssignee()); taskService.setAssignee(taskId, updateTaskAssigneeVO.getAssignee());
TaskCommentBO taskCommentBO = new TaskCommentBO(); TaskCommentBO taskCommentBO = new TaskCommentBO();

View File

@ -81,7 +81,6 @@ public class FormReportServiceImpl extends DefaultBaseService implements IFormRe
// 设置主标题并更新到params保存到流程中 // 设置主标题并更新到params保存到流程中
inserts.add(IFormDesignService.FIELD_MAIN_TITLE); inserts.add(IFormDesignService.FIELD_MAIN_TITLE);
String mainTitle = getMainTitleCode(formPO.getMainTitleTpl(), params); String mainTitle = getMainTitleCode(formPO.getMainTitleTpl(), params);
params.put(IFormDesignService.FIELD_MAIN_TITLE, mainTitle);
values.add(mainTitle); values.add(mainTitle);
for (Map.Entry<String, Object> kv : params.entrySet()) { for (Map.Entry<String, Object> kv : params.entrySet()) {
@ -105,6 +104,8 @@ public class FormReportServiceImpl extends DefaultBaseService implements IFormRe
insertParams.put(IFormDesignService.PARAM_FORM_VERSION, formVersion); insertParams.put(IFormDesignService.PARAM_FORM_VERSION, formVersion);
insertParams.put(IFormDesignService.PARAM_INSERTS, inserts); insertParams.put(IFormDesignService.PARAM_INSERTS, inserts);
insertParams.put(IFormDesignService.PARAM_VALUES, values); insertParams.put(IFormDesignService.PARAM_VALUES, values);
params.put(IFormDesignService.FIELD_MAIN_TITLE, mainTitle);
formReportDao.save(insertParams); formReportDao.save(insertParams);
return uid; return uid;
} }

View File

@ -3,7 +3,7 @@
} }
.layui-form-item { .layui-form-item {
margin-bottom: 0px; margin-bottom: 0px;
padding: 15px 0; padding: 0;
clear: both; clear: both;
border-top: 1px; border-top: 1px;
border-left: 0; border-left: 0;
@ -237,3 +237,45 @@
text-align: center; text-align: center;
background-color: #FFF; background-color: #FFF;
} }
#appSubmitFormBtns {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.3);
z-index: 1000;
}
#appSubmitFormBtnsContainer {
position: absolute;
bottom: -160px;
left: 0;
width: 100%;
max-height: 160px;
background-color: white;
overflow: auto;
}
#appFormBtns {
display: none;
position: fixed;
top: 0;
right: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.3);
z-index: 1000;
}
#appFormBtnsContainer {
position: absolute;
bottom: -160px;
left: 0;
width: 100%;
max-height: 160px;
background-color: white;
overflow: auto;
}

View File

@ -9,6 +9,17 @@
border-bottom: 1px solid #f1f1f1; border-bottom: 1px solid #f1f1f1;
} }
.oa-form-footer-tool-bar {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
padding: 15px 0;
z-index: 100;
background-color: #FFF;
border-bottom: 1px solid #f1f1f1;
}
.layui-card { .layui-card {
margin-bottom: 0px; margin-bottom: 0px;
} }
@ -30,6 +41,17 @@
padding: 0 15px; padding: 0 15px;
} }
.oa-form-footer-tool-bar .tool-bar-left {
min-height: 30px;
padding: 0 15px;
}
.oa-form-footer-tool-bar .tool-bar-right {
min-height: 30px;
text-align: right;
padding: 0 15px;
}
#runtimeProcessImageBox { #runtimeProcessImageBox {
position: relative; position: relative;
} }
@ -69,11 +91,18 @@
} }
#submitFormBtnsContainer { #submitFormBtnsContainer {
position: relative; position: absolute;
top: 0; top: 0;
left: -180px; left: 0;
width: 180px; width: 180px;
height: 100%; height: 100%;
background-color: white; background-color: white;
overflow: auto; overflow: auto;
animation-name: slideLeftBtnsIn;
animation-duration: 300ms;
}
@keyframes slideLeftBtnsIn {
from {left: -180px}
to {left: 0px}
} }

View File

@ -243,22 +243,21 @@ function OaFormUtil(layui) {
/** /**
* 初始化提交按钮 * 初始化提交按钮
* @param confirmAssignees * @param confirmAssignees
* @param opt
*/ */
this.initSubmitBtns = function (confirmAssignees) { this.initSubmitBtns = function (confirmAssignees, opt) {
var btnColor = ['', 'layui-btn-normal', 'layui-btn-warm']; var btnColor = ['', 'layui-btn-normal', 'layui-btn-warm'];
if(confirmAssignees.length < 3) { var isApp = opt && opt.isApp ? opt.isApp : false;
var btns = ''; if(isApp) {
for (var i = 0, item; item = confirmAssignees[i++];) { var appButtonCount = 0;
btns += '<button type="button" id="submitFormBtn' + i + '" class="layui-btn layui-btn-sm ' + btnColor[(i - 1) % 3] + ' confirm-btn" lay-submit lay-filter="submit' + i + '" data-select-type="' + item.nodeType + '" data-index="' + (i - 1) + '" data-next-end-event="' + item.nextEndEvent + '" data-btn-exc="' + item.btnExc + '">' + item.btnText + '</button>'
}
$('#submitBtnGroup').append(btns);
} else {
$('#submitBtnGroup').append('<button type="button" id="showSubmitFormBtns" class="layui-btn layui-btn-primary layui-btn-xs"><i class="fa fa-list-ul" aria-hidden="true"></i> 提交</button>');
var html = '<div id="submitFormBtns">'; $('#submitBtnGroup').append('<button type="button" id="appShowSubmitFormBtns" class="layui-btn layui-btn-primary layui-btn-xs"><i class="fa fa-list-ul" aria-hidden="true"></i> 提交</button>');
html += '<div id="submitFormBtnsContainer">';
html += '<div class="layui-btn-container" style="padding: 10px;">' var html = '<div id="appSubmitFormBtns">';
html += '<div id="appSubmitFormBtnsContainer">';
html += '<div class="layui-btn-container" style="padding: 10px;">';
for (var i = 0, item; item = confirmAssignees[i++];) { for (var i = 0, item; item = confirmAssignees[i++];) {
appButtonCount++;
html += '<button type="button" id="submitFormBtn' + i + '" class="layui-col-xs12 layui-btn layui-btn-sm ' + btnColor[(i - 1) % 3] + ' confirm-btn" lay-submit lay-filter="submit' + i + '" data-select-type="' + item.nodeType + '" data-index="' + (i - 1) + '" data-next-end-event="' + item.nextEndEvent + '" data-btn-exc="' + item.btnExc + '">' + item.btnText + '</button>' html += '<button type="button" id="submitFormBtn' + i + '" class="layui-col-xs12 layui-btn layui-btn-sm ' + btnColor[(i - 1) % 3] + ' confirm-btn" lay-submit lay-filter="submit' + i + '" data-select-type="' + item.nodeType + '" data-index="' + (i - 1) + '" data-next-end-event="' + item.nextEndEvent + '" data-btn-exc="' + item.btnExc + '">' + item.btnText + '</button>'
} }
html += '</div>'; html += '</div>';
@ -267,19 +266,56 @@ function OaFormUtil(layui) {
$('#submitBtnGroup').append(html) $('#submitBtnGroup').append(html)
$(document).on('click', '#submitFormBtns', function() { var maxHeight = appButtonCount * 30 + (appButtonCount + 1) * 10;
maxHeight = maxHeight > 160 ? 160 : maxHeight;
$(document).on('click', '#appSubmitFormBtns', function() {
$(this).hide(); $(this).hide();
$('#submitFormBtnsContainer').css('left', '-180px'); $('#appSubmitFormBtnsContainer').css('bottom', (-1 * maxHeight +'px'));
}) })
$(document).on('click', '#submitFormBtnsContainer', function(e) { $(document).on('click', '#appSubmitFormBtnsContainer', function(e) {
e.stopPropagation() e.stopPropagation()
}) })
$(document).on('click', '#showSubmitFormBtns', function() { $(document).on('click', '#appShowSubmitFormBtns', function() {
$('#submitFormBtns').show(); $('#appSubmitFormBtns').show();
$('#submitFormBtnsContainer').animate({left: '0'}, 300); $('#appSubmitFormBtnsContainer').animate({bottom: 0}, 200);
}) })
} else {
if(confirmAssignees.length < 4) {
var btns = '';
for (var i = 0, item; item = confirmAssignees[i++];) {
btns += '<button type="button" id="submitFormBtn' + i + '" class="layui-btn layui-btn-sm ' + btnColor[(i - 1) % 3] + ' confirm-btn" lay-submit lay-filter="submit' + i + '" data-select-type="' + item.nodeType + '" data-index="' + (i - 1) + '" data-next-end-event="' + item.nextEndEvent + '" data-btn-exc="' + item.btnExc + '">' + item.btnText + '</button>'
}
$('#submitBtnGroup').append(btns);
} else {
$('#submitBtnGroup').append('<button type="button" id="showSubmitFormBtns" class="layui-btn layui-btn-primary layui-btn-xs"><i class="fa fa-list-ul" aria-hidden="true"></i> 提交</button>');
var html = '<div id="submitFormBtns">';
html += '<div id="submitFormBtnsContainer">';
html += '<div class="layui-btn-container" style="padding: 10px;">'
for (var i = 0, item; item = confirmAssignees[i++];) {
html += '<button type="button" id="submitFormBtn' + i + '" class="layui-col-xs12 layui-btn layui-btn-sm ' + btnColor[(i - 1) % 3] + ' confirm-btn" lay-submit lay-filter="submit' + i + '" data-select-type="' + item.nodeType + '" data-index="' + (i - 1) + '" data-next-end-event="' + item.nextEndEvent + '" data-btn-exc="' + item.btnExc + '">' + item.btnText + '</button>'
}
html += '</div>';
html += '</div>';
html += '</div>';
$('#submitBtnGroup').append(html)
$(document).on('click', '#submitFormBtns', function() {
$(this).hide();
})
$(document).on('click', '#submitFormBtnsContainer', function(e) {
e.stopPropagation()
})
$(document).on('click', '#showSubmitFormBtns', function() {
$('#submitFormBtns').show();
})
}
} }
} }
@ -371,29 +407,65 @@ function OaFormUtil(layui) {
var formVersion = opt.formVersion; var formVersion = opt.formVersion;
var uid = opt.uid; var uid = opt.uid;
var onPreview = typeof (opt.onPreview) === 'function' ? opt.onPreview : null; var onPreview = typeof (opt.onPreview) === 'function' ? opt.onPreview : null;
var appButtonCount = 0;
function initButton() { function initButton() {
var buttons = ''; var buttons = '';
buttons += '<div class="layui-btn-group">'
if(formButton.btnPrint) { if(isApp) {
buttons += '<button id="printBtn" type="button" class="layui-btn layui-btn-xs layui-btn-primary confirm-btn">打印</button>'; buttons += '<button type="button" id="appShowFormBtns" class="layui-btn layui-btn-primary layui-btn-xs"><i class="fa fa-list-ul" aria-hidden="true"></i> 操作</button>'
buttons += '<div id="appFormBtns">';
buttons += '<div id="appFormBtnsContainer">';
buttons += '<div class="layui-btn-container" style="padding: 10px;">'
if(formButton.btnPrint) {
buttons += '<button id="printBtn" type="button" class="layui-col-xs12 layui-btn layui-btn-xs layui-btn-primary confirm-btn">打印</button>';
appButtonCount++;
}
if (formButton.btnGoBack) {
buttons += '<button id="goBackBtn" type="button" class="layui-col-xs12 layui-btn layui-btn-xs layui-btn-warm confirm-btn">回退</button>';
appButtonCount++;
}
if(formButton.btnForcedEnd) {
buttons += '<button id="forcedEndBtn" type="button" class="layui-col-xs12 layui-btn layui-btn-xs layui-btn-danger confirm-btn">强制结束</button>';
appButtonCount++;
}
if(formButton.btnCc) {
buttons += '<button id="ccBtn" type="button" class="layui-col-xs12 layui-btn layui-btn-xs layui-btn-normal confirm-btn">抄送</button>';
appButtonCount++;
}
if(formButton.btnTransfer) {
buttons += '<button id="transferBtn" type="button" class="layui-col-xs12 layui-btn layui-btn-xs layui-btn-primary confirm-btn">转交</button>';
appButtonCount++;
}
if (formButton.btnAttachment) {
buttons += '<button id="attachmentBtn" type="button" class="layui-col-xs12 layui-btn layui-btn-xs layui-btn-default confirm-btn">上传附件</button>';
appButtonCount++;
}
buttons += '</div>';
buttons += '</div>';
buttons += '</div>';
} else {
buttons += '<div class="layui-btn-group">'
if(formButton.btnPrint) {
buttons += '<button id="printBtn" type="button" class="layui-btn layui-btn-xs layui-btn-primary confirm-btn">打印</button>';
}
if (formButton.btnGoBack) {
buttons += '<button id="goBackBtn" type="button" class="layui-btn layui-btn-xs layui-btn-warm confirm-btn">回退</button>';
}
if(formButton.btnForcedEnd) {
buttons += '<button id="forcedEndBtn" type="button" class="layui-btn layui-btn-xs layui-btn-danger confirm-btn">强制结束</button>';
}
if(formButton.btnCc) {
buttons += '<button id="ccBtn" type="button" class="layui-btn layui-btn-xs layui-btn-normal confirm-btn">抄送</button>';
}
if(formButton.btnTransfer) {
buttons += '<button id="transferBtn" type="button" class="layui-btn layui-btn-xs layui-btn-primary confirm-btn">转交</button>';
}
if (formButton.btnAttachment) {
buttons += '<button id="attachmentBtn" type="button" class="layui-btn layui-btn-xs layui-btn-default confirm-btn">上传附件</button>';
}
buttons += '</div>';
} }
if (formButton.btnGoBack) {
buttons += '<button id="goBackBtn" type="button" class="layui-btn layui-btn-xs layui-btn-warm confirm-btn">回退</button>';
}
if(formButton.btnForcedEnd) {
buttons += '<button id="forcedEndBtn" type="button" class="layui-btn layui-btn-xs layui-btn-danger confirm-btn">强制结束</button>';
}
if(formButton.btnCc) {
buttons += '<button id="ccBtn" type="button" class="layui-btn layui-btn-xs layui-btn-normal confirm-btn">抄送</button>';
}
if(formButton.btnTransfer) {
buttons += '<button id="transferBtn" type="button" class="layui-btn layui-btn-xs layui-btn-primary confirm-btn">转交</button>';
}
if (formButton.btnAttachment) {
buttons += '<button id="attachmentBtn" type="button" class="layui-btn layui-btn-xs layui-btn-default confirm-btn">上传附件</button>';
}
buttons += '</div>';
buttons += '<div class="layui-btn-group">'; buttons += '<div class="layui-btn-group">';
buttons += '<button id="showAttachmentBtn" type="button" class="layui-btn layui-btn-xs layui-btn-primary" title="附件列表"><i class="fa fa-list-ul" aria-hidden="true"></i></button>'; buttons += '<button id="showAttachmentBtn" type="button" class="layui-btn layui-btn-xs layui-btn-primary" title="附件列表"><i class="fa fa-list-ul" aria-hidden="true"></i></button>';
buttons += '<input type="hidden" name="attachments" id="attachments"/>'; buttons += '<input type="hidden" name="attachments" id="attachments"/>';
@ -403,6 +475,24 @@ function OaFormUtil(layui) {
} }
function addClick() { function addClick() {
if(isApp) {
var maxHeight = appButtonCount * 30 + (appButtonCount + 1) * 10;
maxHeight = maxHeight > 160 ? 160 : maxHeight;
$(document).on('click', '#appFormBtns', function() {
$(this).hide();
$('#appFormBtnsContainer').css('bottom', (-1 * maxHeight +'px'));
})
$(document).on('click', '#appFormBtnsContainer', function(e) {
e.stopPropagation()
})
$(document).on('click', '#appShowFormBtns', function() {
$('#appFormBtns').show();
$('#appFormBtnsContainer').animate({bottom: 0}, 200);
})
}
if (formButton.btnAttachment) { if (formButton.btnAttachment) {
var layerLoadingIndex; var layerLoadingIndex;
var url = 'api/file/v2/upload-file'; var url = 'api/file/v2/upload-file';
@ -465,7 +555,7 @@ function OaFormUtil(layui) {
' <table class="layui-table" lay-size="sm">', ' <table class="layui-table" lay-size="sm">',
' <colgroup>', ' <colgroup>',
' <col>', ' <col>',
onPreview && formButton.btnAttachment ? '<col width="100">' : '<col width="60">', onPreview && formButton.btnAttachment ? '<col width="120">' : '<col width="60">',
' </colgroup>', ' </colgroup>',
' <thead>', ' <thead>',
' <tr>', ' <tr>',
@ -500,11 +590,21 @@ function OaFormUtil(layui) {
' </table>', ' </table>',
'</div>' '</div>'
].join(''); ].join('');
var area;
var offset;
if(isApp) {
area = ['100%', '400px'];
offset = 'b';
} else {
area = ['400px', '100%'];
offset = 'r';
}
layer.open({ layer.open({
type: 1, type: 1,
title: false, title: false,
area: ['400px', '100%'], area: area,
offset: 'r', offset: offset,
anim: 2, anim: 2,
isOutAnim: false, isOutAnim: false,
closeBtn: 0, closeBtn: 0,

View File

@ -222,9 +222,18 @@ function OaUserSelect(layui, opt) {
Methods.refreshSelectedUser(); Methods.refreshSelectedUser();
return; return;
} }
top.restAjax.post(top.restAjax.path('api/user/listbyids', []), { var url;
if(isApp) {
url = 'app/user/list/ids';
} else {
url = 'api/user/listbyids';
}
console.log(headers);
restAjax.post(restAjax.path(url, []), {
ids: selectedUserIdArray ids: selectedUserIdArray
}, null, function(code, data) { }, {
headers: headers
}, function(code, data) {
for(var i = 0, item; item = data[i++];) { for(var i = 0, item; item = data[i++];) {
var user = { var user = {
userId: item.userId, userId: item.userId,
@ -246,7 +255,16 @@ function OaUserSelect(layui, opt) {
// 初始化部门与部门用户 // 初始化部门与部门用户
initDepartmentAndUser: function(parentDepartmentId) { initDepartmentAndUser: function(parentDepartmentId) {
var loadLayerIndex; var loadLayerIndex;
top.restAjax.get(top.restAjax.path('api/department/user/get-department-contain-user-and-sub/department-id/{departmentId}', [parentDepartmentId]), {}, null, function(code, data) { var url;
if(isApp) {
url = 'app/department/user/get-department-contain-user-and-sub/department-id/{departmentId}';
} else {
url = 'api/department/user/get-department-contain-user-and-sub/department-id/{departmentId}';
}
console.log(headers);
restAjax.get(restAjax.path(url, [parentDepartmentId]), {}, {
headers: headers
}, function(code, data) {
Properties.selectedDepartmentArray.push({ Properties.selectedDepartmentArray.push({
departmentId: data.departmentId, departmentId: data.departmentId,
departmentName: data.departmentName, departmentName: data.departmentName,

View File

@ -13,21 +13,26 @@
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all"> <link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
<link rel="stylesheet" type="text/css" href="assets/js/vendor/viewer/viewer.min.css"> <link rel="stylesheet" type="text/css" href="assets/js/vendor/viewer/viewer.min.css">
<link rel="stylesheet" type="text/css" href="static/form/css/form-app.css?v=1"> <link rel="stylesheet" type="text/css" href="static/form/css/form-app.css?v=1">
<script src="static/form/js/rem.js"></script> <link rel="stylesheet" type="text/css" href="static/form/css/oa-user-select.css?v=1">
<link rel="stylesheet" type="text/css" href="static/form/css/oa-form.css?v=1">
</head> </head>
<body> <body>
<div class="layui-anim layui-anim-fadein"> <div class="layui-anim layui-anim-fadein">
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body" style="padding: 15px;"> <div class="layui-card-body" style="padding: 15px;">
<form class="layui-form layui-form-pane" lay-filter="dataForm"> <form class="layui-form layui-form-pane" lay-filter="dataForm">
<#list fields as field> <div class="layui-row oa-form-footer-tool-bar">
${field.html} <div class="layui-col-xs7 tool-bar-left layui-layout-admin">
</#list>
<div class="layui-layout-admin">
<div class="layui-footer form-report-foot">
<div id="submitBtnGroup" class="layui-btn-group"></div> <div id="submitBtnGroup" class="layui-btn-group"></div>
<button type="button" class="layui-btn layui-btn-sm layui-btn-primary close">返回</button>
</div> </div>
<div class="layui-col-xs5 tool-bar-right">
<div id="formButtonGroup"></div>
</div>
</div>
<div id="reportForm" class="save-report-form">
<#list fields as field>
${field.html}
</#list>
</div> </div>
</form> </form>
</div> </div>
@ -37,6 +42,8 @@
<input type="hidden" id="formVersion" value="${r'${formVersion}'}"> <input type="hidden" id="formVersion" value="${r'${formVersion}'}">
</div> </div>
<script src="static/form/js/form-util.js?v=1"></script> <script src="static/form/js/form-util.js?v=1"></script>
<script src="static/form/js/oa-user-select.js?v=1"></script>
<script src="static/form/js/oa-form-util.js?v=1"></script>
<script src="assets/js/vendor/viewer/viewer.min.js"></script> <script src="assets/js/vendor/viewer/viewer.min.js"></script>
<script src="assets/layuiadmin/layui/layui.js"></script> <script src="assets/layuiadmin/layui/layui.js"></script>
<script> <script>
@ -53,21 +60,18 @@
var queryParams = restAjax.params(window.location.href); var queryParams = restAjax.params(window.location.href);
var token = queryParams.token; var token = queryParams.token;
var formUtil = new FormUtil(layui, Viewer); var formUtil = new FormUtil(layui, Viewer);
var oaFormUtil = new OaFormUtil(layui);
// 调试可先设置为空对象 // 调试可先设置为空对象
var confirmAssignees = ${r"${confirmAssignees}"}; var confirmAssignees = ${r"${confirmAssignees}"};
var fields = ${r"${fields}"}; var fields = ${r"${fields}"};
var formButton = ${r"${formButton}"};
function initSubmitBtns() { var currentUser = ${r"${currentUser}"};
var btnColor = ['', 'layui-btn-normal', 'layui-btn-warm'];
var btns = '';
for(var i = 0, item; item = confirmAssignees[i++];) {
btns += '<button type="button" id="submitFormBtn'+ i +'" class="layui-btn layui-btn-sm '+ btnColor[(i - 1) % 3] +' confirm-btn" lay-submit lay-filter="submit'+ i +'" data-select-type="'+ item.nodeType +'" data-index="'+ (i - 1) +'" data-next-end-event="'+ item.nextEndEvent +'" data-btn-exc="'+ item.btnExc +'">'+ item.btnText +'</button>'
}
$('#submitBtnGroup').append(btns);
}
// 初始化 // 初始化
function initData() { function initData() {
oaFormUtil.initSubmitBtns(confirmAssignees, {isApp: true});
oaFormUtil.initFormButtons(formButton, {isApp:false, headers: {token: token}});
<#list fields as field> <#list fields as field>
<#if field.data.tag == 'uploadImage'> <#if field.data.tag == 'uploadImage'>
formUtil.initAppUploadImage('${field.data.id}', ${field.data.count}, {token: token}); formUtil.initAppUploadImage('${field.data.id}', ${field.data.count}, {token: token});
@ -88,16 +92,20 @@
}); });
</#if> </#if>
</#list> </#list>
initSubmitBtns(); oaFormUtil.backFillFields(fields, currentUser);
formUtil.hideFields(fields); oaFormUtil.hideFields(fields);
formUtil.disableFields(fields); oaFormUtil.disableFields(fields);
} }
initData(); initData();
function close() {
window.android.invokeNative('back');
}
// 关闭页面 // 关闭页面
$('.close').on('click', function () { $('.close').on('click', function () {
// 这里写返回按钮的逻辑,默认是关闭', // 这里写返回按钮的逻辑,默认是关闭',
parent.layer.close(parent.layer.getFrameIndex(window.name)); close();
}); });
// 初始化按钮 // 初始化按钮
@ -108,6 +116,8 @@
// 提交前处理 // 提交前处理
formUtil.clearUploadField(formData); formUtil.clearUploadField(formData);
oaFormUtil.setEditHistoryFields(formData, fields);
oaFormUtil.setCcs(formData);
var loadLayerIndex; var loadLayerIndex;
restAjax.post(restAjax.path('app/oa-form-report/save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}', [ restAjax.post(restAjax.path('app/oa-form-report/save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}', [
@ -119,8 +129,10 @@
token: token token: token
} }
}, function (code, data) { }, function (code, data) {
layer.msg('提交成功');
// 这里手动添加操作成功后的操作', // 这里手动添加操作成功后的操作',
layer.msg('提交成功', {time: 1000}, function() {
close();
});
}, function (code, data) { }, function (code, data) {
$('.confirm-btn').show(); $('.confirm-btn').show();
layer.msg(data.msg); layer.msg(data.msg);
@ -164,6 +176,9 @@
users: confirmAssignees[index].assignees, users: confirmAssignees[index].assignees,
selectedUserIds: [], selectedUserIds: [],
onConfirm: function(selectedUsers) { onConfirm: function(selectedUsers) {
if(!selectedUsers) {
return;
}
var assignees = []; var assignees = [];
for(var j = 0, jItem; jItem = selectedUsers[j++];) { for(var j = 0, jItem; jItem = selectedUsers[j++];) {
assignees.push(jItem.userId); assignees.push(jItem.userId);