金币系统前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

399 lines
11 KiB

<script setup>
import { ref, onMounted, reactive, computed } from 'vue'
import ElementPlus from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios'
import moment from 'moment'
import API from '../../api/index.js'
import _ from 'lodash'
import request from '@/util/http'
//这是获取用户信息的接口
const adminData = ref({})
const getAdminData = async function () {
try {
const result = await request({
url: '/admin/userinfo',
data: {}
})
adminData.value = result
addObj.value.adminId = adminData.value.adminId
console.log('请求成功', result)
console.log('用户信息', adminData.value)
} catch (error) {
console.log('请求失败', error)
}
}
//活动表格数据
const tableData = ref([])
//分页总条目
const total = ref(100)
// 搜索对象时间
const getTime = ref([])
// 搜索对象活动
const activity = ref({})
//搜索对象
const getObj = ref({
pageNum: 1,
pageSize: 10
})
// 添加对象
const addObj = ref({
add: ''
})
// 删除对象
const delObj = ref({})
// 搜索方法
const get = async function (val) {
try {
// 搜索参数页码赋值
if (typeof val === 'number') {
getObj.value.pageNum = val
}
// 搜索参数时间赋值
if (getTime.value.length === 2) {
activity.value.startDate = getTime.value[0]
activity.value.endDate = getTime.value[1]
} else {
activity.value.startDate = null
activity.value.endDate = null
}
console.log('搜索参数', getObj.value)
// 发送POST请求
const result = await request({
url: '/recharge/activity/select',
method: 'post',
data: {
pageNum: getObj.value.pageNum,
pageSize: getObj.value.pageSize,
activity: {
...activity.value,
activityName: activity.value.activityName,
status: activity.value.status
}
}
})
// 将响应结果存储到响应式数据中
console.log('请求成功', result)
// 存储表格数据
tableData.value = result.data.list
console.log('tableData', tableData.value)
// 存储分页总条目
total.value = result.data.total
console.log('total', total.value)
} catch (error) {
console.log('请求失败', error)
ElMessage.error('请求失败')
}
}
// 搜索
const search = function () {
getObj.value.pageNum = 1
get()
}
// 重置
const reset = function () {
getObj.value = {
pageNum: 1,
pageSize: 10
}
getTime.value = []
activity.value = {}
}
// 挂载
onMounted(async function () {
await getAdminData()
get()
})
// 定义控制对话框显示的变量,并初始化为 false
const addActivityVisible = ref(false)
// 定义 addActivity 方法
const addActivity = () => {
console.log('点击了新增活动按钮');
// 更新 addActivityVisible 的值为 true,显示对话框
addActivityVisible.value = true;
};
// 关闭对话框的方法
const closeAddActivityVisible = () => {
addActivityVisible.value = false;
};
// 处理每页显示数量变化
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
// 处理当前页码变化
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
// 定义提交方法
const throttledAdd = async () => {
try {
// 过滤掉 'add' 字段
const { add, ...validData } = addObj.value;
// 发送 POST 请求提交表单数据
const result = await request({
url: '/recharge/activity/add', // 假设这是新增活动的接口
method: 'post',
data: validData
})
console.log('新增活动成功', result)
ElMessage.success('新增活动成功')
// 关闭对话框
closeAddActivityVisible()
// 重新获取数据
get()
} catch (error) {
console.log('新增活动失败', error)
ElMessage.error('新增活动失败')
}
}
</script>
<template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px">
<div class="head-card">
<div class="head-card-element">
<el-text class="mx-1" size="large">活动名称</el-text>
<el-input
v-model="activity.activityName"
style="width: 240px"
placeholder="请输入活动名称"
clearable
/>
</div>
<div class="head-card-element">
<el-text class="mx-1" size="large">添加时间:</el-text>
<el-date-picker
v-model="getTime"
type="datetimerange"
range-separator="至"
start-placeholder="起始时间"
end-placeholder="结束时间"
/>
</div>
<div class="head-card-btn">
<el-button @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
</div>
</div>
</el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card>
<div>
<el-button
plain
@click="addActivity()"
style="color: #048efb; border: 1px solid #048efb"
>新增活动</el-button
>
</div>
<div>
<el-table :data="tableData" :height="tableHeight" style="width: 100%">
<el-table-column
type="index"
label="序号"
width="100px"
fixed="left"
>
<template #default="scope">
<span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
</template>
</el-table-column>
<el-table-column prop="activityName" label="活动名称" />
<el-table-column prop="startTime" label="开始时间">
<template #default="scope">
{{ moment(scope.row.startTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column prop="endTime" label="结束时间">
<template #default="scope">
{{ moment(scope.row.endTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column prop="rechargeRatio" label="免费兑换比">
<template #default="scope">
<span>{{ scope.row.rechargeRatio }}:1</span>
</template>
</el-table-column>
<el-table-column prop="status" label="状态">
<template #default="scope">
<span v-if="scope.row.status === 1">
<div class="status">
<span class="green-dot"></span>
<span>进行中</span>
</div>
</span>
<span v-if="scope.row.status === 0">
<div class="status">
<span class="red-dot"></span>
<span>未开始</span>
</div>
</span>
<span v-if="scope.row.status === 2">
<div class="status">
<span class="grey-dot"></span>
<span>已结束</span>
</div>
</span>
</template>
</el-table-column>
<el-table-column prop="name" label="添加人" />
<el-table-column prop="createTime" label="添加时间">
<template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column prop="operation" label="操作">
<template #default="scope">
<el-popconfirm
title="确定将此条活动删除吗?"
@confirm="delConfirm"
>
<template #reference>
<el-button type="primary" text @click="del(scope.row)">
删除
</el-button>
</template>
<template #actions="{ confirm, cancel }">
<el-button size="small" @click="cancel">取消</el-button>
<el-button type="primary" size="small" @click="confirm">
确定
</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页 -->
<div class="pagination" style="margin-top: 20px">
<el-pagination
background
:page-size="getObj.pageSize"
:page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div>
</el-card>
</el-col>
</el-row>
<el-dialog
v-model="addActivityVisible"
title="新增活动"
width="500"
:before-close="closeAddActivityVisible"
:close-on-click-modal="false"
>
<template #footer>
<el-form
ref="Ref"
:model="addObj"
:rules="rules"
label-width="auto"
style="max-width: 600px"
>
<el-form-item prop="activityName" label="活动名称:">
<el-input
v-model="addObj.activityName"
placeholder="请输入活动名称"
style="width: 220px"
/>
</el-form-item>
<el-form-item prop="freeGold" label="免费金币:">
<el-radio-group v-model="addObj.freeGold">
<el-radio value="0" @change="addObj.rechargeRatio = '0'"
>无赠送</el-radio
>
<el-radio value="1">有赠送</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="rechargeRatio" label="免费金币兑换比:">
<el-input
v-model="addObj.rechargeRatio"
:disabled="addObj.freeGold === '0' ? true : false"
placeholder="请输入"
style="width: 80px"
/>:1
<div style="color: grey">
(提示:当前规则每{{ addObj.rechargeRatio }}新币可兑换1免费金币)
</div>
</el-form-item>
<el-form-item prop="startTime" label="开始时间:">
<el-date-picker
v-model="addObj.startTime"
type="datetime"
placeholder="请选择开始时间"
@change="handleStartTimeChange"
/>
</el-form-item>
<el-form-item prop="endTime" label="结束时间:">
<el-date-picker
v-model="addObj.endTime"
type="datetime"
placeholder="请选择结束时间"
/>
</el-form-item>
<el-form-item label="添加人:">
<el-input v-model="adminData.name" disabled style="width: 220px" />
</el-form-item>
</el-form>
<div class="dialog-footer">
<el-button @click="closeAddActivityVisible">取消</el-button>
<el-button type="primary" @click="throttledAdd"> 提交 </el-button>
</div>
</template>
</el-dialog>
</template>
<style scoped>
.pagination {
display: flex;
}
.status {
display: flex;
}
.head-card {
display: flex;
}
.head-card-element {
margin-right: 20px;
}
.head-card-btn {
margin-left: auto;
}
</style>