From 4d3f1dfd1929b6cbdd7880a167ac8f0eac29a206 Mon Sep 17 00:00:00 2001 From: "1213317725@qq.com" <1213317725@qq.com> Date: Thu, 29 May 2025 17:58:24 +0800 Subject: [PATCH] 1 --- admin/src/app/api/market_performance.ts | 31 +- admin/src/app/api/person_course_schedule.ts | 35 +- admin/src/app/api/service.ts | 2 + admin/src/app/api/sys.ts | 7 +- ...market_performance.market_performance.json | 26 +- ...ourse_schedule.person_course_schedule.json | 34 +- admin/src/app/views/classroom/classroom.vue | 11 +- .../customer_resources/components/fp.vue | 3 +- .../components/market-performance-edit.vue | 420 +++++----- .../market_performance/market_performance.vue | 434 +++++----- .../person-course-schedule-edit.vue | 436 +++++------ .../person_course_schedule.vue | 469 +++++------ .../components/physical-test-edit.vue | 739 ++++++++---------- .../app/views/scsjtj/components/BarChart.vue | 52 ++ .../src/app/views/scsjtj/components/Card.vue | 17 + .../app/views/scsjtj/components/PieChart.vue | 69 ++ admin/src/app/views/scsjtj/scsjtj.vue | 127 +++ .../views/service/components/service-edit.vue | 28 +- admin/src/app/views/service/service.vue | 25 +- admin/src/app/views/student/student.vue | 1 + admin/src/app/views/venue/venue.vue | 2 +- .../app/adminapi/controller/campus/Campus.php | 5 +- .../controller/classroom/Classroom.php | 4 +- .../customer_resources/CustomerResources.php | 1 + .../market_performance/MarketPerformance.php | 6 +- .../PersonCourseSchedule.php | 39 +- .../adminapi/controller/student/Student.php | 1 + .../app/adminapi/controller/sys/System.php | 15 +- .../app/adminapi/route/market_performance.php | 1 + .../adminapi/route/person_course_schedule.php | 8 +- niucloud/app/adminapi/route/service.php | 1 + niucloud/app/adminapi/route/sys.php | 3 + .../market_performance/MarketPerformance.php | 18 + .../PersonCourseSchedule.php | 82 +- .../service/admin/campus/CampusService.php | 8 +- .../admin/classroom/ClassroomService.php | 8 +- .../CustomerResourcesService.php | 15 +- .../MarketPerformanceService.php | 4 +- .../PersonCourseScheduleService.php | 154 ++-- .../service/admin/student/StudentService.php | 2 +- .../app/service/admin/sys/SystemService.php | 57 ++ .../PersonCourseSchedule.php | 18 +- 42 files changed, 1757 insertions(+), 1661 deletions(-) create mode 100644 admin/src/app/views/scsjtj/components/BarChart.vue create mode 100644 admin/src/app/views/scsjtj/components/Card.vue create mode 100644 admin/src/app/views/scsjtj/components/PieChart.vue create mode 100644 admin/src/app/views/scsjtj/scsjtj.vue diff --git a/admin/src/app/api/market_performance.ts b/admin/src/app/api/market_performance.ts index 583895ce..84f33d16 100644 --- a/admin/src/app/api/market_performance.ts +++ b/admin/src/app/api/market_performance.ts @@ -1,5 +1,7 @@ import request from '@/utils/request' + + // USER_CODE_BEGIN -- market_performance /** * 获取市场绩效列表 @@ -7,7 +9,7 @@ import request from '@/utils/request' * @returns */ export function getMarketPerformanceList(params: Record) { - return request.get(`market_performance/market_performance`, { params }) + return request.get(`market_performance/market_performance`, {params}) } /** @@ -16,7 +18,7 @@ export function getMarketPerformanceList(params: Record) { * @returns */ export function getMarketPerformanceInfo(id: number) { - return request.get(`market_performance/market_performance/${id}`) + return request.get(`market_performance/market_performance/${id}`); } /** @@ -25,10 +27,7 @@ export function getMarketPerformanceInfo(id: number) { * @returns */ export function addMarketPerformance(params: Record) { - return request.post('market_performance/market_performance', params, { - showErrorMessage: true, - showSuccessMessage: true, - }) + return request.post('market_performance/market_performance', params, { showErrorMessage: true, showSuccessMessage: true }) } /** @@ -38,11 +37,7 @@ export function addMarketPerformance(params: Record) { * @returns */ export function editMarketPerformance(params: Record) { - return request.put( - `market_performance/market_performance/${params.id}`, - params, - { showErrorMessage: true, showSuccessMessage: true } - ) + return request.put(`market_performance/market_performance/${params.id}`, params, { showErrorMessage: true, showSuccessMessage: true }) } /** @@ -51,17 +46,13 @@ export function editMarketPerformance(params: Record) { * @returns */ export function deleteMarketPerformance(id: number) { - return request.delete(`market_performance/market_performance/${id}`, { - showErrorMessage: true, - showSuccessMessage: true, - }) + return request.delete(`market_performance/market_performance/${id}`, { showErrorMessage: true, showSuccessMessage: true }) } -export function getWithPersonnelList(params: Record) { - return request.get('market_performance/personnel_all', { params }) -} -export function getWithCampusList(params: Record) { - return request.get('market_performance/campus_all', { params }) +export function getWithPersonnelList(params: Record){ + return request.get('market_performance/personnel_all', {params}) +}export function getWithCampusList(params: Record){ + return request.get('market_performance/campus_all', {params}) } // USER_CODE_END -- market_performance diff --git a/admin/src/app/api/person_course_schedule.ts b/admin/src/app/api/person_course_schedule.ts index 46da6f4b..72e40fb5 100644 --- a/admin/src/app/api/person_course_schedule.ts +++ b/admin/src/app/api/person_course_schedule.ts @@ -1,5 +1,7 @@ import request from '@/utils/request' + + // USER_CODE_BEGIN -- person_course_schedule /** * 获取人员与课程安排关系列表 @@ -7,9 +9,7 @@ import request from '@/utils/request' * @returns */ export function getPersonCourseScheduleList(params: Record) { - return request.get(`person_course_schedule/person_course_schedule`, { - params, - }) + return request.get(`person_course_schedule/person_course_schedule`, {params}) } /** @@ -18,7 +18,7 @@ export function getPersonCourseScheduleList(params: Record) { * @returns */ export function getPersonCourseScheduleInfo(id: number) { - return request.get(`person_course_schedule/person_course_schedule/${id}`) + return request.get(`person_course_schedule/person_course_schedule/${id}`); } /** @@ -27,10 +27,7 @@ export function getPersonCourseScheduleInfo(id: number) { * @returns */ export function addPersonCourseSchedule(params: Record) { - return request.post('person_course_schedule/person_course_schedule', params, { - showErrorMessage: true, - showSuccessMessage: true, - }) + return request.post('person_course_schedule/person_course_schedule', params, { showErrorMessage: true, showSuccessMessage: true }) } /** @@ -40,11 +37,7 @@ export function addPersonCourseSchedule(params: Record) { * @returns */ export function editPersonCourseSchedule(params: Record) { - return request.put( - `person_course_schedule/person_course_schedule/${params.id}`, - params, - { showErrorMessage: true, showSuccessMessage: true } - ) + return request.put(`person_course_schedule/person_course_schedule/${params.id}`, params, { showErrorMessage: true, showSuccessMessage: true }) } /** @@ -53,14 +46,16 @@ export function editPersonCourseSchedule(params: Record) { * @returns */ export function deletePersonCourseSchedule(id: number) { - return request.delete(`person_course_schedule/person_course_schedule/${id}`, { - showErrorMessage: true, - showSuccessMessage: true, - }) + return request.delete(`person_course_schedule/person_course_schedule/${id}`, { showErrorMessage: true, showSuccessMessage: true }) +} + + +export function xkPersonCourseSchedule(id: number) { + return request.delete(`person_course_schedule/xk/${id}`, { showErrorMessage: true, showSuccessMessage: true }) } -/**获取试课人员列表 */ -export function getTryCoursePerson(id: number) { - return request.get(`person_course_schedule/get_try_course_person/${id}`) + +export function getWithCustomerResourcesList(params: Record){ + return request.get('person_course_schedule/customer_resources_all', {params}) } // USER_CODE_END -- person_course_schedule diff --git a/admin/src/app/api/service.ts b/admin/src/app/api/service.ts index a9b01e82..9ac0e1ba 100644 --- a/admin/src/app/api/service.ts +++ b/admin/src/app/api/service.ts @@ -2,6 +2,8 @@ import request from '@/utils/request' + + // USER_CODE_BEGIN -- service /** * 获取服务列表 diff --git a/admin/src/app/api/sys.ts b/admin/src/app/api/sys.ts index 8f9d0f04..71867e9e 100644 --- a/admin/src/app/api/sys.ts +++ b/admin/src/app/api/sys.ts @@ -790,4 +790,9 @@ export function getHome(params: Record) { export function setDocument(params: Record) { return request.post('sys/document/document', params) -} \ No newline at end of file +} + + +export function getScsjtj(params: Record) { + return request.post('sys/scsjtj', params) +} diff --git a/admin/src/app/lang/zh-cn/market_performance.market_performance.json b/admin/src/app/lang/zh-cn/market_performance.market_performance.json index 32ba3daf..f3387593 100644 --- a/admin/src/app/lang/zh-cn/market_performance.market_performance.json +++ b/admin/src/app/lang/zh-cn/market_performance.market_performance.json @@ -1,13 +1,15 @@ { - "personnelId": "人员", - "personnelIdPlaceholder": "请输入人员", - "campusId": "校区", - "campusIdPlaceholder": "全部", - "performanceAmount": "绩效金额", - "performanceAmountPlaceholder": "请输入绩效金额", - "addMarketPerformance": "添加市场绩效", - "updateMarketPerformance": "编辑市场绩效", - "marketPerformanceDeleteTips": "确定要删除该数据吗?", - "startDate": "请选择开始时间", - "endDate": "请选择结束时间" -} + "personnelId":"人员", + "personnelIdPlaceholder":"请输入人员", + "campusId":"校区", + "campusIdPlaceholder":"全部", + "performanceAmount":"绩效金额", + "performanceAmountPlaceholder":"请输入绩效金额", + "createdAt":"创建时间", + "createdAtPlaceholder":"请输入创建时间", + "addMarketPerformance":"添加市场绩效", + "updateMarketPerformance":"编辑市场绩效", + "marketPerformanceDeleteTips":"确定要删除该数据吗?", + "startDate":"请选择开始时间", + "endDate":"请选择结束时间" +} \ No newline at end of file diff --git a/admin/src/app/lang/zh-cn/person_course_schedule.person_course_schedule.json b/admin/src/app/lang/zh-cn/person_course_schedule.person_course_schedule.json index 58bb5ce7..125d4df6 100644 --- a/admin/src/app/lang/zh-cn/person_course_schedule.person_course_schedule.json +++ b/admin/src/app/lang/zh-cn/person_course_schedule.person_course_schedule.json @@ -1,19 +1,17 @@ { - "id": "关系编号", - "idPlaceholder": "请输入关系编号", - "personId": "人员或资源ID", - "personIdPlaceholder": "请输入人员或资源ID", - "personType": "人员类型: student-正式学员, customer_resource-客户资源", - "personTypePlaceholder": "请输入人员类型: student-正式学员, customer_resource-客户资源", - "scheduleId": "课程安排ID", - "scheduleIdPlaceholder": "请输入课程安排ID", - "courseDate": "上课日期", - "courseDatePlaceholder": "请输入上课日期", - "timeSlot": "上课时段", - "timeSlotPlaceholder": "请输入上课时段", - "addPersonCourseSchedule": "添加人员与课程安排关系", - "updatePersonCourseSchedule": "编辑人员与课程安排关系", - "personCourseScheduleDeleteTips": "确定要删除该数据吗?", - "startDate": "请选择开始时间", - "endDate": "请选择结束时间" -} + "personId":"资源", + "personIdPlaceholder":"全部", + "personType":"人员类型", + "personTypePlaceholder":"请输入人员类型", + "scheduleId":"课程类型", + "scheduleIdPlaceholder":"请输入课程类型", + "courseDate":"上课时间", + "courseDatePlaceholder":"请输入上课时间", + "timeSlot":"上课时段", + "timeSlotPlaceholder":"请输入上课时段", + "addPersonCourseSchedule":"添加人员与课程安排关系", + "updatePersonCourseSchedule":"编辑人员与课程安排关系", + "personCourseScheduleDeleteTips":"确定要删除该数据吗?", + "startDate":"请选择开始时间", + "endDate":"请选择结束时间" +} \ No newline at end of file diff --git a/admin/src/app/views/classroom/classroom.vue b/admin/src/app/views/classroom/classroom.vue index 40ce6a38..02d87324 100644 --- a/admin/src/app/views/classroom/classroom.vue +++ b/admin/src/app/views/classroom/classroom.vue @@ -221,6 +221,8 @@ {{ t('delete') }} + + 学员 @@ -253,8 +255,9 @@ import { } from '@/app/api/classroom' import { ElMessageBox, FormInstance } from 'element-plus' import Edit from '@/app/views/classroom/components/classroom-edit.vue' -import { useRoute } from 'vue-router' +import { useRouter, useRoute } from 'vue-router' +const router = useRouter() const route = useRoute() const pageName = route.meta.title @@ -275,6 +278,12 @@ let classroomTable = reactive({ }, }) + +const classEvent = (class_id : number) => { + console.log(class_id); + router.push({ path: '/student/student', query: { class_id: class_id } }) +} + const searchFormRef = ref() // 选中数据 diff --git a/admin/src/app/views/customer_resources/components/fp.vue b/admin/src/app/views/customer_resources/components/fp.vue index 5e444248..0ddc3988 100644 --- a/admin/src/app/views/customer_resources/components/fp.vue +++ b/admin/src/app/views/customer_resources/components/fp.vue @@ -20,6 +20,7 @@ v-model="formData.shared_by" clearable placeholder="请选择分配人员" + filterable > { const consultantList = ref([] as any[]) const setConsultantList = async () => { - consultantList.value = await (await getWithPersonnelList({ role_id: 2 })).data + consultantList.value = await (await getWithPersonnelList({ role_id: 2 ,dept_id:2})).data } setConsultantList() diff --git a/admin/src/app/views/market_performance/components/market-performance-edit.vue b/admin/src/app/views/market_performance/components/market-performance-edit.vue index d3936591..f3479ef1 100644 --- a/admin/src/app/views/market_performance/components/market-performance-edit.vue +++ b/admin/src/app/views/market_performance/components/market-performance-edit.vue @@ -1,231 +1,189 @@ - - - - - - + + + + + + diff --git a/admin/src/app/views/market_performance/market_performance.vue b/admin/src/app/views/market_performance/market_performance.vue index 77db6a92..dc757d83 100644 --- a/admin/src/app/views/market_performance/market_performance.vue +++ b/admin/src/app/views/market_performance/market_performance.vue @@ -1,240 +1,194 @@ - - - - - + + + + + diff --git a/admin/src/app/views/person_course_schedule/components/person-course-schedule-edit.vue b/admin/src/app/views/person_course_schedule/components/person-course-schedule-edit.vue index d3cd056f..45887c1a 100644 --- a/admin/src/app/views/person_course_schedule/components/person-course-schedule-edit.vue +++ b/admin/src/app/views/person_course_schedule/components/person-course-schedule-edit.vue @@ -1,227 +1,209 @@ - - - - - - + + + + + + diff --git a/admin/src/app/views/person_course_schedule/person_course_schedule.vue b/admin/src/app/views/person_course_schedule/person_course_schedule.vue index d3608b15..0fe65d48 100644 --- a/admin/src/app/views/person_course_schedule/person_course_schedule.vue +++ b/admin/src/app/views/person_course_schedule/person_course_schedule.vue @@ -1,256 +1,213 @@ - - - - - + + + + + diff --git a/admin/src/app/views/physical_test/components/physical-test-edit.vue b/admin/src/app/views/physical_test/components/physical-test-edit.vue index bffd277c..f5db9612 100644 --- a/admin/src/app/views/physical_test/components/physical-test-edit.vue +++ b/admin/src/app/views/physical_test/components/physical-test-edit.vue @@ -1,72 +1,45 @@ + .diy-dialog-wrap .el-form-item__label { + height: auto !important; + } + \ No newline at end of file diff --git a/admin/src/app/views/scsjtj/components/BarChart.vue b/admin/src/app/views/scsjtj/components/BarChart.vue new file mode 100644 index 00000000..856c2bf9 --- /dev/null +++ b/admin/src/app/views/scsjtj/components/BarChart.vue @@ -0,0 +1,52 @@ + + + diff --git a/admin/src/app/views/scsjtj/components/Card.vue b/admin/src/app/views/scsjtj/components/Card.vue new file mode 100644 index 00000000..bc4f8607 --- /dev/null +++ b/admin/src/app/views/scsjtj/components/Card.vue @@ -0,0 +1,17 @@ + + + diff --git a/admin/src/app/views/scsjtj/components/PieChart.vue b/admin/src/app/views/scsjtj/components/PieChart.vue new file mode 100644 index 00000000..0f1bc9dd --- /dev/null +++ b/admin/src/app/views/scsjtj/components/PieChart.vue @@ -0,0 +1,69 @@ + + + diff --git a/admin/src/app/views/scsjtj/scsjtj.vue b/admin/src/app/views/scsjtj/scsjtj.vue new file mode 100644 index 00000000..eba62579 --- /dev/null +++ b/admin/src/app/views/scsjtj/scsjtj.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/admin/src/app/views/service/components/service-edit.vue b/admin/src/app/views/service/components/service-edit.vue index 1c3cfc43..2a02a178 100644 --- a/admin/src/app/views/service/components/service-edit.vue +++ b/admin/src/app/views/service/components/service-edit.vue @@ -14,7 +14,15 @@ - + + + + @@ -28,7 +36,7 @@ v-for="(item, index) in staff_reminderList" :key="index" :label="item.name" - :value="Number(item.value)" + :value="item.value" /> @@ -40,7 +48,7 @@ v-for="(item, index) in customer_reminderList" :key="index" :label="item.name" - :value="Number(item.value)" + :value="item.value" /> @@ -52,14 +60,14 @@ v-for="(item, index) in customer_confirmationList" :key="index" :label="item.name" - :value="Number(item.value)" + :value="item.value" /> - + @@ -109,7 +117,7 @@ const initialFormData = { staff_reminder: '', customer_reminder: '', customer_confirmation: '', - // customer_feedback: '', + customer_feedback: '', status: '', } const formData: Record = reactive({ ...initialFormData }) @@ -200,6 +208,12 @@ const confirm = async (formEl: FormInstance | undefined) => { } // 获取字典数据 + let service_typeList = ref([]) + const service_typeDictList = async () => { + service_typeList.value = await (await useDictionary('service_type')).data.dictionary + } + service_typeDictList(); + watch(() => service_typeList.value, () => { formData.service_type = service_typeList.value[0].value }) let staff_reminderList = ref([]) const staff_reminderDictList = async () => { staff_reminderList.value = await (await useDictionary('global_true_or_false')).data.dictionary diff --git a/admin/src/app/views/service/service.vue b/admin/src/app/views/service/service.vue index 1abbdbe8..fd5b98f1 100644 --- a/admin/src/app/views/service/service.vue +++ b/admin/src/app/views/service/service.vue @@ -14,10 +14,20 @@ + - + + + + + @@ -46,7 +56,13 @@ - + + + @@ -109,6 +125,11 @@ const searchFormRef = ref() const selectData = ref([]) // 字典数据 + const service_typeList = ref([] as any[]) + const service_typeDictList = async () => { + service_typeList.value = await (await useDictionary('service_type')).data.dictionary + } + service_typeDictList(); const staff_reminderList = ref([] as any[]) const staff_reminderDictList = async () => { staff_reminderList.value = await (await useDictionary('global_true_or_false')).data.dictionary diff --git a/admin/src/app/views/student/student.vue b/admin/src/app/views/student/student.vue index 2781b97a..988f6b01 100644 --- a/admin/src/app/views/student/student.vue +++ b/admin/src/app/views/student/student.vue @@ -169,6 +169,7 @@ let studentTable = reactive({ "contact_phone":"", "created_at":[], "member_label":'', + "class_id": route.query.class_id ?? '' } }) diff --git a/admin/src/app/views/venue/venue.vue b/admin/src/app/views/venue/venue.vue index 71b56f1a..6ae4f767 100644 --- a/admin/src/app/views/venue/venue.vue +++ b/admin/src/app/views/venue/venue.vue @@ -118,7 +118,7 @@ {{ !venueTable.loading ? t('emptyData') : '' }} del($id); - return success('DELETE_SUCCESS'); + return (new CampusService())->del($id); } - + } diff --git a/niucloud/app/adminapi/controller/classroom/Classroom.php b/niucloud/app/adminapi/controller/classroom/Classroom.php index 68c61fd7..e7ddf1ac 100644 --- a/niucloud/app/adminapi/controller/classroom/Classroom.php +++ b/niucloud/app/adminapi/controller/classroom/Classroom.php @@ -102,8 +102,8 @@ class Classroom extends BaseAdminController */ public function del(int $id) { - (new ClassroomService())->del($id); - return success('DELETE_SUCCESS'); + return (new ClassroomService())->del($id); + } diff --git a/niucloud/app/adminapi/controller/customer_resources/CustomerResources.php b/niucloud/app/adminapi/controller/customer_resources/CustomerResources.php index 02caef20..e67500de 100644 --- a/niucloud/app/adminapi/controller/customer_resources/CustomerResources.php +++ b/niucloud/app/adminapi/controller/customer_resources/CustomerResources.php @@ -154,6 +154,7 @@ class CustomerResources extends BaseAdminController { $data = $this->request->params([ ["role_id", ""], + ["dept_id",""] ]); return success((new CustomerResourcesService())->getPersonnelAll($data)); diff --git a/niucloud/app/adminapi/controller/market_performance/MarketPerformance.php b/niucloud/app/adminapi/controller/market_performance/MarketPerformance.php index 3c668f2f..1835a700 100644 --- a/niucloud/app/adminapi/controller/market_performance/MarketPerformance.php +++ b/niucloud/app/adminapi/controller/market_performance/MarketPerformance.php @@ -29,9 +29,9 @@ class MarketPerformance extends BaseAdminController public function lists(){ $data = $this->request->params([ ["campus_id",""], - ["performance_amount",""] + ["performance_amount",""], + ["created_at",["",""]] ]); - return success((new MarketPerformanceService())->getPage($data)); } @@ -87,7 +87,7 @@ class MarketPerformance extends BaseAdminController return success('DELETE_SUCCESS'); } - + public function getPersonnelAll(){ return success(( new MarketPerformanceService())->getPersonnelAll()); } diff --git a/niucloud/app/adminapi/controller/person_course_schedule/PersonCourseSchedule.php b/niucloud/app/adminapi/controller/person_course_schedule/PersonCourseSchedule.php index 77411dd7..8596c838 100644 --- a/niucloud/app/adminapi/controller/person_course_schedule/PersonCourseSchedule.php +++ b/niucloud/app/adminapi/controller/person_course_schedule/PersonCourseSchedule.php @@ -28,11 +28,9 @@ class PersonCourseSchedule extends BaseAdminController */ public function lists(){ $data = $this->request->params([ - ["person_id",""], - ["person_type",""], - ["schedule_id",""], - ["course_date",""], - ["time_slot",""] + ["name",""], + ["phone_number",""], + ["campus_name",""] ]); return success((new PersonCourseScheduleService())->getPage($data)); } @@ -52,9 +50,12 @@ class PersonCourseSchedule extends BaseAdminController */ public function add(){ $data = $this->request->params([ - ["resources_id",0], + ["person_id",0], + ["person_type",""], ["schedule_id",0], - ["schedule_id",0] + ["course_date","2025-05-29 17:03:27"], + ["time_slot",""], + ]); $this->validate($data, 'app\validate\person_course_schedule\PersonCourseSchedule.add'); $id = (new PersonCourseScheduleService())->add($data); @@ -68,8 +69,11 @@ class PersonCourseSchedule extends BaseAdminController */ public function edit(int $id){ $data = $this->request->params([ - ["resources_id",0], - ["schedule_id",0] + ["person_id",0], + ["person_type",""], + ["schedule_id",0], + ["course_date","2025-05-29 17:03:27"], + ["time_slot",""], ]); $this->validate($data, 'app\validate\person_course_schedule\PersonCourseSchedule.edit'); @@ -84,13 +88,18 @@ class PersonCourseSchedule extends BaseAdminController */ public function del(int $id){ (new PersonCourseScheduleService())->del($id); - return success('DELETE_SUCCESS'); + return success('请假成功'); } - /** - * 获取试课人员 - */ - public function getTryCoursePerson($schedule_id){ - return success((new PersonCourseScheduleService())->getTryCoursePerson($schedule_id)); + public function xk(int $id){ + (new PersonCourseScheduleService())->xk($id); + return success('销课成功'); + } + + + + public function getCustomerResourcesAll(){ + return success(( new PersonCourseScheduleService())->getCustomerResourcesAll()); } + } diff --git a/niucloud/app/adminapi/controller/student/Student.php b/niucloud/app/adminapi/controller/student/Student.php index b6adede6..2579515e 100644 --- a/niucloud/app/adminapi/controller/student/Student.php +++ b/niucloud/app/adminapi/controller/student/Student.php @@ -34,6 +34,7 @@ class Student extends BaseAdminController ["contact_phone",""], ["created_at",["",""]], ['member_label', 0], + ["class_id",""] ]); return success((new StudentService())->getPage($data)); } diff --git a/niucloud/app/adminapi/controller/sys/System.php b/niucloud/app/adminapi/controller/sys/System.php index 8899c5d6..cba758ee 100644 --- a/niucloud/app/adminapi/controller/sys/System.php +++ b/niucloud/app/adminapi/controller/sys/System.php @@ -152,12 +152,6 @@ class System extends BaseAdminController } public function home(){ -// $data = $this->request->params([ -// ['start_date', date('Y-m-d', strtotime('-6 day')) ], -// ['end_date', date('Y-m-d', strtotime('+1 day'))], -// '' -// ]); - $data = $this->request->params([ ['date', 'week'], ]); @@ -166,4 +160,13 @@ class System extends BaseAdminController } + public function scsjtj(){ + $data = $this->request->params([ + ['dateRange', []], + ]); + + return success(data: (new SystemService())->scsjtj($data)); + } + + } diff --git a/niucloud/app/adminapi/route/market_performance.php b/niucloud/app/adminapi/route/market_performance.php index 2a187b5e..32ec2a38 100644 --- a/niucloud/app/adminapi/route/market_performance.php +++ b/niucloud/app/adminapi/route/market_performance.php @@ -14,6 +14,7 @@ use think\facade\Route; use app\adminapi\middleware\AdminCheckRole; use app\adminapi\middleware\AdminCheckToken; use app\adminapi\middleware\AdminLog; + // USER_CODE_BEGIN -- market_performance Route::group('market_performance', function () { diff --git a/niucloud/app/adminapi/route/person_course_schedule.php b/niucloud/app/adminapi/route/person_course_schedule.php index 0f55ac97..e7057540 100644 --- a/niucloud/app/adminapi/route/person_course_schedule.php +++ b/niucloud/app/adminapi/route/person_course_schedule.php @@ -14,6 +14,7 @@ use think\facade\Route; use app\adminapi\middleware\AdminCheckRole; use app\adminapi\middleware\AdminCheckToken; use app\adminapi\middleware\AdminLog; + // USER_CODE_BEGIN -- person_course_schedule Route::group('person_course_schedule', function () { @@ -28,8 +29,11 @@ Route::group('person_course_schedule', function () { Route::put('person_course_schedule/:id', 'person_course_schedule.PersonCourseSchedule/edit'); //删除人员与课程安排关系 Route::delete('person_course_schedule/:id', 'person_course_schedule.PersonCourseSchedule/del'); - //获取试课人员 - Route::get('get_try_course_person/:schedule_id', 'person_course_schedule.PersonCourseSchedule/getTryCoursePerson'); + + Route::delete('xk/:id', 'person_course_schedule.PersonCourseSchedule/xk'); + + Route::get('customer_resources_all','person_course_schedule.PersonCourseSchedule/getCustomerResourcesAll'); + })->middleware([ AdminCheckToken::class, AdminCheckRole::class, diff --git a/niucloud/app/adminapi/route/service.php b/niucloud/app/adminapi/route/service.php index e810689f..8ba625da 100644 --- a/niucloud/app/adminapi/route/service.php +++ b/niucloud/app/adminapi/route/service.php @@ -16,6 +16,7 @@ use app\adminapi\middleware\AdminCheckToken; use app\adminapi\middleware\AdminLog; + // USER_CODE_BEGIN -- service Route::group('service', function () { diff --git a/niucloud/app/adminapi/route/sys.php b/niucloud/app/adminapi/route/sys.php index 46095d4f..67af2a40 100644 --- a/niucloud/app/adminapi/route/sys.php +++ b/niucloud/app/adminapi/route/sys.php @@ -340,6 +340,9 @@ Route::group('sys', function() { Route::post('home', 'sys.System/home'); + Route::post('scsjtj', 'sys.System/scsjtj'); + + })->middleware([ AdminCheckToken::class, AdminCheckRole::class, diff --git a/niucloud/app/model/market_performance/MarketPerformance.php b/niucloud/app/model/market_performance/MarketPerformance.php index ca8f1e82..7dc53e97 100644 --- a/niucloud/app/model/market_performance/MarketPerformance.php +++ b/niucloud/app/model/market_performance/MarketPerformance.php @@ -70,6 +70,24 @@ class MarketPerformance extends BaseModel } } + /** + * 搜索器:市场绩效创建时间 + * @param $value + * @param $data + */ + public function searchCreatedAtAttr($query, $value, $data) + { + $start = empty($value[0]) ? 0 : strtotime($value[0]); + $end = empty($value[1]) ? 0 : strtotime($value[1]); + if ($start > 0 && $end > 0) { + $query->where([["created_at", "between", [$start, $end]]]); + } else if ($start > 0 && $end == 0) { + $query->where([["created_at", ">=", $start]]); + } else if ($start == 0 && $end > 0) { + $query->where([["created_at", "<=", $end]]); + } + } + diff --git a/niucloud/app/model/person_course_schedule/PersonCourseSchedule.php b/niucloud/app/model/person_course_schedule/PersonCourseSchedule.php index 6862519c..e6bd524c 100644 --- a/niucloud/app/model/person_course_schedule/PersonCourseSchedule.php +++ b/niucloud/app/model/person_course_schedule/PersonCourseSchedule.php @@ -11,14 +11,12 @@ namespace app\model\person_course_schedule; -use app\model\customer_resources\CustomerResources; -use app\model\personnel\Personnel; -use app\model\student\Student; use core\base\BaseModel; -use think\model\concern\SoftDelete; use think\model\relation\HasMany; use think\model\relation\HasOne; +use app\model\customer_resources\CustomerResources; + /** * 人员与课程安排关系模型 * Class PersonCourseSchedule @@ -26,6 +24,8 @@ use think\model\relation\HasOne; */ class PersonCourseSchedule extends BaseModel { + + /** * 数据表主键 * @var string @@ -38,92 +38,26 @@ class PersonCourseSchedule extends BaseModel */ protected $name = 'person_course_schedule'; - /** - * 搜索器:人员与课程安排关系关系编号 - * @param $value - * @param $data - */ - public function searchIdAttr($query, $value, $data) - { - if ($value) { - $query->where("id", $value); - } - } /** - * 搜索器:人员与课程安排关系人员或资源ID + * 搜索器:人员与课程安排关系资源 * @param $value * @param $data */ public function searchPersonIdAttr($query, $value, $data) { - if ($value) { + if ($value) { $query->where("person_id", $value); } } - /** - * 搜索器:人员与课程安排关系人员类型: student-正式学员, customer_resource-客户资源 - * @param $value - * @param $data - */ - public function searchPersonTypeAttr($query, $value, $data) - { - if ($value) { - $query->where("person_type", $value); - } - } - /** - * 搜索器:人员与课程安排关系课程安排ID - * @param $value - * @param $data - */ - public function searchScheduleIdAttr($query, $value, $data) - { - if ($value) { - $query->where("schedule_id", $value); - } - } - /** - * 搜索器:人员与课程安排关系上课日期 - * @param $value - * @param $data - */ - public function searchCourseDateAttr($query, $value, $data) - { - if ($value) { - $query->where("course_date", $value); - } - } - /** - * 搜索器:人员与课程安排关系上课时段 - * @param $value - * @param $data - */ - public function searchTimeSlotAttr($query, $value, $data) - { - if ($value) { - $query->where("time_slot", $value); - } - } - public function person() - { - return $this->hasOne(Personnel::class, 'id', 'person_id'); - } - - public function student() - { - return $this->hasOne(Student::class, 'id', 'student_id'); - } - - public function resources() - { - return $this->hasOne(CustomerResources::class, 'id', 'resources_id'); + public function customerResources(){ + return $this->hasOne(CustomerResources::class, 'id', 'person_id')->joinType('left')->withField('name,id')->bind(['person_id_name'=>'name']); } } diff --git a/niucloud/app/service/admin/campus/CampusService.php b/niucloud/app/service/admin/campus/CampusService.php index 8603413b..92fd68cf 100644 --- a/niucloud/app/service/admin/campus/CampusService.php +++ b/niucloud/app/service/admin/campus/CampusService.php @@ -13,6 +13,7 @@ namespace app\service\admin\campus; use app\model\campus\Campus; +use app\model\student\Student; use core\base\BaseAdminService; @@ -94,13 +95,16 @@ class CampusService extends BaseAdminService /** * 删除校区 * @param int $id - * @return bool */ public function del(int $id) { + $student = new Student(); + if($student->where(['campus_id' => $id])->find()){ + return fail("校区下有学员禁止删除"); + } $model = $this->model->where([['id', '=', $id]])->find(); $res = $model->delete(); - return $res; + return success('DELETE_SUCCESS'); } diff --git a/niucloud/app/service/admin/classroom/ClassroomService.php b/niucloud/app/service/admin/classroom/ClassroomService.php index e8530d7e..91672484 100644 --- a/niucloud/app/service/admin/classroom/ClassroomService.php +++ b/niucloud/app/service/admin/classroom/ClassroomService.php @@ -17,6 +17,7 @@ use app\model\course_schedule\CourseSchedule; use app\model\personnel\Personnel; use app\model\rel\ClassPersonnelRel; +use app\model\student\Student; use core\base\BaseAdminService; @@ -90,13 +91,16 @@ class ClassroomService extends BaseAdminService /** * 删除场地管理 * @param int $id - * @return bool */ public function del(int $id) { + $student = new Student(); + if($student->where(['class_id' => $id])->find()){ + return fail("班级下有学员禁止删除"); + } $model = $this->model->where([['id', '=', $id]])->find(); $res = $model->delete(); - return $res; + return success('DELETE_SUCCESS'); } diff --git a/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php b/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php index bf2935af..9e45727a 100644 --- a/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php +++ b/niucloud/app/service/admin/customer_resources/CustomerResourcesService.php @@ -136,7 +136,7 @@ class CustomerResourcesService extends BaseAdminService $data['consultant'] = $personnel->where(['sys_user_id' => $this->uid])->value("id"); if (!$data['consultant']) { - return fail("操作失败"); + return fail("超级管理员不允许添加资源"); } $sixSpeed = new SixSpeed(); @@ -299,15 +299,20 @@ class CustomerResourcesService extends BaseAdminService public function getPersonnelAll($data) { + $school_campus_person_role = new CampusPersonRole(); $personnelModel = new Personnel(); $where = []; if ($data['role_id']) { - $where[] = ['b.role_id', '=', $data['role_id']]; + $where[] = ['a.role_id', '=', $data['role_id']]; } - return $personnelModel + if ($data['dept_id']) { + $where[] = ['a.dept_id', '=', $data['dept_id']]; + } + + return $school_campus_person_role ->alias("a") - ->join(['school_campus_person_role' => 'b'], 'a.id = b.person_id', 'left') - ->field("a.*") + ->join(['school_personnel' => 'b'], 'a.person_id = b.id', 'left') + ->field("b.*") ->where($where)->select()->toArray(); } diff --git a/niucloud/app/service/admin/market_performance/MarketPerformanceService.php b/niucloud/app/service/admin/market_performance/MarketPerformanceService.php index c83e2cd3..5d156efe 100644 --- a/niucloud/app/service/admin/market_performance/MarketPerformanceService.php +++ b/niucloud/app/service/admin/market_performance/MarketPerformanceService.php @@ -41,7 +41,7 @@ class MarketPerformanceService extends BaseAdminService $field = 'id,personnel_id,campus_id,performance_amount,resource_count,performance_date,performance_config,performance_algorithm,status,created_at,updated_at'; $order = 'id desc'; - $search_model = $this->model->where(get_campus_where($this->uid))->withSearch(["campus_id","performance_amount"], $where)->with(['personnel','campus'])->field($field)->order($order); + $search_model = $this->model->withSearch(["campus_id","performance_amount","created_at"], $where)->with(['personnel','campus'])->field($field)->order($order); $list = $this->pageQuery($search_model); return $list; } @@ -96,7 +96,7 @@ class MarketPerformanceService extends BaseAdminService return $res; } - + public function getPersonnelAll(){ $personnelModel = new Personnel(); return $personnelModel->select()->toArray(); diff --git a/niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php b/niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php index d61673ab..38461880 100644 --- a/niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php +++ b/niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php @@ -11,12 +11,11 @@ namespace app\service\admin\person_course_schedule; +use app\model\course\Course; use app\model\course_schedule\CourseSchedule; -use app\model\customer_resources\CustomerResources; use app\model\person_course_schedule\PersonCourseSchedule; +use app\model\customer_resources\CustomerResources; -use app\model\student\Student; -use app\model\venue\Venue; use core\base\BaseAdminService; @@ -38,14 +37,37 @@ class PersonCourseScheduleService extends BaseAdminService * @param array $where * @return array */ - public function getPage(array $where = []) + public function getPage(array $data = []) { - $field = 'id,person_id,person_type,schedule_id,course_date,time_slot,created_at,updated_at,deleted_at'; - $order = 'id desc'; + $order = 'a.id desc'; + $where = []; + if($data['name']){ + $where[] = ['b.name','=',$data['name']]; + } - $search_model = $this->model->withSearch(["id", "person_id", "person_type", "schedule_id", "course_date", "time_slot"], $where)->field($field)->order($order); - $list = $this->pageQuery($search_model); - return $list; + if($data['phone_number']){ + $where[] = ['b.phone_number','=',$data['phone_number']]; + } + + if($data['campus_name']){ + $where[] = ['c.campus_name','=',$data['campus_name']]; + } + $search_model = $this->model + ->alias("a") + ->join(['school_customer_resources' => 'b'],'a.person_id = b.id','left') + ->join(['school_campus'=>'c'],'b.campus = c.id','left') + ->where($where) + ->field('a.*,b.name') + ->order($order); + return $this->pageQuery($search_model, function ($item, $key) { +// $course = new Course(); + $course_schedule = new CourseSchedule(); + $course_type = $course_schedule + ->alias("a") + ->join(['school_course' => 'b'],'a.course_id = b.id','left') + ->value("b.course_type"); + $item['course_type'] = $course_type; + }); } /** @@ -57,7 +79,7 @@ class PersonCourseScheduleService extends BaseAdminService { $field = 'id,person_id,person_type,schedule_id,course_date,time_slot,created_at,updated_at,deleted_at'; - $info = $this->model->field($field)->where([['id', "=", $id]])->findOrEmpty()->toArray(); + $info = $this->model->field($field)->where([['id', "=", $id]])->with(['customerResources'])->findOrEmpty()->toArray(); return $info; } @@ -68,82 +90,9 @@ class PersonCourseScheduleService extends BaseAdminService */ public function add(array $data) { - // 获取所有要新增的学生 - $students = (new Student())->whereIn('user_id', $data['resources_id'])->column('user_id', 'id'); - - // 新增的 participant 列表 - $newParticipants = $data['resources_id']; - - // 获取当前课程安排 - $schedule = (new CourseSchedule())->find($data['schedule_id']); - if (!$schedule) { - return $this->error('课程安排不存在'); - } - $capacity = (new Venue())->where('id', $schedule->venue_id)->value('capacity'); - // 原来的 participant 列表 - $oldParticipants = $schedule->participants ?? []; - - // 计算差集:哪些是被删除的(需要从预约记录中删除) - $deletedParticipants = array_diff($oldParticipants, $newParticipants); - - // 计算可用容量 - $addedCount = count($newParticipants) - count($oldParticipants); - $deletedCount = count($deletedParticipants); - - $available_capacity = $capacity + $deletedCount - $addedCount; - - if ($available_capacity < 0) { - return $this->error('当前课程安排已满'); - } + $res = $this->model->create($data); + return $res->id; - try { - $this->model->startTrans(); - - // 1. 更新课程安排信息 - (new CourseSchedule())->where('id', $data['schedule_id'])->update([ - 'participants' => $newParticipants, - 'student_ids' => array_keys($students), - 'available_capacity' => $available_capacity - ]); - - // 2. 删除旧的预约记录(针对被移除的人) - if (!empty($deletedParticipants)) { - $this->model->whereIn('resources_id', $deletedParticipants) - ->where('course_date', $schedule->course_date) - ->where('time_slot', $schedule->time_slot) - ->delete(); - } - - // 3. 删除原有的,再批量插入新的预约记录(避免重复) - foreach ($newParticipants as $participant) { - $student_id = array_flip($students)[$participant] ?? 0; - - // 先删除已存在的记录(防止重复) - $this->model->where([ - ['resources_id', '=', $participant], - ['course_date', '=', $schedule->course_date], - ['time_slot', '=', $schedule->time_slot] - ])->delete(); - - // 插入新的记录 - $this->model->create([ - 'resources_id' => $participant, - 'person_id' => $this->uid, - 'schedule_id' => $data['schedule_id'], - 'student_id' => $student_id, - 'person_type' => $student_id ? 'student' : 'customer_resource', - 'course_date' => $schedule->course_date, - 'time_slot' => $schedule->time_slot - ]); - } - - $this->model->commit(); - } catch (\Exception $e) { - $this->model->rollback(); - return $this->error('操作失败: ' . $e->getMessage()); - } - - return true; } /** @@ -171,27 +120,18 @@ class PersonCourseScheduleService extends BaseAdminService return $res; } - public function getTryCoursePerson($schedule_id) - { - $list = $this->model->where('person_type', 'customer_resource') - ->where('schedule_id', $schedule_id) - ->select(); - $resources = (new CustomerResources())->whereIn('id', $list->column('resources_id'))->select()->toArray(); - $data = []; - - foreach ($resources as $key => $value) { - // 构建符合需求的对象 - $data[] = [ - "name" => $value['name'], - "phone_number" => $value['phone_number'], - "id" => $value['id'], - "student_name" => null, - "age" => $value['age'] ?? null, - "student_id" => null, - "order_id" => null, - "checked" => true - ]; - } - return $data; + public function xk(int $id){ + $model = $this->model->where([['id', '=', $id]])->find(); + $res = $model->delete(); + return $res; + } + + + public function getCustomerResourcesAll(){ + $customerResourcesModel = new CustomerResources(); + return $customerResourcesModel->select()->toArray(); + } + + } diff --git a/niucloud/app/service/admin/student/StudentService.php b/niucloud/app/service/admin/student/StudentService.php index 3f88769a..e651bf17 100644 --- a/niucloud/app/service/admin/student/StudentService.php +++ b/niucloud/app/service/admin/student/StudentService.php @@ -45,7 +45,7 @@ class StudentService extends BaseAdminService $field = 'id,user_id,campus_id,class_id,name,gender,age,birthday,member_label,emergency_contact,contact_phone,note,status,created_at,updated_at,deleted_at'; $order = 'id desc'; - $search_model = $this->model->withSearch(["campus_id", "name", "emergency_contact", "contact_phone", "created_at", "member_label"], $where)->with(['customerResources', 'campus', 'classGrade'])->field($field)->order($order); + $search_model = $this->model->withSearch(["campus_id", "name", "emergency_contact", "contact_phone", "created_at", "member_label","class_id"], $where)->with(['customerResources', 'campus', 'classGrade'])->field($field)->order($order); return $this->pageQuery($search_model, function ($item, $key) { $item = $this->makeUp($item); }); diff --git a/niucloud/app/service/admin/sys/SystemService.php b/niucloud/app/service/admin/sys/SystemService.php index 96a42473..ddb410a9 100644 --- a/niucloud/app/service/admin/sys/SystemService.php +++ b/niucloud/app/service/admin/sys/SystemService.php @@ -14,7 +14,10 @@ namespace app\service\admin\sys; use addon\shop\app\model\ShopStat; use app\job\sys\CheckJob; 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\market_performance\MarketPerformance; use app\model\personnel\Personnel; use app\model\student\Student; use app\model\sys\SysConfig; @@ -285,4 +288,58 @@ class SystemService extends BaseAdminService return $data; } + + + public function scsjtj(array $row){ + $customerResources = new CustomerResources(); + $campus_person_role = new CampusPersonRole(); + $communication_records = new CommunicationRecords(); + $market_performance = new MarketPerformance(); + $per = new Personnel(); + $data['zysl'] = $customerResources->count(); + $data['ygt'] = 0; + $data['wgt'] = 0; + $list = $customerResources->select(); + foreach ($list as $k => $v) { + if($communication_records->where(['resource_id' => $v['id']])->find()){ + $data['ygt']++; + }else{ + $data['wgt']++; + } + } + + $data['scry'] = $campus_person_role->where(['dept_id' => 1])->count(); + $start = date('Y-m-01'); + $end = date('Y-m-t'); + $data['yhs'] = $market_performance->whereBetween('performance_date', [$start, $end])->Sum("performance_amount"); + + $data['barData'] = []; + $where = []; + $c_where = []; + if(!empty($row['dateRange'])){ + $where[] = ['performance_date','>=',$row['dateRange'][0]]; + $where[] = ['performance_date','<=',$row['dateRange'][1]]; + + $c_where[] = ['create_date','>=',$row['dateRange'][0]]; + $c_where[] = ['create_date','<=',$row['dateRange'][1]]; + + } + $sc_list = $campus_person_role->where(['dept_id' => 1])->select()->toArray(); + foreach ($sc_list as $k => $v) { + $data['barData'][] = [ + 'name' => $per->where(['id' => $v['person_id']])->value('name'), + 'value' => $market_performance->where(['personnel_id' => $v['person_id']])->where($where)->Sum("performance_amount") + ]; + } + $arr = [0=>'未知',1=>'线上',2=>'地推',3=>'转介绍',4=>'活动',5=>'内部员工']; + + $data['pieData'] = []; + foreach ($arr as $k => $v) { + $data['pieData'][] = [ + 'name' => $v, + 'value' => $customerResources->where(['source_channel' => $k])->where($c_where)->count() + ]; + } + return $data; + } } diff --git a/niucloud/app/validate/person_course_schedule/PersonCourseSchedule.php b/niucloud/app/validate/person_course_schedule/PersonCourseSchedule.php index bff8255c..8861218d 100644 --- a/niucloud/app/validate/person_course_schedule/PersonCourseSchedule.php +++ b/niucloud/app/validate/person_course_schedule/PersonCourseSchedule.php @@ -20,18 +20,24 @@ class PersonCourseSchedule extends BaseValidate { protected $rule = [ - 'resources_id' => 'require', - 'schedule_id' => 'require' + 'person_id' => 'require', + 'person_type' => 'require', + 'schedule_id' => 'require', + 'course_date' => 'require', + 'time_slot' => 'require', ]; protected $message = [ - 'resources_id.require' => ['common_validate.require', ['person_id']], - 'schedule_id.require' => ['common_validate.require', ['schedule_id']] + 'person_id.require' => ['common_validate.require', ['person_id']], + 'person_type.require' => ['common_validate.require', ['person_type']], + 'schedule_id.require' => ['common_validate.require', ['schedule_id']], + 'course_date.require' => ['common_validate.require', ['course_date']], + 'time_slot.require' => ['common_validate.require', ['time_slot']], ]; protected $scene = [ - "add" => ['resources_id', 'schedule_id'], - "edit" => ['resources_id', 'schedule_id'] + "add" => ['person_id', 'person_type', 'schedule_id', 'course_date', 'time_slot'], + "edit" => ['person_id', 'person_type', 'schedule_id', 'course_date', 'time_slot'] ]; }