于宏哲PHP 1 year ago
parent
commit
2bd32e315e
  1. 2
      admin/auto-imports.d.ts
  2. 2
      admin/components.d.ts
  3. 1
      admin/src/addon/shop/views/marketing/coupon/add.vue
  4. 4
      admin/src/addon/zhjw/api/schedules.ts
  5. 3
      admin/src/addon/zhjw/api/timetables.ts
  6. 2
      admin/src/addon/zhjw/views/schedules/schedules_edit.vue
  7. 2
      admin/src/addon/zhjw/views/timetables/timetables.vue
  8. 175
      admin/src/addon/zhjw/views/timetables/timetables_edit.vue
  9. 18
      niucloud/addon/zhjw/app/adminapi/controller/schedules/Schedules.php
  10. 2
      niucloud/addon/zhjw/app/adminapi/controller/timetables/Timetables.php
  11. 2
      niucloud/addon/zhjw/app/adminapi/route/route.php
  12. 12
      niucloud/addon/zhjw/app/service/admin/schedules/SchedulesService.php
  13. 4
      niucloud/addon/zhjw/app/service/admin/timetables/TimetablesService.php
  14. 6
      niucloud/addon/zhjw/app/validate/timetables/Timetables.php
  15. 7
      niucloud/app/api/controller/member/Member.php
  16. 2
      niucloud/app/api/route/member.php
  17. 66
      niucloud/app/service/api/member/MemberService.php

2
admin/auto-imports.d.ts

@ -1,5 +1,5 @@
// Generated by 'unplugin-auto-import' // Generated by 'unplugin-auto-import'
export {} export {}
declare global { declare global {
const ElNotification: typeof import('element-plus/es')['ElNotification']
} }

2
admin/components.d.ts

@ -26,6 +26,7 @@ declare module '@vue/runtime-core' {
ElContainer: typeof import('element-plus/es')['ElContainer'] ElContainer: typeof import('element-plus/es')['ElContainer']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDialog: typeof import('element-plus/es')['ElDialog'] ElDialog: typeof import('element-plus/es')['ElDialog']
ElDivider: typeof import('element-plus/es')['ElDivider']
ElDrawer: typeof import('element-plus/es')['ElDrawer'] ElDrawer: typeof import('element-plus/es')['ElDrawer']
ElDropdown: typeof import('element-plus/es')['ElDropdown'] ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
@ -60,6 +61,7 @@ declare module '@vue/runtime-core' {
ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs'] ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag'] ElTag: typeof import('element-plus/es')['ElTag']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElTooltip: typeof import('element-plus/es')['ElTooltip'] ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree'] ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']

1
admin/src/addon/shop/views/marketing/coupon/add.vue

@ -1,4 +1,5 @@
<template> <template>
<div class="main-container"> <div class="main-container">
<el-card class="card !border-none" shadow="never"> <el-card class="card !border-none" shadow="never">

4
admin/src/addon/zhjw/api/schedules.ts

