Browse Source

Merge branch 'wangzeyan'

wangzeyan
王泽彦 11 months ago
parent
commit
19bedd78ed
  1. 23
      admin/src/app/api/physical_test.ts
  2. 4
      admin/src/app/lang/zh-cn/campus_person_role.campus_person_role.json
  3. 4
      admin/src/app/lang/zh-cn/classroom.classroom.json
  4. 56
      admin/src/app/lang/zh-cn/physical_test.physical_test.json
  5. 39
      admin/src/app/lang/zh-cn/physical_test.physical_test_edit.json
  6. 64
      admin/src/app/views/campus_person_role/campus_person_role.vue
  7. 25
      admin/src/app/views/campus_person_role/components/campus-person-role-edit.vue
  8. 351
      admin/src/app/views/physical_test/physical_test.vue
  9. 300
      admin/src/app/views/physical_test/physical_test_edit.vue
  10. 4
      admin/src/router/index.ts
  11. 32
      admin/src/utils/common.ts
  12. 22
      niucloud/app/adminapi/controller/physical_test/PhysicalTest.php
  13. 1
      niucloud/app/adminapi/route/physical_test.php
  14. 160
      niucloud/app/model/physical_test/PhysicalTest.php
  15. 2
      niucloud/app/service/admin/physical_test/PhysicalTestService.php

23
admin/src/app/api/physical_test.ts

@ -1,5 +1,7 @@
import request from '@/utils/request' import request from '@/utils/request'
// USER_CODE_BEGIN -- physical_test // USER_CODE_BEGIN -- physical_test
/** /**
* *
@ -7,7 +9,7 @@ import request from '@/utils/request'
* @returns * @returns
*/ */
export function getPhysicalTestList(params: Record<string, any>) { export function getPhysicalTestList(params: Record<string, any>) {
return request.get(`physical_test/physical_test`, { params }) return request.get(`physical_test/physical_test`, {params})
} }
/** /**
@ -16,7 +18,7 @@ export function getPhysicalTestList(params: Record<string, any>) {
* @returns * @returns
*/ */
export function getPhysicalTestInfo(id: number) { export function getPhysicalTestInfo(id: number) {
return request.get(`physical_test/physical_test/${id}`) return request.get(`physical_test/physical_test/${id}`);
} }
/** /**
@ -25,10 +27,7 @@ export function getPhysicalTestInfo(id: number) {
* @returns * @returns
*/ */
export function addPhysicalTest(params: Record<string, any>) { export function addPhysicalTest(params: Record<string, any>) {
return request.post('physical_test/physical_test', params, { return request.post('physical_test/physical_test', params, { showErrorMessage: true, showSuccessMessage: true })
showErrorMessage: true,
showSuccessMessage: true,
})
} }
/** /**
@ -38,10 +37,7 @@ export function addPhysicalTest(params: Record<string, any>) {
* @returns * @returns
*/ */
export function editPhysicalTest(params: Record<string, any>) { export function editPhysicalTest(params: Record<string, any>) {
return request.put(`physical_test/physical_test/${params.id}`, params, { return request.put(`physical_test/physical_test/${params.id}`, params, { showErrorMessage: true, showSuccessMessage: true })
showErrorMessage: true,
showSuccessMessage: true,
})
} }
/** /**
@ -50,10 +46,9 @@ export function editPhysicalTest(params: Record<string, any>) {
* @returns * @returns
*/ */
export function deletePhysicalTest(id: number) { export function deletePhysicalTest(id: number) {
return request.delete(`physical_test/physical_test/${id}`, { return request.delete(`physical_test/physical_test/${id}`, { showErrorMessage: true, showSuccessMessage: true })
showErrorMessage: true,
showSuccessMessage: true,
})
} }
// USER_CODE_END -- physical_test // USER_CODE_END -- physical_test

4
admin/src/app/lang/zh-cn/campus_person_role.campus_person_role.json

@ -9,8 +9,8 @@
"roleIdPlaceholder": "全部", "roleIdPlaceholder": "全部",
"deptId": "部门表", "deptId": "部门表",
"deptIdPlaceholder": "全部", "deptIdPlaceholder": "全部",
"addCampusPersonRole": "添加角色关系", "addCampusPersonRole": "添加人员",
"updateCampusPersonRole": "编辑角色关系", "updateCampusPersonRole": "编辑人员",
"campusPersonRoleDeleteTips": "确定要删除该数据吗?", "campusPersonRoleDeleteTips": "确定要删除该数据吗?",
"startDate": "请选择开始时间", "startDate": "请选择开始时间",
"endDate": "请选择结束时间" "endDate": "请选择结束时间"

4
admin/src/app/lang/zh-cn/classroom.classroom.json

@ -19,8 +19,8 @@
"sortOrderPlaceholder":"请输入班级排序", "sortOrderPlaceholder":"请输入班级排序",
"remarks":"班级备注", "remarks":"班级备注",
"remarksPlaceholder":"请输入班级备注", "remarksPlaceholder":"请输入班级备注",
"addClassroom":"添加场地管理", "addClassroom":"添加班级",
"updateClassroom":"编辑场地管理", "updateClassroom":"编辑班级",
"classroomDeleteTips":"确定要删除该数据吗?", "classroomDeleteTips":"确定要删除该数据吗?",
"startDate":"请选择开始时间", "startDate":"请选择开始时间",
"endDate":"请选择结束时间" "endDate":"请选择结束时间"

56
admin/src/app/lang/zh-cn/physical_test.physical_test.json

