Compare commits

...

2 Commits

Author SHA1 Message Date
zhx
8043571cec 修复区域飘屏 2026-05-25 22:10:54 +08:00
zhx
0ddf3bd3bd 区域飘屏 2026-05-25 21:59:19 +08:00
2 changed files with 41 additions and 4 deletions

View File

@ -14,6 +14,7 @@ const props = withDefaults(
placeholder?: string;
sysOrigin: string;
value?: any;
valueField?: 'id' | 'regionCode';
}>(),
{
clearable: false,
@ -22,6 +23,7 @@ const props = withDefaults(
multiple: false,
placeholder: '请选择',
value: '',
valueField: 'id',
},
);
@ -36,7 +38,10 @@ const selectValue = ref<any>(props.value);
const regionOptions = computed(() =>
list.value.map((item) => ({
label: item.regionName || '-',
value: item.id as any,
value:
props.valueField === 'regionCode'
? (item.regionCode || item.code || item.id)
: (item.id as any),
})),
);
@ -67,8 +72,13 @@ watch(
function emitChange(value: any) {
emit('update:value', value);
const item =
list.value.find((current) => String(current.id) === String(value)) || null;
const item = list.value.find((current) => {
const currentValue =
props.valueField === 'regionCode'
? current.regionCode || current.code || current.id
: current.id;
return String(currentValue) === String(value);
}) || null;
emit('change', value, item);
}

View File

@ -10,6 +10,7 @@ import {
startRegionBroadcastWorker,
stopRegionBroadcastWorker,
} from '#/api/legacy/region-broadcast';
import { regionConfigTable } from '#/api/legacy/system';
import { getAllowedSysOrigins } from '#/views/system/shared';
import SystemRegionSelect from './components/system-region-select.vue';
@ -69,6 +70,7 @@ const form = reactive<Record<string, any>>({
const sending = ref(false);
const workerLoading = ref(false);
const resultText = ref('');
const regionList = ref<Array<Record<string, any>>>([]);
const workerStatus = ref<Record<string, any>>({});
const workerForm = reactive<Record<string, any>>({
betAmounts: '100,200,500,1000',
@ -103,11 +105,20 @@ watch(
form.regionCode = '';
workerForm.regionCodes = [];
if (value) {
void loadRegionList();
void refreshWorkerStatus();
}
},
);
async function loadRegionList() {
if (!form.sysOrigin) {
regionList.value = [];
return;
}
regionList.value = (await regionConfigTable({ sysOrigin: form.sysOrigin })) || [];
}
function handleRegionChange(_value: any, item: Record<string, any> | null) {
form.regionCode = item?.regionCode || item?.code || String(item?.id || '');
}
@ -199,11 +210,25 @@ function buildWorkerPayload() {
maxDelaySeconds: Number(workerForm.maxDelaySeconds || 0),
minDelaySeconds: Number(workerForm.minDelaySeconds || 0),
multiples: parseFloatList(workerForm.multiples),
regionCodes: workerForm.regionCodes || [],
regionCodes: normalizeWorkerRegionCodes(workerForm.regionCodes || []),
sysOrigin: form.sysOrigin,
};
}
function normalizeWorkerRegionCodes(values: any[]) {
return values
.map((value) => {
const raw = String(value || '').trim();
const item = regionList.value.find((region) =>
[region.id, region.regionCode, region.code, region.regionName]
.filter((current) => current !== undefined && current !== null)
.some((current) => String(current).trim() === raw),
);
return String(item?.regionCode || item?.code || item?.regionName || raw).trim();
})
.filter(Boolean);
}
async function refreshWorkerStatus() {
workerLoading.value = true;
try {
@ -214,6 +239,7 @@ async function refreshWorkerStatus() {
}
async function handleStartWorker() {
await loadRegionList();
const payload = buildWorkerPayload();
if (!payload.sysOrigin) {
message.warning('请选择系统来源');
@ -342,6 +368,7 @@ async function handleStopWorker() {
v-model:value="workerForm.regionCodes"
multiple
:sys-origin="form.sysOrigin"
value-field="regionCode"
placeholder="可多选"
/>
</FormItem>