Browse Source

用户管理

lihuilin/feature-20250718094329-25周年庆后台
wangxiangwen4 4 weeks ago
parent
commit
6aa572ce7f
  1. 25
      activitylink/src/api/manage/user.js
  2. 10
      activitylink/src/router/index.js
  3. 7
      activitylink/src/utils/request.js
  4. 21
      activitylink/src/views/homePage.vue
  5. 2
      activitylink/src/views/zhongchou/activity/index.vue
  6. 61
      activitylink/src/views/zhongchou/index.vue
  7. 3
      activitylink/src/views/zhongchou/level/index.vue
  8. 122
      activitylink/src/views/zhongchou/user/index.vue

25
activitylink/src/api/manage/user.js

@ -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
  })
}

10
activitylink/src/router/index.js

@ -1,4 +1,5 @@
import { createRouter, createWebHistory } from 'vue-router'
import { ElMessageBox, ElMessage } from 'element-plus';
const routes = [
{
path: '/',
@ -75,5 +76,14 @@ const router = createRouter({
history: createWebHistory('/testBack/'),
routes
})
router.beforeEach((to, from, next) => {
const token = localStorage.getItem("token");
if (to.name != "homePage" && !token ) {
ElMessage.error("请先登录!");
next('/homePage');
}
next();
})
// 导出
export default router

7
activitylink/src/utils/request.js

@ -1,8 +1,11 @@
import axios from 'axios'
import { ElMessage } from 'element-plus'
import { getToken } from '@/utils/auth'
import { getToken , removeToken} from '@/utils/auth'
// import { useRouter } from "vue-router";
import router from '@/router'
// 创建基础实例
// const router = useRouter()
const service = axios.create({
baseURL: import.meta.env.VITE_APP_BASE_API,
timeout: 10000
@ -25,7 +28,7 @@ service.interceptors.request.use(
}
)
// 响应拦截器(简化版)
// 响应拦截器
service.interceptors.response.use(
response => response.data,
error => {

21
activitylink/src/views/homePage.vue

@ -3,7 +3,7 @@
<div class="login-container2">
<div class="login-box">
<h2>登录</h2>
<form @submit.prevent="login">
<form @submit.prevent="login" class="form-container">
<div class="input-group">
<label for="username">用户名</label>
<input type="text" id="username" v-model="username" required>
@ -12,7 +12,10 @@
<label for="password">密码</label>
<input type="password" id="password" v-model="password" required>
</div>
<button type="submit" @click="loginHandler">登录</button>
<div class="button-group">
<button type="submit" @click="loginHandler">登录</button>
<!-- <button type="button" @click="registerHandler">注册</button> -->
</div>
</form>
</div>
</div>
@ -36,7 +39,9 @@ const loginHandler = async () => {
password: password.value
})
// router.push('/zhongchou/mainimg')
if (response.code === 200 ) {
console.log(response)
if (response.code == 200 ) {
const token = response.data.token
console.log(token)
localStorage.setItem('token', token)
@ -116,6 +121,16 @@ h2 {
border-radius: 4px;
}
.form-container .button-group {
display: flex;
justify-content: space-between; /* 平分空间 */
gap: 1rem; /* 按钮之间的间距 */
}
.form-container .button-group button {
flex: 1; /* 让按钮自动扩展以填充容器 */
}
button {
width: 100%;
padding: 0.75rem;

2
activitylink/src/views/zhongchou/activity/index.vue

@ -190,8 +190,10 @@ const getActivityId = () => {
const fetchMarketList = async () => {
try {
const response = await getMarket()
console.log('市场列表:', response.data)
if (response.code === 200) {
marketList.value = response.data
console.log('市场列表:', response.data)
} else {
console.error('获取市场列表失败:', response.message)
}

61
activitylink/src/views/zhongchou/index.vue

@ -20,33 +20,34 @@ const handleClose = (key, keyPath) => {
// console.log(':', key, keyPath)
}
const handleLogout = () => {
ElMessageBox.confirm('确定要退出登录吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
//
const response = adminlogout(
{
token: localStorage.getItem('token')
}
)
if(response.code === 200)
{
router.push('/homePage');
localStorage.removeItem('token');
ElMessage.success('退出成功')
}
else {
ElMessage.error('退出失败')
}
}).catch(() => {
//
ElMessage.info('已取消退出');
router.back();
});
};
// const handleLogout = () => {
// ElMessageBox.confirm('退', '', {
// confirmButtonText: '',
// cancelButtonText: '',
// type: 'warning'
// }).then(async () => {
// try {
// const response = await adminlogout({
// token: localStorage.getItem('token')
// });
// console.log('response:', response);
// // 访 response.data.code
// if (response.code == 200) {
// ElMessage.success('退');
// localStorage.removeItem('token');
// router.push('/homePage');
// } else {
// ElMessage.error(response.data.message || '退');
// }
// } catch (error) {
// ElMessage.error('');
// console.error('退:', error);
// }
// }).catch(() => {
// router.back()
// ElMessage.info('退');
// });
// };
</script>
<template>
@ -92,13 +93,9 @@ const handleLogout = () => {
<el-menu-item index="/zhongchou/userManagement">
<el-icon><User /></el-icon>
<span>用户管理</span>
<span>管理员管理</span>
</el-menu-item>
<el-menu-item index="/zhongchou/logout" @click="handleLogout">
<el-icon><Setting /></el-icon>
<span>退出登录</span>
</el-menu-item>
</el-menu>
</el-aside>

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

@ -137,8 +137,9 @@ const getLevels = async () => {
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize
})
console.log(res)
if (res.code === 200) {
console.log(res.data)
tableData.value = res.data.list
pagination.value.total = res.data.total
} else {

122
activitylink/src/views/zhongchou/user/index.vue

@ -4,9 +4,6 @@
<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"
@ -28,11 +25,10 @@
<!-- 表格 -->
<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 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>
@ -73,9 +69,6 @@
@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>
@ -95,24 +88,17 @@
<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 { getuserList , deleteuserByjwcode , adduserByjwcode } from '@/api/manage/user'
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: '',
}
);
@ -125,43 +111,47 @@
centerDialogVisible.value = true;
};
const deleteJwcode = ref('')
//
const openDeleteDialog = (row) => {
// activityToDelete.value = row.id
deleteJwcode.value = row.jwcode
deleteConfirmVisible.value = true
}
//
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()
deleteConfirmVisible.value = false
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
}
}
const addUser = () => {
console.log("添加用户")
centerDialogVisible.value = false;
const addUser = async () => {
try {
const response = await adduserByjwcode({
jwcode: JwUser.value.jwcode
});
if (response.code === 200) {
ElMessage.success('添加成功');
centerDialogVisible.value = false;
fetchWinList(); //
} else {
ElMessage.error(response.message || '添加失败');
}
} catch (error) {
ElMessage.error('添加请求失败,请稍后再试');
console.error('添加用户错误:', error);
}
};
const JwUser = ref({
@ -210,25 +200,24 @@ const handleJwcodeInput = (value) => {
addForm.value.resetFields();
};
//
//
const fetchWinList = async () => {
try {
const requestData = {
username: activityStone.searchUsername,
gradeId: "" ,
jwcode: activityStone.searchJwcode,
jwcode: searchParams.value.jwcode,
pageNum: searchParams.value.pageNum,
pageSize: searchParams.value.pageSize
}
console.log('请求参数:', requestData)
const res = await getWinList(requestData)
const res = await getuserList(requestData)
console.log('响应数据:', res)
if (res.code === 200) {
tableData.value = res.data.list
console.log('获取中奖列表成功:', tableData.value)
console.log('获取用户列表成功:', tableData.value)
total.value = res.data.total
}
} catch (error) {
console.error('获取中奖列表失败:', error)
console.error('获取用户列表失败:', error)
}
}
@ -236,12 +225,8 @@ const handleJwcodeInput = (value) => {
const handleSearch = () => {
searchParams.value.pageNum = 1
// //
// activityStone.setSearchUsername(searchParams.value.username)
// activityStone.setSearchJwcode(searchParams.value.jwcode)
// winStone.setSearchgradeId(searchParams.value.gradeId)
fetchWinList()
searchParams.value.jwcode = ''
}
@ -254,12 +239,6 @@ const handleJwcodeInput = (value) => {
username: '',
jwcode: ''
}
//
// activityStone.setSearchUsername('')
// activityStone.setSearchJwcode('')
// winStone.setSearchgradeId('')
fetchWinList()
}
@ -269,19 +248,6 @@ const handleJwcodeInput = (value) => {
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>

Loading…
Cancel
Save