@ -1,43 +1,17 @@
{ {
"id": "体测编号", "resourceId":"客户姓名",
"idPlaceholder": "请输入体测编号", "resourceIdPlaceholder":"请输入客户姓名",
"resourceId": "资源ID", "studentId":"学员姓名",
"resourceIdPlaceholder": "请输入资源ID", "studentIdPlaceholder":"请输入学员姓名",
"studentId": "学员ID", "height":"身高",
"studentIdPlaceholder": "请输入学员ID", "heightPlaceholder":"请输入身高",
"height": "身高", "createdAt":"创建时间",
"heightPlaceholder": "请输入身高", "createdAtPlaceholder":"请输入创建时间",
"weight": "体重", "updatedAt":"修改时间",
"weightPlaceholder": "请输入体重", "updatedAtPlaceholder":"请输入修改时间",
"coachId": "教练ID", "addPhysicalTest":"添加体测",
"coachIdPlaceholder": "请输入教练ID", "updatePhysicalTest":"编辑体测",
"createdAt": "创建时间", "physicalTestDeleteTips":"确定要删除该数据吗?",
"createdAtPlaceholder": "请输入创建时间", "startDate":"请选择开始时间",
"updatedAt": "修改时间", "endDate":"请选择结束时间"
"updatedAtPlaceholder": "请输入修改时间",
"seatedForwardBend": "坐位体前屈",
"seatedForwardBendPlaceholder": "请输入坐位体前屈",
"sitUps": "仰卧卷腹",
"sitUpsPlaceholder": "请输入仰卧卷腹",
"pushUps": "九十度仰卧撑",
"pushUpsPlaceholder": "请输入九十度仰卧撑",
"flamingoBalance": "火烈鸟平衡测试",
"flamingoBalancePlaceholder": "请输入火烈鸟平衡测试",
"thirtySecJump": "三十秒双脚连续跳",
"thirtySecJumpPlaceholder": "请输入三十秒双脚连续跳",
"standingLongJump": "立定跳远",
"standingLongJumpPlaceholder": "请输入立定跳远",
"agilityRun": "4乘10m灵敏折返跑",
"agilityRunPlaceholder": "请输入4乘10m灵敏折返跑",
"balanceBeam": "走平衡木",
"balanceBeamPlaceholder": "请输入走平衡木",
"tennisThrow": "网球掷远",
"tennisThrowPlaceholder": "请输入网球掷远",
"tenMeterShuttleRun": "十米往返跑",
"tenMeterShuttleRunPlaceholder": "请输入十米往返跑",
"addPhysicalTest": "添加体测",
"updatePhysicalTest": "编辑体测",
"physicalTestDeleteTips": "确定要删除该数据吗?",
"startDate": "请选择开始时间",
"endDate": "请选择结束时间"
} }

39
admin/src/app/lang/zh-cn/physical_test.physical_test_edit.json

@ -0,0 +1,39 @@
{
"resourceId":"客户姓名",
"studentId":"学员姓名",
"height":"身高",
"weight":"体重",
"coachId":"教练",
"createdAt":"创建时间",
"updatedAt":"修改时间",
"seatedForwardBend":"坐位体前屈",
"sitUps":"仰卧卷腹",
"pushUps":"九十度仰卧撑",
"flamingoBalance":"火烈鸟平衡测试",
"thirtySecJump":"三十秒双脚连续跳",
"standingLongJump":"立定跳远",
"agilityRun":"4乘10m灵敏折返跑",
"balanceBeam":"走平衡木",
"tennisThrow":"网球掷远",
"tenMeterShuttleRun":"十米往返跑",
"resourceIdPlaceholder":"请输入客户姓名",
"studentIdPlaceholder":"请输入学员姓名",
"heightPlaceholder":"请输入身高",
"weightPlaceholder":"请输入体重",
"coachIdPlaceholder":"请输入教练",
"createdAtPlaceholder":"请输入创建时间",
"updatedAtPlaceholder":"请输入修改时间",
"seatedForwardBendPlaceholder":"请输入坐位体前屈",
"sitUpsPlaceholder":"请输入仰卧卷腹",
"pushUpsPlaceholder":"请输入九十度仰卧撑",
"flamingoBalancePlaceholder":"请输入火烈鸟平衡测试",
"thirtySecJumpPlaceholder":"请输入三十秒双脚连续跳",
"standingLongJumpPlaceholder":"请输入立定跳远",
"agilityRunPlaceholder":"请输入4乘10m灵敏折返跑",
"balanceBeamPlaceholder":"请输入走平衡木",
"tennisThrowPlaceholder":"请输入网球掷远",
"tenMeterShuttleRunPlaceholder":"请输入十米往返跑",
"addPhysicalTest":"添加体测",
"updatePhysicalTest":"编辑体测",
"physicalTestDeleteTips":"确定要删除该体测吗?"
}

64
admin/src/app/views/campus_person_role/campus_person_role.vue

@ -65,29 +65,31 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('deptId')" prop="dept_id"> <!-- <el-form-item :label="t('deptId')" prop="dept_id">-->
<el-select <!-- <el-select-->
class="w-[280px]" <!-- class="w-[280px]"-->
v-model="campusPersonRoleTable.searchParam.dept_id" <!-- v-model="campusPersonRoleTable.searchParam.dept_id"-->
clearable <!-- clearable-->
:placeholder="t('deptIdPlaceholder')" <!-- :placeholder="t('deptIdPlaceholder')"-->
> <!-- >-->
<el-option <!-- <el-option-->
v-for="(item, index) in deptIdList" <!-- v-for="(item, index) in deptIdList"-->
:key="index" <!-- :key="index"-->
:label="item['department_name']" <!-- :label="item['department_name']"-->
:value="item['id']" <!-- :value="item['id']"-->
/> <!-- />-->
</el-select> <!-- </el-select>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item> <el-form-item>
<el-button type="primary" @click="loadCampusPersonRoleList()">{{ <el-button type="primary" @click="loadCampusPersonRoleList()">{{
t('search') t('search')
}}</el-button> }}
</el-button>
<el-button @click="resetForm(searchFormRef)">{{ <el-button @click="resetForm(searchFormRef)">{{
t('reset') t('reset')
}}</el-button> }}
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -139,10 +141,12 @@
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ <el-button type="primary" link @click="editEvent(row)">{{
t('edit') t('edit')
}}</el-button> }}
</el-button>
<el-button type="primary" link @click="deleteEvent(row.id)">{{ <el-button type="primary" link @click="deleteEvent(row.id)">{{
t('delete') t('delete')
}}</el-button> }}
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -167,9 +171,9 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, ref, watch } from 'vue' import {reactive, ref, watch} from 'vue'
import { t } from '@/lang' import {t} from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { import {
getCampusPersonRoleList, getCampusPersonRoleList,
deleteCampusPersonRole, deleteCampusPersonRole,
@ -178,10 +182,11 @@ import {
getWithSysRoleList, getWithSysRoleList,
getWithDepartmentsList, getWithDepartmentsList,
} from '@/app/api/campus_person_role' } from '@/app/api/campus_person_role'
import { img } from '@/utils/common' import {getQueryString} from '@/utils/common'
import { ElMessageBox, FormInstance } from 'element-plus' import {ElMessageBox, FormInstance} from 'element-plus'
import Edit from '@/app/views/campus_person_role/components/campus-person-role-edit.vue' import Edit from '@/app/views/campus_person_role/components/campus-person-role-edit.vue'
import { useRoute } from 'vue-router' import {useRoute} from 'vue-router'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title const pageName = route.meta.title
@ -195,7 +200,7 @@ let campusPersonRoleTable = reactive({
campus_id: '', campus_id: '',
person_id: '', person_id: '',
role_id: '', role_id: '',
dept_id: '', dept_id: getQueryString(route.path, 'dept_id'),
}, },
}) })
@ -204,8 +209,6 @@ const searchFormRef = ref<FormInstance>()
// //
const selectData = ref<any[]>([]) const selectData = ref<any[]>([])
//
/** /**
* 获取角色关系列表 * 获取角色关系列表
*/ */
@ -235,7 +238,7 @@ const editCampusPersonRoleDialog: Record<string, any> | null = ref(null)
* 添加角色关系 * 添加角色关系
*/ */
const addEvent = () => { const addEvent = () => {
editCampusPersonRoleDialog.value.setFormData() editCampusPersonRoleDialog.value.setFormData({dept_id: campusPersonRoleTable.searchParam.dept_id})
editCampusPersonRoleDialog.value.showDialog = true editCampusPersonRoleDialog.value.showDialog = true
} }
@ -261,7 +264,8 @@ const deleteEvent = (id: number) => {
.then(() => { .then(() => {
loadCampusPersonRoleList() loadCampusPersonRoleList()
}) })
.catch(() => {}) .catch(() => {
})
}) })
} }

