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 App\Module\BillMultipleExport;
use Hhxsv5\LaravelS\Swoole\Task\Task; use Hhxsv5\LaravelS\Swoole\Task\Task;
/** /**
* @apiDefine workflow * @apiDefine approve
* *
* 工作流 * 工作流
*/ */
class WorkflowController extends AbstractController class ApproveController extends AbstractController
{ {
private $flow_url = ''; private $flow_url = '';
public function __construct() 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 * @apiVersion 1.0.0
* @apiGroup users * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName procdef__all * @apiName procdef__all
* *
* @apiQuery {String} name 流程名称 * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName procdef__del * @apiName procdef__del
* *
* @apiQuery {String} id 流程ID * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName process__start * @apiName process__start
* *
* @apiQuery {String} proc_name 流程名称 * @apiQuery {String} proc_name 流程名称
@ -153,14 +153,14 @@ class WorkflowController extends AbstractController
if (empty($dialog)) { if (empty($dialog)) {
continue; continue;
} }
$this->workflowMsg('workflow_reviewer', $dialog, $botUser, $val, $process, 'start'); $this->approveMsg('approve_reviewer', $dialog, $botUser, $val, $process, 'start');
} }
// 抄送人 // 抄送人
$notifier = $this->handleProcessNode($process); $notifier = $this->handleProcessNode($process);
if ($notifier) { if ($notifier) {
foreach ($notifier as $val) { foreach ($notifier as $val) {
$dialog = WebSocketDialog::checkUserDialog($botUser, $val['target_id']); $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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName process__addGlobalComment * @apiName process__addGlobalComment
* *
* @apiQuery {Number} proc_inst_id 流程实例ID * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName task__complete * @apiName task__complete
* *
* @apiQuery {Number} task_id 流程ID * @apiQuery {Number} task_id 流程ID
@ -243,13 +243,13 @@ class WorkflowController extends AbstractController
if (empty($dialog)) { if (empty($dialog)) {
continue; continue;
} }
$this->workflowMsg('workflow_reviewer', $dialog, $botUser, $val, $process, $pass); $this->approveMsg('approve_reviewer', $dialog, $botUser, $val, $process, $pass);
} }
// 发起人 // 发起人
if($process['is_finished'] == true) { if($process['is_finished'] == true) {
$dialog = WebSocketDialog::checkUserDialog($botUser, $process['start_user_id']); $dialog = WebSocketDialog::checkUserDialog($botUser, $process['start_user_id']);
if (!empty($dialog)) { 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']) { }else if ($process['candidate']) {
// 下个审批人 // 下个审批人
@ -263,7 +263,7 @@ class WorkflowController extends AbstractController
if (empty($dialog)) { if (empty($dialog)) {
continue; 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) { foreach ($notifier as $val) {
$dialog = WebSocketDialog::checkUserDialog($botUser, $val['target_id']); $dialog = WebSocketDialog::checkUserDialog($botUser, $val['target_id']);
if (!empty($dialog)) { 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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName task__withdraw * @apiName task__withdraw
* *
* @apiQuery {Number} task_id 流程ID * @apiQuery {Number} task_id 流程ID
@ -320,17 +320,17 @@ class WorkflowController extends AbstractController
continue; 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'])); return Base::retSuccess('已撤回', Base::arrayKeyToUnderline($task['data']));
} }
/** /**
* @api {post} api/workflow/process/findTask 08. 查询需要我审批的流程(审批中) * @api {post} api/approve/process/findTask 08. 查询需要我审批的流程(审批中)
* *
* @apiDescription 需要token身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName process__findTask * @apiName process__findTask
* *
* @apiQuery {String} proc_def_name 流程名称 * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName process__startByMyselfAll * @apiName process__startByMyselfAll
* *
* @apiQuery {String} proc_def_name 流程分类 * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName process__startByMyself * @apiName process__startByMyself
* *
* @apiQuery {Number} page 页码 * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName process__findProcNotify * @apiName process__findProcNotify
* *
* @apiQuery {Number} userid 用户ID * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName identitylink__findParticipant * @apiName identitylink__findParticipant
* *
* @apiQuery {Number} proc_inst_id 流程实例ID * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName procHistory__findTask * @apiName procHistory__findTask
* *
* @apiQuery {String} proc_def_name 流程分类 * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName procHistory__startByMyself * @apiName procHistory__startByMyself
* *
* @apiQuery {Number} page 页码 * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName procHistory__findProcNotify * @apiName procHistory__findProcNotify
* *
* @apiQuery {String} proc_def_name 流程分类 * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName identitylinkHistory__findParticipant * @apiName identitylinkHistory__findParticipant
* *
* @apiQuery {Number} proc_inst_id 流程实例ID * @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身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName process__detail * @apiName process__detail
* *
* @apiQuery {Number} id 流程ID * @apiQuery {Number} id 流程ID
@ -702,16 +702,16 @@ class WorkflowController extends AbstractController
{ {
User::auth(); User::auth();
$data['id'] = intval(Request::input('id')); $data['id'] = intval(Request::input('id'));
$workflow = $this->getProcessById($data['id']); $approve = $this->getProcessById($data['id']);
return Base::retSuccess('success', $workflow); return Base::retSuccess('success', $approve);
} }
/** /**
* @api {post} api/workflow/export 18. 导出数据 * @api {post} api/approve/export 18. 导出数据
* *
* @apiDescription 需要token身份 * @apiDescription 需要token身份
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup workflow * @apiGroup approve
* @apiName export * @apiName export
* *
* @apiQuery {String} proc_def_name 流程分类 * @apiQuery {String} proc_def_name 流程分类
@ -839,7 +839,7 @@ class WorkflowController extends AbstractController
]; ];
// //
$fileName = '审批记录_' . Base::time() . '.xls'; $fileName = '审批记录_' . Base::time() . '.xls';
$filePath = "temp/workflow/export/" . date("Ym", Base::time()); $filePath = "temp/approve/export/" . date("Ym", Base::time());
$export = new BillMultipleExport($sheets); $export = new BillMultipleExport($sheets);
$res = $export->store($filePath . "/" . $fileName); $res = $export->store($filePath . "/" . $fileName);
if ($res != 1) { if ($res != 1) {
@ -860,10 +860,10 @@ class WorkflowController extends AbstractController
$base64 = base64_encode(Base::array2string([ $base64 = base64_encode(Base::array2string([
'file' => $zipFile, 'file' => $zipFile,
])); ]));
Session::put('workflow::export:userid', $user->userid); Session::put('approve::export:userid', $user->userid);
return Base::retSuccess('success', [ return Base::retSuccess('success', [
'size' => Base::twoFloat(filesize($zipPath) / 1024, true), '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 { } else {
return Base::retError('打包失败,请稍后再试...'); 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 * @apiVersion 1.0.0
* @apiGroup system * @apiGroup system
@ -894,7 +894,7 @@ class WorkflowController extends AbstractController
*/ */
public function down() public function down()
{ {
$userid = Session::get('workflow::export:userid'); $userid = Session::get('approve::export:userid');
if (empty($userid)) { if (empty($userid)) {
return Base::ajaxError("请求已过期,请重新导出!", [], 0, 502); 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 = [ $data = [
'id' => $process['id'], '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'], 'proc_def_name' => $process['proc_def_name'],
'department' => $process['department'], 'department' => $process['department'],
'type' => $process['var']['type'], 'type' => $process['var']['type'],
@ -964,7 +964,7 @@ class WorkflowController extends AbstractController
$msg_action = null; $msg_action = null;
if ($action == 'withdraw' || $action == 'pass' || $action == 'refuse') { 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); return WebSocketDialogMsg::sendMsg($msg_action, $dialog->id, 'text', ['text' => $text], $botUser->userid, false, false, true);
} }
// 查找最后一条消息msg_id // 查找最后一条消息msg_id
@ -982,12 +982,12 @@ class WorkflowController extends AbstractController
$proc_msg->save(); $proc_msg->save();
} }
// 更新工作报告 未读数量 // 更新工作报告 未读数量
if($type == 'workflow_reviewer' && $toUser['userid']){ if($type == 'approve_reviewer' && $toUser['userid']){
$params = [ $params = [
'userid' => [ $toUser['userid'], User::auth()->userid() ], 'userid' => [ $toUser['userid'], User::auth()->userid() ],
'msg' => [ 'msg' => [
'type' => 'workflow', 'type' => 'approve',
'action' => 'backlog', 'action' => 'unread',
'userid' => $toUser['userid'], 'userid' => $toUser['userid'],
] ]
]; ];

View File

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

View File

@ -169,19 +169,19 @@ server {
proxy_pass http://minder/; proxy_pass http://minder/;
} }
# 工作流 # 审批
location /workflow/ { location /approve/ {
proxy_pass http://workflow/; proxy_pass http://approve/;
} }
location /workflow/api/ { location /approve/api/ {
auth_request /workflowauth; auth_request /approveAuth;
proxy_pass http://workflow/api/; proxy_pass http://approve/api/;
} }
location /workflowauth { location /approveAuth {
internal; internal;
proxy_set_header Content-Type "application/json"; proxy_set_header Content-Type "application/json";
proxy_set_header Content-Length $request_length; 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: 'joinMeeting', label: '加入会议'},
], ],
[ [
{icon: '', name: 'review', label: '审批中心'}, {icon: '', name: 'approve', label: '审批中心'},
] ]
], ],

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -500,7 +500,7 @@
<!--审批详情--> <!--审批详情-->
<DrawerOverlay v-model="approveDetailsShow" placement="right" :size="600"> <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> </DrawerOverlay>
</div> </div>
</template> </template>
@ -521,7 +521,7 @@ import DialogSelect from "./DialogSelect";
import ImgUpload from "../../../components/ImgUpload.vue"; import ImgUpload from "../../../components/ImgUpload.vue";
import {choiceEmojiOne} from "./ChatInput/one"; import {choiceEmojiOne} from "./ChatInput/one";
import ReviewDetails from "../../../pages/manage/review/details.vue"; import ApproveDetails from "../../../pages/manage/approve/details.vue";
export default { export default {
name: "DialogWrapper", name: "DialogWrapper",
@ -536,7 +536,7 @@ export default {
DrawerOverlay, DrawerOverlay,
UserInput, UserInput,
DialogUpload, DialogUpload,
ReviewDetails ApproveDetails
}, },
props: { 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 ){ if( domAudits.length > 0 ){
let dataId = domAudits[0].getAttribute("data-id") let dataId = domAudits[0].getAttribute("data-id")
if( window.innerWidth < 426 ){ 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{ }else{
this.approveDetailsShow = true; this.approveDetailsShow = true;
this.$nextTick(()=>{ this.$nextTick(()=>{

View File

@ -54,7 +54,7 @@ export default {
}, },
watch: { watch: {
approvalSettingShow(val) { 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() { mounted() {
@ -68,7 +68,7 @@ export default {
// //
getList(){ getList(){
this.$store.dispatch("call", { this.$store.dispatch("call", {
url: 'workflow/procdef/all', url: 'approve/procdef/all',
method: 'post', method: 'post',
}).then(({data}) => { }).then(({data}) => {
this.list = data.rows; this.list = data.rows;
@ -146,7 +146,7 @@ export default {
return true; return true;
} }
this.$store.dispatch("call", { this.$store.dispatch("call", {
url: 'workflow/procdef/del', url: 'approve/procdef/del',
data: {id: item.id}, data: {id: item.id},
method: 'post', method: 'post',
}).then(({data}) => { }).then(({data}) => {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -108,8 +108,8 @@
<span style="color:#84c56a">version</span>: 系统版本 <span style="color:#84c56a">version</span>: 系统版本
@elseif ($type === 'notice') @elseif ($type === 'notice')
{{$notice}} {{$notice}}
@elseif ($type === 'workflow_reviewer') @elseif ($type === 'approve_reviewer')
<span class="open-review-details" data-id="{{$data->id}}"><b>{{$data->nickname}}提交的「{{$data->proc_def_name}}」待你审批</b> <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> <div class="cause"><span>申请人:<span style="color:#84c56a">{{'@'}}{{$data->nickname}}</span> {{$data->department}}</span>
<b>审批事由</b> <b>审批事由</b>
@if ($data->type) @if ($data->type)
@ -129,8 +129,8 @@
<Button type="button" class="ivu-btn ivu-btn-error" style="flex: 1;">拒绝</Button> <Button type="button" class="ivu-btn ivu-btn-error" style="flex: 1;">拒绝</Button>
@endif @endif
</div></span> </div></span>
@elseif ($type === 'workflow_notifier') @elseif ($type === 'approve_notifier')
<span class="open-review-details" data-id="{{$data->id}}"><b>抄送{{$data->nickname}}提交的「{{$data->proc_def_name}}」记录</b> <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> <div class="cause"><span>申请人:<span style="color:#84c56a">{{'@'}}{{$data->nickname}}</span> {{$data->department}}</span>
<b>审批事由</b> <b>审批事由</b>
@if ($data->type) @if ($data->type)
@ -145,8 +145,8 @@
<Button type="button" class="ivu-btn" style="flex: 1;">查看详情</Button> <Button type="button" class="ivu-btn" style="flex: 1;">查看详情</Button>
@endif @endif
</div></span> </div></span>
@elseif ($type === 'workflow_submitter') @elseif ($type === 'approve_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> <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> <div class="cause"><span>申请人:<span style="color:#84c56a">{{'@'}}{{$data->nickname}}</span> {{$data->department}}</span>
<b>审批事由</b> <b>审批事由</b>
@if ($data->type) @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\ReportController;
use App\Http\Controllers\Api\SystemController; use App\Http\Controllers\Api\SystemController;
use App\Http\Controllers\Api\ProjectController; 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}', PublicController::class);
Route::any('public/{method}/{action}', PublicController::class); Route::any('public/{method}/{action}', PublicController::class);
// 工作流 // 审批
Route::any('workflow/{method}', WorkflowController::class); Route::any('approve/{method}', ApproveController::class);
Route::any('workflow/{method}/{action}', WorkflowController::class); Route::any('approve/{method}/{action}', ApproveController::class);
}); });
/** /**