fix registration event style

This commit is contained in:
Timi
2026-08-03 16:19:43 +08:00
parent b30d0d1769
commit e3be14b0cc
3 changed files with 70 additions and 52 deletions
+29 -35
View File
@@ -15,9 +15,9 @@
<div class="title" v-text="item.name || '未命名事件'" />
<t-tag
class="status"
:theme="isRegistrationEventActive(item) ? 'primary' : 'default'"
:theme="getStatusTag(item).theme"
variant="outline"
:content="getStatusText(item)"
:content="getStatusTag(item).text"
/>
<t-tag v-if="item.requirePhoto" theme="warning" variant="outline">需拍照</t-tag>
</div>
@@ -36,7 +36,6 @@
<span v-if="!(item.roleCodeList || []).length" class="muted" v-text="'未配置'" />
</div>
<div class="line" v-text="getLimitText(item)" />
<div class="line" v-text="getPeriodText(item)" />
</div>
</template>
</t-cell>
@@ -53,11 +52,11 @@
<script setup lang="ts">
import { Toast } from "tdesign-mobile-vue";
import { Time, useUserStore, type Role } from "timi-web";
import { useUserStore, type Role } from "timi-web";
import RegistrationEventAPI from "@/api/RegistrationEventAPI";
import GaoUserAPI from "@/api/GaoUserAPI";
import { useNavBarStore } from "@/store/navBarStore";
import type { RegistrationEvent, RegistrationLimitType } from "@/types/RegistrationEvent";
import type { RegistrationEvent, RegistrationEventStatus, RegistrationLimitType } from "@/types/RegistrationEvent";
import { gaoPermissionCodes } from "@/utils/gaoPermission";
defineOptions({
@@ -72,6 +71,20 @@ const registrationEventList = ref<RegistrationEvent[]>([]);
const roleOptions = ref<Role[]>([]);
const canUpdateRegistrationEvent = computed(() => userStore.hasPermissions(gaoPermissionCodes.registrationEvent.update));
type StatusTag = {
text: string;
theme: "default" | "primary" | "danger";
};
const fixedStatusTagMap: Partial<Record<RegistrationEventStatus, StatusTag>> = {
DRAFT: { text: "草稿", theme: "default" },
INACTIVE: { text: "不可登记", theme: "default" },
DELETED: { text: "已删除", theme: "default" }
};
const activeStatusTag: StatusTag = { text: "可登记", theme: "primary" };
const notEffectiveStatusTag: StatusTag = { text: "未生效", theme: "default" };
const expiredStatusTag: StatusTag = { text: "已过期", theme: "danger" };
function createRegistrationEvent(): void {
router.push("/management/registration-events/create");
}
@@ -96,21 +109,20 @@ function handleRegistrationEventClick(item: RegistrationEvent): void {
editRegistrationEvent(item);
}
function isRegistrationEventActive(item: RegistrationEvent): boolean {
return (item.status || "ACTIVE") === "ACTIVE";
}
function getStatusText(item: RegistrationEvent): string {
if (item.status === "DRAFT") {
return "草稿";
function getStatusTag(item: RegistrationEvent): StatusTag {
const status = item.status || "ACTIVE";
const fixedStatusTag = fixedStatusTagMap[status];
if (fixedStatusTag) {
return fixedStatusTag;
}
if (item.status === "INACTIVE") {
return "不可登记";
const now = Date.now();
if (item.beginAt !== undefined && now < item.beginAt) {
return notEffectiveStatusTag;
}
if (item.status === "DELETED") {
return "已删除";
if (item.endAt !== undefined && item.endAt < now) {
return expiredStatusTag;
}
return "可登记";
return activeStatusTag;
}
function getLimitText(item: RegistrationEvent): string {
@@ -126,24 +138,6 @@ function getLimitText(item: RegistrationEvent): string {
return limitTextMap[item.limitType || "NONE"];
}
function getPeriodText(item: RegistrationEvent): string {
const beginText = formatTime(item.beginAt);
const endText = formatTime(item.endAt);
if (!beginText && !endText) {
return "有效期:不限";
}
return `有效期:${beginText || "不限"} 至 ${endText || "不限"}`;
}
function formatTime(value?: number): string {
if (!value) {
return "";
}
const date = new Date(value);
return Number.isNaN(date.getTime()) ? "" : Time.formatDateTime(date);
}
function getRoleName(code: string): string {
const role = roleOptions.value.find(item => item.code === code);
return role?.name || code;