feat(admin+api): 代理停用默认、结算加固与冒烟配置探针
- 代理层级默认授信比例与停用冻结/禁登全局默认 - 结算预览去重、比分校验、串关当场判负与市场类型校验 - 站内信 Banner/公告自动通知开关;开发环境动态 API 端口 - 扩充 RBAC/结算/认证/返现单元测试与 agent skills
This commit is contained in:
@@ -112,7 +112,11 @@ type SubAgentLevelState = {
|
||||
|
||||
const subAgentLevelState = reactive<Record<number, SubAgentLevelState>>({});
|
||||
const agentLevelCounts = ref<Record<number, number>>({});
|
||||
const hierarchySettings = ref({ maxAgentLevel: 0 });
|
||||
const hierarchySettings = ref({ maxAgentLevel: 0, defaultSubAgentCreditRatio: 50 });
|
||||
const agentSuspendDefaults = ref({
|
||||
suspendFreezeDirectPlayers: false,
|
||||
suspendBlockPlayerLogin: false,
|
||||
});
|
||||
|
||||
function ensureSubAgentState(level: number): SubAgentLevelState {
|
||||
if (!subAgentLevelState[level]) {
|
||||
@@ -220,7 +224,9 @@ const creditContextLoading = ref(false);
|
||||
/* ─── Init ─── */
|
||||
let pageInitPromise: Promise<void> | null = null;
|
||||
const pageInitLoaded = ref(false);
|
||||
const DEFAULT_SUB_AGENT_CREDIT_RATIO = 50;
|
||||
const DEFAULT_SUB_AGENT_CREDIT_RATIO = computed(
|
||||
() => hierarchySettings.value.defaultSubAgentCreditRatio || 50,
|
||||
);
|
||||
const freezeAgentVisible = ref(false);
|
||||
const freezeAgentLoading = ref(false);
|
||||
const freezeAgentTarget = ref<AgentRow | null>(null);
|
||||
@@ -323,7 +329,7 @@ function computeSubAgentCreditByRatio(available: number, ratioPercent: number):
|
||||
const creditQuickRatios = [10, 15, 20, 30] as const;
|
||||
|
||||
function computeDefaultSubAgentCreditLimit(available: number): number {
|
||||
return computeSubAgentCreditByRatio(available, DEFAULT_SUB_AGENT_CREDIT_RATIO);
|
||||
return computeSubAgentCreditByRatio(available, DEFAULT_SUB_AGENT_CREDIT_RATIO.value);
|
||||
}
|
||||
|
||||
function applyCreateSubAgentCreditRatio(ratioPercent: number) {
|
||||
@@ -439,16 +445,33 @@ onActivated(() => {
|
||||
}
|
||||
});
|
||||
|
||||
async function loadAgentSuspendDefaults() {
|
||||
try {
|
||||
const { data } = await api.get('/admin/agents/settings/suspend');
|
||||
agentSuspendDefaults.value = {
|
||||
suspendFreezeDirectPlayers: Boolean(data.data?.suspendFreezeDirectPlayers),
|
||||
suspendBlockPlayerLogin: Boolean(data.data?.suspendBlockPlayerLogin),
|
||||
};
|
||||
} catch {
|
||||
/* keep defaults */
|
||||
}
|
||||
}
|
||||
|
||||
async function loadUsersPageInit() {
|
||||
try {
|
||||
const { data } = await api.get('/admin/users/page-init');
|
||||
const [pageInitRes] = await Promise.all([
|
||||
api.get('/admin/users/page-init'),
|
||||
loadAgentSuspendDefaults(),
|
||||
]);
|
||||
const { data } = pageInitRes;
|
||||
const payload = data.data as {
|
||||
hierarchySettings?: { maxAgentLevel: number };
|
||||
hierarchySettings?: { maxAgentLevel: number; defaultSubAgentCreditRatio?: number };
|
||||
agentLevelCounts?: Record<number, number>;
|
||||
};
|
||||
if (payload.hierarchySettings) {
|
||||
hierarchySettings.value = {
|
||||
maxAgentLevel: payload.hierarchySettings.maxAgentLevel ?? 0,
|
||||
defaultSubAgentCreditRatio: payload.hierarchySettings.defaultSubAgentCreditRatio ?? 50,
|
||||
};
|
||||
}
|
||||
if (payload.agentLevelCounts) {
|
||||
@@ -1108,8 +1131,8 @@ const freezeAgentIsSuspend = computed(() => {
|
||||
function toggleFreezeAgent(row: AgentRow) {
|
||||
freezeAgentTarget.value = row;
|
||||
freezeAgentForm.value = {
|
||||
freezeDirectPlayers: false,
|
||||
blockDirectPlayerLogin: false,
|
||||
freezeDirectPlayers: agentSuspendDefaults.value.suspendFreezeDirectPlayers,
|
||||
blockDirectPlayerLogin: agentSuspendDefaults.value.suspendBlockPlayerLogin,
|
||||
unfreezeDirectPlayers: false,
|
||||
};
|
||||
freezeAgentVisible.value = true;
|
||||
|
||||
Reference in New Issue
Block a user