|
@@ -53,13 +53,13 @@
|
|
|
|
|
|
|
|
<el-table v-loading="loading" border :data="blindLevelsList" @selection-change="handleSelectionChange" row-key="id" :row-class-name="tableRowClassName">
|
|
<el-table v-loading="loading" border :data="blindLevelsList" @selection-change="handleSelectionChange" row-key="id" :row-class-name="tableRowClassName">
|
|
|
<el-table-column type="selection" width="55" align="center" :reserve-selection="true" />
|
|
<el-table-column type="selection" width="55" align="center" :reserve-selection="true" />
|
|
|
- <el-table-column label="显示级别" align="center" width="120">
|
|
|
|
|
|
|
+ <el-table-column label="等级" align="center" width="120">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<span v-if="scope.row.isBreak === 1" style="color: #e6a23c; font-weight: bold">{{ getDisplayLevel(scope.row) }}</span>
|
|
<span v-if="scope.row.isBreak === 1" style="color: #e6a23c; font-weight: bold">{{ getDisplayLevel(scope.row) }}</span>
|
|
|
<span v-else>{{ getDisplayLevel(scope.row) }}</span>
|
|
<span v-else>{{ getDisplayLevel(scope.row) }}</span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column label="小盲" align="center">
|
|
|
|
|
|
|
+ <el-table-column label="小盲预置分" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<div class="stepper-cell">
|
|
<div class="stepper-cell">
|
|
|
<el-button size="small" text @click="stepValue(scope.row, 'smallBlind', -1)">−</el-button>
|
|
<el-button size="small" text @click="stepValue(scope.row, 'smallBlind', -1)">−</el-button>
|
|
@@ -68,7 +68,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column label="大盲" align="center">
|
|
|
|
|
|
|
+ <el-table-column label="大盲预置分" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<div class="stepper-cell">
|
|
<div class="stepper-cell">
|
|
|
<el-button size="small" text @click="stepValue(scope.row, 'bigBlind', -1)">−</el-button>
|
|
<el-button size="small" text @click="stepValue(scope.row, 'bigBlind', -1)">−</el-button>
|
|
@@ -77,7 +77,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column label="前注" align="center">
|
|
|
|
|
|
|
+ <el-table-column label="前置预置分" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<div class="stepper-cell">
|
|
<div class="stepper-cell">
|
|
|
<el-button size="small" text @click="stepValue(scope.row, 'ante', -1)">−</el-button>
|
|
<el-button size="small" text @click="stepValue(scope.row, 'ante', -1)">−</el-button>
|
|
@@ -86,7 +86,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column label="盲注分钟" align="center" width="140">
|
|
|
|
|
|
|
+ <el-table-column label="升级时间" align="center" width="140">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<div class="stepper-cell">
|
|
<div class="stepper-cell">
|
|
|
<el-button size="small" text @click="stepValue(scope.row, 'durationMinutes', -1)">−</el-button>
|
|
<el-button size="small" text @click="stepValue(scope.row, 'durationMinutes', -1)">−</el-button>
|
|
@@ -95,7 +95,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column label="休息级别" align="center" width="120">
|
|
|
|
|
|
|
+ <el-table-column label="是否休息" align="center" width="120">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<el-select v-model="scope.row.isBreak" size="small" style="width: 100px">
|
|
<el-select v-model="scope.row.isBreak" size="small" style="width: 100px">
|
|
|
<el-option label="否" :value="0" />
|
|
<el-option label="否" :value="0" />
|
|
@@ -103,7 +103,7 @@
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column label="休息分钟" align="center" width="120">
|
|
|
|
|
|
|
+ <el-table-column label="休息时长" align="center" width="120">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<div class="stepper-cell">
|
|
<div class="stepper-cell">
|
|
|
<el-button size="small" text :disabled="scope.row.isBreak !== 1" @click="stepValue(scope.row, 'breakDurationMinutes', -1)">−</el-button>
|
|
<el-button size="small" text :disabled="scope.row.isBreak !== 1" @click="stepValue(scope.row, 'breakDurationMinutes', -1)">−</el-button>
|
|
@@ -112,7 +112,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column label="名次" align="center" width="120">
|
|
|
|
|
|
|
+ <el-table-column label="展示顺序" align="center" width="120">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<div class="stepper-cell">
|
|
<div class="stepper-cell">
|
|
|
<el-button size="small" text @click="stepValue(scope.row, 'displayOrder', -1)">−</el-button>
|
|
<el-button size="small" text @click="stepValue(scope.row, 'displayOrder', -1)">−</el-button>
|
|
@@ -324,8 +324,8 @@ const data = reactive<PageData<BlindLevelsForm, BlindLevelsQuery>>({
|
|
|
breakDurationMinutes: undefined,
|
|
breakDurationMinutes: undefined,
|
|
|
displayOrder: undefined,
|
|
displayOrder: undefined,
|
|
|
params: {},
|
|
params: {},
|
|
|
- // ✅ 核心修复:强制按levelNumber升序排序,解决插入后位置错乱问题
|
|
|
|
|
- orderByColumn: 'levelNumber',
|
|
|
|
|
|
|
+ // 按展示顺序字段排序(级别不参与排序)
|
|
|
|
|
+ orderByColumn: 'displayOrder',
|
|
|
isAsc: 'asc'
|
|
isAsc: 'asc'
|
|
|
},
|
|
},
|
|
|
rules: {
|
|
rules: {
|
|
@@ -343,28 +343,20 @@ const { queryParams, form, rules } = toRefs(data);
|
|
|
const getList = async () => {
|
|
const getList = async () => {
|
|
|
loading.value = true;
|
|
loading.value = true;
|
|
|
const res = await listBlindLevels(queryParams.value);
|
|
const res = await listBlindLevels(queryParams.value);
|
|
|
- // 确保 isBreak 为数字类型,避免 select 显示 false/true,并按 levelNumber 升序排序
|
|
|
|
|
- // 统一排序逻辑:与线下盲注表保持一致,按级别编号排序而非ID排序
|
|
|
|
|
|
|
+ // 确保 isBreak 为数字类型,避免 select 显示 false/true,按展示顺序字段排序(级别不参与排序)
|
|
|
blindLevelsList.value = (res.rows || [])
|
|
blindLevelsList.value = (res.rows || [])
|
|
|
.map((item: any) => ({
|
|
.map((item: any) => ({
|
|
|
...item,
|
|
...item,
|
|
|
isBreak: item.isBreak === true || item.isBreak === 1 ? 1 : 0
|
|
isBreak: item.isBreak === true || item.isBreak === 1 ? 1 : 0
|
|
|
}))
|
|
}))
|
|
|
- .sort((a, b) => {
|
|
|
|
|
- const levelA = a.levelNumber || 0;
|
|
|
|
|
- const levelB = b.levelNumber || 0;
|
|
|
|
|
- return levelA - levelB;
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ .sort((a, b) => (a.displayOrder || 0) - (b.displayOrder || 0));
|
|
|
total.value = res.total;
|
|
total.value = res.total;
|
|
|
loading.value = false;
|
|
loading.value = false;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const sortListByLevelNumber = () => {
|
|
|
|
|
- blindLevelsList.value.sort((a, b) => {
|
|
|
|
|
- const levelA = a.levelNumber || 0;
|
|
|
|
|
- const levelB = b.levelNumber || 0;
|
|
|
|
|
- return levelA - levelB;
|
|
|
|
|
- });
|
|
|
|
|
|
|
+/** 独立排序方法:按展示顺序字段排序(用于插入和保存后重新排序) */
|
|
|
|
|
+const sortListByDisplayOrder = () => {
|
|
|
|
|
+ blindLevelsList.value.sort((a, b) => (a.displayOrder || 0) - (b.displayOrder || 0));
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/** 计算显示级别:休息行不占级别,非休息行连续计算(如:1、2、休息(第2级后)、3、4...) */
|
|
/** 计算显示级别:休息行不占级别,非休息行连续计算(如:1、2、休息(第2级后)、3、4...) */
|
|
@@ -580,7 +572,8 @@ const validateRows = (): string[] => {
|
|
|
|
|
|
|
|
blindLevelsList.value.forEach((row) => {
|
|
blindLevelsList.value.forEach((row) => {
|
|
|
const errors: string[] = [];
|
|
const errors: string[] = [];
|
|
|
- if (!row.levelNumber || row.levelNumber <= 0) {
|
|
|
|
|
|
|
+ // 休息行不占级别(级别为0),跳过级别编号校验
|
|
|
|
|
+ if (row.isBreak !== 1 && (!row.levelNumber || row.levelNumber <= 0)) {
|
|
|
errors.push(`级别${row.levelNumber || '?'}:级别编号不能为空`);
|
|
errors.push(`级别${row.levelNumber || '?'}:级别编号不能为空`);
|
|
|
}
|
|
}
|
|
|
if (row.smallBlind === null || row.smallBlind === undefined || row.smallBlind < 0) {
|
|
if (row.smallBlind === null || row.smallBlind === undefined || row.smallBlind < 0) {
|
|
@@ -638,8 +631,11 @@ const handleInsertAfter = async (row: BlindLevelsVO) => {
|
|
|
const idx = blindLevelsList.value.findIndex((r) => r.id === row.id);
|
|
const idx = blindLevelsList.value.findIndex((r) => r.id === row.id);
|
|
|
if (idx !== -1) {
|
|
if (idx !== -1) {
|
|
|
blindLevelsList.value.splice(idx + 1, 0, { ...newLevel, id: Date.now(), _isNew: true } as any);
|
|
blindLevelsList.value.splice(idx + 1, 0, { ...newLevel, id: Date.now(), _isNew: true } as any);
|
|
|
- // 按levelNumber排序确保顺序正确
|
|
|
|
|
- sortListByLevelNumber();
|
|
|
|
|
|
|
+ // 按行顺序重排展示顺序,再按展示顺序排序确保顺序正确
|
|
|
|
|
+ blindLevelsList.value.forEach((item, index) => {
|
|
|
|
|
+ item.displayOrder = index + 1;
|
|
|
|
|
+ });
|
|
|
|
|
+ sortListByDisplayOrder();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
proxy?.$modal.msgSuccess(`成功在第${row.levelNumber}级后插入第${newLevelNumber}级`);
|
|
proxy?.$modal.msgSuccess(`成功在第${row.levelNumber}级后插入第${newLevelNumber}级`);
|
|
@@ -679,12 +675,12 @@ const handleBatchSave = async () => {
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- // 拉取全部数据(不分页,强制按levelNumber排序)
|
|
|
|
|
|
|
+ // 拉取全部数据(不分页,强制按展示顺序排序)
|
|
|
const allRes = await listBlindLevels({
|
|
const allRes = await listBlindLevels({
|
|
|
...queryParams.value,
|
|
...queryParams.value,
|
|
|
pageNum: 1,
|
|
pageNum: 1,
|
|
|
pageSize: 9999999,
|
|
pageSize: 9999999,
|
|
|
- orderByColumn: 'levelNumber',
|
|
|
|
|
|
|
+ orderByColumn: 'displayOrder',
|
|
|
isAsc: 'asc'
|
|
isAsc: 'asc'
|
|
|
});
|
|
});
|
|
|
let allRows: BlindLevelsVO[] = (allRes.rows || []).map((item: any) => ({
|
|
let allRows: BlindLevelsVO[] = (allRes.rows || []).map((item: any) => ({
|
|
@@ -718,11 +714,15 @@ const handleBatchSave = async () => {
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- // ✅ 保存前自动修正levelNumber,确保连续且不重复
|
|
|
|
|
- allRows.sort((a, b) => (a.levelNumber || 0) - (b.levelNumber || 0));
|
|
|
|
|
|
|
+ // ✅ 保存前按展示顺序排序(级别不参与排序);自动修正级别:休息行为0不占级别,正式级别连续递增
|
|
|
|
|
+ allRows.sort((a, b) => (a.displayOrder || 0) - (b.displayOrder || 0));
|
|
|
let expectedLevel = 1;
|
|
let expectedLevel = 1;
|
|
|
allRows.forEach((row) => {
|
|
allRows.forEach((row) => {
|
|
|
- row.levelNumber = expectedLevel++;
|
|
|
|
|
|
|
+ if (row.isBreak === 1) {
|
|
|
|
|
+ row.levelNumber = 0;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ row.levelNumber = expectedLevel++;
|
|
|
|
|
+ }
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
console.log('💾 准备保存的数据:', allRows); // 调试日志
|
|
console.log('💾 准备保存的数据:', allRows); // 调试日志
|