This commit is contained in:
2026-05-06 23:03:49 +08:00
parent af8e63552f
commit 15e3104d2f
4 changed files with 50 additions and 2 deletions
+2 -1
View File
@@ -663,6 +663,7 @@
"paste_event": "Paste Event",
"copy_success": "Event copied",
"paste_success": "Event pasted",
"no_event_to_paste": "No event to paste"
"no_event_to_paste": "No event to paste",
"created_by": "Created by {name}"
}
}
+2 -1
View File
@@ -664,6 +664,7 @@
"paste_event": "粘贴日程",
"copy_success": "日程已复制",
"paste_success": "日程已粘贴",
"no_event_to_paste": "没有可粘贴的日程"
"no_event_to_paste": "没有可粘贴的日程",
"created_by": "{name} 创建"
}
}
@@ -10,6 +10,7 @@ import { useI18n } from "vue-i18n"
import { usePageTitle } from "@/composables/usePageTitle"
import { useToastStore } from "@/stores/toast"
import { useUserStore } from "@/stores/user"
import { useUsersStore } from "@/stores/users"
import { calendarApi } from "@/api/calendar"
import { useDateUtils } from "@/composables/useDateUtils"
import DatatimePickerForFullCalendar from "@/components/datatimePickerForFullCalendar.vue"
@@ -20,6 +21,7 @@ const router = useRouter()
const { t, locale } = useI18n()
const toast = useToastStore()
const userStore = useUserStore()
const usersStore = useUsersStore()
const DateUtils = useDateUtils()
const calendarId = ref(parseInt(route.params.id))
@@ -62,6 +64,7 @@ const pageData = ref({
lastEventClickID: 0,
submitChecked: false,
lastEventsSnapshot: null,
eventBindUserID: [], // 事件ID → 创建者UserID 映射
})
const showDeleteModal = ref(false)
@@ -103,6 +106,18 @@ function closeContextMenu() {
contextMenu.value.visible = false
}
// 通过事件ID获取创建者用户ID
function getUserIdFromEventID(eventID) {
const target = pageData.value.eventBindUserID.find(item => item.eventID === eventID)
return target ? target.userID : 0
}
// 通过用户ID获取用户名
function getUsernameFromUserID(userID) {
if (userID == 0) return ""
return usersStore.getUsernameFromUserID(userID)
}
function copyEvent() {
if (!contextMenu.value.eventInfo) return
clipboard.value = { ...contextMenu.value.eventInfo }
@@ -297,8 +312,13 @@ async function getEvents() {
if (errCode === 0) {
calendarOptions.value.events = []
pageData.value.eventBindUserID = []
;(data.list || []).forEach(item => {
const canEdit = item.canEdit === true
pageData.value.eventBindUserID.push({
eventID: item.ID,
userID: item.UserID,
})
calendarOptions.value.events.push({
id: item.ID,
title: item.Title,
@@ -724,6 +744,19 @@ onMounted(() => {
: t("calendar.view_event")
}}
</h5>
<div
v-if="eventData.isEditing && userStore.isLoggedIn && getUserIdFromEventID(eventData.id)"
class="absolute left-1/2 -translate-x-1/2 flex items-center gap-2"
>
<img
:src="usersStore.getAvatarUrlFromUserID(getUserIdFromEventID(eventData.id))"
class="h-6 w-6 rounded-full"
alt="avatar"
/>
<span class="text-sm text-gray-500">
{{ t("calendar.created_by", { name: getUsernameFromUserID(getUserIdFromEventID(eventData.id)) }) }}
</span>
</div>
<button
@click="closeEventModal"
class="btn-close text-gray-500 hover:text-gray-700"