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/course.course.json b/admin/src/app/lang/zh-cn/course.course.json index ddb6eb64..036d46bf 100644 --- a/admin/src/app/lang/zh-cn/course.course.json +++ b/admin/src/app/lang/zh-cn/course.course.json @@ -23,6 +23,7 @@ "updateCourse": "编辑课程", "courseDeleteTips": "确定要删除该数据吗?", "startDate": "请选择开始时间", - "endDate": "请选择结束时间" - + "endDate": "请选择结束时间", + "giftSessionCount": "赠送课时", + "giftSessionCountPlaceholder": "请输入赠送课时" } 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/campus_person_role/components/campus-person-role-edit.vue b/admin/src/app/views/campus_person_role/components/campus-person-role-edit.vue index 7bc11b8b..749219bc 100644 --- a/admin/src/app/views/campus_person_role/components/campus-person-role-edit.vue +++ b/admin/src/app/views/campus_person_role/components/campus-person-role-edit.vue @@ -149,6 +149,8 @@ if(pageName == '市场人员列表'){ }else if(pageName == '销售人员列表'){ initialFormData.dept_id = 2; // campusPersonRoleTable.searchParam.role_id = 2; +}else if(pageName == '教练管理'){ + initialFormData.dept_id = 3; } const formData: Record = reactive({ ...initialFormData }) 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/course/components/course-edit.vue b/admin/src/app/views/course/components/course-edit.vue index 9221ca72..6bdc07c0 100644 --- a/admin/src/app/views/course/components/course-edit.vue +++ b/admin/src/app/views/course/components/course-edit.vue @@ -55,6 +55,15 @@ /> + + + + = reactive({ ...initialFormData }) @@ -166,6 +176,13 @@ const formRules = computed(() => { trigger: 'blur', }, ], + gift_session_count: [ + { + required: false, + message: t('giftSessionCountPlaceholder'), + trigger: 'blur', + }, + ], single_session_count: [ { required: true, diff --git a/admin/src/app/views/course_schedule/components/course-schedule-edit.vue b/admin/src/app/views/course_schedule/components/course-schedule-edit.vue index 4b106f05..95340eed 100644 --- a/admin/src/app/views/course_schedule/components/course-schedule-edit.vue +++ b/admin/src/app/views/course_schedule/components/course-schedule-edit.vue @@ -504,13 +504,12 @@ const numberVerify = (rule: any, value: any, callback: any) => { // 禁用非当天日期 const disabledDate = (time: Date) => { + // 只允许选择明天及以后 const today = new Date() today.setHours(0, 0, 0, 0) - const currentDate = new Date(time) - currentDate.setHours(0, 0, 0, 0) - - // 只允许选择今天及以后 - return today.getTime() > currentDate.getTime() + const tomorrow = new Date(today) + tomorrow.setDate(tomorrow.getDate() + 1) + return time.getTime() < tomorrow.getTime() } defineExpose({ 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/timetables/timetables.vue b/admin/src/app/views/timetables/timetables.vue index 748d860a..d0b14cb7 100644 --- a/admin/src/app/views/timetables/timetables.vue +++ b/admin/src/app/views/timetables/timetables.vue @@ -468,25 +468,44 @@ const searchPerson = async () => { } try { + // 保存当前已选学员ID列表和完整信息列表 + const currentSelectedIds = [...selectedStudentIds.value] + const currentSelectedStudents = [...selectedStudents.value] + + // 保存之前的试课人员列表 + const previousTrialStudents = [...trialStudents.value] + const response = await getResourceByNameOrPhone({ name: searchKeyword.value.trim() }) if (response.data) { - // 保存当前已选学员ID列表 - const currentSelectedIds = [...selectedStudentIds.value] + // 合并新搜索结果和之前的试课人员列表,避免覆盖 + const newTrialStudents = response.data || [] - trialStudents.value = response.data || [] - students.value = trialStudents.value + // 使用Map去重,保留最新的数据 + const studentMap = new Map() - // 只有当学员的checked属性明确为true时才添加到已选列表中 - // 不再默认选中第一个学员 - const checkedStudents = students.value.filter(student => student.checked === true) + // 先添加之前的数据 + previousTrialStudents.forEach(student => { + studentMap.set(student.id, student) + }) - // 重置选中列表,使用之前保存的选择 + // 再添加新数据,会自动覆盖重复的id + newTrialStudents.forEach(student => { + studentMap.set(student.id, student) + }) + + // 转换回数组 + trialStudents.value = Array.from(studentMap.values()) + students.value = trialStudents.value + + // 恢复已选中的项 selectedStudentIds.value = currentSelectedIds + selectedStudents.value = currentSelectedStudents // 添加有checked标记但未选中的项 + const checkedStudents = students.value.filter(student => student.checked === true) if (checkedStudents.length > 0) { checkedStudents.forEach(student => { if (!selectedStudentIds.value.includes(student.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/course/Course.php b/niucloud/app/adminapi/controller/course/Course.php index f3afae36..338da54c 100644 --- a/niucloud/app/adminapi/controller/course/Course.php +++ b/niucloud/app/adminapi/controller/course/Course.php @@ -68,6 +68,7 @@ class Course extends BaseAdminController ["internal_reminder", 0], ["customer_reminder", 0], ["remarks", ""], + ["gift_session_count ", ""], ]); $this->validate($data, 'app\validate\course\Course.add'); @@ -93,6 +94,7 @@ class Course extends BaseAdminController ["customer_reminder", 0], ["remarks", ""], ["contract_id",""], + ["gift_session_count ",""], ]); $this->validate($data, 'app\validate\course\Course.edit'); (new CourseService())->edit($id, $data); 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/api/controller/apiController/CustomerResources.php b/niucloud/app/api/controller/apiController/CustomerResources.php index 7cfb3f3c..16fc4e53 100644 --- a/niucloud/app/api/controller/apiController/CustomerResources.php +++ b/niucloud/app/api/controller/apiController/CustomerResources.php @@ -131,6 +131,9 @@ class CustomerResources extends BaseApiService "distance" => $request->param('distance', ''),//距离 "communication" => $request->param('communication', ''),//沟通备注 "staff_id" => $request->param('staff_id', ''),//人员ID + + "first_visit_status" => $request->param('first_visit_status', null),//一访情况 + "second_visit_status" => $request->param('second_visit_status', null),//二访情况 ]; foreach($customer_resources_data as $k=>$v){ @@ -139,6 +142,10 @@ class CustomerResources extends BaseApiService } } foreach($six_speed_data as $k=>$v){ + // 排除 first_visit_status 和 second_visit_status 的必填校验 + if (in_array($k, ['first_visit_status', 'second_visit_status'])) { + continue; + } if(!isset($v) || $v === ''){ return fail("缺少必填项{$k}"); } diff --git a/niucloud/app/api/controller/login/Login.php b/niucloud/app/api/controller/login/Login.php index 6bce779e..2ad930a0 100644 --- a/niucloud/app/api/controller/login/Login.php +++ b/niucloud/app/api/controller/login/Login.php @@ -12,6 +12,7 @@ namespace app\api\controller\login; use app\dict\member\MemberLoginTypeDict; +use app\model\order_table\OrderTable; use app\model\sys\SysConfig; use app\service\admin\sys\SystemService; use app\service\api\captcha\CaptchaService; @@ -138,43 +139,8 @@ class Login extends BaseController } public function test(){ - $pay_config = Db::name("campus_pay")->where(['campus_id' => 1])->find(); - - $sysConfig = new SysConfig(); - - $vx_config = $sysConfig->where(['config_key' => 'WECHAT'])->value("value"); - - $config = [ - // 必填-商户号 - 'mch_id' => $pay_config['mchid'], - // 必填-商户私钥 字符串或路径 - 'mch_secret_cert' => $pay_config['apiclient_cert'], - // 必填-商户公钥证书路径 - 'mch_public_cert_path' => $pay_config['apiclient_key'], - // 必填 - 'notify_url' => 'https://zh.hnhbty.cn/api/pay/qrcodenotify', - // 选填-公众号 的 app_id - 'mp_app_id' => $vx_config['app_id'], - // 选填-小程序 的 app_id - 'mini_app_id' => '', - 'mch_secret_key' => $pay_config['pay_sign_key'], - ]; - $params = [ - 'out_trade_no' => '123123', - 'body' => '测试', - 'money' => 100, - ]; - $pay = new PayLoader('Wechatpay', $config); - - $url = $pay->scan($params); - - $path = qrcode( - $url['code_url'], - '', - [], - 'upload/qrcode/pay/' - ); - - echo "";die; + $order = new OrderTable(); + $order_info = $order->where(['id' => 8])->find(); + event('Student', ['event_type' => 'add','order_info' => $order_info]); } } diff --git a/niucloud/app/api/controller/upload/Upload.php b/niucloud/app/api/controller/upload/Upload.php index c5e422ff..1463faaf 100644 --- a/niucloud/app/api/controller/upload/Upload.php +++ b/niucloud/app/api/controller/upload/Upload.php @@ -15,6 +15,7 @@ use app\service\api\upload\Base64Service; use app\service\api\upload\FetchService; use app\service\api\upload\UploadService; use core\base\BaseApiController; +use think\Request; use think\Response; class Upload extends BaseApiController @@ -24,12 +25,15 @@ class Upload extends BaseApiController * 图片上传 * @return Response */ - public function image(){ + public function image(Request $request){ + + $extraData = $request->all(); + $data = $this->request->params([ ['file', 'file'], ]); $upload_service = new UploadService(); - return success($upload_service->image($data['file'])); + return success($upload_service->image($data['file'],$extraData)); } /** diff --git a/niucloud/app/api/route/route.php b/niucloud/app/api/route/route.php index 130537e4..35b6b234 100644 --- a/niucloud/app/api/route/route.php +++ b/niucloud/app/api/route/route.php @@ -201,7 +201,7 @@ Route::group(function () { //需要token验证的 Route::group(function () { - //上传图片 + //员工端-上传图片 Route::post('uploadImage', 'upload.Upload/image'); //员工端详情 Route::get('personnel/info', 'apiController.Personnel/info'); diff --git a/niucloud/app/event.php b/niucloud/app/event.php index 40759800..d8b36fcb 100644 --- a/niucloud/app/event.php +++ b/niucloud/app/event.php @@ -113,6 +113,9 @@ $system_event = [ //计算业绩 'CalculatePerformance' => [ 'app\listener\personnel\CalculatePerformance' ], + + //学员 + 'Student' => [ 'app\listener\personnel\Student' ], ], 'subscribe' => [ ], diff --git a/niucloud/app/listener/personnel/Student.php b/niucloud/app/listener/personnel/Student.php new file mode 100644 index 00000000..824a124f --- /dev/null +++ b/niucloud/app/listener/personnel/Student.php @@ -0,0 +1,124 @@ +studentAdd($params['data']); + } + + if ($params['event_type'] === 'xiaoke') { + $this->studentXiaoke($params['data']); + } + } + + public function studentXiaoke($data){ + $courseSchedule = new CourseSchedule(); + $studentCourses = new StudentCourses(); + $student_course_usage = new StudentCourseUsage(); + $schedule_info = $courseSchedule->where(['id' => $data['schedule_id']])->find(); + $studentCourses_info = $studentCourses->where(['student_id' => $data['student_id'],'course_id' => $schedule_info['course_id']])->find(); + + $student_course_usage->insert([ + 'student_course_id' => $studentCourses_info['id'], + 'used_hours' => $studentCourses_info['single_session_count'], + 'usage_date' => date("Y-m-d") + ]); + + } + + public function studentAdd($order_info){ + $student = new \app\model\student\Student(); + $order = new OrderTable(); + $cust = new CustomerResources(); + $class_resources_rel = new ClassResourcesRel(); + $course = new Course(); + $studentCourses = new StudentCourses(); + $order_count = $order->where(['resource_id' => $order_info['resource_id']])->count(); + $cust_info = $cust->where(['id' => $order_info['resource_id']])->find(); + //创建学员关系逻辑 + if($order_count <= 1){ + $sex_arr = ['male' => 1, 'female' => 2, 'other' => 0]; + //首次支付创建学员 + $student_id = $student->insertGetId([ + 'name' => $cust_info['name'], + 'gender' => $sex_arr[$cust_info['gender']], + 'age' => $cust_info['age'], + 'campus_id' => $cust_info['campus'], + 'class_id' => $order_info['class_id'], + 'status' => 1, + 'user_id' => $order_info['resource_id'] + ]); + }else{ + $student_id = $student->where(['user_id' => $order_info['resource_id'],'class_id' => $order_info['class_id']])->value('id'); + } + + //学员课程逻辑 + $course_info = $course->where(['id' => $order_info['course_id']])->find(); + $studentCourses->insert([ + 'student_id' => $student_id, + 'course_id' => $order_info['course_id'], + 'total_hours' => $course_info['session_count'], + 'gift_hours' => $course_info['gift_session_count'], + 'start_date' => date("Y-m-d"), + 'end_date' => date("Y-m-d", strtotime("+30 days")), + 'single_session_count' => $course_info['single_session_count'] + ]); + + + //班级资源关系逻辑 + $is_rel = $class_resources_rel->where( + ['resource_id' => $order_info['resource_id'],'class_id' => $order_info['class_id']] + )->find(); + if($is_rel){ + $class_resources_rel->where(['id' => $is_rel['id']])->update(['status' => 2]); + }else{ + $class_resources_rel->insert([ + 'class_id' => $order_info['class_id'], + 'resource_id' => $order_info['resource_id'], + 'campus_id' => $cust_info['campus'], + 'source_type' => 'student', + 'join_time' => time(), + 'status' => 1, + 'create_time' => date("Y-m-d H:i:s"), + 'update_time' => date("Y-m-d H:i:s") + ]); + } + + + + + + } + + +} diff --git a/niucloud/app/model/chat_friends/ChatFriends.php b/niucloud/app/model/chat_friends/ChatFriends.php index 33d14738..37c74acc 100644 --- a/niucloud/app/model/chat_friends/ChatFriends.php +++ b/niucloud/app/model/chat_friends/ChatFriends.php @@ -80,8 +80,8 @@ class ChatFriends extends BaseModel } - public function campus(){ - return $this->hasOne(CustomerResources::class, 'id', 'customer_resources_id')->joinType('left')->withField('name,id')->bind(['customer_resources_id'=>'name']); + public function customer(){ + return $this->hasOne(CustomerResources::class, 'id', 'customer_resources_id')->joinType('left')->withField('name,id')->bind(['customer_resources_id_name'=>'name']); } public function personnel(){ 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/auth/AuthService.php b/niucloud/app/service/admin/auth/AuthService.php index ec9c9c58..c2b014d8 100644 --- a/niucloud/app/service/admin/auth/AuthService.php +++ b/niucloud/app/service/admin/auth/AuthService.php @@ -11,6 +11,8 @@ namespace app\service\admin\auth; +use app\model\campus_person_role\CampusPersonRole; +use app\model\personnel\Personnel; use app\Request; use app\service\admin\sys\MenuService; use app\service\admin\sys\RoleService; @@ -91,7 +93,12 @@ class AuthService extends BaseAdminService if ($is_admin) {//查询全部启用的权限 return ( new MenuService() )->getAllMenuList($status, $is_tree, $is_button); } 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'); +// $role_service = new RoleService(); $menu_keys = $role_service->getMenuKeysByRoleIds($user_role_ids ?? []); return $menu_service->getMenuListByMenuKeys($menu_keys, $is_tree, is_button:$is_button); 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/campus_person_role/CampusPersonRoleService.php b/niucloud/app/service/admin/campus_person_role/CampusPersonRoleService.php index c16555c9..f6fa7706 100644 --- a/niucloud/app/service/admin/campus_person_role/CampusPersonRoleService.php +++ b/niucloud/app/service/admin/campus_person_role/CampusPersonRoleService.php @@ -93,6 +93,8 @@ class CampusPersonRoleService extends BaseAdminService public function add(array $data) { $res = $this->model->create($data); + + return $res->id; } 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/course_schedule/CourseScheduleService.php b/niucloud/app/service/admin/course_schedule/CourseScheduleService.php index 8544101f..701f9331 100644 --- a/niucloud/app/service/admin/course_schedule/CourseScheduleService.php +++ b/niucloud/app/service/admin/course_schedule/CourseScheduleService.php @@ -109,7 +109,7 @@ class CourseScheduleService extends BaseAdminService 'time_slot' => $data['time_slot'], 'course_id' => $data['course_id'], 'coach_id' => $data['coach_id'], - 'auto_schedule' => $data['is_system_add'] + 'auto_schedule' => $data['auto_schedule'] ]; $status = $this->model->where([ ['course_date', '=', $data['course_date']], 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..0bca593b 100644 --- a/niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php +++ b/niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php @@ -11,6 +11,7 @@ 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; @@ -38,14 +39,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 +81,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; } @@ -194,4 +218,14 @@ class PersonCourseScheduleService extends BaseAdminService } return $data; } + public function xk(int $id){ + $data = $this->model->where([['id', '=', $id]])->find(); + event('Student', ['event_type' => 'xiaoke','data' => $data]); + return true; + } + + 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/service/api/apiService/ChatService.php b/niucloud/app/service/api/apiService/ChatService.php index fb568558..c8ffa763 100644 --- a/niucloud/app/service/api/apiService/ChatService.php +++ b/niucloud/app/service/api/apiService/ChatService.php @@ -48,7 +48,12 @@ class ChatService extends BaseApiService $model = $model->where('customer_resources_id', $where['customer_resources_id']); } - $data = $model->paginate([ + $data = $model + ->with([ + 'personnel', + 'customer', + ]) + ->paginate([ 'list_rows' => $limit, 'page' => $page, ])->toArray(); diff --git a/niucloud/app/service/api/apiService/CustomerResourcesService.php b/niucloud/app/service/api/apiService/CustomerResourcesService.php index 90e32d42..d8e99818 100644 --- a/niucloud/app/service/api/apiService/CustomerResourcesService.php +++ b/niucloud/app/service/api/apiService/CustomerResourcesService.php @@ -15,6 +15,7 @@ use app\model\campus_person_role\CampusPersonRole; use app\model\customer_resource_changes\CustomerResourceChanges; use app\model\customer_resources\CustomerResources; use app\model\dict\Dict; +use app\model\member\Member; use app\model\personnel\Personnel; use app\model\resource_sharing\ResourceSharing; use app\model\six_speed\SixSpeed; @@ -122,10 +123,47 @@ class CustomerResourcesService extends BaseApiService //开启事物 Db::startTrans(); try { - $customer_resources = CustomerResources::where('id', $where['id'])->find(); + $six_speed = SixSpeed::where('resource_id', $where['id'])->find(); if ($customer_resources) { $customer_resources = $customer_resources->toArray(); + + if(!$customer_resources['member_id'] && $six_speed){ + //新数据存在一访问 或者旧数据存在一访的情况 && 这用户没注册过member账号的情况下才给他创建member账号 + if(!empty($six_speed_data['first_visit_status']) || $six_speed['first_visit_status']){ + $sex = 0; + switch ($customer_resources_data['gender']) { + case 'male'://男 + $sex = 1; + break; + case 'female'://女 + $sex = 2; + break; + default://其他 + $sex = 0; + break; + } + $password = create_password($customer_resources_data['phone_number']);//创建密码 + //给用户创建member账号 + $member_id = Member::insertGetId([ + 'username'=>$customer_resources_data['phone_number'],//会员用户名 + 'mobile'=>$customer_resources_data['phone_number'],//手机号 + 'password'=>$password,//会员密码 + 'nickname'=>$customer_resources_data['name'],//会员昵称 + 'sex'=>$sex,//性别 0保密 1男 2女 + 'member_time'=>time(),//成为会员时间 + ]); + if($member_id){ + $customer_resources_data['member_id'] = $member_id; + }else{ + Db::rollback(); + $res['msg'] = '创建用户账号失败'; + return $res; + } + } + + } + } $update_1 = CustomerResources::where('id', $where['id'])->update($customer_resources_data);//客户资源表 if (!$update_1) { @@ -157,7 +195,6 @@ class CustomerResourcesService extends BaseApiService $six_speed_data['resource_id'] = $where['id']; //查六要素是否存在 - $six_speed = SixSpeed::where('resource_id', $where['id'])->find(); if ($six_speed) { $six_speed = $six_speed->toArray(); //更新六要素 diff --git a/niucloud/app/service/api/apiService/ResourceSharingService.php b/niucloud/app/service/api/apiService/ResourceSharingService.php index 3f104fd0..7024ab7f 100644 --- a/niucloud/app/service/api/apiService/ResourceSharingService.php +++ b/niucloud/app/service/api/apiService/ResourceSharingService.php @@ -115,15 +115,19 @@ class ResourceSharingService extends BaseApiService ]); } ])->field($field)->find(); + if($data){ + $data = $data->toArray(); + } if (!empty($data['customerResource'])) { $data['customerResource']['cj_count'] = OrderTable::where('resource_id', $data['customerResource']['id']) ->where('order_status', 'paid') ->count();//成交次数 } +// dd(123123,$data); if ($data) { $res['code'] = 1; $res['msg'] = '操作成功'; - $res['data'] = $data->toArray(); + $res['data'] = $data; } else { $res['code'] = 0; diff --git a/niucloud/app/service/api/pay/PayService.php b/niucloud/app/service/api/pay/PayService.php index 66f54dba..52e53909 100644 --- a/niucloud/app/service/api/pay/PayService.php +++ b/niucloud/app/service/api/pay/PayService.php @@ -166,9 +166,7 @@ class PayService extends BaseApiService public function qrcodeNotify($data,$order_id) { - $student = new Student(); $order = new OrderTable(); - $cust = new CustomerResources(); $order_info = $order->where(['id' => $order_id])->find(); if($order_info['order_status'] == 'pending' and !empty($order_info['ipv3'])){ $resource = $data['resource']; @@ -182,39 +180,8 @@ class PayService extends BaseApiService $order->where(['payment_id' => $info['out_trade_no']])->update(['order_status' => 'paid','payment_time' => date("Y-m-d H:i:s")]); - $order_count = $order->where(['resource_id' => $order_info['resource_id']])->count(); - $cust_info = $cust->where(['id' => $order_info['resource_id']])->find(); - if($order_count <= 1){ - $sex_arr = ['male' => 1, 'female' => 2, 'other' => 0]; - //首次支付创建学员 - $student->insert([ - 'name' => $cust_info['name'], - 'gender' => $sex_arr[$cust_info['gender']], - 'age' => $cust_info['age'], - 'campus_id' => $cust_info['campus'], - 'class_id' => $order_info['class_id'], - 'status' => 1, - 'user_id' => $order_info['resource_id'] - ]); - } - $is_rel = Db::name("class_resources_rel")->where( - ['resource_id' => $order_info['resource_id'],'class_id' => $order_info['class_id']] - )->find(); - if($is_rel){ - Db::name("class_resources_rel")->where(['id' => $is_rel['id']])->update(['status' => 2]); - }else{ - Db::name("class_resources_rel")->insert([ - 'class_id' => $order_info['class_id'], - 'resource_id' => $order_info['resource_id'], - 'campus_id' => $cust_info['campus'], - 'source_type' => 'student', - 'join_time' => time(), - 'status' => 1, - 'create_time' => date("Y-m-d H:i:s"), - 'update_time' => date("Y-m-d H:i:s") - ]); - } + event('Student', ['event_type' => 'add','data' => $order_info]); } } diff --git a/niucloud/app/service/api/upload/UploadService.php b/niucloud/app/service/api/upload/UploadService.php index 30856447..b666bf47 100644 --- a/niucloud/app/service/api/upload/UploadService.php +++ b/niucloud/app/service/api/upload/UploadService.php @@ -34,9 +34,9 @@ class UploadService extends BaseApiService * @return array * @throws Exception */ - public function image($file) + public function image($file,array $extraData = []) { - $dir = $this->root_path . '/' . 'image' . '/' . date('Ym') . '/' . date('d'); + $dir = $this->root_path . '/' . 'image' . '/' . date('Ym') . '/' . date('d');//打印结果 例如=file/image/202505/29 $core_upload_service = new CoreUploadService(); return $core_upload_service->image($file, $dir, $this->cate_id); } 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'] ]; } diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity new file mode 100644 index 00000000..56c28ed9 --- /dev/null +++ b/node_modules/.yarn-integrity @@ -0,0 +1,10 @@ +{ + "systemParams": "win32-x64-108", + "modulesFolders": [], + "flags": [], + "linkedModules": [], + "topLevelPatterns": [], + "lockfileEntries": {}, + "files": [], + "artifacts": {} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..fb57ccd1 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + +