You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
292 lines
6.8 KiB
TypeScript
292 lines
6.8 KiB
TypeScript
import Mock from 'mockjs'
|
|
import { SUCCESS_CODE } from '@/constants'
|
|
|
|
const timeout = 1000
|
|
|
|
// 教师模拟数据
|
|
const teacherList: any[] = []
|
|
|
|
// 生成50条模拟数据
|
|
for (let i = 1; i <= 50; i++) {
|
|
teacherList.push({
|
|
id: `teacher_${i}`,
|
|
teacherNo: `T${String(i).padStart(6, '0')}`,
|
|
realName: Mock.Random.cname(),
|
|
department: Mock.Random.pick([
|
|
'计算机学院',
|
|
'数学学院',
|
|
'物理学院',
|
|
'化学学院',
|
|
'文学院',
|
|
'外国语学院',
|
|
'经济学院',
|
|
'管理学院',
|
|
'法学院',
|
|
'教育学院'
|
|
]),
|
|
phone: Mock.Random.pick([
|
|
'13800138000',
|
|
'13900139000',
|
|
'15000150000',
|
|
'15100151000',
|
|
'18600186000'
|
|
]),
|
|
status: Mock.Random.pick([0, 1]),
|
|
createdTime: Mock.Random.datetime('yyyy-MM-dd HH:mm:ss'),
|
|
updatedTime: Mock.Random.datetime('yyyy-MM-dd HH:mm:ss')
|
|
})
|
|
}
|
|
|
|
export default [
|
|
// 查询教师列表
|
|
{
|
|
url: '/api/teachers',
|
|
method: 'get',
|
|
timeout,
|
|
response: ({ query }: any) => {
|
|
const { pageNo = 1, pageSize = 10, teacherNo, realName, department, status } = query
|
|
|
|
let filteredList = teacherList
|
|
|
|
// 教师工号模糊查询
|
|
if (teacherNo) {
|
|
filteredList = filteredList.filter((item) =>
|
|
item.teacherNo.toLowerCase().includes(teacherNo.toLowerCase())
|
|
)
|
|
}
|
|
|
|
// 真实姓名模糊查询
|
|
if (realName) {
|
|
filteredList = filteredList.filter((item) =>
|
|
item.realName.toLowerCase().includes(realName.toLowerCase())
|
|
)
|
|
}
|
|
|
|
// 部门模糊查询
|
|
if (department) {
|
|
filteredList = filteredList.filter((item) =>
|
|
item.department.toLowerCase().includes(department.toLowerCase())
|
|
)
|
|
}
|
|
|
|
// 状态精确查询
|
|
if (status !== undefined && status !== null && status !== '') {
|
|
filteredList = filteredList.filter((item) => item.status === Number(status))
|
|
}
|
|
|
|
const totals = filteredList.length
|
|
const totalPages = Math.ceil(totals / pageSize)
|
|
const startIndex = (pageNo - 1) * pageSize
|
|
const endIndex = startIndex + Number(pageSize)
|
|
const list = filteredList.slice(startIndex, endIndex)
|
|
|
|
return {
|
|
code: SUCCESS_CODE,
|
|
data: {
|
|
totals,
|
|
totalPages,
|
|
list
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
// 新增教师
|
|
{
|
|
url: '/api/teachers',
|
|
method: 'post',
|
|
timeout,
|
|
response: ({ body }: any) => {
|
|
const newTeacher = {
|
|
id: `teacher_${teacherList.length + 1}`,
|
|
...body,
|
|
status: 1,
|
|
createdTime: Mock.Random.datetime('yyyy-MM-dd HH:mm:ss'),
|
|
updatedTime: Mock.Random.datetime('yyyy-MM-dd HH:mm:ss')
|
|
}
|
|
teacherList.unshift(newTeacher)
|
|
|
|
return {
|
|
code: SUCCESS_CODE,
|
|
data: newTeacher.id,
|
|
msg: '教师添加成功'
|
|
}
|
|
}
|
|
},
|
|
|
|
// 获取教师详情
|
|
{
|
|
url: '/api/teachers/:teacherId',
|
|
method: 'get',
|
|
timeout,
|
|
response: ({ query }: any) => {
|
|
const { teacherId } = query
|
|
const teacher = teacherList.find((item) => item.id === teacherId)
|
|
|
|
if (teacher) {
|
|
return {
|
|
code: SUCCESS_CODE,
|
|
data: teacher
|
|
}
|
|
} else {
|
|
return {
|
|
code: 404,
|
|
msg: '教师不存在'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
// 编辑教师信息
|
|
{
|
|
url: '/api/teachers/:teacherId',
|
|
method: 'put',
|
|
timeout,
|
|
response: ({ query, body }: any) => {
|
|
const { teacherId } = query
|
|
const index = teacherList.findIndex((item) => item.id === teacherId)
|
|
|
|
if (index !== -1) {
|
|
teacherList[index] = {
|
|
...teacherList[index],
|
|
...body,
|
|
updatedTime: Mock.Random.datetime('yyyy-MM-dd HH:mm:ss')
|
|
}
|
|
|
|
return {
|
|
code: SUCCESS_CODE,
|
|
data: null,
|
|
msg: '教师信息修改成功'
|
|
}
|
|
} else {
|
|
return {
|
|
code: 404,
|
|
msg: '教师不存在'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
// 删除教师
|
|
{
|
|
url: '/api/teachers/:teacherId',
|
|
method: 'delete',
|
|
timeout,
|
|
response: ({ query }: any) => {
|
|
const { teacherId } = query
|
|
const index = teacherList.findIndex((item) => item.id === teacherId)
|
|
|
|
if (index !== -1) {
|
|
teacherList.splice(index, 1)
|
|
|
|
return {
|
|
code: SUCCESS_CODE,
|
|
data: null,
|
|
msg: '教师删除成功'
|
|
}
|
|
} else {
|
|
return {
|
|
code: 404,
|
|
msg: '教师不存在'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
// 启用教师
|
|
{
|
|
url: '/api/teachers/:teacherId/enable',
|
|
method: 'put',
|
|
timeout,
|
|
response: ({ query }: any) => {
|
|
const { teacherId } = query
|
|
const teacher = teacherList.find((item) => item.id === teacherId)
|
|
|
|
if (teacher) {
|
|
teacher.status = 1
|
|
teacher.updatedTime = Mock.Random.datetime('yyyy-MM-dd HH:mm:ss')
|
|
|
|
return {
|
|
code: SUCCESS_CODE,
|
|
data: null,
|
|
msg: '教师启用成功'
|
|
}
|
|
} else {
|
|
return {
|
|
code: 404,
|
|
msg: '教师不存在'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
// 禁用教师
|
|
{
|
|
url: '/api/teachers/:teacherId/disable',
|
|
method: 'put',
|
|
timeout,
|
|
response: ({ query }: any) => {
|
|
const { teacherId } = query
|
|
const teacher = teacherList.find((item) => item.id === teacherId)
|
|
|
|
if (teacher) {
|
|
teacher.status = 0
|
|
teacher.updatedTime = Mock.Random.datetime('yyyy-MM-dd HH:mm:ss')
|
|
|
|
return {
|
|
code: SUCCESS_CODE,
|
|
data: null,
|
|
msg: '教师禁用成功'
|
|
}
|
|
} else {
|
|
return {
|
|
code: 404,
|
|
msg: '教师不存在'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
// Excel批量导入教师
|
|
{
|
|
url: '/api/teachers/import',
|
|
method: 'post',
|
|
timeout: 2000,
|
|
response: () => {
|
|
// 模拟导入结果
|
|
const successCount = Mock.Random.integer(5, 10)
|
|
const failureCount = Mock.Random.integer(0, 3)
|
|
const errors: any[] = []
|
|
|
|
// 生成错误明细
|
|
for (let i = 0; i < failureCount; i++) {
|
|
errors.push({
|
|
rowNo: Mock.Random.integer(2, 20),
|
|
errorMsg: Mock.Random.pick([
|
|
'教师工号不能为空',
|
|
'真实姓名不能为空',
|
|
'教师工号已存在',
|
|
'手机号格式不正确'
|
|
]),
|
|
errorData: `T${Mock.Random.integer(100000, 999999)},${Mock.Random.cname()},计算机学院,1380013800${Mock.Random.integer(0, 9)}`
|
|
})
|
|
}
|
|
|
|
return {
|
|
code: SUCCESS_CODE,
|
|
data: {
|
|
success: failureCount === 0,
|
|
totalCount: successCount + failureCount,
|
|
successCount,
|
|
failureCount,
|
|
errors,
|
|
message:
|
|
failureCount === 0
|
|
? `成功导入 ${successCount} 条教师数据`
|
|
: `导入完成,成功 ${successCount} 条,失败 ${failureCount} 条`
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|