hookehuyr

fix(CollapsibleCalendar): 修复课程名称过长导致的布局问题

为课程名称添加最大宽度和省略号显示,防止过长文本破坏布局
```

```msg
feat(CheckinDetailPage): 添加提交按钮的禁用状态逻辑

根据表单验证条件动态禁用提交按钮,防止无效提交
<!--
* @Date: 2025-01-25 15:34:17
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-12-11 09:31:06
* @LastEditTime: 2025-12-11 13:55:33
* @FilePath: /mlaj/src/components/ui/CollapsibleCalendar.vue
* @Description: 可折叠日历组件
-->
......@@ -129,7 +129,7 @@ const showCoursePicker = ref(false)
const selectedCourseText = ref('全部作业')
const courseColumns = [
{ text: '全部作业', value: '' },
{ text: '语文语文语文语文语文语文', value: 'chinese' },
{ text: '语文语文语文语文语文语文数学英语化学化学化学化学英语', value: 'chinese' },
{ text: '数学', value: 'math' },
{ text: '英语', value: 'english' },
{ text: '物理', value: 'physics' },
......@@ -367,6 +367,9 @@ defineExpose({
color: #4caf50;
font-weight: 600;
white-space: nowrap;
max-width: 10rem;
overflow: hidden;
text-overflow: ellipsis;
}
.calendar-arrow {
......
......@@ -131,7 +131,7 @@
<!-- 提交按钮 -->
<div v-if="!taskDetail.is_finish || isEditMode" class="submit-area">
<van-button type="primary" block size="large" :loading="uploading" @click="handleSubmit">
<van-button type="primary" block size="large" :loading="uploading" :disabled="isSubmitDisabled" @click="handleSubmit">
{{ isEditMode ? '保存修改' : '提交' }}
</van-button>
</div>
......@@ -311,6 +311,32 @@ const confirmAddTarget = () => {
dynamicFormFields.value.forEach(field => field.value = '')
}
/**
* 是否禁用提交按钮
*/
const isSubmitDisabled = computed(() => {
// 1. 校验作业选择
if (!selectedTaskValue.value) return true
// 2. 计数打卡特定校验
if (taskType.value === 'count') {
// 必须选择至少一个对象
if (selectedTargets.value.length === 0) return true
// 次数必须大于0
if (!countValue.value || countValue.value <= 0) return true
return false
}
// 3. 普通打卡校验
if (activeType.value === 'text') {
// 文本打卡:必须填写内容且长度不少于10个字符
return !message.value.trim() || message.value.trim().length < 10
} else {
// 其他类型:必须有文件
return fileList.value.length === 0
}
})
const handleSubmit = async () => {
// 1. 校验作业选择
if (!selectedTaskValue.value) {
......