style(mobile-uni): 重构今日安排任务列表排版,新增Top-Meta栏与主题色卡片亮边

This commit is contained in:
2026-07-23 01:35:06 +08:00
parent 163b08ecfe
commit 390bbda993
+120 -33
View File
@@ -102,28 +102,46 @@
</view> </view>
<view class="schedule-list"> <view class="schedule-list">
<view class="schedule-row" v-if="primaryScheduleTitle"> <view class="schedule-row" :class="primaryAssignmentAccentClass" v-if="primaryScheduleTitle">
<view class="schedule-tag" :class="primaryAssignmentTagClass"> <view class="schedule-row-header">
<text class="schedule-tag-text">{{ primaryAssignmentTagText }}</text> <view class="schedule-tag" :class="primaryAssignmentTagClass">
<uni-icons :type="primaryAssignmentTagIcon" size="12" :color="primaryAssignmentTagColor" />
<text class="schedule-tag-text">{{ primaryAssignmentTagText }}</text>
</view>
<view class="schedule-time-meta">
<uni-icons type="clock" size="12" color="#9a9da3" />
<text class="time-meta-text">预计 3 分钟</text>
</view>
</view> </view>
<view class="schedule-copy"> <view class="schedule-row-body">
<text class="schedule-title">{{ primaryScheduleTitle }}</text> <view class="schedule-copy">
<text class="schedule-desc">{{ primaryScheduleDesc }}</text> <text class="schedule-title">{{ primaryScheduleTitle }}</text>
<text class="schedule-desc">{{ primaryScheduleDesc }}</text>
</view>
<button class="schedule-action primary-gradient-btn" @click="openPrimarySchedule">
{{ primaryAssignment?.source === 'daily' ? '去作答' : '开始练习' }}
</button>
</view> </view>
<button class="schedule-action primary-gradient-btn" @click="openPrimarySchedule">
{{ primaryAssignment?.source === 'daily' ? '去作答' : '开始练习' }}
</button>
</view> </view>
<view class="schedule-row" v-if="home?.review"> <view class="schedule-row accent-review" v-if="home?.review">
<view class="schedule-tag tag-review"> <view class="schedule-row-header">
<text class="schedule-tag-text">SOP复习</text> <view class="schedule-tag tag-review">
<uni-icons type="paperplane-filled" size="12" color="#059669" />
<text class="schedule-tag-text">SOP复习</text>
</view>
<view class="schedule-time-meta">
<uni-icons type="clock" size="12" color="#9a9da3" />
<text class="time-meta-text">预计 5 分钟</text>
</view>
</view> </view>
<view class="schedule-copy"> <view class="schedule-row-body">
<text class="schedule-title">{{ home?.review?.title }}</text> <view class="schedule-copy">
<text class="schedule-desc">{{ home?.review?.desc }}</text> <text class="schedule-title">{{ home?.review?.title }}</text>
<text class="schedule-desc">{{ home?.review?.desc }}</text>
</view>
<button class="schedule-action review-action" @click="ask(home?.review?.title || '岗前SOP复习')">去复习</button>
</view> </view>
<button class="schedule-action review-action" @click="ask(home?.review?.title || '岗前SOP复习')">去复习</button>
</view> </view>
</view> </view>
</view> </view>
@@ -240,6 +258,27 @@ const primaryAssignmentTagClass = computed(() => {
return 'tag-practice'; return 'tag-practice';
}); });
const primaryAssignmentAccentClass = computed(() => {
const source = primaryAssignment.value?.source;
if (source === 'daily') return 'accent-daily';
if (source === 'retry') return 'accent-retry';
return 'accent-practice';
});
const primaryAssignmentTagIcon = computed(() => {
const source = primaryAssignment.value?.source;
if (source === 'daily') return 'compose';
if (source === 'retry') return 'refresh';
return 'flag-filled';
});
const primaryAssignmentTagColor = computed(() => {
const source = primaryAssignment.value?.source;
if (source === 'daily') return '#2d80ff';
if (source === 'retry') return '#d97706';
return '#e60012';
});
const primaryAssignment = computed(() => const primaryAssignment = computed(() =>
assignments.value.find((item) => item.status === '待训练' && item.source !== 'daily') assignments.value.find((item) => item.status === '待训练' && item.source !== 'daily')
@@ -1057,31 +1096,58 @@ onUnload(() => {
.schedule-list { .schedule-list {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 10px; gap: 12px;
} }
.schedule-row { .schedule-row {
display: flex;
flex-direction: column;
gap: 10px;
padding: 14px;
border-radius: 18px;
background: #ffffff;
border: 1px solid #f0f1f5;
border-left: 4px solid var(--employee-primary);
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.03);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.schedule-row.accent-daily {
border-left-color: #2d80ff;
}
.schedule-row.accent-retry {
border-left-color: #d97706;
}
.schedule-row.accent-practice {
border-left-color: var(--employee-primary);
}
.schedule-row.accent-review {
border-left-color: #10b981;
}
.schedule-row-header {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 12px; justify-content: space-between;
padding: 14px 12px; width: 100%;
border-radius: 16px;
background: #f9f9fb;
} }
.schedule-tag { .schedule-tag {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; gap: 4px;
padding: 5px 10px; padding: 3px 8px;
border-radius: 10px; border-radius: 8px;
flex: none; flex: none;
} }
.schedule-tag-text { .schedule-tag-text {
font-size: 12px; font-size: 11px;
font-weight: 800; font-weight: 800;
line-height: 1; line-height: 1.2;
} }
.tag-daily { .tag-daily {
@@ -1104,6 +1170,26 @@ onUnload(() => {
color: #059669; color: #059669;
} }
.schedule-time-meta {
display: flex;
align-items: center;
gap: 4px;
}
.time-meta-text {
font-size: 11px;
font-weight: 500;
color: #9a9da3;
}
.schedule-row-body {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 12px;
width: 100%;
}
.schedule-copy { .schedule-copy {
display: flex; display: flex;
min-width: 0; min-width: 0;
@@ -1114,30 +1200,31 @@ onUnload(() => {
.schedule-title { .schedule-title {
color: #1a1a1a; color: #1a1a1a;
font-size: 16px; font-size: 15px;
font-weight: 800; font-weight: 800;
line-height: 1.3; line-height: 1.45;
} }
.schedule-desc { .schedule-desc {
color: #8a8d93; color: #8a8d93;
font-size: 13px; font-size: 12px;
line-height: 1.4; line-height: 1.4;
} }
.schedule-action { .schedule-action {
display: flex; display: flex;
width: auto; width: auto;
min-width: 84px; min-width: 80px;
min-height: 44px; height: 40px;
min-height: 40px;
flex: none; flex: none;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 0 12px; padding: 0 14px;
border-radius: 12px; border-radius: 12px;
background: var(--employee-primary); background: var(--employee-primary);
color: #ffffff; color: #ffffff;
font-size: 15px; font-size: 14px;
font-weight: 800; font-weight: 800;
line-height: 1.2; line-height: 1.2;
white-space: nowrap; white-space: nowrap;