From 4588ea879b0edd9090012252444acda3ba782233 Mon Sep 17 00:00:00 2001 From: wangzeyan <258785420@qq.com> Date: Wed, 4 Jun 2025 10:35:02 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E5=AE=A1=E6=A0=B8=E7=AE=A1=E7=90=86=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/app/api/school_approval/process.ts | 10 +- .../views/school_approval/config/index.vue | 279 +++++++++--------- .../views/school_approval/process/index.vue | 178 ++++++----- admin/src/utils/request.ts | 37 +-- .../controller/school_approval/Process.php | 10 +- .../SchoolApprovalProcessService.php | 2 +- 6 files changed, 280 insertions(+), 236 deletions(-) diff --git a/admin/src/app/api/school_approval/process.ts b/admin/src/app/api/school_approval/process.ts index 133cd457..1ee13814 100644 --- a/admin/src/app/api/school_approval/process.ts +++ b/admin/src/app/api/school_approval/process.ts @@ -5,7 +5,7 @@ import request from '@/utils/request' * @param params */ export function getProcessList(params?: Record) { - return request.get({ url: '/school_approval/process/lists', params }) + return request.get('/school_approval/process/lists', { params }) } /** @@ -13,7 +13,7 @@ export function getProcessList(params?: Record) { * @param params */ export function getProcessInfo(params: { id: number }) { - return request.get({ url: '/school_approval/process/info', params }) + return request.get('/school_approval/process/info', { params }) } /** @@ -21,7 +21,7 @@ export function getProcessInfo(params: { id: number }) { * @param params */ export function createProcess(params: any) { - return request.post({ url: '/school_approval/process/create', data: params }) + return request.post('/school_approval/process/create', params) } /** @@ -29,7 +29,7 @@ export function createProcess(params: any) { * @param params */ export function approveProcess(params: { process_id: number; status: string; remarks?: string }) { - return request.post({ url: '/school_approval/process/approve', data: params }) + return request.post('/school_approval/process/approve', params) } /** @@ -37,5 +37,5 @@ export function approveProcess(params: { process_id: number; status: string; rem * @param params */ export function cancelProcess(params: { process_id: number }) { - return request.post({ url: '/school_approval/process/cancel', data: params }) + return request.post('/school_approval/process/cancel', params) } \ No newline at end of file diff --git a/admin/src/app/views/school_approval/config/index.vue b/admin/src/app/views/school_approval/config/index.vue index 8cb1d743..9d19998b 100644 --- a/admin/src/app/views/school_approval/config/index.vue +++ b/admin/src/app/views/school_approval/config/index.vue @@ -4,60 +4,60 @@
- + 添加
- - + + - + 搜索 - + 重置
- - - + + + - + \ No newline at end of file + .node-item { + background-color: #f9f9f9; + transition: all 0.3s; + + &:hover { + background-color: #f2f2f2; + } + } + + .ghost { + opacity: 0.5; + background: #c8ebfb; + } + + .drag-handle { + cursor: move; + color: #909399; + + &:hover { + color: #409eff; + } + } + \ No newline at end of file diff --git a/niucloud/app/adminapi/controller/sys/System.php b/niucloud/app/adminapi/controller/sys/System.php index cba758ee..84a7c71f 100644 --- a/niucloud/app/adminapi/controller/sys/System.php +++ b/niucloud/app/adminapi/controller/sys/System.php @@ -169,4 +169,19 @@ class System extends BaseAdminController } + //全部人员 + public function person_all(){ + return success(data: (new SystemService())->person_all()); + } + + public function role_all(){ + return success(data: (new SystemService())->role_all()); + } + + public function departments_all(){ + return success(data: (new SystemService())->departments_all()); + } + + + } diff --git a/niucloud/app/adminapi/route/sys.php b/niucloud/app/adminapi/route/sys.php index 67af2a40..caf37ca9 100644 --- a/niucloud/app/adminapi/route/sys.php +++ b/niucloud/app/adminapi/route/sys.php @@ -351,6 +351,11 @@ Route::group('sys', function() { //系统环境(不效验登录状态) Route::group('sys', function() { + Route::get('person_all', 'sys.System/person_all'); + Route::get('role_all', 'sys.System/role_all'); + Route::get('departments_all', 'sys.System/departments_all'); + + Route::get('web/website', 'sys.Config/getWebsite'); // 获取版权信息 Route::get('web/copyright', 'sys.Config/getCopyright'); diff --git a/niucloud/app/service/admin/auth/AuthService.php b/niucloud/app/service/admin/auth/AuthService.php index c2b014d8..a5dc5ca7 100644 --- a/niucloud/app/service/admin/auth/AuthService.php +++ b/niucloud/app/service/admin/auth/AuthService.php @@ -48,7 +48,10 @@ class AuthService extends BaseAdminService if (!in_array($rule, $method_menu_list)) return true; + $auth_role_list = $this->getAuthApiList(); + + if (!empty($auth_role_list[ $method ]) && in_array($rule, $auth_role_list[ $method ])) return true; @@ -72,7 +75,14 @@ class AuthService extends BaseAdminService //获取站点信息 return ( new MenuService() )->getAllApiList(1); } else { - $user_role_ids = $user_info[ 'role_ids' ]; + + $per = new Personnel(); + $CampusPersonRole = new CampusPersonRole(); + $per_id = $per->where(['sys_user_id' => $this->uid])->column('id'); + + $user_role_ids = $CampusPersonRole->where(['person_id' => $per_id])->column('role_id'); + +// $user_role_ids = $user_info[ 'role_ids' ]; $role_service = new RoleService(); $menu_keys = $role_service->getMenuKeysByRoleIds($user_role_ids ?? []); return $menu_service->getApiListByMenuKeys($menu_keys); diff --git a/niucloud/app/service/admin/sys/SystemService.php b/niucloud/app/service/admin/sys/SystemService.php index ddb410a9..c6bf5d5c 100644 --- a/niucloud/app/service/admin/sys/SystemService.php +++ b/niucloud/app/service/admin/sys/SystemService.php @@ -17,10 +17,12 @@ use app\model\campus\Campus; use app\model\campus_person_role\CampusPersonRole; use app\model\communication_records\CommunicationRecords; use app\model\customer_resources\CustomerResources; +use app\model\departments\Departments; use app\model\market_performance\MarketPerformance; use app\model\personnel\Personnel; use app\model\student\Student; use app\model\sys\SysConfig; +use app\model\sys\SysRole; use app\service\core\sys\CoreSysConfigService; use core\base\BaseAdminService; use think\facade\Db; @@ -342,4 +344,20 @@ class SystemService extends BaseAdminService } return $data; } + + public function person_all(){ + $Personnel = new Personnel(); + return $Personnel->select()->toArray(); + } + + public function role_all(){ + $sysRole = new SysRole(); + return $sysRole->select()->toArray(); + } + + public function departments_all(){ + $departments = new Departments(); + return $departments->select()->toArray(); + } + } diff --git a/niucloud/app/service/school_approval/SchoolApprovalConfigService.php b/niucloud/app/service/school_approval/SchoolApprovalConfigService.php index 9a3cb1e9..031db09d 100644 --- a/niucloud/app/service/school_approval/SchoolApprovalConfigService.php +++ b/niucloud/app/service/school_approval/SchoolApprovalConfigService.php @@ -26,7 +26,7 @@ class SchoolApprovalConfigService { $field = 'id, config_name, description, status, creator_id, created_at, updated_at'; $order = 'id desc'; - + $list = (new SchoolApprovalConfig()) ->where($where) ->field($field) @@ -34,15 +34,15 @@ class SchoolApprovalConfigService ->page($page, $limit) ->select() ->toArray(); - + $count = (new SchoolApprovalConfig())->where($where)->count(); - + return [ 'list' => $list, 'count' => $count ]; } - + /** * 获取审批流配置详情 * @param int $id @@ -51,13 +51,14 @@ class SchoolApprovalConfigService public function getInfo(int $id): array { $info = (new SchoolApprovalConfig())->with(['nodes'])->where(['id' => $id])->find(); + + if (empty($info)) { return []; } - return $info->toArray(); } - + /** * 添加审批流配置 * @param array $data @@ -74,9 +75,9 @@ class SchoolApprovalConfigService 'status' => $data['status'] ?? 1, 'creator_id' => $data['creator_id'] ]; - + $config_id = (new SchoolApprovalConfig())->insertGetId($config); - + // 添加节点 if (!empty($data['nodes'])) { $nodes = []; @@ -90,10 +91,10 @@ class SchoolApprovalConfigService 'sequence' => $sequence + 1 ]; } - + (new SchoolApprovalConfigNode())->insertAll($nodes); } - + Db::commit(); return $config_id; } catch (\Exception $e) { @@ -101,7 +102,7 @@ class SchoolApprovalConfigService throw new Exception($e->getMessage()); } } - + /** * 编辑审批流配置 * @param array $data @@ -117,12 +118,12 @@ class SchoolApprovalConfigService 'description' => $data['description'] ?? '', 'status' => $data['status'] ?? 1 ]; - + (new SchoolApprovalConfig())->where(['id' => $data['id']])->update($config); - + // 先删除原有节点 (new SchoolApprovalConfigNode())->where(['config_id' => $data['id']])->delete(); - + // 添加新节点 if (!empty($data['nodes'])) { $nodes = []; @@ -136,10 +137,10 @@ class SchoolApprovalConfigService 'sequence' => $sequence + 1 ]; } - + (new SchoolApprovalConfigNode())->insertAll($nodes); } - + Db::commit(); return true; } catch (\Exception $e) { @@ -147,7 +148,7 @@ class SchoolApprovalConfigService throw new Exception($e->getMessage()); } } - + /** * 删除审批流配置 * @param int $id @@ -160,10 +161,10 @@ class SchoolApprovalConfigService try { // 删除配置 (new SchoolApprovalConfig())->where(['id' => $id])->delete(); - + // 删除节点 (new SchoolApprovalConfigNode())->where(['config_id' => $id])->delete(); - + Db::commit(); return true; } catch (\Exception $e) { @@ -171,7 +172,7 @@ class SchoolApprovalConfigService throw new Exception($e->getMessage()); } } - + /** * 修改状态 * @param int $id @@ -182,4 +183,4 @@ class SchoolApprovalConfigService { return (new SchoolApprovalConfig())->where(['id' => $id])->update(['status' => $status]) !== false; } -} \ No newline at end of file +} From 72682313b0780ec51b93a453143c37407cc353f3 Mon Sep 17 00:00:00 2001 From: "1213317725@qq.com" <1213317725@qq.com> Date: Wed, 4 Jun 2025 11:52:38 +0800 Subject: [PATCH 4/5] 1 --- admin/src/app/views/school_approval/config/index.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/admin/src/app/views/school_approval/config/index.vue b/admin/src/app/views/school_approval/config/index.vue index 4d2de39b..2b3b9b32 100644 --- a/admin/src/app/views/school_approval/config/index.vue +++ b/admin/src/app/views/school_approval/config/index.vue @@ -621,4 +621,5 @@ color: #409eff; } } +} From ca0f71588af347baa2892952c6310a30c27c010b Mon Sep 17 00:00:00 2001 From: "1213317725@qq.com" <1213317725@qq.com> Date: Wed, 4 Jun 2025 18:22:37 +0800 Subject: [PATCH 5/5] 1 --- admin/src/app/api/service_logs.js | 13 ++ .../components/UserProfile.vue | 141 +++++++++++++++ .../customer_resources/customer_resources.vue | 19 +- .../views/school_approval/process/index.vue | 14 +- .../app/views/service_logs/service_logs.vue | 165 ++++++++++++++++++ .../student_course_usage.vue | 94 ++++------ .../controller/school_approval/Process.php | 46 ++--- .../controller/service_logs/ServiceLogs.php | 39 +++++ .../StudentCourseUsage.php | 8 +- niucloud/app/adminapi/route/service_logs.php | 31 ++++ .../app/model/service_logs/ServiceLogs.php | 44 +++++ .../CustomerResourcesService.php | 4 + .../admin/service_logs/ServiceLogsService.php | 60 +++++++ .../StudentCourseUsageService.php | 30 +++- .../SchoolApprovalProcessService.php | 90 ++++++---- 15 files changed, 662 insertions(+), 136 deletions(-) create mode 100644 admin/src/app/api/service_logs.js create mode 100644 admin/src/app/views/customer_resources/components/UserProfile.vue create mode 100644 admin/src/app/views/service_logs/service_logs.vue create mode 100644 niucloud/app/adminapi/controller/service_logs/ServiceLogs.php create mode 100644 niucloud/app/adminapi/route/service_logs.php create mode 100644 niucloud/app/model/service_logs/ServiceLogs.php create mode 100644 niucloud/app/service/admin/service_logs/ServiceLogsService.php diff --git a/admin/src/app/api/service_logs.js b/admin/src/app/api/service_logs.js new file mode 100644 index 00000000..9eec98b6 --- /dev/null +++ b/admin/src/app/api/service_logs.js @@ -0,0 +1,13 @@ +import request from '@/utils/request' + + +// USER_CODE_BEGIN -- service_logs +/** + * + * @param params + * @returns + */ +export function getServiceLogsList(params) { + return request.get(`service_logs/service_logs`, {params}) +} + diff --git a/admin/src/app/views/customer_resources/components/UserProfile.vue b/admin/src/app/views/customer_resources/components/UserProfile.vue new file mode 100644 index 00000000..666f903a --- /dev/null +++ b/admin/src/app/views/customer_resources/components/UserProfile.vue @@ -0,0 +1,141 @@ + + + + + \ No newline at end of file diff --git a/admin/src/app/views/customer_resources/customer_resources.vue b/admin/src/app/views/customer_resources/customer_resources.vue index fd0a598b..e8d0d138 100644 --- a/admin/src/app/views/customer_resources/customer_resources.vue +++ b/admin/src/app/views/customer_resources/customer_resources.vue @@ -127,6 +127,9 @@ 客户信息修改记录 + + 客户详情 + {{ t('edit') }} @@ -180,6 +183,7 @@ + @@ -195,6 +199,8 @@ import Fp from '@/app/views/customer_resources/components/fp.vue' import Order from '@/app/views/order_table/components/order-table-edit.vue' import Tc from '@/app/views/tc_dialog/tc_dialog.vue' + import User from '@/app/views/customer_resources/components/UserProfile.vue' + import { ArrowDown } from '@element-plus/icons-vue' import { getMemberLabelAll } from '@/app/api/member' @@ -244,6 +250,9 @@ case 'deleteEvent': deleteEvent(row.id) break + case 'UserProfile': + UserProfile(row) + break } } @@ -276,7 +285,8 @@ editOrderTableDialog.value.setFormData(row) editOrderTableDialog.value.showDialog = true } - + + const TcCustomerResourcesDialog : Record | null = ref(null) const tcEvent = (row : any) => { @@ -290,8 +300,13 @@ } + const UserProfileDialog : Record | null = ref(null) - + const UserProfile = (row : any) => { + UserProfileDialog.value.setFormData(row) + UserProfileDialog.value.showDialog = true + } + const searchFormRef = ref() // 选中数据 diff --git a/admin/src/app/views/school_approval/process/index.vue b/admin/src/app/views/school_approval/process/index.vue index e1e95ea6..cad1d932 100644 --- a/admin/src/app/views/school_approval/process/index.vue +++ b/admin/src/app/views/school_approval/process/index.vue @@ -52,9 +52,9 @@ > - + - + - - - - - - - - - + + + + + + + + + + + + + + + + +
service->getList($where, (int)$page, (int)$limit); - + return success($data); } @@ -72,12 +72,12 @@ class Process extends BaseAdminController if (empty($id)) { return fail('参数错误'); } - + $info = $this->service->getInfo((int)$id); if (empty($info)) { return fail('审批流程不存在'); } - + return success($info); } @@ -88,19 +88,19 @@ class Process extends BaseAdminController { $data = Request::only(['process_name', 'remarks']); $config_id = input('config_id', 0); - + // 验证参数 if (empty($data['process_name'])) { return fail('流程名称不能为空'); } - + if (empty($config_id)) { return fail('请选择审批流配置'); } - + // 设置申请人ID $data['applicant_id'] = $this->request->uid(); - + try { $process_id = $this->service->create($data, $config_id); return success(['id' => $process_id]); @@ -117,15 +117,15 @@ class Process extends BaseAdminController $process_id = input('process_id', 0); $status = input('status', ''); $remarks = input('remarks', ''); - + if (empty($process_id)) { return fail('参数错误'); } - + if (empty($status) || !in_array($status, ['approved', 'rejected'])) { return fail('请选择审批结果'); } - + try { $result = $this->service->approve((int)$process_id, $this->request->uid(), $status, $remarks); return success($result); @@ -140,11 +140,11 @@ class Process extends BaseAdminController public function cancel() { $process_id = input('process_id', 0); - + if (empty($process_id)) { return fail('参数错误'); } - + try { $result = $this->service->cancel($process_id, $this->request->uid()); return success($result); @@ -152,4 +152,4 @@ class Process extends BaseAdminController return fail($e->getMessage()); } } -} \ No newline at end of file +} diff --git a/niucloud/app/adminapi/controller/service_logs/ServiceLogs.php b/niucloud/app/adminapi/controller/service_logs/ServiceLogs.php new file mode 100644 index 00000000..f420285b --- /dev/null +++ b/niucloud/app/adminapi/controller/service_logs/ServiceLogs.php @@ -0,0 +1,39 @@ +request->params([ + ["name",""], + ["score",""] + ]); + return success((new ServiceLogsService())->getPage($data)); + } + +} diff --git a/niucloud/app/adminapi/controller/student_course_usage/StudentCourseUsage.php b/niucloud/app/adminapi/controller/student_course_usage/StudentCourseUsage.php index c9005c68..0ccad9ac 100644 --- a/niucloud/app/adminapi/controller/student_course_usage/StudentCourseUsage.php +++ b/niucloud/app/adminapi/controller/student_course_usage/StudentCourseUsage.php @@ -28,9 +28,9 @@ class StudentCourseUsage extends BaseAdminController */ public function lists(){ $data = $this->request->params([ - ["student_course_id",""], - ["used_hours",""], - ["usage_date",""] + ["emergency_contact",""], + ["student_name",""], + ["contact_phone",""] ]); return success((new StudentCourseUsageService())->getPage($data)); } @@ -87,5 +87,5 @@ class StudentCourseUsage extends BaseAdminController return success('DELETE_SUCCESS'); } - + } diff --git a/niucloud/app/adminapi/route/service_logs.php b/niucloud/app/adminapi/route/service_logs.php new file mode 100644 index 00000000..e4d15e1e --- /dev/null +++ b/niucloud/app/adminapi/route/service_logs.php @@ -0,0 +1,31 @@ +middleware([ + AdminCheckToken::class, + AdminCheckRole::class, + AdminLog::class +]); +// USER_CODE_END -- service diff --git a/niucloud/app/model/service_logs/ServiceLogs.php b/niucloud/app/model/service_logs/ServiceLogs.php new file mode 100644 index 00000000..b0d2aafa --- /dev/null +++ b/niucloud/app/model/service_logs/ServiceLogs.php @@ -0,0 +1,44 @@ +pageQuery($search_model, function ($item, $key) { $item = $this->makeUp($item); + + $sixSpeed = new SixSpeed(); + $data = $sixSpeed->where(['resource_id' => $item['id']])->findOrEmpty()->toArray(); + $item['six'] = $data; }); } diff --git a/niucloud/app/service/admin/service_logs/ServiceLogsService.php b/niucloud/app/service/admin/service_logs/ServiceLogsService.php new file mode 100644 index 00000000..447f66fb --- /dev/null +++ b/niucloud/app/service/admin/service_logs/ServiceLogsService.php @@ -0,0 +1,60 @@ +model = new ServiceLogs(); + } + + /** + * 获取学员课时消费记录列表 + * @return array + */ + public function getPage(array $data = []) + { + $where = []; + if($data['name']){ + $where[] = ['b.name','like','%'.$data['name'].'%']; + } + + if($data['score']){ + $where[] = ['a.score','=',$data['score']]; + } + + $search_model = $this->model + ->alias("a") + ->join(['school_customer_resources' => 'b'],'a.resource_id = b.id','left') + ->join(['school_personnel' => 'c'],'a.staff_id = c.id','left') + ->join(['school_service' => 'd'],'a.service_id = d.id','left') + ->where($where) + ->field("a.*,b.name,c.name as staff_name,d.service_name,d.customer_confirmation") + ->order("a.id desc"); + $list = $this->pageQuery($search_model); + return $list; + } + + +} diff --git a/niucloud/app/service/admin/student_course_usage/StudentCourseUsageService.php b/niucloud/app/service/admin/student_course_usage/StudentCourseUsageService.php index 82435bbe..b4d7fc7d 100644 --- a/niucloud/app/service/admin/student_course_usage/StudentCourseUsageService.php +++ b/niucloud/app/service/admin/student_course_usage/StudentCourseUsageService.php @@ -31,15 +31,31 @@ class StudentCourseUsageService extends BaseAdminService /** * 获取学员课时消费记录列表 - * @param array $where * @return array */ - public function getPage(array $where = []) + public function getPage(array $data = []) { - $field = 'id,student_course_id,used_hours,usage_date,created_at,updated_at'; - $order = 'id desc'; - - $search_model = $this->model->withSearch(["id","student_course_id","used_hours","usage_date"], $where)->field($field)->order($order); + $where = []; + if($data['emergency_contact']){ + $where[] = ['c.emergency_contact','like','%'.$data['emergency_contact'].'%']; + } + + if($data['student_name']){ + $where[] = ['c.name','like','%'.$data['student_name'].'%']; + } + + if($data['contact_phone']){ + $where[] = ['c.contact_phone','=',$data['contact_phone']]; + } + + $search_model = $this->model + ->alias("a") + ->join(['school_student_courses' => 'b'],'a.student_course_id = b.id','left') + ->join(['school_student' => 'c'],'b.student_id = c.id','left') + ->join(['school_course' => 'd'],'b.course_id = d.id','left') + ->where($where) + ->field("a.*,c.name as student_name,c.emergency_contact,d.course_name,b.total_hours,ROUND(b.total_hours - b.use_total_hours) as sy_time,ROUND(b.gift_hours - b.use_gift_hours) as gift_hours") + ->order("a.id desc"); $list = $this->pageQuery($search_model); return $list; } @@ -94,6 +110,6 @@ class StudentCourseUsageService extends BaseAdminService return $res; } - + } diff --git a/niucloud/app/service/school_approval/SchoolApprovalProcessService.php b/niucloud/app/service/school_approval/SchoolApprovalProcessService.php index f79a28d2..68f0e735 100644 --- a/niucloud/app/service/school_approval/SchoolApprovalProcessService.php +++ b/niucloud/app/service/school_approval/SchoolApprovalProcessService.php @@ -3,6 +3,7 @@ declare(strict_types=1); namespace app\service\school_approval; +use app\model\personnel\Personnel; use app\model\school_approval\SchoolApprovalConfig; use app\model\school_approval\SchoolApprovalConfigNode; use app\model\school_approval\SchoolApprovalParticipants; @@ -26,25 +27,28 @@ class SchoolApprovalProcessService */ public function getList(array $where = [], int $page = 1, int $limit = 10): array { - $field = 'id, process_name, applicant_id, application_time, current_approver_id, approval_status, approval_time, remarks, created_at, updated_at'; - $order = 'id desc'; - + $field = 'a.*,b.name as applicant_name,c.name as current_approver_name'; + $order = 'a.id desc'; + $list = (new SchoolApprovalProcess()) + ->alias("a") + ->join(['school_personnel' => 'b'],'a.applicant_id = b.id','left') + ->join(['school_personnel' => 'c'],'a.current_approver_id = c.id','left') ->where($where) ->field($field) ->order($order) ->page($page, $limit) ->select() ->toArray(); - + $count = (new SchoolApprovalProcess())->where($where)->count(); - + return [ 'list' => $list, 'count' => $count ]; } - + /** * 获取审批流程详情 * @param int $id @@ -52,14 +56,26 @@ class SchoolApprovalProcessService */ public function getInfo(int $id): array { - $info = (new SchoolApprovalProcess())->with(['participants'])->where(['id' => $id])->find(); + $info = (new SchoolApprovalProcess()) + ->alias("a") + ->join(['school_personnel' => 'b'],'a.applicant_id = b.id','left') + ->join(['school_personnel' => 'c'],'a.current_approver_id = c.id','left') + ->with(['participants']) + ->where(['a.id' => $id]) + ->field('a.*,b.name as applicant_name,c.name as current_approver_name') + ->find(); if (empty($info)) { return []; } - - return $info->toArray(); + $info = $info->toArray(); + $Personnel = new Personnel(); + foreach ($info['participants'] as $key => $value) { + $info['participants'][$key]['name'] = $Personnel->where(['id' => $value['participant_id']])->value('name'); + } + + return $info; } - + /** * 创建审批流程 * @param array $data @@ -76,7 +92,7 @@ class SchoolApprovalProcessService if (empty($config_info)) { throw new Exception('审批配置不存在'); } - + // 创建审批流程 $process = [ 'process_name' => $data['process_name'], @@ -86,9 +102,9 @@ class SchoolApprovalProcessService 'approval_status' => SchoolApprovalProcess::STATUS_PENDING, 'remarks' => $data['remarks'] ?? '' ]; - + $process_id = (new SchoolApprovalProcess())->insertGetId($process); - + // 创建审批参与人 $participants = []; foreach ($config_info['nodes'] as $sequence => $node) { @@ -103,22 +119,22 @@ class SchoolApprovalProcessService ]; } } - + if (!empty($participants)) { (new SchoolApprovalParticipants())->insertAll($participants); - + // 更新当前审批人为第一个审批人 $first_participant = (new SchoolApprovalParticipants()) ->where(['process_id' => $process_id]) ->order('sequence', 'asc') ->find(); - + if (!empty($first_participant)) { (new SchoolApprovalProcess())->where(['id' => $process_id]) ->update(['current_approver_id' => $first_participant['participant_id']]); } } - + Db::commit(); return $process_id; } catch (\Exception $e) { @@ -126,7 +142,7 @@ class SchoolApprovalProcessService throw new Exception($e->getMessage()); } } - + /** * 审批 * @param int $process_id 流程ID @@ -145,17 +161,17 @@ class SchoolApprovalProcessService if (empty($process_info)) { throw new Exception('审批流程不存在'); } - + // 检查是否当前审批人 if ($process_info['current_approver_id'] != $approver_id) { throw new Exception('您不是当前审批人'); } - + // 检查流程状态 if ($process_info['approval_status'] != SchoolApprovalProcess::STATUS_PENDING) { throw new Exception('该审批流程已完成'); } - + // 获取当前审批节点 $current_participant = (new SchoolApprovalParticipants()) ->where([ @@ -164,18 +180,18 @@ class SchoolApprovalProcessService 'status' => SchoolApprovalParticipants::STATUS_PENDING ]) ->find(); - + if (empty($current_participant)) { throw new Exception('审批节点信息错误'); } - + // 更新当前审批人状态 (new SchoolApprovalParticipants())->where(['id' => $current_participant['id']]) ->update([ 'status' => $status, 'remarks' => $remarks ]); - + // 如果拒绝,直接更新整个流程状态为拒绝 if ($status == SchoolApprovalParticipants::STATUS_REJECTED) { (new SchoolApprovalProcess())->where(['id' => $process_id]) @@ -184,11 +200,11 @@ class SchoolApprovalProcessService 'approval_time' => time(), 'remarks' => $remarks ]); - + Db::commit(); return true; } - + // 检查当前节点是否需要会签 $same_sequence_participants = (new SchoolApprovalParticipants()) ->where([ @@ -197,14 +213,14 @@ class SchoolApprovalProcessService 'status' => SchoolApprovalParticipants::STATUS_PENDING ]) ->select(); - + // 如果是会签且还有其他人未审批,则等待 if ($current_participant['sign_type'] == SchoolApprovalParticipants::SIGN_TYPE_AND && !$same_sequence_participants->isEmpty()) { // 不做任何处理,等待其他人审批 Db::commit(); return true; } - + // 获取下一个审批节点 $next_participant = (new SchoolApprovalParticipants()) ->where([ @@ -213,7 +229,7 @@ class SchoolApprovalProcessService ]) ->order('sequence', 'asc') ->find(); - + if (empty($next_participant)) { // 没有下一个审批人,流程结束,标记为已通过 (new SchoolApprovalProcess())->where(['id' => $process_id]) @@ -226,7 +242,7 @@ class SchoolApprovalProcessService (new SchoolApprovalProcess())->where(['id' => $process_id]) ->update(['current_approver_id' => $next_participant['participant_id']]); } - + Db::commit(); return true; } catch (\Exception $e) { @@ -234,7 +250,7 @@ class SchoolApprovalProcessService throw new Exception($e->getMessage()); } } - + /** * 撤销审批流程 * @param int $process_id 流程ID @@ -251,17 +267,17 @@ class SchoolApprovalProcessService if (empty($process_info)) { throw new Exception('审批流程不存在'); } - + // 检查是否申请人 if ($process_info['applicant_id'] != $applicant_id) { throw new Exception('您不是该流程的申请人'); } - + // 检查流程状态 if ($process_info['approval_status'] != SchoolApprovalProcess::STATUS_PENDING) { throw new Exception('该审批流程已完成,无法撤销'); } - + // 更新流程状态为已拒绝(撤销) (new SchoolApprovalProcess())->where(['id' => $process_id]) ->update([ @@ -269,7 +285,7 @@ class SchoolApprovalProcessService 'approval_time' => time(), 'remarks' => '申请人撤销' ]); - + // 更新所有待审批节点为已拒绝 (new SchoolApprovalParticipants())->where([ 'process_id' => $process_id, @@ -278,7 +294,7 @@ class SchoolApprovalProcessService 'status' => SchoolApprovalParticipants::STATUS_REJECTED, 'remarks' => '申请人撤销' ]); - + Db::commit(); return true; } catch (\Exception $e) { @@ -286,4 +302,4 @@ class SchoolApprovalProcessService throw new Exception($e->getMessage()); } } -} \ No newline at end of file +}