25
admin/src/app/views/campus_person_role/components/campus-person-role-edit.vue

@ -67,7 +67,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('deptId')"> <el-form-item :label="t('deptId')" v-if="!formData.dept_id">
<el-select <el-select
class="input-width" class="input-width"
v-model="formData.dept_id" v-model="formData.dept_id"
@ -100,10 +100,10 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, reactive, computed, watch } from 'vue' import {ref, reactive, computed, watch} from 'vue'
import { useDictionary } from '@/app/api/dict' import {useDictionary} from '@/app/api/dict'
import { t } from '@/lang' import {t} from '@/lang'
import type { FormInstance } from 'element-plus' import type {FormInstance} from 'element-plus'
import { import {
addCampusPersonRole, addCampusPersonRole,
editCampusPersonRole, editCampusPersonRole,
@ -127,7 +127,7 @@ const initialFormData = {
role_id: '', role_id: '',
dept_id: '', dept_id: '',
} }
const formData: Record<string, any> = reactive({ ...initialFormData }) const formData: Record<string, any> = reactive({...initialFormData})
const formRef = ref<FormInstance>() const formRef = ref<FormInstance>()
@ -135,16 +135,16 @@ const formRef = ref<FormInstance>()
const formRules = computed(() => { const formRules = computed(() => {
return { return {
campus_id: [ campus_id: [
{ required: true, message: t('campusIdPlaceholder'), trigger: 'blur' }, {required: true, message: t('campusIdPlaceholder'), trigger: 'blur'},
], ],
person_id: [ person_id: [
{ required: true, message: t('personIdPlaceholder'), trigger: 'blur' }, {required: true, message: t('personIdPlaceholder'), trigger: 'blur'},
], ],
role_id: [ role_id: [
{ required: true, message: t('roleIdPlaceholder'), trigger: 'blur' }, {required: true, message: t('roleIdPlaceholder'), trigger: 'blur'},
], ],
dept_id: [ dept_id: [
{ required: true, message: t('deptIdPlaceholder'), trigger: 'blur' }, {required: true, message: t('deptIdPlaceholder'), trigger: 'blur'},
], ],
} }
}) })
@ -202,8 +202,11 @@ const setDeptIdList = async () => {
setDeptIdList() setDeptIdList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
if (row.dept_id) {
formData.dept_id = parseInt(row.dept_id)
}
loading.value = true loading.value = true
if (row) { if (row.id) {
const data = await (await getCampusPersonRoleInfo(row.id)).data const data = await (await getCampusPersonRoleInfo(row.id)).data
if (data) if (data)
Object.keys(formData).forEach((key: string) => { Object.keys(formData).forEach((key: string) => {

351
admin/src/app/views/physical_test/physical_test.vue

@ -1,301 +1,69 @@
<template> <template>
<div class="main-container"> <div class="main-container">
<el-card class="box-card !border-none" shadow="never"> <el-card class="box-card !border-none" shadow="never">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<span class="text-lg">{{ pageName }}</span> <span class="text-lg">{{pageName}}</span>
<el-button type="primary" @click="addEvent"> <el-button type="primary" @click="addEvent">
{{ t('addPhysicalTest') }} {{ t('addPhysicalTest') }}
</el-button> </el-button>
</div> </div>
<el-card <el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
class="box-card !border-none my-[10px] table-search-wrap" <el-form :inline="true" :model="physicalTestTable.searchParam" ref="searchFormRef">
shadow="never"
>
<el-form
:inline="true"
:model="physicalTestTable.searchParam"
ref="searchFormRef"
>
<el-form-item :label="t('resourceId')" prop="resource_id"> <el-form-item :label="t('resourceId')" prop="resource_id">
<el-input <el-input v-model="physicalTestTable.searchParam.resource_id" :placeholder="t('resourceIdPlaceholder')" />
v-model="physicalTestTable.searchParam.resource_id"
:placeholder="t('resourceIdPlaceholder')"
/>
</el-form-item> </el-form-item>
<el-form-item :label="t('studentId')" prop="student_id"> <el-form-item :label="t('studentId')" prop="student_id">
<el-input <el-input v-model="physicalTestTable.searchParam.student_id" :placeholder="t('studentIdPlaceholder')" />
v-model="physicalTestTable.searchParam.student_id"
:placeholder="t('studentIdPlaceholder')"
/>
</el-form-item> </el-form-item>
<el-form-item :label="t('height')" prop="height"> <el-form-item :label="t('height')" prop="height">
<el-input <el-input v-model="physicalTestTable.searchParam.height" :placeholder="t('heightPlaceholder')" />
v-model="physicalTestTable.searchParam.height"
:placeholder="t('heightPlaceholder')"
/>
</el-form-item>
<el-form-item :label="t('weight')" prop="weight">
<el-input
v-model="physicalTestTable.searchParam.weight"
:placeholder="t('weightPlaceholder')"
/>
</el-form-item>
<el-form-item :label="t('coachId')" prop="coach_id">
<el-input
v-model="physicalTestTable.searchParam.coach_id"
:placeholder="t('coachIdPlaceholder')"
/>
</el-form-item> </el-form-item>
<el-form-item :label="t('createdAt')" prop="created_at"> <el-form-item :label="t('createdAt')" prop="created_at">
<el-input <el-input v-model="physicalTestTable.searchParam.created_at" :placeholder="t('createdAtPlaceholder')" />
v-model="physicalTestTable.searchParam.created_at"
:placeholder="t('createdAtPlaceholder')"
/>
</el-form-item> </el-form-item>
<el-form-item :label="t('updatedAt')" prop="updated_at"> <el-form-item :label="t('updatedAt')" prop="updated_at">
<el-input <el-input v-model="physicalTestTable.searchParam.updated_at" :placeholder="t('updatedAtPlaceholder')" />
v-model="physicalTestTable.searchParam.updated_at"
:placeholder="t('updatedAtPlaceholder')"
/>
</el-form-item>
<el-form-item
:label="t('seatedForwardBend')"
prop="seated_forward_bend"
>
<el-input
v-model="physicalTestTable.searchParam.seated_forward_bend"
:placeholder="t('seatedForwardBendPlaceholder')"
/>
</el-form-item>
<el-form-item :label="t('sitUps')" prop="sit_ups">
<el-input
v-model="physicalTestTable.searchParam.sit_ups"
:placeholder="t('sitUpsPlaceholder')"
/>
</el-form-item>
<el-form-item :label="t('pushUps')" prop="push_ups">
<el-input
v-model="physicalTestTable.searchParam.push_ups"
:placeholder="t('pushUpsPlaceholder')"
/>
</el-form-item>
<el-form-item :label="t('flamingoBalance')" prop="flamingo_balance">
<el-input
v-model="physicalTestTable.searchParam.flamingo_balance"
:placeholder="t('flamingoBalancePlaceholder')"
/>
</el-form-item>
<el-form-item :label="t('thirtySecJump')" prop="thirty_sec_jump">
<el-input
v-model="physicalTestTable.searchParam.thirty_sec_jump"
:placeholder="t('thirtySecJumpPlaceholder')"
/>
</el-form-item>
<el-form-item
:label="t('standingLongJump')"
prop="standing_long_jump"
>
<el-input
v-model="physicalTestTable.searchParam.standing_long_jump"
:placeholder="t('standingLongJumpPlaceholder')"
/>
</el-form-item> </el-form-item>
<el-form-item :label="t('agilityRun')" prop="agility_run">
<el-input
v-model="physicalTestTable.searchParam.agility_run"
:placeholder="t('agilityRunPlaceholder')"
/>
</el-form-item>
<el-form-item :label="t('balanceBeam')" prop="balance_beam">
<el-input
v-model="physicalTestTable.searchParam.balance_beam"
:placeholder="t('balanceBeamPlaceholder')"
/>
</el-form-item>
<el-form-item :label="t('tennisThrow')" prop="tennis_throw">
<el-input
v-model="physicalTestTable.searchParam.tennis_throw"
:placeholder="t('tennisThrowPlaceholder')"
/>
</el-form-item>
<el-form-item
:label="t('tenMeterShuttleRun')"
prop="ten_meter_shuttle_run"
>
<el-input
v-model="physicalTestTable.searchParam.ten_meter_shuttle_run"
:placeholder="t('tenMeterShuttleRunPlaceholder')"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="loadPhysicalTestList()">{{ <el-button type="primary" @click="loadPhysicalTestList()">{{ t('search') }}</el-button>
t('search') <el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button>
}}</el-button>
<el-button @click="resetForm(searchFormRef)">{{
t('reset')
}}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<div class="mt-[10px]"> <div class="mt-[10px]">
<el-table <el-table :data="physicalTestTable.data" size="large" v-loading="physicalTestTable.loading">
:data="physicalTestTable.data"
size="large"
v-loading="physicalTestTable.loading"
>
<template #empty> <template #empty>
<span>{{ !physicalTestTable.loading ? t('emptyData') : '' }}</span> <span>{{ !physicalTestTable.loading ? t('emptyData') : '' }}</span>
</template> </template>
<el-table-column <el-table-column prop="resource_id" :label="t('resourceId')" min-width="120" :show-overflow-tooltip="true"/>
prop="resource_id"
:label="t('resourceId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="student_id"
:label="t('studentId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="height"
:label="t('height')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="weight"
:label="t('weight')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column <el-table-column prop="student_id" :label="t('studentId')" min-width="120" :show-overflow-tooltip="true"/>
prop="coach_id"
:label="t('coachId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column <el-table-column prop="height" :label="t('height')" min-width="120" :show-overflow-tooltip="true"/>
prop="created_at"
:label="t('createdAt')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column <el-table-column prop="created_at" :label="t('createdAt')" min-width="120" :show-overflow-tooltip="true"/>
prop="updated_at"
:label="t('updatedAt')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column <el-table-column prop="updated_at" :label="t('updatedAt')" min-width="120" :show-overflow-tooltip="true"/>
prop="seated_forward_bend"
:label="t('seatedForwardBend')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column <el-table-column :label="t('operation')" fixed="right" min-width="120">
prop="sit_ups"
:label="t('sitUps')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="push_ups"
:label="t('pushUps')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="flamingo_balance"
:label="t('flamingoBalance')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="thirty_sec_jump"
:label="t('thirtySecJump')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="standing_long_jump"
:label="t('standingLongJump')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="agility_run"
:label="t('agilityRun')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="balance_beam"
:label="t('balanceBeam')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="tennis_throw"
:label="t('tennisThrow')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="ten_meter_shuttle_run"
:label="t('tenMeterShuttleRun')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
:label="t('operation')"
fixed="right"
min-width="120"
>
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ <el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
t('edit') <el-button type="primary" link @click="deleteEvent(row.id)">{{ t('delete') }}</el-button>
}}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id)">{{
t('delete')
}}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="mt-[16px] flex justify-end"> <div class="mt-[16px] flex justify-end">
<el-pagination <el-pagination v-model:current-page="physicalTestTable.page" v-model:page-size="physicalTestTable.limit"
v-model:current-page="physicalTestTable.page" layout="total, sizes, prev, pager, next, jumper" :total="physicalTestTable.total"
v-model:page-size="physicalTestTable.limit" @size-change="loadPhysicalTestList()" @current-change="loadPhysicalTestList" />
layout="total, sizes, prev, pager, next, jumper"
:total="physicalTestTable.total"
@size-change="loadPhysicalTestList()"
@current-change="loadPhysicalTestList"
/>
</div> </div>
</div> </div>
<edit ref="editPhysicalTestDialog" @complete="loadPhysicalTestList" />
</el-card> </el-card>
</div> </div>
</template> </template>
@ -304,16 +72,13 @@
import { reactive, ref, watch } from 'vue' import { reactive, ref, watch } from 'vue'
import { t } from '@/lang' import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict' import { useDictionary } from '@/app/api/dict'
import { import { getPhysicalTestList, deletePhysicalTest } from '@/app/api/physical_test'
getPhysicalTestList,
deletePhysicalTest,
} from '@/app/api/physical_test'
import { img } from '@/utils/common' import { img } from '@/utils/common'
import { ElMessageBox, FormInstance } from 'element-plus' import { ElMessageBox,FormInstance } from 'element-plus'
import Edit from '@/app/views/physical_test/components/physical-test-edit.vue' import { useRouter } from 'vue-router'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title const pageName = route.meta.title;
let physicalTestTable = reactive({ let physicalTestTable = reactive({
page: 1, page: 1,
@ -321,25 +86,13 @@ let physicalTestTable = reactive({
total: 0, total: 0,
loading: true, loading: true,
data: [], data: [],
searchParam: { searchParam:{
resource_id: '', "resource_id":"",
student_id: '', "student_id":"",
height: '', "height":"",
weight: '', "created_at":"",
coach_id: '', "updated_at":""
created_at: '', }
updated_at: '',
seated_forward_bend: '',
sit_ups: '',
push_ups: '',
flamingo_balance: '',
thirty_sec_jump: '',
standing_long_jump: '',
agility_run: '',
balance_beam: '',
tennis_throw: '',
ten_meter_shuttle_run: '',
},
}) })
const searchFormRef = ref<FormInstance>() const searchFormRef = ref<FormInstance>()
@ -349,6 +102,7 @@ const selectData = ref<any[]>([])
// //
/** /**
* 获取体测列表 * 获取体测列表
*/ */
@ -359,27 +113,24 @@ const loadPhysicalTestList = (page: number = 1) => {
getPhysicalTestList({ getPhysicalTestList({
page: physicalTestTable.page, page: physicalTestTable.page,
limit: physicalTestTable.limit, limit: physicalTestTable.limit,
...physicalTestTable.searchParam, ...physicalTestTable.searchParam
}) }).then(res => {
.then((res) => {
physicalTestTable.loading = false physicalTestTable.loading = false
physicalTestTable.data = res.data.data physicalTestTable.data = res.data.data
physicalTestTable.total = res.data.total physicalTestTable.total = res.data.total
}) }).catch(() => {
.catch(() => {
physicalTestTable.loading = false physicalTestTable.loading = false
}) })
} }
loadPhysicalTestList() loadPhysicalTestList()
const editPhysicalTestDialog: Record<string, any> | null = ref(null) const router = useRouter()
/** /**
* 添加体测 * 添加体测
*/ */
const addEvent = () => { const addEvent = () => {
editPhysicalTestDialog.value.setFormData() router.push('/physical_test/physical_test_edit')
editPhysicalTestDialog.value.showDialog = true
} }
/** /**
@ -387,27 +138,29 @@ const addEvent = () => {
* @param data * @param data
*/ */
const editEvent = (data: any) => { const editEvent = (data: any) => {
editPhysicalTestDialog.value.setFormData(data) router.push('/physical_test/physical_test_edit?id='+data.id)
editPhysicalTestDialog.value.showDialog = true
} }
/** /**
* 删除体测 * 删除体测
*/ */
const deleteEvent = (id: number) => { const deleteEvent = (id: number) => {
ElMessageBox.confirm(t('physicalTestDeleteTips'), t('warning'), { ElMessageBox.confirm(t('physicalTestDeleteTips'), t('warning'),
{
confirmButtonText: t('confirm'), confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'), cancelButtonText: t('cancel'),
type: 'warning', type: 'warning',
}).then(() => { }
deletePhysicalTest(id) ).then(() => {
.then(() => { deletePhysicalTest(id).then(() => {
loadPhysicalTestList() loadPhysicalTestList()
}).catch(() => {
}) })
.catch(() => {})
}) })
} }
const resetForm = (formEl: FormInstance | undefined) => { const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return
formEl.resetFields() formEl.resetFields()
@ -424,5 +177,5 @@ const resetForm = (formEl: FormInstance | undefined) => {
display: -webkit-box; display: -webkit-box;
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
} }
</style> </style>

300
admin/src/app/views/physical_test/physical_test_edit.vue

@ -0,0 +1,300 @@
<template>
<div class="main-container">
<div class="detail-head">
<div class="left" @click="back()">
<span class="iconfont iconxiangzuojiantou !text-xs"></span>
<span class="ml-[1px]">{{t('returnToPreviousPage')}}</span>
</div>
<span class="adorn">|</span>
<span class="right">{{ pageName }}</span>
</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('resourceId')" prop="resource_id">
<el-input v-model="formData.resource_id" clearable :placeholder="t('resourceIdPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('studentId')" prop="student_id">
<el-input v-model="formData.student_id" clearable :placeholder="t('studentIdPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('height')" prop="height">
<el-input v-model="formData.height" clearable :placeholder="t('heightPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('weight')" prop="weight">
<el-input v-model="formData.weight" clearable :placeholder="t('weightPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('coachId')" prop="coach_id">
<el-input v-model="formData.coach_id" clearable :placeholder="t('coachIdPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('createdAt')" >
<el-input v-model="formData.created_at" clearable :placeholder="t('createdAtPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('updatedAt')" >
<el-input v-model="formData.updated_at" clearable :placeholder="t('updatedAtPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('seatedForwardBend')" >
<el-input v-model="formData.seated_forward_bend" clearable :placeholder="t('seatedForwardBendPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('sitUps')" >
<el-input v-model="formData.sit_ups" clearable :placeholder="t('sitUpsPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('pushUps')" >
<el-input v-model="formData.push_ups" clearable :placeholder="t('pushUpsPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('flamingoBalance')" >
<el-input v-model="formData.flamingo_balance" clearable :placeholder="t('flamingoBalancePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('thirtySecJump')" >
<el-input v-model="formData.thirty_sec_jump" clearable :placeholder="t('thirtySecJumpPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('standingLongJump')" >
<el-input v-model="formData.standing_long_jump" clearable :placeholder="t('standingLongJumpPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('agilityRun')" >
<el-input v-model="formData.agility_run" clearable :placeholder="t('agilityRunPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('balanceBeam')" >
<el-input v-model="formData.balance_beam" clearable :placeholder="t('balanceBeamPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('tennisThrow')" >
<el-input v-model="formData.tennis_throw" clearable :placeholder="t('tennisThrowPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('tenMeterShuttleRun')" >
<el-input v-model="formData.ten_meter_shuttle_run" clearable :placeholder="t('tenMeterShuttleRunPlaceholder')" class="input-width" />
</el-form-item>
</el-form>
</el-card>
<div class="fixed-footer-wrap">
<div class="fixed-footer">
<el-button type="primary" @click="onSave(formRef)">{{ t('save') }}</el-button>
<el-button @click="back()">{{ t('cancel') }}</el-button>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getPhysicalTestInfo,addPhysicalTest,editPhysicalTest } from '@/app/api/physical_test';
import { useRoute } from 'vue-router'
const route = useRoute()
const id:number = parseInt(route.query.id);
const loading = ref(false)
const pageName = route.meta.title
/**
* 表单数据
*/
const initialFormData = {
id: 0,
resource_id: 0,
student_id: 0,
height: '',
weight: '',
coach_id: 0,
created_at: '',
updated_at: '',
seated_forward_bend: '',
sit_ups: '',
push_ups: '',
flamingo_balance: '',
thirty_sec_jump: '',
standing_long_jump: '',
agility_run: '',
balance_beam: '',
tennis_throw: '',
ten_meter_shuttle_run: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
const setFormData = async (id:number = 0) => {
Object.assign(formData, initialFormData)
const data = await (await getPhysicalTestInfo(id)).data
Object.keys(formData).forEach((key: string) => {
if (data[key] != undefined) formData[key] = data[key]
})
}
if(id) setFormData(id);
const formRef = ref<FormInstance>()
//
const selectData = ref<any[]>([])
//
//
const formRules = computed(() => {
return {
resource_id: [
{ required: true, message: t('resourceIdPlaceholder'), trigger: 'blur' },
]
,
student_id: [
{ required: true, message: t('studentIdPlaceholder'), trigger: 'blur' },
]
,
height: [
{ required: true, message: t('heightPlaceholder'), trigger: 'blur' },
]
,
weight: [
{ required: true, message: t('weightPlaceholder'), trigger: 'blur' },
]
,
coach_id: [
{ required: true, message: t('coachIdPlaceholder'), trigger: 'blur' },
]
,
created_at: [
{ required: true, message: t('createdAtPlaceholder'), trigger: 'blur' },
]
,
updated_at: [
{ required: true, message: t('updatedAtPlaceholder'), trigger: 'blur' },
]
,
seated_forward_bend: [
{ required: true, message: t('seatedForwardBendPlaceholder'), trigger: 'blur' },
]
,
sit_ups: [
{ required: true, message: t('sitUpsPlaceholder'), trigger: 'blur' },
]
,
push_ups: [
{ required: true, message: t('pushUpsPlaceholder'), trigger: 'blur' },
]
,
flamingo_balance: [
{ required: true, message: t('flamingoBalancePlaceholder'), trigger: 'blur' },
]
,
thirty_sec_jump: [
{ required: true, message: t('thirtySecJumpPlaceholder'), trigger: 'blur' },
]
,
standing_long_jump: [
{ required: true, message: t('standingLongJumpPlaceholder'), trigger: 'blur' },
]
,
agility_run: [
{ required: true, message: t('agilityRunPlaceholder'), trigger: 'blur' },
]
,
balance_beam: [
{ required: true, message: t('balanceBeamPlaceholder'), trigger: 'blur' },
]
,
tennis_throw: [
{ required: true, message: t('tennisThrowPlaceholder'), trigger: 'blur' },
]
,
ten_meter_shuttle_run: [
{ required: true, message: t('tenMeterShuttleRunPlaceholder'), trigger: 'blur' },
]
,
}
})
const onSave = async (formEl: FormInstance | undefined) => {
if (loading.value || !formEl) return
await formEl.validate(async (valid) => {
if (valid) {
loading.value = true
let data = formData
const save = id ? editPhysicalTest : addPhysicalTest
save(data).then(res => {
loading.value = false
history.back()
}).catch(err => {
loading.value = false
})
}
})
}
//
const mobileVerify = (rule: any, value: any, callback: any) => {
if (value && !/^1[3-9]\d{9}$/.test(value)) {
callback(new Error(t('generateMobile')))
} else {
callback()
}
}
//
const idCardVerify = (rule: any, value: any, callback: any) => {
if (value && !/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)) {
callback(new Error(t('generateIdCard')))
} else {
callback()
}
}
//
const emailVerify = (rule: any, value: any, callback: any) => {
if (value && !/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)) {
callback(new Error(t('generateEmail')))
} else {
callback()
}
}
//
const numberVerify = (rule: any, value: any, callback: any) => {
if (!Number.isInteger(value)) {
callback(new Error(t('generateNumber')))
} else {
callback()
}
}
const back = () => {
history.back()
}
</script>
<style lang="scss" scoped></style>

4
admin/src/router/index.ts

@ -1,4 +1,4 @@
import { createRouter, createWebHistory, RouteLocationRaw, RouteLocationNormalizedLoaded } from 'vue-router' import { createRouter, createWebHashHistory, RouteLocationRaw, RouteLocationNormalizedLoaded } from 'vue-router'
import NProgress from 'nprogress' import NProgress from 'nprogress'
import 'nprogress/nprogress.css' import 'nprogress/nprogress.css'
import { STATIC_ROUTES, NO_LOGIN_ROUTES, ROOT_ROUTER, ADMIN_ROUTE, findFirstValidRoute } from './routers' import { STATIC_ROUTES, NO_LOGIN_ROUTES, ROOT_ROUTER, ADMIN_ROUTE, findFirstValidRoute } from './routers'
@ -8,7 +8,7 @@ import useUserStore from '@/stores/modules/user'
import { setWindowTitle, getAppType, urlToRouteRaw } from '@/utils/common' import { setWindowTitle, getAppType, urlToRouteRaw } from '@/utils/common'
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHashHistory(import.meta.env.BASE_URL),
routes: [ADMIN_ROUTE, ...STATIC_ROUTES] routes: [ADMIN_ROUTE, ...STATIC_ROUTES]
}) })

