Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nanMoMentorPlatform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
node_server
nanMoMentorPlatform
Commits
3fbd2a23
Commit
3fbd2a23
authored
Jun 16, 2026
by
PC-20251223ZVQQ\Administrator
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
问题修复01-easy
parent
7f858e77
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
402 additions
and
43 deletions
+402
-43
growthMessageSummary.ts
src/biz/headteacher/growthMessageSummary.ts
+100
-1
case.ts
src/biz/teacher/case.ts
+19
-6
myStudents.ts
src/biz/teacher/myStudents.ts
+34
-23
teacherInfo.ts
src/biz/teacher/teacherInfo.ts
+148
-0
http_server.ts
src/net/http_server.ts
+1
-1
headteacher.ts
src/routers/headteacher.ts
+28
-0
teacher.ts
src/routers/teacher.ts
+72
-12
No files found.
src/biz/headteacher/growthMessageSummary.ts
View file @
3fbd2a23
/**成长寄语汇总 */
/**成长寄语汇总 */
import
{
selectDataListByParam
,
selectOneDataByParam
,
selectPaginatedDataWithOrder
,
selectDataToTableAssociation
}
from
"../../data/findData"
;
import
{
selectDataListByParam
,
select
DataCountByParam
,
select
OneDataByParam
,
selectPaginatedDataWithOrder
,
selectDataToTableAssociation
}
from
"../../data/findData"
;
import
{
TABLENAME
}
from
"../../config/dbEnum"
;
import
{
TABLENAME
}
from
"../../config/dbEnum"
;
import
{
getCurrentSemester
}
from
"../common/semesterService"
;
import
{
getCurrentSemester
}
from
"../common/semesterService"
;
import
{
BizError
}
from
"../../util/bizError"
;
import
{
BizError
}
from
"../../util/bizError"
;
import
{
ERRORENUM
}
from
"../../config/errorEnum"
;
import
{
ERRORENUM
}
from
"../../config/errorEnum"
;
/**
* 获取所在班学生列表
*
* @param headteacherId
* @param studentName
* @param grade
* @param classId
* @param page
* @param pageSize
*/
export
async
function
getClassStudents
(
headteacherId
:
string
,
studentName
?:
string
,
grade
?:
number
,
page
:
number
=
1
,
pageSize
:
number
=
10
)
{
// 1. 获取班主任所带班级
let
classInfo
=
await
selectOneDataByParam
(
TABLENAME
.
班级表
,
{
head_teacher_id
:
headteacherId
,
});
if
(
!
classInfo
.
data
)
{
throw
new
BizError
(
ERRORENUM
.
权限不足
,
'您不是班主任'
);
}
const
classId
=
classInfo
.
data
.
id
;
// 获取本班所有学生
let
studentAll
=
await
selectDataListByParam
(
TABLENAME
.
用户扩展信息表
,
{
class_id
:
classId
,
roles
:
{
"%like%"
:
'3'
},
// 学生角色代码
});
let
students
=
[];
if
(
studentAll
.
data
.
length
===
0
)
{
return
{
count
:
0
,
dataList
:
[]
};
}
for
(
let
bean
of
studentAll
.
data
)
{
let
student_id
=
bean
.
user_id
;
/**获取学生基本信息 */
let
student
=
await
selectOneDataByParam
(
TABLENAME
.
统一用户表
,
{
user_id
:
student_id
});
let
studentProfile
=
await
selectOneDataByParam
(
TABLENAME
.
用户扩展信息表
,
{
user_id
:
student_id
});
// 按学生姓名筛选
if
(
studentName
&&
student
.
data
&&
student
.
data
.
user_name
&&
!
student
.
data
.
user_name
.
includes
(
studentName
))
{
continue
;
}
/**获取班级信息 */
let
classInfo
=
null
;
if
(
studentProfile
.
data
&&
studentProfile
.
data
.
class_id
)
{
classInfo
=
await
selectOneDataByParam
(
TABLENAME
.
班级表
,
{
id
:
studentProfile
.
data
.
class_id
});
}
// 按年级筛选
if
(
grade
&&
classInfo
.
data
&&
classInfo
.
data
.
grade
!==
grade
)
{
continue
;
}
// 按班级筛选
if
(
classId
&&
studentProfile
.
data
&&
studentProfile
.
data
.
class_id
!==
classId
)
{
continue
;
}
/**获取交流次数 */
let
communications
=
await
selectDataCountByParam
(
TABLENAME
.
交流记录表
,
{
teacher_id
:
headteacherId
,
student_id
:
student_id
});
/**获取最近交流 */
let
lastComm
=
await
selectDataListByParam
(
TABLENAME
.
交流记录表
,
{
teacher_id
:
headteacherId
,
student_id
:
student_id
,
"%orderDesc%"
:
"date"
,
"%limit%"
:
1
});
students
.
push
({
student_id
:
student_id
,
student_name
:
student
.
data
?
student
.
data
.
user_name
:
''
,
gender
:
student
.
data
?
student
.
data
.
gender
:
''
,
class_name
:
classInfo
&&
classInfo
.
data
?
classInfo
.
data
.
full_name
:
''
,
communication_count
:
communications
.
data
||
0
,
last_communication
:
lastComm
.
data
&&
lastComm
.
data
.
length
>
0
?
{
date
:
lastComm
.
data
[
0
].
date
,
content
:
lastComm
.
data
[
0
].
content
?
lastComm
.
data
[
0
].
content
.
substring
(
0
,
50
)
+
'...'
:
''
}
:
null
});
}
// 分页处理
let
total
=
students
.
length
;
let
startIndex
=
(
page
-
1
)
*
pageSize
;
let
endIndex
=
startIndex
+
pageSize
;
let
dataList
=
students
.
slice
(
startIndex
,
endIndex
);
return
{
count
:
total
,
dataList
};
}
/**
/**
* 获取本班学生成长寄语汇总(支持按学生ID、学期ID筛选,均为可选)
* 获取本班学生成长寄语汇总(支持按学生ID、学期ID筛选,均为可选)
...
...
src/biz/teacher/case.ts
View file @
3fbd2a23
...
@@ -52,16 +52,28 @@ export async function createCase(data: any) {
...
@@ -52,16 +52,28 @@ export async function createCase(data: any) {
* @param page 页码
* @param page 页码
* @param pageSize 每页大小
* @param pageSize 每页大小
*/
*/
export
async
function
getCaseList
(
teacherId
:
string
,
case_name
?:
string
,
page
:
number
=
1
,
pageSize
:
number
=
10
)
{
export
async
function
getCaseList
(
teacherId
:
string
,
case_name
?:
string
,
semesterId
?:
number
,
page
:
number
=
1
,
pageSize
:
number
=
10
)
{
/**获取当前学期 */
let
semester
=
await
getCurrentSemester
();
let
selectParam
:
any
=
{
let
selectParam
:
any
=
{
teacher_id
:
teacherId
teacher_id
:
teacherId
};
};
if
(
semester
)
{
let
semesterName
=
""
;
selectParam
.
semester_id
=
semester
.
id
;
if
(
!
semesterId
)
{
/**获取当前学期 */
let
semester
=
await
getCurrentSemester
();
if
(
semester
)
{
selectParam
.
semester_id
=
semester
.
id
;
semesterName
=
semester
.
name
}
}
else
{
selectParam
.
semester_id
=
semesterId
;
let
semester
=
await
selectOneDataByParam
(
TABLENAME
.
学期表
,
{
id
:
semesterId
},
[
"id"
,
"name"
]);
if
(
semester
)
{
semesterName
=
semester
.
data
.
name
}
}
}
// 按案例名称模糊搜索
// 按案例名称模糊搜索
...
@@ -103,6 +115,7 @@ export async function getCaseList(teacherId: string, case_name?: string, page: n
...
@@ -103,6 +115,7 @@ export async function getCaseList(teacherId: string, case_name?: string, page: n
let
dataList
=
result
.
data
.
map
(
item
=>
({
let
dataList
=
result
.
data
.
map
(
item
=>
({
id
:
item
.
id
,
id
:
item
.
id
,
case_name
:
item
.
case_name
,
case_name
:
item
.
case_name
,
semester_name
:
semesterName
,
attachment
:
formatAttachmentField
(
item
.
attachment
),
attachment
:
formatAttachmentField
(
item
.
attachment
),
upload_time
:
item
.
upload_time
upload_time
:
item
.
upload_time
}));
}));
...
...
src/biz/teacher/myStudents.ts
View file @
3fbd2a23
...
@@ -21,21 +21,25 @@ import { COMMUNICATIONTYPE } from "../../config/enum";
...
@@ -21,21 +21,25 @@ import { COMMUNICATIONTYPE } from "../../config/enum";
* @param page 页码
* @param page 页码
* @param pageSize 每页大小
* @param pageSize 每页大小
*/
*/
export
async
function
getMyStudents
(
teacherId
:
string
,
studentName
?:
string
,
grade
?:
number
,
classId
?:
number
,
page
:
number
=
1
,
pageSize
:
number
=
10
)
{
export
async
function
getMyStudents
(
teacherId
:
string
,
studentName
?:
string
,
semesterId
?:
number
,
grade
?:
number
,
classId
?:
number
,
page
:
number
=
1
,
pageSize
:
number
=
10
)
{
/**获取当前学期 */
if
(
!
semesterId
)
{
let
semester
=
await
getCurrentSemester
();
/**获取当前学期 */
let
semester
=
await
getCurrentSemester
();
if
(
!
semester
)
{
return
{
if
(
!
semester
)
{
count
:
0
,
return
{
dataList
:
[]
count
:
0
,
};
dataList
:
[]
};
}
semesterId
=
semester
.
id
;
}
}
/**获取匹配的学生 */
/**获取匹配的学生 */
let
matchParam
:
any
=
{
let
matchParam
:
any
=
{
teacher_id
:
teacherId
,
teacher_id
:
teacherId
,
semester_id
:
semester
.
i
d
,
semester_id
:
semester
I
d
,
is_active
:
true
is_active
:
true
};
};
...
@@ -122,19 +126,23 @@ export async function getMyStudents(teacherId:string, studentName?:string, grade
...
@@ -122,19 +126,23 @@ export async function getMyStudents(teacherId:string, studentName?:string, grade
* @param teacherId 导师ID
* @param teacherId 导师ID
* @param studentId 学生ID
* @param studentId 学生ID
*/
*/
export
async
function
getStudentDetail
(
teacherId
:
string
,
studentId
:
string
)
{
export
async
function
getStudentDetail
(
teacherId
:
string
,
studentId
:
string
,
semesterId
:
string
)
{
/**获取当前学期 */
/**获取当前学期 */
let
semester
=
await
getCurrentSemester
();
if
(
!
semesterId
)
{
let
semester
=
await
getCurrentSemester
();
if
(
!
semester
)
{
throw
new
BizError
(
ERRORENUM
.
操作失败
,
'当前没有进行中的学期'
);
if
(
!
semester
)
{
throw
new
BizError
(
ERRORENUM
.
操作失败
,
'当前没有进行中的学期'
);
}
semesterId
=
semester
.
id
;
}
}
/**验证师生关系 */
/**验证师生关系 */
let
match
=
await
selectOneDataByParam
(
TABLENAME
.
师生匹配表
,
{
let
match
=
await
selectOneDataByParam
(
TABLENAME
.
师生匹配表
,
{
teacher_id
:
teacherId
,
teacher_id
:
teacherId
,
student_id
:
studentId
,
student_id
:
studentId
,
semester_id
:
semester
.
i
d
,
semester_id
:
semester
I
d
,
is_active
:
true
is_active
:
true
});
});
...
@@ -218,7 +226,7 @@ export async function getStudentDetail(teacherId: string, studentId: string) {
...
@@ -218,7 +226,7 @@ export async function getStudentDetail(teacherId: string, studentId: string) {
* @param param.attachment 上传文件附件(可选),支持数组格式
* @param param.attachment 上传文件附件(可选),支持数组格式
*/
*/
export
async
function
addCommunication
(
teacherId
:
string
,
param
:
any
)
{
export
async
function
addCommunication
(
teacherId
:
string
,
param
:
any
)
{
let
{
student_ids
,
subtype_id
,
date
,
location
,
content
,
attachment
}
=
param
;
let
{
student_ids
,
s
emesterId
,
s
ubtype_id
,
date
,
location
,
content
,
attachment
}
=
param
;
/**参数校验 */
/**参数校验 */
if
(
!
student_ids
||
student_ids
.
length
===
0
)
{
if
(
!
student_ids
||
student_ids
.
length
===
0
)
{
...
@@ -238,9 +246,12 @@ export async function addCommunication(teacherId: string, param: any) {
...
@@ -238,9 +246,12 @@ export async function addCommunication(teacherId: string, param: any) {
}
}
/**获取当前学期 */
/**获取当前学期 */
let
semester
=
await
getCurrentSemester
();
if
(
!
semesterId
)
{
if
(
!
semester
)
{
let
semester
=
await
getCurrentSemester
();
throw
new
BizError
(
ERRORENUM
.
操作失败
,
'当前没有进行中的学期'
);
if
(
!
semester
)
{
throw
new
BizError
(
ERRORENUM
.
操作失败
,
'当前没有进行中的学期'
);
}
semesterId
=
semester
.
id
;
}
}
/**获取子类型信息 */
/**获取子类型信息 */
...
@@ -260,7 +271,7 @@ export async function addCommunication(teacherId: string, param: any) {
...
@@ -260,7 +271,7 @@ export async function addCommunication(teacherId: string, param: any) {
let
match
=
await
selectOneDataByParam
(
TABLENAME
.
师生匹配表
,
{
let
match
=
await
selectOneDataByParam
(
TABLENAME
.
师生匹配表
,
{
teacher_id
:
teacherId
,
teacher_id
:
teacherId
,
student_id
:
studentId
,
student_id
:
studentId
,
semester_id
:
semester
.
i
d
,
semester_id
:
semester
I
d
,
is_active
:
true
is_active
:
true
});
});
...
@@ -279,7 +290,7 @@ export async function addCommunication(teacherId: string, param: any) {
...
@@ -279,7 +290,7 @@ export async function addCommunication(teacherId: string, param: any) {
// 添加交流记录
// 添加交流记录
await
addData
(
TABLENAME
.
交流记录表
,
{
await
addData
(
TABLENAME
.
交流记录表
,
{
main_type
:
COMMUNICATIONTYPE
.
师生交流
,
main_type
:
COMMUNICATIONTYPE
.
师生交流
,
semester_id
:
semester
.
i
d
,
semester_id
:
semester
I
d
,
student_id
:
studentId
,
student_id
:
studentId
,
teacher_id
:
teacherId
,
teacher_id
:
teacherId
,
date
:
date
,
date
:
date
,
...
...
src/biz/teacher/teacherInfo.ts
0 → 100644
View file @
3fbd2a23
/**导师信息 */
import
{
selectDataListByParam
,
selectOneDataByParam
}
from
"../../data/findData"
;
import
{
updateManyData
}
from
"../../data/updateData"
;
import
{
addData
}
from
"../../data/addData"
;
import
{
delData
}
from
"../../data/delData"
;
import
{
TABLENAME
}
from
"../../config/dbEnum"
;
import
{
BizError
}
from
"../../util/bizError"
;
import
{
ERRORENUM
}
from
"../../config/errorEnum"
;
import
{
getCurrentSemester
}
from
"../common/semesterService"
;
/**
* 导师信息
* @param teacherId 导师ID
*/
export
async
function
teacherInfo
(
teacherId
:
string
)
{
// 获取UAC基础信息
let
uacUser
=
await
selectOneDataByParam
(
TABLENAME
.
统一用户表
,
{
user_id
:
teacherId
});
if
(
!
uacUser
.
data
||
!
uacUser
.
data
.
user_id
)
{
throw
new
BizError
(
ERRORENUM
.
未找到数据
,
`库中不存在teacher_id=
${
teacherId
}
的导师`
);
}
// 获取扩展信息
let
profile
=
await
selectOneDataByParam
(
TABLENAME
.
用户扩展信息表
,
{
user_id
:
teacherId
});
// 获取任教班级(返回班级名称,用于详情展示)
let
teacherClassList
=
await
selectDataListByParam
(
TABLENAME
.
导师任教班级表
,
{
teacher_id
:
teacherId
});
let
classNames
=
[];
let
classIds
=
[];
for
(
let
item
of
teacherClassList
.
data
)
{
let
classInfo
=
await
selectOneDataByParam
(
TABLENAME
.
班级表
,
{
id
:
item
.
class_id
});
if
(
classInfo
.
data
)
{
classNames
.
push
(
classInfo
.
data
.
full_name
);
classIds
.
push
(
item
.
class_id
);
}
}
// 获取任教科目
let
subjectList
=
await
selectDataListByParam
(
TABLENAME
.
教师任教科目表
,
{
teacher_id
:
teacherId
});
let
subjects
=
subjectList
.
data
.
map
((
item
:
any
)
=>
item
.
subject
);
// 返回字段与列表保持一致,同时保留编辑所需的ID字段
let
dataInfo
=
{
teacher_id
:
uacUser
.
data
.
user_id
,
teacher_name
:
uacUser
.
data
.
user_name
,
gender
:
uacUser
.
data
.
gender
,
phone
:
uacUser
.
data
.
phone
,
email
:
uacUser
.
data
.
email
,
political_status
:
profile
.
data
?
profile
.
data
.
political_status
:
""
,
is_class_teacher
:
profile
.
data
?
profile
.
data
.
is_class_teacher
:
false
,
max_students
:
profile
.
data
?
profile
.
data
.
max_students
:
0
,
// 用于详情展示的字符串
classes
:
classNames
.
join
(
'、'
),
subjects
:
subjects
.
join
(
'、'
),
// 用于编辑时回显的ID数组
class_ids
:
classIds
,
subject_list
:
subjects
};
return
{
dataInfo
};
}
/**
* 导师信息-修改
* @param teacherId 导师ID
* @param param 修改参数
* @param param.political_status 政治面貌
* @param param.is_class_teacher 是否班主任
* @param param.max_students 最大可带学生数
* @param param.class_ids 任教班级ID数组
* @param param.subjects 任教科目数组
* @param param.semester_id 学期ID(可选,默认使用当前学期)
*/
export
async
function
teacherUpdate
(
teacherId
:
string
,
param
:
any
)
{
/**校验导师是否存在 */
let
profile
=
await
selectOneDataByParam
(
TABLENAME
.
用户扩展信息表
,
{
user_id
:
teacherId
});
if
(
!
profile
.
data
)
{
throw
new
BizError
(
ERRORENUM
.
未找到数据
,
`库中不存在teacher_id=
${
teacherId
}
的导师`
);
}
/**获取当前学期ID(如果参数中没有传入) */
let
semesterId
=
param
.
semester_id
;
if
(
!
semesterId
)
{
let
semester
=
await
getCurrentSemester
();
if
(
!
semester
)
{
throw
new
BizError
(
ERRORENUM
.
参数错误
,
'无法获取当前学期,请传入 semester_id 参数'
);
}
semesterId
=
semester
.
id
;
}
/**更新导师扩展信息 */
let
updateData
:
any
=
{};
if
(
param
.
political_status
!==
undefined
)
updateData
.
political_status
=
param
.
political_status
;
if
(
param
.
is_class_teacher
!==
undefined
)
updateData
.
is_class_teacher
=
param
.
is_class_teacher
;
if
(
param
.
max_students
!==
undefined
)
updateData
.
max_students
=
param
.
max_students
;
if
(
Object
.
keys
(
updateData
).
length
>
0
)
{
await
updateManyData
(
TABLENAME
.
用户扩展信息表
,
{
user_id
:
teacherId
},
updateData
);
}
/**更新任教班级(teacher_class 表没有 semester_id,直接操作) */
if
(
param
.
class_ids
&&
Array
.
isArray
(
param
.
class_ids
))
{
// 先删除原有任教班级
await
delData
(
TABLENAME
.
导师任教班级表
,
{
teacher_id
:
teacherId
});
// 批量新增
for
(
let
classId
of
param
.
class_ids
)
{
await
addData
(
TABLENAME
.
导师任教班级表
,
{
teacher_id
:
teacherId
,
class_id
:
classId
});
}
}
/**更新任教科目(teacher_subject 表需要 semester_id) */
if
(
param
.
subjects
&&
Array
.
isArray
(
param
.
subjects
))
{
// 先删除该学期原有的任教科目
await
delData
(
TABLENAME
.
教师任教科目表
,
{
teacher_id
:
teacherId
,
semester_id
:
semesterId
});
// 批量新增,created_at 有默认值,不需要显式传入
for
(
let
subject
of
param
.
subjects
)
{
let
subjectStr
=
String
(
subject
).
trim
();
if
(
subjectStr
)
{
await
addData
(
TABLENAME
.
教师任教科目表
,
{
teacher_id
:
teacherId
,
subject
:
subjectStr
,
semester_id
:
semesterId
// created_at 有默认值 DataTypes.NOW,会自动填充
});
}
}
}
return
{
isSuccess
:
true
};
}
src/net/http_server.ts
View file @
3fbd2a23
...
@@ -31,7 +31,7 @@ export class httpServer {
...
@@ -31,7 +31,7 @@ export class httpServer {
httpServer
.
use
(
bodyParser
.
json
({
limit
:
"500kb"
}));
httpServer
.
use
(
bodyParser
.
json
({
limit
:
"500kb"
}));
routers
.
setRouter
(
httpServer
);
routers
.
setRouter
(
httpServer
);
httpServer
.
use
(
httpErrorHandler
);
httpServer
.
use
(
httpErrorHandler
);
const
root
=
path
.
join
(
__dirname
,
"../../public"
);
const
root
=
path
.
join
(
__dirname
,
"../../public
/dist
"
);
httpServer
.
use
(
express
.
static
(
root
))
httpServer
.
use
(
express
.
static
(
root
))
// 使用 fallback 函数
// 使用 fallback 函数
httpServer
.
use
(
fallback
(
'index.html'
,
{
root
}));
httpServer
.
use
(
fallback
(
'index.html'
,
{
root
}));
...
...
src/routers/headteacher.ts
View file @
3fbd2a23
...
@@ -24,6 +24,9 @@ export function setRouter(httpServer) {
...
@@ -24,6 +24,9 @@ export function setRouter(httpServer) {
httpServer
.
post
(
'/api/headteacher/match/export'
,
checkUser
,
checkClassTeacher
(),
asyncHandler
(
exportClassMatchList
));
httpServer
.
post
(
'/api/headteacher/match/export'
,
checkUser
,
checkClassTeacher
(),
asyncHandler
(
exportClassMatchList
));
// ===== 成长寄语汇总 =====
// ===== 成长寄语汇总 =====
/** 获取所在班学生列表 - growthMessageSummary.ts */
httpServer
.
post
(
'/api/headteacher/student/list'
,
checkUser
,
checkClassTeacher
(),
asyncHandler
(
getClassStudents
));
/** 获取本班学生成长寄语汇总 - growthMessageSummary.ts */
/** 获取本班学生成长寄语汇总 - growthMessageSummary.ts */
httpServer
.
post
(
'/api/headteacher/growth/list'
,
checkUser
,
checkClassTeacher
(),
asyncHandler
(
getClassGrowthMessages
));
httpServer
.
post
(
'/api/headteacher/growth/list'
,
checkUser
,
checkClassTeacher
(),
asyncHandler
(
getClassGrowthMessages
));
...
@@ -104,6 +107,31 @@ async function exportClassMatchList(req, res) {
...
@@ -104,6 +107,31 @@ async function exportClassMatchList(req, res) {
/**
/**
* 获取所在班学生列表
* @param studentName 学生姓名(可选)
* @param grade 年级(可选)
* @param classId 班级ID(可选)
* @param page 页码
* @param pageSize 每页大小
*/
async
function
getClassStudents
(
req
,
res
)
{
const
userInfo
=
req
.
userInfo
;
let
reqConf
=
{
studentName
:
'String'
,
grade
:
'Number'
,
page
:
'Number'
,
pageSize
:
'Number'
};
const
NotMustHaveKeys
=
[
'studentName'
,
'grade'
,
'pageSize'
];
let
{
studentName
,
grade
,
page
,
pageSize
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
result
=
await
growthMessageSummaryBiz
.
getClassStudents
(
userInfo
.
userId
,
studentName
,
grade
,
page
||
1
,
pageSize
||
10
);
res
.
success
(
result
);
}
/**
* 获取本班学生成长寄语汇总
* 获取本班学生成长寄语汇总
* @param studentId 学生ID(可选)
* @param studentId 学生ID(可选)
* @param semesterId 学期ID(可选)
* @param semesterId 学期ID(可选)
...
...
src/routers/teacher.ts
View file @
3fbd2a23
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
*/
*/
import
asyncHandler
from
'express-async-handler'
;
import
asyncHandler
from
'express-async-handler'
;
import
*
as
teacherInfoBiz
from
'../biz/teacher/teacherInfo'
;
import
*
as
myStudentsBiz
from
'../biz/teacher/myStudents'
;
import
*
as
myStudentsBiz
from
'../biz/teacher/myStudents'
;
import
*
as
communicationBiz
from
'../biz/teacher/communication'
;
import
*
as
communicationBiz
from
'../biz/teacher/communication'
;
import
*
as
growthMessageBiz
from
'../biz/teacher/growthMessage'
;
import
*
as
growthMessageBiz
from
'../biz/teacher/growthMessage'
;
...
@@ -23,6 +24,9 @@ export function setRouter(httpServer) {
...
@@ -23,6 +24,9 @@ export function setRouter(httpServer) {
/** 学生详情 - myStudents.ts */
/** 学生详情 - myStudents.ts */
httpServer
.
post
(
'/api/teacher/student/detail'
,
checkUser
,
checkRole
(
USERROLE
.
教师
),
asyncHandler
(
getStudentDetail
));
httpServer
.
post
(
'/api/teacher/student/detail'
,
checkUser
,
checkRole
(
USERROLE
.
教师
),
asyncHandler
(
getStudentDetail
));
/** 历史导师 - teacherInfo.ts */
httpServer
.
post
(
'/api/teacher/student/history'
,
checkUser
,
checkRole
(
USERROLE
.
教师
),
asyncHandler
(
getHistoryTeacher
));
// ===== 交流记录 =====
// ===== 交流记录 =====
/** 获取学生选项列表(用于下拉选择) - communication.ts */
/** 获取学生选项列表(用于下拉选择) - communication.ts */
...
@@ -137,6 +141,12 @@ export function setRouter(httpServer) {
...
@@ -137,6 +141,12 @@ export function setRouter(httpServer) {
// ===== 数据看板 =====
// ===== 数据看板 =====
/** 导师首页数据 - dashboard.ts */
/** 导师首页数据 - dashboard.ts */
httpServer
.
post
(
'/api/teacher/dashboard'
,
checkUser
,
checkRole
(
USERROLE
.
教师
),
asyncHandler
(
teacherDashboard
));
httpServer
.
post
(
'/api/teacher/dashboard'
,
checkUser
,
checkRole
(
USERROLE
.
教师
),
asyncHandler
(
teacherDashboard
));
// ===== 个人信息 =====
/** 导师详情 - teacherInfo.ts */
httpServer
.
post
(
'/api/teacher/teacher/info'
,
checkUser
,
checkRole
(
USERROLE
.
教师
),
asyncHandler
(
teacherInfo
));
/** 修改导师信息 - teacherInfo.ts */
httpServer
.
post
(
'/api/teacher/teacher/update'
,
checkUser
,
checkRole
(
USERROLE
.
教师
),
asyncHandler
(
teacherUpdate
));
}
}
/**
/**
...
@@ -150,13 +160,14 @@ export function setRouter(httpServer) {
...
@@ -150,13 +160,14 @@ export function setRouter(httpServer) {
async
function
getMyStudents
(
req
,
res
)
{
async
function
getMyStudents
(
req
,
res
)
{
const
userInfo
=
req
.
userInfo
;
const
userInfo
=
req
.
userInfo
;
let
reqConf
=
{
studentName
:
'String'
,
grade
:
'Number'
,
classId
:
'Number'
,
page
:
'Number'
,
pageSize
:
'Number'
};
let
reqConf
=
{
studentName
:
'String'
,
semesterId
:
'Number'
,
grade
:
'Number'
,
classId
:
'Number'
,
page
:
'Number'
,
pageSize
:
'Number'
};
const
NotMustHaveKeys
=
[
'studentName'
,
'grade'
,
'classId'
,
'pageSize'
];
const
NotMustHaveKeys
=
[
'studentName'
,
'
semesterId'
,
'
grade'
,
'classId'
,
'pageSize'
];
let
{
studentName
,
grade
,
classId
,
page
,
pageSize
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
{
studentName
,
semesterId
,
grade
,
classId
,
page
,
pageSize
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
result
=
await
myStudentsBiz
.
getMyStudents
(
let
result
=
await
myStudentsBiz
.
getMyStudents
(
userInfo
.
userId
,
userInfo
.
userId
,
studentName
,
studentName
,
semesterId
,
grade
,
grade
,
classId
,
classId
,
page
||
1
,
page
||
1
,
...
@@ -172,11 +183,11 @@ async function getMyStudents(req, res) {
...
@@ -172,11 +183,11 @@ async function getMyStudents(req, res) {
async
function
getStudentDetail
(
req
,
res
)
{
async
function
getStudentDetail
(
req
,
res
)
{
const
userInfo
=
req
.
userInfo
;
const
userInfo
=
req
.
userInfo
;
let
reqConf
=
{
studentId
:
'String'
};
let
reqConf
=
{
studentId
:
'String'
,
semesterId
:
'Number'
};
const
NotMustHaveKeys
=
[];
const
NotMustHaveKeys
=
[];
let
{
studentId
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
{
studentId
,
semesterId
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
result
=
await
myStudentsBiz
.
getStudentDetail
(
userInfo
.
userId
,
studentId
);
let
result
=
await
myStudentsBiz
.
getStudentDetail
(
userInfo
.
userId
,
studentId
,
semesterId
);
res
.
success
(
result
);
res
.
success
(
result
);
}
}
...
@@ -192,12 +203,13 @@ async function getStudentDetail(req, res) {
...
@@ -192,12 +203,13 @@ async function getStudentDetail(req, res) {
async
function
addCommunication
(
req
,
res
)
{
async
function
addCommunication
(
req
,
res
)
{
const
userInfo
=
req
.
userInfo
;
const
userInfo
=
req
.
userInfo
;
let
reqConf
=
{
student_ids
:
'[String]'
,
subtype_id
:
'Number'
,
date
:
'String'
,
location
:
'String'
,
content
:
'String'
,
attachment
:
'[String]'
};
let
reqConf
=
{
student_ids
:
'[String]'
,
s
emesterId
:
'Number'
,
s
ubtype_id
:
'Number'
,
date
:
'String'
,
location
:
'String'
,
content
:
'String'
,
attachment
:
'[String]'
};
const
NotMustHaveKeys
=
[
'location'
,
'attachment'
];
const
NotMustHaveKeys
=
[
'location'
,
'attachment'
];
let
{
student_ids
,
subtype_id
,
date
,
location
,
content
,
attachment
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
{
student_ids
,
s
emesterId
,
s
ubtype_id
,
date
,
location
,
content
,
attachment
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
commData
=
{
let
commData
=
{
student_ids
,
student_ids
,
semesterId
,
subtype_id
,
subtype_id
,
date
,
date
,
location
:
location
||
''
,
location
:
location
||
''
,
...
@@ -805,11 +817,11 @@ async function createCase(req, res) {
...
@@ -805,11 +817,11 @@ async function createCase(req, res) {
async
function
getCaseList
(
req
,
res
)
{
async
function
getCaseList
(
req
,
res
)
{
const
userInfo
=
req
.
userInfo
;
const
userInfo
=
req
.
userInfo
;
let
reqConf
=
{
case_name
:
'String'
,
page
:
'Number'
,
pageSize
:
'Number'
};
let
reqConf
=
{
case_name
:
'String'
,
semesterId
:
'Number'
,
page
:
'Number'
,
pageSize
:
'Number'
};
const
NotMustHaveKeys
=
[
'case_name'
,
'pageSize'
];
const
NotMustHaveKeys
=
[
'case_name'
,
'
semesterId'
,
'
pageSize'
];
let
{
case_name
,
page
,
pageSize
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
{
case_name
,
semesterId
,
page
,
pageSize
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
result
=
await
caseBiz
.
getCaseList
(
userInfo
.
userId
,
case_name
,
page
||
1
,
pageSize
||
10
);
let
result
=
await
caseBiz
.
getCaseList
(
userInfo
.
userId
,
case_name
,
semesterId
,
page
||
1
,
pageSize
||
10
);
res
.
success
(
result
);
res
.
success
(
result
);
}
}
...
@@ -872,6 +884,54 @@ async function teacherDashboard(req, res) {
...
@@ -872,6 +884,54 @@ async function teacherDashboard(req, res) {
res
.
success
(
result
);
res
.
success
(
result
);
}
}
/**
* 导师详情
* @param teacherId 教师user_id
*/
async
function
teacherInfo
(
req
,
res
)
{
const
userInfo
=
req
.
userInfo
;
let
result
=
await
teacherInfoBiz
.
teacherInfo
(
userInfo
.
user_id
);
res
.
success
(
result
);
}
/**
* 修改导师信息
* @param teacherId 教师user_id
* @param political_status 政治面貌
* @param is_class_teacher 是否班主任
* @param max_students 最大可带学生数
* @param class_ids 班级ID数组
* @param subjects 任教科目数组
*/
async
function
teacherUpdate
(
req
,
res
)
{
const
userInfo
=
req
.
userInfo
;
let
reqConf
=
{
political_status
:
'String'
,
is_class_teacher
:
'Boolean'
,
max_students
:
'Number'
,
class_ids
:
'[Number]'
,
subjects
:
'[String]'
};
const
NotMustHaveKeys
=
[
'political_status'
,
'is_class_teacher'
,
'max_students'
,
'class_ids'
,
'subjects'
];
let
{
political_status
,
is_class_teacher
,
max_students
,
class_ids
,
subjects
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
updateData
=
{
political_status
,
is_class_teacher
,
max_students
,
class_ids
,
subjects
};
let
result
=
await
teacherInfoBiz
.
teacherUpdate
(
userInfo
.
user_id
,
updateData
);
res
.
success
(
result
);
}
/**
* 学生历年导师列表
* @param req
* @param res
*/
async
function
getHistoryTeacher
(
req
,
res
)
{
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment