完善OA app端代码

This commit is contained in:
wanggeng 2022-05-18 11:56:18 +08:00
parent c3eb6959d2
commit 3bc99b32ff
7 changed files with 182 additions and 137 deletions

View File

@ -98,7 +98,7 @@ public class OaAppController extends DefaultBaseController {
}
@GetMapping("list-process-log/process-instance-id/{processInstanceId}")
public List<OaProcessLogDTO> listProcessLog(@PathVariable("processInstanceId") String processInstanceId) {
public List<OaProcessLogDTO> listProcessLog(@RequestHeader("token") String token, @PathVariable("processInstanceId") String processInstanceId) {
return oaService.listProcessLog(processInstanceId);
}

View File

@ -0,0 +1,46 @@
package ink.wgink.module.activiti.controller.app.route.oa;
import ink.wgink.common.base.DefaultBaseController;
import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.module.activiti.service.activiti.IActivitiModelService;
import ink.wgink.module.activiti.service.oa.IOaFormReportRouteService;
import ink.wgink.pojo.result.ErrorResult;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* @ClassName: OaAppRouteController
* @Description: Oa管理
* @Author: wanggeng
* @Date: 2022/3/23 09:54
* @Version: 1.0
*/
@Api(tags = ISystemConstant.API_TAGS_APP_ROUTE_PREFIX + "oa管理")
@Controller
@RequestMapping(ISystemConstant.APP_ROUTE_PREFIX + "/oa")
public class OaAppRouteController extends DefaultBaseController {
@Autowired
private IActivitiModelService activitiModelService;
@ApiOperation(value = "查看运行流程图", notes = "查看运行流程图接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "processInstanceId", value = "流程实例ID", paramType = "path"),
@ApiImplicitParam(name = "token", value = "token", paramType = "query")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("get-runtime-process-image/{processInstanceId}")
public void getRuntimeProcessImage(@PathVariable("processInstanceId") String processInstanceId, @RequestParam("token") String token, HttpServletResponse response) {
activitiModelService.getRuntimeProcessImage(response, processInstanceId);
}
}

View File

@ -2,8 +2,10 @@ package ink.wgink.module.activiti.controller.app.route.oa;
import ink.wgink.common.base.DefaultBaseController;
import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.module.activiti.service.activiti.IActivitiModelService;
import ink.wgink.module.activiti.service.oa.IOaFormReportRouteService;
import io.swagger.annotations.Api;
import ink.wgink.pojo.result.ErrorResult;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@ -26,6 +28,8 @@ public class OaFormReportAppRouteController extends DefaultBaseController {
@Autowired
private IOaFormReportRouteService oaFormReportRouteService;
@Autowired
private IActivitiModelService activitiModelService;
@GetMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}")
public void get(@PathVariable("processDefinitionId") String processDefinitionId,
@ -60,4 +64,15 @@ public class OaFormReportAppRouteController extends DefaultBaseController {
oaFormReportRouteService.appShow(token, formCode, formVersion, httpSession, httpServletRequest, httpServletResponse);
}
@ApiOperation(value = "查看运行流程图", notes = "查看运行流程图接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "processInstanceId", value = "流程实例ID", paramType = "path"),
@ApiImplicitParam(name = "token", value = "token", paramType = "query")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("get-runtime-process-image/{processInstanceId}")
public void getRuntimeProcessImage(@PathVariable("processInstanceId") String processInstanceId, @RequestParam("token") String token, HttpServletResponse response) {
activitiModelService.getRuntimeProcessImage(response, processInstanceId);
}
}

View File

@ -34,7 +34,6 @@
.layui-form-pane .layui-form-text .layui-textarea {
border-width: 0;
padding: 0;
line-height: 0.3rem;
resize: none;
}
@ -48,44 +47,21 @@
display: block;
}
.layui-form-item:last-child {
margin-bottom: 1rem;
}
.layui-btn {
.layui-btn.layui-btn-xs {
height: 30px;
line-height: 30px;
padding: 0 8px;
}
.layui-layout-admin .layui-footer {
padding: 0.1rem 0;
}
.form-report-foot {
padding: 0 !important;
}
/* 上传图片 */
.form-upload-image {
position: relative;
display: inline-block;
margin: 0 0.22rem 0.15rem 0;
}
.form-upload-image:nth-child(3n) {
margin: 0 0 0.15rem 0;
}
.form-upload-image:last-child {
margin-right: 0;
}
.form-upload-image img {
width: 2.15rem;
height: 2.15rem;
object-fit: cover;
}
.layui-btn-container {
text-align: left;
}
@ -111,12 +87,6 @@
}
/* 上传视频 */
.form-upload-video {
position: relative;
display: inline-block;
margin: 0.1rem 0.1rem 0 0;
}
.form-upload-video:last-child {
margin-right: 0;
}
@ -129,12 +99,6 @@
}
/* 上传音频 */
.form-upload-audio {
position: relative;
display: inline-block;
margin: 0.1rem 0.1rem 0 0;
}
.form-upload-audio:last-child {
margin-right: 0;
}

View File

@ -17,7 +17,7 @@
padding: 15px 0;
z-index: 100;
background-color: #FFF;
border-bottom: 1px solid #f1f1f1;
border-top: 1px solid #f1f1f1;
}
.layui-card {
@ -54,6 +54,7 @@
#runtimeProcessImageBox {
position: relative;
overflow: auto;
}
#operationBtnBox {

