feat: 管理端 RBAC 权限体系与员工管理

新增多角色权限控制(赛事/财务/客服管理员),支持员工 CRUD、路由菜单按权限显隐、审计日志范围过滤;登录返回角色与权限列表。玩家端赛事列表增加静默刷新避免图片闪烁。Seed 补充演示员工账号与充值相关权限。附带 RBAC/审计范围单元测试及 UAT 文档更新。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-15 17:52:39 +08:00
parent be5b4a4921
commit 567ec9ec8a
44 changed files with 1717 additions and 125 deletions

View File

@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref, computed } from 'vue';
import { ref, computed, watch } from 'vue';
import { useI18n } from 'vue-i18n';
import api from '../../api';
import OutrightEventSection, {
@@ -12,6 +12,10 @@ import emptyMatchesImg from '../../assets/images/empty-matches.svg';
import GoldSpinner from '../../components/GoldSpinner.vue';
import { useOnLocaleChange } from '../../composables/useOnLocaleChange';
const props = defineProps<{
activated?: boolean;
}>();
const { t } = useI18n();
const auth = useAuthStore();
@@ -94,6 +98,14 @@ function mergeOddsOnly(fresh: OutrightEvent[]) {
useOnLocaleChange(load);
// 每次切回优胜冠军 Tab 时静默刷新赔率
watch(
() => props.activated,
(active) => {
if (active && events.value.length > 0) void load();
},
);
function toggle(id: string) {
const next = new Set(expanded.value);
if (next.has(id)) next.delete(id);