From 510d12282f01d20d10122a2848c24c9fe8266b3d Mon Sep 17 00:00:00 2001 From: hebo Date: Sun, 28 Sep 2025 21:13:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E9=BE=99=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/base/jlApi.ts | 101 +++ src/api/base/server.ts | 39 - src/pages.json | 820 ++++++++++++++++++ src/pages/base/service/index.vue | 8 + src/pages/view/analysis/jl/classDetail.vue | 290 +++++++ src/pages/view/analysis/jl/index.vue | 341 ++++++++ src/pages/view/analysis/jl/personnelList.vue | 437 ++++++++++ src/pages/view/analysis/jl/statistics.vue | 410 +++++++++ .../view/hr/jsQj/components/jsQjEdit.vue | 2 +- src/pages/view/notice/detail.vue | 3 +- src/pages/view/notice/index.vue | 3 +- src/pages/view/notice/publish.vue | 3 +- src/pages/view/notice/push-list.vue | 2 +- .../view/routine/kefuxuncha/xcXkList.vue | 15 +- .../view/routine/kefuxuncha/xcXkkcDetail.vue | 146 +++- src/pages/view/rw/detail.vue | 273 ++++++ src/pages/view/rw/index.vue | 273 ++++++ src/static/base/home/jltj.png | Bin 0 -> 4354 bytes 18 files changed, 3087 insertions(+), 79 deletions(-) create mode 100644 src/api/base/jlApi.ts create mode 100644 src/pages/view/analysis/jl/classDetail.vue create mode 100644 src/pages/view/analysis/jl/index.vue create mode 100644 src/pages/view/analysis/jl/personnelList.vue create mode 100644 src/pages/view/analysis/jl/statistics.vue create mode 100644 src/pages/view/rw/detail.vue create mode 100644 src/pages/view/rw/index.vue create mode 100644 src/static/base/home/jltj.png diff --git a/src/api/base/jlApi.ts b/src/api/base/jlApi.ts new file mode 100644 index 0000000..2a68131 --- /dev/null +++ b/src/api/base/jlApi.ts @@ -0,0 +1,101 @@ +// 接龙相关API接口 +import { get, post } from "@/utils/request"; + +/** + * 根据年级ID和班级ID查询学生及家长信息 + */ +export const mobilejlstudentListApi = async (params: any) => { + return await get("/mobile/jl/studentList", params); +}; + +/** + * 根据年级ID、关联年级名称ID和学生ID查询家长接龙信息 + */ +export const mobilejllistApi = async (params: any) => { + const res = await get("/mobile/jl/list", params); + return res.result; +}; + +/** + * 根据jlId查询接龙列表数据 + */ +export const getByJlIdApi = async (params: any) => { + const res = await get("/mobile/jl/getByJlId", params); + return res.result; +}; + +/** + * 接龙统计API + */ +export const getJlStatisticsApi = async (params: any) => { + const res = await get("/mobile/jl/statistics", params); + return res.result; +}; + +/** + * 根据ID获取接龙详情 + */ +export const jlFindByIdApi = async (params: { id: string }) => { + return await get("/api/jl/findById", params); +}; + +/** + * 保存接龙(新增/编辑) + */ +export const jlSaveApi = async (params: any) => { + return await post("/api/jl/save", params); +}; + +/** + * 根据接龙ID查询接龙执行情况(学生列表) + */ +export const jlzxFindByJlParamsApi = async (params: { + jlId: string; + njId?: string; + njmcId?: string; + bjId?: string; +}) => { + return await get("/api/jlzx/findByJlParams", params); +}; + +/** + * 保存接龙消息推送 + */ +export const xxtsSaveByJlzxParamsApi = async (params: { jlId: string }) => { + return await post("/api/xxts/saveByJlzxParams", params); +}; + +/** + * 获取班级列表API + */ +export const getClassListApi = async () => { + const res = await get("/api/bj/findAll"); + return res.result; +}; + +/** + * 获取班级详情统计API + */ +export const getClassDetailApi = async (params: { jlId: string; njId: string }) => { + const res = await get("/mobile/jl/classDetail", params); + return res.result; +}; + +/** + * 获取接龙人员名单API + */ +export const getPersonnelListApi = async (params: { jlId: string; type: string; bjId?: string; njId?: string }) => { + const res = await get("/mobile/jl/personnelList", params); + return res.result; +}; + +/** + * 直接推送消息API(跳过验证和状态更新) + */ +export const pushMessageApi = async (params: { + jlId: string; + njId?: string; + bjId?: string; +}) => { + return await post("/api/jlzx/pushMessage", params); +}; \ No newline at end of file diff --git a/src/api/base/server.ts b/src/api/base/server.ts index ef59792..5b3d726 100644 --- a/src/api/base/server.ts +++ b/src/api/base/server.ts @@ -128,20 +128,6 @@ export const ksccKmFindByKsccIdApi = async (params: any) => { return await get("/api/kscc/findKsccKmmcById", params); }; -//根据年级ID和班级ID查询学生及家长信息 -export const mobilejlstudentListApi = async (params: any) => { - return await get("/mobile/jl/studentList", params); -}; -//根据年级ID、关联年级名称ID和学生ID查询家长接龙信息 -export const mobilejllistApi = async (params: any) => { - const res = await get("/mobile/jl/list", params); - return res.result; -}; -//根据jlId查询接龙列表数据 -export const getByJlIdApi = async (params: any) => { - const res = await get("/mobile/jl/getByJlId", params); - return res.result; -}; // 提交点名信息 export const jsdXkdmListApi = async (params: any) => { @@ -236,31 +222,6 @@ export const getJsPjGzlApi = async () => { return await get("/api/comConfig/getJsPjGzl"); }; -// 接龙相关API -// 根据ID获取接龙详情 -export const jlFindByIdApi = async (params: { id: string }) => { - return await get("/api/jl/findById", params); -}; - -// 保存接龙(新增/编辑) -export const jlSaveApi = async (params: any) => { - return await post("/api/jl/save", params); -}; - -// 根据接龙ID查询接龙执行情况(学生列表) -export const jlzxFindByJlParamsApi = async (params: { - jlId: string; - njId?: string; - njmcId?: string; - bjId?: string; -}) => { - return await get("/api/jlzx/findByJlParams", params); -}; - -// 保存接龙消息推送 -export const xxtsSaveByJlzxParamsApi = async (params: { jlId: string }) => { - return await post("/api/xxts/saveByJlzxParams", params); -}; /** * 获取当前学期和周次 diff --git a/src/pages.json b/src/pages.json index 8a831eb..abf0bfc 100644 --- a/src/pages.json +++ b/src/pages.json @@ -493,6 +493,34 @@ "enablePullDownRefresh": false } }, + { + "path": "pages/view/analysis/jl/statistics", + "style": { + "navigationBarTitleText": "接龙情况", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/view/analysis/jl/classDetail", + "style": { + "navigationBarTitleText": "班级详情", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/view/analysis/jl/personnelList", + "style": { + "navigationBarTitleText": "人员名单", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/view/analysis/jl/index", + "style": { + "navigationBarTitleText": "接龙统计", + "enablePullDownRefresh": false + } + }, { "path": "pages/view/routine/RengJiaoRengZhi/index", "style": { @@ -790,3 +818,795 @@ ] } } + + { + + "path": "pages/view/hr/teacherProfile/ExperienceInfo", + + "style": { + + "navigationBarTitleText": "学习及工作经历", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/hr/teacherProfile/FamilyInfo", + + "style": { + + "navigationBarTitleText": "家庭成员情况", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/hr/teacherProfile/EmergencyContact", + + "style": { + + "navigationBarTitleText": "紧急联系人", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/JiFenPingJia/PersonalHonor", + + "style": { + + "navigationBarTitleText": "个人荣誉", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/JiFenPingJia/PublicClassAwards", + + "style": { + + "navigationBarTitleText": "公开课获奖", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/hr/teacherProfile/RecordMaterials", + + "style": { + + "navigationBarTitleText": "备案资料", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/hr/salarySlip/detail", + + "style": { + + "navigationBarTitleText": "工资条详情", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/homeSchool/parentAddressBook/index", + + "style": { + + "navigationBarTitleText": "家长通讯录", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/homeSchool/parentAddressBook/detail", + + "style": { + + "navigationBarTitleText": "学生详情", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/notice/index", + + "style": { + + "navigationBarTitleText": "发布接龙", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/notice/detail", + + "style": { + + "navigationBarTitleText": "接龙详情", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/notice/publish", + + "style": { + + "navigationBarTitleText": "接龙推送", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/notice/push-list", + + "style": { + + "navigationBarTitleText": "推送清单", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/notice/selectStudents", + + "style": { + + "navigationBarTitleText": "选择学生", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/RengJiaoRengZhi/index", + + "style": { + + "navigationBarTitleText": "任教任职", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/GongZuoLiang/index", + + "style": { + + "navigationBarTitleText": "工作量", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/xk/xkList", + + "style": { + + "navigationBarTitleText": "选课列表", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/xk/xkkcDetail", + + "style": { + + "navigationBarTitleText": "选课课程详情" + + } + + }, + + { + + "path": "pages/view/routine/xk/dmIndex", + + "style": { + + "navigationBarTitleText": "点名选课列表" + + } + + }, + + { + + "path": "pages/view/routine/xk/dm", + + "style": { + + "navigationBarTitleText": "学生点名", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/xk/dmList", + + "style": { + + "navigationBarTitleText": "点名列表", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/xk/dmXsList", + + "style": { + + "navigationBarTitleText": "点名学生列表", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/xk/tf/detail", + + "style": { + + "navigationBarTitleText": "选课退费详情", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/xk/tf/sp", + + "style": { + + "navigationBarTitleText": "选课退费审批", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/kefuxuncha/xcRecord", + + "style": { + + "navigationBarTitleText": "选课巡查记录" + + } + + }, + + { + + "path": "pages/view/routine/kefuxuncha/kyRecord", + + "style": { + + "navigationBarTitleText": "课业巡查记录" + + } + + }, + + { + + "path": "pages/base/xs/qj/sp", + + "style": { + + "navigationBarTitleText": "学生请假审批", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/base/xs/qj/detail", + + "style": { + + "navigationBarTitleText": "学生请假详情", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/analysis/xs/studentArchive", + + "style": { + + "navigationBarTitleText": "学生档案", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/analysis/xk/xkCourse", + + "style": { + + "navigationBarTitleText": "课程明单", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/analysis/xk/xkList", + + "style": { + + "navigationBarTitleText": "选课清单", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/analysis/xk/dmStatistics", + + "style": { + + "navigationBarTitleText": "点名统计", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/analysis/xk/dmXkList", + + "style": { + + "navigationBarTitleText": "点名选课列表", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/routine/qd/index", + + "style": { + + "navigationBarTitleText": "签到发布" + + } + + }, + + { + + "path": "pages/view/routine/qd/publish", + + "style": { + + "navigationBarTitleText": "新增签到" + + } + + }, + + { + + "path": "pages/view/routine/qd/push-list", + + "style": { + + "navigationBarTitleText": "推送清单" + + } + + }, + + { + + "path": "pages/view/routine/qd/detail", + + "style": { + + "navigationBarTitleText": "签到详情" + + } + + }, + + { + + "path": "pages/view/routine/qd/selectTeachers", + + "style": { + + "navigationBarTitleText": "选择教师" + + } + + }, + + { + + "path": "pages/view/routine/qd/qr-code", + + "style": { + + "navigationBarTitleText": "签到二维码", + + "navigationStyle": "custom" + + } + + }, + + { + + "path": "pages/view/routine/qd/confirm", + + "style": { + + "navigationBarTitleText": "确认签到", + + "navigationStyle": "custom" + + } + + }, + + { + + "path": "pages/view/routine/JiaoXueZiYuan/add-resource", + + "style": { + + "navigationBarTitleText": "上传资源", + + "enablePullDownRefresh": false, + + "navigationBarBackgroundColor": "#ffffff", + + "navigationBarTextStyle": "black", + + "backgroundColor": "#f4f5f7" + + } + + }, + + { + + "path": "pages/view/routine/jc/bzList", + + "style": { + + "navigationBarTitleText": "就餐标准列表" + + } + + }, + + { + + "path": "pages/view/routine/jc/index", + + "style": { + + "navigationBarTitleText": "就餐点名" + + } + + }, + + { + + "path": "pages/view/routine/jc/detail", + + "style": { + + "navigationBarTitleText": "就餐点名详情" + + } + + }, + + { + + "path": "pages/view/quantitativeAssessment/assessment/assessment", + + "style": { + + "navigationBarTitleText": "考核评价", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/quantitativeAssessment/casualShot/casualShot", + + "style": { + + "navigationBarTitleText": "随手拍", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/quantitativeAssessment/distribute/distribute", + + "style": { + + "navigationBarTitleText": "分配", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/quantitativeAssessment/index/index", + + "style": { + + "navigationBarTitleText": "量化考核首页", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/quantitativeAssessment/index/details", + + "style": { + + "navigationBarTitleText": "量化考核详情", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/quantitativeAssessment/quantitativeSummary/quantitativeSummary", + + "style": { + + "navigationBarTitleText": "量化汇总", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/quantitativeAssessment/index/noticeAnnouncement", + + "style": { + + "navigationBarTitleText": "通知公告", + + "enablePullDownRefresh": false + + } + + }, + + { + + "path": "pages/view/quantitativeAssessment/index/playPage", + + "style": { + + "navigationBarTitleText": "播放页面", + + "enablePullDownRefresh": false + + } + + } + + ], + + "globalStyle": { + + "navigationBarTextStyle": "black", + + "navigationBarTitleText": "uni-app", + + "navigationBarBackgroundColor": "#fff", + + "backgroundColor": "#F8F8F8", + + "orientation": "portrait", + + "navigationStyle": "custom", + + "app-plus": { + + "background": "#efeff4", + + "titleView": false + + } + + }, + + "tabBar": { + + "selectedColor": "#447ade", + + "color": "#999999", + + "borderStyle": "black", + + "backgroundColor": "#ffffff", + + "list": [ + + { + + "text": "消息", + + "pagePath": "pages/base/message/index", + + "iconPath": "static/tabBar/x1.png", + + "selectedIconPath": "static/tabBar/1.png" + + }, + + { + + "text": "自助服务", + + "pagePath": "pages/base/service/index", + + "iconPath": "static/tabBar/x2.png", + + "selectedIconPath": "static/tabBar/2.png" + + }, + + { + + "text": "我的", + + "pagePath": "pages/base/mine/index", + + "iconPath": "static/tabBar/x3.png", + + "selectedIconPath": "static/tabBar/3.png" + + } + + ] + + } + +} + + diff --git a/src/pages/base/service/index.vue b/src/pages/base/service/index.vue index 5b7c155..7dd7070 100644 --- a/src/pages/base/service/index.vue +++ b/src/pages/base/service/index.vue @@ -320,6 +320,14 @@ const sections = reactive([ permissionKey: "routine-bjjl", // 发布接龙权限编码 path: "/pages/view/notice/index", }, + { + id: "r13", + icon: "jltj", + text: "接龙统计", + show: true, + permissionKey: "routine-jltj", // 接龙统计权限编码 + path: "/pages/view/analysis/jl/index", + }, { id: "hs4", icon: "xsda", diff --git a/src/pages/view/analysis/jl/classDetail.vue b/src/pages/view/analysis/jl/classDetail.vue new file mode 100644 index 0000000..d4c7a1c --- /dev/null +++ b/src/pages/view/analysis/jl/classDetail.vue @@ -0,0 +1,290 @@ + + + + + + diff --git a/src/pages/view/analysis/jl/index.vue b/src/pages/view/analysis/jl/index.vue new file mode 100644 index 0000000..e17e741 --- /dev/null +++ b/src/pages/view/analysis/jl/index.vue @@ -0,0 +1,341 @@ + + + + + + diff --git a/src/pages/view/analysis/jl/personnelList.vue b/src/pages/view/analysis/jl/personnelList.vue new file mode 100644 index 0000000..b92495f --- /dev/null +++ b/src/pages/view/analysis/jl/personnelList.vue @@ -0,0 +1,437 @@ + + + + + + diff --git a/src/pages/view/analysis/jl/statistics.vue b/src/pages/view/analysis/jl/statistics.vue new file mode 100644 index 0000000..e831797 --- /dev/null +++ b/src/pages/view/analysis/jl/statistics.vue @@ -0,0 +1,410 @@ + + + + + + diff --git a/src/pages/view/hr/jsQj/components/jsQjEdit.vue b/src/pages/view/hr/jsQj/components/jsQjEdit.vue index b8a8ea1..8e2a53a 100644 --- a/src/pages/view/hr/jsQj/components/jsQjEdit.vue +++ b/src/pages/view/hr/jsQj/components/jsQjEdit.vue @@ -129,7 +129,7 @@ const [register, { setValue, getValue }] = useForm({ field: "fileUrl", label: "上传附件", component: "BasicUpload", - required: true, + required: false, itemProps: { labelPosition: "top", }, diff --git a/src/pages/view/notice/detail.vue b/src/pages/view/notice/detail.vue index 774fdf1..1fa5e05 100644 --- a/src/pages/view/notice/detail.vue +++ b/src/pages/view/notice/detail.vue @@ -182,7 +182,8 @@ @@ -696,6 +736,48 @@ onMounted(async () => { } } +.inspection-time-info { + margin-top: 15px; + padding: 10px 15px; + background-color: #f0f8ff; + border-radius: 4px; + border: 1px solid #d6e4ff; + + .time-item { + display: flex; + align-items: center; + + .time-label { + font-size: 14px; + color: #666; + margin-left: 5px; + margin-right: 5px; + } + + .time-value { + font-size: 14px; + color: #4080ff; + font-weight: 500; + } + } +} + +.inspection-status { + display: flex; + align-items: center; + margin-top: 15px; + padding: 10px 15px; + background-color: #fffbe6; + border: 1px solid #ffe58f; + border-radius: 4px; + color: #faad14; + font-size: 14px; + + .status-text { + margin-left: 5px; + } +} + .teacher-selection-info { margin-top: 15px; padding: 10px 15px; diff --git a/src/pages/view/rw/detail.vue b/src/pages/view/rw/detail.vue new file mode 100644 index 0000000..43f1baa --- /dev/null +++ b/src/pages/view/rw/detail.vue @@ -0,0 +1,273 @@ + + + + + + diff --git a/src/pages/view/rw/index.vue b/src/pages/view/rw/index.vue new file mode 100644 index 0000000..43f1baa --- /dev/null +++ b/src/pages/view/rw/index.vue @@ -0,0 +1,273 @@ + + + + + + diff --git a/src/static/base/home/jltj.png b/src/static/base/home/jltj.png new file mode 100644 index 0000000000000000000000000000000000000000..e9b14dd9924280a8dac7608017b60f77ba6158ae GIT binary patch literal 4354 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