更新角色管理相关内容
This commit is contained in:
@@ -108,6 +108,12 @@
|
||||
<span v-if="item.all_day === 0" class="item-time">{{
|
||||
item.start_time
|
||||
}}</span>
|
||||
<i v-if="hasImages(item)" class="fa-solid fa-image item-image-icon"></i>
|
||||
<i
|
||||
v-if="item.reminder_id > 0"
|
||||
class="fa-solid fa-bell item-bell"
|
||||
title="已开启提醒"
|
||||
></i>
|
||||
<span class="item-title" :class="{ done: item.status === 1 }">{{
|
||||
item.title
|
||||
}}</span>
|
||||
@@ -172,6 +178,12 @@
|
||||
/>
|
||||
<div class="day-item-main" @click="openDetail(item)">
|
||||
<div class="day-item-title" :class="{ done: item.status === 1 }">
|
||||
<i v-if="hasImages(item)" class="fa-solid fa-image item-image-icon"></i>
|
||||
<i
|
||||
v-if="item.reminder_id > 0"
|
||||
class="fa-solid fa-bell item-bell"
|
||||
title="已开启提醒"
|
||||
></i>
|
||||
{{ item.title }}
|
||||
<el-tag
|
||||
v-if="item.priority > 0"
|
||||
@@ -276,7 +288,11 @@
|
||||
<span
|
||||
class="color-chip"
|
||||
:style="{ background: row.color }"
|
||||
/>{{ row.title }}
|
||||
/><i v-if="hasImages(row)" class="fa-solid fa-image item-image-icon"></i><i
|
||||
v-if="row.reminder_id > 0"
|
||||
class="fa-solid fa-bell item-image-icon"
|
||||
title="已开启提醒"
|
||||
></i>{{ row.title }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -341,7 +357,9 @@
|
||||
v-model="editVisible"
|
||||
:schedule="editingItem"
|
||||
:default-date="selectedDate"
|
||||
:draft="pendingDraft"
|
||||
@saved="reloadAll"
|
||||
@draft-applied="pendingDraft = null"
|
||||
/>
|
||||
|
||||
<!-- 日程详情抽屉 -->
|
||||
@@ -648,6 +666,8 @@ const editVisible = ref(false);
|
||||
const editingItem = ref(null);
|
||||
const detailVisible = ref(false);
|
||||
const detailItem = ref(null);
|
||||
// 从通知设置页返回时恢复的草稿(含提醒设置)
|
||||
const pendingDraft = ref(null);
|
||||
|
||||
function openCreate(date) {
|
||||
editingItem.value = null;
|
||||
@@ -842,6 +862,22 @@ function priorityTagType(priority) {
|
||||
return { 1: "warning", 2: "danger" }[priority] || "info";
|
||||
}
|
||||
|
||||
// 判断日程是否关联了图片(与详情页 parseImages 语义一致),用于列表标题前展示图片图标
|
||||
function hasImages(item) {
|
||||
const imgs = item?.images;
|
||||
if (!imgs) return false;
|
||||
if (Array.isArray(imgs)) return imgs.some(img => img && img.url);
|
||||
if (typeof imgs === "string" && imgs.trim()) {
|
||||
try {
|
||||
const parsed = JSON.parse(imgs);
|
||||
return Array.isArray(parsed) && parsed.some(img => img && img.url);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 排序权重:紧急(2) > 重要(1) > 普通(0)
|
||||
function priorityWeight(priority) {
|
||||
return { 2: 3, 1: 2 }[priority] || 1;
|
||||
@@ -864,10 +900,23 @@ function compareByPriority(a, b) {
|
||||
onMounted(() => {
|
||||
loadStats();
|
||||
loadCalendarData();
|
||||
// 从通知设置页返回:恢复上次暂存的新建日程草稿
|
||||
const raw = sessionStorage.getItem("oa_schedule_draft");
|
||||
if (raw) {
|
||||
try {
|
||||
pendingDraft.value = JSON.parse(raw);
|
||||
sessionStorage.removeItem("oa_schedule_draft");
|
||||
editingItem.value = null;
|
||||
editVisible.value = true;
|
||||
ElMessage.info("已从暂存恢复未提交的新建日程");
|
||||
} catch {
|
||||
sessionStorage.removeItem("oa_schedule_draft");
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
<style lang="less" scoped>
|
||||
.schedule-page {
|
||||
padding: 16px 20px 24px;
|
||||
}
|
||||
@@ -1113,6 +1162,18 @@ onMounted(() => {
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.item-image-icon {
|
||||
flex-shrink: 0;
|
||||
margin-right: 4px;
|
||||
color: var(--el-text-color-secondary);
|
||||
}
|
||||
|
||||
.item-bell {
|
||||
flex-shrink: 0;
|
||||
margin-right: 4px;
|
||||
color: #e6a23c;
|
||||
}
|
||||
|
||||
.item-title.done {
|
||||
text-decoration: line-through;
|
||||
color: #c0c4cc;
|
||||
@@ -1290,4 +1351,110 @@ onMounted(() => {
|
||||
background: #409eff;
|
||||
}
|
||||
}
|
||||
// ===== 暗色主题适配 =====
|
||||
html.dark & {
|
||||
.page-header p {
|
||||
color: var(--el-text-color-secondary);
|
||||
}
|
||||
|
||||
.stat-card {
|
||||
background: var(--el-bg-color);
|
||||
border-color: var(--el-border-color-lighter);
|
||||
|
||||
.stat-label {
|
||||
color: var(--el-text-color-secondary);
|
||||
}
|
||||
.stat-sub {
|
||||
color: var(--el-text-color-placeholder);
|
||||
}
|
||||
}
|
||||
|
||||
.category-tabs {
|
||||
background: var(--el-bg-color);
|
||||
border-color: var(--el-border-color-lighter);
|
||||
}
|
||||
.tab-count {
|
||||
background: var(--el-fill-color);
|
||||
color: var(--el-text-color-secondary);
|
||||
}
|
||||
|
||||
.calendar-card {
|
||||
background: var(--el-bg-color);
|
||||
border-color: var(--el-border-color-lighter);
|
||||
}
|
||||
.calendar-week-header {
|
||||
border-bottom-color: var(--el-border-color-lighter);
|
||||
}
|
||||
.week-name {
|
||||
color: var(--el-text-color-secondary);
|
||||
}
|
||||
.calendar-cell {
|
||||
border-right-color: var(--el-border-color-lighter);
|
||||
border-bottom-color: var(--el-border-color-lighter);
|
||||
|
||||
&:hover {
|
||||
background: var(--el-fill-color-light);
|
||||
}
|
||||
&.other-month {
|
||||
color: var(--el-text-color-placeholder);
|
||||
background: var(--el-fill-color-light);
|
||||
}
|
||||
&.selected {
|
||||
background: var(--el-color-primary-light-9);
|
||||
box-shadow: inset 0 0 0 2px var(--el-color-primary);
|
||||
}
|
||||
}
|
||||
.today-tag,
|
||||
.month-tag {
|
||||
color: var(--el-color-primary);
|
||||
}
|
||||
.cell-item {
|
||||
background: var(--el-fill-color-light);
|
||||
|
||||
&:hover {
|
||||
background: var(--el-fill-color);
|
||||
}
|
||||
}
|
||||
.item-time {
|
||||
color: var(--el-text-color-secondary);
|
||||
}
|
||||
.item-title.done {
|
||||
color: var(--el-text-color-placeholder);
|
||||
}
|
||||
.cell-more {
|
||||
color: var(--el-text-color-secondary);
|
||||
|
||||
&:hover {
|
||||
color: var(--el-color-primary);
|
||||
}
|
||||
}
|
||||
|
||||
.day-panel {
|
||||
background: var(--el-bg-color);
|
||||
border-color: var(--el-border-color-lighter);
|
||||
}
|
||||
.day-panel-header {
|
||||
border-bottom-color: var(--el-border-color-lighter);
|
||||
}
|
||||
.day-sub {
|
||||
color: var(--el-text-color-secondary);
|
||||
}
|
||||
.day-item {
|
||||
background: var(--el-fill-color-light);
|
||||
}
|
||||
.day-item-title.done {
|
||||
color: var(--el-text-color-placeholder);
|
||||
}
|
||||
.day-item-time {
|
||||
color: var(--el-text-color-secondary);
|
||||
}
|
||||
|
||||
.table-card {
|
||||
background: var(--el-bg-color);
|
||||
border-color: var(--el-border-color-lighter);
|
||||
}
|
||||
.list-title.done {
|
||||
color: var(--el-text-color-placeholder);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user