|
@ -1,8 +1,8 @@ |
|
|
<template> |
|
|
<template> |
|
|
<!-- 1代表活动进行中 0代表活动已结束 --> |
|
|
|
|
|
|
|
|
<!-- 1代表活动进行中 0代表活动已结束 --> |
|
|
|
|
|
|
|
|
<el-card style="margin-top:50px; ; min-height: 90vh; max-height: 90vh; "> |
|
|
|
|
|
<!-- <div style="width: 100%;"> --> |
|
|
|
|
|
|
|
|
<el-card style="margin-top:50px; ; min-height: 90vh; max-height: 90vh; "> |
|
|
|
|
|
<!-- <div style="width: 100%;"> --> |
|
|
<!-- 活动管理 --> |
|
|
<!-- 活动管理 --> |
|
|
<!-- 这里可以添加等级管理的具体内容 --> |
|
|
<!-- 这里可以添加等级管理的具体内容 --> |
|
|
<div class="gray-container"> |
|
|
<div class="gray-container"> |
|
@ -13,158 +13,186 @@ |
|
|
<!-- 其他内容区域 --> |
|
|
<!-- 其他内容区域 --> |
|
|
<div class="content-area"> |
|
|
<div class="content-area"> |
|
|
<el-table :data="currentPageData" style="width: auto" :row-style="{ height: '60px' }"> |
|
|
<el-table :data="currentPageData" style="width: auto" :row-style="{ height: '60px' }"> |
|
|
<el-table-column prop="name" label="活动名称"></el-table-column> |
|
|
|
|
|
<el-table-column prop="stock1" label="股票一"></el-table-column> |
|
|
|
|
|
<el-table-column prop="stock2" label="股票二"></el-table-column> |
|
|
|
|
|
|
|
|
|
|
|
<el-table-column label="数据统计"> |
|
|
|
|
|
<template #default="{ $index }"> |
|
|
|
|
|
<a href="#" style="color: red;" @click.prevent="goToDetail">查看详情</a> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
|
|
|
|
|
|
<el-table-column label="设置数据"> |
|
|
|
|
|
<template #default="{ $index }"> |
|
|
|
|
|
<a href="#" style="color: red;" @click.prevent="goToSet">设置</a> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
|
|
|
|
|
|
<el-table-column label="状态"> |
|
|
|
|
|
<template #default="{ row }"> |
|
|
|
|
|
<el-switch |
|
|
|
|
|
v-model="row.status" |
|
|
|
|
|
:active-value="'1'" |
|
|
|
|
|
:inactive-value="'0'" |
|
|
|
|
|
active-color="#13ce66" |
|
|
|
|
|
inactive-color="#ff4949" |
|
|
|
|
|
/> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
</el-table> |
|
|
|
|
|
|
|
|
|
|
|
<el-dialog |
|
|
|
|
|
v-model="centerDialogVisible" |
|
|
|
|
|
title="添加活动" |
|
|
|
|
|
width="500" |
|
|
|
|
|
align-center |
|
|
|
|
|
@closed="cancel" |
|
|
|
|
|
> |
|
|
|
|
|
|
|
|
<el-table-column prop="activityName" label="活动名称"></el-table-column> |
|
|
|
|
|
<el-table-column prop="marketOne" label="股票一"></el-table-column> |
|
|
|
|
|
<el-table-column prop="marketTwo" label="股票二"></el-table-column> |
|
|
|
|
|
|
|
|
|
|
|
<!-- ✅ 新增两列 --> |
|
|
|
|
|
<el-table-column prop="startTime" label="开始时间"></el-table-column> |
|
|
|
|
|
<el-table-column prop="endTime" label="结束时间"></el-table-column> |
|
|
|
|
|
|
|
|
|
|
|
<el-table-column label="数据统计"> |
|
|
|
|
|
<template #default="scope"> |
|
|
|
|
|
<a href="#" style="color: red;" @click.prevent="goToDetail(scope.row)">查看详情</a> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
|
|
|
|
|
|
<el-table-column label="设置数据"> |
|
|
|
|
|
<template #default="{ $index }"> |
|
|
|
|
|
<a href="#" style="color: red;" @click.prevent="goToSet">设置</a> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
|
|
|
|
|
|
<el-table-column label="状态"> |
|
|
|
|
|
<template #default="{ row }"> |
|
|
|
|
|
<el-switch |
|
|
|
|
|
v-model="row.status" |
|
|
|
|
|
:active-value="1" |
|
|
|
|
|
:inactive-value="0" |
|
|
|
|
|
active-color="#13ce66" |
|
|
|
|
|
inactive-color="#ff4949" |
|
|
|
|
|
@change="() => updateStatus(row)" |
|
|
|
|
|
/> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
</el-table> |
|
|
|
|
|
|
|
|
|
|
|
<el-dialog |
|
|
|
|
|
v-model="centerDialogVisible" |
|
|
|
|
|
title="添加活动" |
|
|
|
|
|
width="500" |
|
|
|
|
|
align-center |
|
|
|
|
|
@closed="cancel" |
|
|
|
|
|
> |
|
|
<el-form ref="addForm" :model="activity" label-width="80px"> |
|
|
<el-form ref="addForm" :model="activity" label-width="80px"> |
|
|
<el-form-item label="活动名称" prop="name"> |
|
|
|
|
|
<el-input v-model="activity.name" placeholder="请输入活动名称" /> |
|
|
|
|
|
|
|
|
<el-form-item label="活动名称" prop="activityName"> |
|
|
|
|
|
<el-input v-model="activity.activityName" placeholder="请输入活动名称" /> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item label="股票一" prop="stock1"> |
|
|
|
|
|
<el-input v-model="activity.stock1" placeholder="请输入股票一" /> |
|
|
|
|
|
|
|
|
<el-form-item label="股票一" prop="marketOne"> |
|
|
|
|
|
<el-input v-model="activity.marketOne" placeholder="请输入股票一" /> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item label="股票二" prop="stock2"> |
|
|
|
|
|
<el-input v-model="activity.stock2" placeholder="请输入股票二" /> |
|
|
|
|
|
|
|
|
<el-form-item label="股票二" prop="marketTwo"> |
|
|
|
|
|
<el-input v-model="activity.marketTwo" placeholder="请输入股票二" /> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
<el-form-item label="活动状态" prop="status"> |
|
|
<el-form-item label="活动状态" prop="status"> |
|
|
<el-select v-model="activity.status" placeholder="请选择活动状态"> |
|
|
<el-select v-model="activity.status" placeholder="请选择活动状态"> |
|
|
<el-option label="进行中" value="1" v-model="activity.status"></el-option> |
|
|
|
|
|
<el-option label="已结束" value="0" v-model="activity.status"></el-option> |
|
|
|
|
|
|
|
|
<el-option label="启用" value="1" /> |
|
|
|
|
|
<el-option label="禁用" value="0" /> |
|
|
</el-select> |
|
|
</el-select> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
|
|
<!-- 新增:开始时间 --> |
|
|
|
|
|
<el-form-item label="开始时间" prop="startTime"> |
|
|
|
|
|
<el-date-picker |
|
|
|
|
|
v-model="activity.startTime" |
|
|
|
|
|
type="datetime" |
|
|
|
|
|
placeholder="请选择开始时间" |
|
|
|
|
|
value-format="YYYY-MM-DD" |
|
|
|
|
|
format="YYYY-MM-DD" |
|
|
|
|
|
style="width: 100%" |
|
|
|
|
|
/> |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
|
|
<!-- 新增:结束时间 --> |
|
|
|
|
|
<el-form-item label="结束时间" prop="endTime"> |
|
|
|
|
|
<el-date-picker |
|
|
|
|
|
v-model="activity.endTime" |
|
|
|
|
|
type="datetime" |
|
|
|
|
|
placeholder="请选择结束时间" |
|
|
|
|
|
value-format="YYYY-MM-DD" |
|
|
|
|
|
format="YYYY-MM-DD" |
|
|
|
|
|
style="width: 100%" |
|
|
|
|
|
/> |
|
|
|
|
|
</el-form-item> |
|
|
</el-form> |
|
|
</el-form> |
|
|
<template #footer> |
|
|
<template #footer> |
|
|
<div class="dialog-footer"> |
|
|
|
|
|
<el-button @click="cancel">取消</el-button> |
|
|
|
|
|
<el-button type="primary" @click="addActivity"> |
|
|
|
|
|
提交 |
|
|
|
|
|
</el-button> |
|
|
|
|
|
</div> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-dialog> |
|
|
|
|
|
|
|
|
<div class="dialog-footer"> |
|
|
|
|
|
<el-button @click="cancel">取消</el-button> |
|
|
|
|
|
<el-button type="primary" @click="addActivity"> |
|
|
|
|
|
提交 |
|
|
|
|
|
</el-button> |
|
|
|
|
|
</div> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-dialog> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<!-- 分页控件:移动到这里 --> |
|
|
|
|
|
<el-pagination |
|
|
|
|
|
@size-change="handleSizeChange" |
|
|
|
|
|
@current-change="handleCurrentChange" |
|
|
|
|
|
:current-page="currentPage" |
|
|
|
|
|
:page-sizes="[10, 20, 30, 50]" |
|
|
|
|
|
:page-size="pageSize" |
|
|
|
|
|
layout="total, sizes, prev, pager, next, jumper" |
|
|
|
|
|
:total="tableData.length" |
|
|
|
|
|
style="margin-top: 20px; text-align: center;" |
|
|
|
|
|
/> |
|
|
|
|
|
<!-- </div> --> |
|
|
|
|
|
</el-card> |
|
|
|
|
|
|
|
|
<!-- 分页控件:移动到这里 --> |
|
|
|
|
|
<el-pagination |
|
|
|
|
|
@size-change="handleSizeChange" |
|
|
|
|
|
@current-change="handleCurrentChange" |
|
|
|
|
|
:current-page="currentPage" |
|
|
|
|
|
:page-sizes="[10, 20, 30, 50]" |
|
|
|
|
|
:page-size="pageSize" |
|
|
|
|
|
layout="total, sizes, prev, pager, next, jumper" |
|
|
|
|
|
:total="tableData.length" |
|
|
|
|
|
style="margin-top: 20px; text-align: center;" |
|
|
|
|
|
/> |
|
|
|
|
|
<!-- </div> --> |
|
|
|
|
|
</el-card> |
|
|
<router-view></router-view> |
|
|
<router-view></router-view> |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
|
|
|
<script setup> |
|
|
<script setup> |
|
|
import { ref, computed } from 'vue'; |
|
|
|
|
|
|
|
|
import { ref, computed, onMounted } from 'vue'; |
|
|
import { useRouter } from 'vue-router'; |
|
|
import { useRouter } from 'vue-router'; |
|
|
|
|
|
|
|
|
|
|
|
import { getActivityList , changeStatusbyId ,addActivityandtime} from '@/api/manage/activity'; |
|
|
|
|
|
import { ElMessage } from 'element-plus'; |
|
|
|
|
|
import { useactivitytone } from '@/stone/activityStone'; |
|
|
const router = useRouter(); |
|
|
const router = useRouter(); |
|
|
const centerDialogVisible = ref(false) |
|
|
|
|
|
// 模拟表格数据(支持状态) |
|
|
|
|
|
const tableData = ref([ |
|
|
|
|
|
{ name: '周年庆众筹', stock1: '美股', stock2: '港股', status: '0' }, |
|
|
|
|
|
{ name: '中秋众筹', stock1: 'A股', stock2: '美股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
{ name: '国庆众筹', stock1: '港股', stock2: '日股', status: '0' }, |
|
|
|
|
|
// ... 其他数据 ... |
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
|
|
//取消添加 |
|
|
|
|
|
|
|
|
const centerDialogVisible = ref(false); |
|
|
|
|
|
|
|
|
|
|
|
// 表格数据(使用响应式 ref) |
|
|
|
|
|
const tableData = ref([]); |
|
|
|
|
|
const activityStone = useactivitytone(); |
|
|
|
|
|
// 取消添加 |
|
|
const cancel = () => { |
|
|
const cancel = () => { |
|
|
centerDialogVisible.value = false |
|
|
|
|
|
activity.value ={ |
|
|
|
|
|
name: '', |
|
|
|
|
|
stock1: '', |
|
|
|
|
|
stock2: '', |
|
|
|
|
|
status: '' |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
centerDialogVisible.value = false; |
|
|
|
|
|
resetForm(); |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
const addActivityShow = () => { |
|
|
|
|
|
centerDialogVisible.value = true |
|
|
|
|
|
} |
|
|
|
|
|
//添加活动 |
|
|
|
|
|
const addActivity = () => { |
|
|
|
|
|
centerDialogVisible.value = false |
|
|
|
|
|
//TODO: 添加活动逻辑 |
|
|
|
|
|
activity.value ={ |
|
|
|
|
|
name: '', |
|
|
|
|
|
stock1: '', |
|
|
|
|
|
stock2: '', |
|
|
|
|
|
status: '' |
|
|
|
|
|
|
|
|
const resetForm = () => { |
|
|
|
|
|
activity.value = { |
|
|
|
|
|
activityName: '', |
|
|
|
|
|
marketOne: '', |
|
|
|
|
|
marketTwo: '', |
|
|
|
|
|
status: '', |
|
|
|
|
|
startTime: '', |
|
|
|
|
|
endTime: '' |
|
|
|
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
const addActivityShow = () => { |
|
|
|
|
|
centerDialogVisible.value = true; |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// 添加活动 |
|
|
|
|
|
const addActivity = async () => { |
|
|
|
|
|
try { |
|
|
|
|
|
const activityData = { |
|
|
|
|
|
activityName: activity.value.activityName, |
|
|
|
|
|
marketOne: activity.value.marketOne, |
|
|
|
|
|
marketTwo: activity.value.marketTwo, |
|
|
|
|
|
status: Number(activity.value.status), // 确保是数字 |
|
|
|
|
|
startTime: activity.value.startTime, |
|
|
|
|
|
endTime: activity.value.endTime |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const response = await addActivityandtime(activityData) |
|
|
|
|
|
|
|
|
|
|
|
if (response.code === 200) { |
|
|
|
|
|
ElMessage.success('活动添加成功') |
|
|
|
|
|
centerDialogVisible.value = false |
|
|
|
|
|
fetchActivityList() // 刷新列表 |
|
|
|
|
|
} else { |
|
|
|
|
|
ElMessage.error(response.message || '活动添加失败') |
|
|
|
|
|
} |
|
|
|
|
|
} catch (error) { |
|
|
|
|
|
console.error('添加活动失败:', error) |
|
|
|
|
|
ElMessage.error('请求失败,请重试') |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const activity =ref({ |
|
|
|
|
|
name: '', |
|
|
|
|
|
stock1: '', |
|
|
|
|
|
stock2: '', |
|
|
|
|
|
status: '' |
|
|
|
|
|
|
|
|
const activity = ref({ |
|
|
|
|
|
activityName: '', |
|
|
|
|
|
marketOne: '', |
|
|
|
|
|
marketTwo: '', |
|
|
|
|
|
status: '', |
|
|
|
|
|
startTime: '', |
|
|
|
|
|
endTime: '' |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
// 分页配置 |
|
|
// 分页配置 |
|
|
const currentPage = ref(1); |
|
|
const currentPage = ref(1); |
|
|
const pageSize = ref(10); // 每页显示 5 条 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const pageSize = ref(10); // 每页显示 10 条 |
|
|
|
|
|
|
|
|
// 当前页数据 |
|
|
// 当前页数据 |
|
|
const currentPageData = computed(() => { |
|
|
const currentPageData = computed(() => { |
|
@ -173,8 +201,6 @@ const currentPageData = computed(() => { |
|
|
return tableData.value.slice(start, end); |
|
|
return tableData.value.slice(start, end); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 分页事件处理 |
|
|
// 分页事件处理 |
|
|
const handleSizeChange = (val) => { |
|
|
const handleSizeChange = (val) => { |
|
|
pageSize.value = val; |
|
|
pageSize.value = val; |
|
@ -185,12 +211,61 @@ const handleCurrentChange = (val) => { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
// 跳转详情页方法 |
|
|
// 跳转详情页方法 |
|
|
const goToDetail = () => { |
|
|
|
|
|
|
|
|
const goToDetail = (row) => { |
|
|
|
|
|
activityStone.setselectedactivity(row.id); |
|
|
router.push({ name: 'activityDetail' }); |
|
|
router.push({ name: 'activityDetail' }); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
const goToSet = () => { |
|
|
const goToSet = () => { |
|
|
router.push({ name: 'activitySet' }); |
|
|
router.push({ name: 'activitySet' }); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// 获取活动列表 |
|
|
|
|
|
const fetchActivityList = async () => { |
|
|
|
|
|
try { |
|
|
|
|
|
const response = await getActivityList(); |
|
|
|
|
|
if (response.code === 200) { |
|
|
|
|
|
tableData.value = response.data.map(item => ({ |
|
|
|
|
|
id: item.id, |
|
|
|
|
|
activityName: item.activityName, |
|
|
|
|
|
marketOne: item.marketOne, |
|
|
|
|
|
marketTwo: item.marketTwo, |
|
|
|
|
|
status: Number(item.status), // 确保是数字类型用于 el-switch |
|
|
|
|
|
startTime: item.startTime, |
|
|
|
|
|
endTime: item.endTime |
|
|
|
|
|
})); |
|
|
|
|
|
} else { |
|
|
|
|
|
console.error('获取活动列表失败:', response.message); |
|
|
|
|
|
} |
|
|
|
|
|
} catch (error) { |
|
|
|
|
|
console.error('获取活动列表失败:', error); |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
const updateStatus = async (row) => { |
|
|
|
|
|
try { |
|
|
|
|
|
const response = await changeStatusbyId(row.id, row.status) |
|
|
|
|
|
if (response.code === 200) { |
|
|
|
|
|
ElMessage.success('操作成功:修改状态成功') |
|
|
|
|
|
} else if (response.code === 400) { |
|
|
|
|
|
ElMessage.error(response.message || '当前有活动正在启用,修改状态失败') |
|
|
|
|
|
// 回滚状态 |
|
|
|
|
|
row.status = row.status === 1 ? 0 : 1 |
|
|
|
|
|
} else { |
|
|
|
|
|
ElMessage.error('状态修改失败') |
|
|
|
|
|
row.status = row.status === 1 ? 0 : 1 |
|
|
|
|
|
} |
|
|
|
|
|
} catch (error) { |
|
|
|
|
|
console.error('请求失败:', error) |
|
|
|
|
|
ElMessage.error('请求失败,请重试') |
|
|
|
|
|
// 出现异常时也回滚状态 |
|
|
|
|
|
row.status = row.status === 1 ? 0 : 1 |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 在组件挂载时请求数据 |
|
|
|
|
|
onMounted(() => { |
|
|
|
|
|
fetchActivityList(); |
|
|
|
|
|
}); |
|
|
</script> |
|
|
</script> |
|
|
|
|
|
|
|
|
<style scoped> |
|
|
<style scoped> |
|
@ -216,7 +291,7 @@ const goToSet = () => { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.marginTop { |
|
|
.marginTop { |
|
|
margin-top: 10px; |
|
|
|
|
|
|
|
|
margin-top: 10px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
table { |
|
|
table { |
|
|