于宏哲PHP 1 year ago
parent
commit
adab2ec65a
  1. 10
      admin/src/addon/zhjw/api/timetables.ts
  2. 3
      admin/src/addon/zhjw/lang/zh-cn/timetables.timetables.json
  3. 8
      admin/src/addon/zhjw/lang/zh-cn/timetables.timetables_edit.json
  4. 55
      admin/src/addon/zhjw/views/timetables/components/timetables-edit.vue
  5. 24
      admin/src/addon/zhjw/views/timetables/timetables.vue
  6. 68
      admin/src/addon/zhjw/views/timetables/timetables_edit.vue
  7. 10
      niucloud/addon/zhjw/admin/api/timetables.ts
  8. 3
      niucloud/addon/zhjw/admin/lang/zh-cn/timetables.timetables.json
  9. 8
      niucloud/addon/zhjw/admin/lang/zh-cn/timetables.timetables_edit.json
  10. 55
      niucloud/addon/zhjw/admin/views/timetables/components/timetables-edit.vue
  11. 24
      niucloud/addon/zhjw/admin/views/timetables/timetables.vue
  12. 49
      niucloud/addon/zhjw/admin/views/timetables/timetables_edit.vue
  13. 11
      niucloud/addon/zhjw/app/adminapi/controller/timetables/Timetables.php
  14. 52
      niucloud/addon/zhjw/app/adminapi/route/route.php
  15. 18
      niucloud/addon/zhjw/app/model/timetables/Timetables.php
  16. 14
      niucloud/addon/zhjw/app/service/admin/timetables/TimetablesService.php
  17. 10
      niucloud/addon/zhjw/app/validate/timetables/Timetables.php

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

