hookehuyr

fix(CheckinDetailPage): 修复作业描述显示逻辑并优化富文本样式

重构作业描述显示逻辑,根据选中的子任务显示对应的描述或主任务描述
优化富文本内容的样式,确保图片、表格等元素在容器内正确显示且不溢出
...@@ -3,10 +3,10 @@ ...@@ -3,10 +3,10 @@
3 <!-- 页面内容 --> 3 <!-- 页面内容 -->
4 <div class="page-content"> 4 <div class="page-content">
5 <!-- 作业描述 --> 5 <!-- 作业描述 -->
6 - <div v-if="taskDetail.note" class="section-wrapper"> 6 + <div class="section-wrapper">
7 <div class="section-title">作业描述</div> 7 <div class="section-title">作业描述</div>
8 <div class="section-content"> 8 <div class="section-content">
9 - <div v-if="taskDetail.note" class="description-text" v-html="taskDetail.note"> 9 + <div v-if="displayTaskNote" class="description-text" v-html="displayTaskNote">
10 </div> 10 </div>
11 <div v-else class="no-description"> 11 <div v-else class="no-description">
12 暂无作业描述 12 暂无作业描述
...@@ -218,6 +218,16 @@ const dynamicFieldText = ref('感恩') ...@@ -218,6 +218,16 @@ const dynamicFieldText = ref('感恩')
218 // 任务详情数据 218 // 任务详情数据
219 const taskDetail = ref({}) 219 const taskDetail = ref({})
220 220
221 +// 显示的作业描述
222 +const displayTaskNote = computed(() => {
223 + const selected_subtask_id = selectedTaskValue.value?.[0]
224 + if (selected_subtask_id) {
225 + const option = taskOptions.value.find(o => o.value === selected_subtask_id)
226 + return option?.note || taskDetail.value?.note || ''
227 + }
228 + return taskDetail.value?.note || ''
229 +})
230 +
221 // 打卡类型 231 // 打卡类型
222 const taskType = computed(() => route.query.task_type) 232 const taskType = computed(() => route.query.task_type)
223 233
...@@ -951,6 +961,7 @@ onMounted(async () => { ...@@ -951,6 +961,7 @@ onMounted(async () => {
951 taskOptions.value = [...subtask_list.data.map(item => ({ 961 taskOptions.value = [...subtask_list.data.map(item => ({
952 text: item.is_makeup ? '补卡:' + item.title : item.title, 962 text: item.is_makeup ? '补卡:' + item.title : item.title,
953 value: item.id, 963 value: item.id,
964 + note: item.note, // 作业描述
954 is_makeup: item.is_makeup, // 是否为补录 965 is_makeup: item.is_makeup, // 是否为补录
955 field_list: item.field_list, // 动态字段列表 966 field_list: item.field_list, // 动态字段列表
956 person_type: item.person_type, // 打卡对象类型 967 person_type: item.person_type, // 打卡对象类型
...@@ -1040,18 +1051,47 @@ onMounted(async () => { ...@@ -1040,18 +1051,47 @@ onMounted(async () => {
1040 1051
1041 .section-content { 1052 .section-content {
1042 padding: 1rem; 1053 padding: 1rem;
1054 + overflow: hidden;
1043 } 1055 }
1044 1056
1045 .description-text { 1057 .description-text {
1046 color: #666; 1058 color: #666;
1047 line-height: 1.6; 1059 line-height: 1.6;
1048 font-size: 0.95rem; 1060 font-size: 0.95rem;
1061 + word-break: break-word;
1062 + overflow-wrap: break-word;
1063 + width: 100%;
1064 + box-sizing: border-box;
1065 + overflow: hidden;
1049 1066
1067 + :deep(*) {
1068 + max-width: 100% !important;
1069 + box-sizing: border-box;
1070 + }
1050 1071
1051 - :deep(&) { 1072 + :deep(img) {
1052 - img { 1073 + max-width: 100% !important;
1053 - width: 100%; 1074 + height: auto;
1054 - } 1075 + display: block;
1076 + }
1077 +
1078 + :deep(p) {
1079 + margin: 0.5rem 0;
1080 + }
1081 +
1082 + :deep(table) {
1083 + max-width: 100% !important;
1084 + border-collapse: collapse;
1085 + overflow-x: auto;
1086 + display: table;
1087 + width: 100%;
1088 + }
1089 +
1090 + :deep(pre) {
1091 + max-width: 100% !important;
1092 + overflow-x: auto;
1093 + white-space: pre-wrap;
1094 + word-wrap: break-word;
1055 } 1095 }
1056 1096
1057 // 富文本内容样式 1097 // 富文本内容样式
......