Commit 8cb9fc29 by lijiabin

【需求 25171】feat: 转盘抽奖配置新增批量删除、批量修改启用功能

批量删除复用已有的 deleteWheelPrize(本来就接收 idList)。批量启用对接
后端新增的 batchUpdateStatus 接口,是"设置"不是"切换":传 1 全部启用、
传 0 全部禁用,后端会一次性校验总概率,超过 100% 整批失败,错误信息由
请求拦截器自动弹出,前端不用额外处理。实测过总概率超限时确实整批失败、
不会出现启用一半的情况。
parent ec29937c
...@@ -154,6 +154,18 @@ export const deleteWheelPrize = (idList: number[]) => { ...@@ -154,6 +154,18 @@ export const deleteWheelPrize = (idList: number[]) => {
}) })
} }
/**
* 批量启用/禁用转盘奖品。是「设置」不是「切换」:isEnabled 传 1 就把这批全部启用,传 0 就全部禁用。
* 批量启用会一次性校验总概率,超过 100% 整批失败(后端错误信息会由请求拦截器自动弹出来)。
*/
export const batchUpdateWheelPrizeStatus = (data: { idList: number[]; isEnabled: BooleanFlag }) => {
return service.request({
url: '/api/cultureWheelPrizes/batchUpdateStatus',
method: 'POST',
data,
})
}
export const getWheelConfig = () => { export const getWheelConfig = () => {
return service.request<BackendWheelConfigDto>({ return service.request<BackendWheelConfigDto>({
url: '/api/cultureWheelPrizes/getWheelConfig', url: '/api/cultureWheelPrizes/getWheelConfig',
......
...@@ -36,12 +36,24 @@ ...@@ -36,12 +36,24 @@
<el-icon class="mr-2"><IEpInfoFilled /></el-icon> <el-icon class="mr-2"><IEpInfoFilled /></el-icon>
配置提示 配置提示
</el-button> </el-button>
<el-button type="primary" @click="handleBatchEnable" :disabled="selectedRows.length === 0">
批量修改启用
</el-button>
<el-button type="danger" @click="handleBatchDelete" :disabled="selectedRows.length === 0">
批量删除
</el-button>
</div> </div>
<!-- 表格区域 --> <!-- 表格区域 -->
<div class="table-section"> <div class="table-section">
<div class="table-wrapper"> <div class="table-wrapper">
<el-table v-loading="loading" :data="list" height="100%"> <el-table
v-loading="loading"
:data="list"
height="100%"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="name" label="名称" /> <el-table-column prop="name" label="名称" />
<el-table-column prop="imageUrl" label="图片"> <el-table-column prop="imageUrl" label="图片">
<template #default="{ row }"> <template #default="{ row }">
...@@ -202,7 +214,12 @@ ...@@ -202,7 +214,12 @@
<script setup lang="tsx"> <script setup lang="tsx">
import { usePageSearch, useResetData } from '@/hooks' import { usePageSearch, useResetData } from '@/hooks'
import { getWheelPrizeList, addOrUpdateWheelPrize, deleteWheelPrize } from '@/api/backend' import {
getWheelPrizeList,
addOrUpdateWheelPrize,
deleteWheelPrize,
batchUpdateWheelPrizeStatus,
} from '@/api/backend'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import type { BackendWheelPrizeListItemDto, BackendAddOrUpdateWheelPrizeDto } from '@/api/backend' import type { BackendWheelPrizeListItemDto, BackendAddOrUpdateWheelPrizeDto } from '@/api/backend'
import UploadFile from '@/components/common/UploadFile/index.vue' import UploadFile from '@/components/common/UploadFile/index.vue'
...@@ -305,6 +322,61 @@ const wheelConfigRef = ref<InstanceType<typeof WheelConfig>>() ...@@ -305,6 +322,61 @@ const wheelConfigRef = ref<InstanceType<typeof WheelConfig>>()
const handleWheelConfig = () => { const handleWheelConfig = () => {
wheelConfigRef.value?.open() wheelConfigRef.value?.open()
} }
const selectedRows = ref<BackendWheelPrizeListItemDto[]>([])
// 选择
const handleSelectionChange = (selection: BackendWheelPrizeListItemDto[]) => {
selectedRows.value = selection
}
// 批量删除:deleteWheelPrize 本来就接收 idList,不用新加接口
const handleBatchDelete = async () => {
await confirm({
title: '提示',
message: `确定要删除选中的 ${selectedRows.value.length} 个奖品吗?`,
type: 'danger',
})
await deleteWheelPrize(selectedRows.value.map((item) => item.id))
refresh()
push.success('删除成功')
}
// 批量修改启用:是「设置」不是「切换」,传 1 就全部启用、传 0 就全部禁用。
// 启用会一次性校验总概率,超过 100% 整批失败,后端错误信息由请求拦截器自动弹出来,这里不用额外处理。
const handleBatchEnable = async () => {
const isEnabled = ref<BooleanFlag>(BooleanFlag.YES)
await ElMessageBox({
title: '是否启用',
message: () => (
<el-radio-group v-model={isEnabled.value}>
<el-radio value={BooleanFlag.YES}>是</el-radio>
<el-radio value={BooleanFlag.NO}>否</el-radio>
</el-radio-group>
),
showCancelButton: true,
async beforeClose(action, instance, done) {
if (action === 'confirm') {
instance.confirmButtonLoading = true
try {
await batchUpdateWheelPrizeStatus({
idList: selectedRows.value.map((item) => item.id),
isEnabled: isEnabled.value,
})
push.success('批量修改启用成功')
refresh()
done()
} catch (error) {
console.error(error)
} finally {
instance.confirmButtonLoading = false
}
} else {
done()
}
},
})
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment