diff --git a/mock/student/practice.ts b/mock/student/practice.ts index d73ed25d11ec6d724e5261e1d0546f3afcd98160..b82d5cf250c8598066c162f274d92e1e3c1d7947 100644 --- a/mock/student/practice.ts +++ b/mock/student/practice.ts @@ -1,5 +1,4 @@ import { - GroupMemberModel, LeaderWorkModel, LectureNoteModel, LessonPlanModel, @@ -8,6 +7,7 @@ import { import { resultPageSuccess, resultSuccess } from "mock/_util"; import { MockMethod } from "vite-plugin-mock"; import { GenderEnum } from "/@/enums/genderEnum"; +import { GroupMemberModel } from "/@/api/model/groupModel"; function getLectureRecordList() { const list: LectureNoteModel[] = []; @@ -103,6 +103,7 @@ function leaderWorkInfo() { docLink: "http://localhost/file/demo.docx", educationPlan: "没计划", studentAmount: 40, + groupEvaluation: "小组评价abababa", workPlan: "没计划", }; return item; @@ -210,4 +211,24 @@ export default [ return resultSuccess({}); }, }, + { + url: "/dev-api/internInfo/setSummary", + method: "put", + response: () => { + return resultSuccess({}); + }, + }, + { + url: "/dev-api/internInfo/getRemark", + timeout: 100, + method: "get", + response: () => { + return resultSuccess({ + personalSummary: "个人总结111", + groupEvaluation: "小组评价1111", + highSchool: "中学教师评语abababa", + university: "高校教师评语abababa", + }); + }, + }, ] as MockMethod[]; diff --git a/mock/sys/menu.ts b/mock/sys/menu.ts index 4409c30b89193646553740af2348f653a3a0d177..1bc46996cb65ca798b3414fa9cef8c004c4be523 100644 --- a/mock/sys/menu.ts +++ b/mock/sys/menu.ts @@ -268,6 +268,14 @@ const practicalStudent = { title: "班主任实习", }, }, + { + path: "personal-summary", + name: "PersonalSummary", + component: "/student/practical/personal-summary/index.vue", + meta: { + title: "个人总结", + }, + }, // 小组长可见路由 { path: "mark", @@ -338,6 +346,16 @@ const teachingStudyRoute = { }, }; +const leaderWorkRoute = { + path: "leaderWorkDesc", + name: "LeaderWorkDesc", + component: "/default/practical/LeaderWorkDesc.vue", + meta: { + title: "班主任实习工作记录", + hideMenu: true, + }, +}; + const rootRouter = { path: "/root", name: "Root", @@ -375,6 +393,7 @@ export default [ lectureNoteRoute, lessonPlanRoute, teachingStudyRoute, + leaderWorkRoute, accountRoute, rootRouter, practicalStudent, diff --git a/mock/sys/user.ts b/mock/sys/user.ts index 7713342d6b8e33cf65c47600ca928ac35862b9c9..1757aee1251b9406aeacb0ff495a95c1e9a4b174 100644 --- a/mock/sys/user.ts +++ b/mock/sys/user.ts @@ -88,22 +88,17 @@ export default [ return resultSuccess(createFakeUserList().at(0)); }, }, - // { - // url: "/dev-api/getPermCode", - // timeout: 200, - // method: "get", - // response: (request: requestParams) => { - // const token = getRequestToken(request); - // if (!token) return resultError("Invalid token"); - // const checkUser = createFakeUserList().find((item) => item.token === token); - // if (!checkUser) { - // return resultError("Invalid token!"); - // } - // const codeList = fakeCodeList[checkUser.userId]; - // - // return resultSuccess(codeList); - // }, - // }, + { + url: "/dev-api/getRoles", + timeout: 200, + method: "get", + response: (request: requestParams) => { + const token = getRequestToken(request); + if (!token) return resultError("Invalid token"); + + return resultSuccess(["ROLE_INSTRUCTOR", "ROLE_CAPTAIN"]); + }, + }, { url: "/dev-api/logout", timeout: 200, diff --git a/src/api/model/practiceModel.ts b/src/api/model/practiceModel.ts index 49ad4d81b940c92331fac5b2049397c99b4ba554..65d7350ade456b446ae54f579b7adb77fb1035e1 100644 --- a/src/api/model/practiceModel.ts +++ b/src/api/model/practiceModel.ts @@ -65,6 +65,7 @@ export interface LeaderWorkModel { workPlan: string; educationPlan: string; classActivity: string; + groupEvaluation: string; docLink: string; } diff --git a/src/api/student/practice.ts b/src/api/student/practice.ts index 77a954496ef4e8bcab7ef586d12be7340e5362ed..f5aa91b65fc84ee455a350009393b68e6c9d034d 100644 --- a/src/api/student/practice.ts +++ b/src/api/student/practice.ts @@ -7,6 +7,7 @@ import { LessonPlanGetResultModel, TeachingStudyModel, TeachingStudyGetResultModel, + RemarkModel, } from "../model/practiceModel"; import { PageParams, PageWithGroupId, PageWithUserId } from "../model/pageModel"; import { defHttp } from "/@/utils/http/axios"; @@ -31,9 +32,12 @@ enum Api { SetTeachingStudyRemark = "/teachingStudy/setRemark", GetGroupNumber = "/group/leader/list", GetLeaderWorkInfo = "/leaderWork/getInfo", + SetLeaderWorkRemark = "/leaderWork/setRemark", SaveOrUpdateLeaderWorkInfo = "/leaderWork/saveOrUpdate", GetGroupScore = "/internInfo/score/xz", SetGroupScore = "/internInfo/mark/xz", + GetRemark = "/internInfo/getRemark", + SetPersonalSummary = "/internInfo/setSummary", } /** @@ -249,7 +253,7 @@ export const removeTeachingStudyById = (studyId: number) => */ export const setTeachingStudyRemark = (userId: number, studyId: number, content: string) => defHttp.put({ - url: Api.SetLessonPlanRemark + `/${userId}/${studyId}`, + url: Api.SetTeachingStudyRemark + `/${userId}/${studyId}`, params: { content }, }); @@ -271,6 +275,17 @@ export const getLeaderWorkInfo = () => url: Api.GetLeaderWorkInfo, }); +/** + * 小组长评价指定实习生的班主任实习工作记录 + * @param userId 实习生id + * @param content 评价内容 + */ +export const setLeaderWorkRemark = (userId: number, content: string) => + defHttp.put({ + url: Api.SetLeaderWorkRemark + `/${userId}`, + params: { content }, + }); + /** * 新增或更新班主任实习工作信息 * @param leaderWork 班主任实习工作信息对象 @@ -298,3 +313,21 @@ export const setGroupScore = (userId: number, score: number, remark: string) => remark, }, }); + +/** + * 实习生获取个人的教育实习评价信息 + */ +export const getRemark = () => + defHttp.get({ + url: Api.GetRemark, + }); + +/** + * 更新实习个人总结 + * @param content 个人总结内容 + */ +export const setPersonalSummary = (content: string) => + defHttp.put({ + url: Api.SetPersonalSummary, + params: { content }, + }); diff --git a/src/api/sys/user.ts b/src/api/sys/user.ts index df569c680ba22a0d660675b24c773ea7d1cab4fc..f1d9d7124b0ba6da342139f2d32465080014d65c 100644 --- a/src/api/sys/user.ts +++ b/src/api/sys/user.ts @@ -7,7 +7,7 @@ enum Api { Login = "/login", Logout = "/logout", GetUserInfo = "/getInfo", - // GetPermCode = "/getPermCode", + GetRoles = "/getRoles", TestRetry = "/testRetry", } @@ -33,9 +33,9 @@ export function getUserInfo() { return defHttp.get({ url: Api.GetUserInfo }, { errorMessageMode: "none" }); } -// export function getPermCode() { -// return defHttp.get({url: Api.GetPermCode}); -// } +export function getRoles() { + return defHttp.get({ url: Api.GetRoles }); +} export function doLogout() { return defHttp.get({ url: Api.Logout }); diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index ece50a4780882cf564a0da7915d4cf34fc1d8909..657d35100c83a4a3bed73334f5274504823492be 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -4,7 +4,7 @@ import { store } from "/@/store"; import { PageEnum } from "/@/enums/pageEnum"; import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from "/@/enums/cacheEnum"; import { getAuthCache, setAuthCache } from "/@/utils/auth"; -import { doLogout, getUserInfo } from "/@/api/sys/user"; +import { doLogout, getRoles, getUserInfo } from "/@/api/sys/user"; import { useI18n } from "/@/hooks/web/useI18n"; import { useMessage } from "/@/hooks/web/useMessage"; import { router } from "/@/router"; @@ -123,6 +123,9 @@ export const useUserStore = defineStore({ if (!this.getToken) return null; const userInfo = await getUserInfo(); this.setUserInfo(userInfo); + const permissionCodeList = await getRoles(); + const permissionStore = usePermissionStore(); + permissionStore.setPermCodeList(permissionCodeList); return userInfo; }, /** diff --git a/src/views/captain/practical/RemarkModal.vue b/src/views/captain/practical/RemarkModal.vue index abc64e172cdb5c6418a67747469be0eacad919a6..0e885db62f2be60788656707b4c2ae91cc8c101f 100644 --- a/src/views/captain/practical/RemarkModal.vue +++ b/src/views/captain/practical/RemarkModal.vue @@ -2,7 +2,7 @@ diff --git a/src/views/captain/practical/index.vue b/src/views/captain/practical/index.vue index f7cf78f888fabd2c37b5fb14308e74eb88b6fc03..755f8fc4707e4939c4797e97259b4e15eabcfccb 100644 --- a/src/views/captain/practical/index.vue +++ b/src/views/captain/practical/index.vue @@ -21,10 +21,16 @@ icon: 'clarity:info-standard-line', onClick: handleTeachingStudyDesc.bind(null, record), }, + ]" + :dropDownActions="[ + { + label: '班主任实习工作评价', + onClick: handleEditLeaderWorkRemark.bind(null, record), + }, { - label: '表现打分', + label: '教育实习小组评价', icon: 'clarity:info-standard-line', - onClick: handleEditRemark.bind(null, record), + onClick: handleEditGroupRemark.bind(null, record), }, ]" /> @@ -35,8 +41,7 @@ - diff --git a/src/views/default/practical/GroupEvaluationEdit.vue b/src/views/default/practical/GroupEvaluationEdit.vue new file mode 100644 index 0000000000000000000000000000000000000000..a984949f0e331d6d14a9720cf6e10a5846569330 --- /dev/null +++ b/src/views/default/practical/GroupEvaluationEdit.vue @@ -0,0 +1,88 @@ + + + diff --git a/src/views/default/practical/LeaderWorkDesc.vue b/src/views/default/practical/LeaderWorkDesc.vue new file mode 100644 index 0000000000000000000000000000000000000000..0564cb0c31567639411e249c98270f454cf72470 --- /dev/null +++ b/src/views/default/practical/LeaderWorkDesc.vue @@ -0,0 +1,70 @@ + + + diff --git a/src/views/default/practical/LectureNoteList.vue b/src/views/default/practical/LectureNoteList.vue index e23f7175a91fd4c64c8d8171c7fe463827fed433..378d4e0e16b16a73888272d6209e47a70cb489cb 100644 --- a/src/views/default/practical/LectureNoteList.vue +++ b/src/views/default/practical/LectureNoteList.vue @@ -3,7 +3,7 @@ diff --git a/src/views/default/practical/LessonPlanList.vue b/src/views/default/practical/LessonPlanList.vue index 77f39b9a01df8062606e287d751f13b863f53775..a39ab3b977824a4d188b2ff750f4f53e695ec582 100644 --- a/src/views/default/practical/LessonPlanList.vue +++ b/src/views/default/practical/LessonPlanList.vue @@ -3,7 +3,7 @@ diff --git a/src/views/default/practical/TeachingStudyList.vue b/src/views/default/practical/TeachingStudyList.vue index 240a3d0e008641ca122c5fc3b0cc5912e436b356..d459cc6599d80bb45dfa713e5a89d03f86732f7b 100644 --- a/src/views/default/practical/TeachingStudyList.vue +++ b/src/views/default/practical/TeachingStudyList.vue @@ -3,7 +3,7 @@ diff --git a/src/views/student/practical/personal-summary/data.tsx b/src/views/student/practical/personal-summary/data.tsx new file mode 100644 index 0000000000000000000000000000000000000000..8e06a788bea74399294d714d18bd49e80d79006a --- /dev/null +++ b/src/views/student/practical/personal-summary/data.tsx @@ -0,0 +1,16 @@ +import { FormSchema } from "/@/components/Form"; + +export const formSchema: FormSchema[] = [ + { + label: "个人总结", + field: "personalSummary", + component: "InputTextArea", + required: true, + colProps: { + span: 24, + }, + componentProps: { + rows: 20, + }, + }, +]; diff --git a/src/views/student/practical/personal-summary/index.vue b/src/views/student/practical/personal-summary/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..187a541e79ff17e291ec85ba1f2e9ba69da808fb --- /dev/null +++ b/src/views/student/practical/personal-summary/index.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/views/student/practical/task/components/LectureNote/Edit.vue b/src/views/student/practical/task/components/LectureNote/Edit.vue index ce2aeaed10b35954e62a6807dbb613197a1168b5..7a29ebc5c044a36971f34fa1b89dd04c5b06276d 100644 --- a/src/views/student/practical/task/components/LectureNote/Edit.vue +++ b/src/views/student/practical/task/components/LectureNote/Edit.vue @@ -37,11 +37,11 @@ const formData = ref(defaultformData); const operType = ref(""); const [registerModal, { closeModal, changeOkLoading }] = useModalInner( - ({ note, operType: type }) => { + ({ data, operType: type }) => { operType.value = type; if (type == TableOperEnum.UPDATE) { - formData.value = note; - formData.value.docLink = note.docLink === "" ? [] : [note.docLink]; + formData.value = data; + formData.value.docLink = data.docLink === "" ? [] : [data.docLink]; } }, ); @@ -50,7 +50,6 @@ schemas: lectureNoteFormSchema, labelWidth: 100, labelAlign: "right", - submitOnChange: true, ...defaultModalFormSettings, }); diff --git a/src/views/student/practical/task/components/LessonPlan/Edit.vue b/src/views/student/practical/task/components/LessonPlan/Edit.vue index 2135e09e7dc9e63ba19b6852a34a341b6af9cebe..121166b4a9297d35427e455418dfc1f37e1f0d32 100644 --- a/src/views/student/practical/task/components/LessonPlan/Edit.vue +++ b/src/views/student/practical/task/components/LessonPlan/Edit.vue @@ -43,10 +43,10 @@ const formData = ref(empty); const operType = ref(""); const [registerModal, { closeModal, changeOkLoading }] = useModalInner( - ({ plan, operType: type }) => { + ({ data, operType: type }) => { operType.value = type; if (type == TableOperEnum.UPDATE) { - formData.value = { ...plan, docLink: plan.docLink === "" ? [] : [plan.docLink] }; + formData.value = { ...data, docLink: data.docLink === "" ? [] : [data.docLink] }; } }, ); @@ -55,7 +55,6 @@ schemas: lessonPlanFormSchema, labelWidth: 100, labelAlign: "right", - submitOnChange: true, ...defaultModalFormSettings, }); diff --git a/src/views/student/practical/task/components/TeachingStudy/Edit.vue b/src/views/student/practical/task/components/TeachingStudy/Edit.vue index 2e2df60e73e933f9aa25f22ae9edf9e250f75cc6..4e37138cfe25f45374b1afd83c584e46591f1d08 100644 --- a/src/views/student/practical/task/components/TeachingStudy/Edit.vue +++ b/src/views/student/practical/task/components/TeachingStudy/Edit.vue @@ -42,10 +42,10 @@ }; const formData = ref(empty); const operType = ref(""); - const [registerModal, { closeModal }] = useModalInner(({ study, operType: type }) => { + const [registerModal, { closeModal }] = useModalInner(({ data, operType: type }) => { operType.value = type; if (type == TableOperEnum.UPDATE) { - formData.value = { ...study, docLink: study.docLink === "" ? [] : [study.docLink] }; + formData.value = { ...data, docLink: data.docLink === "" ? [] : [data.docLink] }; } }); @@ -53,7 +53,6 @@ schemas: teachingStudyFormSchema, labelWidth: 100, labelAlign: "right", - submitOnChange: true, ...defaultModalFormSettings, }); diff --git a/src/views/teacher/practical/member/components/LeaderWorkDesc.vue b/src/views/teacher/practical/member/components/LeaderWorkDesc.vue deleted file mode 100644 index 65820f58a6e8244897184f8310982fc0b90848df..0000000000000000000000000000000000000000 --- a/src/views/teacher/practical/member/components/LeaderWorkDesc.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - diff --git a/src/views/teacher/practical/member/index.vue b/src/views/teacher/practical/member/index.vue index cd32644e94495f9afe5162bfa3065949fab66b91..1edfacf8f16650cb40ded3b53c857c5ed6af30cd 100644 --- a/src/views/teacher/practical/member/index.vue +++ b/src/views/teacher/practical/member/index.vue @@ -65,7 +65,6 @@ - @@ -79,7 +78,6 @@ import ReportDesc from "./components/ReportDesc.vue"; import RemarkEdit from "./components/RemarkEdit.vue"; import PersonalDesc from "./components/PersonalDesc.vue"; - import LeaderWorkDesc from "./components/LeaderWorkDesc.vue"; import InternshipDesc from "./components/InternshipDesc.vue"; import { getReportByUserId, @@ -87,7 +85,6 @@ getGroupMemberPage, getUserInfoByUserId, getIntershipInfoByUserId, - getLeaderWorkInfoByUserId, } from "/@/api/teacher/practice"; import { MarkEnum } from "/@/enums/markEnum"; import { PracTypeEnum } from "/@/enums/pracTypeEnum"; @@ -168,11 +165,10 @@ openScoreEditModal(true, { userId: record.userId, target: PracTypeEnum.TeacherMoral }); } - const [registerLeaderWorkDescModal, { openModal: openLeaderWorkDescModal }] = useModal(); - function handleLeaderWorkDesc(record) { - getLeaderWorkInfoByUserId(record.userId).then((val) => { - openLeaderWorkDescModal(true, { ...val, userId: record.userId }); + router.push({ + name: "LeaderWorkDesc", + query: { userId: record.userId }, }); } diff --git a/src/views/teacher/practical/member/memberData.tsx b/src/views/teacher/practical/member/memberData.tsx index dd1e38e38e2d2c59da1283d03517cff30c117982..73773d27e6220c9f00ff347dc816bc08f6102a80 100644 --- a/src/views/teacher/practical/member/memberData.tsx +++ b/src/views/teacher/practical/member/memberData.tsx @@ -104,6 +104,13 @@ export const leaderWorkDescSchema: DescItem[] = [ contentMinWidth: 200, span: 2, }, + { + field: "groupEvaluation", + label: "小组评价", + labelMinWidth: 100, + contentMinWidth: 200, + span: 2, + }, { field: "docLink", label: "word文档下载地址",