更新角色管理相关内容

This commit is contained in:
2026-09-09 15:04:34 +08:00
parent de7225b61e
commit fef0233cc4
24 changed files with 1442 additions and 116 deletions
+169 -2
View File
@@ -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>