View File

@ -98,79 +98,87 @@ function OaFormUtil(layui) {
/**
* 初始化日志
*/
function initProcessLog(processInstanceId) {
restAjax.get(restAjax.path('api/oa/list-process-log/process-instance-id/{processInstanceId}', [processInstanceId]), {}, null, function (code, data) {
var ul = '<ul class="layui-timeline">';
for (var i = 0, item; item = data[i++];) {
// 批注
var commentText = '';
var comment = item.comment;
if (comment) {
if (comment.type === 'JOINTLY_SIGN') {
commentText = '动作:会签。批注:' + comment.content + '。时间:' + comment.time;
} else if (comment.type === 'GO_BACK') {
commentText = '动作:回退。批注:' + comment.content + '。时间:' + comment.time;
} else if (comment.type === 'FORCED_END') {
commentText = '动作:强制结束。批注:' + comment.content + '。时间:' + comment.time;
}
function initProcessLog(processInstanceId, isApp, headers) {
var url;
if(isApp) {
url = 'app/oa/list-process-log/process-instance-id/{processInstanceId}';
} else {
url = 'api/oa/list-process-log/process-instance-id/{processInstanceId}';
}
restAjax.get(restAjax.path(url, [processInstanceId]), {}, {
headers: headers
}, function (code, data) {
var ul = '<ul class="layui-timeline">';
for (var i = 0, item; item = data[i++];) {
// 批注
var commentText = '';
var comment = item.comment;
if (comment) {
if (comment.type === 'JOINTLY_SIGN') {
commentText = '动作:会签。批注:' + comment.content + '。时间:' + comment.time;
} else if (comment.type === 'GO_BACK') {
commentText = '动作:回退。批注:' + comment.content + '。时间:' + comment.time;
} else if (comment.type === 'FORCED_END') {
commentText = '动作:强制结束。批注:' + comment.content + '。时间:' + comment.time;
}
// 转交记录
var transferCommentText = '';
var transferComments = item.transferComments;
for(var j = transferComments.length, transferComment; transferComment = transferComments[--j];) {
if(transferCommentText) {
transferCommentText += '\n'
}
transferCommentText += (transferComments.length - j) +'. 转交人:'+ transferComment.userName +'。原因:'+ transferComment.content +'。时间:'+ transferComment.time;
}
var li = [
'<li class="layui-timeline-item">',
' <i class="layui-icon layui-timeline-axis">&#xe63f;</i>',
' <div class="layui-timeline-content layui-text">',
' <h3 class="layui-timeline-title">' + item.startTime + '</h3>',
' <table class="layui-table">',
' <colgroup>',
' <col width="100">',
' <col>',
' </colgroup>',
' <tbody>',
' <tr>',
' <td class="row-title">任务名称</td>',
' <td>' + item.taskName + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">节点状态</td>',
' <td>' + (item.taskStatus == 'alreadyDone' ? '已办' : '待办') + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">结束时间</td>',
' <td>' + (item.endTime ? item.endTime : '-') + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">耗时</td>',
' <td>' + (item.usedTime ? item.usedTime : '0秒') + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">处理人</td>',
' <td>' + (item.userNames == '1' ? '管理员' : item.userNames) + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">备注</td>',
' <td>' + (commentText ? commentText : '无') + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">转交记录</td>',
' <td>' + (transferCommentText ? '<pre>'+ transferCommentText +'</pre>' : '无') + '</td>',
' </tr>',
' </tbody>',
' </table>',
' </div>',
'</li>'
].join('');
ul += li;
}
ul += '</ul>';
$('#processLog').append(ul);
// 转交记录
var transferCommentText = '';
var transferComments = item.transferComments;
for(var j = transferComments.length, transferComment; transferComment = transferComments[--j];) {
if(transferCommentText) {
transferCommentText += '\n'
}
transferCommentText += (transferComments.length - j) +'. 转交人:'+ transferComment.userName +'。原因:'+ transferComment.content +'。时间:'+ transferComment.time;
}
var li = [
'<li class="layui-timeline-item">',
' <i class="layui-icon layui-timeline-axis">&#xe63f;</i>',
' <div class="layui-timeline-content layui-text">',
' <h3 class="layui-timeline-title">' + item.startTime + '</h3>',
' <table class="layui-table">',
' <colgroup>',
' <col width="100">',
' <col>',
' </colgroup>',
' <tbody>',
' <tr>',
' <td class="row-title">任务名称</td>',
' <td>' + item.taskName + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">节点状态</td>',
' <td>' + (item.taskStatus == 'alreadyDone' ? '已办' : '待办') + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">结束时间</td>',
' <td>' + (item.endTime ? item.endTime : '-') + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">耗时</td>',
' <td>' + (item.usedTime ? item.usedTime : '0秒') + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">处理人</td>',
' <td>' + (item.userNames == '1' ? '管理员' : item.userNames) + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">备注</td>',
' <td>' + (commentText ? commentText : '无') + '</td>',
' </tr>',
' <tr>',
' <td class="row-title">转交记录</td>',
' <td>' + (transferCommentText ? '<pre>'+ transferCommentText +'</pre>' : '无') + '</td>',
' </tr>',
' </tbody>',
' </table>',
' </div>',
'</li>'
].join('');
ul += li;
}
ul += '</ul>';
$('#processLog').append(ul);
}, function (code, data) {
layer.msg(data.msg);
});
@ -180,11 +188,17 @@ function OaFormUtil(layui) {
* 初始化流程图
* @param processInstanceId
*/
function initProcessImage(processInstanceId) {
function initProcessImage(processInstanceId, isApp, headers) {
var src;
if(isApp) {
src = 'approute/oa/get-runtime-process-image/' + processInstanceId +'?token='+ headers.token;
} else {
src = 'route/activiti/model/get-runtime-process-image/' + processInstanceId;
}
function initRuntimeProcessImage() {
var html = [
'<div id="runtimeProcessImageBox">',
' <img id="runtimeProcessImage" src="route/activiti/model/get-runtime-process-image/' + processInstanceId + '" alt="流转图" style="height: 100%"/>',
' <img id="runtimeProcessImage" src="'+ src +'" alt="流转图" style="'+ (isApp ? 'width: 100%;' : 'height: 100%;') +'"/>',
'</div>',
'<div id="operationBtnBox" class="layui-btn-group">',
' <button id="searchPlus" type="button" class="layui-btn layui-btn-xs" title="放大">',
@ -211,7 +225,11 @@ function OaFormUtil(layui) {
initRuntimeProcessImage();
function setProcessImageSize() {
$('#runtimeProcessImage').css('height', 100 + processImageEnlargeScale + '%');
if(isApp) {
$('#runtimeProcessImage').css('width', 100 + processImageEnlargeScale + '%');
} else {
$('#runtimeProcessImage').css('height', 100 + processImageEnlargeScale + '%');
}
}
$('#searchPlus').click(function () {
@ -231,13 +249,15 @@ function OaFormUtil(layui) {
/**
* 初始化选择项
*/
this.initTabItem = function (processInstanceId) {
this.initTabItem = function (processInstanceId, opt) {
var isApp = opt && opt.isApp ? opt.isApp : false;
var headers = opt && opt.headers ? opt.headers : {};
$('.layui-tab-item').css({
height: (win.height() - 138) + 'px',
overflow: 'auto'
});
initProcessLog(processInstanceId);
initProcessImage(processInstanceId);
initProcessLog(processInstanceId, isApp, headers);
initProcessImage(processInstanceId, isApp, headers);
}
/**
@ -251,18 +271,20 @@ function OaFormUtil(layui) {
if(isApp) {
var appButtonCount = 0;
$('#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>');
$('#submitBtnGroup').append('<button type="button" id="appShowSubmitFormBtns" class="layui-btn layui-btn-primary"><i class="fa fa-list-ul" aria-hidden="true"></i> 提交</button>');
var html = '<div id="appSubmitFormBtns">';
html += '<div id="appSubmitFormBtnsContainer">';
html += '<div class="layui-btn-container" style="padding: 10px;">';
html += '<div class="layui-btn-container">';
html += '<div class="layui-row" style="padding: 15px;">';
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 ' + 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>';
html += '</div>';
$('#submitBtnGroup').append(html)
@ -413,37 +435,36 @@ function OaFormUtil(layui) {
var buttons = '';
if(isApp) {
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 += '<button type="button" id="appShowFormBtns" class="layui-btn layui-btn-primary"><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++;
}
buttons += '<div class="layui-btn-container">';
buttons += '<div class="layui-row" style="padding: 15px;">';
// app端无打印
if (formButton.btnGoBack) {
buttons += '<button id="goBackBtn" type="button" class="layui-col-xs12 layui-btn layui-btn-xs layui-btn-warm confirm-btn">回退</button>';
buttons += '<button id="goBackBtn" type="button" class="layui-col-xs12 layui-btn 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>';
buttons += '<button id="forcedEndBtn" type="button" class="layui-col-xs12 layui-btn 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>';
buttons += '<button id="ccBtn" type="button" class="layui-col-xs12 layui-btn 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>';
buttons += '<button id="transferBtn" type="button" class="layui-col-xs12 layui-btn 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>';
buttons += '<button id="attachmentBtn" type="button" class="layui-col-xs12 layui-btn layui-btn-default confirm-btn">上传附件</button>';
appButtonCount++;
}
buttons += '</div>';
buttons += '</div>';
buttons += '</div>';
buttons += '</div>';
} else {
buttons += '<div class="layui-btn-group">'
if(formButton.btnPrint) {
@ -467,7 +488,7 @@ function OaFormUtil(layui) {
buttons += '</div>';
}
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 '+ (isApp ? '' : '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="ccs" id="ccs"/>';
buttons += '</div>';

View File

@ -22,10 +22,10 @@
<div class="layui-card-body" style="padding: 15px;">
<form class="layui-form layui-form-pane" lay-filter="dataForm">
<div class="layui-row oa-form-footer-tool-bar">
<div class="layui-col-xs7 tool-bar-left layui-layout-admin">
<div class="layui-col-xs5 tool-bar-left layui-layout-admin">
<div id="submitBtnGroup" class="layui-btn-group"></div>
</div>
<div class="layui-col-xs5 tool-bar-right">
<div class="layui-col-xs7 tool-bar-right">
<div id="formButtonGroup"></div>
</div>
</div>
@ -125,9 +125,7 @@
$('#formCode').val(),
$('#formVersion').val(),
]), formData.field, {
headers: {
token: token
}
headers: {token: token}
}, function (code, data) {
// 这里手动添加操作成功后的操作',
layer.msg('提交成功', {time: 1000}, function() {