fix: 调整统一命名

This commit is contained in:
weifashi 2023-05-30 17:58:43 +08:00
parent e504fb845f
commit 1ad0c3a3ec
20 changed files with 254 additions and 255 deletions

View File

@ -20,20 +20,20 @@ use App\Models\WebSocketDialogMsg;
use App\Module\BillMultipleExport;
use Hhxsv5\LaravelS\Swoole\Task\Task;
/**
* @apiDefine workflow
* @apiDefine approve
*
* 工作流
*/
class WorkflowController extends AbstractController
class ApproveController extends AbstractController
{
private $flow_url = '';
public function __construct()
{
$this->flow_url = env('FLOW_URL') ?: 'http://dootask-workflow-'.env('APP_ID');
$this->flow_url = env('FLOW_URL') ?: 'http://dootask-approve-'.env('APP_ID');
}
/**
* @api {get} api/workflow/verifyToken 01. 验证APi登录
* @api {get} api/approve/verifyToken 01. 验证APi登录
*
* @apiVersion 1.0.0
* @apiGroup users
@ -54,11 +54,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/procdef/all 02. 查询流程定义
* @api {post} api/approve/procdef/all 02. 查询流程定义
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName procdef__all
*
* @apiQuery {String} name 流程名称
@ -80,11 +80,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {get} api/workflow/procdef/del 03. 删除流程定义
* @api {get} api/approve/procdef/del 03. 删除流程定义
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName procdef__del
*
* @apiQuery {String} id 流程ID
@ -106,11 +106,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/process/start 04. 启动流程(审批中)
* @api {post} api/approve/process/start 04. 启动流程(审批中)
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName process__start
*
* @apiQuery {String} proc_name 流程名称
@ -153,14 +153,14 @@ class WorkflowController extends AbstractController
if (empty($dialog)) {
continue;
}
$this->workflowMsg('workflow_reviewer', $dialog, $botUser, $val, $process, 'start');
$this->approveMsg('approve_reviewer', $dialog, $botUser, $val, $process, 'start');
}
// 抄送人
$notifier = $this->handleProcessNode($process);
if ($notifier) {
foreach ($notifier as $val) {
$dialog = WebSocketDialog::checkUserDialog($botUser, $val['target_id']);
$this->workflowMsg('workflow_notifier', $dialog, $botUser, $process, $process);
$this->approveMsg('approve_notifier', $dialog, $botUser, $process, $process);
}
}
}
@ -169,11 +169,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/process/addGlobalComment 05. 添加全局评论
* @api {post} api/approve/process/addGlobalComment 05. 添加全局评论
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName process__addGlobalComment
*
* @apiQuery {Number} proc_inst_id 流程实例ID
@ -201,11 +201,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/task/complete 06. 审批
* @api {post} api/approve/task/complete 06. 审批
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName task__complete
*
* @apiQuery {Number} task_id 流程ID
@ -243,13 +243,13 @@ class WorkflowController extends AbstractController
if (empty($dialog)) {
continue;
}
$this->workflowMsg('workflow_reviewer', $dialog, $botUser, $val, $process, $pass);
$this->approveMsg('approve_reviewer', $dialog, $botUser, $val, $process, $pass);
}
// 发起人
if($process['is_finished'] == true) {
$dialog = WebSocketDialog::checkUserDialog($botUser, $process['start_user_id']);
if (!empty($dialog)) {
$this->workflowMsg('workflow_submitter', $dialog, $botUser, ['userid' => $data['userid']], $process, $pass);
$this->approveMsg('approve_submitter', $dialog, $botUser, ['userid' => $data['userid']], $process, $pass);
}
}else if ($process['candidate']) {
// 下个审批人
@ -263,7 +263,7 @@ class WorkflowController extends AbstractController
if (empty($dialog)) {
continue;
}
$this->workflowMsg('workflow_reviewer', $dialog, $botUser, $val, $process,'start');
$this->approveMsg('approve_reviewer', $dialog, $botUser, $val, $process,'start');
}
}
@ -273,7 +273,7 @@ class WorkflowController extends AbstractController
foreach ($notifier as $val) {
$dialog = WebSocketDialog::checkUserDialog($botUser, $val['target_id']);
if (!empty($dialog)) {
$this->workflowMsg('workflow_notifier', $dialog, $botUser, $process, $process);
$this->approveMsg('approve_notifier', $dialog, $botUser, $process, $process);
}
}
}
@ -281,11 +281,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/task/withdraw 07. 撤回
* @api {post} api/approve/task/withdraw 07. 撤回
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName task__withdraw
*
* @apiQuery {Number} task_id 流程ID
@ -320,17 +320,17 @@ class WorkflowController extends AbstractController
continue;
}
//发送撤回提醒
$this->workflowMsg('workflow_reviewer', $dialog, $botUser, $val, $process, 'withdraw');
$this->approveMsg('approve_reviewer', $dialog, $botUser, $val, $process, 'withdraw');
}
return Base::retSuccess('已撤回', Base::arrayKeyToUnderline($task['data']));
}
/**
* @api {post} api/workflow/process/findTask 08. 查询需要我审批的流程(审批中)
* @api {post} api/approve/process/findTask 08. 查询需要我审批的流程(审批中)
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName process__findTask
*
* @apiQuery {String} proc_def_name 流程名称
@ -368,11 +368,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/process/startByMyselfAll 09. 查询我启动的流程(全部)
* @api {post} api/approve/process/startByMyselfAll 09. 查询我启动的流程(全部)
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName process__startByMyselfAll
*
* @apiQuery {String} proc_def_name 流程分类
@ -410,11 +410,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/process/startByMyself 10. 查询我启动的流程(审批中)
* @api {post} api/approve/process/startByMyself 10. 查询我启动的流程(审批中)
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName process__startByMyself
*
* @apiQuery {Number} page 页码
@ -448,11 +448,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/process/findProcNotify 11. 查询抄送我的流程(审批中)
* @api {post} api/approve/process/findProcNotify 11. 查询抄送我的流程(审批中)
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName process__findProcNotify
*
* @apiQuery {Number} userid 用户ID
@ -492,11 +492,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {get} api/workflow/identitylink/findParticipant 12. 查询流程实例的参与者(审批中)
* @api {get} api/approve/identitylink/findParticipant 12. 查询流程实例的参与者(审批中)
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName identitylink__findParticipant
*
* @apiQuery {Number} proc_inst_id 流程实例ID
@ -527,11 +527,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/procHistory/findTask 13. 查询需要我审批的流程(已结束)
* @api {post} api/approve/procHistory/findTask 13. 查询需要我审批的流程(已结束)
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName procHistory__findTask
*
* @apiQuery {String} proc_def_name 流程分类
@ -569,11 +569,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/procHistory/startByMyself 14. 查询我启动的流程(已结束)
* @api {post} api/approve/procHistory/startByMyself 14. 查询我启动的流程(已结束)
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName procHistory__startByMyself
*
* @apiQuery {Number} page 页码
@ -607,11 +607,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {post} api/workflow/procHistory/findProcNotify 15. 查询抄送我的流程(已结束)
* @api {post} api/approve/procHistory/findProcNotify 15. 查询抄送我的流程(已结束)
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName procHistory__findProcNotify
*
* @apiQuery {String} proc_def_name 流程分类
@ -650,11 +650,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {get} api/workflow/identitylinkHistory/findParticipant 16. 查询流程实例的参与者(已结束)
* @api {get} api/approve/identitylinkHistory/findParticipant 16. 查询流程实例的参与者(已结束)
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName identitylinkHistory__findParticipant
*
* @apiQuery {Number} proc_inst_id 流程实例ID
@ -685,11 +685,11 @@ class WorkflowController extends AbstractController
}
/**
* @api {get} api/workflow/process/detail 17. 根据流程ID查询流程详情
* @api {get} api/approve/process/detail 17. 根据流程ID查询流程详情
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName process__detail
*
* @apiQuery {Number} id 流程ID
@ -702,16 +702,16 @@ class WorkflowController extends AbstractController
{
User::auth();
$data['id'] = intval(Request::input('id'));
$workflow = $this->getProcessById($data['id']);
return Base::retSuccess('success', $workflow);
$approve = $this->getProcessById($data['id']);
return Base::retSuccess('success', $approve);
}
/**
* @api {post} api/workflow/export 18. 导出数据
* @api {post} api/approve/export 18. 导出数据
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup workflow
* @apiGroup approve
* @apiName export
*
* @apiQuery {String} proc_def_name 流程分类
@ -839,7 +839,7 @@ class WorkflowController extends AbstractController
];
//
$fileName = '审批记录_' . Base::time() . '.xls';
$filePath = "temp/workflow/export/" . date("Ym", Base::time());
$filePath = "temp/approve/export/" . date("Ym", Base::time());
$export = new BillMultipleExport($sheets);
$res = $export->store($filePath . "/" . $fileName);
if ($res != 1) {
@ -860,10 +860,10 @@ class WorkflowController extends AbstractController
$base64 = base64_encode(Base::array2string([
'file' => $zipFile,
]));
Session::put('workflow::export:userid', $user->userid);
Session::put('approve::export:userid', $user->userid);
return Base::retSuccess('success', [
'size' => Base::twoFloat(filesize($zipPath) / 1024, true),
'url' => Base::fillUrl('api/workflow/down?key=' . urlencode($base64)),
'url' => Base::fillUrl('api/approve/down?key=' . urlencode($base64)),
]);
} else {
return Base::retError('打包失败,请稍后再试...');
@ -882,7 +882,7 @@ class WorkflowController extends AbstractController
}
/**
* @api {get} api/workflow/down 19. 下载导出的审批数据
* @api {get} api/approve/down 19. 下载导出的审批数据
*
* @apiVersion 1.0.0
* @apiGroup system
@ -894,7 +894,7 @@ class WorkflowController extends AbstractController
*/
public function down()
{
$userid = Session::get('workflow::export:userid');
$userid = Session::get('approve::export:userid');
if (empty($userid)) {
return Base::ajaxError("请求已过期,请重新导出!", [], 0, 502);
}
@ -947,11 +947,11 @@ class WorkflowController extends AbstractController
// 审批机器人消息
public function workflowMsg($type, $dialog, $botUser, $toUser, $process, $action = null)
public function approveMsg($type, $dialog, $botUser, $toUser, $process, $action = null)
{
$data = [
'id' => $process['id'],
'nickname' => User::userid2nickname($type == 'workflow_submitter' ? $toUser['userid'] : $process['start_user_id']),
'nickname' => User::userid2nickname($type == 'approve_submitter' ? $toUser['userid'] : $process['start_user_id']),
'proc_def_name' => $process['proc_def_name'],
'department' => $process['department'],
'type' => $process['var']['type'],
@ -964,7 +964,7 @@ class WorkflowController extends AbstractController
$msg_action = null;
if ($action == 'withdraw' || $action == 'pass' || $action == 'refuse') {
// 任务完成,给发起人发送消息
if($type == 'workflow_submitter' && $action != 'withdraw'){
if($type == 'approve_submitter' && $action != 'withdraw'){
return WebSocketDialogMsg::sendMsg($msg_action, $dialog->id, 'text', ['text' => $text], $botUser->userid, false, false, true);
}
// 查找最后一条消息msg_id
@ -982,12 +982,12 @@ class WorkflowController extends AbstractController
$proc_msg->save();
}
// 更新工作报告 未读数量
if($type == 'workflow_reviewer' && $toUser['userid']){
if($type == 'approve_reviewer' && $toUser['userid']){
$params = [
'userid' => [ $toUser['userid'], User::auth()->userid() ],
'msg' => [
'type' => 'workflow',
'action' => 'backlog',
'type' => 'approve',
'action' => 'unread',
'userid' => $toUser['userid'],
]
];

View File

@ -49,7 +49,6 @@ services:
- drawio-webapp
- drawio-export
- minder
- workflow
restart: unless-stopped
redis:
@ -149,8 +148,8 @@ services:
ipv4_address: "${APP_IPPR}.10"
restart: unless-stopped
workflow:
container_name: "dootask-workflow-${APP_ID}"
approve:
container_name: "dootask-approve-${APP_ID}"
image: "hitosea2020/go-workflow:latest"
environment:
TZ: "Asia/Shanghai"

View File

@ -169,19 +169,19 @@ server {
proxy_pass http://minder/;
}
# 工作流
location /workflow/ {
proxy_pass http://workflow/;
# 审批
location /approve/ {
proxy_pass http://approve/;
}
location /workflow/api/ {
auth_request /workflowauth;
proxy_pass http://workflow/api/;
location /approve/api/ {
auth_request /approveAuth;
proxy_pass http://approve/api/;
}
location /workflowauth {
location /approveAuth {
internal;
proxy_set_header Content-Type "application/json";
proxy_set_header Content-Length $request_length;
proxy_pass http://service/api/workflow/verifyToken;
proxy_pass http://service/api/approve/verifyToken;
}
}

View File

@ -79,7 +79,7 @@ export default {
{icon: '', name: 'joinMeeting', label: '加入会议'},
],
[
{icon: '', name: 'review', label: '审批中心'},
{icon: '', name: 'approve', label: '审批中心'},
]
],

View File

@ -11,7 +11,7 @@
<UserAvatar :userid="userId" :size="36" tooltipDisabled/>
</div>
<span>{{userInfo.nickname}}</span>
<Badge v-if="(reportUnreadNumber + backlogUnreadNumber) > 0" class="manage-box-top-report" :overflow-count="999" :count="reportUnreadNumber + backlogUnreadNumber"/>
<Badge v-if="(reportUnreadNumber + approveUnreadNumber) > 0" class="manage-box-top-report" :overflow-count="999" :count="reportUnreadNumber + approveUnreadNumber"/>
<Badge v-else-if="!!clientNewVersion" class="manage-box-top-report" dot/>
<div class="manage-box-arrow">
<Icon type="ios-arrow-up" />
@ -72,7 +72,7 @@
<DropdownItem name="exportTask">{{$L('导出任务统计')}}</DropdownItem>
<DropdownItem name="exportOverdueTask">{{$L('导出超期任务')}}</DropdownItem>
<DropdownItem name="exportCheckin">{{$L('导出签到数据')}}</DropdownItem>
<DropdownItem name="exportWorkflow">{{$L('导出审批数据')}}</DropdownItem>
<DropdownItem name="exportApprove">{{$L('导出审批数据')}}</DropdownItem>
</DropdownMenu>
</Dropdown>
<!-- 其他菜单 -->
@ -92,9 +92,9 @@
class="manage-menu-report-badge"
:count="reportUnreadNumber"/>
<Badge
v-else-if="item.path === 'review' && backlogUnreadNumber > 0"
v-else-if="item.path === 'approve' && approveUnreadNumber > 0"
class="manage-menu-report-badge"
:count="backlogUnreadNumber"/>
:count="approveUnreadNumber"/>
</div>
</DropdownItem>
</template>
@ -249,7 +249,7 @@
<CheckinExport v-model="exportCheckinShow"/>
<!--导出审批数据-->
<WorkflowExport v-model="exportWorkflowShow"/>
<ApproveExport v-model="exportApproveShow"/>
<!--任务详情-->
<TaskModal ref="taskModal"/>
@ -318,7 +318,7 @@ import DialogModal from "./manage/components/DialogModal";
import TaskModal from "./manage/components/TaskModal";
import CheckinExport from "./manage/components/CheckinExport";
import TaskExport from "./manage/components/TaskExport";
import WorkflowExport from "./manage/components/WorkflowExport";
import ApproveExport from "./manage/components/ApproveExport";
import notificationKoro from "notification-koro1";
import {Store} from "le5le-store";
@ -326,7 +326,7 @@ export default {
components: {
TaskExport,
CheckinExport,
WorkflowExport,
ApproveExport,
TaskModal,
DialogModal,
MeetingManager,
@ -364,7 +364,7 @@ export default {
exportTaskShow: false,
exportCheckinShow: false,
exportWorkflowShow: false,
exportApproveShow: false,
dialogMsgSubscribe: null,
@ -408,7 +408,7 @@ export default {
this.$store.dispatch("getUserInfo").catch(_ => {})
this.$store.dispatch("getTaskPriority").catch(_ => {})
this.$store.dispatch("getReportUnread", 0)
this.$store.dispatch("getBacklogUnread", 0)
this.$store.dispatch("getApproveUnread", 0)
//
this.$store.dispatch("needHome").then(_ => {
this.needStartHome = true
@ -454,7 +454,7 @@ export default {
'dialogIns',
'reportUnreadNumber',
'backlogUnreadNumber',
'approveUnreadNumber',
]),
...mapGetters(['dashboardTask']),
@ -560,12 +560,12 @@ export default {
{path: 'archivedProject', name: '已归档的项目'},
{path: 'team', name: '团队管理', divided: true},
{path: 'review', name: '审批中心'},
{path: 'approve', name: '审批中心'},
])
} else {
array.push(...[
{path: 'personal', name: '个人设置', divided: true},
{path: 'review', name: '审批中心'},
{path: 'approve', name: '审批中心'},
{path: 'version', name: '更新版本', divided: true, visible: !!this.clientNewVersion},
{path: 'workReport', name: '工作报告', divided: true},
@ -700,9 +700,9 @@ export default {
this.$store.dispatch("getReportUnread", 1000)
}
break;
case 'workflow':
if (action == 'backlog') {
this.$store.dispatch("getBacklogUnread", 1000)
case 'approve':
if (action == 'unread') {
this.$store.dispatch("getApproveUnread", 1000)
}
break;
}
@ -752,8 +752,8 @@ export default {
case 'exportCheckin':
this.exportCheckinShow = true;
return;
case 'exportWorkflow':
this.exportWorkflowShow = true;
case 'exportApprove':
this.exportApproveShow = true;
return;
case 'workReport':
if (this.reportUnreadNumber > 0) {
@ -774,9 +774,9 @@ export default {
this.goForward('index');
}
return;
case 'review':
case 'approve':
if (this.menu.findIndex((m) => m.path == path) > -1) {
this.goForward({name: 'manage-review'});
this.goForward({name: 'manage-approve'});
}
return;
case 'logout':

View File

@ -1,7 +1,7 @@
<template>
<div class="review-details" :style="{'z-index':modalTransferIndex}">
<div class="review-details-box">
<h2 class="review-details-title">
<div class="approve-details" :style="{'z-index':modalTransferIndex}">
<div class="approve-details-box">
<h2 class="approve-details-title">
<span>{{$L(datas.proc_def_name)}}</span>
<Tag v-if="datas.state == 0" color="cyan">{{$L('待审批')}}</Tag>
<Tag v-if="datas.state == 1" color="cyan">{{$L('审批中')}}</Tag>
@ -9,32 +9,32 @@
<Tag v-if="datas.state == 3" color="red">{{$L('已拒绝')}}</Tag>
<Tag v-if="datas.state == 4" color="red">{{$L('已撤回')}}</Tag>
</h2>
<h3 class="review-details-subtitle"><Avatar :src="datas.userimg" size="24"/><span>{{datas.start_user_name}}</span></h3>
<h3 class="review-details-subtitle"><span>{{$L('提交于')}} {{datas.start_time}}</span></h3>
<h3 class="approve-details-subtitle"><Avatar :src="datas.userimg" size="24"/><span>{{datas.start_user_name}}</span></h3>
<h3 class="approve-details-subtitle"><span>{{$L('提交于')}} {{datas.start_time}}</span></h3>
<Divider/>
<div class="review-details-text" v-if="(datas.proc_def_name || '').indexOf('班') == -1">
<div class="approve-details-text" v-if="(datas.proc_def_name || '').indexOf('班') == -1">
<h4>{{$L('假期类型')}}</h4>
<p>{{$L(datas.var?.type)}}</p>
</div>
<div class="review-details-text">
<div class="approve-details-text">
<h4>{{$L('开始时间')}}</h4>
<p>{{datas.var?.start_time}}</p>
</div>
<div class="review-details-text">
<div class="approve-details-text">
<h4>{{$L('结束时间')}}</h4>
<p>{{datas.var?.end_time}}</p>
</div>
<div class="review-details-text">
<div class="approve-details-text">
<h4>{{ $L('时长') }}{{getTimeDifference(datas.var?.start_time,datas.var?.end_time)['unit']}}</h4>
<p>{{ datas.var?.start_time ? getTimeDifference(datas.var?.start_time,datas.var?.end_time)['time'] : 0 }}</p>
</div>
<div class="review-details-text">
<div class="approve-details-text">
<h4>{{$L('请假事由')}}</h4>
<p>{{datas.var?.description}}</p>
</div>
<div class="review-details-text" v-if="datas.var?.other">
<div class="approve-details-text" v-if="datas.var?.other">
<h4>{{$L('图片')}}</h4>
<div class="img-body">
<div v-for="(src,key) in (datas.var.other).split(',') " @click="onViewPicture(src)">
@ -45,8 +45,8 @@
<Divider/>
<h3 class="review-details-subtitle">{{$L('审批记录')}}</h3>
<Timeline class="review-record-timeline">
<h3 class="approve-details-subtitle">{{$L('审批记录')}}</h3>
<Timeline class="approve-record-timeline">
<template v-for="(item,key) in datas.node_infos">
<!-- 提交 -->
@ -54,11 +54,11 @@
<p class="timeline-title">{{$L('提交')}}</p>
<div class="timeline-body">
<Avatar :src="data.userimg || datas.userimg" size="38"/>
<div class="review-process-left">
<p class="review-process-name">{{data.start_user_name || datas.start_user_name}}</p>
<p class="review-process-state">{{$L('已提交')}}</p>
<div class="approve-process-left">
<p class="approve-process-name">{{data.start_user_name || datas.start_user_name}}</p>
<p class="approve-process-state">{{$L('已提交')}}</p>
</div>
<div class="review-process-right">
<div class="approve-process-right">
<p v-if="parseInt(getTimeAgo(item.claim_time)) < showTimeNum">{{ getTimeAgo(item.claim_time) }}</p>
<p>{{item.claim_time?.substr(0,16)}}</p>
</div>
@ -72,17 +72,17 @@
<p class="timeline-title">{{$L('审批')}}</p>
<div class="timeline-body">
<Avatar :src="(item.node_user_list && item.node_user_list[0]?.userimg) || item.userimg" size="38"/>
<div class="review-process-left">
<p class="review-process-name">{{item.approver}}</p>
<p class="review-process-state" style="color: #6d6d6d;" v-if="!item.identitylink">待审批</p>
<p class="review-process-state" v-if="item.identitylink">
<div class="approve-process-left">
<p class="approve-process-name">{{item.approver}}</p>
<p class="approve-process-state" style="color: #6d6d6d;" v-if="!item.identitylink">待审批</p>
<p class="approve-process-state" v-if="item.identitylink">
<span v-if="item.identitylink.state==0" style="color:#496dff;">{{$L('审批中')}}</span>
<span v-if="item.identitylink.state==1" >{{$L('已通过')}}</span>
<span v-if="item.identitylink.state==2" style="color:#f03f3f;">{{$L('已拒绝')}}</span>
<span v-if="item.identitylink.state==3" style="color:#f03f3f;">{{$L('已撤回')}}</span>
</p>
</div>
<div class="review-process-right">
<div class="approve-process-right">
<p v-if="parseInt(getTimeAgo(item.claim_time)) < showTimeNum">
{{ item.identitylink?.state==0 ?
($L('已等待') + " " + getTimeAgo( datas.node_infos[key-1].claim_time,2)) :
@ -100,8 +100,8 @@
<p class="timeline-title">{{$L('抄送')}}</p>
<div class="timeline-body">
<Avatar :src="'/images/avatar/default_bot.png'" size="38"/>
<div class="review-process-left">
<p class="review-process-name">{{$L('系统')}}</p>
<div class="approve-process-left">
<p class="approve-process-name">{{$L('系统')}}</p>
<p style="font-size: 12px;">{{$L('自动抄送')}}
<span style="color: #486fed;">
{{ item.node_user_list?.map(h=>h.name).join(',') }}
@ -117,8 +117,8 @@
<p class="timeline-title">{{$L('结束')}}</p>
<div class="timeline-body">
<Avatar :src="'/images/avatar/default_bot.png'" size="38"/>
<div class="review-process-left">
<p class="review-process-name">{{$L('系统')}}</p>
<div class="approve-process-left">
<p class="approve-process-name">{{$L('系统')}}</p>
<p style="font-size: 12px;"> {{ datas.is_finished ? $L('已结束') : $L('未结束') }}</p>
</div>
</div>
@ -129,8 +129,8 @@
<template v-if="datas.global_comment">
<Divider/>
<h3 class="review-details-subtitle">{{$L('全文评论')}}</h3>
<div class="review-record-comment">
<h3 class="approve-details-subtitle">{{$L('全文评论')}}</h3>
<div class="approve-record-comment">
<List :split="false" :border="false">
<ListItem v-for="(item,key) in datas.global_comments" :key="key">
<div>
@ -157,7 +157,7 @@
</template>
</div>
<div class="review-operation">
<div class="approve-operation">
<div style="flex: 1;"></div>
<Button type="success" v-if="(datas.candidate || '').split(',').indexOf(userId + '') != -1" @click="approve(1)">{{$L('同意')}}</Button>
<Button type="error" v-if="(datas.candidate || '').split(',').indexOf(userId + '') != -1" @click="approve(2)">{{$L('拒绝')}}</Button>
@ -166,7 +166,7 @@
</div>
<!--评论-->
<Modal v-model="commentShow" :title="$L('评论')" :mask-closable="false" class="page-review-initiate">
<Modal v-model="commentShow" :title="$L('评论')" :mask-closable="false" class="page-approve-initiate">
<Form ref="initiateRef" :model="commentData" :rules="commentRule" label-width="auto" @submit.native.prevent>
<FormItem prop="content" :label="$L('内容')">
<Input type="textarea" v-model="commentData.content"></Input>
@ -218,7 +218,7 @@ export default {
},
watch: {
'$route' (to, from) {
if(to.name == 'manage-review-details'){
if(to.name == 'manage-approve-details'){
this.init()
}
},
@ -233,9 +233,9 @@ export default {
},
computed: {
isShowWarningBtn(){
let is = (this.userId == this.datas.start_user_id);
let is = (this.userId == this.datas.start_user_id) && this.datas?.is_finished != true;
(this.datas.node_infos || []).map(h=>{
if(h.type != 'starter' && h.is_finished == true && h.identitylink?.userid != this.userId) {
if( h.type != 'starter' && h.is_finished == true && h.identitylink?.userid != this.userId) {
is = false;
}
})
@ -292,7 +292,7 @@ export default {
this.datas = this.data
this.$store.dispatch("call", {
method: 'get',
url: 'workflow/process/detail',
url: 'approve/process/detail',
data: {
id:this.data.id,
}
@ -324,7 +324,7 @@ export default {
return `请输入审批意见`
}
this.$store.dispatch("call", {
url: 'workflow/task/complete',
url: 'approve/task/complete',
data: {
task_id: this.datas.task_id,
pass: type == 1,
@ -332,7 +332,7 @@ export default {
}
}).then(({msg}) => {
$A.messageSuccess(msg);
if(this.$route.name=='manage-review-details' || this.$route.name=='manage-messenger'){
if(this.$route.name=='manage-approve-details' || this.$route.name=='manage-messenger'){
this.getInfo()
}else{
this.$emit('approve')
@ -352,7 +352,7 @@ export default {
onOk: () => {
return new Promise((resolve, reject) => {
this.$store.dispatch("call", {
url: 'workflow/task/withdraw',
url: 'approve/task/withdraw',
data: {
task_id: this.datas.task_id,
proc_inst_id: this.datas.id,
@ -360,7 +360,7 @@ export default {
}).then(({msg}) => {
$A.messageSuccess(msg);
resolve();
if(this.$route.name=='manage-review-details' || this.$route.name=='manage-messenger'){
if(this.$route.name=='manage-approve-details' || this.$route.name=='manage-messenger'){
this.getInfo()
}else{
this.$emit('revocation')
@ -383,7 +383,7 @@ export default {
this.loadIng++;
this.$store.dispatch("call", {
method: 'post',
url: 'workflow/process/addGlobalComment',
url: 'approve/process/addGlobalComment',
data: {
proc_inst_id:this.data.id,
content:JSON.stringify({
@ -393,7 +393,7 @@ export default {
}
}).then(({msg}) => {
$A.messageSuccess("添加成功");
if(this.$route.name=='manage-review-details' || this.$route.name=='manage-messenger'){
if(this.$route.name=='manage-approve-details' || this.$route.name=='manage-messenger'){
this.getInfo()
}else{
this.$emit('approve')

View File

@ -1,10 +1,10 @@
<template>
<div class="page-review">
<div class="page-approve">
<PageTitle :title="$L('审批中心')"/>
<div class="review-wrapper" ref="fileWrapper">
<div class="approve-wrapper" ref="fileWrapper">
<div class="review-head">
<div class="review-nav">
<div class="approve-head">
<div class="approve-nav">
<h1>{{$L('审批中心')}}</h1>
</div>
<Button type="primary" @click="addApply">{{$L("添加申请")}}</Button>
@ -12,30 +12,30 @@
</div>
<Tabs :value="tabsValue" @on-click="tabsClick" style="margin: 0 20px;height: 100%;" size="small">
<TabPane :label="$L('待办') + (backlogTotal > 0 ? ('('+backlogTotal+')') : '')" name="backlog" style="height: 100%;">
<div class="review-main-search">
<TabPane :label="$L('待办') + (unreadTotal > 0 ? ('('+unreadTotal+')') : '')" name="unread" style="height: 100%;">
<div class="approve-main-search">
<div style="display: flex;gap: 10px;">
<Select v-model="approvalType" @on-change="tabsClick('',0)" style="width: 150px;">
<Option v-for="item in approvalList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
</div>
</div>
<div class="noData" v-if="backlogList.length==0">{{$L('暂无数据')}}</div>
<div v-else class="review-mains">
<div class="review-main-left">
<div class="review-main-list">
<div @click.stop="clickList(item,key)" v-for="(item,key) in backlogList">
<list :class="{ 'review-list-active': item._active }" :data="item"></list>
<div class="noData" v-if="unreadList.length==0">{{$L('暂无数据')}}</div>
<div v-else class="approve-mains">
<div class="approve-main-left">
<div class="approve-main-list">
<div @click.stop="clickList(item,key)" v-for="(item,key) in unreadList">
<list :class="{ 'approve-list-active': item._active }" :data="item"></list>
</div>
</div>
</div>
<div class="review-main-right">
<listDetails v-if="!detailsShow && tabsValue=='backlog'" :data="details" @approve="tabsClick" @revocation="tabsClick"></listDetails>
<div class="approve-main-right">
<listDetails v-if="!detailsShow && tabsValue=='unread'" :data="details" @approve="tabsClick" @revocation="tabsClick"></listDetails>
</div>
</div>
</TabPane>
<TabPane :label="$L('已办')" name="done">
<div class="review-main-search">
<div class="approve-main-search">
<div style="display: flex;gap: 10px;">
<Select v-model="approvalType" @on-change="tabsClick('',0)" style="width: 150px;">
<Option v-for="item in approvalList" :value="item.value" :key="item.value">{{ item.label }}</Option>
@ -43,22 +43,22 @@
</div>
</div>
<div v-if="doneList.length==0" class="noData">{{$L('暂无数据')}}</div>
<div v-else class="review-mains">
<div class="review-main-left">
<div class="review-main-list">
<div v-else class="approve-mains">
<div class="approve-main-left">
<div class="approve-main-list">
<div @click.stop="clickList(item,key)" v-for="(item,key) in doneList" >
<list :class="{ 'review-list-active': item._active }" :data="item"></list>
<list :class="{ 'approve-list-active': item._active }" :data="item"></list>
</div>
</div>
</div>
<div class="review-main-right">
<div class="approve-main-right">
<listDetails v-if="!detailsShow && tabsValue=='done'" :data="details" @approve="tabsClick" @revocation="tabsClick"></listDetails>
</div>
</div>
</TabPane>
<TabPane :label="$L('抄送我')" name="notify">
<div class="review-main-search">
<div class="review-main-search">
<div class="approve-main-search">
<div class="approve-main-search">
<div style="display: flex;gap: 10px;">
<Select v-model="approvalType" @on-change="tabsClick('',0)" style="width: 150px;">
<Option v-for="item in approvalList" :value="item.value" :key="item.value">{{ item.label }}</Option>
@ -67,21 +67,21 @@
</div>
</div>
<div class="noData" v-if="notifyList.length==0">{{$L('暂无数据')}}</div>
<div v-else class="review-mains">
<div class="review-main-left">
<div class="review-main-list">
<div v-else class="approve-mains">
<div class="approve-main-left">
<div class="approve-main-list">
<div @click.stop="clickList(item,key)" v-for="(item,key) in notifyList">
<list :class="{ 'review-list-active': item._active }" :data="item"></list>
<list :class="{ 'approve-list-active': item._active }" :data="item"></list>
</div>
</div>
</div>
<div class="review-main-right">
<div class="approve-main-right">
<listDetails v-if="!detailsShow && tabsValue=='notify'" :data="details" @approve="tabsClick" @revocation="tabsClick"></listDetails>
</div>
</div>
</TabPane>
<TabPane :label="$L('已发起')" name="initiated">
<div class="review-main-search">
<div class="approve-main-search">
<div style="display: flex;gap: 10px;">
<Select v-model="approvalType" @on-change="tabsClick('',0)" style="width: 150px;">
<Option v-for="item in approvalList" :value="item.value" :key="item.value">{{ item.label }}</Option>
@ -92,15 +92,15 @@
</div>
</div>
<div class="noData" v-if="initiatedList.length==0">{{$L('暂无数据')}}</div>
<div v-else class="review-mains">
<div class="review-main-left">
<div class="review-main-list">
<div v-else class="approve-mains">
<div class="approve-main-left">
<div class="approve-main-list">
<div @click.stop="clickList(item,key)" v-for="(item,key) in initiatedList">
<list :class="{ 'review-list-active': item._active }" :data="item"></list>
<list :class="{ 'approve-list-active': item._active }" :data="item"></list>
</div>
</div>
</div>
<div class="review-main-right">
<div class="approve-main-right">
<listDetails v-if="!detailsShow && tabsValue=='initiated'" :data="details" @approve="tabsClick" @revocation="tabsClick"></listDetails>
</div>
</div>
@ -115,7 +115,7 @@
</DrawerOverlay>
<!--发起-->
<Modal v-model="addShow" :title="$L(addTitle)" :mask-closable="false" class="page-review-initiate">
<Modal v-model="addShow" :title="$L(addTitle)" :mask-closable="false" class="page-approve-initiate">
<Form ref="initiateRef" :model="addData" :rules="addRule" label-width="auto" @submit.native.prevent>
<FormItem v-if="departmentList.length>1" prop="department_id" :label="$L('选择部门')">
<Select v-model="addData.department_id" :placeholder="$L('请选择部门')">
@ -193,7 +193,7 @@ import { mapState } from 'vuex'
export default {
components:{list,listDetails,DrawerOverlay,ImgUpload},
name: "review",
name: "approve",
data(){
return{
minDate: new Date(2020, 0, 1),
@ -224,8 +224,8 @@ export default {
{value:4,label:this.$L("已撤回")}
],
//
backlogTotal:0,
backlogList: [],
unreadTotal:0,
unreadList: [],
doneList:[],
notifyList:[],
initiatedList: [],
@ -277,7 +277,7 @@ export default {
},
watch: {
'$route' (to, from) {
if(to.name == 'manage-review'){
if(to.name == 'manage-approve'){
this.tabsClick()
}
},
@ -285,8 +285,8 @@ export default {
handler(info) {
const {type, action} = info;
switch (type) {
case 'workflow':
if (action == 'backlog') {
case 'approve':
if (action == 'unread') {
this.tabsClick()
}
break;
@ -301,9 +301,9 @@ export default {
}
},
mounted() {
this.tabsValue = "backlog"
this.tabsValue = "unread"
this.tabsClick()
this.getBacklogList()
this.getUnreadList()
this.addData.department_id = this.userInfo.department[0] || 0;
this.addData.startTime = this.addData.endTime = this.getCurrentDate();
},
@ -326,8 +326,8 @@ export default {
if(val!=""){
this.approvalType = this.searchState = "all"
}
if(this.tabsValue == 'backlog'){
this.getBacklogList();
if(this.tabsValue == 'unread'){
this.getUnreadList();
}
if(this.tabsValue == 'done'){
this.getDoneList();
@ -342,14 +342,14 @@ export default {
//
clickList(item){
this.backlogList.map(h=>{ h._active = false; })
this.unreadList.map(h=>{ h._active = false; })
this.doneList.map(h=>{ h._active = false; })
this.notifyList.map(h=>{ h._active = false; })
this.initiatedList.map(h=>{ h._active = false; })
item._active = true;
//
if( window.innerWidth < 426 ){
this.goForward({name: 'manage-review-details', query: { id: item.id } });
this.goForward({name: 'manage-approve-details', query: { id: item.id } });
return;
}
if( window.innerWidth < 1010 ){
@ -362,26 +362,26 @@ export default {
},
//
getBacklogList(){
getUnreadList(){
this.$store.dispatch("call", {
method: 'get',
url: 'workflow/process/findTask',
url: 'approve/process/findTask',
data: {
page:this.page,
page_size: this.pageSize,
proc_def_name: this.approvalType == 'all' ? '' : this.approvalType,
}
}).then(({data}) => {
this.backlogList = data.rows.map((h,index)=>{
this.unreadList = data.rows.map((h,index)=>{
h._active = index == 0;
return h;
})
if(this.approvalType == 'all'){
this.backlogTotal = this.backlogList.length
this.unreadTotal = this.unreadList.length
}
if(this.tabsValue == 'backlog'){
if(this.tabsValue == 'unread'){
this.$nextTick(()=>{
this.details = this.backlogList[0] || {}
this.details = this.unreadList[0] || {}
})
}
}).catch(({msg}) => {
@ -395,7 +395,7 @@ export default {
getDoneList(){
this.$store.dispatch("call", {
method: 'get',
url: 'workflow/procHistory/findTask',
url: 'approve/procHistory/findTask',
data: {
page:this.page,
page_size: this.pageSize,
@ -422,7 +422,7 @@ export default {
getNotifyList(){
this.$store.dispatch("call", {
method: 'get',
url: 'workflow/procHistory/findProcNotify',
url: 'approve/procHistory/findProcNotify',
data: {
page:this.page,
page_size: this.pageSize,
@ -449,7 +449,7 @@ export default {
getInitiatedList(){
this.$store.dispatch("call", {
method: 'post',
url: 'workflow/process/startByMyselfAll',
url: 'approve/process/startByMyselfAll',
data: {
page: this.page,
page_size: this.pageSize,
@ -488,7 +488,7 @@ export default {
return false;
}
this.$store.dispatch("call", {
url: 'workflow/procdef/all',
url: 'approve/procdef/all',
method: 'post',
}).then(({data}) => {
this.procdefList = data.rows || [];
@ -523,7 +523,7 @@ export default {
}
this.$store.dispatch("call", {
url: 'workflow/process/start',
url: 'approve/process/start',
data: {
proc_name: obj.applyType,
department_id: obj.department_id,
@ -550,10 +550,10 @@ export default {
</script>
<style lang="scss">
.page-review .review-details{
.page-approve .approve-details{
border-radius: 8px;
}
.page-review .ivu-tabs-nav {
.page-approve .ivu-tabs-nav {
display: flex;
width: 350px;
@media (max-width: 1010px) {
@ -565,7 +565,7 @@ export default {
text-align: center;
}
}
.page-review-initiate .ivu-modal-body{
.page-approve-initiate .ivu-modal-body{
padding: 16px 22px 2px !important;
}
</style>

View File

@ -1,5 +1,5 @@
<template>
<div class="review-list">
<div class="approve-list">
<h2>
<span class="list-name">{{$L(data.proc_def_name)}}</span>
<Tag v-if="data.state == 0" color="cyan">{{$L('待审批')}}</Tag>

View File

@ -55,7 +55,7 @@
<script>
import UserInput from "../../../components/UserInput";
export default {
name: "WorkflowExport",
name: "ApproveExport",
components: {UserInput},
props: {
value: {
@ -97,7 +97,7 @@ export default {
getProcName(){
this.loadIng++;
this.$store.dispatch("call", {
url: 'workflow/procdef/all',
url: 'approve/procdef/all',
method: 'post'
}).then(({data}) => {
this.procList = data['rows'];
@ -115,7 +115,7 @@ export default {
}
this.loadIng++;
this.$store.dispatch("call", {
url: 'workflow/export',
url: 'approve/export',
data: this.formData,
}).then(({data}) => {
this.show = false;

View File

@ -500,7 +500,7 @@
<!--审批详情-->
<DrawerOverlay v-model="approveDetailsShow" placement="right" :size="600">
<ReviewDetails v-if="approveDetailsShow" :data="approveDetails" style="height: 100%;border-radius: 10px;"></ReviewDetails>
<ApproveDetails v-if="approveDetailsShow" :data="approveDetails" style="height: 100%;border-radius: 10px;"></ApproveDetails>
</DrawerOverlay>
</div>
</template>
@ -521,7 +521,7 @@ import DialogSelect from "./DialogSelect";
import ImgUpload from "../../../components/ImgUpload.vue";
import {choiceEmojiOne} from "./ChatInput/one";
import ReviewDetails from "../../../pages/manage/review/details.vue";
import ApproveDetails from "../../../pages/manage/approve/details.vue";
export default {
name: "DialogWrapper",
@ -536,7 +536,7 @@ export default {
DrawerOverlay,
UserInput,
DialogUpload,
ReviewDetails
ApproveDetails
},
props: {
@ -2371,11 +2371,11 @@ export default {
}
//
let domAudits = $(target).parents(".open-review-details")
let domAudits = $(target).parents(".open-approve-details")
if( domAudits.length > 0 ){
let dataId = domAudits[0].getAttribute("data-id")
if( window.innerWidth < 426 ){
this.goForward({name: 'manage-review-details', query: { id: domAudits[0].getAttribute("data-id") } });
this.goForward({name: 'manage-approve-details', query: { id: domAudits[0].getAttribute("data-id") } });
}else{
this.approveDetailsShow = true;
this.$nextTick(()=>{

View File

@ -54,7 +54,7 @@ export default {
},
watch: {
approvalSettingShow(val) {
if (val) this.iframeSrc = `/workflow/#/?name=${this.name}&token=${store.userToken}&lang=${languageType}`
if (val) this.iframeSrc = `/approve/#/?name=${this.name}&token=${store.userToken}&lang=${languageType}`
}
},
mounted() {
@ -68,7 +68,7 @@ export default {
//
getList(){
this.$store.dispatch("call", {
url: 'workflow/procdef/all',
url: 'approve/procdef/all',
method: 'post',
}).then(({data}) => {
this.list = data.rows;
@ -146,7 +146,7 @@ export default {
return true;
}
this.$store.dispatch("call", {
url: 'workflow/procdef/del',
url: 'approve/procdef/del',
data: {id: item.id},
method: 'post',
}).then(({data}) => {

View File

@ -30,14 +30,14 @@ export default [
component: () => import('./pages/manage/messenger.vue'),
},
{
name: 'manage-review',//审批
path: 'review',
component: () => import('./pages/manage/review/index.vue'),
name: 'manage-approve',//审批
path: 'approve',
component: () => import('./pages/manage/approve/index.vue'),
},
{
name: 'manage-review-details',
path: 'review/details',
component: () => import('./pages/manage/review/details.vue'),
name: 'manage-approve-details',
path: 'approve/details',
component: () => import('./pages/manage/approve/details.vue'),
},
{
name: 'manage-setting',

View File

@ -457,7 +457,7 @@ export default {
dispatch("getProjects").catch(() => {});
dispatch("getDialogs").catch(() => {});
dispatch("getReportUnread", 1000);
dispatch("getBacklogUnread", 1000);
dispatch("getApproveUnread", 1000);
dispatch("getTaskForDashboard");
dispatch("dialogMsgRead");
//
@ -493,20 +493,20 @@ export default {
* @param dispatch
* @param timeout
*/
getBacklogUnread({state, dispatch}, timeout) {
window.__getBacklogUnread && clearTimeout(window.__getBacklogUnread)
window.__getBacklogUnread = setTimeout(() => {
getApproveUnread({state, dispatch}, timeout) {
window.__getApproveUnread && clearTimeout(window.__getApproveUnread)
window.__getApproveUnread = setTimeout(() => {
if (state.userId === 0) {
state.backlogUnreadNumber = 0;
state.approveUnreadNumber = 0;
} else {
dispatch("call", {
url: 'workflow/process/findTask',
url: 'approve/process/findTask',
data: {
page:1,
page_size: 500,
}
}).then(({data}) => {
state.backlogUnreadNumber = data.total || 0;
state.approveUnreadNumber = data.total || 0;
}).catch(_ => {});
}
}, typeof timeout === "number" ? timeout : 1000)

View File

@ -181,5 +181,5 @@ export default {
localKeyLock: false,
// 审批待办未读数量
backlogUnreadNumber: 0,
approveUnreadNumber: 0,
};

View File

@ -175,7 +175,7 @@ body.dark-mode-reverse {
.content-meeting {
color: #ffffff;
}
.open-review-details{
.open-approve-details{
.cause{
border-bottom: 1px solid #7f7f7f;
border-top: 1px solid #7f7f7f;

View File

@ -9,4 +9,4 @@
@import "page-setting";
@import "page-index";
@import "components/_";
@import "page-review";
@import "page-approve";

View File

@ -700,7 +700,7 @@
}
}
.open-review-details{
.open-approve-details{
width: 245px;
display: inline-block;
max-width: 100%;

View File

@ -1,22 +1,22 @@
.page-review{
.page-approve{
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.review-wrapper {
.approve-wrapper {
flex: 1;
height: 0;
display: flex;
flex-direction: column;
position: relative;
.review-head {
.approve-head {
display: flex;
align-items: center;
padding-bottom: 16px;
margin: 32px 20px 16px;
margin-bottom: 5px;
border-bottom: 1px solid #F4F4F5;
.review-nav{
.approve-nav{
flex: 1;
display: flex;
align-items: center;
@ -27,7 +27,7 @@
}
}
}
.review-main-search{
.approve-main-search{
display: flex;
justify-content: space-between;
margin:0 5px;
@ -42,12 +42,12 @@
text-align: center;
line-height: 150px;
}
.review-mains{
.approve-mains{
display: flex;
flex: 1 1 auto;
height: calc(100vh - 190px);
position: relative;
.review-main-left{
.approve-main-left{
display: flex;
flex-direction: column;
flex: 0 0 auto;
@ -60,12 +60,12 @@
@media (max-width: 1010px) {
max-width: 100%;
}
.review-main-list{
.approve-main-list{
display: flex;
flex-direction: column;
flex: 1 1 auto;
overflow: scroll;
.review-list{
.approve-list{
margin-bottom: 8px;
padding: 12px;
border-radius: 8px;
@ -106,15 +106,15 @@
}
}
}
.review-list-active{
.approve-list-active{
border: 1px solid #8bcf70;
}
}
.review-main-list::-webkit-scrollbar {
.approve-main-list::-webkit-scrollbar {
display: none;
}
}
.review-main-right{
.approve-main-right{
position: absolute;
left: 360px;
top: 0;
@ -132,18 +132,18 @@
}
.review-details{
.approve-details{
flex: 1 1 auto;
display: flex;
flex-direction: column;
border: 1px solid #eeeeee;
background: #fff;
.review-details-box{
.approve-details-box{
flex: 1 1 auto;
padding: 24px;
overflow-y: scroll;
.review-details-title{
.approve-details-title{
display: flex;
align-items: center;
.ivu-tag{
@ -151,7 +151,7 @@
}
}
.review-details-subtitle{
.approve-details-subtitle{
margin-top: 8px;
display: flex;
.ivu-avatar{
@ -167,7 +167,7 @@
padding-bottom: 10px;
}
.review-details-text{
.approve-details-text{
margin-bottom: 12px;
> h4{
color: #999;
@ -184,29 +184,29 @@
}
}
.review-record-timeline{
.approve-record-timeline{
margin-top: 20px;
.timeline-body{
display: flex;
}
.review-process-state{
.approve-process-state{
font-size: 12px;
color: #19be6b;
}
.review-process-left{
.approve-process-left{
margin-left: 10px;
flex: 1;
}
.review-process-right{
.approve-process-right{
text-align: right;
}
}
.review-record-comment{
.approve-record-comment{
padding: 10px;
margin-bottom: 30px;
.top{
@ -223,7 +223,7 @@
}
}
.review-details-text:nth-last-child(1){
.approve-details-text:nth-last-child(1){
margin-bottom: 0;
}
@ -232,10 +232,10 @@
border-radius: 5px;
}
.review-copy{
.approve-copy{
margin-top: 8px;
display: flex;
.review-copy-member{
.approve-copy-member{
display: flex;
align-items: center;
background: #F4F4F5;
@ -247,14 +247,14 @@
}
}
}
.review-details-box::-webkit-scrollbar {
.approve-details-box::-webkit-scrollbar {
display: none;
}
.review-operation{
.approve-operation{
flex: 0 0 auto;
padding: 0 24px;
border-top: 1px solid #F4F4F5;

View File

@ -108,8 +108,8 @@
<span style="color:#84c56a">version</span>: 系统版本
@elseif ($type === 'notice')
{{$notice}}
@elseif ($type === 'workflow_reviewer')
<span class="open-review-details" data-id="{{$data->id}}"><b>{{$data->nickname}}提交的「{{$data->proc_def_name}}」待你审批</b>
@elseif ($type === 'approve_reviewer')
<span class="open-approve-details" data-id="{{$data->id}}"><b>{{$data->nickname}}提交的「{{$data->proc_def_name}}」待你审批</b>
<div class="cause"><span>申请人:<span style="color:#84c56a">{{'@'}}{{$data->nickname}}</span> {{$data->department}}</span>
<b>审批事由</b>
@if ($data->type)
@ -129,8 +129,8 @@
<Button type="button" class="ivu-btn ivu-btn-error" style="flex: 1;">拒绝</Button>
@endif
</div></span>
@elseif ($type === 'workflow_notifier')
<span class="open-review-details" data-id="{{$data->id}}"><b>抄送{{$data->nickname}}提交的「{{$data->proc_def_name}}」记录</b>
@elseif ($type === 'approve_notifier')
<span class="open-approve-details" data-id="{{$data->id}}"><b>抄送{{$data->nickname}}提交的「{{$data->proc_def_name}}」记录</b>
<div class="cause"><span>申请人:<span style="color:#84c56a">{{'@'}}{{$data->nickname}}</span> {{$data->department}}</span>
<b>审批事由</b>
@if ($data->type)
@ -145,8 +145,8 @@
<Button type="button" class="ivu-btn" style="flex: 1;">查看详情</Button>
@endif
</div></span>
@elseif ($type === 'workflow_submitter')
<span class="open-review-details" data-id="{{$data->id}}"><b> @if ($action === 'pass')您发起的「{{$data->proc_def_name}}」已通过 @else您发起的「{{$data->proc_def_name}}」被{{$data->nickname}}拒绝 @endif</b>
@elseif ($type === 'approve_submitter')
<span class="open-approve-details" data-id="{{$data->id}}"><b> @if ($action === 'pass')您发起的「{{$data->proc_def_name}}」已通过 @else您发起的「{{$data->proc_def_name}}」被{{$data->nickname}}拒绝 @endif</b>
<div class="cause"><span>申请人:<span style="color:#84c56a">{{'@'}}{{$data->nickname}}</span> {{$data->department}}</span>
<b>审批事由</b>
@if ($data->type)

View File

@ -9,7 +9,7 @@ use App\Http\Controllers\Api\PublicController;
use App\Http\Controllers\Api\ReportController;
use App\Http\Controllers\Api\SystemController;
use App\Http\Controllers\Api\ProjectController;
use App\Http\Controllers\Api\WorkflowController;
use App\Http\Controllers\Api\ApproveController;
/*
|--------------------------------------------------------------------------
@ -48,9 +48,9 @@ Route::prefix('api')->middleware(['webapi'])->group(function () {
// 公开接口
Route::any('public/{method}', PublicController::class);
Route::any('public/{method}/{action}', PublicController::class);
// 工作流
Route::any('workflow/{method}', WorkflowController::class);
Route::any('workflow/{method}/{action}', WorkflowController::class);
// 审批
Route::any('approve/{method}', ApproveController::class);
Route::any('approve/{method}/{action}', ApproveController::class);
});
/**