Browse Source

lihuilin/feature-20250718094329-25周年庆后台
lihuilin 4 weeks ago
parent
commit
00c742a6f5
  1. 93
      activitylink/src/api/manage/gift.js
  2. 24
      activitylink/src/api/manage/level.js
  3. 393
      activitylink/src/views/zhongchou/gift/importFixedList/index.vue
  4. 474
      activitylink/src/views/zhongchou/gift/importuser/index.vue
  5. 385
      activitylink/src/views/zhongchou/gift/index.vue
  6. 155
      activitylink/src/views/zhongchou/level/index.vue

93
activitylink/src/api/manage/gift.js

@ -1,33 +1,29 @@
import request from '@/utils/request' import request from '@/utils/request'
//奖品新增 //奖品新增
export function addprize(params) {
export function addPrize(data) {
return request({ return request({
url: 'admin/prize/add',
url: '/admin/prize/add',
method: 'post', method: 'post',
params: params
})
}
// 查询所有奖品和对应等级并排序
export function prizelist(params) {
return request({
url: 'api/prize/list',
method: 'post',
params: params
data: data,
headers: {
'Content-Type': 'application/json'
}
}) })
} }
// 奖品删除 // 奖品删除
export function deleteprize(params) {
export function deletePrize(id) {
return request({ return request({
url: 'admin/prize/delete',
url: '/admin/prize/delete',
method: 'post', method: 'post',
params: params
params: { id }
}) })
} }
//奖品分页查询 //奖品分页查询
export function getprizelimit(params) {
export function getPrizeList(params) {
return request({ return request({
url: 'admin/prize/list',
url: '/admin/prize/list',
method: 'post', method: 'post',
params: params params: params
}) })
@ -35,8 +31,71 @@ export function getprizelimit(params) {
// 根据id查询奖品 // 根据id查询奖品
export function getprizebyid(params) { export function getprizebyid(params) {
return request({ return request({
url: 'admin/prize/detail',
url: '/admin/prize/detail',
method: 'post', method: 'post',
params: params params: params
}) })
}
// 修改奖品
export function updatePrize(data) {
return request({
url: '/admin/prize/update',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
}
// 查询普通用户
export function getUserList(data) {
return request({
url: '/admin/user/list',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
}
// 普通用户新增
export function addUser(data) {
return request({
url: '/admin/user/add',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
}
// 普通用户删除
export function deleteUser(id) {
return request({
url: '/admin/user/delete',
method: 'post',
params: { id },
headers: {
'Content-Type': 'application/json'
}
})
}
// 普通用户批量删除
export function deleteUsers(ids) {
return request({
url: '/admin/user/delete/batch',
method: 'post',
params: { ids }
})
}
// 内定用户查全部
export function getFixUserList(data) {
return request({
url: '/admin/user/list/fix',
method: 'get',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
} }

24
activitylink/src/api/manage/level.js

@ -28,19 +28,29 @@ export function deleteGrade(id) {
}) })
} }
// 根据id查询等级 // 根据id查询等级
export function getgradedetails(params) {
// export function getgradedetails(params) {
// return request({
// url: '/admin/grade/details',
// method: 'post',
// params: params
// })
// }
// 修改等级
export function updateGrade(data) {
return request({ return request({
url: 'admin/grade/details',
url: '/admin/grade/update',
method: 'post', method: 'post',
params: params
data,
headers: {
'Content-Type': 'application/json'
}
}) })
} }
// 修改等级
export function updateGrade(data) {
// 等级名下拉框,礼品新增那边
export function getGradeNameList() {
return request({ return request({
url: 'admin/grade/update',
url: '/admin/grade/allGradeName',
method: 'post', method: 'post',
data,
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
} }

393
activitylink/src/views/zhongchou/gift/importFixedList/index.vue

@ -1,279 +1,146 @@
<template> <template>
<el-card style="margin-top: 50px; min-height: 90vh; max-height: 90vh;">
<!-- 头部标题区域 -->
<template #header>
<div style="display: flex; align-items: center; justify-content: space-between;">
<span style="font-size: 18px; font-weight: bold;">导入内定名单--{{ giftStore.fixedGiftName }}</span>
<el-button type="primary" @click="goBack">
<i class="el-icon-back"></i> 返回
</el-button>
</div>
<div style="margin-bottom:30px">
<el-button type="primary" @click="goBack" style="margin-right:20px">返回</el-button>
<span style="font-size: 1.5em; font-weight: bold;">导入内定用户</span>
</div>
<el-card style="min-height: 90vh; max-height: 90vh;">
<div style="margin-bottom: 20px; display: flex; justify-content: space-between; align-items: center;">
<div style="display: flex; gap: 10px; align-items: center;">
<span style="white-space: nowrap;">姓名</span>
<el-input v-model="searchObj.name" placeholder="请输入姓名" style="width: 150px;" clearable></el-input>
</template>
<!-- 搜索和操作区域 -->
<div style="margin-bottom: 20px; display: flex; justify-content: space-between; align-items: center;">
<!-- 左侧搜索区域 -->
<div style="display: flex; gap: 10px; align-items: center;">
<span style="white-space: nowrap;">姓名</span>
<el-input
v-model="searchData.name"
placeholder="请输入姓名"
style="width: 150px;"
clearable
></el-input>
<span style="white-space: nowrap; margin-left: 10px;">精网号</span>
<el-input
v-model="searchData.jingwangId"
placeholder="请输入精网号"
style="width: 180px;"
clearable
@input="handleJingwangIdInput"
></el-input>
<el-button type="primary" @click="search" style="margin-left: 10px;">搜索</el-button>
</div>
<!-- 右侧操作按钮区域 -->
<div style="display: flex; gap: 10px;">
<el-button type="primary" @click="addUser">添加用户</el-button>
<el-button type="success" @click="importExcel">导入Excel</el-button>
</div>
<span style="white-space: nowrap; margin-left: 10px;">精网号</span>
<el-input v-model="searchObj.jwcode" placeholder="请输入精网号" style="width: 180px;" clearable
@input="trimJwcode"></el-input>
<el-button type="primary" @click="" style="margin-left: 10px;">搜索</el-button>
</div>
<div style="display: flex; gap: 10px;">
<el-button type="primary" @click="addUser">添加用户</el-button>
<el-button type="success" @click="importExcel">导入Excel</el-button>
</div>
</div> </div>
<!-- 用户表格 -->
<el-table :data="filteredUsers" style="width: 100%;" :row-style="{ height: '60px' }">
<el-table-column type="selection" width="200" />
<el-table-column prop="id" label="ID" width="250" />
<el-table-column prop="name" label="姓名" width="250" />
<el-table-column prop="jingwangId" label="精网号" width="300" />
<el-table-column label="操作" >
<template #default="scope">
<el-button size="small" type="danger" @click="deleteUser(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 底部操作区域 -->
<div style="margin-top: 20px; display: flex; justify-content: space-between; align-items: center;">
<el-button type="danger" @click="batchDelete">批量删除</el-button>
<div style="display: flex; align-items: center;">
<span style="margin-right: 15px;">{{ total }}</span>
<el-select v-model="pageSize" style="width: 120px; margin-right: 15px;">
<el-option label="10条/页" :value="10" />
<el-option label="20条/页" :value="20" />
<el-option label="50条/页" :value="50" />
</el-select>
<el-pagination
layout="prev, pager, next"
:total="total"
:page-size="pageSize"
v-model:current-page="currentPage"
/>
<el-input
v-model="jumpPage"
style="width: 80px; margin-left: 15px; margin-right: 10px;"
placeholder="页码"
/>
<el-button type="primary" @click="goToPage">前往</el-button>
</div>
<!-- 用户表格 -->
<el-table :data="tableData" style="width: 100%;" :row-style="{ height: '60px' }">
<el-table-column type="selection" width="200" />
<el-table-column prop="id" label="ID" width="250" />
<el-table-column prop="name" label="姓名" width="250" />
<el-table-column prop="jwcode" label="精网号" width="300" />
<el-table-column label="操作">
<template #default="scope">
<el-button size="small" type="danger" @click="deleteUser(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 底部操作区域 -->
<div style="margin-top: 20px; display: flex; justify-content: space-between; align-items: center;">
<el-button type="danger" @click="batchDelete">批量删除</el-button>
<div style="display: flex; align-items: center;">
<span style="margin-right: 15px;">{{ total }}</span>
<el-select v-model="pageSize" style="width: 120px; margin-right: 15px;">
<el-option label="10条/页" :value="10" />
<el-option label="20条/页" :value="20" />
<el-option label="50条/页" :value="50" />
</el-select>
<el-pagination layout="prev, pager, next" :total="total" :page-size="pageSize"
v-model:current-page="currentPage" />
<el-input v-model="jumpPage" style="width: 80px; margin-left: 15px; margin-right: 10px;" placeholder="页码" />
<el-button type="primary" @click="goToPage">前往</el-button>
</div> </div>
</el-card>
<el-dialog
v-model="centerDialogVisible"
title="添加用户"
width="500"
align-center
>
<el-form ref="addForm" :model="winuser" label-width="80px">
<el-form-item label="姓名" prop="name">
<el-input v-model="winuser.name" placeholder="请输入中奖用户姓名" />
</el-form-item>
<el-form-item label="精网号" prop="jingwangId">
<el-input v-model="winuser.jingwangId" placeholder="请输入中奖用户精网号" @input="handleJingwangIdInput"/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="addwinUser">
确定
</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { ref, computed } from 'vue'
import { useRouter } from 'vue-router'
import { usegiftFixedListStone } from '@/stone/giftFixedListStone';
</div>
</el-card>
const giftStore = usegiftFixedListStone();
const router = useRouter()
const centerDialogVisible = ref(false)
//
const users = ref([
{
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
},
])
//
const searchData = ref({
name: '',
jingwangId: ''
})
//
const currentPage = ref(1)
const pageSize = ref(10)
const jumpPage = ref('')
const total = computed(() => users.value.length)
//
const filteredUsers = computed(() => {
//
const start = (currentPage.value - 1) * pageSize.value
const end = start + pageSize.value
return users.value.slice(start, end)
})
const search = () => {
//
console.log('执行搜索')
}
<el-dialog v-model="addVisible" title="添加用户" width="500" align-center>
<el-form ref="addForm" :model="winuser" label-width="80px">
<el-form-item label="姓名" prop="name">
<el-input v-model="winuser.name" placeholder="请输入用户姓名" />
</el-form-item>
<el-form-item label="精网号" prop="jwcode">
<el-input v-model="winuser.jwcode" placeholder="请输入精网号" @input="trimJwcode" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="addwinUser">
确定
</el-button>
</div>
</template>
</el-dialog>
</template>
const winuser=ref({
name: '',
jingwangId: '',
})
<script setup>
import { ref, computed, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { usegiftFixedListStone } from '@/stone/giftFixedListStone';
import { getFixUserList } from '@/api/manage/gift'
const giftStore = usegiftFixedListStone();
const router = useRouter()
//
const deleteUser = (user) => {
const index = users.value.findIndex(u => u.id === user.id)
if (index !== -1) {
users.value.splice(index, 1)
const addVisible = ref(false)
const tableData = ref([])
const pagination = ref({
pageNum: 1,
pageSize: 10,
total:0
})
//
const searchObj = ref({
username: '',
jwcode: '',
})
//
const getFixUsers = async () => {
try {
const res = await getFixUserList({
username: searchObj.value.username,
password: searchObj.value.jwcode,
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize
})
if (res.code === 200) {
tableData.value = res.data.list
pagination.value.total = res.data.total
} else {
ElMessage.error(res.message || '获取数据失败')
} }
} catch (error) {
console.error('请求失败:', error)
ElMessage.error('请求失败,请重试')
} }
//
const batchDelete = () => {
//
console.log('执行批量删除')
}
//
const addUser = () => {
//
centerDialogVisible.value = true
}
//
const goToPage = () => {
const page = parseInt(jumpPage.value)
if (!isNaN(page) && page > 0 && page <= Math.ceil(total.value / pageSize.value)) {
currentPage.value = page
} }
//
const cancel = () => {
centerDialogVisible.value = false
winuser.value ={
name: '',
jingwangId: ''
jumpPage.value = ''
} }
const trimJwcode = (value) => {
searchObj.value.jwcode = value.replace(/\D/g, '')
} }
//
const addwinUser = () => {
centerDialogVisible.value = false
//TODO:
winuser.value ={
name: '',
jingwangId: ''
//
const goBack = () => {
router.back()
} }
onMounted(() => {
getFixUsers()
})
</script>
<style scoped>
.el-card {
border-radius: 8px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
} }
// Excel
const importExcel = () => {
//
console.log('导入Excel')
}
//
const goToPage = () => {
const page = parseInt(jumpPage.value)
if (!isNaN(page) && page > 0 && page <= Math.ceil(total.value / pageSize.value)) {
currentPage.value = page
}
jumpPage.value = ''
}
const handleJingwangIdInput = (value) => {
searchData.value.jingwangId = value.replace(/\D/g, '')
}
.el-table {
margin-top: 10px;
}
//
const goBack = () => {
router.back()
}
</script>
<style scoped>
.el-card {
border-radius: 8px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
.el-table {
margin-top: 10px;
}
.el-pagination {
margin: 0;
}
</style>
.el-pagination {
margin: 0;
}
</style>

474
activitylink/src/views/zhongchou/gift/importuser/index.vue

@ -1,275 +1,233 @@
<template> <template>
<el-card style="margin-top: 50px; min-height: 90vh; max-height: 90vh;">
<!-- 头部标题区域 -->
<template #header>
<div style="display: flex; align-items: center; justify-content: space-between;">
<span style="font-size: 18px; font-weight: bold;">导入抽奖用户</span>
<div style="margin-bottom:30px">
<el-button type="primary" @click="goBack" style="margin-right:20px">返回</el-button>
<span style="font-size: 1.5em; font-weight: bold;">导入抽奖用户</span>
</div>
<el-card>
<div style="margin-bottom: 20px; display: flex; justify-content: space-between; align-items: center;">
<div>
姓名<el-input v-model="searchObj.username" placeholder="请输入姓名" style="width: 150px;margin-right:10px" clearable></el-input>
精网号<el-input v-model="searchObj.jwcode" placeholder="请输入精网号" style="width: 180px;" clearable @input="trimJwcode"></el-input>
<el-button type="primary" @click="getUsers" style="margin-left: 10px;">搜索</el-button>
</div>
<div style="display: flex; gap: 10px;" fixed:right>
<el-button type="primary" @click="openAdd">添加用户</el-button>
<el-button type="success" @click="importExcel">导入Excel</el-button>
</div>
</div>
<!-- 用户表格 -->
<el-table :data="tableData" style="width: 100%;" :row-style="{ height: '60px' }" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="70" />
<el-table-column type="index" label="ID" width="200" />
<el-table-column prop="username" label="姓名" width="200" />
<el-table-column prop="jwcode" label="精网号" width="200" />
<el-table-column label="操作" fixed="right">
<template #default="scope">
<el-button text type="danger" @click="delUser(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-button type="primary" @click="goBack">
<i class="el-icon-back"></i> 返回
</el-button>
</div>
</template>
<!-- 搜索和操作区域 -->
<div style="margin-bottom: 20px; display: flex; justify-content: space-between; align-items: center;">
<!-- 左侧搜索区域 -->
<div style="display: flex; gap: 10px; align-items: center;">
<span style="white-space: nowrap;">姓名</span>
<el-input
v-model="searchData.name"
placeholder="请输入姓名"
style="width: 150px;"
clearable
></el-input>
<span style="white-space: nowrap; margin-left: 10px;">精网号</span>
<el-input
v-model="searchData.jingwangId"
placeholder="请输入精网号"
style="width: 180px;"
clearable
@input="handleJingwangIdInput"
></el-input>
<el-button type="primary" @click="search" style="margin-left: 10px;">搜索</el-button>
</div>
<!-- 右侧操作按钮区域 -->
<div style="display: flex; gap: 10px;">
<el-button type="primary" @click="addUser">添加用户</el-button>
<el-button type="success" @click="importExcel">导入Excel</el-button>
</div>
<!-- 底部操作区域 -->
<div style="margin-top: 20px; display: flex; justify-content: space-between; align-items: center;">
<el-button text type="danger" @click="batchDelete">批量删除</el-button>
<div style="display: flex; align-items: center;">
<span style="margin-right: 15px;">{{ pagination.total }}</span>
<el-select v-model="pagination.pageSize" style="width: 120px; margin-right: 15px;">
<el-option label="10条/页" :value="10" />
<el-option label="20条/页" :value="20" />
<el-option label="50条/页" :value="50" />
</el-select>
<el-pagination layout="prev, pager, next" :total="pagination.total" :page-size="pagination.pageSize" v-model:current-page="currentPage" />
<el-input v-model="jumpPage" style="width: 80px; margin-left: 15px; margin-right: 10px;" placeholder="页码" />
<el-button type="primary" @click="goToPage">前往</el-button>
</div>
</div> </div>
<!-- 用户表格 -->
<el-table :data="filteredUsers" style="width: 100%;" :row-style="{ height: '60px' }">
<el-table-column type="selection" width="200" />
<el-table-column prop="id" label="ID" width="250" />
<el-table-column prop="name" label="姓名" width="250" />
<el-table-column prop="jingwangId" label="精网号" width="300" />
<el-table-column label="操作" >
<template #default="scope">
<el-button size="small" type="danger" @click="deleteUser(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 底部操作区域 -->
<div style="margin-top: 20px; display: flex; justify-content: space-between; align-items: center;">
<el-button type="danger" @click="batchDelete">批量删除</el-button>
<div style="display: flex; align-items: center;">
<span style="margin-right: 15px;">{{ total }}</span>
<el-select v-model="pageSize" style="width: 120px; margin-right: 15px;">
<el-option label="10条/页" :value="10" />
<el-option label="20条/页" :value="20" />
<el-option label="50条/页" :value="50" />
</el-select>
<el-pagination
layout="prev, pager, next"
:total="total"
:page-size="pageSize"
v-model:current-page="currentPage"
/>
<el-input
v-model="jumpPage"
style="width: 80px; margin-left: 15px; margin-right: 10px;"
placeholder="页码"
/>
<el-button type="primary" @click="goToPage">前往</el-button>
</div>
</el-card>
<el-dialog v-model="addVisible" title="添加用户" width="500" align-center>
<el-form ref="addForm" :model="addObj" label-width="80px">
<el-form-item label="姓名" prop="username">
<el-input v-model="addObj.username" placeholder="请输入用户姓名" />
</el-form-item>
<el-form-item label="精网号" prop="jwcode">
<el-input v-model="addObj.jwcode" placeholder="请输入用户精网号" @input="trimJwcode" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="addVisible = false">取消</el-button>
<el-button type="primary" @click="submitAdd">确定</el-button>
</div> </div>
</template>
</el-dialog>
</template>
</el-card>
<el-dialog
v-model="centerDialogVisible"
title="添加中奖用户"
width="500"
align-center
>
<el-form ref="addForm" :model="winuser" label-width="80px">
<el-form-item label="姓名" prop="name">
<el-input v-model="winuser.name" placeholder="请输入中奖用户姓名" />
</el-form-item>
<el-form-item label="精网号" prop="jingwangId">
<el-input v-model="winuser.jingwangId" placeholder="请输入中奖用户精网号" @input="handleJingwangIdInput"/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="addwinUser">
确定
</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { ref, computed } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
const centerDialogVisible = ref(false)
//
const users = ref([
{
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
}, {
id: 1,
name: '张家伟',
jingwangId: '90047666'
},
])
//
const searchData = ref({
name: '',
jingwangId: '',
})
//
const currentPage = ref(1)
const pageSize = ref(10)
const jumpPage = ref('')
const total = computed(() => users.value.length)
//
const filteredUsers = computed(() => {
//
const start = (currentPage.value - 1) * pageSize.value
const end = start + pageSize.value
return users.value.slice(start, end)
})
const winuser=ref({
name: '',
jingwangId: '',
})
const search = () => {
//
console.log('执行搜索')
}
//
const deleteUser = (user) => {
const index = users.value.findIndex(u => u.id === user.id)
if (index !== -1) {
users.value.splice(index, 1)
<script setup>
import { ref, computed, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { getUserList, addUser, deleteUser, deleteUsers } from '@/api/manage/gift';
import { ElMessage, ElMessageBox } from 'element-plus'
const router = useRouter()
const addVisible = ref(false)
const tableData = ref([])
// id
const selectedIds = ref([])
//
const searchObj = ref({
username: '',
jwcode: '',
})
const addObj = ref({
username: '',
jwcode: '',
})
const pagination = ref({
pageNum: 1,
pageSize: 10,
total:0
})
const openAdd = () => {
addObj.value = {}
addVisible.value = true
}
//
const getUsers = async () => {
try {
const res = await getUserList({
username: searchObj.value.username,
jwcode: searchObj.value.jwcode,
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize
})
if (res.code === 200) {
tableData.value = res.data.list
pagination.value.total = res.data.total
} else {
ElMessage.error(res.message || '获取数据失败')
} }
} catch (error) {
console.error('请求失败:', error)
ElMessage.error('请求失败,请重试')
} }
//
const batchDelete = () => {
//
console.log('执行批量删除')
}
//
const submitAdd = async () => {
if (!addObj.value.username || addObj.value.jwcode === '') {
ElMessage.error('请填写完整信息')
return
} }
//
const addUser = () => {
//
centerDialogVisible.value = true
try {
const data = {
username: addObj.value.username,
jwcode: addObj.value.jwcode
}
console.log('看看添加参数',data)
const response = await addUser(data)
if (response.code === 200) {
ElMessage.success('添加成功')
addVisible.value = false
getUsers()
} else {
ElMessage.error(response.message || '添加失败')
}
} catch (error) {
console.error('添加等级失败:', error)
ElMessage.error('添加失败,请重试')
} }
//
const cancel = () => {
centerDialogVisible.value = false
winuser.value ={
name: '',
jingwangId: ''
}
}
//
const addwinUser = () => {
centerDialogVisible.value = false
//TODO:
winuser.value ={
name: '',
jingwangId: ''
} }
//
const delUser = (row) => {
ElMessageBox.confirm('确定要删除该用户吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
try {
const id = String(row.id)
console.log('删除等级的id是:', id)
const response = await deleteUser(id)
if (response.code === 200) {
ElMessage.success('删除成功')
getUsers()
} else {
ElMessage.error(response.message || '删除失败')
}
} catch (error) {
console.error('删除失败:', error)
ElMessage.error('删除失败,请重试')
}
}).catch(() => {
ElMessage.info('已取消删除')
})
} }
// Excel
const importExcel = () => {
//
console.log('导入Excel')
//
const batchDelete = async () => {
if (selectedIds.value.length === 0) {
ElMessage.warning('请先选择需要删除的用户')
return
} }
const goBack = () => {
router.back()
ElMessageBox.confirm(`确定要删除选中的${selectedIds.value.length}条数据吗?`,// $??
'删除确认',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
} }
//
const goToPage = () => {
const page = parseInt(jumpPage.value)
if (!isNaN(page) && page > 0 && page <= Math.ceil(total.value / pageSize.value)) {
currentPage.value = page
).then(async () => {
try {
const response = await deleteUsers(selectedIds.value.join(','))
console.log(selectedIds.value.join(','))
if (response.code === 200) {
ElMessage.success('批量删除成功')
getUsers()
selectedIds.value = []
} else {
ElMessage.error(response.message || '批量删除失败')
}
} catch (error) {
console.error('批量删除请求失败:', error)
ElMessage.error('网络错误,批量删除失败')
} }
jumpPage.value = ''
}).catch(() => {
ElMessage.info('已取消批量删除')
})
}
const goBack = () => {
router.back()
}
//
const goToPage = () => {
const page = parseInt(jumpPage.value)
if (!isNaN(page) && page > 0 && page <= Math.ceil(total.value / pageSize.value)) {
currentPage.value = page
} }
jumpPage.value = ''
}
const handleSelectionChange = (selection) => {
// id
selectedIds.value = selection.map(row => row.id)
}
const trimJwcode = (value) => {
searchObj.value.jwcode = value.replace(/\D/g, '')
}
onMounted(() => {
getUsers()
})
</script>
const handleJingwangIdInput = (value) => {
searchData.value.jingwangId = value.replace(/\D/g, '')
<style scoped>
.el-card {
border-radius: 8px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
} }
</script>
<style scoped>
.el-card {
border-radius: 8px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
.el-table {
margin-top: 10px;
}
.el-pagination {
margin: 0;
}
</style>
.el-table {
margin-top: 10px;
}
.el-pagination {
margin: 0;
}
</style>

385
activitylink/src/views/zhongchou/gift/index.vue

@ -1,21 +1,17 @@
<!-- 由于本地图片在js中不会自动解析@所以需要用方法getImageUrl()获取图片路径但是如果图片用的绝对路径则不需要 -->
<template> <template>
<el-card style="margin-top: 50px; min-height: 90vh; max-height: 90vh; display: flex; flex-direction: column;">
<h2>礼品管理</h2>
<el-card style="min-height: 90vh; max-height: 90vh; display: flex; flex-direction: column;">
<div class="gift-management-container" style="flex: 1; overflow-y: auto;"> <div class="gift-management-container" style="flex: 1; overflow-y: auto;">
<h2>礼品管理</h2>
<!-- 添加礼品和导入用户按钮 -->
<div class="action-buttons"> <div class="action-buttons">
<el-button type="primary" @click="showAddDialog">添加礼品</el-button>
<el-button @click="goToimportUsers">导入抽奖用户</el-button>
<el-button type="primary" @click="showAdd">添加礼品</el-button>
<el-button type="primary" @click="goToimportUsers">导入抽奖用户</el-button>
</div> </div>
<div class="table-container" style="flex: 1; overflow-y: auto;"> <div class="table-container" style="flex: 1; overflow-y: auto;">
<el-table :data="tableData" style="width: 100%" class="gift-table"> <el-table :data="tableData" style="width: 100%" class="gift-table">
<el-table-column prop="id" label="ID" width="100" align="center"></el-table-column>
<el-table-column type="index" label="ID" width="100" align="center"></el-table-column>
<el-table-column label="礼品图片" width="200" align="center"> <el-table-column label="礼品图片" width="200" align="center">
<template #default="scope"> <template #default="scope">
<!-- 使用作用域插槽显示当前行的图片 -->
<img v-if="scope.row.imageUrl" :src="getImageUrl(scope.row.imageUrl)"
<img v-if="scope.row.imageUrl" :src="scope.row.imageUrl"
style="max-width: 100px; max-height: 30px;"> style="max-width: 100px; max-height: 30px;">
<el-icon v-else :size="20" color="#67C23A"> <el-icon v-else :size="20" color="#67C23A">
<Check /> <Check />
@ -26,51 +22,103 @@
<el-table-column prop="gradeName" label="等级" width="200" align="center"></el-table-column> <el-table-column prop="gradeName" label="等级" width="200" align="center"></el-table-column>
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">
<template #default="scope"> <template #default="scope">
<el-button size="default" @click="goToimportFixedList(scope.row)">导入内定名单</el-button>
<el-button size="default" @click="editGift(scope.row)">编辑</el-button>
<el-button size="default" type="danger" @click="deleteGift(scope.row)">删除</el-button>
<el-button type="primary" text @click="goToimportFixedList(scope.row)">导入内定名单</el-button>
<el-button type="warning" text @click="editGift(scope.row)">编辑</el-button>
<el-button type="danger" text @click="deleteGift(scope.row)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<!-- 礼品表格 -->
</div> </div>
<!-- 分页控件 -->
<el-pagination class="pagination" v-model:current-page="pagination.pageNum" v-model:page-size="pagination.pageSize" <el-pagination class="pagination" v-model:current-page="pagination.pageNum" v-model:page-size="pagination.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="pagination.total" :page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next, jumper" :total="pagination.total" :page-sizes="[10, 20, 50, 100]"
@size-change="handleSizeChange" @current-change="handleCurrentChange"> @size-change="handleSizeChange" @current-change="handleCurrentChange">
</el-pagination> </el-pagination>
<!-- 添加/编辑礼品对话框 -->
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="40%">
<el-form :model="form" label-width="100px">
<el-form-item label="礼品名称">
<el-input v-model="form.name" placeholder="请输入礼品名称"></el-input>
<!-- 添加 -->
<el-dialog v-model="addVisible" :title="dialogTitle" width="40%">
<el-form :model="addForm" label-width="100px" ref="formRef">
<el-form-item label="礼品名称" :rules="{ required: true, message: '请输入礼品名称', trigger: 'blur' }">
<el-input v-model="addForm.prizeName" placeholder="请输入礼品名称"></el-input>
</el-form-item>
<el-form-item label="礼品等级" :rules="{ required: true, message: '请选择礼品等级', trigger: 'change' }">
<el-select v-model="addForm.gradeId" placeholder="请选择礼品等级">
<el-option v-for="item in gradeNames" :key="item.id" :label="item.gradeName" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="礼品图片" :rules="{ required: true, message: '请上传图片', trigger: 'change' }">
<el-upload
ref="uploadRef"
:action="uploadUrl"
list-type="picture-card"
:auto-upload="false"
:on-change="handleImageChange"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
:before-upload="beforeUpload"
:show-file-list="false">
<el-icon>
<Plus />
</el-icon>
<template #tip>
<div class="el-upload__tip">
只能上传jpgpng格式的图片且不超过500KB
</div>
</template>
</el-upload>
<div v-if="addForm.imageUrl" class="upload-preview">
<img :src="addForm.imageUrl" alt="预览图" style="max-width: 200px; margin-top: 10px; border-radius: 4px;">
</div>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="addVisible = false">取消</el-button>
<el-button type="primary" @click="submitAdd">确认</el-button>
</span>
</template>
</el-dialog>
<!-- 编辑 -->
<el-dialog v-model="editVisible" :title="dialogTitle" width="40%">
<el-form :model="editForm" label-width="100px" ref="formRef">
<el-form-item label="礼品名称" :rules="{ required: true, message: '请输入礼品名称', trigger: 'blur' }">
<el-input v-model="editForm.prizeName" placeholder="请输入礼品名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="礼品等级">
<el-select v-model="form.level" placeholder="请选择礼品等级">
<el-option label="特等奖" value="特等奖"></el-option>
<el-option label="一等奖" value="一等奖"></el-option>
<el-option label="二等奖" value="二等奖"></el-option>
<el-option label="三等奖" value="三等奖"></el-option>
<el-option label="四等奖" value="四等奖"></el-option>
<el-option label="五等奖" value="五等奖"></el-option>
<el-form-item label="礼品等级" :rules="{ required: true, message: '请选择礼品等级', trigger: 'change' }">
<el-select v-model="editForm.gradeId" placeholder="请选择礼品等级">
<el-option v-for="item in gradeNames" :key="item.id" :label="item.gradeName" :value="item.id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="礼品图片">
<el-upload action="#" list-type="picture-card" :auto-upload="false" :on-change="handleImageChange">
<el-form-item label="礼品图片" :rules="{ required: true, message: '请上传图片', trigger: 'change' }">
<el-upload
ref="uploadRef"
:action="uploadUrl"
list-type="picture-card"
:auto-upload="false"
:on-change="handleImageChange"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
:before-upload="beforeUpload"
:show-file-list="false">
<el-icon> <el-icon>
<Plus /> <Plus />
</el-icon> </el-icon>
<template #tip>
<div class="el-upload__tip">
只能上传jpgpng格式的图片且不超过500KB
</div>
</template>
</el-upload> </el-upload>
<div v-if="editForm.imageUrl" class="upload-preview">
<img :src="editForm.imageUrl" alt="预览图" style="max-width: 200px; margin-top: 10px; border-radius: 4px;">
</div>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
<el-button @click="editVisible = false">取消</el-button>
<el-button type="primary" @click="submitEdit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
@ -83,98 +131,182 @@ import { Check, Plus } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { usegiftFixedListStone } from '@/stone/giftFixedListStone'; import { usegiftFixedListStone } from '@/stone/giftFixedListStone';
import { getGiftList } from '@/api/manage/gift';
import { getPrizeList, addPrize, deletePrize, updatePrize } from '@/api/manage/gift';
import { getGradeNameList } from '@/api/manage/level';
const router = useRouter(); const router = useRouter();
// URL
const getImageUrl = (path) => {
// @
if (path.startsWith('@')) {
return path.replace('@', '/src')
}
return path
}
const gradeNames = ref([])
const tableData = ref([]) const tableData = ref([])
const giftStore = usegiftFixedListStone(); const giftStore = usegiftFixedListStone();
//
const pagination = ref({ const pagination = ref({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
total: 0 total: 0
}) })
//
const handleSizeChange = (val) => {
pagination.value.pageSize = val
pagination.value.pageNum = 1
}
//
const handleCurrentChange = (val) => {
pagination.value.pageNum = val
}
//
const dialogVisible = ref(false)
const addVisible = ref(false)
const editVisible = ref(false)
const dialogTitle = ref('添加礼品') const dialogTitle = ref('添加礼品')
const form = ref({
id: null,
name: '',
level: '',
image: null
const addForm = ref({
prizeName: '',
gradeId: '',
imageUrl: null
}) })
const editForm = ref({
prizeName: '',
gradeId: '',
imageUrl: null
})
const uploadUrl = 'http://39.101.133.168:8828/hljw/api/aws/upload';
const formRef = ref(null)
const uploadRef = ref(null)
const showAddDialog = () => {
const showAdd = () => {
dialogTitle.value = '添加礼品' dialogTitle.value = '添加礼品'
form.value = { id: null, name: '', level: '', image: null }
dialogVisible.value = true
addForm.value = {
prizeName: '',
gradeId: '',
imageUrl: null
}
addVisible.value = true
} }
const editGift = (row) => { const editGift = (row) => {
dialogTitle.value = '编辑礼品' dialogTitle.value = '编辑礼品'
form.value = { ...row }
dialogVisible.value = true
editForm.value = {
id: row.id,
prizeName: row.prizeName,
gradeId: row.gradeId,
imageUrl: row.imageUrl
}
editVisible.value = true
} }
const submitForm = () => {
if (!form.value.name || !form.value.level) {
ElMessage.error('请填写完整信息')
return
}
//
const getPrizes = async () => {
try {
const res = await getPrizeList({
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize
})
if (form.value.id) {
//
const index = gifts.value.findIndex(item => item.id === form.value.id)
if (index !== -1) {
gifts.value[index] = { ...form.value }
if (res.code === 200) {
tableData.value = res.data.list
pagination.value.total = res.data.total
} else {
ElMessage.error(res.message || '获取数据失败')
} }
} else {
//
const newId = gifts.value.length > 0 ? Math.max(...gifts.value.map(item => item.id)) + 1 : 1
gifts.value.push({
id: newId,
...form.value
})
} catch (error) {
console.error('请求失败:', error)
ElMessage.error('请求失败,请重试')
} }
}
//
const getGradeNames = async () => {
try {
const res = await getGradeNameList()
dialogVisible.value = false
ElMessage.success('操作成功')
if (res.code === 200) {
gradeNames.value = res.data
} else {
ElMessage.error(res.message || '获取下拉框失败')
}
} catch (error) {
console.error('获取下拉框失败:', error)
ElMessage.error('获取下拉框失败')
}
} }
//
const submitAdd = async () => {
formRef.value.validate((valid) => {
if (!valid) return false;
if (!addForm.value.imageUrl) {
ElMessage.error('请上传图片');
return;
}
try {
const data = {
prizeName: addForm.value.prizeName,
gradeId: String(addForm.value.gradeId),
imageUrl: addForm.value.imageUrl
}
console.log('添加参数:', data)
addPrize(data).then(response => {
if (response.code === 200) {
ElMessage.success('添加成功')
addVisible.value = false
getPrizes()
} else {
ElMessage.error(response.message || '添加失败')
}
}).catch(error => {
console.error('添加失败:', error)
ElMessage.error('添加失败,请重试')
})
} catch (error) {
console.error('添加失败:', error)
ElMessage.error('添加失败,请重试')
}
});
}
//
const deleteGift = (row) => { const deleteGift = (row) => {
ElMessageBox.confirm('确定要删除该礼品吗?', '提示', {
ElMessageBox.confirm('确定要删除该等级吗?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => {
// gifts.value = gifts.value.filter(item => item.id !== row.id)
ElMessage.success('删除成功')
}).then(async () => {
try {
const id = String(row.id)
console.log('删除礼品的id是:', id)
const response = await deletePrize(id)
if (response.code === 200) {
ElMessage.success('删除成功')
getPrizes()
} else {
ElMessage.error(response.message || '删除失败')
}
} catch (error) {
console.error('删除失败:', error)
ElMessage.error('删除失败,请重试')
}
}).catch(() => { }).catch(() => {
//
ElMessage.info('已取消删除') ElMessage.info('已取消删除')
}) })
} }
//
const submitEdit = async () => {
formRef.value.validate((valid) => {
if (!valid) return false;
if (!editForm.value.imageUrl) {
ElMessage.error('请上传图片');
return;
}
try {
const data = {
id: editForm.value.id,
prizeName: editForm.value.prizeName,
gradeId: String(editForm.value.gradeId),
imageUrl: editForm.value.imageUrl
}
console.log('添加参数:', data)
updatePrize(data).then(response => {
if (response.code === 200) {
ElMessage.success('编辑成功')
editVisible.value = false
getPrizes()
} else {
ElMessage.error(response.message || '编辑失败')
}
})
} catch (error) {
console.error('编辑失败:', error)
ElMessage.error('编辑失败,请重试')
}
});
}
const goToimportFixedList = (row) => { const goToimportFixedList = (row) => {
giftStore.setFixedGiftName(row.name); giftStore.setFixedGiftName(row.name);
router.push({ name: 'importFixedList' }); router.push({ name: 'importFixedList' });
@ -184,15 +316,65 @@ const goToimportUsers = () => {
router.push({ name: 'importUsers' }); router.push({ name: 'importUsers' });
} }
const handleImageChange = (file) => { const handleImageChange = (file) => {
form.value.image = file.raw
uploadRef.value.submit();
}
const handleUploadSuccess = (response, file, fileList) => {
if (response.code === 200) {
if (addVisible.value) {
addForm.value.imageUrl = response.data.url;
} else if (editVisible.value) {
editForm.value.imageUrl = response.data.url;
}
ElMessage.success('图片上传成功');
} else {
if (addVisible.value) {
addForm.value.imageUrl = null;
} else if (editVisible.value) {
editForm.value.imageUrl = null;
}
ElMessage.error(response.message || '图片上传失败');
}
}
const handleUploadError = (error) => {
console.error('上传失败:', error);
if (addVisible.value) {
addForm.value.imageUrl = null;
} else if (editVisible.value) {
editForm.value.imageUrl = null;
}
ElMessage.error('图片上传失败,请重试');
}
const beforeUpload = (file) => {
const isJPG = file.type === 'image/jpeg';
const isPNG = file.type === 'image/png';
const isLt500K = file.size / 1024 < 500;
if (!isJPG && !isPNG) {
ElMessage.error('上传图片只能是 JPG 或 PNG 格式!');
return false;
}
if (!isLt500K) {
ElMessage.error('上传图片大小不能超过 500KB!');
return false;
}
return true;
}
const handleSizeChange = (val) => {
pagination.value.pageSize = val
pagination.value.pageNum = 1
}
const handleCurrentChange = (val) => {
pagination.value.pageNum = val
} }
onMounted(() => { onMounted(() => {
getGiftList().then(response => {
tableData.value = response.data.list
})
getPrizes()
getGradeNames()
}) })
</script> </script>
@ -218,7 +400,6 @@ onMounted(() => {
.table-container { .table-container {
max-height: 600px; max-height: 600px;
/* 或者根据你的页面布局调整 */
overflow-y: auto; overflow-y: auto;
} }
@ -228,4 +409,8 @@ img {
object-fit: contain; object-fit: contain;
border-radius: 4px; border-radius: 4px;
} }
.upload-preview {
margin-top: 10px;
}
</style> </style>

155
activitylink/src/views/zhongchou/level/index.vue

@ -1,7 +1,7 @@
<template> <template>
<el-card style="margin-top: 50px; min-height: 90vh; max-height: 90vh; display: flex; flex-direction: column;">
<h2>等级管理</h2>
<el-card style="min-height: 90vh; max-height: 90vh; display: flex; flex-direction: column;">
<div class="level-management-container" style="flex: 1; overflow-y: auto;"> <div class="level-management-container" style="flex: 1; overflow-y: auto;">
<h2>等级管理</h2>
<!-- 添加等级按钮 --> <!-- 添加等级按钮 -->
<div class="action-buttons"> <div class="action-buttons">
<el-button type="primary" @click="showAddDialog">添加等级</el-button> <el-button type="primary" @click="showAddDialog">添加等级</el-button>
@ -10,7 +10,7 @@
<!-- 等级表格 --> <!-- 等级表格 -->
<div class="table-container"> <div class="table-container">
<el-table :data="tableData" style="width: 100%" :row-style="{ height: '55px' }"> <el-table :data="tableData" style="width: 100%" :row-style="{ height: '55px' }">
<el-table-column prop="id" type="index" label="ID" width="100px" fixed="left" />
<el-table-column type="index" label="ID" width="100px" fixed="left" />
<el-table-column prop="gradeName" label="等级名称" width="200" align="center" /> <el-table-column prop="gradeName" label="等级名称" width="200" align="center" />
<el-table-column prop="amount" label="数量" width="250" align="center" /> <el-table-column prop="amount" label="数量" width="250" align="center" />
<el-table-column prop="perWin" label="每轮抽取人数" width="300" align="center" /> <el-table-column prop="perWin" label="每轮抽取人数" width="300" align="center" />
@ -19,7 +19,6 @@
<template #default="scope"> <template #default="scope">
<div style="display: flex; gap: 10px; justify-content: center;"> <div style="display: flex; gap: 10px; justify-content: center;">
<el-button text type="warning" @click="editLevel(scope.row)">编辑</el-button> <el-button text type="warning" @click="editLevel(scope.row)">编辑</el-button>
<el-button text type="primary" @click=setmor>设置多个</el-button>
<el-button text type="danger" @click="deleteLevel(scope.row)">删除</el-button> <el-button text type="danger" @click="deleteLevel(scope.row)">删除</el-button>
</div> </div>
</template> </template>
@ -33,60 +32,59 @@
layout="total, sizes, prev, pager, next, jumper" :total="pagination.total" :page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next, jumper" :total="pagination.total" :page-sizes="[10, 20, 50, 100]"
@size-change="handleSizeChange" @current-change="handleCurrentChange" /> @size-change="handleSizeChange" @current-change="handleCurrentChange" />
<!-- 添加/编辑等级对话框 -->
<el-dialog v-model="dialogVisible" :title="dialogTitle" width=400px @closed="resetForm">
<el-form :model="form" label-width="120px">
<!-- 添加 -->
<el-dialog v-model="addVisible" :title="dialogTitle" width=400px @closed="resetForm">
<el-form :model="addForm" label-width="120px">
<el-form-item label="等级名称" align="center"> <el-form-item label="等级名称" align="center">
<el-input v-model="form.gradeName" placeholder="请输入等级名称"></el-input>
<el-input v-model="addForm.gradeName" placeholder="请输入等级名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="数量" align="center"> <el-form-item label="数量" align="center">
<el-input v-model="form.amount" :precision="0" :min="0" placeholder="请输入数量"
<el-input v-model="addForm.amount" :precision="0" :min="0" placeholder="请输入数量"
style="width: 100%;"></el-input> style="width: 100%;"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="每轮抽取人数" align="center"> <el-form-item label="每轮抽取人数" align="center">
<el-input v-model="form.perWin" :precision="0" :min="0" placeholder="请输入抽取人数"
<el-input v-model="addForm.perWin" :precision="0" :min="0" placeholder="请输入抽取人数"
style="width: 100%;"></el-input> style="width: 100%;"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="排序" align="center"> <el-form-item label="排序" align="center">
<el-input v-model="form.sort" :precision="0" :min="0" placeholder="请输入排序等级"
<el-input v-model="addForm.sort" :precision="0" :min="0" placeholder="请输入排序等级"
style="width: 100%;"></el-input> style="width: 100%;"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<span> <span>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
<el-button @click="addVisible = false">取消</el-button>
<el-button type="primary" @click="submitAdd">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
<!-- 设置多个对话框 -->
<!-- 添加/编辑等级对话框 -->
<el-dialog v-model="setmore" :title="setTitle" width=400px @closed="resetForm">
<el-form :model="form" label-width="120px">
<!-- 编辑 -->
<el-dialog v-model="editVisible" :title="dialogTitle" width=400px @closed="resetForm">
<el-form :model="editForm" label-width="120px">
<el-form-item label="等级名称" align="center"> <el-form-item label="等级名称" align="center">
<el-input v-model="form.gradeName" placeholder="请输入等级名称"></el-input>
<el-input v-model="editForm.gradeName" placeholder="请输入等级名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="数量" align="center"> <el-form-item label="数量" align="center">
<el-input-number v-model="form.amount" :precision="0" :min="0" placeholder="请输入数量"
style="width: 100%;"></el-input-number>
<el-input v-model="editForm.amount" :precision="0" :min="0" placeholder="请输入数量"
style="width: 100%;"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="每轮抽取人数" align="center"> <el-form-item label="每轮抽取人数" align="center">
<el-input-number v-model="form.perWin" :precision="0" :min="0" placeholder="请输入抽取人数"
style="width: 100%;"></el-input-number>
<el-input v-model="editForm.perWin" :precision="0" :min="0" placeholder="请输入抽取人数"
style="width: 100%;"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="排序" align="center"> <el-form-item label="排序" align="center">
<el-input-number v-model="form.sort" :precision="0" :min="0" placeholder="请输入排序等级"
style="width: 100%;"></el-input-number>
<el-input v-model="editForm.sort" :precision="0" :min="0" placeholder="请输入排序等级"
style="width: 100%;"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<span class="dialog-footer">
<el-button @click="setmore = false">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
<span>
<el-button @click="editVisible = false">取消</el-button>
<el-button type="primary" @click="submitEdit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</el-card> </el-card>
</template> </template>
@ -100,44 +98,36 @@ const pagination = ref({
pageSize: 10, pageSize: 10,
total:0 total:0
}) })
const setmore = ref(false)
const handleSizeChange = (val) => {
pagination.value.pageSize = val
pagination.value.pageNum = 1
getLevels()
}
const handleCurrentChange = (val) => {
pagination.value.pageNum = val
getLevels()
}
//
const setTitle = ref('设置多个')
const setmor = () => {
setmore.value = true
}
const dialogVisible = ref(false)
const addVisible = ref(false)
const editVisible = ref(false)
const dialogTitle = ref('') const dialogTitle = ref('')
const form = ref({
id: null,
const addForm = ref({
gradeName: '', gradeName: '',
amount: '', amount: '',
perWin: '', perWin: '',
sort: '' sort: ''
}) })
const editForm = ref({})
// //
const showAddDialog = () => { const showAddDialog = () => {
dialogTitle.value = '添加等级' dialogTitle.value = '添加等级'
dialogVisible.value = true
addVisible.value = true
} }
// //
const editLevel = (row) => { const editLevel = (row) => {
dialogTitle.value = '编辑等级' dialogTitle.value = '编辑等级'
form.value = { ...row }
dialogVisible.value = true
editForm.value = {
id: row.id,
gradeName: row.gradeName,
amount: row.amount,
perWin: row.perWin,
sort: row.sort
}
editVisible.value = true
} }
//
const getLevels = async () => { const getLevels = async () => {
try { try {
const res = await getLevelList({ const res = await getLevelList({
@ -157,23 +147,23 @@ const getLevels = async () => {
} }
} }
// //
const submitForm = async () => {
if (!form.value.gradeName || form.value.num === '' || form.value.sort === '' || form.value.perWin === '') {
const submitAdd = async () => {
if (!addForm.value.gradeName || addForm.value.amount === '' || addForm.value.sort === '' || addForm.value.perWin === '') {
ElMessage.error('请填写完整信息') ElMessage.error('请填写完整信息')
return return
} }
try { try {
const data = { const data = {
gradeName: form.value.gradeName,
amount: form.value.amount,
sort: form.value.sort,
perWin: form.value.perWin
gradeName: String(addForm.value.gradeName),
amount: String(addForm.value.amount),
sort: String(addForm.value.sort),
perWin: String(addForm.value.perWin)
} }
console.log('看看添加参数',data)
const response = await addLevel(data) const response = await addLevel(data)
if (response.code === 200) { if (response.code === 200) {
ElMessage.success('添加成功') ElMessage.success('添加成功')
dialogVisible.value = false
addVisible.value = false
getLevels() getLevels()
} else { } else {
ElMessage.error(response.message || '添加失败') ElMessage.error(response.message || '添加失败')
@ -183,7 +173,35 @@ const submitForm = async () => {
ElMessage.error('添加失败,请重试') ElMessage.error('添加失败,请重试')
} }
} }
//
const submitEdit = async () => {
if (!editForm.value.id || !editForm.value.gradeName || !editForm.value.amount || !editForm.value.perWin || !editForm.value.sort) {
ElMessage.error('请填写完整信息')
return
}
try {
const editData = {
id: editForm.value.id,
gradeName: editForm.value.gradeName,
amount: editForm.value.amount,
perWin: editForm.value.perWin,
sort: editForm.value.sort
}
console.log('看看编辑参数',editData)
const response = await updateGrade(editData)
if (response.code === 200) {
ElMessage.success('修改成功')
editVisible.value = false
getLevels()
} else {
ElMessage.error(response.message || '修改失败')
}
} catch (error) {
console.error('编辑等级失败:', error)
ElMessage.error('修改失败,请重试')
}
}
// //
const deleteLevel = (row) => { const deleteLevel = (row) => {
ElMessageBox.confirm('确定要删除该等级吗?', '提示', { ElMessageBox.confirm('确定要删除该等级吗?', '提示', {
@ -192,8 +210,9 @@ const deleteLevel = (row) => {
type: 'warning' type: 'warning'
}).then(async () => { }).then(async () => {
try { try {
const id = row.id
const response = await deleteGrade({ id })
const id = String(row.id)
console.log('删除等级的id是:', id)
const response = await deleteGrade(id)
if (response.code === 200) { if (response.code === 200) {
ElMessage.success('删除成功') ElMessage.success('删除成功')
getLevels() getLevels()
@ -209,16 +228,24 @@ const deleteLevel = (row) => {
}) })
} }
//
//
const resetForm = () => { const resetForm = () => {
form.value = {
addForm.value = {
gradeName: '', gradeName: '',
amount: '', amount: '',
perWin: '', perWin: '',
sort: '' sort: ''
} }
} }
const handleSizeChange = (val) => {
pagination.value.pageSize = val
pagination.value.pageNum = 1
getLevels()
}
const handleCurrentChange = (val) => {
pagination.value.pageNum = val
getLevels()
}
onMounted(() => { onMounted(() => {
getLevels() getLevels()
}) })

Loading…
Cancel
Save