up
This commit is contained in:
@@ -132,3 +132,16 @@
|
||||
|
||||
**修复**(`CalendarDetail.vue` `handleKeyDown` Ctrl+C 分支):
|
||||
- 检测 `end` 是否为 Date 实例,如果是则用本地日期方法转为 `YYYY-MM-DD` 字符串再存入 clipboard
|
||||
|
||||
## 新增:编辑事件窗口显示创建者
|
||||
|
||||
**功能**:编辑事件模态框标题居中显示「xxx 创建」
|
||||
|
||||
**实现**(参考 ScheduleView.vue):
|
||||
- 导入 `useUsersStore`,添加 `usersStore`
|
||||
- `pageData.eventBindUserID`:数组,每项 `{ eventID, userID }`
|
||||
- `getUserIdFromEventID(eventID)`:通过事件ID查创建者用户ID
|
||||
- `getUsernameFromUserID(userID)`:调用 `usersStore.getUsernameFromUserID(userID)`(有缓存)
|
||||
- `getEvents` 中遍历事件时 `pageData.value.eventBindUserID.push({ eventID: item.ID, userID: item.UserID })`
|
||||
- 模态框标题新增 `<h5 v-if="eventData.isEditing && getUserIdFromEventID(eventData.id)">` 居中显示
|
||||
- i18n:`calendar.created_by` = "{name} 创建" / "Created by {name}"
|
||||
|
||||
@@ -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}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user