Browse Source

更改图标+删除奖品中多余的js+用户管理初版

lihuilin/feature-20250718094329-25周年庆后台
wangxiangwen4 4 weeks ago
parent
commit
c38a2a46ea
  1. 1
      activitylink/package-lock.json
  2. 1
      activitylink/package.json
  3. 22
      activitylink/src/api/manage/gift.js
  4. 5
      activitylink/src/router/index.js
  5. 13
      activitylink/src/views/zhongchou/index.vue
  6. 262
      activitylink/src/views/zhongchou/user/index.vue

1
activitylink/package-lock.json

@ -8,6 +8,7 @@
"name": "activitylink",
"version": "0.0.0",
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@vitejs/plugin-vue": "^4.6.2",
"axios": "^1.10.0",
"element-plus": "^2.10.4",

1
activitylink/package.json

@ -9,6 +9,7 @@
"preview": "vite preview"
},
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@vitejs/plugin-vue": "^4.6.2",
"axios": "^1.10.0",
"element-plus": "^2.10.4",

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

@ -23,26 +23,6 @@ export function deletePrize(id) {
//奖品分页查询
export function getPrizeList(params) {
return request({
url: '/admin/prize/add',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
}
// 奖品删除
export function deletePrize(id) {
return request({
url: '/admin/prize/delete',
method: 'post',
params: params
})
}
//奖品分页查询
export function getPrizeList(params) {
return request({
url: '/admin/prize/list',
method: 'post',
params: params
@ -178,4 +158,4 @@ export const importFixUsers = (file,gradeId) => {
'Content-Type': 'multipart/form-data'
}
});
};
};

5
activitylink/src/router/index.js

@ -28,6 +28,11 @@ const routes = [
component: () => import('../views/zhongchou/gift/index.vue'),
},
{
path: 'userManagement', // 注意这里不要加斜杠,表示相对路径
name: 'zhongchouuser',
component: () => import('../views/zhongchou/user/index.vue'),
},
{
path: 'giftManagement/importUsers', // 注意这里不要加斜杠,表示相对路径
name: 'importUsers',
component: () => import('../views/zhongchou/gift/importuser/index.vue'),

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

@ -5,7 +5,9 @@ import {
Location,
Menu as IconMenu,
Document,
Setting
Setting,
User,
HelpFilled
} from '@element-plus/icons-vue'
import { useRouter } from 'vue-router'
const router = useRouter()
@ -56,8 +58,13 @@ const handleClose = (key, keyPath) => {
</el-menu-item>
<el-menu-item index="/zhongchou/activityManagement">
<el-icon><setting /></el-icon>
<span>众筹活动</span>
<el-icon><HelpFilled /></el-icon>
<span>活动管理</span>
</el-menu-item>
<el-menu-item index="/zhongchou/userManagement">
<el-icon><User /></el-icon>
<span>用户管理</span>
</el-menu-item>
</el-menu>
</el-aside>

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

@ -0,0 +1,262 @@
<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="handleJingwangIdInput"
></el-input>
</el-form-item>
<el-form-item label="中奖等级">
<el-select
v-model="searchParams.gradeId"
placeholder="请选择"
class="prize-level-select"
style="width: 220px"
>
<el-option label="全部" value=""></el-option>
<el-option
v-for="item in gradeOptions"
:key="item.id"
:label="item.gradeName"
:value="item.id"
>
</el-option>
</el-select>
</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="handleExport">导出数据</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>
</div>
</div>
<!-- 分页组件 -->
<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-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: "",
gradeId: "",
jwcode: ""
})
//
const gradeOptions = ref([])
//
const tableData = ref([])
const total = ref(0)
//
const fetchWinLevelList = async () => {
try {
const res = await getWinLevelList()
if (res.code === 200) {
gradeOptions.value = res.data
}
} catch (error) {
console.error('获取中奖等级列表失败:', error)
}
}
const handleSizeChange = (val) => {
searchParams.value.pageSize = val
searchParams.value.pageNum = 1
fetchWinList()
}
const handleCurrentChange = (val) => {
searchParams.value.pageNum = val
fetchWinList()
}
//
const fetchWinList = async () => {
try {
const requestData = {
username: activityStone.searchUsername,
gradeId: winStone.searchgradeId,
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 handleSearch = () => {
searchParams.value.pageNum = 1
//
activityStone.setSearchUsername(searchParams.value.username)
activityStone.setSearchJwcode(searchParams.value.jwcode)
winStone.setSearchgradeId(searchParams.value.gradeId)
fetchWinList()
}
//
const handleExport = async () => {
try {
const username = activityStone.searchUsername;
const jwcode = activityStone.searchJwcode;
const gradeId = winStone.searchgradeId;
//
const exportData = {
gradeId,
username,
jwcode
};
// blob
const response = await exportWinExcel(exportData);
// Blob
const blob = new Blob([response], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
});
//
const downloadUrl = window.URL.createObjectURL(blob);
// <a>
const link = document.createElement('a');
link.href = downloadUrl;
link.setAttribute('download', '中奖用户.xlsx'); // .xlsx
document.body.appendChild(link);
link.click();
//
link.remove();
window.URL.revokeObjectURL(downloadUrl);
} catch (error) {
console.error('导出数据失败:', error);
ElMessage.error('导出数据失败');
}
};
//
const handleReset = () => {
searchParams.value = {
pageNum: 1,
pageSize: 10,
username: '',
gradeId: '',
jwcode: ''
}
//
activityStone.setSearchUsername('')
activityStone.setSearchJwcode('')
winStone.setSearchgradeId('')
fetchWinList()
}
//
const handleJingwangIdInput = (value) => {
searchParams.value.jwcode = value.replace(/\D/g, '')
}
//
onMounted(() => {
fetchWinLevelList()
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;
}
.prize-level-select {
width: 220px;
}
.table-container {
height: 600px;
overflow-y: auto;
}
</style>
Loading…
Cancel
Save