mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-10 18:02:55 +00:00
fix: 调整统一命名
This commit is contained in:
parent
e504fb845f
commit
1ad0c3a3ec
@ -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'],
|
||||
]
|
||||
];
|
||||
@ -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"
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@ export default {
|
||||
{icon: '', name: 'joinMeeting', label: '加入会议'},
|
||||
],
|
||||
[
|
||||
{icon: '', name: 'review', label: '审批中心'},
|
||||
{icon: '', name: 'approve', label: '审批中心'},
|
||||
]
|
||||
],
|
||||
|
||||
|
||||
@ -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':
|
||||
|
||||
@ -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')
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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;
|
||||
@ -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(()=>{
|
||||
|
||||
@ -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}) => {
|
||||
|
||||
12
resources/assets/js/routes.js
vendored
12
resources/assets/js/routes.js
vendored
@ -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',
|
||||
|
||||
14
resources/assets/js/store/actions.js
vendored
14
resources/assets/js/store/actions.js
vendored
@ -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)
|
||||
|
||||
2
resources/assets/js/store/state.js
vendored
2
resources/assets/js/store/state.js
vendored
@ -181,5 +181,5 @@ export default {
|
||||
localKeyLock: false,
|
||||
|
||||
// 审批待办未读数量
|
||||
backlogUnreadNumber: 0,
|
||||
approveUnreadNumber: 0,
|
||||
};
|
||||
|
||||
2
resources/assets/sass/dark.scss
vendored
2
resources/assets/sass/dark.scss
vendored
@ -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;
|
||||
|
||||
2
resources/assets/sass/pages/_.scss
vendored
2
resources/assets/sass/pages/_.scss
vendored
@ -9,4 +9,4 @@
|
||||
@import "page-setting";
|
||||
@import "page-index";
|
||||
@import "components/_";
|
||||
@import "page-review";
|
||||
@import "page-approve";
|
||||
|
||||
@ -700,7 +700,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
.open-review-details{
|
||||
.open-approve-details{
|
||||
width: 245px;
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
|
||||
@ -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;
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user