diff --git a/src/api/base/server.ts b/src/api/base/server.ts index b1d92e2..244a9cf 100644 --- a/src/api/base/server.ts +++ b/src/api/base/server.ts @@ -94,6 +94,14 @@ export const jsdXkListApi = async (params: any) => { return await get("/mobile/js/xk/list", params); }; +/** + * 获取当前学期教师上课课程列表 + */ +export const getCurrentSemesterTeacherCoursesApi = async (jsId?: string) => { + const params = jsId ? { jsId } : {}; + return await get("/api/xkkc/getCurrentSemesterTeacherCourses", params); +}; + // 选课列表 export const jsdXkkcSaveApi = async (params: any) => { return await post("/api/xkkc/save", params); @@ -357,5 +365,12 @@ export const getByUserIdAndInspectItemIdApi = async (params: any) => { // 清空用户open_id export const clearUserOpenIdApi = async (params: { userId: string }) => { - return await post(`/api/user/clearOpenId?userId=${params.userId}`); + return await post("/api/user/clearUserOpenId", params); +}; + +/** + * 课堂随拍保存API + */ +export const jsdXkkcPhotoSaveApi = async (params: any) => { + return await post("/mobile/js/xk/photo/save", params); }; diff --git a/src/components/BasicTree/Tree.vue b/src/components/BasicTree/Tree.vue index 31d761e..399decb 100644 --- a/src/components/BasicTree/Tree.vue +++ b/src/components/BasicTree/Tree.vue @@ -30,14 +30,14 @@ :src="item.lastRank ? lastIcon : item.showChild ? currentIcon : defaultIcon"> {{ item.name }} - - + + + :style="{'border-color': !item.lastRank ? '#ccc' : confirmColor}"> @@ -277,17 +277,16 @@ export default { // console.log(this.treeList) }, _treeItemSelect(item, index) { + // 只有叶子节点才能被选择 + if (!item.lastRank) { + // 如果不是叶子节点,不允许选择 + return; + } + if (this.multiple) { - if (!item.lastRank) { - // 父节点多选框:全选/全不选所有子节点 - const allChecked = this._isAllChildrenChecked(item); - this._setAllChildrenChecked(item, !allChecked); - item.checked = !allChecked; - } else { - // 子节点单独切换 - this.treeList[index].checked = !this.treeList[index].checked; - this._updateParentChecked(item); - } + // 子节点单独切换 + this.treeList[index].checked = !this.treeList[index].checked; + this._updateParentChecked(item); this._fixMultiple(index); } else { // 单选逻辑 @@ -496,4 +495,14 @@ export default { opacity: 0.6; } +.tki-tree-check.disabled { + opacity: 0.4; + cursor: not-allowed; +} + +.tki-tree-check.disabled .tki-tree-check-no { + border-color: #ccc !important; + background-color: #f5f5f5; +} + diff --git a/src/pages.json b/src/pages.json index dafddf7..3babb77 100644 --- a/src/pages.json +++ b/src/pages.json @@ -505,6 +505,25 @@ "enablePullDownRefresh": false } }, + { + "path": "pages/base/groupTeaching/dmXkkcRecord", + "style": { + "navigationBarTitleText": "点名记录", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/base/groupTeaching/photoXkkcDetail", + "style": { + "navigationBarTitleText": "课堂随拍" + } + }, + { + "path": "pages/view/routine/kefuxuncha/xcRecord", + "style": { + "navigationBarTitleText": "巡查记录" + } + }, { "path": "pages/base/xs/qj/sp", "style": { diff --git a/src/pages/base/groupTeaching/dmXkList.vue b/src/pages/base/groupTeaching/dmXkList.vue index 0d544d9..cbe3e66 100644 --- a/src/pages/base/groupTeaching/dmXkList.vue +++ b/src/pages/base/groupTeaching/dmXkList.vue @@ -3,12 +3,13 @@ - + - {{ xkData.xkmc }} - 选课信息 + + {{ getCurrentSemesterName() }} - 我的课程 + + 暂无课程 - 切换 @@ -19,21 +20,13 @@ {{ xkkc.kcmc }} - - 上课周期类型: - {{ xkkc.skzqlx }} - 上课周期: {{ xkkc.skzqmc }} - 上课开始时间: - {{ xkkc.skkstime }} - - - 上课结束时间: - {{ xkkc.skjstime }} + 上课时间: + {{ formatClassTime(xkkc.skkstime, xkkc.skjstime) }} 开课地点: @@ -43,8 +36,11 @@ 上课人数: {{ xkkc.hasNum || 0 }} | {{ xkkc.maxNum || 0 }} + 点名 + 点名记录 + @@ -58,29 +54,6 @@ - - - - - - 选择俱乐部 - - - - - - {{ xk.xkmc }} - {{ xk.xkmc }} - - - - - - - - @@ -92,7 +65,7 @@ import { } from "vue"; import { useUserStore } from "@/store/modules/user"; import { useDataStore } from "@/store/modules/data"; -import { jsdXkListApi } from "@/api/base/server"; +import { getCurrentSemesterTeacherCoursesApi } from "@/api/base/server"; import { dmBeforeMinuteApi } from "@/api/system/config/index"; import dayjs from "dayjs"; @@ -101,15 +74,6 @@ const { getData, setData } = useDataStore(); const wdNameList = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]; -// 控制选择器显示状态 -const showXkFlag = ref(false); - -const xkList = ref([]); - -const xkData = ref(); - -const courseInfo = ref({}); - // 课程列表数据 const xkkcList = ref([]); @@ -119,75 +83,126 @@ onMounted(async () => { uni.showLoading({ title: "加载中...", }); - await loadCourseList(); - await loadDmBeforeMinute(); - uni.hideLoading(); + try { + await loadCourseList(); + await loadDmBeforeMinute(); + } catch (error) { + console.error('页面初始化失败:', error); + uni.showToast({ + title: '页面加载失败', + icon: 'none' + }); + } finally { + uni.hideLoading(); + } }); // 加载课程列表 const loadCourseList = async () => { - const res = await jsdXkListApi({ - jsId: getJs.id - }); - if (res.resultCode == 1) { - if (res.result && res.result.length) { - xkList.value = res.result; - switchXk(res.result[0]); - } else { - xkList.value = []; - xkData.value = {}; - xkkcList.value = []; - } - } + try { + const res = await getCurrentSemesterTeacherCoursesApi(getJs.id); + if (res.resultCode == 1) { + if (res.result && res.result.length) { + xkkcList.value = res.result; + // 处理课程周期显示 + processCoursePeriods(); + } else { + xkkcList.value = []; + } + } else { + xkkcList.value = []; + uni.showToast({ + title: res.message || '获取课程列表失败', + icon: 'none' + }); + } + } catch (error) { + console.error('加载课程列表失败:', error); + xkkcList.value = []; + uni.showToast({ + title: '加载课程列表失败', + icon: 'none' + }); + } +}; + +// 处理课程周期显示 +const processCoursePeriods = () => { + for (let i = 0; i < xkkcList.value.length; i++) { + let xkkc = xkkcList.value[i]; + // 判断周期 + switch (xkkc.skzqlx) { + case '每天': + xkkc.skzqmc = "每天"; + break; + case '每周': + const daysOfWeek = xkkc.skzq.split(',').map(Number); + // 从wdNameList读取daysOfWeek对应的周几 + xkkc.skzqmc = daysOfWeek.map((day: number) => wdNameList[day - 1]).join(','); + break; + case '每月': + const daysOfMonth = xkkc.skzq.split(',').map(Number); + // 从根据编号加 + xkkc.skzqmc = daysOfMonth.map((day: number) => day + "号").join(','); + break; + } + } +}; + +// 获取当前学期名称 +const getCurrentSemesterName = () => { + if (xkkcList.value && xkkcList.value.length > 0) { + // 从第一个课程获取学期名称 + return xkkcList.value[0].xqmc || '当前学期'; + } + return '当前学期'; +}; + +// 格式化上课时间 +const formatClassTime = (startTime: string, endTime: string) => { + if (!startTime || !endTime) { + return ''; + } + + try { + // 尝试解析时间,支持多种格式 + let start, end; + + // 如果是时间格式(HH:mm:ss 或 HH:mm) + if (startTime.includes(':') && !startTime.includes('-') && !startTime.includes('/')) { + start = startTime; + end = endTime; + } else { + // 尝试用 dayjs 解析 + const startDate = dayjs(startTime); + const endDate = dayjs(endTime); + + if (startDate.isValid() && endDate.isValid()) { + start = startDate.format('HH:mm:ss'); + end = endDate.format('HH:mm:ss'); + } else { + // 如果解析失败,直接返回原始值 + return `${startTime}~${endTime}`; + } + } + + return `${start}~${end}`; + } catch (error) { + console.error('时间格式化错误:', error); + // 如果出错,返回原始值 + return `${startTime}~${endTime}`; + } }; // 获取点名时间提前分钟数 const loadDmBeforeMinute = async () => { - const res = await dmBeforeMinuteApi(); - if (res.resultCode == 1) { - // 将res.result从字符串转换成int的number赋给dmBeforeMinute + const res = await dmBeforeMinuteApi(); + if (res.resultCode == 1) { + // 将res.result从字符串转换成int的number赋给dmBeforeMinute dmBeforeMinute.value = parseInt(res.result); - } -} - -// 显示选课选择器 -function clickShowXkSelector() { - if (xkList.value.length > 1) { - showXkFlag.value = true; } } -// 切换选课 -function switchXk(xk: any) { - xkData.value = xk; - xkkcList.value = xk.xkkcs; - showXkFlag.value = false; - for (let i = 0; i < xk.xkkcs.length; i++) { - let xkkc = xk.xkkcs[i]; - // 判断周期 - switch (xkkc.skzqlx) { - case '每天': - xkkc.skzqmc = "每天"; - break; - case '每周': - const daysOfWeek = xkkc.skzq.split(',').map(Number); - // 从wdNameList读取daysOfWeek对应的周几 - xkkc.skzqmc = daysOfWeek.map((day: number) => wdNameList[day - 1]).join(','); - break; - case '每月': - const daysOfMonth = xkkc.skzq.split(',').map(Number); - // 从根据编号加 - xkkc.skzqmc = daysOfMonth.map((day: number) => day + "号").join(','); - break; - } - } - // 显示切换成功提示 - uni.showToast({ - title: `已切换到${xk.xkmc}`, - icon: "none", - }); -} - // 跳转到点名 const goDm = (xkkc: any) => { const now = dayjs(); @@ -197,50 +212,160 @@ const goDm = (xkkc: any) => { } let mDay = now.date(); const strDate = now.format('YYYY-MM-DD') + ' '; - let dmFlag = false; - let msg = ""; - // 判断周期 - switch (xkkc.skzqlx) { - case '每天': - dmFlag = true; - break; - case '每周': - const daysOfWeek = xkkc.skzq.split(',').map(Number); - dmFlag = daysOfWeek.includes(wDay); - // 从wdNameList读取daysOfWeek对应的周几 - xkkc.skzqmc = daysOfWeek.map((day: number) => wdNameList[day - 1]).join(','); - break; - case '每月': - const daysOfMonth = xkkc.skzq.split(',').map(Number); - dmFlag = daysOfMonth.includes(mDay); - // 从根据编号加 - xkkc.skzqmc = daysOfMonth.map((day: number) => day + "号").join(','); - break; - } - // 判断日期是否合格 - if (dmFlag) { - // xkkc.skkstime开始时间向前dmBeforeMinute分钟 + let dmFlag = false; + let msg = ""; + // 判断周期 + switch (xkkc.skzqlx) { + case '每天': + dmFlag = true; + break; + case '每周': + const daysOfWeek = xkkc.skzq.split(',').map(Number); + dmFlag = daysOfWeek.includes(wDay); + // 从wdNameList读取daysOfWeek对应的周几 + xkkc.skzqmc = daysOfWeek.map((day: number) => wdNameList[day - 1]).join(','); + break; + case '每月': + const daysOfMonth = xkkc.skzq.split(',').map(Number); + dmFlag = daysOfMonth.includes(mDay); + // 从根据编号加 + xkkc.skzqmc = daysOfMonth.map((day: number) => day + "号").join(','); + break; + } + // 判断日期是否合格 + if (dmFlag) { + // xkkc.skkstime开始时间向前dmBeforeMinute分钟 const startTime = dayjs(strDate + xkkc.skkstime).subtract(dmBeforeMinute.value, 'minute').format('YYYY-MM-DD HH:mm:ss'); - const endTime = dayjs(strDate + xkkc.skjstime, 'YYYY-MM-DD HH:mm:ss'); - dmFlag = now.isBefore(endTime) && now.isAfter(startTime) - } else { - msg = "没到点名日期"; - } - if (dmFlag) { - setData(xkkc); - uni.navigateTo({ - url: `/pages/base/groupTeaching/dmXkkcDetail`, - }); - } else { - if (msg === "") { - msg = "没到点名时间"; - } - uni.showToast({ - title: msg, - icon: 'none', - duration: 2000 - }); - } + const endTime = dayjs(strDate + xkkc.skjstime, 'YYYY-MM-DD HH:mm:ss'); + dmFlag = now.isBefore(endTime) && now.isAfter(startTime) + } else { + msg = "上课时间未到,无法点名"; + } + if (dmFlag) { + setData(xkkc); + uni.navigateTo({ + url: `/pages/base/groupTeaching/dmXkkcDetail`, + }); + } else { + if (msg === "") { + msg = "上课时间未到,无法点名"; + } + uni.showToast({ + title: msg, + icon: 'none', + duration: 2000 + }); + } +}; + +// 跳转到点名记录 +const goRecord = (xkkc: any) => { + const now = dayjs(); + let wDay = now.day(); + if (wDay === 0) { + wDay = 7; + } + let mDay = now.date(); + const strDate = now.format('YYYY-MM-DD') + ' '; + let recordFlag = false; + let msg = ""; + // 判断周期 + switch (xkkc.skzqlx) { + case '每天': + recordFlag = true; + break; + case '每周': + const daysOfWeek = xkkc.skzq.split(',').map(Number); + recordFlag = daysOfWeek.includes(wDay); + // 从wdNameList读取daysOfWeek对应的周几 + xkkc.skzqmc = daysOfWeek.map((day: number) => wdNameList[day - 1]).join(','); + break; + case '每月': + const daysOfMonth = xkkc.skzq.split(',').map(Number); + recordFlag = daysOfMonth.includes(mDay); + // 从根据编号加 + xkkc.skzqmc = daysOfMonth.map((day: number) => day + "号").join(','); + break; + } + // 判断日期是否合格 + if (recordFlag) { + // xkkc.skkstime开始时间向前dmBeforeMinute分钟 + const startTime = dayjs(strDate + xkkc.skkstime).subtract(dmBeforeMinute.value, 'minute').format('YYYY-MM-DD HH:mm:ss'); + const endTime = dayjs(strDate + xkkc.skjstime, 'YYYY-MM-DD HH:mm:ss'); + recordFlag = now.isBefore(endTime) && now.isAfter(startTime) + } else { + msg = "上课时间未到,无法查看点名记录"; + } + if (recordFlag) { + setData(xkkc); + uni.navigateTo({ + url: `/pages/base/groupTeaching/dmXkkcRecord`, + }); + } else { + if (msg === "") { + msg = "上课时间未到,无法查看点名记录"; + } + uni.showToast({ + title: msg, + icon: 'none', + duration: 2000 + }); + } +}; + +// 跳转到课堂随拍 +const goPhoto = (xkkc: any) => { + const now = dayjs(); + let wDay = now.day(); + if (wDay === 0) { + wDay = 7; + } + let mDay = now.date(); + const strDate = now.format('YYYY-MM-DD') + ' '; + let photoFlag = false; + let msg = ""; + // 判断周期 + switch (xkkc.skzqlx) { + case '每天': + photoFlag = true; + break; + case '每周': + const daysOfWeek = xkkc.skzq.split(',').map(Number); + photoFlag = daysOfWeek.includes(wDay); + // 从wdNameList读取daysOfWeek对应的周几 + xkkc.skzqmc = daysOfWeek.map((day: number) => wdNameList[day - 1]).join(','); + break; + case '每月': + const daysOfMonth = xkkc.skzq.split(',').map(Number); + photoFlag = daysOfMonth.includes(mDay); + // 从根据编号加 + xkkc.skzqmc = daysOfMonth.map((day: number) => day + "号").join(','); + break; + } + // 判断日期是否合格 + if (photoFlag) { + // xkkc.skkstime开始时间向前dmBeforeMinute分钟 + const startTime = dayjs(strDate + xkkc.skkstime).subtract(dmBeforeMinute.value, 'minute').format('YYYY-MM-DD HH:mm:ss'); + const endTime = dayjs(strDate + xkkc.skjstime, 'YYYY-MM-DD HH:mm:ss'); + photoFlag = now.isBefore(endTime) && now.isAfter(startTime) + } else { + msg = "上课时间未到,无法随拍"; + } + if (photoFlag) { + setData(xkkc); + uni.navigateTo({ + url: `/pages/base/groupTeaching/photoXkkcDetail`, + }); + } else { + if (msg === "") { + msg = "上课时间未到,无法随拍"; + } + uni.showToast({ + title: msg, + icon: 'none', + duration: 2000 + }); + } }; // 页面卸载前清除定时器 @@ -251,7 +376,7 @@ onBeforeUnmount(() => { diff --git a/src/pages/base/groupTeaching/dmXkkcDetail.vue b/src/pages/base/groupTeaching/dmXkkcDetail.vue index 9b594de..ee7ebf1 100644 --- a/src/pages/base/groupTeaching/dmXkkcDetail.vue +++ b/src/pages/base/groupTeaching/dmXkkcDetail.vue @@ -43,7 +43,7 @@ @@ -60,7 +60,7 @@ {{ xs.bjmc }} - + 联系家长 - + + + + + + + 正在提交... + + + + diff --git a/src/pages/base/groupTeaching/photoXkkcDetail.vue b/src/pages/base/groupTeaching/photoXkkcDetail.vue new file mode 100644 index 0000000..8b5d78f --- /dev/null +++ b/src/pages/base/groupTeaching/photoXkkcDetail.vue @@ -0,0 +1,419 @@ + + + + + diff --git a/src/pages/base/groupTeaching/xkList.vue b/src/pages/base/groupTeaching/xkList.vue index 3282d34..9334ce5 100644 --- a/src/pages/base/groupTeaching/xkList.vue +++ b/src/pages/base/groupTeaching/xkList.vue @@ -3,12 +3,13 @@ - + - {{ xkData.xkmc }} - 选课信息 + + {{ getCurrentSemesterName() }} - 我的课程 + + 暂无课程 - 切换 @@ -18,22 +19,17 @@ - {{ xkkc.kcmc }} - - 上课周期类型: - {{ xkkc.skzqlx }} + + {{ getStatusText(xkkc) }} + {{ xkkc.kcmc }} 上课周期: {{ xkkc.skzqmc }} - 上课开始时间: - {{ xkkc.skkstime }} - - - 上课结束时间: - {{ xkkc.skjstime }} + 上课时间: + {{ formatClassTime(xkkc.skkstime, xkkc.skjstime) }} 开课地点: @@ -43,8 +39,9 @@ 上课人数: {{ xkkc.hasNum || 0 }} | {{ xkkc.maxNum || 0 }} + - 详情 + 填报 @@ -58,29 +55,6 @@ - - - - - - 选择俱乐部 - - - - - - {{ xk.xkmc }} - {{ xk.xkmc }} - - - - - - - - @@ -92,7 +66,7 @@ import { } from "vue"; import { useUserStore } from "@/store/modules/user"; import { useDataStore } from "@/store/modules/data"; -import { jsdXkListApi } from "@/api/base/server"; +import { getCurrentSemesterTeacherCoursesApi } from "@/api/base/server"; import dayjs from "dayjs"; const { getJs } = useUserStore(); @@ -100,15 +74,6 @@ const { getData, setData } = useDataStore(); const wdNameList = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]; -// 控制选择器显示状态 -const showXkFlag = ref(false); - -const xkList = ref([]); - -const xkData = ref(); - -const courseInfo = ref({}); - // 课程列表数据 const xkkcList = ref([]); @@ -121,59 +86,118 @@ const loadCourseList = async () => { uni.showLoading({ title: "加载中...", }); - const res = await jsdXkListApi({ - jsId: getJs.id - }); - if (res.resultCode == 1) { - if (res.result && res.result.length) { - xkList.value = res.result; - switchXk(res.result[0]); - } else { - xkList.value = []; - xkData.value = {}; - xkkcList.value = []; - } - } - uni.hideLoading(); + try { + const res = await getCurrentSemesterTeacherCoursesApi(getJs.id); + if (res.resultCode == 1) { + if (res.result && res.result.length) { + xkkcList.value = res.result; + // 处理课程周期显示 + processCoursePeriods(); + } else { + xkkcList.value = []; + } + } else { + xkkcList.value = []; + uni.showToast({ + title: res.resultMessage || '获取课程列表失败', + icon: 'none' + }); + } + } catch (error) { + console.error('加载课程列表失败:', error); + xkkcList.value = []; + uni.showToast({ + title: '加载课程列表失败', + icon: 'none' + }); + } finally { + uni.hideLoading(); + } }; -// 显示选课选择器 -function clickShowXkSelector() { - if (xkList.value.length > 1) { - showXkFlag.value = true; +// 处理课程周期显示 +const processCoursePeriods = () => { + for (let i = 0; i < xkkcList.value.length; i++) { + let xkkc = xkkcList.value[i]; + // 判断周期 + switch (xkkc.skzqlx) { + case '每天': + xkkc.skzqmc = "每天"; + break; + case '每周': + const daysOfWeek = xkkc.skzq.split(',').map(Number); + // 从wdNameList读取daysOfWeek对应的周几 + xkkc.skzqmc = daysOfWeek.map((day: number) => wdNameList[day - 1]).join(','); + break; + case '每月': + const daysOfMonth = xkkc.skzq.split(',').map(Number); + // 从根据编号加 + xkkc.skzqmc = daysOfMonth.map((day: number) => day + "号").join(','); + break; + } } -} +}; -// 切换选课 -function switchXk(xk: any) { - xkData.value = xk; - xkkcList.value = xk.xkkcs; - showXkFlag.value = false; - for (let i = 0; i < xk.xkkcs.length; i++) { - let xkkc = xk.xkkcs[i]; - // 判断周期 - switch (xkkc.skzqlx) { - case '每天': - xkkc.skzqmc = "每天"; - break; - case '每周': - const daysOfWeek = xkkc.skzq.split(',').map(Number); - // 从wdNameList读取daysOfWeek对应的周几 - xkkc.skzqmc = daysOfWeek.map((day: number) => wdNameList[day - 1]).join(','); - break; - case '每月': - const daysOfMonth = xkkc.skzq.split(',').map(Number); - // 从根据编号加 - xkkc.skzqmc = daysOfMonth.map((day: number) => day + "号").join(','); - break; - } - } - // 显示切换成功提示 - uni.showToast({ - title: `已切换到${xk.xkmc}`, - icon: "none", - }); -} +// 获取当前学期名称 +const getCurrentSemesterName = () => { + if (xkkcList.value && xkkcList.value.length > 0) { + // 从第一个课程获取学期名称 + return xkkcList.value[0].xqmc || '当前学期'; + } + return '当前学期'; +}; + +// 格式化上课时间 +const formatClassTime = (startTime: string, endTime: string) => { + if (!startTime || !endTime) { + return ''; + } + + try { + // 尝试解析时间,支持多种格式 + let start, end; + + // 如果是时间格式(HH:mm:ss 或 HH:mm) + if (startTime.includes(':') && !startTime.includes('-') && !startTime.includes('/')) { + start = startTime; + end = endTime; + } else { + // 尝试用 dayjs 解析 + const startDate = dayjs(startTime); + const endDate = dayjs(endTime); + + if (startDate.isValid() && endDate.isValid()) { + start = startDate.format('HH:mm:ss'); + end = endDate.format('HH:mm:ss'); + } else { + // 如果解析失败,直接返回原始值 + return `${startTime}~${endTime}`; + } + } + + return `${start}~${end}`; + } catch (error) { + console.error('时间格式化错误:', error); + // 如果出错,返回原始值 + return `${startTime}~${endTime}`; + } +}; + +// 获取状态文本 +const getStatusText = (xkkc: any) => { + if (!xkkc.kcjsms && !xkkc.jxll) { + return '待填报'; + } + return '已填报'; +}; + +// 获取状态样式类 +const getStatusClass = (xkkc: any) => { + if (!xkkc.kcjsms && !xkkc.jxll) { + return 'pending'; + } + return 'completed'; +}; // 查看课程详情 const goDetail = (xkkc: any) => { @@ -191,7 +215,7 @@ onBeforeUnmount(() => { diff --git a/src/pages/base/service/index.vue b/src/pages/base/service/index.vue index ed1c4d1..9bc58f9 100644 --- a/src/pages/base/service/index.vue +++ b/src/pages/base/service/index.vue @@ -234,7 +234,7 @@ const sections = reactive([ { id: "r7", icon: "file-text-fill-2", - text: "课程介绍", + text: "课程填报", show: true, permissionKey: "routine-kcjs", // 课程介绍权限编码 path: "/pages/base/groupTeaching/xkList", diff --git a/src/pages/view/homeSchool/parentAddressBook/detail.vue b/src/pages/view/homeSchool/parentAddressBook/detail.vue index 0e68a6b..5dee488 100644 --- a/src/pages/view/homeSchool/parentAddressBook/detail.vue +++ b/src/pages/view/homeSchool/parentAddressBook/detail.vue @@ -6,17 +6,17 @@ {{ xsInfo?.xm }} - {{ xsInfo?.gender }} + {{ getGenderText(xsInfo?.gender) }} {{ xsInfo?.age }}岁 @@ -35,7 +35,11 @@ 出生日期: - {{ xsInfo?.birthDate }} + {{ xsInfo?.birthDate || '未知' }} + + + 年龄: + {{ xsInfo?.age || '未知' }}岁 + + {{ jz.jzxm }} + - {{ jz.jzxm }} + + ({{ jz.jzxsgxId }}) @@ -78,6 +88,7 @@ diff --git a/src/pages/view/routine/kefuxuncha/xcXkList.vue b/src/pages/view/routine/kefuxuncha/xcXkList.vue index 0c2771f..e9f7a1c 100644 --- a/src/pages/view/routine/kefuxuncha/xcXkList.vue +++ b/src/pages/view/routine/kefuxuncha/xcXkList.vue @@ -23,21 +23,13 @@ class="course-item" > {{ xkkc.kcmc }} - - 上课周期类型: - {{ xkkc.skzqlx }} - 上课周期: {{ xkkc.skzqmc }} - 上课开始时间: - {{ xkkc.skkstime }} - - - 上课结束时间: - {{ xkkc.skjstime }} + 上课时间: + {{ formatClassTime(xkkc.skkstime, xkkc.skjstime) }} 开课地点: @@ -49,8 +41,10 @@ >{{ xkkc.hasNum || 0 }} | {{ xkkc.maxNum || 0 }} + 巡查 + 巡查记录 @@ -110,6 +104,7 @@ import { jsdXkListApi } from "@/api/base/server"; import { useDataStore } from "@/store/modules/data"; import { useUserStore } from "@/store/modules/user"; import { onBeforeUnmount, onMounted, ref } from "vue"; +import dayjs from "dayjs"; const { getJs } = useUserStore(); const { getData, setData } = useDataStore(); @@ -198,6 +193,50 @@ const goXc = (xkkc: any) => { }); }; +// 跳转到巡查记录 +const goRecord = (xkkc: any) => { + setData(xkkc); + uni.navigateTo({ + url: `/pages/view/routine/kefuxuncha/xcRecord`, + }); +}; + +// 格式化课程时间 +const formatClassTime = (startTime: string, endTime: string) => { + if (!startTime || !endTime) { + return ''; + } + + try { + // 尝试解析时间,支持多种格式 + let start, end; + + // 如果是时间格式(HH:mm:ss 或 HH:mm) + if (startTime.includes(':') && !startTime.includes('-') && !startTime.includes('/')) { + start = startTime; + end = endTime; + } else { + // 尝试用 dayjs 解析 + const startDate = dayjs(startTime); + const endDate = dayjs(endTime); + + if (startDate.isValid() && endDate.isValid()) { + start = startDate.format('HH:mm:ss'); + end = endDate.format('HH:mm:ss'); + } else { + // 如果解析失败,直接返回原始值 + return `${startTime}~${endTime}`; + } + } + + return `${start}~${end}`; + } catch (error) { + console.error('时间格式化错误:', error); + // 如果出错,返回原始值 + return `${startTime}~${endTime}`; + } +}; + // 页面卸载前清除定时器 onBeforeUnmount(() => {}); @@ -205,7 +244,7 @@ onBeforeUnmount(() => {}); diff --git a/src/pages/view/routine/kefuxuncha/xcXkkcDetail.vue b/src/pages/view/routine/kefuxuncha/xcXkkcDetail.vue index 8bdc3c9..cde1278 100644 --- a/src/pages/view/routine/kefuxuncha/xcXkkcDetail.vue +++ b/src/pages/view/routine/kefuxuncha/xcXkkcDetail.vue @@ -1,18 +1,7 @@