Compare commits
No commits in common. "59fab7c7117ffe9863f95aa212e9fb7f9cebc656" and "bdd3a99bba00f3eda97298d6a3497c6326a1ef52" have entirely different histories.
59fab7c711
...
bdd3a99bba
@ -6,22 +6,3 @@ export async function simulateRegionBroadcast(data: Record<string, any>) {
|
|||||||
data,
|
data,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getRegionBroadcastWorkerStatus() {
|
|
||||||
return requestClient.get<Record<string, any>>(
|
|
||||||
'/go/operate/region-broadcast/worker/status',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function startRegionBroadcastWorker(data: Record<string, any>) {
|
|
||||||
return requestClient.post<Record<string, any>>(
|
|
||||||
'/go/operate/region-broadcast/worker/start',
|
|
||||||
data,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function stopRegionBroadcastWorker() {
|
|
||||||
return requestClient.post<Record<string, any>>(
|
|
||||||
'/go/operate/region-broadcast/worker/stop',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|||||||
@ -4,12 +4,7 @@ import { computed, reactive, ref, watch } from 'vue';
|
|||||||
import { Page } from '@vben/common-ui';
|
import { Page } from '@vben/common-ui';
|
||||||
import { useAccessStore } from '@vben/stores';
|
import { useAccessStore } from '@vben/stores';
|
||||||
|
|
||||||
import {
|
import { simulateRegionBroadcast } from '#/api/legacy/region-broadcast';
|
||||||
getRegionBroadcastWorkerStatus,
|
|
||||||
simulateRegionBroadcast,
|
|
||||||
startRegionBroadcastWorker,
|
|
||||||
stopRegionBroadcastWorker,
|
|
||||||
} from '#/api/legacy/region-broadcast';
|
|
||||||
import { getAllowedSysOrigins } from '#/views/system/shared';
|
import { getAllowedSysOrigins } from '#/views/system/shared';
|
||||||
|
|
||||||
import SystemRegionSelect from './components/system-region-select.vue';
|
import SystemRegionSelect from './components/system-region-select.vue';
|
||||||
@ -17,13 +12,9 @@ import SystemRegionSelect from './components/system-region-select.vue';
|
|||||||
import {
|
import {
|
||||||
Button,
|
Button,
|
||||||
Card,
|
Card,
|
||||||
Checkbox,
|
|
||||||
Form,
|
Form,
|
||||||
FormItem,
|
FormItem,
|
||||||
Input,
|
Input,
|
||||||
InputNumber,
|
|
||||||
Descriptions,
|
|
||||||
DescriptionsItem,
|
|
||||||
Select,
|
Select,
|
||||||
Space,
|
Space,
|
||||||
TextArea,
|
TextArea,
|
||||||
@ -67,22 +58,7 @@ const form = reactive<Record<string, any>>({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const sending = ref(false);
|
const sending = ref(false);
|
||||||
const workerLoading = ref(false);
|
|
||||||
const resultText = ref('');
|
const resultText = ref('');
|
||||||
const workerStatus = ref<Record<string, any>>({});
|
|
||||||
const workerForm = reactive<Record<string, any>>({
|
|
||||||
betAmounts: '100,200,500,1000',
|
|
||||||
enableGameWin: true,
|
|
||||||
enableLuckyGift: true,
|
|
||||||
gameWinAmounts: '1000,2000,5000,10000',
|
|
||||||
giftCandyOptions: '100,200,500',
|
|
||||||
giftQuantityOptions: '1,5,10',
|
|
||||||
luckyGiftWinAmounts: '1000,2000,5000,10000',
|
|
||||||
maxDelaySeconds: 20,
|
|
||||||
minDelaySeconds: 0,
|
|
||||||
multiples: '10,20,50,100',
|
|
||||||
regionCodes: [] as string[],
|
|
||||||
});
|
|
||||||
|
|
||||||
const isLuckyGift = computed(() => form.kind === 'LUCKY_GIFT');
|
const isLuckyGift = computed(() => form.kind === 'LUCKY_GIFT');
|
||||||
|
|
||||||
@ -98,18 +74,14 @@ watch(
|
|||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => form.sysOrigin,
|
() => form.sysOrigin,
|
||||||
(value) => {
|
() => {
|
||||||
form.regionId = '';
|
form.regionId = '';
|
||||||
form.regionCode = '';
|
form.regionCode = '';
|
||||||
workerForm.regionCodes = [];
|
|
||||||
if (value) {
|
|
||||||
void refreshWorkerStatus();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
function handleRegionChange(_value: any, item: Record<string, any> | null) {
|
function handleRegionChange(_value: any, item: Record<string, any> | null) {
|
||||||
form.regionCode = item?.regionCode || item?.code || String(item?.id || '');
|
form.regionCode = item?.regionCode || item?.code || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
function normalizePayload() {
|
function normalizePayload() {
|
||||||
@ -171,80 +143,6 @@ async function handleSend() {
|
|||||||
sending.value = false;
|
sending.value = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseIntList(value: any) {
|
|
||||||
return String(value || '')
|
|
||||||
.split(/[,,\s]+/)
|
|
||||||
.map((item) => Number(item.trim()))
|
|
||||||
.filter((item) => Number.isFinite(item) && item > 0)
|
|
||||||
.map((item) => Math.trunc(item));
|
|
||||||
}
|
|
||||||
|
|
||||||
function parseFloatList(value: any) {
|
|
||||||
return String(value || '')
|
|
||||||
.split(/[,,\s]+/)
|
|
||||||
.map((item) => Number(item.trim()))
|
|
||||||
.filter((item) => Number.isFinite(item) && item > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildWorkerPayload() {
|
|
||||||
return {
|
|
||||||
betAmounts: parseIntList(workerForm.betAmounts),
|
|
||||||
enableGameWin: Boolean(workerForm.enableGameWin),
|
|
||||||
enableLuckyGift: Boolean(workerForm.enableLuckyGift),
|
|
||||||
gameWinAmounts: parseIntList(workerForm.gameWinAmounts),
|
|
||||||
giftCandyOptions: parseIntList(workerForm.giftCandyOptions),
|
|
||||||
giftQuantityOptions: parseIntList(workerForm.giftQuantityOptions),
|
|
||||||
luckyGiftWinAmounts: parseIntList(workerForm.luckyGiftWinAmounts),
|
|
||||||
maxDelaySeconds: Number(workerForm.maxDelaySeconds || 0),
|
|
||||||
minDelaySeconds: Number(workerForm.minDelaySeconds || 0),
|
|
||||||
multiples: parseFloatList(workerForm.multiples),
|
|
||||||
regionCodes: workerForm.regionCodes || [],
|
|
||||||
sysOrigin: form.sysOrigin,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
async function refreshWorkerStatus() {
|
|
||||||
workerLoading.value = true;
|
|
||||||
try {
|
|
||||||
workerStatus.value = (await getRegionBroadcastWorkerStatus()) || {};
|
|
||||||
} finally {
|
|
||||||
workerLoading.value = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function handleStartWorker() {
|
|
||||||
const payload = buildWorkerPayload();
|
|
||||||
if (!payload.sysOrigin) {
|
|
||||||
message.warning('请选择系统来源');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!payload.regionCodes.length) {
|
|
||||||
message.warning('请至少选择一个区域');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!payload.enableGameWin && !payload.enableLuckyGift) {
|
|
||||||
message.warning('请至少开启一种飘屏');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
workerLoading.value = true;
|
|
||||||
try {
|
|
||||||
workerStatus.value = (await startRegionBroadcastWorker(payload)) || {};
|
|
||||||
message.success('持续模拟已启动');
|
|
||||||
} finally {
|
|
||||||
workerLoading.value = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function handleStopWorker() {
|
|
||||||
workerLoading.value = true;
|
|
||||||
try {
|
|
||||||
workerStatus.value = (await stopRegionBroadcastWorker()) || {};
|
|
||||||
message.success('持续模拟已停止');
|
|
||||||
} finally {
|
|
||||||
workerLoading.value = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -333,113 +231,6 @@ async function handleStopWorker() {
|
|||||||
placeholder="发送成功后显示服务端返回内容"
|
placeholder="发送成功后显示服务端返回内容"
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<Card class="result-card" title="持续模拟">
|
|
||||||
<Form layout="vertical">
|
|
||||||
<div class="form-grid">
|
|
||||||
<FormItem label="区域" required>
|
|
||||||
<SystemRegionSelect
|
|
||||||
v-model:value="workerForm.regionCodes"
|
|
||||||
multiple
|
|
||||||
:sys-origin="form.sysOrigin"
|
|
||||||
placeholder="可多选"
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
<FormItem label="随机间隔">
|
|
||||||
<Space>
|
|
||||||
<InputNumber
|
|
||||||
v-model:value="workerForm.minDelaySeconds"
|
|
||||||
:min="0"
|
|
||||||
:precision="0"
|
|
||||||
addon-after="秒"
|
|
||||||
/>
|
|
||||||
<InputNumber
|
|
||||||
v-model:value="workerForm.maxDelaySeconds"
|
|
||||||
:min="0"
|
|
||||||
:precision="0"
|
|
||||||
addon-after="秒"
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
</FormItem>
|
|
||||||
<FormItem label="飘屏开关">
|
|
||||||
<Space>
|
|
||||||
<Checkbox v-model:checked="workerForm.enableLuckyGift">
|
|
||||||
幸运礼物
|
|
||||||
</Checkbox>
|
|
||||||
<Checkbox v-model:checked="workerForm.enableGameWin">
|
|
||||||
游戏盈利
|
|
||||||
</Checkbox>
|
|
||||||
</Space>
|
|
||||||
</FormItem>
|
|
||||||
<FormItem label="中奖倍数">
|
|
||||||
<Input v-model:value="workerForm.multiples" placeholder="10,20,50" />
|
|
||||||
</FormItem>
|
|
||||||
<FormItem label="游戏中奖金额">
|
|
||||||
<Input
|
|
||||||
v-model:value="workerForm.gameWinAmounts"
|
|
||||||
placeholder="1000,2000,5000"
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
<FormItem label="幸运礼物中奖金额">
|
|
||||||
<Input
|
|
||||||
v-model:value="workerForm.luckyGiftWinAmounts"
|
|
||||||
placeholder="1000,2000,5000"
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
<FormItem label="投注金额">
|
|
||||||
<Input v-model:value="workerForm.betAmounts" placeholder="100,200,500" />
|
|
||||||
</FormItem>
|
|
||||||
<FormItem label="礼物单价">
|
|
||||||
<Input
|
|
||||||
v-model:value="workerForm.giftCandyOptions"
|
|
||||||
placeholder="100,200,500"
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
<FormItem label="礼物数量">
|
|
||||||
<Input
|
|
||||||
v-model:value="workerForm.giftQuantityOptions"
|
|
||||||
placeholder="1,5,10"
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<Space>
|
|
||||||
<Button :loading="workerLoading" type="primary" @click="handleStartWorker">
|
|
||||||
启动持续模拟
|
|
||||||
</Button>
|
|
||||||
<Button :loading="workerLoading" danger @click="handleStopWorker">
|
|
||||||
停止
|
|
||||||
</Button>
|
|
||||||
<Button :loading="workerLoading" @click="refreshWorkerStatus">
|
|
||||||
刷新状态
|
|
||||||
</Button>
|
|
||||||
</Space>
|
|
||||||
</Form>
|
|
||||||
|
|
||||||
<Descriptions bordered class="summary" size="small">
|
|
||||||
<DescriptionsItem label="状态">
|
|
||||||
{{ workerStatus.running ? '运行中' : '已停止' }}
|
|
||||||
</DescriptionsItem>
|
|
||||||
<DescriptionsItem label="下次间隔">
|
|
||||||
{{ workerStatus.nextDelaySec ?? 0 }} 秒
|
|
||||||
</DescriptionsItem>
|
|
||||||
<DescriptionsItem label="总发送">
|
|
||||||
{{ workerStatus.totalCount ?? 0 }}
|
|
||||||
</DescriptionsItem>
|
|
||||||
<DescriptionsItem label="幸运礼物">
|
|
||||||
{{ workerStatus.luckyGiftCount ?? 0 }}
|
|
||||||
</DescriptionsItem>
|
|
||||||
<DescriptionsItem label="游戏盈利">
|
|
||||||
{{ workerStatus.gameWinCount ?? 0 }}
|
|
||||||
</DescriptionsItem>
|
|
||||||
<DescriptionsItem label="最后执行">
|
|
||||||
{{ workerStatus.lastRunAt || '-' }}
|
|
||||||
</DescriptionsItem>
|
|
||||||
<DescriptionsItem label="最后错误">
|
|
||||||
{{ workerStatus.lastError || '-' }}
|
|
||||||
</DescriptionsItem>
|
|
||||||
</Descriptions>
|
|
||||||
</Card>
|
|
||||||
</Page>
|
</Page>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -453,8 +244,4 @@ async function handleStopWorker() {
|
|||||||
.result-card {
|
.result-card {
|
||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary {
|
|
||||||
margin-top: 16px;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user