Browse Source

登陆Token+用户

lihuilin/feature-20250718094329-25周年庆后台
wangxiangwen4 4 weeks ago
parent
commit
8a7df65703
  1. 8
      activitylink/src/api/manage/login.js
  2. 13
      activitylink/src/utils/auth.js
  3. 25
      activitylink/src/utils/request.js
  4. 3
      activitylink/src/views/homePage.vue
  5. 6
      activitylink/src/views/zhongchou/activity/detail/index.vue
  6. 19
      activitylink/src/views/zhongchou/index.vue
  7. 136
      activitylink/src/views/zhongchou/user/index.vue

8
activitylink/src/api/manage/login.js

@ -12,4 +12,12 @@ export function adminlogin(data) {
method: 'post',
data
})
}
export function adminlogout(data) {
return request({
url: '/admin/user/logout', // 替换为你的实际接口地址
method: 'post',
data
})
}

13
activitylink/src/utils/auth.js

@ -0,0 +1,13 @@
const TOKEN_KEY = 'token'
export function setToken(token) {
localStorage.setItem(TOKEN_KEY, token)
}
export function getToken() {
return localStorage.getItem(TOKEN_KEY)
}
export function removeToken() {
localStorage.removeItem(TOKEN_KEY)
}

25
activitylink/src/utils/request.js

@ -1,22 +1,29 @@
import axios from 'axios'
import { ElMessage } from 'element-plus'
import { getToken } from '@/utils/auth'
// 创建基础实例
const service = axios.create({
baseURL: import.meta.env.VITE_APP_BASE_API,
timeout: 10000
})
// 请求拦截器(简化版)
service.interceptors.request.use(config => {
// 添加token逻辑(如果存在)
const token = localStorage.getItem('token')
if (token) {
config.headers['Authorization'] = 'Bearer ' + token
// 请求拦截器
service.interceptors.request.use(
(config) => {
const token = getToken()
if (token) {
// 在请求头中添加 token,通常为 Bearer 模式
config.headers['token'] = `${token}`
}
return config
},
(error) => {
// 请求错误处理
console.error('请求错误:', error)
return Promise.reject(error)
}
return config
})
)
// 响应拦截器(简化版)
service.interceptors.response.use(

3
activitylink/src/views/homePage.vue

@ -24,6 +24,7 @@ import { ref } from "vue";
import { useRouter } from "vue-router";
import { ElMessage } from 'element-plus'
import { adminlogin } from '@/api/manage/login'
// import { setToken } from '@/api/utils/auth'
const router = useRouter();
const username = ref("");
const password = ref("");
@ -37,7 +38,7 @@ const loginHandler = async () => {
// router.push('/zhongchou/mainimg')
if (response.code === 200 ) {
const token = response.data.token
// console.log(token)
console.log(token)
localStorage.setItem('token', token)
ElMessage.success('登录成功,欢迎您使用本系统')
router.push('/zhongchou/mainimg')

6
activitylink/src/views/zhongchou/activity/detail/index.vue

@ -49,7 +49,7 @@
<el-table-column prop="username" label="姓名" width="300" align="center"></el-table-column>
<el-table-column prop="jwcode" label="精网号" width="300" align="center"></el-table-column>
<el-table-column prop="text" label="参与市场" width="300" align="center"></el-table-column>
<el-table-column prop="joinTime" label="参与时间" align="center"></el-table-column>
<el-table-column prop="joinTime" label="参与时间" align="center" :formatter="formatJoinTime"></el-table-column>
</el-table>
</div>
</div>
@ -88,6 +88,10 @@ const marketOneLabel = ref('')
const marketTwoLabel = ref('')
const marketList = ref([])
const formatJoinTime = (row, column, cellValue) => {
if (!cellValue) return '--'
return cellValue.replace('T', ' ')
}
//
const fetchMarketList = async () => {
try {

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

@ -10,6 +10,7 @@ import {
HelpFilled
} from '@element-plus/icons-vue'
import { ElMessageBox, ElMessage } from 'element-plus';
import { adminlogout } from '@/api/manage/login'
import { useRouter } from 'vue-router'
const router = useRouter()
const handleOpen = (key, keyPath) => {
@ -26,10 +27,24 @@ const handleLogout = () => {
type: 'warning'
}).then(() => {
//
router.push('/homePage');
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();
});
};
</script>
@ -80,7 +95,7 @@ const handleLogout = () => {
<span>用户管理</span>
</el-menu-item>
<el-menu-item @click="handleLogout">
<el-menu-item index="/zhongchou/logout" @click="handleLogout">
<el-icon><Setting /></el-icon>
<span>退出登录</span>
</el-menu-item>

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

@ -11,7 +11,7 @@
<el-input
v-model="searchParams.jwcode"
placeholder="请输入精网号"
@input="handleJingwangIdInput"
@input="handleJwcodeInput"
></el-input>
</el-form-item>
<el-form-item>
@ -33,9 +33,25 @@
<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>
</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
@ -48,6 +64,32 @@
:total="total"
>
</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>
@ -68,12 +110,89 @@
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;
};
//
const openDeleteDialog = (row) => {
// activityToDelete.value = row.id
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
}
const addUser = () => {
console.log("添加用户")
centerDialogVisible.value = false;
};
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) => {
searchParams.value.jwcode = value.replace(/\D/g, '')
}
const handleSizeChange = (val) => {
searchParams.value.pageSize = val
@ -85,6 +204,12 @@
searchParams.value.pageNum = val
fetchWinList()
}
const cancel = () => {
centerDialogVisible.value = false;
addForm.value.resetFields();
};
//
const fetchWinList = async () => {
try {
@ -127,7 +252,6 @@
pageNum: 1,
pageSize: 10,
username: '',
gradeId: '',
jwcode: ''
}
@ -139,10 +263,6 @@
fetchWinList()
}
//
const handleJingwangIdInput = (value) => {
searchParams.value.jwcode = value.replace(/\D/g, '')
}
//
onMounted(() => {

Loading…
Cancel
Save