mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-12 04:16:47 +08:00
新增讲师接口修改
This commit is contained in:
@@ -47,7 +47,7 @@ export const fileUp = (obj) => http.post('/file/upload', obj)
|
|||||||
//组织树查询讲师
|
//组织树查询讲师
|
||||||
export const getTeacherByDepartId = (obj) => http.get(`/admin/thirdApi/user/list?departId=${obj.organizationId}&pageNo=1&pageSize=100&keyword=`)
|
export const getTeacherByDepartId = (obj) => http.get(`/admin/thirdApi/user/list?departId=${obj.organizationId}&pageNo=1&pageSize=100&keyword=`)
|
||||||
//根据姓名工号查询讲师
|
//根据姓名工号查询讲师
|
||||||
export const getTeacherByNameOrUserNo = (obj) => https.post(`/user/teacherList`,obj)
|
export const getTeacherByNameOrUserNo = (obj) => https.post(`/user/noTeacherList`,obj)
|
||||||
// export const getTeacherByNameOrUserNo = (obj) => https.post(`/user/teacherList?keyword=${obj.nameOrUserNo}&pageNo=1&pageSize=50&departId=`)
|
// export const getTeacherByNameOrUserNo = (obj) => https.post(`/user/teacherList?keyword=${obj.nameOrUserNo}&pageNo=1&pageSize=50&departId=`)
|
||||||
//根据userid获取讲师体系信息
|
//根据userid获取讲师体系信息
|
||||||
export const getSystemInfoByUserId = (id) => http.get(`/admin/system/getSystemInfoByUserId?id=${id}`)
|
export const getSystemInfoByUserId = (id) => http.get(`/admin/system/getSystemInfoByUserId?id=${id}`)
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ import { ref,defineProps,defineEmits,watch,onMounted } from 'vue';
|
|||||||
import { request, useRequest} from "@/api/request";
|
import { request, useRequest} from "@/api/request";
|
||||||
import { message } from "ant-design-vue"
|
import { message } from "ant-design-vue"
|
||||||
import { ORG_CHILD_LIST, ORG_LIST,USER_LIST_PAGE} from "@/api/apis";
|
import { ORG_CHILD_LIST, ORG_LIST,USER_LIST_PAGE} from "@/api/apis";
|
||||||
import { getTeacherByDepartId,getTeacherByNameOrUserNo,getSystemInfoByUserId } from "@/api/Lecturer";
|
import { getTeacherByDepartId,getTeacherByNameOrUserNo,getSystemInfoByUserId,getTeacherList } from "@/api/Lecturer";
|
||||||
import { ZoomInOutlined,UserOutlined } from '@ant-design/icons-vue';
|
import { ZoomInOutlined,UserOutlined } from '@ant-design/icons-vue';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
value:{
|
value:{
|
||||||
@@ -110,6 +110,10 @@ const props = defineProps({
|
|||||||
disabled: {
|
disabled: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
|
},
|
||||||
|
lecturer: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const emit = defineEmits(['update:value','update:lable','update:system','update:level','update:newlable','update:orgId','update:id','update:payrollPlaceCode','update:payrollPlaceName'])
|
const emit = defineEmits(['update:value','update:lable','update:system','update:level','update:newlable','update:orgId','update:id','update:payrollPlaceCode','update:payrollPlaceName'])
|
||||||
@@ -154,6 +158,7 @@ const handleChange = (e,l) => {
|
|||||||
neworgName.value= orgName.value.split('/')
|
neworgName.value= orgName.value.split('/')
|
||||||
neworgName.value= neworgName.value[ neworgName.value.length-1]
|
neworgName.value= neworgName.value[ neworgName.value.length-1]
|
||||||
}
|
}
|
||||||
|
emit('tlevel',l)
|
||||||
};
|
};
|
||||||
function debounce(func, wait) {
|
function debounce(func, wait) {
|
||||||
let timeout;
|
let timeout;
|
||||||
@@ -181,7 +186,7 @@ const searchMember = (keyword) => {
|
|||||||
pageSize:'50',
|
pageSize:'50',
|
||||||
departId:'',
|
departId:'',
|
||||||
}
|
}
|
||||||
getTeacherByNameOrUserNo(obj).then((res) => {
|
props.lecturer && getTeacherByNameOrUserNo(obj).then((res) => {
|
||||||
if(res.data.status == 200){
|
if(res.data.status == 200){
|
||||||
loading.value = false
|
loading.value = false
|
||||||
options.value = res.data.result.list.map((item) => {
|
options.value = res.data.result.list.map((item) => {
|
||||||
@@ -205,6 +210,36 @@ const searchMember = (keyword) => {
|
|||||||
}).catch(()=>{
|
}).catch(()=>{
|
||||||
loading.value = false
|
loading.value = false
|
||||||
})
|
})
|
||||||
|
const params = {
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 50,
|
||||||
|
name: keyword
|
||||||
|
}
|
||||||
|
!props.lecturer && getTeacherList(params).then(res=>{
|
||||||
|
console.log(res,'ressss')
|
||||||
|
if(res.data.code == 200){
|
||||||
|
loading.value = false
|
||||||
|
options.value = res.data.data.records.map((item) => {
|
||||||
|
return {
|
||||||
|
value: item.name+'/'+item.userNo,
|
||||||
|
label: item.name+'('+item.userNo+')'+item.tsystemName,
|
||||||
|
system: item.name+'('+item.userNo+')'+item.tsystemName,
|
||||||
|
level: item.name+'('+item.userNo+')'+item.sLevelName,
|
||||||
|
key: item.id,
|
||||||
|
orgName: item.orgName,
|
||||||
|
orgId: item.departId,
|
||||||
|
tSystemName:item.tsystemName,
|
||||||
|
sLevelName:item.sLevelName,
|
||||||
|
payrollPlaceCode: item.payrollPlaceCode,
|
||||||
|
payrollPlaceName:item.payrollPlaceName,
|
||||||
|
tlevelName: item.tlevelName, //讲师级别
|
||||||
|
tlevelId: item.tlevelId, //讲师级别id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}).catch(()=>{
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
};
|
};
|
||||||
const debounceObject = debounce(searchMember, 1500);
|
const debounceObject = debounce(searchMember, 1500);
|
||||||
const filterOption = (input, option) => {
|
const filterOption = (input, option) => {
|
||||||
@@ -313,10 +348,10 @@ watch(()=>teacherId.value,(val)=>{
|
|||||||
getSystemInfoByUserId(teacherId.value).then(res=>{
|
getSystemInfoByUserId(teacherId.value).then(res=>{
|
||||||
if(res.data.code == 200){
|
if(res.data.code == 200){
|
||||||
systemName.value = {
|
systemName.value = {
|
||||||
systemId:res.data.data.id,
|
systemId:res.data.data?.id,
|
||||||
systemName:res.data.data.systemName,
|
systemName:res.data.data?.systemName,
|
||||||
systemCode:res.data.data.systemCode,
|
systemCode:res.data.data?.systemCode,
|
||||||
levelVoList: res.data.data.levelVoList.map(item=>{
|
levelVoList: res.data.data?.levelVoList?.map(item=>{
|
||||||
return (
|
return (
|
||||||
item.label = item.levelName,
|
item.label = item.levelName,
|
||||||
item.value = item.id,
|
item.value = item.id,
|
||||||
|
|||||||
@@ -144,7 +144,7 @@
|
|||||||
<a-row :gutter="16">
|
<a-row :gutter="16">
|
||||||
<a-col :span="24">
|
<a-col :span="24">
|
||||||
<a-form-item label="讲师名称" name="name">
|
<a-form-item label="讲师名称" name="name">
|
||||||
<SearchTeacher :disabled="!!id" v-model:value="formParam.name" v-model:lable="formParam.orgNames" v-model:orgId="formParam.orgId" v-model:id="formParam.id"
|
<SearchTeacher :lecturer="true" :disabled="!!id" v-model:value="formParam.name" v-model:lable="formParam.orgNames" v-model:orgId="formParam.orgId" v-model:id="formParam.id"
|
||||||
v-model:system="tSystemNames" v-model:level="formParam.tlevelId"></SearchTeacher>
|
v-model:system="tSystemNames" v-model:level="formParam.tlevelId"></SearchTeacher>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
|||||||
@@ -160,7 +160,7 @@
|
|||||||
<a-row :gutter="16">
|
<a-row :gutter="16">
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<a-form-item label="讲师名称" name="name">
|
<a-form-item label="讲师名称" name="name">
|
||||||
<SearchTeacher v-model:value="formParam.name" v-model:lable="formParam.orgName"
|
<SearchTeacher @tlevel="tlevelChange" v-model:value="formParam.name" v-model:lable="formParam.orgName"
|
||||||
v-model:system="tSystemNames" v-model:level="formParam.tlevelId"></SearchTeacher>
|
v-model:system="tSystemNames" v-model:level="formParam.tlevelId"></SearchTeacher>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
@@ -188,10 +188,10 @@
|
|||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<a-form-item label="讲师级别" name="tlevelId">
|
<a-form-item label="讲师级别" name="tlevelName">
|
||||||
<a-select class="draitem" v-model:value="formParam.tlevelId" placeholder="请选择讲师级别" allowClear
|
<a-input disabled v-model:value="formParam.tlevelName" class="draitem"
|
||||||
:options="tSystemNames.levelVoList" @change="handleformlevel">
|
placeholder="自动带出讲师级别" allowClear showSearch>
|
||||||
</a-select>
|
</a-input>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
@@ -886,6 +886,10 @@ export default {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
const tlevelChange = (e) => {
|
||||||
|
state.formParam.tlevelName = e?.tlevelName
|
||||||
|
state.formParam.tlevelId = e?.tlevelId
|
||||||
|
}
|
||||||
//保存
|
//保存
|
||||||
const createTeacherDialog = async () => {
|
const createTeacherDialog = async () => {
|
||||||
state.formParam.teacherName = state.formParam.name?.split('/')[0]
|
state.formParam.teacherName = state.formParam.name?.split('/')[0]
|
||||||
@@ -1137,7 +1141,7 @@ export default {
|
|||||||
const rules = {
|
const rules = {
|
||||||
name: [{ required: true, message:'',log: '讲师不能为空' }],
|
name: [{ required: true, message:'',log: '讲师不能为空' }],
|
||||||
orgName: [{ required: true, message: '',log:'讲师组织不能为空' }],
|
orgName: [{ required: true, message: '',log:'讲师组织不能为空' }],
|
||||||
tlevelId: [{ required: true, message: '',log:'讲师级别不能为空' }],
|
tlevelName: [{ required: true, message: '',log:'讲师级别不能为空' }],
|
||||||
tsystemName: [{ required: true, message: '',log:'讲师体系不能为空' }],
|
tsystemName: [{ required: true, message: '',log:'讲师体系不能为空' }],
|
||||||
courseTypeId: [{ required: true, message: '',log:'内容分类不能为空' }],
|
courseTypeId: [{ required: true, message: '',log:'内容分类不能为空' }],
|
||||||
courseName: [{ required: true, message: '',log:'课程名称不能为空' }],
|
courseName: [{ required: true, message: '',log:'课程名称不能为空' }],
|
||||||
@@ -1152,10 +1156,6 @@ export default {
|
|||||||
// state.searchParam.name = t;
|
// state.searchParam.name = t;
|
||||||
// // state.searchParam.trainorgName=orgName
|
// // state.searchParam.trainorgName=orgName
|
||||||
// }
|
// }
|
||||||
const handleformlevel = (val) => {
|
|
||||||
state.formParam.tlevelName = state.tSystemNames.levelVoList.find(item=>item.id===val)?.levelName
|
|
||||||
state.formParam.tlevelId = state.tSystemNames.levelVoList.find(item=>item.id===val)?.id
|
|
||||||
}
|
|
||||||
//导出功能
|
//导出功能
|
||||||
const handleExport = () => {
|
const handleExport = () => {
|
||||||
window.open(
|
window.open(
|
||||||
@@ -1233,7 +1233,6 @@ const enterPressHadlerSearch = e => {
|
|||||||
enterPressHadlerSearch,
|
enterPressHadlerSearch,
|
||||||
treetype,
|
treetype,
|
||||||
validateField,
|
validateField,
|
||||||
handleformlevel,
|
|
||||||
// managerChange,
|
// managerChange,
|
||||||
clearNonNumber,
|
clearNonNumber,
|
||||||
clearscoreNumber,
|
clearscoreNumber,
|
||||||
@@ -1267,6 +1266,7 @@ const enterPressHadlerSearch = e => {
|
|||||||
handleModify,
|
handleModify,
|
||||||
closeDeleteTeacher,
|
closeDeleteTeacher,
|
||||||
createTeacherDialog,
|
createTeacherDialog,
|
||||||
|
tlevelChange,
|
||||||
getTableDate, //list接口数据调用
|
getTableDate, //list接口数据调用
|
||||||
// getStu
|
// getStu
|
||||||
LecturerSystemLista,
|
LecturerSystemLista,
|
||||||
|
|||||||
@@ -73,7 +73,7 @@
|
|||||||
<a-row :gutter="16">
|
<a-row :gutter="16">
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<a-form-item label="讲师名称" name="name">
|
<a-form-item label="讲师名称" name="name">
|
||||||
<SearchTeacher v-model:id="formParam.teacherId" v-model:value="formParam.name" v-model:orgId="formParam.orgId" v-model:lable="formParam.orgName" v-model:user="formParam.userNo"
|
<SearchTeacher @tlevel="tlevelChange" v-model:id="formParam.teacherId" v-model:value="formParam.name" v-model:orgId="formParam.orgId" v-model:lable="formParam.orgName" v-model:user="formParam.userNo"
|
||||||
v-model:system="tSystemNames" v-model:payrollPlaceCode="formParam.payrollPlaceId"
|
v-model:system="tSystemNames" v-model:payrollPlaceCode="formParam.payrollPlaceId"
|
||||||
v-model:payrollPlaceName="formParam.payrollPlace" v-model:level="formParam.tlevelId" ></SearchTeacher>
|
v-model:payrollPlaceName="formParam.payrollPlace" v-model:level="formParam.tlevelId" ></SearchTeacher>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
@@ -109,10 +109,10 @@
|
|||||||
</a-row>
|
</a-row>
|
||||||
<a-row :gutter="16">
|
<a-row :gutter="16">
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<a-form-item label="讲师级别" name="tlevelId">
|
<a-form-item label="讲师级别" name="tlevelName">
|
||||||
<a-select class="draitem" v-model:value="formParam.tlevelId" placeholder="请选择讲师级别" allowClear
|
<a-input disabled v-model:value="formParam.tlevelName" class="draitem"
|
||||||
:options="tSystemNames.levelVoList" @change="handleformlevel">
|
placeholder="自动带出讲师级别" allowClear showSearch>
|
||||||
</a-select>
|
</a-input>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
@@ -422,8 +422,9 @@ export default {
|
|||||||
{ value: '4', label: "作业员如模培训" },
|
{ value: '4', label: "作业员如模培训" },
|
||||||
])
|
])
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const handleformlevel = (val) => {
|
const tlevelChange = (e) => {
|
||||||
state.formParam.tlevelName = state.tSystemNames?.levelVoList?.find(item=>item.id===val)?.levelName
|
state.formParam.tlevelName = e?.tlevelName
|
||||||
|
state.formParam.tlevelId = e?.tlevelId
|
||||||
}
|
}
|
||||||
watch(()=>state.formParam.name,(val)=>{
|
watch(()=>state.formParam.name,(val)=>{
|
||||||
state.formParam.userNo = val?.split('/')[1]
|
state.formParam.userNo = val?.split('/')[1]
|
||||||
@@ -502,7 +503,7 @@ export default {
|
|||||||
userNo: [{ required: true, message: '',log:'讲师工号不能为空' }],
|
userNo: [{ required: true, message: '',log:'讲师工号不能为空' }],
|
||||||
orgName: [{ required: true, message: '',log:'讲师组织不能为空' }],
|
orgName: [{ required: true, message: '',log:'讲师组织不能为空' }],
|
||||||
tsystemName: [{ required: true, message:'',log: '讲师体系不能为空' }],
|
tsystemName: [{ required: true, message:'',log: '讲师体系不能为空' }],
|
||||||
tlevelId: [{ required: true, message:'',log: ' 讲师级别 不能为空' }],
|
tlevelName: [{ required: true, message:'',log: ' 讲师级别 不能为空' }],
|
||||||
payrollPlace: [{ required: true, message:'',log: '讲师发薪地 不能为空' }],
|
payrollPlace: [{ required: true, message:'',log: '讲师发薪地 不能为空' }],
|
||||||
courseType: [{ required: true, message: '',log:'费用类型不能为空' }],
|
courseType: [{ required: true, message: '',log:'费用类型不能为空' }],
|
||||||
courseName: [{ required: true, message:'',log: '课程名称不能为空' }],
|
courseName: [{ required: true, message:'',log: '课程名称不能为空' }],
|
||||||
@@ -547,6 +548,7 @@ export default {
|
|||||||
state.tSystemNames.systemCode = res.data.data.systemCode
|
state.tSystemNames.systemCode = res.data.data.systemCode
|
||||||
state.tSystemNames.levelVoList = res.data.data.levelVoList
|
state.tSystemNames.levelVoList = res.data.data.levelVoList
|
||||||
state.formParam.tlevelName = res.data.data.tlevelName
|
state.formParam.tlevelName = res.data.data.tlevelName
|
||||||
|
state.formParam.tlevelId = res.data.data.tlevelId
|
||||||
state.formParam.name = res.data.data.name+'/'+res.data.data.userNo
|
state.formParam.name = res.data.data.name+'/'+res.data.data.userNo
|
||||||
state.teachingDate = dayjs(res.data.data.teachingDate)
|
state.teachingDate = dayjs(res.data.data.teachingDate)
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
@@ -657,7 +659,7 @@ export default {
|
|||||||
rules,
|
rules,
|
||||||
recome,
|
recome,
|
||||||
validateField,
|
validateField,
|
||||||
handleformlevel,
|
tlevelChange,
|
||||||
createTeacherDialog,
|
createTeacherDialog,
|
||||||
cancelTeacherDialog,
|
cancelTeacherDialog,
|
||||||
formRef,
|
formRef,
|
||||||
|
|||||||
@@ -161,7 +161,7 @@
|
|||||||
<a-row :gutter="16">
|
<a-row :gutter="16">
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<a-form-item label="讲师名称" name="name">
|
<a-form-item label="讲师名称" name="name">
|
||||||
<SearchTeacher v-model:id="formParam.teacherId" v-model:value="formParam.name" v-model:orgId="formParam.orgId" v-model:lable="formParam.orgName" v-model:user="formParam.userNo"
|
<SearchTeacher @tlevel="tlevelChange" v-model:id="formParam.teacherId" v-model:value="formParam.name" v-model:orgId="formParam.orgId" v-model:lable="formParam.orgName" v-model:user="formParam.userNo"
|
||||||
v-model:system="tSystemNames" v-model:payrollPlaceCode="formParam.payrollPlaceId"
|
v-model:system="tSystemNames" v-model:payrollPlaceCode="formParam.payrollPlaceId"
|
||||||
v-model:payrollPlaceName="formParam.payrollPlace" v-model:level="formParam.tlevelId" ></SearchTeacher>
|
v-model:payrollPlaceName="formParam.payrollPlace" v-model:level="formParam.tlevelId" ></SearchTeacher>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
@@ -203,10 +203,10 @@
|
|||||||
<!-- 讲师级别 levelId 讲师发薪地 payrollPlaceName-->
|
<!-- 讲师级别 levelId 讲师发薪地 payrollPlaceName-->
|
||||||
<a-row :gutter="16">
|
<a-row :gutter="16">
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<a-form-item label="讲师级别" name="tlevelId">
|
<a-form-item label="讲师级别" name="tlevelName">
|
||||||
<a-select class="draitem" v-model:value="formParam.tlevelId" placeholder="请选择讲师级别" allowClear
|
<a-input disabled v-model:value="formParam.tlevelName" class="draitem"
|
||||||
:options="tSystemNames.levelVoList" @change="handleformlevel">
|
placeholder="自动带出讲师级别" allowClear showSearch>
|
||||||
</a-select>
|
</a-input>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
@@ -1106,7 +1106,7 @@ console.log( "讲师体系id" +val);
|
|||||||
userNo: [{ required: true, message: '',log:'讲师工号不能为空' }],
|
userNo: [{ required: true, message: '',log:'讲师工号不能为空' }],
|
||||||
orgName: [{ required: true, message: '',log:'讲师组织不能为空' }],
|
orgName: [{ required: true, message: '',log:'讲师组织不能为空' }],
|
||||||
tsystemName: [{ required: true, message:'',log: '讲师体系不能为空' }],
|
tsystemName: [{ required: true, message:'',log: '讲师体系不能为空' }],
|
||||||
tlevelId: [{ required: true, message:'',log: ' 讲师级别 不能为空' }],
|
tlevelName: [{ required: true, message:'',log: ' 讲师级别 不能为空' }],
|
||||||
payrollPlace: [{ required: true, message:'',log: '讲师发薪地 不能为空' }],
|
payrollPlace: [{ required: true, message:'',log: '讲师发薪地 不能为空' }],
|
||||||
courseType: [{ required: true, message: '',log:'费用类型不能为空' }],
|
courseType: [{ required: true, message: '',log:'费用类型不能为空' }],
|
||||||
courseName: [{ required: true, message:'',log: '课程名称不能为空' }],
|
courseName: [{ required: true, message:'',log: '课程名称不能为空' }],
|
||||||
@@ -1304,8 +1304,9 @@ const column = ref([
|
|||||||
},
|
},
|
||||||
|
|
||||||
])
|
])
|
||||||
const handleformlevel = (val) => {
|
const tlevelChange = (e) => {
|
||||||
state.formParam.tlevelName = state.tSystemNames.levelVoList.find(item=>item.id===val)?.levelName
|
state.formParam.tlevelName = e?.tlevelName
|
||||||
|
state.formParam.tlevelId = e?.tlevelId
|
||||||
}
|
}
|
||||||
//导出功能
|
//导出功能
|
||||||
const handleExport = ()=>{
|
const handleExport = ()=>{
|
||||||
@@ -1406,7 +1407,7 @@ const column = ref([
|
|||||||
selectedRowKeys,
|
selectedRowKeys,
|
||||||
column,
|
column,
|
||||||
tableDatas,
|
tableDatas,
|
||||||
handleformlevel,
|
tlevelChange,
|
||||||
validateField,
|
validateField,
|
||||||
clearstudysNumber,
|
clearstudysNumber,
|
||||||
clearscoreNumber,
|
clearscoreNumber,
|
||||||
|
|||||||
Reference in New Issue
Block a user