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

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}`
}
}
}
}
]