3 changed files with 268 additions and 277 deletions
-
25activitylink/src/api/manage/user.js
-
2activitylink/src/router/index.js
-
518activitylink/src/views/zhongchou/user/index.vue
@ -0,0 +1,25 @@ |
|||||
|
import request from '@/utils/request' |
||||
|
|
||||
|
export function getuserList(data) { |
||||
|
return request({ |
||||
|
url: '/admin/isLogin/selectByJwcode', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
export function deleteuserByjwcode(data) { |
||||
|
return request({ |
||||
|
url: '/admin/isLogin/deleteUser', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
export function adduserByjwcode(data) { |
||||
|
return request({ |
||||
|
url: '/admin/isLogin/addUser', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
@ -1,309 +1,275 @@ |
|||||
<template> |
<template> |
||||
<el-card style="margin-top: 50px; min-height: 90vh; max-height: 90vh;"> |
|
||||
<!-- 搜索栏 --> |
|
||||
<div class="gray-container"> |
|
||||
<h2>用户管理</h2> |
|
||||
<el-form :inline="true" class="search-bar"> |
|
||||
<el-form-item label="姓名"> |
|
||||
<el-input v-model="searchParams.username" placeholder="请输入姓名"></el-input> |
|
||||
</el-form-item> |
|
||||
<el-form-item label="精网号"> |
|
||||
<el-input |
|
||||
v-model="searchParams.jwcode" |
|
||||
placeholder="请输入精网号" |
|
||||
@input="handleJwcodeInput" |
|
||||
></el-input> |
|
||||
</el-form-item> |
|
||||
<el-form-item> |
|
||||
<el-button type="primary" @click="handleSearch">搜索</el-button> |
|
||||
</el-form-item> |
|
||||
<el-form-item> |
|
||||
<el-button @click="handleReset">重置</el-button> |
|
||||
</el-form-item> |
|
||||
<el-form-item> |
|
||||
<el-button type="primary" @click="addusershow">添加用户</el-button> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
|
|
||||
<!-- 表格 --> |
|
||||
<div class="table-container"> |
|
||||
<el-table :data="tableData" style="width: 100%" :row-style="{ height: '55px' }"> |
|
||||
<el-table-column prop="username" label="姓名" width="180" align="center"></el-table-column> |
|
||||
<el-table-column prop="jwcode" label="精网号" width="250" align="center"></el-table-column> |
|
||||
<el-table-column prop="gradeName" label="中奖等级" width="200" align="center"></el-table-column> |
|
||||
<el-table-column prop="prizeName" label="所中礼品" width="300" align="center"></el-table-column> |
|
||||
<el-table-column prop="winTime" label="中奖时间" align="center"></el-table-column> |
|
||||
<el-table-column label="操作" align="center"> |
|
||||
<template #default="scope"> |
|
||||
<el-button size="small" type="danger" @click="openDeleteDialog(scope.row)">删除</el-button> |
|
||||
</template> |
|
||||
</el-table-column> |
|
||||
</el-table> |
|
||||
</div> |
|
||||
|
<el-card style="margin-top: 50px; min-height: 90vh; max-height: 90vh;"> |
||||
|
<!-- 搜索栏 --> |
||||
|
<div class="gray-container"> |
||||
|
<h2>用户管理</h2> |
||||
|
<el-form :inline="true" class="search-bar"> |
||||
|
<el-form-item label="精网号"> |
||||
|
<el-input |
||||
|
v-model="searchParams.jwcode" |
||||
|
placeholder="请输入精网号" |
||||
|
@input="handleJwcodeInput" |
||||
|
></el-input> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" @click="handleSearch">搜索</el-button> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button @click="handleReset">重置</el-button> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" @click="addusershow">添加用户</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
|
||||
|
<!-- 表格 --> |
||||
|
<div class="table-container"> |
||||
|
<el-table :data="tableData" style="width: 100%" :row-style="{ height: '55px' }"> |
||||
|
|
||||
|
<el-table-column prop="jwcode" label="精网号" width="250" align="center"></el-table-column> |
||||
|
|
||||
|
<el-table-column prop="createTime" label="中奖时间" align="center"></el-table-column> |
||||
|
<el-table-column label="操作" align="center"> |
||||
|
<template #default="scope"> |
||||
|
<el-button size="small" type="danger" @click="openDeleteDialog(scope.row)">删除</el-button> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
</div> |
</div> |
||||
|
</div> |
||||
|
|
||||
<!-- 删除确认对话框 --> |
|
||||
<el-dialog v-model="deleteConfirmVisible" title="提示" width="30%"> |
|
||||
<span>您确定删除该用户吗?</span> |
|
||||
<template #footer> |
|
||||
<span class="dialog-footer"> |
|
||||
<el-button @click="deleteConfirmVisible = false">取 消</el-button> |
|
||||
<el-button type="primary" @click="confirmDelete">确 定</el-button> |
|
||||
</span> |
|
||||
</template> |
|
||||
</el-dialog> |
|
||||
|
|
||||
<!-- 分页组件 --> |
|
||||
<el-pagination |
|
||||
@size-change="handleSizeChange" |
|
||||
@current-change="handleCurrentChange" |
|
||||
:current-page="searchParams.pageNum" |
|
||||
:page-sizes="[10, 20, 50, 100]" |
|
||||
:page-size="searchParams.pageSize" |
|
||||
layout="total, sizes, prev, pager, next, jumper" |
|
||||
:total="total" |
|
||||
|
<!-- 删除确认对话框 --> |
||||
|
<el-dialog v-model="deleteConfirmVisible" title="提示" width="30%"> |
||||
|
<span>您确定删除该用户吗?</span> |
||||
|
<template #footer> |
||||
|
<span class="dialog-footer"> |
||||
|
<el-button @click="deleteConfirmVisible = false">取 消</el-button> |
||||
|
<el-button type="primary" @click="confirmDelete">确 定</el-button> |
||||
|
</span> |
||||
|
</template> |
||||
|
</el-dialog> |
||||
|
|
||||
|
<!-- 分页组件 --> |
||||
|
<el-pagination |
||||
|
@size-change="handleSizeChange" |
||||
|
@current-change="handleCurrentChange" |
||||
|
:current-page="searchParams.pageNum" |
||||
|
:page-sizes="[10, 20, 50, 100]" |
||||
|
:page-size="searchParams.pageSize" |
||||
|
layout="total, sizes, prev, pager, next, jumper" |
||||
|
:total="total" |
||||
|
> |
||||
|
</el-pagination> |
||||
|
|
||||
|
<el-dialog |
||||
|
v-model="centerDialogVisible" |
||||
|
title="添加用户" |
||||
|
width="500" |
||||
|
align-center |
||||
|
@closed="cancel" |
||||
> |
> |
||||
</el-pagination> |
|
||||
|
|
||||
<el-dialog |
|
||||
v-model="centerDialogVisible" |
|
||||
title="添加用户" |
|
||||
width="500" |
|
||||
align-center |
|
||||
@closed="cancel" |
|
||||
> |
|
||||
<el-form ref="addForm" :model="JwUser" :rules="rules" label-width="80px"> |
|
||||
<el-form-item label="用户名称" prop="username"> |
|
||||
<el-input v-model="JwUser.username" placeholder="请输入用户名称" /> |
|
||||
</el-form-item> |
|
||||
<el-form-item label="精网号" prop="jwcode"> |
|
||||
<el-input v-model="JwUser.jwcode" placeholder="请输入精网号" /> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
<template #footer> |
|
||||
<div class="dialog-footer"> |
|
||||
<el-button @click="cancel">取消</el-button> |
|
||||
<el-button type="primary" @click="addUser"> |
|
||||
提交 |
|
||||
</el-button> |
|
||||
</div> |
|
||||
</template> |
|
||||
</el-dialog> |
|
||||
|
|
||||
</el-card> |
|
||||
</template> |
|
||||
|
|
||||
<script setup> |
|
||||
import { ref, onMounted } from 'vue' |
|
||||
import { useactivityStone } from '@/stone/activityStone' |
|
||||
import { useWinStone } from '@/stone/winStone' |
|
||||
import { getWinList, getWinLevelList ,exportWinExcel} from '@/api/manage/win' |
|
||||
import { onBeforeRouteLeave } from 'vue-router' |
|
||||
import { ElMessage } from 'element-plus' |
|
||||
const activityStone = useactivityStone() |
|
||||
const winStone = useWinStone() |
|
||||
|
|
||||
// 搜索参数(初始化时使用持久化值) |
|
||||
const searchParams = ref({ |
|
||||
pageNum: 1, |
|
||||
pageSize: 10, |
|
||||
username: "", |
|
||||
jwcode: "" |
|
||||
}) |
|
||||
const addForm = ref( |
|
||||
{ |
|
||||
username: '', |
|
||||
jwcode: '', |
|
||||
} |
|
||||
); |
|
||||
const deleteConfirmVisible = ref(false) |
|
||||
// 表格数据 |
|
||||
const tableData = ref([]) |
|
||||
const total = ref(0) |
|
||||
const centerDialogVisible = ref(false); |
|
||||
const addusershow = () => { |
|
||||
centerDialogVisible.value = true; |
|
||||
|
<el-form ref="addForm" :model="JwUser" :rules="rules" label-width="80px"> |
||||
|
<el-form-item label="精网号" prop="jwcode"> |
||||
|
<el-input v-model="JwUser.jwcode" placeholder="请输入精网号" /> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<template #footer> |
||||
|
<div class="dialog-footer"> |
||||
|
<el-button @click="cancel">取消</el-button> |
||||
|
<el-button type="primary" @click="addUser"> |
||||
|
提交 |
||||
|
</el-button> |
||||
|
</div> |
||||
|
</template> |
||||
|
</el-dialog> |
||||
|
|
||||
|
</el-card> |
||||
|
</template> |
||||
|
|
||||
|
<script setup> |
||||
|
import { ref, onMounted } from 'vue' |
||||
|
import { getuserList , deleteuserByjwcode , adduserByjwcode } from '@/api/manage/user' |
||||
|
import { ElMessage } from 'element-plus' |
||||
|
|
||||
|
// 搜索参数(初始化时使用持久化值) |
||||
|
const searchParams = ref({ |
||||
|
pageNum: 1, |
||||
|
pageSize: 10, |
||||
|
jwcode: "" |
||||
|
}) |
||||
|
const addForm = ref( |
||||
|
{ |
||||
|
jwcode: '', |
||||
|
} |
||||
|
); |
||||
|
const deleteConfirmVisible = ref(false) |
||||
|
// 表格数据 |
||||
|
const tableData = ref([]) |
||||
|
const total = ref(0) |
||||
|
const centerDialogVisible = ref(false); |
||||
|
const addusershow = () => { |
||||
|
centerDialogVisible.value = true; |
||||
}; |
}; |
||||
|
|
||||
|
const deleteJwcode = ref('') |
||||
// 根据什么删除在定 |
// 根据什么删除在定 |
||||
const openDeleteDialog = (row) => { |
const openDeleteDialog = (row) => { |
||||
// activityToDelete.value = row.id |
|
||||
deleteConfirmVisible.value = true |
|
||||
|
deleteJwcode.value = row.jwcode |
||||
|
deleteConfirmVisible.value = true |
||||
} |
} |
||||
// 确定删除 |
// 确定删除 |
||||
const confirmDelete = async () => { |
const confirmDelete = async () => { |
||||
// if (!activityToDelete.value) { |
|
||||
// ElMessage.warning('未获取到活动ID') |
|
||||
// return |
|
||||
// } |
|
||||
|
|
||||
// try { |
|
||||
// const response = await deleteActivityById({activityId: activityToDelete.value}) |
|
||||
|
|
||||
// if (response.code === 200) { |
|
||||
// ElMessage.success('活动删除成功') |
|
||||
// fetchActivityList() // 刷新活动列表 |
|
||||
// } else { |
|
||||
// ElMessage.error(response.message || '删除失败') |
|
||||
// } |
|
||||
// } catch (error) { |
|
||||
// console.error('删除活动失败:', error) |
|
||||
// ElMessage.error('请求失败,请重试') |
|
||||
// } finally { |
|
||||
// deleteConfirmVisible.value = false |
|
||||
// activityToDelete.value = null |
|
||||
// } |
|
||||
console.log("删除用户") |
|
||||
fetchWinList() |
|
||||
|
try { |
||||
|
const response = await deleteuserByjwcode({ jwcode: deleteJwcode.value }) |
||||
|
if (response.code === 200) { |
||||
|
ElMessage.success('删除成功') |
||||
|
fetchWinList() // 刷新列表 |
||||
|
} else { |
||||
|
ElMessage.error(response.message || '删除失败') |
||||
|
} |
||||
|
} catch (error) { |
||||
|
ElMessage.error('删除请求失败,请稍后再试') |
||||
|
console.error('删除错误:', error) |
||||
|
} finally { |
||||
deleteConfirmVisible.value = false |
deleteConfirmVisible.value = false |
||||
} |
} |
||||
|
} |
||||
|
|
||||
const addUser = () => { |
|
||||
console.log("添加用户") |
|
||||
centerDialogVisible.value = false; |
|
||||
|
|
||||
}; |
|
||||
|
|
||||
const JwUser = ref({ |
|
||||
username: '', |
|
||||
jwcode: '', |
|
||||
}) |
|
||||
|
const addUser = async () => { |
||||
|
try { |
||||
|
const response = await adduserByjwcode({ |
||||
|
jwcode: JwUser.value.jwcode |
||||
|
}); |
||||
|
|
||||
const validateJwcode = (rule, value, callback) => { |
|
||||
const isNumber = /^\d*$/.test(value); |
|
||||
if (!isNumber) { |
|
||||
callback(new Error('只能输入数字')); |
|
||||
|
if (response.code === 200) { |
||||
|
ElMessage.success('添加成功'); |
||||
|
centerDialogVisible.value = false; |
||||
|
fetchWinList(); // 刷新用户列表 |
||||
} else { |
} else { |
||||
callback(); |
|
||||
|
ElMessage.error(response.message || '添加失败'); |
||||
} |
} |
||||
|
} catch (error) { |
||||
|
ElMessage.error('添加请求失败,请稍后再试'); |
||||
|
console.error('添加用户错误:', error); |
||||
|
} |
||||
}; |
}; |
||||
|
|
||||
const rules = { |
|
||||
username: [ |
|
||||
{ required: true, message: '请输入用户名称', trigger: 'blur' } |
|
||||
], |
|
||||
jwcode: [ |
|
||||
{ required: true, message: '请输入精网号', trigger: 'blur' }, |
|
||||
{ validator: validateJwcode, trigger: 'blur' } |
|
||||
] |
|
||||
|
const JwUser = ref({ |
||||
|
username: '', |
||||
|
jwcode: '', |
||||
|
}) |
||||
|
|
||||
|
const validateJwcode = (rule, value, callback) => { |
||||
|
const isNumber = /^\d*$/.test(value); |
||||
|
if (!isNumber) { |
||||
|
callback(new Error('只能输入数字')); |
||||
|
} else { |
||||
|
callback(); |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
const rules = { |
||||
|
username: [ |
||||
|
{ required: true, message: '请输入用户名称', trigger: 'blur' } |
||||
|
], |
||||
|
jwcode: [ |
||||
|
{ required: true, message: '请输入精网号', trigger: 'blur' }, |
||||
|
{ validator: validateJwcode, trigger: 'blur' } |
||||
|
] |
||||
} |
} |
||||
|
|
||||
// 输入精网号处理 |
// 输入精网号处理 |
||||
const handleJwcodeInput = (value) => { |
const handleJwcodeInput = (value) => { |
||||
searchParams.value.jwcode = value.replace(/\D/g, '') |
|
||||
|
searchParams.value.jwcode = value.replace(/\D/g, '') |
||||
} |
} |
||||
|
|
||||
|
|
||||
const handleSizeChange = (val) => { |
|
||||
searchParams.value.pageSize = val |
|
||||
searchParams.value.pageNum = 1 |
|
||||
fetchWinList() |
|
||||
} |
|
||||
|
|
||||
const handleCurrentChange = (val) => { |
|
||||
searchParams.value.pageNum = val |
|
||||
fetchWinList() |
|
||||
} |
|
||||
|
const handleSizeChange = (val) => { |
||||
|
searchParams.value.pageSize = val |
||||
|
searchParams.value.pageNum = 1 |
||||
|
fetchWinList() |
||||
|
} |
||||
|
|
||||
|
const handleCurrentChange = (val) => { |
||||
|
searchParams.value.pageNum = val |
||||
|
fetchWinList() |
||||
|
} |
||||
|
|
||||
const cancel = () => { |
|
||||
centerDialogVisible.value = false; |
|
||||
addForm.value.resetFields(); |
|
||||
|
const cancel = () => { |
||||
|
centerDialogVisible.value = false; |
||||
|
addForm.value.resetFields(); |
||||
}; |
}; |
||||
|
|
||||
// 获取中奖列表 |
|
||||
const fetchWinList = async () => { |
|
||||
try { |
|
||||
const requestData = { |
|
||||
username: activityStone.searchUsername, |
|
||||
gradeId: "" , |
|
||||
jwcode: activityStone.searchJwcode, |
|
||||
pageNum: searchParams.value.pageNum, |
|
||||
pageSize: searchParams.value.pageSize |
|
||||
} |
|
||||
console.log('请求参数:', requestData) |
|
||||
const res = await getWinList(requestData) |
|
||||
if (res.code === 200) { |
|
||||
tableData.value = res.data.list |
|
||||
console.log('获取中奖列表成功:', tableData.value) |
|
||||
total.value = res.data.total |
|
||||
} |
|
||||
} catch (error) { |
|
||||
console.error('获取中奖列表失败:', error) |
|
||||
|
// 获取用户列表 |
||||
|
const fetchWinList = async () => { |
||||
|
try { |
||||
|
const requestData = { |
||||
|
jwcode: searchParams.value.jwcode, |
||||
|
pageNum: searchParams.value.pageNum, |
||||
|
pageSize: searchParams.value.pageSize |
||||
} |
} |
||||
} |
|
||||
|
|
||||
// 搜索 |
|
||||
const handleSearch = () => { |
|
||||
searchParams.value.pageNum = 1 |
|
||||
|
|
||||
// // 更新持久化值 |
|
||||
// activityStone.setSearchUsername(searchParams.value.username) |
|
||||
// activityStone.setSearchJwcode(searchParams.value.jwcode) |
|
||||
// winStone.setSearchgradeId(searchParams.value.gradeId) |
|
||||
|
|
||||
fetchWinList() |
|
||||
} |
|
||||
|
|
||||
|
|
||||
|
|
||||
// 重置搜索 |
|
||||
const handleReset = () => { |
|
||||
searchParams.value = { |
|
||||
pageNum: 1, |
|
||||
pageSize: 10, |
|
||||
username: '', |
|
||||
jwcode: '' |
|
||||
|
console.log('请求参数:', requestData) |
||||
|
const res = await getuserList(requestData) |
||||
|
console.log('响应数据:', res) |
||||
|
if (res.code === 200) { |
||||
|
tableData.value = res.data.list |
||||
|
console.log('获取用户列表成功:', tableData.value) |
||||
|
total.value = res.data.total |
||||
} |
} |
||||
|
|
||||
// 清空持久化值 |
|
||||
// activityStone.setSearchUsername('') |
|
||||
// activityStone.setSearchJwcode('') |
|
||||
// winStone.setSearchgradeId('') |
|
||||
|
|
||||
fetchWinList() |
|
||||
} |
|
||||
|
|
||||
|
|
||||
// 页面加载时获取数据 |
|
||||
onMounted(() => { |
|
||||
fetchWinList() |
|
||||
}) |
|
||||
|
|
||||
// onBeforeRouteLeave((to, from, next) => { |
|
||||
// // 判断是否跳转到 activity/index 页面 |
|
||||
// if (to.name !== 'zhongchouwinning') { |
|
||||
// // 清空 winStone 中的 gradeId |
|
||||
// winStone.setSearchgradeId('') |
|
||||
|
|
||||
// // 清空 activityStone 中的搜索值 |
|
||||
// activityStone.setSearchUsername('') |
|
||||
// activityStone.setSearchJwcode('') |
|
||||
// } |
|
||||
|
|
||||
// next() // 必须调用 next() |
|
||||
// }) |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
.gray-container { |
|
||||
width: 100%; |
|
||||
background-color: #ffffff; |
|
||||
padding: 20px; |
|
||||
box-sizing: border-box; |
|
||||
min-height: 80vh; |
|
||||
overflow-x: hidden; |
|
||||
} |
|
||||
|
|
||||
.search-bar { |
|
||||
margin-bottom: 20px; |
|
||||
|
} catch (error) { |
||||
|
console.error('获取用户列表失败:', error) |
||||
} |
} |
||||
|
|
||||
.prize-level-select { |
|
||||
width: 220px; |
|
||||
} |
|
||||
|
|
||||
.table-container { |
|
||||
height: 600px; |
|
||||
overflow-y: auto; |
|
||||
|
} |
||||
|
|
||||
|
// 搜索 |
||||
|
const handleSearch = () => { |
||||
|
searchParams.value.pageNum = 1 |
||||
|
|
||||
|
fetchWinList() |
||||
|
searchParams.value.jwcode = '' |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
// 重置搜索 |
||||
|
const handleReset = () => { |
||||
|
searchParams.value = { |
||||
|
pageNum: 1, |
||||
|
pageSize: 10, |
||||
|
username: '', |
||||
|
jwcode: '' |
||||
} |
} |
||||
</style> |
|
||||
|
fetchWinList() |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 页面加载时获取数据 |
||||
|
onMounted(() => { |
||||
|
fetchWinList() |
||||
|
}) |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
.gray-container { |
||||
|
width: 100%; |
||||
|
background-color: #ffffff; |
||||
|
padding: 20px; |
||||
|
box-sizing: border-box; |
||||
|
min-height: 80vh; |
||||
|
overflow-x: hidden; |
||||
|
} |
||||
|
|
||||
|
.search-bar { |
||||
|
margin-bottom: 20px; |
||||
|
} |
||||
|
|
||||
|
.prize-level-select { |
||||
|
width: 220px; |
||||
|
} |
||||
|
|
||||
|
.table-container { |
||||
|
height: 600px; |
||||
|
overflow-y: auto; |
||||
|
} |
||||
|
</style> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue