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 @@
-
-
-
-
-
-
-
-
- {{ 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 @@
+
+
+
+
+
+
+
+
+
+
+ {{ xkkc.kcmc }}
+
+ 上课周期:
+ {{ xkkc.skzqmc }}
+
+
+ 上课时间:
+ {{ formatClassTime(xkkc.skkstime, xkkc.skjstime) }}
+
+
+ 上课地点:
+ {{ xkkc.kcdd }}
+
+
+
+
+
+
+
+
+
+ 现场拍照
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击拍照
+
+
+
+
+
+
+ 现场视频
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击录制
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
-
-
-
-
-
-
-
-
- {{ 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?.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 @@
-
-
-
-
-
-
+
@@ -28,22 +17,22 @@
- 上课周期类型:
- {{ xkkc.skzqlx }}
+ 上课周期类型:
+ {{ xkkc.skzqlx }}
- 上课周期:
- {{ xkkc.skzqmc }}
+ 上课周期:
+ {{ xkkc.skzqmc }}
- 上课时间:
- {{ xkkc.skkstime }} - {{ xkkc.skjstime }}上课时间:
+ {{ xkkc.skkstime }} - {{ xkkc.skjstime }}
- 上课地点:
- {{ xkkc.kcdd }}
+ 上课地点:
+ {{ xkkc.kcdd }}
@@ -128,14 +117,32 @@
拍照上传
-
-
+
+
+
+
+
+ ×
+
+
+
+ +
+ 添加图片
+
+
@@ -147,134 +154,16 @@
拍视频上传
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 巡查教师:
- {{ data.jsxm }}
-
-
- 巡查项目:
-
-
+
+
-
- {{ idx + 1 }}、{{ xm.xcMc }}
-
- 分值:{{ xm.xmFz }}分
- 巡查结果:{{
- xm.xcJg === "A" ? "有" : "无"
- }}
-
-
-
-
- 无巡查项目
-
-
-
- 巡查图片:
-
-
-
-
-
- 巡查视频:
-
-
+
+
+
+
+ ×
+
+
-
+ v-if="videoList.length < 3"
+ class="upload-add"
+ @click="chooseVideo"
+ >
+ +
+ 添加视频
-
-
-
-
-
-
@@ -336,19 +210,16 @@