diff --git a/mock/student/practice.ts b/mock/student/practice.ts index 93ee0ac7308d2856d0053f2bd3c2aae4d9d826cd..d888f0997494a6fa46531b3226dc7d8dfaa95f4c 100644 --- a/mock/student/practice.ts +++ b/mock/student/practice.ts @@ -196,4 +196,18 @@ export default [ return resultSuccess({}); }, }, + { + url: "/dev-api/internInfo/score/xz/:id", + method: "get", + response: () => { + return resultSuccess({ score: 99, remark: "表现优秀" }); + }, + }, + { + url: "/dev-api/internInfo/mark/xz/:id", + method: "put", + response: () => { + return resultSuccess({}); + }, + }, ] as MockMethod[]; diff --git a/mock/sys/menu.ts b/mock/sys/menu.ts index 20e40a7b729bb802d4bdcb4ea857869d1e1c4ab7..4052d0d9a9e99f8b66ad3467bd8498cd6f240f66 100644 --- a/mock/sys/menu.ts +++ b/mock/sys/menu.ts @@ -243,7 +243,7 @@ const accountRoute = { // }; // @ts-ignore -/* const practicalStudent = { +const practicalStudent = { path: "/practical", name: "Practical", component: "LAYOUT", @@ -278,28 +278,28 @@ const accountRoute = { }, }, ], -}; */ +}; // @ts-ignore -const practicalTeacher = { - path: "/practical", - name: "Practical", - component: "LAYOUT", - meta: { - icon: "simple-icons:about-dot-me", - title: "实习评价", - }, - children: [ - { - path: "menber", - name: "Member", - component: "/teacher/practical/member/index.vue", - meta: { - title: "成员信息", - }, - }, - ], -}; +// const practicalTeacher = { +// path: "/practical", +// name: "Practical", +// component: "LAYOUT", +// meta: { +// icon: "simple-icons:about-dot-me", +// title: "实习评价", +// }, +// children: [ +// { +// path: "menber", +// name: "Member", +// component: "/teacher/practical/member/index.vue", +// meta: { +// title: "成员信息", +// }, +// }, +// ], +// }; const lectureNoteRoute = { path: "lectureNoteList", @@ -370,8 +370,8 @@ export default [ teachingStudyRoute, accountRoute, rootRouter, - // practicalStudent, - practicalTeacher, + practicalStudent, + // practicalTeacher, ]; return resultSuccess(menu); diff --git a/src/api/student/model/practiceModel.ts b/src/api/student/model/practiceModel.ts index 09cc6b51f43ff74834ba66ca5edfef29913de9de..c004b8b448d1028cfdddc5f5abf66107e0f09ce5 100644 --- a/src/api/student/model/practiceModel.ts +++ b/src/api/student/model/practiceModel.ts @@ -76,3 +76,8 @@ export interface LeaderWorkModel { classActivity: string; docLink: string; } + +export interface GroupScoreModel { + score: number; + remark: string; +} diff --git a/src/api/student/practice.ts b/src/api/student/practice.ts index 5ce8b668453e8f1633f6363d587ce036dc3a959f..28e9676a322d7e4e2b01c9cad4397f7360629b0f 100644 --- a/src/api/student/practice.ts +++ b/src/api/student/practice.ts @@ -1,5 +1,6 @@ import { GroupMemberListResultModel, + GroupScoreModel, LeaderWorkModel, LectureNoteItemModel, LectureNoteListResultModel, @@ -35,6 +36,8 @@ enum Api { GetGroupNumber = "/group/leader/list", GetLeaderWorkInfo = "/leaderWork/getInfo", SaveOrUpdateLeaderWorkInfo = "/leaderWork/saveOrUpdate", + GetGroupScore = "/internInfo/score/xz", + SetGroupScore = "/internInfo/mark/xz", } /** @@ -281,3 +284,21 @@ export const saveOrUpdateLeaderWorkInfo = (leaderWork: LeaderWorkModel) => url: Api.SaveOrUpdateLeaderWorkInfo, params: leaderWork, }); + +/** + * 实习小组组长获取实习生小组成绩信息 + * @param userId 实习生id + */ +export const getGroupScoreByUserId = (userId: number) => + defHttp.get({ + url: Api.GetGroupScore + `/${userId}`, + }); + +export const setGroupScore = (userId: number, score: number, remark: string) => + defHttp.put({ + url: Api.SetGroupScore + `/${userId}`, + params: { + score, + remark, + }, + }); diff --git a/src/api/teacher/model/practiceModel.ts b/src/api/teacher/model/practiceModel.ts index d1a741ad4be664a00f536883c774bd5204a0af9f..f91dcccb958993a5d1b8be3fa0b3635cedd27273 100644 --- a/src/api/teacher/model/practiceModel.ts +++ b/src/api/teacher/model/practiceModel.ts @@ -1,4 +1,5 @@ import { IntershipTypeEnum } from "/@/enums/intershipTypeEnum"; +import { BasicFetchResult } from "/@/api/model/baseModel"; export interface IntershipInfoModel { type: IntershipTypeEnum; @@ -35,3 +36,13 @@ export interface ReportModel { jxpfCollege: number; groupScore: number; } + +export interface GroupItemModel { + groupId: number; + groupName: string; + total: number; + stock: number; + introduce: string; +} + +export type GroupListResultModel = BasicFetchResult; diff --git a/src/api/teacher/practice.ts b/src/api/teacher/practice.ts index f213288a22a3f65888667e8a3b4b7cff02872efc..e8eec3df6ce54b44ecfb16a0ebc2092f1f979eda 100644 --- a/src/api/teacher/practice.ts +++ b/src/api/teacher/practice.ts @@ -1,7 +1,13 @@ import { BasicPageParams } from "/@/api/model/baseModel"; import { defHttp } from "/@/utils/http/axios"; import { GroupMemberListResultModel, LeaderWorkModel } from "/@/api/student/model/practiceModel"; -import { IntershipInfoModel, RemarkModel, ReportModel } from "/@/api/teacher/model/practiceModel"; +import { + GroupItemModel, + GroupListResultModel, + IntershipInfoModel, + RemarkModel, + ReportModel, +} from "/@/api/teacher/model/practiceModel"; import { UserInfo } from "/#/store"; enum Api { @@ -18,6 +24,10 @@ enum Api { SetGxRemark = "/internInfo/remark/gx", GetReportByUserId = "/internInfo/getReport", GetLeaderWorkInfo = "/leaderWork/getInfo", + GetPracticalGroupPage = "/group/practicalPage", + SavePracticalGroup = "/group/savePractical", + UpdatePracticalGroup = "/group/update", + RemovePracticalGroup = "/group/remove", } /** @@ -171,3 +181,41 @@ export const getReportByUserId = (userId: number) => defHttp.get({ url: Api.GetReportByUserId + `/${userId}`, }); + +/** + * 分页查询实习小组信息 + * @param params 分页查询参数 + */ +export const getPracticalGroupPage = (params: BasicPageParams) => + defHttp.get({ + url: Api.GetPracticalGroupPage, + params, + }); +/** + * 添加实习小组 + * @param group 实习小组信息对象 + */ +export const savePracticalGroup = (group: GroupItemModel) => + defHttp.get({ + url: Api.SavePracticalGroup, + params: group, + }); + +/** + * 更新实习小组信息 + * @param group 实习小组信息对象 + */ +export const updatePracticalGroup = (group: GroupItemModel) => + defHttp.put({ + url: Api.UpdatePracticalGroup, + params: group, + }); + +/** + * 删除实习小组 + * @param groupId 实习小组id + */ +export const removePracticalGroupById = (groupId: number) => + defHttp.delete({ + url: Api.RemovePracticalGroup + `/${groupId}`, + }); diff --git a/src/views/captain/practical/RemarkModal.vue b/src/views/captain/practical/RemarkModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..21e793f43af876a574239a51aedc4806267d25a9 --- /dev/null +++ b/src/views/captain/practical/RemarkModal.vue @@ -0,0 +1,97 @@ + + + diff --git a/src/views/captain/practical/index.vue b/src/views/captain/practical/index.vue index acbea61c641f9af321ea7b1e7459f462e9e6bd87..4369e9f5cb87e671f86457ae79f5f5060c67b453 100644 --- a/src/views/captain/practical/index.vue +++ b/src/views/captain/practical/index.vue @@ -24,11 +24,17 @@ icon: 'ant-design:info-circle-outlined', onClick: handleTeachingStudyDesc.bind(null, record), }, + { + label: '表现打分', + icon: 'ant-design:info-circle-outlined', + onClick: handleEditRemark.bind(null, record), + }, ]" /> + @@ -36,14 +42,17 @@ import { defineComponent } from "vue"; import { BasicColumn, BasicTable, TableAction, useTable } from "/@/components/Table"; import { useRouter } from "vue-router"; - import { getGroupNumberPageByGroupId } from "/@/api/student/practice"; + import { getGroupNumberPageByGroupId, getGroupScoreByUserId } from "/@/api/student/practice"; import { MarkTypeEnum } from "/@/enums/markTypeEnum"; + import { useModal } from "/@/components/Modal"; + import RemarkModal from "./RemarkModal.vue"; export default defineComponent({ name: "GroupLeaderMark", components: { BasicTable, TableAction, + RemarkModal, }, setup() { const columns: BasicColumn[] = [ @@ -86,6 +95,9 @@ fixed: "right", }, }); + + const [registerRemarkModal, { openModal: openRemarkModal }] = useModal(); + const router = useRouter(); function handleReloadCurrent() { @@ -116,12 +128,19 @@ }); } + async function handleEditRemark(record) { + const score = await getGroupScoreByUserId(record.userId); + openRemarkModal(true, { ...score, userId: record.userId }); + } + return { registerTable, + registerRemarkModal, handleReloadCurrent, handleLectureNoteDesc, handleLessonPlanDesc, handleTeachingStudyDesc, + handleEditRemark, }; }, }); diff --git a/src/views/teacher/practical/group/Desc.vue b/src/views/teacher/practical/group/Desc.vue new file mode 100644 index 0000000000000000000000000000000000000000..0821f25edd630f67da0c319f15ba4f839f30b473 --- /dev/null +++ b/src/views/teacher/practical/group/Desc.vue @@ -0,0 +1,55 @@ + + diff --git a/src/views/teacher/practical/group/Edit.vue b/src/views/teacher/practical/group/Edit.vue new file mode 100644 index 0000000000000000000000000000000000000000..b63a53c61961e1fd2684ecfc37a020eb4589017b --- /dev/null +++ b/src/views/teacher/practical/group/Edit.vue @@ -0,0 +1,111 @@ + + diff --git a/src/views/teacher/practical/group/index.vue b/src/views/teacher/practical/group/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..a01dad73497a881941791ec28e9fa510cfd5a683 --- /dev/null +++ b/src/views/teacher/practical/group/index.vue @@ -0,0 +1,114 @@ + +