32
admin/src/utils/common.ts

@ -1,6 +1,6 @@
import type { App } from 'vue' import type {App} from 'vue'
import * as ElementPlusIconsVue from '@element-plus/icons-vue' import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import { useCssVar, useTitle } from '@vueuse/core' import {useCssVar, useTitle} from '@vueuse/core'
import colorFunction from 'css-color-function' import colorFunction from 'css-color-function'
import storage from './storage' import storage from './storage'
@ -40,7 +40,7 @@ export function setThemeColor(color: string, mode: string = 'light'): void {
} }
Object.keys(colors[mode]).forEach((key) => { Object.keys(colors[mode]).forEach((key) => {
useCssVar('--el-color-primary' + '-' + key, null).value = colorFunction.convert(`color(${ color } ${ colors[mode][key] })`) useCssVar('--el-color-primary' + '-' + key, null).value = colorFunction.convert(`color(${color} ${colors[mode][key]})`)
}) })
} }
@ -82,7 +82,7 @@ export function getToken(): null | string {
* @returns * @returns
*/ */
export function setToken(token: string): void { export function setToken(token: string): void {
storage.set({ key: 'token', data: token }) storage.set({key: 'token', data: token})
} }
/** /**
@ -127,7 +127,7 @@ export function isUrl(str: string): boolean {
* @returns * @returns
*/ */
export function img(path: string): string { export function img(path: string): string {
return isUrl(path) ? path : `${ import.meta.env.VITE_IMG_DOMAIN || location.origin }/${ path }` return isUrl(path) ? path : `${import.meta.env.VITE_IMG_DOMAIN || location.origin}/${path}`
} }
/** /**
@ -169,7 +169,7 @@ export function urlToRouteRaw(url: string) {
query[name] = value query[name] = value
}) })
return { path, query } return {path, query}
} }
const isArray = (value: any) => { const isArray = (value: any) => {
@ -230,7 +230,7 @@ export function guid(len = 10, firstU = true, radix: any = null) {
// 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
if (firstU) { if (firstU) {
uuid.shift() uuid.shift()
return `u${ uuid.join('') }` return `u${uuid.join('')}`
} }
return uuid.join('') return uuid.join('')
} }
@ -305,7 +305,7 @@ export function filterDigit(event: any) {
const decimalParts = event.target.value.split('.'); const decimalParts = event.target.value.split('.');
if (decimalParts.length > 1 && decimalParts[1].length > 2) { if (decimalParts.length > 1 && decimalParts[1].length > 2) {
// 如果有小数部分且超过两位,则截取前两位 // 如果有小数部分且超过两位,则截取前两位
event.target.value = `${ decimalParts[0] }.${ decimalParts[1].slice(0, 2) }`; event.target.value = `${decimalParts[0]}.${decimalParts[1].slice(0, 2)}`;
} }
} }
@ -333,6 +333,7 @@ export function filterSpecial(event: any) {
export function filterBlank(event: any) { export function filterBlank(event: any) {
event.target.value = event.target.value.replace(/\s/g, ''); event.target.value = event.target.value.replace(/\s/g, '');
} }
export function importIconFontCss() { export function importIconFontCss() {
// const modulesFiles = {}; // import.meta.glob('@/styles/icon/official-iconfont.css', { eager: true }) // const modulesFiles = {}; // import.meta.glob('@/styles/icon/official-iconfont.css', { eager: true })
// const modulesFiles = import.meta.glob('@/addon/**/assets/icon/*.css', { eager: true }) // const modulesFiles = import.meta.glob('@/addon/**/assets/icon/*.css', { eager: true })
@ -400,7 +401,7 @@ export function setTablePageStorage(page: any = 1, limit: any = 10, where: any =
delete data[Object.keys(data)[0]]; delete data[Object.keys(data)[0]];
} }
storage.set({ key: 'tablePageStorage', data }); storage.set({key: 'tablePageStorage', data});
} }
/** /**
@ -420,3 +421,16 @@ export function getTablePageStorage(where: any = {}) {
} }
return data; return data;
} }
/**
* path字符串中获取?
*/
export function getQueryString(path: string, name: string) {
var reg = new RegExp('[?&]' + name + '=([^&]+)', 'i');
var r = path.match(reg);
console.log('r', r);
if (r != null) {
return decodeURIComponent(r[1]);
}
return '';
}

22
niucloud/app/adminapi/controller/physical_test/PhysicalTest.php

@ -31,20 +31,8 @@ class PhysicalTest extends BaseAdminController
["resource_id",""], ["resource_id",""],
["student_id",""], ["student_id",""],
["height",""], ["height",""],
["weight",""],
["coach_id",""],
["created_at",""], ["created_at",""],
["updated_at",""], ["updated_at",""]
["seated_forward_bend",""],
["sit_ups",""],
["push_ups",""],
["flamingo_balance",""],
["thirty_sec_jump",""],
["standing_long_jump",""],
["agility_run",""],
["balance_beam",""],
["tennis_throw",""],
["ten_meter_shuttle_run",""]
]); ]);
return success((new PhysicalTestService())->getPage($data)); return success((new PhysicalTestService())->getPage($data));
} }
@ -69,8 +57,8 @@ class PhysicalTest extends BaseAdminController
["height",0.00], ["height",0.00],
["weight",0.00], ["weight",0.00],
["coach_id",0], ["coach_id",0],
["created_at",1747389000], ["created_at",1747576653],
["updated_at",1747389000], ["updated_at",1747576653],
["seated_forward_bend",0.00], ["seated_forward_bend",0.00],
["sit_ups",0.00], ["sit_ups",0.00],
["push_ups",0.00], ["push_ups",0.00],
@ -99,8 +87,8 @@ class PhysicalTest extends BaseAdminController
["height",0.00], ["height",0.00],
["weight",0.00], ["weight",0.00],
["coach_id",0], ["coach_id",0],
["created_at",1747389000], ["created_at",1747576653],
["updated_at",1747389000], ["updated_at",1747576653],
["seated_forward_bend",0.00], ["seated_forward_bend",0.00],
["sit_ups",0.00], ["sit_ups",0.00],
["push_ups",0.00], ["push_ups",0.00],

1
niucloud/app/adminapi/route/physical_test.php

@ -15,6 +15,7 @@ use app\adminapi\middleware\AdminCheckRole;
use app\adminapi\middleware\AdminCheckToken; use app\adminapi\middleware\AdminCheckToken;
use app\adminapi\middleware\AdminLog; use app\adminapi\middleware\AdminLog;
// USER_CODE_BEGIN -- physical_test // USER_CODE_BEGIN -- physical_test
Route::group('physical_test', function () { Route::group('physical_test', function () {

160
niucloud/app/model/physical_test/PhysicalTest.php

@ -43,19 +43,7 @@ class PhysicalTest extends BaseModel
/** /**
* 搜索器:体测体测编号 * 搜索器:体测客户姓名
* @param $value
* @param $data
*/
public function searchIdAttr($query, $value, $data)
{
if ($value) {
$query->where("id", $value);
}
}
/**
* 搜索器:体测资源ID
* @param $value * @param $value
* @param $data * @param $data
*/ */
@ -67,7 +55,7 @@ class PhysicalTest extends BaseModel
} }
/** /**
* 搜索器:体测学员ID * 搜索器:体测学员姓名
* @param $value * @param $value
* @param $data * @param $data
*/ */
@ -90,30 +78,6 @@ class PhysicalTest extends BaseModel
} }
} }
/**
* 搜索器:体测体重
* @param $value
* @param $data
*/
public function searchWeightAttr($query, $value, $data)
{
if ($value) {
$query->where("weight", $value);
}
}
/**
* 搜索器:体测教练ID
* @param $value
* @param $data
*/
public function searchCoachIdAttr($query, $value, $data)
{
if ($value) {
$query->where("coach_id", $value);
}
}
/** /**
* 搜索器:体测创建时间 * 搜索器:体测创建时间
* @param $value * @param $value
@ -138,126 +102,6 @@ class PhysicalTest extends BaseModel
} }
} }
/**
* 搜索器:体测坐位体前屈
* @param $value
* @param $data
*/
public function searchSeatedForwardBendAttr($query, $value, $data)
{
if ($value) {
$query->where("seated_forward_bend", $value);
}
}
/**
* 搜索器:体测仰卧卷腹
* @param $value
* @param $data
*/
public function searchSitUpsAttr($query, $value, $data)
{
if ($value) {
$query->where("sit_ups", $value);
}
}
/**
* 搜索器:体测九十度仰卧撑
* @param $value
* @param $data
*/
public function searchPushUpsAttr($query, $value, $data)
{
if ($value) {
$query->where("push_ups", $value);
}
}
/**
* 搜索器:体测火烈鸟平衡测试
* @param $value
* @param $data
*/
public function searchFlamingoBalanceAttr($query, $value, $data)
{
if ($value) {
$query->where("flamingo_balance", $value);
}
}
/**
* 搜索器:体测三十秒双脚连续跳
* @param $value
* @param $data
*/
public function searchThirtySecJumpAttr($query, $value, $data)
{
if ($value) {
$query->where("thirty_sec_jump", $value);
}
}
/**
* 搜索器:体测立定跳远
* @param $value
* @param $data
*/
public function searchStandingLongJumpAttr($query, $value, $data)
{
if ($value) {
$query->where("standing_long_jump", $value);
}
}
/**
* 搜索器:体测4乘10m灵敏折返跑
* @param $value
* @param $data
*/
public function searchAgilityRunAttr($query, $value, $data)
{
if ($value) {
$query->where("agility_run", $value);
}
}
/**
* 搜索器:体测走平衡木
* @param $value
* @param $data
*/
public function searchBalanceBeamAttr($query, $value, $data)
{
if ($value) {
$query->where("balance_beam", $value);
}
}
/**
* 搜索器:体测网球掷远
* @param $value
* @param $data
*/
public function searchTennisThrowAttr($query, $value, $data)
{
if ($value) {
$query->where("tennis_throw", $value);
}
}
/**
* 搜索器:体测十米往返跑
* @param $value
* @param $data
*/
public function searchTenMeterShuttleRunAttr($query, $value, $data)
{
if ($value) {
$query->where("ten_meter_shuttle_run", $value);
}
}

2
niucloud/app/service/admin/physical_test/PhysicalTestService.php

@ -39,7 +39,7 @@ class PhysicalTestService extends BaseAdminService
$field = 'id,resource_id,student_id,height,weight,coach_id,created_at,updated_at,seated_forward_bend,sit_ups,push_ups,flamingo_balance,thirty_sec_jump,standing_long_jump,agility_run,balance_beam,tennis_throw,ten_meter_shuttle_run'; $field = 'id,resource_id,student_id,height,weight,coach_id,created_at,updated_at,seated_forward_bend,sit_ups,push_ups,flamingo_balance,thirty_sec_jump,standing_long_jump,agility_run,balance_beam,tennis_throw,ten_meter_shuttle_run';
$order = 'id desc'; $order = 'id desc';
$search_model = $this->model->withSearch(["id","resource_id","student_id","height","weight","coach_id","created_at","updated_at","seated_forward_bend","sit_ups","push_ups","flamingo_balance","thirty_sec_jump","standing_long_jump","agility_run","balance_beam","tennis_throw","ten_meter_shuttle_run"], $where)->field($field)->order($order); $search_model = $this->model->withSearch(["resource_id","student_id","height","created_at","updated_at"], $where)->field($field)->order($order);
$list = $this->pageQuery($search_model); $list = $this->pageQuery($search_model);
return $list; return $list;
} }

Loading…
Cancel
Save