From cd0f73e3061f32f706996b9fec0084f0c1f9c2ba Mon Sep 17 00:00:00 2001 From: wangzeyan <258785420@qq.com> Date: Thu, 29 May 2025 13:27:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/app/lang/zh-cn/course.course.json | 5 +-- .../views/course/components/course-edit.vue | 17 +++++++++ .../components/course-schedule-edit.vue | 9 +++-- admin/src/app/views/timetables/timetables.vue | 35 ++++++++++++++----- .../app/adminapi/controller/course/Course.php | 2 ++ .../course_schedule/CourseScheduleService.php | 2 +- .../PersonCourseScheduleService.php | 4 +-- node_modules/.yarn-integrity | 10 ++++++ yarn.lock | 4 +++ 9 files changed, 70 insertions(+), 18 deletions(-) create mode 100644 node_modules/.yarn-integrity create mode 100644 yarn.lock 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/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/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/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/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/person_course_schedule/PersonCourseScheduleService.php b/niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php index d61673ab..07207431 100644 --- a/niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php +++ b/niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php @@ -40,7 +40,7 @@ class PersonCourseScheduleService extends BaseAdminService */ public function getPage(array $where = []) { - $field = 'id,person_id,person_type,schedule_id,course_date,time_slot,created_at,updated_at,deleted_at'; + $field = 'id,person_id,person_type,schedule_id,course_date,time_slot,created_at,updated_at'; $order = 'id desc'; $search_model = $this->model->withSearch(["id", "person_id", "person_type", "schedule_id", "course_date", "time_slot"], $where)->field($field)->order($order); @@ -55,7 +55,7 @@ class PersonCourseScheduleService extends BaseAdminService */ public function getInfo(int $id) { - $field = 'id,person_id,person_type,schedule_id,course_date,time_slot,created_at,updated_at,deleted_at'; + $field = 'id,person_id,person_type,schedule_id,course_date,time_slot,created_at,updated_at'; $info = $this->model->field($field)->where([['id', "=", $id]])->findOrEmpty()->toArray(); return $info; 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 + +