@ -4,6 +4,14 @@ import request from '@/utils/request'
// USER_CODE_BEGIN -- timetables
/**
*
@ -53,6 +61,8 @@ export function deleteTimetables(id: number) {
export function getWithClassesList(params: Record<string,any>){
return request.get('zhjw/classes_all', {params})
}export function getWithCoursesList(params: Record<string,any>){
return request.get('zhjw/courses_all', {params})
}
// USER_CODE_END -- timetables

3
admin/src/addon/zhjw/lang/zh-cn/timetables.timetables.json

@ -1,6 +1,9 @@
{
"classId":"所属班级",
"classIdPlaceholder":"全部",
"coursesId":"所属课程",
"coursesIdPlaceholder":"全部",
"scheduleDate":"日期",
"cycle":"周期",
"cyclePlaceholder":"请输入周期",
"addTimetables":"添加课表管理",

8
admin/src/addon/zhjw/lang/zh-cn/timetables.timetables_edit.json

@ -1,9 +1,11 @@
{
"classId":"所属班级",
"scheduleJson":"排课详情",
"coursesId":"所属课程",
"scheduleDate":"日期",
"cycle":"周期",
"classIdPlaceholder":"请输入所属班级",
"scheduleJsonPlaceholder":"请输入排课详情",
"classIdPlaceholder":"请选择所属班级",
"coursesIdPlaceholder":"请选择所属课程",
"scheduleDatePlaceholder":"请输入日期",
"cyclePlaceholder":"请输入周期",
"addTimetables":"添加课表管理",
"updateTimetables":"编辑课表管理",

55
admin/src/addon/zhjw/views/timetables/components/timetables-edit.vue

@ -1,22 +1,40 @@
<template>
<el-dialog v-model="showDialog" :title="formData.id ? t('updateTimetables') : t('addTimetables')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true">
<el-form :model="formData" label-width="120px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
<el-form-item :label="t('classId')" prop="class_id">
<el-radio-group v-model="formData.class_id" :placeholder="t('classIdPlaceholder')">
<el-radio
<el-select class="input-width" v-model="formData.class_id" clearable :placeholder="t('classIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in classIdList"
:key="index"
:label="item['id']">
{{ item['name'] }}
</el-radio>
</el-radio-group>
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('scheduleJson')" prop="schedule_json">
<el-input v-model="formData.schedule_json" clearable :placeholder="t('scheduleJsonPlaceholder')" class="input-width" />
<el-form-item :label="t('coursesId')" prop="courses_id">
<el-select class="input-width" v-model="formData.courses_id" clearable :placeholder="t('coursesIdPlaceholder')">
<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="t('scheduleDate')" prop="schedule_date" class="input-width">
<el-date-picker
class="flex-1 !flex"
v-model="formData.schedule_date"
clearable
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('scheduleDatePlaceholder')">
</el-date-picker>
</el-form-item>
<el-form-item :label="t('cycle')" prop="cycle">
<el-radio-group v-model="formData.cycle" :placeholder="t('cyclePlaceholder')">
<el-radio
@ -45,7 +63,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { useDictionary } from '@/app/api/dict'
import { t } from '@/lang'
import type { FormInstance } from 'element-plus'
import { addTimetables, editTimetables, getTimetablesInfo, getWithClassesList } from '@/addon/zhjw/api/timetables'
import { addTimetables, editTimetables, getTimetablesInfo, getWithClassesList, getWithCoursesList } from '@/addon/zhjw/api/timetables'
let showDialog = ref(false)
const loading = ref(false)
@ -56,7 +74,8 @@ const loading = ref(false)
const initialFormData = {
id: '',
class_id: '',
schedule_json: '',
courses_id: '',
schedule_date: '',
cycle: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
@ -71,8 +90,13 @@ const formRules = computed(() => {
]
,
schedule_json: [
{ required: true, message: t('scheduleJsonPlaceholder'), trigger: 'blur' },
courses_id: [
{ required: true, message: t('coursesIdPlaceholder'), trigger: 'blur' },
]
,
schedule_date: [
{ required: true, message: t('scheduleDatePlaceholder'), trigger: 'blur' },
]
,
@ -125,6 +149,11 @@ const confirm = async (formEl: FormInstance | undefined) => {
classIdList.value = await (await getWithClassesList({})).data
}
setClassIdList()
const coursesIdList = ref([] as any[])
const setCoursesIdList = async () => {
coursesIdList.value = await (await getWithCoursesList({})).data
}
setCoursesIdList()
const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData)
loading.value = true

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

@ -24,6 +24,18 @@
</el-form-item>
<el-form-item :label="t('coursesId')" prop="courses_id">
<el-select class="w-[280px]" v-model="timetablesTable.searchParam.courses_id" clearable :placeholder="t('coursesIdPlaceholder')">
<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="t('cycle')" prop="cycle">
<el-select class="w-[280px]" v-model="timetablesTable.searchParam.cycle" clearable :placeholder="t('cyclePlaceholder')">
<el-option label="全部" value=""></el-option>
@ -50,6 +62,10 @@
</template>
<el-table-column prop="class_id_name" :label="t('classId')" 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">
<template #default="{ row }">
<div v-for="(item, index) in cycleList">
@ -82,7 +98,7 @@
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { getTimetablesList, deleteTimetables, getWithClassesList } from '@/addon/zhjw/api/timetables'
import { getTimetablesList, deleteTimetables, getWithClassesList, getWithCoursesList } from '@/addon/zhjw/api/timetables'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import { useRouter } from 'vue-router'
@ -98,6 +114,7 @@ let timetablesTable = reactive({
data: [],
searchParam:{
"class_id":"",
"courses_id":"",
"cycle":""
}
})
@ -176,6 +193,11 @@ const deleteEvent = (id: number) => {
classIdList.value = await (await getWithClassesList({})).data
}
setClassIdList()
const coursesIdList = ref([])
const setCoursesIdList = async () => {
coursesIdList.value = await (await getWithCoursesList({})).data
}
setCoursesIdList()
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return

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

@ -10,20 +10,40 @@
</div>
<el-card class="box-card !border-none" shadow="never">
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form">
<el-form-item :label="t('classId')" prop="class_id">
<el-radio-group v-model="formData.class_id" :placeholder="t('classIdPlaceholder')">
<el-radio
<el-select class="input-width" v-model="formData.class_id" clearable :placeholder="t('classIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in classIdList"
:key="index"
:label="item['id']">
{{ item['name'] }}
</el-radio>
</el-radio-group>
: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="formData.courses_id" clearable :placeholder="t('coursesIdPlaceholder')">
<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="t('scheduleJson')" prop="schedule_json">
<el-input v-model="formData.schedule_json" clearable :placeholder="t('scheduleJsonPlaceholder')" class="input-width" />
<el-form-item :label="t('scheduleDate')" prop="schedule_date">
<el-calendar v-model="formData.schedule_date">
</el-calendar>
<!-- <el-input v-model="formData.schedule_date" clearable :placeholder="t('scheduleDatePlaceholder')" class="input-width" /> -->
</el-form-item>
<el-form-item :label="t('cycle')" prop="cycle">
@ -52,7 +72,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getTimetablesInfo,addTimetables,editTimetables, getWithClassesList } from '@/addon/zhjw/api/timetables';
import { getTimetablesInfo,addTimetables,editTimetables, getWithClassesList, getWithCoursesList } from '@/addon/zhjw/api/timetables';
import { useRoute } from 'vue-router'
const route = useRoute()
@ -68,7 +88,8 @@ const pageName = route.meta.title
const initialFormData = {
id: 0,
class_id: '',
schedule_json: '',
courses_id: '',
schedule_date: '',
cycle: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
@ -86,6 +107,14 @@ const formRef = ref<FormInstance>()
//
const selectData = ref<any[]>([])
let formatDate = (date) => {
// 'YYYYMMDD'
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
return `${year}-${month}-${day}`;
}
//
let cycleList = ref([])
const cycleDictList = async () => {
@ -100,6 +129,11 @@ const selectData = ref<any[]>([])
classIdList.value = await (await getWithClassesList({})).data
}
setClassIdList()
const coursesIdList = ref([] as any[])
const setCoursesIdList = async () => {
coursesIdList.value = await (await getWithCoursesList({})).data
}
setCoursesIdList()
//
const formRules = computed(() => {
return {
@ -108,8 +142,13 @@ const formRules = computed(() => {
]
,
schedule_json: [
{ required: true, message: t('scheduleJsonPlaceholder'), trigger: 'blur' },
courses_id: [
{ required: true, message: t('coursesIdPlaceholder'), trigger: 'blur' },
]
,
schedule_date: [
{ required: true, message: t('scheduleDatePlaceholder'), trigger: 'blur' },
]
,
@ -126,7 +165,8 @@ const onSave = async (formEl: FormInstance | undefined) => {
await formEl.validate(async (valid) => {
if (valid) {
loading.value = true
let data = formData
let data = formData
data['schedule_date'] = formatDate(data.schedule_date);
const save = id ? editTimetables : addTimetables
save(data).then(res => {

10
niucloud/addon/zhjw/admin/api/timetables.ts

@ -4,6 +4,14 @@ import request from '@/utils/request'
// USER_CODE_BEGIN -- timetables
/**
*
@ -53,6 +61,8 @@ export function deleteTimetables(id: number) {
export function getWithClassesList(params: Record<string,any>){
return request.get('zhjw/classes_all', {params})
}export function getWithCoursesList(params: Record<string,any>){
return request.get('zhjw/courses_all', {params})
}
// USER_CODE_END -- timetables

3
niucloud/addon/zhjw/admin/lang/zh-cn/timetables.timetables.json

@ -1,6 +1,9 @@
{
"classId":"所属班级",
"classIdPlaceholder":"全部",
"coursesId":"所属课程",
"coursesIdPlaceholder":"全部",
"scheduleDate":"日期",
"cycle":"周期",
"cyclePlaceholder":"请输入周期",
"addTimetables":"添加课表管理",

8
niucloud/addon/zhjw/admin/lang/zh-cn/timetables.timetables_edit.json

@ -1,9 +1,11 @@
{
"classId":"所属班级",
"scheduleJson":"排课详情",
"coursesId":"所属课程",
"scheduleDate":"日期",
"cycle":"周期",
"classIdPlaceholder":"请输入所属班级",
"scheduleJsonPlaceholder":"请输入排课详情",
"classIdPlaceholder":"请选择所属班级",
"coursesIdPlaceholder":"请选择所属课程",
"scheduleDatePlaceholder":"请输入日期",
"cyclePlaceholder":"请输入周期",
"addTimetables":"添加课表管理",
"updateTimetables":"编辑课表管理",

55
niucloud/addon/zhjw/admin/views/timetables/components/timetables-edit.vue

@ -1,22 +1,40 @@
<template>
<el-dialog v-model="showDialog" :title="formData.id ? t('updateTimetables') : t('addTimetables')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true">
<el-form :model="formData" label-width="120px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
<el-form-item :label="t('classId')" prop="class_id">
<el-radio-group v-model="formData.class_id" :placeholder="t('classIdPlaceholder')">
<el-radio
<el-select class="input-width" v-model="formData.class_id" clearable :placeholder="t('classIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in classIdList"
:key="index"
:label="item['id']">
{{ item['name'] }}
</el-radio>
</el-radio-group>
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('scheduleJson')" prop="schedule_json">
<el-input v-model="formData.schedule_json" clearable :placeholder="t('scheduleJsonPlaceholder')" class="input-width" />
<el-form-item :label="t('coursesId')" prop="courses_id">
<el-select class="input-width" v-model="formData.courses_id" clearable :placeholder="t('coursesIdPlaceholder')">
<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="t('scheduleDate')" prop="schedule_date" class="input-width">
<el-date-picker
class="flex-1 !flex"
v-model="formData.schedule_date"
clearable
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('scheduleDatePlaceholder')">
</el-date-picker>
</el-form-item>
<el-form-item :label="t('cycle')" prop="cycle">
<el-radio-group v-model="formData.cycle" :placeholder="t('cyclePlaceholder')">
<el-radio
@ -45,7 +63,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { useDictionary } from '@/app/api/dict'
import { t } from '@/lang'
import type { FormInstance } from 'element-plus'
import { addTimetables, editTimetables, getTimetablesInfo, getWithClassesList } from '@/addon/zhjw/api/timetables'
import { addTimetables, editTimetables, getTimetablesInfo, getWithClassesList, getWithCoursesList } from '@/addon/zhjw/api/timetables'
let showDialog = ref(false)
const loading = ref(false)
@ -56,7 +74,8 @@ const loading = ref(false)
const initialFormData = {
id: '',
class_id: '',
schedule_json: '',
courses_id: '',
schedule_date: '',
cycle: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
@ -71,8 +90,13 @@ const formRules = computed(() => {
]
,
schedule_json: [
{ required: true, message: t('scheduleJsonPlaceholder'), trigger: 'blur' },
courses_id: [
{ required: true, message: t('coursesIdPlaceholder'), trigger: 'blur' },
]
,
schedule_date: [
{ required: true, message: t('scheduleDatePlaceholder'), trigger: 'blur' },
]
,
@ -125,6 +149,11 @@ const confirm = async (formEl: FormInstance | undefined) => {
classIdList.value = await (await getWithClassesList({})).data
}
setClassIdList()
const coursesIdList = ref([] as any[])
const setCoursesIdList = async () => {
coursesIdList.value = await (await getWithCoursesList({})).data
}
setCoursesIdList()
const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData)
loading.value = true

24
niucloud/addon/zhjw/admin/views/timetables/timetables.vue

@ -24,6 +24,18 @@
</el-form-item>
<el-form-item :label="t('coursesId')" prop="courses_id">
<el-select class="w-[280px]" v-model="timetablesTable.searchParam.courses_id" clearable :placeholder="t('coursesIdPlaceholder')">
<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="t('cycle')" prop="cycle">
<el-select class="w-[280px]" v-model="timetablesTable.searchParam.cycle" clearable :placeholder="t('cyclePlaceholder')">
<el-option label="全部" value=""></el-option>
@ -50,6 +62,10 @@
</template>
<el-table-column prop="class_id_name" :label="t('classId')" 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">
<template #default="{ row }">
<div v-for="(item, index) in cycleList">
@ -82,7 +98,7 @@
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { getTimetablesList, deleteTimetables, getWithClassesList } from '@/addon/zhjw/api/timetables'
import { getTimetablesList, deleteTimetables, getWithClassesList, getWithCoursesList } from '@/addon/zhjw/api/timetables'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import { useRouter } from 'vue-router'
@ -98,6 +114,7 @@ let timetablesTable = reactive({
data: [],
searchParam:{
"class_id":"",
"courses_id":"",
"cycle":""
}
})
@ -176,6 +193,11 @@ const deleteEvent = (id: number) => {
classIdList.value = await (await getWithClassesList({})).data
}
setClassIdList()
const coursesIdList = ref([])
const setCoursesIdList = async () => {
coursesIdList.value = await (await getWithCoursesList({})).data
}
setCoursesIdList()
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return

49
niucloud/addon/zhjw/admin/views/timetables/timetables_edit.vue

@ -10,20 +10,32 @@
</div>
<el-card class="box-card !border-none" shadow="never">
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form">
<el-form-item :label="t('classId')" prop="class_id">
<el-radio-group v-model="formData.class_id" :placeholder="t('classIdPlaceholder')">
<el-radio
<el-select class="input-width" v-model="formData.class_id" clearable :placeholder="t('classIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in classIdList"
:key="index"
:label="item['id']">
{{ item['name'] }}
</el-radio>
</el-radio-group>
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('scheduleJson')" prop="schedule_json">
<el-input v-model="formData.schedule_json" clearable :placeholder="t('scheduleJsonPlaceholder')" class="input-width" />
<el-form-item :label="t('coursesId')" prop="courses_id">
<el-select class="input-width" v-model="formData.courses_id" clearable :placeholder="t('coursesIdPlaceholder')">
<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="t('scheduleDate')" prop="schedule_date">
<el-input v-model="formData.schedule_date" clearable :placeholder="t('scheduleDatePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('cycle')" prop="cycle">
@ -52,7 +64,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getTimetablesInfo,addTimetables,editTimetables, getWithClassesList } from '@/addon/zhjw/api/timetables';
import { getTimetablesInfo,addTimetables,editTimetables, getWithClassesList, getWithCoursesList } from '@/addon/zhjw/api/timetables';
import { useRoute } from 'vue-router'
const route = useRoute()
@ -68,7 +80,8 @@ const pageName = route.meta.title
const initialFormData = {
id: 0,
class_id: '',
schedule_json: '',
courses_id: '',
schedule_date: '',
cycle: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
@ -100,6 +113,11 @@ const selectData = ref<any[]>([])
classIdList.value = await (await getWithClassesList({})).data
}
setClassIdList()
const coursesIdList = ref([] as any[])
const setCoursesIdList = async () => {
coursesIdList.value = await (await getWithCoursesList({})).data
}
setCoursesIdList()
//
const formRules = computed(() => {
return {
@ -108,8 +126,13 @@ const formRules = computed(() => {
]
,
schedule_json: [
{ required: true, message: t('scheduleJsonPlaceholder'), trigger: 'blur' },
courses_id: [
{ required: true, message: t('coursesIdPlaceholder'), trigger: 'blur' },
]
,
schedule_date: [
{ required: true, message: t('scheduleDatePlaceholder'), trigger: 'blur' },
]
,

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

@ -29,6 +29,7 @@ class Timetables extends BaseAdminController
public function lists(){
$data = $this->request->params([
["class_id",""],
["courses_id",""],
["cycle",""]
]);
return success((new TimetablesService())->getPage($data));
@ -50,7 +51,8 @@ class Timetables extends BaseAdminController
public function add(){
$data = $this->request->params([
["class_id",0],
["schedule_json",""],
["courses_id",0],
["schedule_date",""],
["cycle",""]
]);
$this->validate($data, 'addon\zhjw\app\validate\timetables\Timetables.add');
@ -66,7 +68,8 @@ class Timetables extends BaseAdminController
public function edit(int $id){
$data = $this->request->params([
["class_id",0],
["schedule_json",""],
["courses_id",0],
["schedule_date",""],
["cycle",""]
]);
$this->validate($data, 'addon\zhjw\app\validate\timetables\Timetables.edit');
@ -89,4 +92,8 @@ class Timetables extends BaseAdminController
return success(( new TimetablesService())->getClassesAll());
}
public function getCoursesAll(){
return success(( new TimetablesService())->getCoursesAll());
}
}

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

@ -158,29 +158,6 @@ Route::group('zhjw', function () {
]);
// USER_CODE_END -- classes
// USER_CODE_BEGIN -- timetables
Route::group('zhjw', function () {
//课表管理列表
Route::get('timetables', 'addon\zhjw\app\adminapi\controller\timetables\Timetables@lists');
//课表管理详情
Route::get('timetables/:id', 'addon\zhjw\app\adminapi\controller\timetables\Timetables@info');
//添加课表管理
Route::post('timetables', 'addon\zhjw\app\adminapi\controller\timetables\Timetables@add');
//编辑课表管理
Route::put('timetables/:id', 'addon\zhjw\app\adminapi\controller\timetables\Timetables@edit');
//删除课表管理
Route::delete('timetables/:id', 'addon\zhjw\app\adminapi\controller\timetables\Timetables@del');
Route::get('classes_all','addon\zhjw\app\adminapi\controller\timetables\Timetables@getClassesAll');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);
// USER_CODE_END -- timetables
// USER_CODE_BEGIN -- courses
@ -374,3 +351,32 @@ Route::group('zhjw', function () {
AdminLog::class
]);
// USER_CODE_END -- zhjw_students
// USER_CODE_BEGIN -- timetables
Route::group('zhjw', function () {
//课表管理列表
Route::get('timetables', 'addon\zhjw\app\adminapi\controller\timetables\Timetables@lists');
//课表管理详情
Route::get('timetables/:id', 'addon\zhjw\app\adminapi\controller\timetables\Timetables@info');
//添加课表管理
Route::post('timetables', 'addon\zhjw\app\adminapi\controller\timetables\Timetables@add');
//编辑课表管理
Route::put('timetables/:id', 'addon\zhjw\app\adminapi\controller\timetables\Timetables@edit');
//删除课表管理
Route::delete('timetables/:id', 'addon\zhjw\app\adminapi\controller\timetables\Timetables@del');
Route::get('classes_all','addon\zhjw\app\adminapi\controller\timetables\Timetables@getClassesAll');
Route::get('courses_all','addon\zhjw\app\adminapi\controller\timetables\Timetables@getCoursesAll');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);
// USER_CODE_END -- timetables

18
niucloud/addon/zhjw/app/model/timetables/Timetables.php

@ -18,6 +18,8 @@ use think\model\relation\HasOne;
use addon\zhjw\app\model\classes\Classes;
use addon\zhjw\app\model\courses\Courses;
/**
* 课表管理模型
* Class Timetables
@ -64,6 +66,18 @@ class Timetables extends BaseModel
}
}
/**
* 搜索器:课表管理所属课程
* @param $value
* @param $data
*/
public function searchCoursesIdAttr($query, $value, $data)
{
if ($value) {
$query->where("courses_id", $value);
}
}
/**
* 搜索器:课表管理周期
* @param $value
@ -85,4 +99,8 @@ class Timetables extends BaseModel
return $this->hasOne(Classes::class, 'id', 'class_id')->joinType('left')->withField('name,id')->bind(['class_id_name'=>'name']);
}
public function courses(){
return $this->hasOne(Courses::class, 'id', 'courses_id')->joinType('left')->withField('name,id')->bind(['courses_id_name'=>'name']);
}
}

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

@ -13,6 +13,7 @@ namespace addon\zhjw\app\service\admin\timetables;
use addon\zhjw\app\model\timetables\Timetables;
use addon\zhjw\app\model\classes\Classes;
use addon\zhjw\app\model\courses\Courses;
use core\base\BaseAdminService;
@ -37,10 +38,10 @@ class TimetablesService extends BaseAdminService
*/
public function getPage(array $where = [])
{
$field = 'id,is_deleted,created_by,created_role,created_time,updated_by,updated_role,updated_time,class_id,schedule_json,cycle';
$field = 'id,is_deleted,created_by,created_role,created_time,updated_by,updated_role,updated_time,class_id,courses_id,schedule_date,cycle';
$order = 'id desc';
$search_model = $this->model->withSearch(["class_id","cycle"], $where)->with(['classes'])->field($field)->order($order);
$search_model = $this->model->withSearch(["class_id","courses_id","cycle"], $where)->with(['classes','courses'])->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
}
@ -52,9 +53,9 @@ class TimetablesService extends BaseAdminService
*/
public function getInfo(int $id)
{
$field = 'id,is_deleted,created_by,created_role,created_time,updated_by,updated_role,updated_time,class_id,schedule_json,cycle';
$field = 'id,is_deleted,created_by,created_role,created_time,updated_by,updated_role,updated_time,class_id,courses_id,schedule_date,cycle';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['classes'])->findOrEmpty()->toArray();
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['classes','courses'])->findOrEmpty()->toArray();
$info['cycle'] = strval($info['cycle']);
return $info;
}
@ -102,5 +103,10 @@ class TimetablesService extends BaseAdminService
return $classesModel->select()->toArray();
}
public function getCoursesAll(){
$coursesModel = new Courses();
return $coursesModel->select()->toArray();
}
}

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

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

Loading…
Cancel
Save