From d8664108663a426803efd5863763a81d24ceb107 Mon Sep 17 00:00:00 2001 From: hebo Date: Sat, 6 Sep 2025 21:46:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E6=96=87=E6=B5=81=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/base/message/index.vue | 10 +- src/pages/view/routine/gwlz/gwFlow.vue | 557 ++++++++++++++++- src/pages/view/routine/gwlz/gwTransfer.vue | 71 ++- src/pages/view/routine/gwlz/index.vue | 588 ++++++++++++------ .../view/routine/kefuxuncha/xcXkList.vue | 4 + .../view/routine/kefuxuncha/xcXkkcDetail.vue | 8 + src/pages/view/routine/qd/confirm.vue | 98 ++- src/pages/view/routine/qd/detail.vue | 37 +- src/pages/view/routine/qd/index.vue | 10 +- src/pages/view/routine/qd/publish.vue | 144 ++++- src/pages/view/routine/qd/qr-code.vue | 4 + src/pages/view/routine/qd/selectTeachers.vue | 106 ++-- src/pages/view/routine/xk/dm.vue | 3 +- src/pages/view/routine/xk/dmIndex.vue | 5 +- src/pages/view/routine/xk/xkList.vue | 4 + src/pages/view/routine/xk/xkkcDetail.vue | 15 +- 16 files changed, 1361 insertions(+), 303 deletions(-) diff --git a/src/pages/base/message/index.vue b/src/pages/base/message/index.vue index c697906..6999a62 100644 --- a/src/pages/base/message/index.vue +++ b/src/pages/base/message/index.vue @@ -41,7 +41,7 @@ @@ -459,6 +628,7 @@ onMounted(() => { text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; + line-clamp: 2; -webkit-box-orient: vertical; word-break: break-word; } @@ -477,6 +647,14 @@ onMounted(() => { color: white; } &.status-submitted { + background: linear-gradient(135deg, #2196f3 0%, #1976d2 100%); + color: white; + } + &.status-pending { + background: linear-gradient(135deg, #ff9800 0%, #f57c00 100%); + color: white; + } + &.status-completed { background: linear-gradient(135deg, #66bb6a 0%, #4caf50 100%); color: white; } @@ -506,10 +684,9 @@ onMounted(() => { } .info-label { - width: 80px; color: #666; font-size: 14px; - margin-right: 8px; + margin-right: 0; flex-shrink: 0; } @@ -519,28 +696,53 @@ onMounted(() => { flex: 1; } -.urgency-tag { - padding: 4px 8px; - border-radius: 12px; - font-size: 12px; - font-weight: 500; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +// 紧急程度相关样式已删除 - &.urgency-low { - background: linear-gradient(135deg, #66bb6a 0%, #4caf50 100%); - color: white; +// 附件相关样式 +.attachments-section { + margin-top: 12px; + padding-top: 12px; + border-top: 1px solid #f0f0f0; +} + +// 附件标题样式已删除 + +.attachments-list { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.attachment-item { + display: flex; + align-items: center; + padding: 6px 10px; + background: #f8f9fa; + border: 1px solid #e9ecef; + border-radius: 6px; + cursor: pointer; + transition: all 0.3s ease; + max-width: 200px; + + &:active { + transform: translateY(1px); + background: #e9ecef; + border-color: #007aff; } - &.urgency-normal { - background: linear-gradient(135deg, #90a4ae 0%, #78909c 100%); - color: white; + + .attachment-icon { + margin-right: 6px; + font-size: 16px; + flex-shrink: 0; } - &.urgency-high { - background: linear-gradient(135deg, #ffa726 0%, #ff9800 100%); - color: white; - } - &.urgency-urgent { - background: linear-gradient(135deg, #ef5350 0%, #e53935 100%); - color: white; + + .attachment-name { + font-size: 12px; + color: #333; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + flex: 1; } } @@ -557,6 +759,32 @@ onMounted(() => { gap: 8px; } +// 按钮样式,与状态标签大小相同 +.action-button-approve, +.action-button-detail { + padding: 4px 8px !important; + border-radius: 12px !important; + font-size: 12px !important; + font-weight: 500 !important; + white-space: nowrap !important; + flex-shrink: 0 !important; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; + height: auto !important; + min-height: 24px !important; +} + +.action-button-approve { + background: linear-gradient(135deg, #ff9800 0%, #f57c00 100%) !important; + color: white !important; + border: none !important; +} + +.action-button-detail { + background: linear-gradient(135deg, #2196f3 0%, #1976d2 100%) !important; + color: white !important; + border: none !important; +} + // 响应式优化 @media (max-width: 375px) { .query-component { diff --git a/src/pages/view/routine/kefuxuncha/xcXkList.vue b/src/pages/view/routine/kefuxuncha/xcXkList.vue index e9f7a1c..bba361c 100644 --- a/src/pages/view/routine/kefuxuncha/xcXkList.vue +++ b/src/pages/view/routine/kefuxuncha/xcXkList.vue @@ -35,6 +35,10 @@ 开课地点: {{ xkkc.kcdd }} + + 开课年级: + {{ xkkc.njname || '暂无' }} + 上课人数: 上课地点: {{ xkkc.kcdd }} + + 开课年级: + {{ xkkc.njname || '暂无' }} + + + 上课人数: + {{ xkkc.hasNum || 0 }} | {{ xkkc.maxNum || 0 }} + diff --git a/src/pages/view/routine/qd/confirm.vue b/src/pages/view/routine/qd/confirm.vue index e36d011..383946a 100644 --- a/src/pages/view/routine/qd/confirm.vue +++ b/src/pages/view/routine/qd/confirm.vue @@ -71,6 +71,42 @@ + + + + + 签到时间未开始 + 签到打卡时间还未开始,请耐心等待 + 请关注签到开始时间 + + + 会议信息 + + 会议名称: + {{ meetingInfo?.qdmc || '未设置' }} + + + 签到时间: + {{ formatTime(meetingInfo?.qdkstime) }} - {{ formatTime(meetingInfo?.qdjstime) }} + + + 打卡开始: + {{ formatTime(meetingInfo?.dkkstime) }} + + + 会议地点: + {{ meetingInfo?.qdwz || '未设置' }} + + + 当前时间: + {{ formatTime(new Date()) }} + + + + + + + @@ -184,7 +220,7 @@ const qdzxId = ref(''); const qrExpireTime = ref(60); // 默认60秒 // 当前步骤 -const currentStep = ref<'sign' | 'confirm' | 'success' | 'notInList' | 'timeExpired' | 'qrExpired' | 'alreadySigned'>('confirm'); +const currentStep = ref<'sign' | 'confirm' | 'success' | 'notInList' | 'timeNotStarted' | 'timeExpired' | 'qrExpired' | 'alreadySigned'>('confirm'); // 用户信息 const userInfo = ref(null); @@ -286,10 +322,19 @@ const loadMeetingInfo = async () => { if (result && result.resultCode === 1) { meetingInfo.value = result.result; - // 1. 验证签到时间是否已结束 + // 1. 验证签到时间 const currentTime = new Date(); + const startTime = meetingInfo.value?.dkkstime ? new Date(meetingInfo.value.dkkstime) : null; const endTime = meetingInfo.value?.qdjstime ? new Date(meetingInfo.value.qdjstime) : null; + // 检查签到时间是否未开始 + if (startTime && currentTime < startTime) { + // 签到时间未开始,显示"签到时间未开始"界面 + currentStep.value = 'timeNotStarted'; + return; + } + + // 检查签到时间是否已结束 if (endTime && currentTime > endTime) { // 签到时间已结束,显示"签到时间已结束"界面 currentStep.value = 'timeExpired'; @@ -418,18 +463,22 @@ const goBack = () => { .info-item { display: flex; - margin-bottom: 12px; + margin-bottom: 16px; + align-items: flex-start; .info-label { font-size: 14px; color: #666; min-width: 80px; + text-align: right !important; + margin-right: 12px; } .info-value { font-size: 14px; color: #333; flex: 1; + text-align: left !important; } } } @@ -542,18 +591,22 @@ const goBack = () => { .info-item { display: flex; - margin-bottom: 8px; + margin-bottom: 12px; + align-items: flex-start; .info-label { font-size: 14px; color: #666; min-width: 80px; + text-align: right !important; + margin-right: 12px; } .info-value { font-size: 14px; color: #333; flex: 1; + text-align: left !important; } } } @@ -568,6 +621,37 @@ const goBack = () => { font-size: 16px; } +/* 签到时间未开始阶段 */ +.time-not-started-step { + background: white; + border-radius: 16px; + padding: 40px 24px; + margin-top: 40px; + text-align: center; +} + +.time-not-started-content { + .time-not-started-title { + display: block; + font-size: 24px; + font-weight: 600; + color: #333; + margin: 16px 0 8px; + } + + .time-not-started-subtitle { + font-size: 14px; + color: #666; + margin-bottom: 16px; + } + + .time-not-started-tip { + font-size: 14px; + color: #999; + margin-bottom: 24px; + } +} + /* 签到时间已结束阶段 */ .time-expired-step { background: white; @@ -647,18 +731,22 @@ const goBack = () => { .info-item { display: flex; - margin-bottom: 8px; + margin-bottom: 12px; + align-items: flex-start; .info-label { font-size: 14px; color: #666; min-width: 80px; + text-align: right !important; + margin-right: 12px; } .info-value { font-size: 14px; color: #333; flex: 1; + text-align: left !important; } } } diff --git a/src/pages/view/routine/qd/detail.vue b/src/pages/view/routine/qd/detail.vue index 3b0d1c9..23755c8 100644 --- a/src/pages/view/routine/qd/detail.vue +++ b/src/pages/view/routine/qd/detail.vue @@ -17,11 +17,15 @@ {{ qdInfo.qdwz || '未设置' }} - 开始时间: + 签到时间: + {{ formatTime(qdInfo.dkkstime) }} + + + 会议开始: {{ formatTime(qdInfo.qdkstime) }} - 结束时间: + 会议结束: {{ formatTime(qdInfo.qdjstime) }} @@ -49,6 +53,10 @@ {{ signedCount }} 已签到 + + {{ lateCount }} + 迟到 + {{ unsignedCount }} 未签到 @@ -141,6 +149,7 @@ interface QdInfo { jsId: string; jsxm: string; qdFbtime: string; + dkkstime: string; qdkstime: string; qdjstime: string; qdry: string; @@ -166,11 +175,28 @@ const currentFilter = ref('all'); const totalCount = computed(() => teacherList.value.length); const signedCount = computed(() => teacherList.value.filter(t => t.qdStatus === '1').length); const unsignedCount = computed(() => teacherList.value.filter(t => t.qdStatus === '0').length); +const lateCount = computed(() => { + if (!qdInfo.value.qdkstime) return 0; + const meetingStartTime = new Date(qdInfo.value.qdkstime); + return teacherList.value.filter(t => { + if (t.qdStatus !== '1' || !t.qdwctime) return false; + const signInTime = new Date(t.qdwctime); + return signInTime > meetingStartTime; + }).length; +}); const filteredTeacherList = computed(() => { switch (currentFilter.value) { case 'signed': return teacherList.value.filter(t => t.qdStatus === '1'); + case 'late': + if (!qdInfo.value.qdkstime) return []; + const meetingStartTime = new Date(qdInfo.value.qdkstime); + return teacherList.value.filter(t => { + if (t.qdStatus !== '1' || !t.qdwctime) return false; + const signInTime = new Date(t.qdwctime); + return signInTime > meetingStartTime; + }); case 'unsigned': return teacherList.value.filter(t => t.qdStatus === '0'); default: @@ -225,6 +251,9 @@ const showTeacherList = (filter: string) => { case 'signed': popupTitle.value = `已签到人员 (${signedCount.value}人)`; break; + case 'late': + popupTitle.value = `迟到人员 (${lateCount.value}人)`; + break; case 'unsigned': popupTitle.value = `未签到人员 (${unsignedCount.value}人)`; break; @@ -421,6 +450,10 @@ const handleBack = () => { &.unsigned { color: #dc3545; } + + &.late { + color: #ff9800; + } } .stat-label { diff --git a/src/pages/view/routine/qd/index.vue b/src/pages/view/routine/qd/index.vue index 0e9c19a..3144069 100644 --- a/src/pages/view/routine/qd/index.vue +++ b/src/pages/view/routine/qd/index.vue @@ -61,11 +61,15 @@ {{ data.qdwz || '未设置' }} - 开始时间: + 签到时间: + {{ formatTime(data.dkkstime) }} + + + 会议开始: {{ formatTime(data.qdkstime) }} - 结束时间: + 会议结束: {{ formatTime(data.qdjstime) }} @@ -129,6 +133,7 @@ interface QdItem { jsId: string; // 发布人ID jsxm: string; // 发布人姓名 qdFbtime: string; // 发布时间 + dkkstime: string; // 签到打卡开始时间 qdkstime: string; // 签到开始时间 qdjstime: string; // 签到结束时间 qdry: string; // 签到人员 @@ -396,6 +401,7 @@ onMounted(() => { text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; + line-clamp: 2; -webkit-box-orient: vertical; word-break: break-word; } diff --git a/src/pages/view/routine/qd/publish.vue b/src/pages/view/routine/qd/publish.vue index 637db3e..0dd52b6 100644 --- a/src/pages/view/routine/qd/publish.vue +++ b/src/pages/view/routine/qd/publish.vue @@ -5,14 +5,18 @@ + + * + 签到名称 + @@ -20,13 +24,16 @@ + + * + 签到地点 + @@ -34,7 +41,10 @@ - 签到人员 + + * + 签到人员 + {{ formData.targetTeachers.length ? `已选择${formData.targetTeachers.length}人` : "请选择教师" }} @@ -75,15 +85,36 @@ + + + + + + + * + 签到开始 + + + + {{ formData.dkkstime || '请选择签到打卡开始时间' }} + + + + + + - 开始时间 + + * + 会议开始 + - {{ formData.qdkstime || '请选择开始时间' }} + {{ formData.qdkstime || '请选择会议开始时间' }} @@ -95,10 +126,13 @@ - 结束时间 + + * + 会议结束 + - {{ formData.qdjstime || '请选择结束时间' }} + {{ formData.qdjstime || '请选择会议结束时间' }} @@ -106,6 +140,7 @@ + @@ -171,6 +206,7 @@ const formData = reactive({ mdqz: '0', qdkstime: '', qdjstime: '', + dkkstime: '', jsxm: '', qdFbtime: '', targetTeachers: [] as TeacherInfo[] @@ -273,12 +309,17 @@ const handlePublish = async () => { } if (!formData.qdkstime) { - uni.showToast({ title: '请选择开始时间', icon: 'none' }); + uni.showToast({ title: '请选择会议开始时间', icon: 'none' }); return; } if (!formData.qdjstime) { - uni.showToast({ title: '请选择结束时间', icon: 'none' }); + uni.showToast({ title: '请选择会议结束时间', icon: 'none' }); + return; + } + + if (!formData.dkkstime) { + uni.showToast({ title: '请选择签到打卡开始时间', icon: 'none' }); return; } @@ -312,6 +353,7 @@ const handlePublish = async () => { mdqz: formData.mdqz, qdkstime: formatDateTime(formData.qdkstime), qdjstime: formatDateTime(formData.qdjstime), + dkkstime: formatDateTime(formData.dkkstime), jsId: js.id, jsxm: formData.jsxm, qdFbtime: formData.qdFbtime, @@ -372,38 +414,72 @@ const handlePublish = async () => { margin-bottom: 15px; } -.title-input { - font-size: 18px; - font-weight: bold; - color: #333; - - :deep(.uni-easyinput__content) { - background: transparent; - } - - :deep(.uni-easyinput__content-input) { - color: #333; - } - - :deep(.uni-easyinput__placeholder-class) { - color: #999; - } +.form-label { + display: flex; + align-items: center; + margin-bottom: 8px; } -.content-input { +.required-asterisk { + color: #ff4757; + font-size: 16px; + font-weight: bold; + margin-right: 4px; +} + +.label-text { + font-size: 16px; + font-weight: 600; + color: #333; +} + +.section-title-container { + display: flex; + align-items: center; +} + +.list-label-container { + display: flex; + align-items: center; +} + +.input-field { font-size: 16px; color: #333; :deep(.uni-easyinput__content) { - background: transparent; + background: #fff; + border: 1px solid #e0e0e0; + border-radius: 8px; + padding: 12px; + min-height: 44px; } :deep(.uni-easyinput__content-input) { color: #333; + font-size: 16px; } :deep(.uni-easyinput__placeholder-class) { color: #999; + font-size: 16px; + } + + :deep(.uni-easyinput__content):focus-within { + border-color: #007aff; + box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.1); + } + + &.single-line { + :deep(.uni-easyinput__content) { + min-height: 44px; + height: 44px; + } + + :deep(.uni-easyinput__content-input) { + line-height: 44px; + height: 44px; + } } } diff --git a/src/pages/view/routine/qd/qr-code.vue b/src/pages/view/routine/qd/qr-code.vue index e75441a..90c125a 100644 --- a/src/pages/view/routine/qd/qr-code.vue +++ b/src/pages/view/routine/qd/qr-code.vue @@ -26,6 +26,10 @@ + + 签到时间: + {{ formatTime(meetingInfo?.dkkstime) }} + 会议时间: {{ formatTime(meetingInfo?.qdkstime) }} - {{ formatTime(meetingInfo?.qdjstime) }} diff --git a/src/pages/view/routine/qd/selectTeachers.vue b/src/pages/view/routine/qd/selectTeachers.vue index b1e600a..b1d4153 100644 --- a/src/pages/view/routine/qd/selectTeachers.vue +++ b/src/pages/view/routine/qd/selectTeachers.vue @@ -43,7 +43,7 @@ - + {{ getSecondSelectLabel() }} @@ -256,7 +256,8 @@ const onSelectTypeChange = async (e: any) => { // 按科目:需要加载科目数据 await loadKmData(); } else if (selectType.value === 4) { - // 按职务:需要加载职务数据 + // 按职务:默认选择党政职务,直接加载职务数据 + zwType.value = 1; // 默认选择党政职务 await loadZwData(); } }; @@ -329,20 +330,20 @@ const loadAllTeachersFromStorage = async () => { console.log('parsedData是否为对象:', typeof parsedData === 'object'); console.log('parsedData的所有属性:', Object.keys(parsedData || {})); console.log('parsedData的data属性:', parsedData?.data); - console.log('parsedData的allJs属性:', parsedData?.allJs); + console.log('parsedData的allJsBasicInfoVo属性:', parsedData?.allJsBasicInfoVo); - // 检查数据结构,可能allJs直接在parsedData下 + // 检查数据结构,可能allJsBasicInfoVo直接在parsedData下 let allJsData; - if (parsedData.data && parsedData.data.allJs) { - allJsData = parsedData.data.allJs; - console.log('从parsedData.data.allJs获取数据'); - } else if (parsedData.allJs) { - allJsData = parsedData.allJs; - console.log('从parsedData.allJs获取数据'); + if (parsedData.data && parsedData.data.allJsBasicInfoVo) { + allJsData = parsedData.data.allJsBasicInfoVo; + console.log('从parsedData.data.allJsBasicInfoVo获取数据'); + } else if (parsedData.allJsBasicInfoVo) { + allJsData = parsedData.allJsBasicInfoVo; + console.log('从parsedData.allJsBasicInfoVo获取数据'); } else { - console.warn('localStorage中没有找到allJs数据'); + console.warn('localStorage中没有找到allJsBasicInfoVo数据'); console.warn('可用的属性:', Object.keys(parsedData)); - uni.showToast({ title: '未找到教师数据(allJs)', icon: 'none' }); + uni.showToast({ title: '未找到教师数据(allJsBasicInfoVo)', icon: 'none' }); return; } @@ -440,18 +441,18 @@ const loadTeachersByNjIdFromStorage = async () => { parsedData = storageData; } - // 检查数据结构,可能allJs直接在parsedData下 + // 检查数据结构,可能allJsBasicInfoVo直接在parsedData下 let allJsData; - if (parsedData.data && parsedData.data.allJs) { - allJsData = parsedData.data.allJs; - console.log('从parsedData.data.allJs获取数据'); - } else if (parsedData.allJs) { - allJsData = parsedData.allJs; - console.log('从parsedData.allJs获取数据'); + if (parsedData.data && parsedData.data.allJsBasicInfoVo) { + allJsData = parsedData.data.allJsBasicInfoVo; + console.log('从parsedData.data.allJsBasicInfoVo获取数据'); + } else if (parsedData.allJsBasicInfoVo) { + allJsData = parsedData.allJsBasicInfoVo; + console.log('从parsedData.allJsBasicInfoVo获取数据'); } else { - console.warn('localStorage中没有找到allJs数据'); + console.warn('localStorage中没有找到allJsBasicInfoVo数据'); console.warn('可用的属性:', Object.keys(parsedData)); - uni.showToast({ title: '未找到教师数据(allJs)', icon: 'none' }); + uni.showToast({ title: '未找到教师数据(allJsBasicInfoVo)', icon: 'none' }); return; } @@ -509,6 +510,8 @@ const loadTeachersByZwIdFromStorage = async () => { console.log('=== 开始从localStorage按职务加载教师数据 ==='); console.log('选中的职务ID:', selectTwoType.value); console.log('职务类型:', zwType.value === 1 ? '党政职务' : '其他职务'); + console.log('selectTwoType.value类型:', typeof selectTwoType.value); + console.log('selectTwoType.value是否为数组:', Array.isArray(selectTwoType.value)); // 从localStorage获取所有教师数据 const storageData = uni.getStorageSync('app-common'); @@ -535,15 +538,15 @@ const loadTeachersByZwIdFromStorage = async () => { parsedData = storageData; } - // 检查数据结构,从parsedData.data.allJs获取教师数据 - if (!parsedData.data || !parsedData.data.allJs) { + // 检查数据结构,从parsedData.data.allJsBasicInfoVo获取教师数据 + if (!parsedData.data || !parsedData.data.allJsBasicInfoVo) { console.warn('localStorage中没有找到教师数据'); console.warn('可用的属性:', Object.keys(parsedData || {})); uni.showToast({ title: '未找到教师数据', icon: 'none' }); return; } - const allJsData = parsedData.data.allJs; + const allJsData = parsedData.data.allJsBasicInfoVo; console.log('allJs数据结构:', allJsData); // 检查allJs是否有result字段 @@ -556,26 +559,42 @@ const loadTeachersByZwIdFromStorage = async () => { const teacherArray = allJsData.result; console.log('教师数组数据:', teacherArray); console.log('教师数组长度:', teacherArray.length); + + // 打印前几个教师的数据结构,特别关注职务字段 + if (teacherArray.length > 0) { + console.log('第一个教师完整数据:', teacherArray[0]); + console.log('第一个教师的dzzw字段:', teacherArray[0].dzzw); + console.log('第一个教师的qtzw字段:', teacherArray[0].qtzw); + if (teacherArray.length > 1) { + console.log('第二个教师完整数据:', teacherArray[1]); + console.log('第二个教师的dzzw字段:', teacherArray[1].dzzw); + console.log('第二个教师的qtzw字段:', teacherArray[1].qtzw); + } + } // 根据职务类型和选中的职务ID过滤教师 - const selectedZwId = selectTwoType.value[0]; // 假设只选择一个职务 + const selectedZwIds = selectTwoType.value; // 支持多个职务选择 + console.log('选中的职务ID列表:', selectedZwIds); + const filteredTeachers = teacherArray.filter((teacher: any) => { let hasZwId = false; if (zwType.value === 1) { // 党政职务:检查dzzw字段 if (teacher.dzzw) { - const dzzwArray = teacher.dzzw.split(','); - hasZwId = dzzwArray.includes(selectedZwId); + const dzzwArray = teacher.dzzw.split(',').map((id: string) => id.trim()); + // 检查教师是否有任何一个选中的党政职务 + hasZwId = selectedZwIds.some(selectedId => dzzwArray.includes(selectedId)); } - console.log(`教师${teacher.jsxm || teacher.name}的党政职务:`, teacher.dzzw, '是否匹配职务ID:', selectedZwId, '结果:', hasZwId); + console.log(`教师${teacher.jsxm || teacher.name}的党政职务:`, teacher.dzzw, '是否匹配职务ID列表:', selectedZwIds, '结果:', hasZwId); } else if (zwType.value === 2) { // 其他职务:检查qtzw字段 if (teacher.qtzw) { - const qtzwArray = teacher.qtzw.split(','); - hasZwId = qtzwArray.includes(selectedZwId); + const qtzwArray = teacher.qtzw.split(',').map((id: string) => id.trim()); + // 检查教师是否有任何一个选中的其他职务 + hasZwId = selectedZwIds.some(selectedId => qtzwArray.includes(selectedId)); } - console.log(`教师${teacher.jsxm || teacher.name}的其他职务:`, teacher.qtzw, '是否匹配职务ID:', selectedZwId, '结果:', hasZwId); + console.log(`教师${teacher.jsxm || teacher.name}的其他职务:`, teacher.qtzw, '是否匹配职务ID列表:', selectedZwIds, '结果:', hasZwId); } return hasZwId; @@ -725,9 +744,9 @@ const loadZwData = async () => { } } - // 如果没有缓存数据,则调用getZwListByLx方法获取并缓存 - if (!zwData) { - console.log('localStorage中没有职务数据,开始调用getZwListByLx获取并缓存'); + // 如果没有缓存数据或缺少某种职务类型,则调用getZwListByLx方法获取并缓存 + if (!zwData || !zwData['党政职务'] || !zwData['其他职务']) { + console.log('localStorage中没有完整职务数据,开始调用getZwListByLx获取并缓存'); try { // 导入并调用getZwListByLx方法 @@ -773,7 +792,10 @@ const loadZwData = async () => { if (filteredData.length === 0) { console.warn('没有找到对应类型的职务数据'); - uni.showToast({ title: '未找到对应类型的职务数据', icon: 'none' }); + // 不显示错误提示,因为可能还没有选择具体职务 + // uni.showToast({ title: '未找到对应类型的职务数据', icon: 'none' }); + // 设置空数组,让界面显示选择框 + datas.value = []; return; } @@ -971,15 +993,19 @@ const ensureTeacherDataCached = async () => { } // 检查是否已有教师数据 - if (parsedData?.data?.allJs?.result && parsedData.data.allJs.result.length > 0) { + if (parsedData?.data?.allJsBasicInfoVo?.result && parsedData.data.allJsBasicInfoVo.result.length > 0) { hasTeacherData = true; - console.log('localStorage中已有教师数据,数量:', parsedData.data.allJs.result.length); + console.log('localStorage中已有教师数据,数量:', parsedData.data.allJsBasicInfoVo.result.length); } - // 检查是否已有职务数据 - if (parsedData?.data?.zw) { + // 检查是否已有职务数据(需要同时包含党政职务和其他职务) + if (parsedData?.data?.zw && + parsedData.data.zw['党政职务'] && + parsedData.data.zw['其他职务']) { hasZwData = true; - console.log('localStorage中已有职务数据'); + console.log('localStorage中已有完整的职务数据'); + } else if (parsedData?.data?.zw) { + console.log('localStorage中只有部分职务数据,需要重新加载'); } } diff --git a/src/pages/view/routine/xk/dm.vue b/src/pages/view/routine/xk/dm.vue index 4861d71..f26a958 100644 --- a/src/pages/view/routine/xk/dm.vue +++ b/src/pages/view/routine/xk/dm.vue @@ -51,7 +51,7 @@ {{ xs.xsXm || xs.xsxm }} - {{ xs.bjmc }} + {{ xs.njmcName || xs.njmc }}{{ xs.bjmc ? ' ' + xs.bjmc : '' }} @@ -258,6 +258,7 @@ const loadXsList = async () => { tx: dmXs.tx || dmXs.xstx || dmXs.avatar, bjmc: dmXs.bjmc, njmc: dmXs.njmc, + njmcName: dmXs.njmcName || dmXs.njmc, jzxm: dmXs.jzxm, jzdh: dmXs.jzdh, xsxm: dmXs.xsxm || dmXs.xm, diff --git a/src/pages/view/routine/xk/dmIndex.vue b/src/pages/view/routine/xk/dmIndex.vue index 9d185b2..205bffd 100644 --- a/src/pages/view/routine/xk/dmIndex.vue +++ b/src/pages/view/routine/xk/dmIndex.vue @@ -32,6 +32,10 @@ 开课地点: {{ xkkc.kcdd }} + + 开课年级: + {{ xkkc.njname || '暂无' }} + 上课人数: {{ xkkc.hasNum || 0 }} | {{ xkkc.maxNum || 0 }} @@ -240,7 +244,6 @@ const goDm = (xkkc: any) => { } else { msg = "上课时间未到,无法点名"; } - // TODO: 测试阶段,默认都可以点名,不计算时间 dmFlag = true; if (dmFlag) { setData(xkkc); diff --git a/src/pages/view/routine/xk/xkList.vue b/src/pages/view/routine/xk/xkList.vue index f4998ab..6955120 100644 --- a/src/pages/view/routine/xk/xkList.vue +++ b/src/pages/view/routine/xk/xkList.vue @@ -35,6 +35,10 @@ 开课地点: {{ xkkc.kcdd }} + + 开课年级: + {{ xkkc.njname || '暂无' }} + 上课人数: {{ xkkc.hasNum || 0 }} | {{ xkkc.maxNum || 0 }} diff --git a/src/pages/view/routine/xk/xkkcDetail.vue b/src/pages/view/routine/xk/xkkcDetail.vue index 4555498..efd5321 100644 --- a/src/pages/view/routine/xk/xkkcDetail.vue +++ b/src/pages/view/routine/xk/xkkcDetail.vue @@ -19,6 +19,10 @@ 上课周期: {{ xkkc.skzqmc }} + + 开课年级: + {{ xkkc.njname || '暂无' }} + 上课时间: {{ formatClassTime(xkkc.skkstime, xkkc.skjstime) }} @@ -204,8 +208,13 @@ const schema = reactive([ { field: "jhsj", label: "计划时间", - component: "BasicDateTimes", - componentProps: {}, + component: "BasicInput", + componentProps: { + type: "date", + placeholder: "请选择计划日期", + // 在微信浏览器中强制显示日期选择器 + style: "position: relative; z-index: 1000;", + }, }, { field: "jhdd", @@ -222,6 +231,8 @@ const schema = reactive([ }, componentProps: { type: "textarea", + maxlength: -1, // 不限字数 + showCount: false, // 不显示字数统计 }, }, ])