@ -21,6 +21,10 @@ export function getSchedulesInfo(id: number) {
return request.get(`zhjw/schedules/${id}`); return request.get(`zhjw/schedules/${id}`);
} }
export function getInfo(params: Record<string, any>) {
return request.get(`zhjw/get_info`, {params});
}
/** /**
* *
* @param params * @param params

3
admin/src/addon/zhjw/api/timetables.ts

@ -33,6 +33,9 @@ export function getTimetablesInfo(id: number) {
return request.get(`zhjw/timetables/${id}`); return request.get(`zhjw/timetables/${id}`);
} }
/** /**
* *
* @param params * @param params

2
admin/src/addon/zhjw/views/schedules/schedules_edit.vue

@ -44,6 +44,8 @@
:placeholder="t('dateTimePlaceholder')"> :placeholder="t('dateTimePlaceholder')">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item :label="t('timeSlot')" prop="time_slot"> <el-form-item :label="t('timeSlot')" prop="time_slot">
<el-input v-model="formData.time_slot" clearable :placeholder="t('timeSlotPlaceholder')" class="input-width" /> <el-input v-model="formData.time_slot" clearable :placeholder="t('timeSlotPlaceholder')" class="input-width" />
</el-form-item> </el-form-item>

2
admin/src/addon/zhjw/views/timetables/timetables.vue

@ -64,8 +64,6 @@
<el-table-column prop="courses_id_name" :label="t('coursesId')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="courses_id_name" :label="t('coursesId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="schedule_date" :label="t('scheduleDate')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('cycle')" min-width="180" align="center" :show-overflow-tooltip="true"> <el-table-column :label="t('cycle')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }"> <template #default="{ row }">
<div v-for="(item, index) in cycleList"> <div v-for="(item, index) in cycleList">

175
admin/src/addon/zhjw/views/timetables/timetables_edit.vue

@ -28,8 +28,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('scheduleDate')" prop="schedule_date"> <el-form-item label="排班" >
<el-calendar v-model="formData.schedule_date"> <el-calendar @click="handleDateClick">
</el-calendar> </el-calendar>
</el-form-item> </el-form-item>
@ -50,6 +50,71 @@
<el-button @click="back()">{{ t('cancel') }}</el-button> <el-button @click="back()">{{ t('cancel') }}</el-button>
</div> </div>
</div> </div>
<el-dialog v-model="dialogVisible" title="排班">
<el-form ref="form_ref" :model="schedulesData" label-width="80px" :rules="form_rules">
<el-form-item label="选择教练" prop="staff_id">
<el-select class="input-width" v-model="schedulesData.staff_id" clearable placeholder="选择教练">
<el-option label="请选择" value=""></el-option>
<el-option v-for="(item, index) in staffIdList" :key="index" :label="item['name']"
:value="item['id']" />
</el-select>
</el-form-item>
<el-form-item :label="t('classId')" prop="class_id">
<el-select class="input-width" v-model="schedulesData.class_id" clearable placeholder="选择班级" disabled>
<el-option label="请选择" value=""></el-option>
<el-option v-for="(item, index) in classIdList" :key="index" :label="item['name']"
:value="item['id']" />
</el-select>
</el-form-item>
<el-form-item :label="t('coursesId')" prop="courses_id">
<el-select class="input-width" v-model="schedulesData.courses_id" clearable
:placeholder="t('coursesIdPlaceholder')" disabled>
<el-option label="请选择" value=""></el-option>
<el-option v-for="(item, index) in coursesIdList" :key="index" :label="item['name']"
:value="item['id']" />
</el-select>
</el-form-item>
<el-form-item label="排班时间" prop="date_time" class="input-width">
<el-input v-model="schedulesData.date_time" clearable placeholder="排班时间" class="input-width" disabled/>
</el-form-item>
<el-form-item label="时间段" prop="time_slot">
<el-time-picker
v-model="schedulesData.time_slot"
is-range
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
format="HH:mm"
value-format="HH:mm"
/>
<!-- <el-input v-model="schedulesData.time_slot" clearable placeholder="时间段" class="input-width" /> -->
</el-form-item>
<el-form-item label="备注">
<el-input v-model="schedulesData.task" type="textarea" rows="4" clearable placeholder="备注"
class="input-width" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitForm(form_ref)">提交</el-button>
</template>
</el-dialog>
</div> </div>
</template> </template>
@ -59,6 +124,7 @@
import { useDictionary } from '@/app/api/dict' import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import { getTimetablesInfo, addTimetables, editTimetables, getWithClassesList, getWithCoursesList } from '@/addon/zhjw/api/timetables'; import { getTimetablesInfo, addTimetables, editTimetables, getWithClassesList, getWithCoursesList } from '@/addon/zhjw/api/timetables';
import { getSchedulesInfo, addSchedules, editSchedules, getWithStaffList, getInfo } from '@/addon/zhjw/api/schedules';
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
const route = useRoute() const route = useRoute()
@ -66,6 +132,102 @@
const loading = ref(false) const loading = ref(false)
const pageName = route.meta.title const pageName = route.meta.title
const dialogVisible = ref(false)
const FormData = {
id:'',
staff_id: '',
class_id: '',
courses_id:'',
date_time: '',
time_slot: [],
task: ''
}
const schedulesData : Record<string, any> = reactive({ ...FormData })
const staffIdList = ref([] as any[])
const setStaffIdList = async () => {
staffIdList.value = await (await getWithStaffList({})).data
}
setStaffIdList()
const handleDateClick = async (event) => {
const clickedDate = event.target.textContent.trim()
if (!clickedDate || isNaN(clickedDate)) return
const currentDate = new Date()
const selectedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(clickedDate).padStart(2, '0')}`
const data = await (await getInfo({
date_time: selectedDate,
class_id: formData.class_id
})).data
Object.assign(schedulesData, initialFormData)
Object.keys(schedulesData).forEach((key : string) => {
if (data[key] != undefined) schedulesData[key] = data[key]
})
schedulesData.class_id = formData.class_id
schedulesData.courses_id = formData.courses_id
schedulesData.date_time = selectedDate
dialogVisible.value = true
}
const form_rules = computed(() => {
return {
staff_id: [
{ required: true, message: t('staffIdPlaceholder'), trigger: 'blur' },
]
,
class_id: [
{ required: true, message: t('classIdPlaceholder'), trigger: 'blur' },
]
,
date_time: [
{ required: true, message: t('dateTimePlaceholder'), trigger: 'blur' },
]
,
time_slot: [
{ required: true, message: t('timeSlotPlaceholder'), trigger: 'blur' },
]
,
task: [
{ required: true, message: t('taskPlaceholder'), trigger: 'blur' },
]
,
}
})
const submitForm = async (formEl: FormInstance | undefined) => {
if (loading.value || !formEl) return
await formEl.validate(async (valid) => {
if (valid) {
let data = schedulesData
const save = schedulesData['id'] ? editSchedules : addSchedules
save(data).then(res => {
dialogVisible.value = false
}).catch(err => {
dialogVisible.value = false
})
}
})
}
let formatDate = (date) => { let formatDate = (date) => {
if (typeof date === 'string') { if (typeof date === 'string') {
date = new Date(date); date = new Date(date);
@ -91,7 +253,6 @@
id: 0, id: 0,
class_id: '', class_id: '',
courses_id: '', courses_id: '',
schedule_date: '',
cycle: '', cycle: '',
} }
@ -107,6 +268,8 @@
if (id) setFormData(id); if (id) setFormData(id);
const formRef = ref<FormInstance>() const formRef = ref<FormInstance>()
const form_ref = ref<FormInstance>()
// //
const selectData = ref<any[]>([]) const selectData = ref<any[]>([])
@ -141,11 +304,6 @@
courses_id: [ courses_id: [
{ required: true, message: t('coursesIdPlaceholder'), trigger: 'blur' }, { required: true, message: t('coursesIdPlaceholder'), trigger: 'blur' },
]
,
schedule_date: [
{ required: true, message: t('scheduleDatePlaceholder'), trigger: 'blur' },
] ]
, ,
cycle: [ cycle: [
@ -163,7 +321,6 @@
loading.value = true loading.value = true
let data = formData let data = formData
data['schedule_date'] = formatDate(data.schedule_date);
const save = id ? editTimetables : addTimetables const save = id ? editTimetables : addTimetables
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false

18
niucloud/addon/zhjw/app/adminapi/controller/schedules/Schedules.php

@ -46,6 +46,16 @@ class Schedules extends BaseAdminController
return success((new SchedulesService())->getInfo($id)); return success((new SchedulesService())->getInfo($id));
} }
public function get_info(){
$data = $this->request->params([
["class_id",""],
["date_time",'']
]);
return success((new SchedulesService())->get_info($data));
}
/** /**
* 添加排班管理 * 添加排班管理
* @return \think\Response * @return \think\Response
@ -54,8 +64,9 @@ class Schedules extends BaseAdminController
$data = $this->request->params([ $data = $this->request->params([
["staff_id",0], ["staff_id",0],
["class_id",0], ["class_id",0],
["date_time","2025-03-06 15:10:47"], ["courses_id",0],
["time_slot",""], ["date_time",""],
["time_slot",[]],
["task",""], ["task",""],
]); ]);
@ -73,7 +84,8 @@ class Schedules extends BaseAdminController
$data = $this->request->params([ $data = $this->request->params([
["staff_id",0], ["staff_id",0],
["class_id",0], ["class_id",0],
["date_time","2025-03-06 15:10:47"], ["courses_id",0],
["date_time",""],
["time_slot",""], ["time_slot",""],
["task",""], ["task",""],

2
niucloud/addon/zhjw/app/adminapi/controller/timetables/Timetables.php

@ -52,7 +52,6 @@ class Timetables extends BaseAdminController
$data = $this->request->params([ $data = $this->request->params([
["class_id",0], ["class_id",0],
["courses_id",0], ["courses_id",0],
["schedule_date",""],
["cycle",""] ["cycle",""]
]); ]);
$this->validate($data, 'addon\zhjw\app\validate\timetables\Timetables.add'); $this->validate($data, 'addon\zhjw\app\validate\timetables\Timetables.add');
@ -69,7 +68,6 @@ class Timetables extends BaseAdminController
$data = $this->request->params([ $data = $this->request->params([
["class_id",0], ["class_id",0],
["courses_id",0], ["courses_id",0],
["schedule_date",""],
["cycle",""] ["cycle",""]
]); ]);
$this->validate($data, 'addon\zhjw\app\validate\timetables\Timetables.edit'); $this->validate($data, 'addon\zhjw\app\validate\timetables\Timetables.edit');

2
niucloud/addon/zhjw/app/adminapi/route/route.php

@ -187,6 +187,8 @@ Route::group('zhjw', function () {
Route::get('schedules', 'addon\zhjw\app\adminapi\controller\schedules\Schedules@lists'); Route::get('schedules', 'addon\zhjw\app\adminapi\controller\schedules\Schedules@lists');
//排班管理详情 //排班管理详情
Route::get('schedules/:id', 'addon\zhjw\app\adminapi\controller\schedules\Schedules@info'); Route::get('schedules/:id', 'addon\zhjw\app\adminapi\controller\schedules\Schedules@info');
Route::get('get_info', 'addon\zhjw\app\adminapi\controller\schedules\Schedules@get_info');
//添加排班管理 //添加排班管理
Route::post('schedules', 'addon\zhjw\app\adminapi\controller\schedules\Schedules@add'); Route::post('schedules', 'addon\zhjw\app\adminapi\controller\schedules\Schedules@add');
//编辑排班管理 //编辑排班管理

12
niucloud/addon/zhjw/app/service/admin/schedules/SchedulesService.php

@ -59,6 +59,15 @@ class SchedulesService extends BaseAdminService
return $info; return $info;
} }
public function get_info(array $data)
{
$field = 'id,staff_id,class_id,courses_id,date_time,time_slot,task';
$info = $this->model->field($field)->where($data)->findOrEmpty()->toArray();
$info['time_slot'] = explode(",",$info['time_slot']);
return $info;
}
/** /**
* 添加排班管理 * 添加排班管理
* @param array $data * @param array $data
@ -66,6 +75,7 @@ class SchedulesService extends BaseAdminService
*/ */
public function add(array $data) public function add(array $data)
{ {
$data['time_slot'] = implode(",",$data['time_slot']);
$res = $this->model->create($data); $res = $this->model->create($data);
return $res->id; return $res->id;
@ -79,7 +89,7 @@ class SchedulesService extends BaseAdminService
*/ */
public function edit(int $id, array $data) public function edit(int $id, array $data)
{ {
$data['time_slot'] = implode(",",$data['time_slot']);
$this->model->where([['id', '=', $id]])->update($data); $this->model->where([['id', '=', $id]])->update($data);
return true; return true;
} }

4
niucloud/addon/zhjw/app/service/admin/timetables/TimetablesService.php

@ -38,7 +38,7 @@ class TimetablesService extends BaseAdminService
*/ */
public function getPage(array $where = []) public function getPage(array $where = [])
{ {
$field = 'id,is_deleted,created_by,created_role,created_time,updated_by,updated_role,updated_time,class_id,courses_id,schedule_date,cycle'; $field = 'id,is_deleted,created_by,created_role,created_time,updated_by,updated_role,updated_time,class_id,courses_id,cycle';
$order = 'id desc'; $order = 'id desc';
$search_model = $this->model->withSearch(["class_id","courses_id","cycle"], $where)->with(['classes','courses'])->field($field)->order($order); $search_model = $this->model->withSearch(["class_id","courses_id","cycle"], $where)->with(['classes','courses'])->field($field)->order($order);
@ -53,7 +53,7 @@ class TimetablesService extends BaseAdminService
*/ */
public function getInfo(int $id) public function getInfo(int $id)
{ {
$field = 'id,is_deleted,created_by,created_role,created_time,updated_by,updated_role,updated_time,class_id,courses_id,schedule_date,cycle'; $field = 'id,is_deleted,created_by,created_role,created_time,updated_by,updated_role,updated_time,class_id,courses_id,cycle';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['classes','courses'])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([['id', "=", $id]])->with(['classes','courses'])->findOrEmpty()->toArray();
$info['cycle'] = strval($info['cycle']); $info['cycle'] = strval($info['cycle']);

6
niucloud/addon/zhjw/app/validate/timetables/Timetables.php

@ -22,20 +22,18 @@ class Timetables extends BaseValidate
protected $rule = [ protected $rule = [
'class_id' => 'require', 'class_id' => 'require',
'courses_id' => 'require', 'courses_id' => 'require',
'schedule_date' => 'require',
'cycle' => 'require', 'cycle' => 'require',
]; ];
protected $message = [ protected $message = [
'class_id.require' => ['common_validate.require', ['class_id']], 'class_id.require' => ['common_validate.require', ['class_id']],
'courses_id.require' => ['common_validate.require', ['courses_id']], 'courses_id.require' => ['common_validate.require', ['courses_id']],
'schedule_date.require' => ['common_validate.require', ['schedule_date']],
'cycle.require' => ['common_validate.require', ['cycle']], 'cycle.require' => ['common_validate.require', ['cycle']],
]; ];
protected $scene = [ protected $scene = [
"add" => ['class_id', 'courses_id', 'schedule_date', 'cycle'], "add" => ['class_id', 'courses_id', 'cycle'],
"edit" => ['class_id', 'courses_id', 'schedule_date', 'cycle'] "edit" => ['class_id', 'courses_id', 'cycle']
]; ];
} }

7
niucloud/app/api/controller/member/Member.php

@ -146,6 +146,13 @@ class Member extends BaseApiController
return success(( new MemberService() )->course_list($data)); return success(( new MemberService() )->course_list($data));
} }
public function course_info(){
$data = $this->request->params([
[ 'id', '' ]
]);
return success(( new MemberService() )->course_info($data));
}
public function venues_list(){ public function venues_list(){
$data = $this->request->params([ $data = $this->request->params([
[ 'schedule_date', '' ] [ 'schedule_date', '' ]

2
niucloud/app/api/route/member.php

@ -112,6 +112,8 @@ Route::group('member', function () {
Route::get('course_list', 'member.Member/course_list'); Route::get('course_list', 'member.Member/course_list');
Route::get('course_info', 'member.Member/course_info');
Route::get('venues_list', 'member.Member/venues_list'); Route::get('venues_list', 'member.Member/venues_list');
Route::post('students_sign_list', 'member.Member/students_sign_list'); Route::post('students_sign_list', 'member.Member/students_sign_list');

66
niucloud/app/service/api/member/MemberService.php

@ -14,6 +14,7 @@ namespace app\service\api\member;
use addon\zhjw\app\model\assignments\Assignments; use addon\zhjw\app\model\assignments\Assignments;
use addon\zhjw\app\model\classes\Classes; use addon\zhjw\app\model\classes\Classes;
use addon\zhjw\app\model\courses\Courses; use addon\zhjw\app\model\courses\Courses;
use addon\zhjw\app\model\schedules\Schedules;
use addon\zhjw\app\model\staff\Staff; use addon\zhjw\app\model\staff\Staff;
use addon\zhjw\app\model\students\Students; use addon\zhjw\app\model\students\Students;
use addon\zhjw\app\model\timetables\Timetables; use addon\zhjw\app\model\timetables\Timetables;
@ -289,33 +290,29 @@ class MemberService extends BaseApiService
$member_info = $this->getInfo(); $member_info = $this->getInfo();
$venues = new Venues(); $venues = new Venues();
$classes = new Classes(); $classes = new Classes();
$schedules = new Schedules();
$where = []; $where = [];
if($data['venue_id']){ if($data['venue_id']){
$venue_id = $data['venue_id']; $venue_id = $data['venue_id'];
$where['a.venue_id'] = $venue_id; $where['c.id'] = $venue_id;
}else{ }else{
$venue_id = $this->get_venues_ids($data)[0]; $venue_id = $this->get_venues_ids($data)[0];
$where['a.venue_id'] = $venue_id; $where['c.id'] = $venue_id;
} }
$where['a.date_time'] = $data['schedule_date'];
$search_model = $classes $search_model = $schedules
->alias("a") ->alias("a")
->join(['school_venues' => 'b'],'a.venue_id = b.id','left') ->join(['school_classes' => 'b'],'a.class_id = b.id','left')
->join(['school_timetables' => 'c'],'a.id = c.class_id','left') ->join(['school_venues' => 'c'],'b.venue_id = c.id','left')
->join(['school_courses' => 'd'],'c.courses_id = d.id','left') ->join(['school_courses' => 'd'],'a.courses_id = d.id','left')
->where('a.start_date', '<=', $data['schedule_date'])
->where('a.end_date', '>=', $data['schedule_date'])
->where($where) ->where($where)
->where('a.status','<',3) ->whereRaw("FIND_IN_SET(?, b.max_students)", [$member_info['students_id']])
->whereRaw("FIND_IN_SET(?, a.max_students)", [$member_info['students_id']]) ->field("a.id,b.name as classes_name,a.date_time,a.time_slot,c.name as address,d.name as courses_name,d.id as courses_id,LENGTH(b.max_students) - LENGTH(REPLACE(b.max_students, ',', '')) + 1 as students_count,b.max_students");
->field("a.id,a.status,a.venue_id,a.start_date,a.end_date,a.max_students,a.name,b.name as address,d.name as courses_name,
LENGTH(a.max_students) - LENGTH(REPLACE(a.max_students, ',', '')) + 1 as students_count,d.id as courses_id
")
->group("a.venue_id");
$list = $this->pageQuery($search_model, function ($item) use($member_info){ $list = $this->pageQuery($search_model, function ($item) use($member_info){
$where['a.students_id'] = $member_info['students_id']; $where['a.students_id'] = $member_info['students_id'];
$where['a.courses_id'] = $item['courses_id'];
$item['sign_list'] = Db::name("zhjw_students_sign") $item['sign_list'] = Db::name("zhjw_students_sign")
->alias("a") ->alias("a")
->join(['school_zhjw_students' => 'b'],'a.students_id = b.id','left') ->join(['school_zhjw_students' => 'b'],'a.students_id = b.id','left')
@ -329,8 +326,8 @@ class MemberService extends BaseApiService
$has_sign = Db::name("zhjw_students_sign")->where(['courses_id' => $item['courses_id']])->count(); $has_sign = Db::name("zhjw_students_sign")->where(['courses_id' => $item['courses_id']])->count();
$item['has_sign_count'] = $has_sign; $item['has_sign_count'] = $has_sign;
$time = explode(",",$item['time_slot']);
$item['date'] = formatTimeRange($item['start_date'], $item['end_date']); $item['date'] = $item['date_time'].' '.$time[0].' - '.$time[1];
}); });
@ -338,6 +335,41 @@ class MemberService extends BaseApiService
return ['list' => $list,'venues_info' => $info]; return ['list' => $list,'venues_info' => $info];
} }
public function course_info($data){
$member_info = $this->getInfo();
$schedules = new Schedules();
$where = [];
$where['a.id'] = $data['id'];
$info = $schedules
->alias("a")
->join(['school_classes' => 'b'],'a.class_id = b.id','left')
->join(['school_venues' => 'c'],'b.venue_id = c.id','left')
->join(['school_courses' => 'd'],'a.courses_id = d.id','left')
->join(['school_staff' => 'e'],'a.staff_id = e.id','left')
->where($where)
->field("
a.id,b.name as classes_name,a.date_time,a.time_slot,c.name as address,
d.name as courses_name,
d.id as courses_id,LENGTH(b.max_students) - LENGTH(REPLACE(b.max_students, ',', '')) + 1 as students_count,
b.max_students,e.name as staff_name,e.phone as staff_phone
")
->find()->toArray();
$time = explode(",",$info['time_slot']);
$startTime = strtotime($time[0]);
$endTime = strtotime($time[1]);
$diffInSeconds = $endTime - $startTime;
$diffInHours = $diffInSeconds / 3600;
$info['hour'] = $diffInHours;
return $info;
}
public function getDate() public function getDate()
{ {
$dates = []; $dates = [];

Loading…
Cancel
Save