7 Commits

  1. 5
      src/components/PasswordSuccess.vue
  2. 5
      src/views/audit/beanAudit.vue
  3. 12
      src/views/consume/bean/addBeanConsume.vue
  4. 248
      src/views/consume/bean/articleVideo.vue
  5. 225
      src/views/consume/bean/dieHardFan.vue
  6. 242
      src/views/consume/bean/liveStream.vue
  7. 5
      src/views/usergold/gold/clientCountBalance.vue
  8. 13
      src/views/usergold/userbean.vue

5
src/components/PasswordSuccess.vue

@ -19,6 +19,7 @@ import {ElIcon, ElButton} from 'element-plus';
import {SuccessFilled} from '@element-plus/icons-vue'; import {SuccessFilled} from '@element-plus/icons-vue';
import {useRouter} from 'vue-router'; import {useRouter} from 'vue-router';
const machineId = localStorage.getItem("machineId");
const countdown = ref(3); const countdown = ref(3);
const router = useRouter(); const router = useRouter();
@ -32,7 +33,7 @@ const startCountdown = () => {
// //
// 使 window.location.href // 使 window.location.href
// window.location.href = '/login'; // window.location.href = '/login';
router.replace ('/login');
router.replace(`/login?machineId=${machineId || ''}`);
// router.push('/login'); // router.push('/login');
} }
}, 1000); }, 1000);
@ -41,7 +42,7 @@ const startCountdown = () => {
const immediateJump = () => { const immediateJump = () => {
// window.location.href = '/login'; // window.location.href = '/login';
// //
router.replace ('/login');
router.replace(`/login?machineId=${machineId || ''}`);
}; };
onMounted(() => { onMounted(() => {

5
src/views/audit/beanAudit.vue

@ -395,7 +395,10 @@ const resetSearch = function () {
} }
selectedMarketPath.value = [] selectedMarketPath.value = []
dateRange.value = [] dateRange.value = []
activeTimeRange.value = '' //
activeTimeRange.value = '' //
get()
getStats()
} }
const handleClick = function (tab) { const handleClick = function (tab) {

12
src/views/consume/bean/addBeanConsume.vue

@ -155,12 +155,12 @@ const handleConsumeForm = async () => {
const userPermanentBean = Number(user.value.permanentBean) || 0; const userPermanentBean = Number(user.value.permanentBean) || 0;
const userFreeBean = Number(user.value.freeBean) || 0; const userFreeBean = Number(user.value.freeBean) || 0;
if (inputPermanentBean > userPermanentBean) {
throw new Error('付费金豆数量超过用户当前所拥有');
}
if (inputFreeBean > userFreeBean) {
throw new Error('免费金豆数量超过用户当前所拥有');
}
// if (inputPermanentBean > userPermanentBean) {
// throw new Error('');
// }
// if (inputFreeBean > userFreeBean) {
// throw new Error('');
// }
await ElMessageBox.confirm( await ElMessageBox.confirm(
'确认消耗吗?', '确认消耗吗?',

248
src/views/consume/bean/articleVideo.vue

@ -8,7 +8,7 @@ import { ar } from 'element-plus/es/locales.mjs'
// //
const defaultTime = [ const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1,23 , 59, 59),
new Date(2000, 2, 1, 23, 59, 59),
] ]
/* /*
====================工具方法============================== ====================工具方法==============================
@ -88,7 +88,7 @@ const getDept = async function () {
// url: '/general/dept', // url: '/general/dept',
url: '/beanConsume/getDept', // todo url: '/beanConsume/getDept', // todo
data: {account:adminData.value.account}
data: { account: adminData.value.account }
}) })
console.log('请求地区列表成功', result) console.log('请求地区列表成功', result)
// //
@ -151,19 +151,19 @@ const ConsumeSelectBy = async function (val) {
if (getTime.value != null) { if (getTime.value != null) {
if (getTime.value.startTime != '' && getTime.value.endTime != '') { if (getTime.value.startTime != '' && getTime.value.endTime != '') {
beanConsumeArticle.value.startTime = formatTime(getTime.value[0])
beanConsumeArticle.value.endTime = formatTime(getTime.value[1])
beanConsumeArticle.value.startTime = formatTime(getTime.value[0])
beanConsumeArticle.value.endTime = formatTime(getTime.value[1])
} }
} else { } else {
beanConsumeArticle.value.startTime = ''
beanConsumeArticle.value.endTime = ''
beanConsumeArticle.value.startTime = ''
beanConsumeArticle.value.endTime = ''
} }
beanConsumeArticle.value.sortField = sortField.value
beanConsumeArticle.value.sortOrder = sortOrder.value
beanConsumeArticle.value.sortField = sortField.value
beanConsumeArticle.value.sortOrder = sortOrder.value
console.log('搜索参数_时间', beanConsumeArticle.value.startTime)
console.log('搜索参数_时间', beanConsumeArticle.value.startTime)
console.log('搜索参数1', getObj.value) console.log('搜索参数1', getObj.value)
console.log('搜索参数2', beanConsumeArticle.value)
console.log('搜索参数2', beanConsumeArticle.value)
// POST // POST
const result = await request({ const result = await request({
@ -171,8 +171,8 @@ const ConsumeSelectBy = async function (val) {
data: { data: {
pageNum: getObj.value.pageNum, pageNum: getObj.value.pageNum,
pageSize: getObj.value.pageSize, pageSize: getObj.value.pageSize,
beanConsumeArticle: {
... beanConsumeArticle.value,
beanConsumeArticle: {
...beanConsumeArticle.value,
jwcode: beanConsumeArticle.value.jwcode, jwcode: beanConsumeArticle.value.jwcode,
dept: beanConsumeArticle.value.dept, dept: beanConsumeArticle.value.dept,
payMode: beanConsumeArticle.value.payMode, payMode: beanConsumeArticle.value.payMode,
@ -223,11 +223,11 @@ const ConsumeSelectBy = async function (val) {
const data = resultTotalGold.data || resultTotalGold; const data = resultTotalGold.data || resultTotalGold;
console.log('请求成功3', resultTotalGold.data) console.log('请求成功3', resultTotalGold.data)
console.log('permanentBean3',data.permanentBean)
// permanentBeanfreeBeantotalNum
permanentBean.value = Number(data.permanentBean) || 0;
freeBean.value = Number(data.freeBean) || 0;
totalNum.value = Number(data.totalNum) || 0;
console.log('permanentBean3', data.permanentBean)
// permanentBeanfreeBeantotalNum
permanentBean.value = Number(data.permanentBean) || 0;
freeBean.value = Number(data.freeBean) || 0;
totalNum.value = Number(data.totalNum) || 0;
// //
total.value = result.data.total total.value = result.data.total
@ -239,20 +239,20 @@ const ConsumeSelectBy = async function (val) {
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1 getObj.value.pageNum = 1
if(beanConsumeArticle.value.jwcode){
const numRef = /^\d{1,9}$/;
if(!numRef.test(beanConsumeArticle.value.jwcode)){
ElMessage.error('请检查精网号格式')
return
}
if (beanConsumeArticle.value.jwcode) {
const numRef = /^\d{1,9}$/;
if (!numRef.test(beanConsumeArticle.value.jwcode)) {
ElMessage.error('请检查精网号格式')
return
} }
if(beanConsumeArticle.value.articleId){
const numRef = /^\d{1,9}$/;
if(!numRef.test(beanConsumeArticle.value.articleId)){
ElMessage.error('请检查文章ID格式')
return
}
}
if (beanConsumeArticle.value.articleId) {
const numRef = /^\d{1,9}$/;
if (!numRef.test(beanConsumeArticle.value.articleId)) {
ElMessage.error('请检查文章ID格式')
return
} }
}
ConsumeSelectBy() ConsumeSelectBy()
} }
// //
@ -261,14 +261,14 @@ const reset = function () {
beanConsumeArticle.value.jwcode = null beanConsumeArticle.value.jwcode = null
beanConsumeArticle.value.dept = '' beanConsumeArticle.value.dept = ''
beanConsumeArticle.value.type = ''
beanConsumeArticle.value.payMode = ''
beanConsumeArticle.value.articleId = ''
beanConsumeArticle.value.articleName = ''
beanConsumeArticle.value.author = ''
beanConsumeArticle.value.type = ''
beanConsumeArticle.value.payMode = ''
beanConsumeArticle.value.articleId = ''
beanConsumeArticle.value.articleName = ''
beanConsumeArticle.value.author = ''
beanConsumeArticle.value.startTime = ''
beanConsumeArticle.value.endTime = ''
beanConsumeArticle.value.startTime = ''
beanConsumeArticle.value.endTime = ''
@ -280,18 +280,18 @@ const reset = function () {
// //
ConsumeSelectBy() ConsumeSelectBy()
console.log(' beanConsumeArticle', beanConsumeArticle.value)
console.log(' beanConsumeArticle', beanConsumeArticle.value)
} }
// //
const getToday = function () { const getToday = function () {
const today = dayjs() const today = dayjs()
const startTime = today.startOf('day').format('YYYY-MM-DD HH:mm:ss') const startTime = today.startOf('day').format('YYYY-MM-DD HH:mm:ss')
const endTime =today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
const endTime = today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
getTime.value = [startTime, endTime] getTime.value = [startTime, endTime]
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = 'today' // activeTimeRange.value = 'today' //
ConsumeSelectBy()
ConsumeSelectBy()
} }
// //
const getYesterday = function () { const getYesterday = function () {
@ -361,8 +361,8 @@ const handleCurrentChange = function (val) {
*/ */
const format3 = (num) => { const format3 = (num) => {
//
return num.toLocaleString('en-US')
//
return num.toLocaleString('en-US')
} }
onMounted(async function () { onMounted(async function () {
await getAdminData() await getAdminData()
@ -375,12 +375,12 @@ onMounted(async function () {
const exportExcel = async function () { const exportExcel = async function () {
const params = { // const params = { //
...getObj.value,
"beanConsumeArticle": {
...beanConsumeArticle.value,
sortField: sortField.value,
sortOrder: sortOrder.value,
},
...getObj.value,
"beanConsumeArticle": {
...beanConsumeArticle.value,
sortField: sortField.value,
sortOrder: sortOrder.value,
},
} }
const res = await API({ url: '/export/exportArticle', data: params }) const res = await API({ url: '/export/exportArticle', data: params })
if (res.code === 200) { if (res.code === 200) {
@ -463,93 +463,57 @@ const getTagText = (state) => {
</script> </script>
<template> <template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px;margin-top:10px">
<el-row style="margin-bottom: 10px">
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">精网号</el-text>
<el-input v-model="beanConsumeArticle.jwcode" placeholder="请输入精网号" style="width: 140px" clearable />
</div>
</el-col>
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">地区</el-text>
<el-select v-model="beanConsumeArticle.dept" placeholder="请选择地区" style="width: 140px" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select>
</div>
</el-col>
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">类型</el-text>
<el-select v-model="beanConsumeArticle.payMode" placeholder="请选择类型" style="width: 140px" clearable @change="handlePayModeChange">
<el-option label="打赏" value="0" />
<el-option label="付费购买" value="1" />
<el-option label="其他" value="2" />
</el-select>
</div>
</el-col>
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">文章/视频ID</el-text>
<el-input v-model="beanConsumeArticle.articleId" placeholder="请输入文章/视频ID" style="width: 140px" clearable />
</div>
</el-col>
<el-col :span="5">
<div class="head-card-element">
<el-text class="mx-1">文章/视频标题</el-text>
<el-input v-model="beanConsumeArticle.articleName" placeholder="请输入文章/视频标题" style="width: 160px" clearable />
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1" >作者</el-text>
<el-input v-model="beanConsumeArticle.author" placeholder="请输入作者" style="width: 155px" clearable />
</div>
</el-col>
<el-col :span="20">
<div class="head-card-element">
<el-text class="mx-1">付费时间</el-text>
<el-date-picker
v-model="getTime"
type="datetimerange"
range-separator="至"
start-placeholder="起始时间"
end-placeholder="结束时间"
style="width: 400px"
@change="handleDatePickerChange"
value-format="YYYY-MM-DD HH:mm:ss"
:default-time="defaultTime"
/>
<el-button @click="getToday()" style="margin-left: 10px" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
<el-button @click="getYesterday()" style="margin-left: 10px" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button>
<el-button @click="get7Days()" style="margin-left: 10px" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
</div>
</el-col>
</el-row>
<el-card style="margin-bottom: 10px;margin-top:10px">
<el-col style="margin-bottom: 10px">
<el-text>精网号</el-text>
<el-input v-model="beanConsumeArticle.jwcode" placeholder="请输入精网号" style="width: 200px;margin-right: 20px" clearable />
<el-text>地区</el-text>
<el-select v-model="beanConsumeArticle.dept" placeholder="请选择地区" style="width: 200px;margin-right: 20px" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select>
<el-text>类型</el-text>
<el-select v-model="beanConsumeArticle.payMode" placeholder="请选择类型" style="width: 200px;margin-right: 20px" clearable
@change="handlePayModeChange">
<el-option label="打赏" value="0" />
<el-option label="付费购买" value="1" />
<el-option label="其他" value="2" />
</el-select>
<el-text>文章/视频ID</el-text>
<el-input v-model="beanConsumeArticle.articleId" placeholder="请输入文章/视频ID" style="width: 200px;margin-right: 20px" clearable />
<el-text>文章/视频标题</el-text>
<el-input v-model="beanConsumeArticle.articleName" placeholder="请输入文章/视频标题" style="width: 200px" clearable />
</el-col>
<el-col>
<el-text>作者</el-text>
<el-input v-model="beanConsumeArticle.author" placeholder="请输入作者" style="width: 200px;margin-right: 20px" clearable />
<el-text>付费时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width: 400px;margin-right: 10px" @change="handleDatePickerChange"
value-format="YYYY-MM-DD HH:mm:ss" :default-time="defaultTime" />
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
<el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button>
<el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
</el-col>
</el-card> </el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card> <el-card>
<div> <div>
金豆总数{{ format3(Math.abs(permanentBean+freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
金豆总数{{ format3(Math.abs(permanentBean + freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
付费金豆数{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp; 付费金豆数{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
免费金豆数{{ format3(Math.abs(freeBean)) }} 免费金豆数{{ format3(Math.abs(freeBean)) }}
</div> </div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 576px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="576px" @sort-change="handleSortChange">
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="550px" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left"> <el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
@ -571,11 +535,11 @@ const getTagText = (state) => {
}} }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="beanNum" label="金豆总数" sortable="custom" width="120px"/>
<el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px"/>
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px"/>
<el-table-column prop="beanNum" label="金豆总数" sortable="custom" width="120px" />
<el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px" />
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" />
<el-table-column prop="articleId" label="文章/视频ID" width="150px" /> <el-table-column prop="articleId" label="文章/视频ID" width="150px" />
<el-table-column prop="articleName" label="文章/视频标题" width="200px" show-overflow-tooltip />
<el-table-column prop="articleName" label="文章/视频标题" width="150px" show-overflow-tooltip />
<el-table-column prop="author" label="作者" width="120px" /> <el-table-column prop="author" label="作者" width="120px" />
<el-table-column prop="consumeTime" label="付费时间" sortable="custom" width="180px"> <el-table-column prop="consumeTime" label="付费时间" sortable="custom" width="180px">
<template #default="scope"> <template #default="scope">
@ -592,12 +556,10 @@ const getTagText = (state) => {
@current-change="handleCurrentChange"></el-pagination> @current-change="handleCurrentChange"></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
<!-- 导出弹窗 --> <!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" /> <el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态"> <el-table-column prop="state" label="状态">
<template #default="scope"> <template #default="scope">
@ -629,22 +591,6 @@ const getTagText = (state) => {
</template> </template>
<style scoped> <style scoped>
.status {
display: flex;
}
.head-card {
display: flex;
}
.head-card-element {
margin-right: 20px;
}
.head-card-btn {
margin-left: auto;
}
.pagination { .pagination {
display: flex; display: flex;
margin-top: 20px; margin-top: 20px;

225
src/views/consume/bean/dieHardFan.vue

@ -10,14 +10,14 @@ import moment from 'moment'
====================工具方法============================== ====================工具方法==============================
*/ */
const format3 = (num) => { const format3 = (num) => {
//
return num.toLocaleString('en-US')
//
return num.toLocaleString('en-US')
} }
// //
const formatTime = (val) => val ? dayjs(val).format('YYYY-MM-DD HH:mm:ss') : '' const formatTime = (val) => val ? dayjs(val).format('YYYY-MM-DD HH:mm:ss') : ''
const defaultTime = [ const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1,23 , 59, 59),
new Date(2000, 2, 1, 23, 59, 59),
] ]
/* /*
====================数据================================= ====================数据=================================
@ -46,7 +46,7 @@ const getChannel = async function () {
try { try {
const result = await request({ const result = await request({
url: '/beanConsume/getLiveChannel', // todo url: '/beanConsume/getLiveChannel', // todo
data: {account:adminData.value.account}
data: { account: adminData.value.account }
}) })
console.log('请求频道列表成功', result) console.log('请求频道列表成功', result)
// //
@ -156,19 +156,19 @@ const ConsumeSelectBy = async function (val) {
if (getTime.value != null) { if (getTime.value != null) {
if (getTime.value.startTime != '' && getTime.value.endTime != '') { if (getTime.value.startTime != '' && getTime.value.endTime != '') {
beanConsumeFan.value.startTime = formatTime(getTime.value[0])
beanConsumeFan.value.endTime = formatTime(getTime.value[1])
beanConsumeFan.value.startTime = formatTime(getTime.value[0])
beanConsumeFan.value.endTime = formatTime(getTime.value[1])
} }
} else { } else {
beanConsumeFan.value.startTime = ''
beanConsumeFan.value.endTime = ''
beanConsumeFan.value.startTime = ''
beanConsumeFan.value.endTime = ''
} }
beanConsumeFan.value.sortField = sortField.value
beanConsumeFan.value.sortOrder = sortOrder.value
beanConsumeFan.value.sortField = sortField.value
beanConsumeFan.value.sortOrder = sortOrder.value
console.log('搜索参数_时间', beanConsumeFan.value.startTime)
console.log('搜索参数_时间', beanConsumeFan.value.startTime)
console.log('搜索参数1', getObj.value) console.log('搜索参数1', getObj.value)
console.log('搜索参数2', beanConsumeFan.value)
console.log('搜索参数2', beanConsumeFan.value)
// POST // POST
const result = await request({ const result = await request({
@ -176,8 +176,8 @@ const ConsumeSelectBy = async function (val) {
data: { data: {
pageNum: getObj.value.pageNum, pageNum: getObj.value.pageNum,
pageSize: getObj.value.pageSize, pageSize: getObj.value.pageSize,
beanConsumeFan: {
... beanConsumeFan.value,
beanConsumeFan: {
...beanConsumeFan.value,
jwcode: beanConsumeFan.value.jwcode ? String(beanConsumeFan.value.jwcode) : '', jwcode: beanConsumeFan.value.jwcode ? String(beanConsumeFan.value.jwcode) : '',
dept: beanConsumeFan.value.dept || '', dept: beanConsumeFan.value.dept || '',
channel: beanConsumeFan.value.channel || '', channel: beanConsumeFan.value.channel || '',
@ -190,7 +190,7 @@ const ConsumeSelectBy = async function (val) {
}) })
console.log('请求成功3', sortField) console.log('请求成功3', sortField)
console.log('接口响应结果',result);
console.log('接口响应结果', result);
if (result.code === 200 && result.data && result.data.list) { if (result.code === 200 && result.data && result.data.list) {
tableData.value = result.data.list; tableData.value = result.data.list;
total.value = result.data.total; total.value = result.data.total;
@ -201,7 +201,7 @@ const ConsumeSelectBy = async function (val) {
const sumConsumeParams = { const sumConsumeParams = {
payType: 7, // payType 7 payType: 7, // payType 7
beanConsumeFan: { beanConsumeFan: {
... beanConsumeFan.value,
...beanConsumeFan.value,
} }
}; };
@ -215,11 +215,11 @@ const ConsumeSelectBy = async function (val) {
const data = resultTotalGold.data || resultTotalGold; const data = resultTotalGold.data || resultTotalGold;
console.log('请求成功2', resultTotalGold.data) console.log('请求成功2', resultTotalGold.data)
console.log('permanentBean2',data.permanentBean)
// permanentBeanfreeBeantotalNum
permanentBean.value = Number(data.permanentBean) || 0;
freeBean.value = Number(data.freeBean) || 0;
totalNum.value = Number(data.totalNum) || 0;
console.log('permanentBean2', data.permanentBean)
// permanentBeanfreeBeantotalNum
permanentBean.value = Number(data.permanentBean) || 0;
freeBean.value = Number(data.freeBean) || 0;
totalNum.value = Number(data.totalNum) || 0;
// //
total.value = result.data.total total.value = result.data.total
@ -231,14 +231,14 @@ const ConsumeSelectBy = async function (val) {
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1 getObj.value.pageNum = 1
if(beanConsumeFan.value.jwcode){
const numRef = /^\d{1,9}$/;
if(!numRef.test(beanConsumeFan.value.jwcode)){
ElMessage.error('请检查精网号格式')
return
}
if (beanConsumeFan.value.jwcode) {
const numRef = /^\d{1,9}$/;
if (!numRef.test(beanConsumeFan.value.jwcode)) {
ElMessage.error('请检查精网号格式')
return
} }
ConsumeSelectBy()
}
ConsumeSelectBy()
} }
// //
const reset = function () { const reset = function () {
@ -246,16 +246,16 @@ const reset = function () {
beanConsumeFan.value.jwcode = null beanConsumeFan.value.jwcode = null
beanConsumeFan.value.type = ''
beanConsumeFan.value.gift = ''
beanConsumeFan.value.channel = ''
beanConsumeFan.value.liveRoom = ''
beanConsumeFan.value.type = ''
beanConsumeFan.value.gift = ''
beanConsumeFan.value.channel = ''
beanConsumeFan.value.liveRoom = ''
beanConsumeFan.value.dept = ''
beanConsumeFan.value.dept = ''
beanConsumeFan.value.startTime = ''
beanConsumeFan.value.startTime = ''
beanConsumeFan.value.endTime = ''
beanConsumeFan.value.endTime = ''
@ -266,14 +266,14 @@ const reset = function () {
// //
ConsumeSelectBy()
console.log(' beanConsumeFan', beanConsumeFan.value)
ConsumeSelectBy()
console.log(' beanConsumeFan', beanConsumeFan.value)
} }
// //
const getToday = function () { const getToday = function () {
const today = dayjs() const today = dayjs()
const startTime = today.startOf('day').format('YYYY-MM-DD HH:mm:ss') const startTime = today.startOf('day').format('YYYY-MM-DD HH:mm:ss')
const endTime =today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
const endTime = today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
getTime.value = [startTime, endTime] getTime.value = [startTime, endTime]
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = 'today' // activeTimeRange.value = 'today' //
@ -312,7 +312,7 @@ const getDept = async function () {
// url: '/general/dept', // url: '/general/dept',
url: '/beanConsume/getDept', // todo url: '/beanConsume/getDept', // todo
data: {account:adminData.value.account}
data: { account: adminData.value.account }
}) })
console.log('请求地区列表成功', result) console.log('请求地区列表成功', result)
// //
@ -335,9 +335,9 @@ const handleSortChange = (column) => {
sortField.value = 'beanNum' sortField.value = 'beanNum'
} else if (column.prop === 'consumeTime') { } else if (column.prop === 'consumeTime') {
sortField.value = 'consumeTime' sortField.value = 'consumeTime'
} else if(column.prop === 'buyBean') {
} else if (column.prop === 'buyBean') {
sortField.value = 'buyBean' sortField.value = 'buyBean'
} else if(column.prop === 'freeBean') {
} else if (column.prop === 'freeBean') {
sortField.value = 'freeBean' sortField.value = 'freeBean'
} }
sortOrder.value = column.order === 'ascending' ? 'DESC' : 'ASC' sortOrder.value = column.order === 'ascending' ? 'DESC' : 'ASC'
@ -380,12 +380,12 @@ onMounted(async function () {
const exportExcel = async function () { const exportExcel = async function () {
const params = { // const params = { //
...getObj.value,
"beanConsumeFan": {
...beanConsumeFan.value,
sortField: sortField.value,
sortOrder: sortOrder.value,
},
...getObj.value,
"beanConsumeFan": {
...beanConsumeFan.value,
sortField: sortField.value,
sortOrder: sortOrder.value,
},
} }
const res = await API({ url: '/export/exportFan', data: params }) const res = await API({ url: '/export/exportFan', data: params })
if (res.code === 200) { if (res.code === 200) {
@ -468,80 +468,45 @@ const getTagText = (state) => {
</script> </script>
<template> <template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px;margin-top:10px">
<el-row style="margin-bottom: 10px">
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">精网号</el-text>
<el-input v-model="beanConsumeFan.jwcode" placeholder="请输入精网号" style="width: 150px" clearable />
</div>
</el-col>
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">地区</el-text>
<el-select v-model="beanConsumeFan.dept" placeholder="请选择地区" style="width: 150px" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select>
</div>
</el-col>
<el-col :span="5">
<div class="head-card-element">
<el-text class="mx-1">频道</el-text>
<el-select
v-model="beanConsumeFan.channel"
placeholder="请选择频道"
style="width: 180px"
clearable
filterable
allow-create
default-first-option
>
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" />
</el-select>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="head-card-element">
<el-text class="mx-1">消费时间</el-text>
<el-date-picker
v-model="getTime"
type="datetimerange"
range-separator="至"
start-placeholder="起始时间"
end-placeholder="结束时间"
style="width: 400px"
@change="handleDatePickerChange"
value-format="YYYY-MM-DD HH:mm:ss"
:default-time="defaultTime"
/>
<el-button @click="getToday()" style="margin-left: 10px" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
<el-button @click="getYesterday()" style="margin-left: 10px" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button>
<el-button @click="get7Days()" style="margin-left: 10px" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
</div>
</el-col>
</el-row>
</el-card>
<el-card style="margin-bottom: 20px;margin-top:10px">
<el-col style="margin-bottom: 10px">
<el-text>精网号</el-text>
<el-input v-model="beanConsumeFan.jwcode" placeholder="请输入精网号" style="width: 200px;margin-right: 20px"
clearable />
<el-text>地区</el-text>
<el-select v-model="beanConsumeFan.dept" placeholder="请选择地区" style="width: 200px;margin-right: 20px" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select>
<el-text>频道</el-text>
<el-select v-model="beanConsumeFan.channel" placeholder="请选择频道" style="width: 200px" clearable filterable allow-create>
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" />
</el-select>
</el-col> </el-col>
</el-row>
<el-row>
<el-col> <el-col>
<el-text>消费时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width: 400px;margin-right:20px" @change="handleDatePickerChange"
value-format="YYYY-MM-DD HH:mm:ss" :default-time="defaultTime" />
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
<el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button>
<el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
</el-col>
</el-card>
<el-card> <el-card>
<div> <div>
金豆总数{{ format3(Math.abs(permanentBean+freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
金豆总数{{ format3(Math.abs(permanentBean + freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
付费金豆数{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp; 付费金豆数{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
免费金豆数{{ format3(Math.abs(freeBean)) }} 免费金豆数{{ format3(Math.abs(freeBean)) }}
</div> </div>
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 576px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="576px" @sort-change="handleSortChange">
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="550px" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left"> <el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
@ -554,18 +519,16 @@ const getTagText = (state) => {
<!-- 固定精网号列 --> <!-- 固定精网号列 -->
<el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" /> <el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" />
<el-table-column prop="dept" label="地区" width="110px" /> <el-table-column prop="dept" label="地区" width="110px" />
<el-table-column prop="beanNum" label="金豆数量" sortable="custom" width="120px"/>
<el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px"/>
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px"/>
<el-table-column prop="beanNum" label="金豆数量" sortable="custom" width="120px" />
<el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px" />
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" />
<el-table-column prop="channel" label="频道" width="190px" /> <el-table-column prop="channel" label="频道" width="190px" />
<el-table-column prop="type" label="会员类型" width="120px" >
<el-table-column prop="type" label="会员类型" width="120px">
<template #default="scope"> <template #default="scope">
{{ consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型' }}
{{consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型'}}
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column prop="joinMethod" label="加入方式" width="120px" /> -->
<el-table-column prop="consumeTime" label="加入时间" sortable="custom" width="180px" /> <el-table-column prop="consumeTime" label="加入时间" sortable="custom" width="180px" />
<!-- <el-table-column prop="consumeTime" label="到期时间" width="180px" /> -->
</el-table> </el-table>
</div> </div>
@ -576,12 +539,10 @@ const getTagText = (state) => {
@current-change="handleCurrentChange"></el-pagination> @current-change="handleCurrentChange"></el-pagination>
</div> </div>
</el-card> </el-card>
</el-col>
</el-row>
<!-- 导出弹窗 --> <!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" /> <el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态"> <el-table-column prop="state" label="状态">
<template #default="scope"> <template #default="scope">
@ -613,22 +574,6 @@ const getTagText = (state) => {
</template> </template>
<style scoped> <style scoped>
.status {
display: flex;
}
.head-card {
display: flex;
}
.head-card-element {
margin-right: 20px;
}
.head-card-btn {
margin-left: auto;
}
.pagination { .pagination {
display: flex; display: flex;
margin-top: 20px; margin-top: 20px;

242
src/views/consume/bean/liveStream.vue

@ -11,11 +11,11 @@ import moment from 'moment'
*/ */
const defaultTime = [ const defaultTime = [
new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 0, 0, 0),
new Date(2000, 2, 1,23 , 59, 59),
new Date(2000, 2, 1, 23, 59, 59),
] ]
const format3 = (num) => { const format3 = (num) => {
//
return num.toLocaleString('en-US')
//
return num.toLocaleString('en-US')
} }
// //
const formatTime = (val) => val ? dayjs(val).format('YYYY-MM-DD HH:mm:ss') : '' const formatTime = (val) => val ? dayjs(val).format('YYYY-MM-DD HH:mm:ss') : ''
@ -49,7 +49,7 @@ const getGift = async function () {
try { try {
const result = await request({ const result = await request({
url: '/beanConsume/getLiveGift', // todo url: '/beanConsume/getLiveGift', // todo
data: {account:adminData.value.account}
data: { account: adminData.value.account }
}) })
console.log('请求礼物列表成功', result) console.log('请求礼物列表成功', result)
// //
@ -71,7 +71,7 @@ const getChannel = async function () {
try { try {
const result = await request({ const result = await request({
url: '/beanConsume/getLiveChannel', // todo url: '/beanConsume/getLiveChannel', // todo
data: {account:adminData.value.account}
data: { account: adminData.value.account }
}) })
console.log('请求频道列表成功', result) console.log('请求频道列表成功', result)
// //
@ -97,7 +97,7 @@ const consumeTypes = ref([
]) ])
// //
const handleTypeChange = (value) => { const handleTypeChange = (value) => {
if (value !== 1) {
if (value !== 1) {
beanConsumeLive.value.gift = '' beanConsumeLive.value.gift = ''
} }
} }
@ -136,7 +136,7 @@ const getDept = async function () {
// url: '/general/dept', // url: '/general/dept',
url: '/beanConsume/getDept', // todo url: '/beanConsume/getDept', // todo
data: {account:adminData.value.account}
data: { account: adminData.value.account }
}) })
console.log('请求地区列表成功', result) console.log('请求地区列表成功', result)
// //
@ -200,9 +200,9 @@ const selectLiveBy = async function (val) {
beanConsumeLive.value.sortField = sortField.value beanConsumeLive.value.sortField = sortField.value
beanConsumeLive.value.sortOrder = sortOrder.value beanConsumeLive.value.sortOrder = sortOrder.value
console.log('搜索参数_时间', beanConsumeLive.value.startTime)
console.log('搜索参数_时间', beanConsumeLive.value.startTime)
console.log('搜索参数1', getObj.value) console.log('搜索参数1', getObj.value)
console.log('搜索参数2', beanConsumeLive.value)
console.log('搜索参数2', beanConsumeLive.value)
// POST // POST
const result = await request({ const result = await request({
@ -229,12 +229,12 @@ const selectLiveBy = async function (val) {
}) })
console.log('请求成功2', sortField) console.log('请求成功2', sortField)
console.log('接口响应结果', result); //
if (result.code === 200 && result.data && result.data.list) {
console.log('接口响应结果', result); //
if (result.code === 200 && result.data && result.data.list) {
tableData.value = result.data.list; tableData.value = result.data.list;
total.value = result.data.total; total.value = result.data.total;
} }
// beanConsumeLive.value payType 1
// beanConsumeLive.value payType 1
const sumConsumeParams = { const sumConsumeParams = {
payType: 1, // payType 1 payType: 1, // payType 1
beanConsumeLive: { beanConsumeLive: {
@ -253,11 +253,11 @@ const selectLiveBy = async function (val) {
const data = resultTotalGold.data || resultTotalGold; const data = resultTotalGold.data || resultTotalGold;
console.log('请求成功1', resultTotalGold.data) //undifined console.log('请求成功1', resultTotalGold.data) //undifined
console.log('permanentBean1',data.permanentBean)
// permanentBeanfreeBeantotalNum
permanentBean.value = Number(data.permanentBean) || 0;
freeBean.value = Number(data.freeBean) || 0;
totalNum.value = Number(data.totalNum) || 0;
console.log('permanentBean1', data.permanentBean)
// permanentBeanfreeBeantotalNum
permanentBean.value = Number(data.permanentBean) || 0;
freeBean.value = Number(data.freeBean) || 0;
totalNum.value = Number(data.totalNum) || 0;
@ -271,27 +271,27 @@ const selectLiveBy = async function (val) {
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1 getObj.value.pageNum = 1
if(beanConsumeLive.value.jwcode){
const numRef = /^\d{1,9}$/;
if(!numRef.test(beanConsumeLive.value.jwcode)){
ElMessage.error('请检查精网号格式')
return
}
if (beanConsumeLive.value.jwcode) {
const numRef = /^\d{1,9}$/;
if (!numRef.test(beanConsumeLive.value.jwcode)) {
ElMessage.error('请检查精网号格式')
return
} }
selectLiveBy()
}
selectLiveBy()
} }
// //
const reset = function () { const reset = function () {
console.log('直播的重置') console.log('直播的重置')
beanConsumeLive.value.jwcode = null beanConsumeLive.value.jwcode = null
beanConsumeLive.value.type = ''
beanConsumeLive.value.gift = ''
beanConsumeLive.value.liveChannel = ''
beanConsumeLive.value.liveName = ''
beanConsumeLive.value.dept = ''
beanConsumeLive.value.startTime = ''
beanConsumeLive.value.endTime = ''
beanConsumeLive.value.type = ''
beanConsumeLive.value.gift = ''
beanConsumeLive.value.liveChannel = ''
beanConsumeLive.value.liveName = ''
beanConsumeLive.value.dept = ''
beanConsumeLive.value.startTime = ''
beanConsumeLive.value.endTime = ''
sortField.value = '' sortField.value = ''
sortOrder.value = '' sortOrder.value = ''
getTime.value = {} getTime.value = {}
@ -300,18 +300,18 @@ const reset = function () {
// //
selectLiveBy() selectLiveBy()
console.log(' beanConsumeLive', beanConsumeLive.value)
console.log(' beanConsumeLive', beanConsumeLive.value)
} }
// //
const getToday = function () { const getToday = function () {
const today = dayjs() const today = dayjs()
const startTime = today.startOf('day').format('YYYY-MM-DD HH:mm:ss') const startTime = today.startOf('day').format('YYYY-MM-DD HH:mm:ss')
const endTime =today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
const endTime = today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
getTime.value = [startTime, endTime] getTime.value = [startTime, endTime]
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = 'today' // activeTimeRange.value = 'today' //
selectLiveBy()
selectLiveBy()
} }
// //
const getYesterday = function () { const getYesterday = function () {
@ -322,7 +322,7 @@ const getYesterday = function () {
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = 'yesterday' // activeTimeRange.value = 'yesterday' //
selectLiveBy()
selectLiveBy()
} }
// 7 // 7
const get7Days = function () { const get7Days = function () {
@ -347,9 +347,9 @@ const handleSortChange = (column) => {
sortField.value = 'beanNum' sortField.value = 'beanNum'
} else if (column.prop === 'consumeTime') { } else if (column.prop === 'consumeTime') {
sortField.value = 'consumeTime' sortField.value = 'consumeTime'
} else if(column.prop === 'buyBean') {
} else if (column.prop === 'buyBean') {
sortField.value = 'buyBean' sortField.value = 'buyBean'
} else if(column.prop === 'freeBean') {
} else if (column.prop === 'freeBean') {
sortField.value = 'freeBean' sortField.value = 'freeBean'
} }
sortOrder.value = column.order === 'ascending' ? 'DESC' : 'ASC' sortOrder.value = column.order === 'ascending' ? 'DESC' : 'ASC'
@ -502,101 +502,58 @@ const getTagText = (state) => {
</script> </script>
<template> <template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px;margin-top:10px">
<el-row style="margin-bottom: 10px">
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">精网号</el-text>
<el-input v-model="beanConsumeLive.jwcode" placeholder="请输入精网号" style="width: 140px" clearable />
</div>
</el-col>
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">地区</el-text>
<el-select v-model="beanConsumeLive.dept" placeholder="请选择地区" style="width: 140px" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select>
</div>
</el-col>
<!-- <el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">类型</el-text>
<el-select v-model="beanConsumeLive.type" placeholder="请选择类型" style="width: 140px" clearable @change="handleTypeChange">
<el-option v-for="(item, index) in consumeTypes" :key="index" :label="item.label" :value="item.value" />
</el-select>
</div>
</el-col> -->
<el-col :span="4" >
<div class="head-card-element">
<el-text class="mx-1">礼物名称</el-text>
<el-select v-model="beanConsumeLive.gift" placeholder="请选择礼物名称" style="width: 140px" clearable
filterable
allow-create
default-first-option
>
<el-option v-for="(item, index) in gifts" :key="index" :label="item" :value="item" />
</el-select>
</div>
</el-col>
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">频道</el-text>
<el-select
v-model="beanConsumeLive.liveChannel"
placeholder="请选择频道"
style="width: 150px"
clearable
filterable
allow-create
default-first-option
>
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" />
</el-select>
</div>
</el-col>
<el-col :span="4">
<div class="head-card-element">
<el-text class="mx-1">直播间</el-text>
<el-input v-model="beanConsumeLive.liveName" placeholder="请输入直播间" style="width: 150px" clearable />
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="head-card-element">
<el-text class="mx-1" >消费时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange" :default-time="defaultTime"/>
<el-button @click="getToday()" style="margin-left: 10px"
:type="activeTimeRange === 'today' ? 'primary' : ''"> </el-button>
<el-button @click="getYesterday()" style="margin-left: 10px"
:type="activeTimeRange === 'yesterday' ? 'primary' : ''"> </el-button>
<el-button @click="get7Days()" style="margin-left: 10px"
:type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
</div>
</el-col>
</el-row>
</el-card>
<el-card style="margin-bottom: 20px;margin-top:10px">
<el-col style="margin-bottom: 10px">
<el-text>精网号</el-text>
<el-input v-model="beanConsumeLive.jwcode" placeholder="请输入精网号" style="width: 200px;margin-right: 20px"
clearable />
<el-text>地区</el-text>
<el-select v-model="beanConsumeLive.dept" placeholder="请选择地区" style="width: 200px;margin-right: 20px" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select>
<el-text>礼物名称</el-text>
<el-select v-model="beanConsumeLive.gift" placeholder="请选择礼物名称" style="width: 200px;margin-right: 20px" clearable
filterable allow-create default-first-option>
<el-option v-for="(item, index) in gifts" :key="index" :label="item" :value="item" />
</el-select>
<el-text>频道</el-text>
<el-select v-model="beanConsumeLive.liveChannel" placeholder="请选择频道" style="width: 200px;margin-right: 20px"
clearable filterable allow-create default-first-option>
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" />
</el-select>
<el-text>直播间</el-text>
<el-input v-model="beanConsumeLive.liveName" placeholder="请输入直播间" style="width: 200px;margin-right: 20px"
clearable />
</el-col> </el-col>
</el-row>
<el-row>
<el-col> <el-col>
<el-text>消费时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width: 400px;margin-right: 20px;" @change="handleDatePickerChange"
:default-time="defaultTime" />
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"> </el-button>
<el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"> </el-button>
<el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
</el-col>
</el-card>
<el-card> <el-card>
<div> <div>
金豆总数{{ format3(Math.abs(permanentBean+freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
金豆总数{{ format3(Math.abs(permanentBean + freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
付费金豆数{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp; 付费金豆数{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
免费金豆数{{ format3(Math.abs(freeBean)) }} 免费金豆数{{ format3(Math.abs(freeBean)) }}
</div> </div>
<!-- 设置表格容器的高度和滚动样式 --> <!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 576px; overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="576px" @sort-change="handleSortChange">
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 100%" height="550px" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="80px" fixed="left"> <el-table-column type="index" label="序号" width="80px" fixed="left">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
@ -609,36 +566,29 @@ const getTagText = (state) => {
<!-- 固定精网号列 --> <!-- 固定精网号列 -->
<el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" /> <el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" />
<el-table-column prop="dept" label="地区" width="110px" /> <el-table-column prop="dept" label="地区" width="110px" />
<el-table-column prop="gift" label="礼物" width="140px" >
<el-table-column prop="gift" label="礼物" width="140px">
</el-table-column> </el-table-column>
<el-table-column prop="beanNum" label="金豆数量" sortable="custom" width="120px"/>
<el-table-column prop="beanNum" label="金豆数量" sortable="custom" width="120px" />
<el-table-column prop="isBackpack" label="背包礼物" width="120px"> <el-table-column prop="isBackpack" label="背包礼物" width="120px">
<template #default="scope"> <template #default="scope">
{{ scope.row.isBackpack == 1 ? '是' : '否' }} {{ scope.row.isBackpack == 1 ? '是' : '否' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px"/>
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px"/>
<el-table-column prop="liveChannel" label="频道" width="180px" />
<el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px" />
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" />
<el-table-column prop="liveChannel" label="频道" width="120px" />
<el-table-column prop="liveName" label="直播间名称" width="160px" show-overflow-tooltip /> <el-table-column prop="liveName" label="直播间名称" width="160px" show-overflow-tooltip />
<el-table-column prop="consumeTime" label="消费时间" sortable="custom" width="180px" /> <el-table-column prop="consumeTime" label="消费时间" sortable="custom" width="180px" />
</el-table> </el-table>
</div> </div>
<!-- 分页 -->
<div class="pagination">
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" style="margin-top: 20px;"
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination> @current-change="handleCurrentChange"></el-pagination>
</div>
</el-card> </el-card>
</el-col>
</el-row>
<!-- 导出弹窗 --> <!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%"> <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" /> <el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态"> <el-table-column prop="state" label="状态">
<template #default="scope"> <template #default="scope">
@ -670,22 +620,6 @@ const getTagText = (state) => {
</template> </template>
<style scoped> <style scoped>
.status {
display: flex;
}
.head-card {
display: flex;
}
.head-card-element {
margin-right: 20px;
}
.head-card-btn {
margin-left: auto;
}
.pagination { .pagination {
display: flex; display: flex;
margin-top: 20px; margin-top: 20px;

5
src/views/usergold/gold/clientCountBalance.vue

@ -178,7 +178,10 @@ const search = function () {
} }
// //
const reset = function () { const reset = function () {
user.value = {}
user.value = {
jwcode: '',
markets: [],
}
sortField.value = '' sortField.value = ''
sortOrder.value = '' sortOrder.value = ''
get() get()

13
src/views/usergold/userbean.vue

@ -21,7 +21,13 @@
消费金豆总数{{ format3(stats.consumeSum) }}金豆&nbsp;&nbsp;&nbsp;&nbsp; 消费金豆总数{{ format3(stats.consumeSum) }}金豆&nbsp;&nbsp;&nbsp;&nbsp;
</div> </div>
<el-table :data="tableData" height="650px" @sort-change="handleSortChange" :row-style="{ height: '60px' }"> <el-table :data="tableData" height="650px" @sort-change="handleSortChange" :row-style="{ height: '60px' }">
<el-table-column label="ID" style="width: 120px" prop="id" />
<el-table-column type="index" label="序号" width="100px" fixed="left">
<template #default="scope">
<span>{{
scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize
}}</span>
</template>
</el-table-column>
<el-table-column label="姓名" style="width: 120px;" prop="name" show-overflow-tooltip /> <el-table-column label="姓名" style="width: 120px;" prop="name" show-overflow-tooltip />
<el-table-column label="精网号" style="width: 120px;" prop="jwcode" /> <el-table-column label="精网号" style="width: 120px;" prop="jwcode" />
<el-table-column label="所属地区" style="width: 120px;" prop="dept" /> <el-table-column label="所属地区" style="width: 120px;" prop="dept" />
@ -162,6 +168,7 @@ const trim = () => {
const reset = function () { const reset = function () {
searchObj.value.jwcode = '' searchObj.value.jwcode = ''
searchObj.value.dept = '' searchObj.value.dept = ''
get()
} }
const handlePageSizeChange = function (val) { const handlePageSizeChange = function (val) {
pagination.value.pageSize = val pagination.value.pageSize = val
@ -185,8 +192,8 @@ onMounted(() => {
</script> </script>
<style scoped> <style scoped>
.stats-card {
/* .stats-card {
background-color: #EBEEF5; background-color: #EBEEF5;
padding: 5px; padding: 5px;
}
} */
</style> </style>
Loading…
Cancel
Save