Browse Source

feat 直播liveStream 铁粉dieHardFan all的接口interface and 文章视频articleVideo optimize

zhangrenyuan/feature-20250728113353-金币前端三期
zhangrenyuan 2 weeks ago
parent
commit
0e01884eab
  1. 256
      src/views/consume/addBeanConsume.vue
  2. 133
      src/views/consume/articleVideo.vue
  3. 455
      src/views/consume/dieHardFan.vue
  4. 395
      src/views/consume/liveStream.vue

256
src/views/consume/addBeanConsume.vue

@ -1,11 +1,259 @@
<script setup lang="ts">
<script setup>
import { ref, onMounted, reactive, computed, watch, nextTick } from 'vue'
import { ElMessage } from 'element-plus'
import { Plus } from '@element-plus/icons-vue'
import axios from 'axios'
import { ElMessageBox } from 'element-plus'
import API from '@/util/http'
import { uploadFile } from '@/util/request';
import request from '@/util/http'
import moment from 'moment'
import { e, range, re } from 'mathjs'
import { utils, read } from 'xlsx'
import throttle from 'lodash/throttle'
import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia";
const user = ref({})
const getUser = async function (jwcode) {
if (addForm.value.jwcode) {
addForm.value.jwcode = addForm.value.jwcode.replace(/\s/g, '');
} else {
ElMessage.error('请先输入精网号')
return false
}
try {
const result = await API({
url: '/beanUser/userCard',
data: {
jwcode: addForm.value.jwcode
}
})
if (result.code === 0) {
ElMessage.error(result.msg);
} else if (result.data === null) {
ElMessage.error("用户不存在");
} else {
user.value = result.data;
console.log("用户信息", user.value);
ElMessage.success("查询成功");
}
} catch (error) {
console.log("请求失败", error);
ElMessage.error("精网号错误");
}
}
const addForm = ref({
jwcode: '',
gode: '',
freeGode: '',
remark: '',
adminId: ''
})
const formRef = ref(null)
const adminStore = useAdminStore()
const { adminData } = storeToRefs(adminStore)
const rules = reactive({
jwcode: [
{ required: true, message: '请输入精网号', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (!value) {
callback(new Error('精网号不能为空'));
return;
}
if (/[^0-9]/.test(value)) {
callback(new Error('精网号只能包含数字'));
return;
}
callback();
}, trigger: 'blur'
}],
gode: [
{ required: true, message: '请输入永久金豆数', trigger: 'blur' },
{
validator: (rule, value, callback) => {
//
if (!/^\d+$/.test(value)) {
callback(new Error('请输入非负整数'));
return;
}
</script>
//
if (value.length > 6) {
callback(new Error('整数位数不能超过6位'));
return;
}
callback();
},
trigger: 'blur'
}
],
freeGode: [
{ required: true, message: '请输入免费金豆数', trigger: 'blur' },
{
validator: (rule, value, callback) => {
//
if (!/^\d+$/.test(value)) {
callback(new Error('请输入非负整数'));
return;
}
//
if (value.length > 6) {
callback(new Error('整数位数不能超过6位'));
return;
}
callback();
},
trigger: 'blur'
}
],
remark: [
{ required: true, message: '请输入备注', trigger: 'blur' }
]
});
//
const deleteAddForm = function () {
addForm.value = {
jwcode: '',
gode: '',
freeGode: '',
remark: '',
adminId: ''
}
}
const handleAddForm = async () => {
try {
await new Promise((resolve, reject) => {
formRef.value.validate((valid) => {
if (valid) {
if (Number(addForm.value.gode) === 0 && Number(addForm.value.freeGode) === 0) {
reject(new Error('永久金豆和付费金豆不能同时为0'));
}
resolve(); //
} else {
reject(new Error('请检查并完善表单信息')); //
}
});
});
console.log('adminData', adminData.value);
const result = await request({
url: '/bean/add',
data: {
jwcode: addForm.value.jwcode,
gode: addForm.value.gode,
freeGode: addForm.value.freeGode,
remark: addForm.value.remark,
adminId: adminData.adminId
}
})
} catch (error) {
console.log('金豆新增充值失败');
ElMessage.error(error.message || '操作失败');
}
}
</script>
<template> <template>
<div>addBeanConsume</div>
</template>
<div>
<el-form :model="addForm" :rules="rules" ref="formRef" label-width="auto" style="max-width: 600px" class="add-form">
<el-form-item prop="jwcode" label="精网号" label-position="left">
<el-input v-model="addForm.jwcode" style="width: 220px" />
<el-button type="primary" @click="getUser(addForm.jwcode)" style="margin-left: 20px">查询</el-button>
</el-form-item>
<el-form-item prop="gode" label="付费金豆" label-position="left">
<el-input v-model="addForm.gode" style="width: 100px" />
</el-form-item>
<el-form-item prop="freeGode" label="免费金豆" label-position="left">
<el-input v-model="addForm.freeGode" style="width: 100px" />
</el-form-item>
<el-form-item prop="remark" label="备注" label-position="left">
<el-input v-model="addForm.remark" style="width: 300px" :rows="5" maxlength="100" show-word-limit
type="textarea" />
</el-form-item>
<!-- <el-form-item prop="adminId" label="提交人">
<el-input style="width: 300px" :value="adminData.adminName" disabled placeholder="提交人姓名" />
</el-form-item> -->
<el-button @click="deleteAddForm" style="margin-left: 280px" type="success">重置</el-button>
<el-button type="primary" @click="handleAddForm"> 提交 </el-button>
</el-form>
<!-- 客户信息栏 -->
<el-card v-if="user.jwcode" style="width: 800px; float: right" class="customer-info">
<el-form :model="user" label-width="auto" style="max-width: 1000px" label-position="left">
<el-text size="large" style="margin-left: 20px">客户信息</el-text>
<!-- 第一行姓名 + 当前付费金豆 -->
<el-row style="margin-top: 20px">
<el-col :span="9">
<el-form-item label="姓名:">
<p style="color: #2fa1ff; margin-right: 5px">{{ user.name }}</p>
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label="当前付费金豆:">
<p style="color: #2fa1ff; margin-right: 5px" v-if="!isNaN(Number(user.permanentBean))">
{{ Number(user.permanentBean) }}
</p>
<!-- 如果不是有效的数字显示默认值 -->
<p v-else></p>
</el-form-item>
</el-col>
</el-row>
<!-- 第二行精网号 + 免费金豆 -->
<el-row >
<el-col :span="9">
<el-form-item label="精网号">
<p style="color: #2fa1ff; margin-right: 5px">{{ user.jwcode }}</p>
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label="当前免费金豆:">
<span style="color: #2fa1ff; margin-right: 5px" v-if="user.freeBean !== undefined">{{ user.freeBean }}
</span>
</el-form-item>
</el-col>
</el-row>
<!-- 第三行消费次数 + 所属门店 -->
<el-row>
<el-col :span="9">
<el-form-item label="所属门店">
<p style="color: #2fa1ff">{{ user.market }}</p>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="消费次数">
<p style="color: #2fa1ff; margin-right: 5px" v-if="user.consumeNum!=null">{{ user.consumeNum }}</p>
<p style="color: #2fa1ff; margin-right: 5px" v-else>{{ 0 }}</p>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</div>
</template>
<style scoped> <style scoped>
.add-form {
margin-top: 50px;
max-width: 50%;
float: left;
}
.customer-info {
max-width: 60%;
}
p {
margin: 0px;
}
.el-form-item {
margin-left: 50px;
}
</style> </style>

133
src/views/consume/articleVideo.vue

@ -43,7 +43,12 @@ const consumeTypes = ref([
{ label: '发福袋', value: 3 }, { label: '发福袋', value: 3 },
{ label: '付费直播', value: 4 }, { label: '付费直播', value: 4 },
{ label: '加入粉丝团', value: 5 }, { label: '加入粉丝团', value: 5 },
{ label: '发弹幕', value: 6 }
{ label: '发弹幕', value: 6 },
{ label: '单次付费', value: 7 },
{ label: '连续包月', value: 8 },
{ label: '打赏', value: 9 },
{ label: '打赏', value: 10 },
{ label: '付费购买', value: 11 },
]) ])
// //
@ -80,6 +85,28 @@ const getTime = ref({
// //
const dept = ref([]) const dept = ref([])
//
const getDept = async function () {
try {
//
const result = await request({
// url: '/general/dept',
url: '/beanConsume/getDept', // todo
data: {account:adminData.value.account}
})
console.log('请求地区列表成功', result)
//
dept.value = result.data
console.log('地区数据', dept.value)
} catch (error) {
console.log('请求地区列表失败', error)
ElMessage({
type: 'error',
message: '获取地区列表失败,请稍后重试'
})
}
}
// //
const filterChannel = (query) => { const filterChannel = (query) => {
@ -93,57 +120,6 @@ const filterChannel = (query) => {
const sortField = ref('') const sortField = ref('')
const sortOrder = ref('') const sortOrder = ref('')
// //
// const consumePlatform = [
// {
// value: '',
// label: ''
// },
// {
// value: 'HomilyChart',
// label: 'HomilyChart'
// },
// {
// value: 'HomilyLink',
// label: 'HomilyLink'
// },
// {
// value: 'ERP',
// label: 'ERP'
// },
// {
// value: '',
// label: ''
// },
// {
// value: '',
// label: ''
// },
// ]
// //
// const tableDataTotal = ref({})
// const permanentGold = ref(0)
// const freeGold = ref(0)
// const taskGold = ref(0)
// const totalGold = ref(0)
// //
// const permanentGolds = ref(0)
// const freeGolds = ref(0)
// const taskGolds = ref(0)
// //
// const goods = ref([])
// const totalGoldSearch = ref({
// jwcode: null,
// payPlatform: "",
// dept: "",
// startTime: "",
// endTime: "",
// goodsName: ""
// })
/* /*
====================方法================================= ====================方法=================================
@ -163,7 +139,7 @@ const getAdminData = async function () {
} }
} }
// todo
// const ConsumeSelectBy = async function (val) { // const ConsumeSelectBy = async function (val) {
// try { // try {
@ -283,7 +259,7 @@ const getAdminData = async function () {
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1 getObj.value.pageNum = 1
// ConsumeSelectBy() todo
// ConsumeSelectBy()
} }
// //
const reset = function () { const reset = function () {
@ -311,7 +287,7 @@ const reset = function () {
// //
// ConsumeSelectBy() todo
// ConsumeSelectBy()
console.log(' articleVideo', articleVideo.value) console.log(' articleVideo', articleVideo.value)
} }
// //
@ -351,7 +327,7 @@ const getYesterday = function () {
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = 'yesterday' // activeTimeRange.value = 'yesterday' //
// ConsumeSelectBy() //todo
// ConsumeSelectBy()
} }
// 7 // 7
const get7Days = function () { const get7Days = function () {
@ -370,49 +346,11 @@ const get7Days = function () {
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = '7days' // activeTimeRange.value = '7days' //
// ConsumeSelectBy() todo
// ConsumeSelectBy()
} }
//
// const getGoods = async function () {
// try {
// // POST
// const result = await request({
// url: '/general/goods',
// data: {}
// })
// //
// console.log('product', result)
// //
// goods.value = result.data
// console.log('goods ', goods.value) //
// } catch (error) {
// console.log('', error)
// //
// }
// }
//
const getDept = async function () {
try {
//
const result = await request({
// url: '/general/dept',
url: '/beanConsume/getDept', // todo
data: {account:adminData.value.account}
})
console.log('请求地区列表成功', result)
//
dept.value = result.data
console.log('地区数据', dept.value)
} catch (error) {
console.log('请求地区列表失败', error)
ElMessage({
type: 'error',
message: '获取地区列表失败,请稍后重试'
})
}
}
// // // //
// const handleSortChange = (column) => { // const handleSortChange = (column) => {
@ -502,7 +440,7 @@ const getExportList = async () => {
const result = await API({ url: '/export/export' }) const result = await API({ url: '/export/export' })
if (result.code === 200) { if (result.code === 200) {
const filteredData = result.data.filter(item => { const filteredData = result.data.filter(item => {
return item.type === 4; //4 // todo type
// return item.type === 4; //4 // todo type
}); });
exportList.value = filteredData exportList.value = filteredData
} else { } else {
@ -658,7 +596,6 @@ const getTagText = (state) => {
<el-table-column prop="dept" label="地区" width="110px" /> <el-table-column prop="dept" label="地区" width="110px" />
<el-table-column prop="type" label="类型" width="120px"> <el-table-column prop="type" label="类型" width="120px">
<template #default="scope"> <template #default="scope">
<!-- 假设 type 是数字需要转换为对应中文描述 -->
{{ consumeTypes.value.find(item => item.value === scope.row.type)?.label || '未知类型' }} {{ consumeTypes.value.find(item => item.value === scope.row.type)?.label || '未知类型' }}
</template> </template>
</el-table-column> </el-table-column>

455
src/views/consume/dieHardFan.vue

@ -21,8 +21,8 @@ const adminData = ref({})
// //
const tableData = ref([]) const tableData = ref([])
// liveStream
const dieHardFan = ref({
// beanConsumeFan
const beanConsumeFan = ref({
jwcode: null, jwcode: null,
dept: "", dept: "",
type: "", type: "",
@ -35,6 +35,32 @@ const dieHardFan = ref({
}) })
// //
const channels = ref([]) const channels = ref([])
//
const getChannel = async function () {
try {
const result = await request({
url: '/beanConsume/getLiveChannel', // todo
data: {account:adminData.value.account}
})
console.log('请求频道列表成功', result)
//
channels.value = result.data
console.log('频道数据', channels.value)
} catch (error) {
console.log('请求频道列表失败', error)
ElMessage({
type: 'error',
message: '获取频道列表失败,请稍后重试'
})
}
}
//
const filterChannel = (query) => {
if (query) {
return channels.value.filter(item => item.toLowerCase().includes(query.toLowerCase()));
}
return channels.value;
};
// //
const consumeTypes = ref([ const consumeTypes = ref([
@ -43,15 +69,17 @@ const consumeTypes = ref([
{ label: '发福袋', value: 3 }, { label: '发福袋', value: 3 },
{ label: '付费直播', value: 4 }, { label: '付费直播', value: 4 },
{ label: '加入粉丝团', value: 5 }, { label: '加入粉丝团', value: 5 },
{ label: '发弹幕', value: 6 }
{ label: '发弹幕', value: 6 },
{ label: '单次付费', value: 7 },
{ label: '连续包月', value: 8 }
]) ])
//
const handleTypeChange = (value) => {
if (value !== 1) {
dieHardFan.value.gift = ''
}
}
// //
// const handleTypeChange = (value) => {
// if (value !== 1) {
// beanConsumeFan.value.gift = ''
// }
// }
//------------------------ //------------------------
@ -81,69 +109,13 @@ const getTime = ref({
// //
const dept = ref([]) const dept = ref([])
//
const filterChannel = (query) => {
if (query) {
return channels.value.filter(item => item.toLowerCase().includes(query.toLowerCase()));
}
return channels.value;
};
// //
const sortField = ref('') const sortField = ref('')
const sortOrder = ref('') const sortOrder = ref('')
// //
// const consumePlatform = [
// {
// value: '',
// label: ''
// },
// {
// value: 'HomilyChart',
// label: 'HomilyChart'
// },
// {
// value: 'HomilyLink',
// label: 'HomilyLink'
// },
// {
// value: 'ERP',
// label: 'ERP'
// },
// {
// value: '',
// label: ''
// },
// {
// value: '',
// label: ''
// },
// ]
// //
// const tableDataTotal = ref({})
// const permanentGold = ref(0)
// const freeGold = ref(0)
// const taskGold = ref(0)
// const totalGold = ref(0)
// //
// const permanentGolds = ref(0)
// const freeGolds = ref(0)
// const taskGolds = ref(0)
// //
// const goods = ref([])
// const totalGoldSearch = ref({
// jwcode: null,
// payPlatform: "",
// dept: "",
// startTime: "",
// endTime: "",
// goodsName: ""
// })
/* /*
====================方法================================= ====================方法=================================
@ -163,144 +135,111 @@ const getAdminData = async function () {
} }
} }
// todo
// const ConsumeSelectBy = async function (val) {
// try {
// //
// if (typeof val === 'number') {
// getObj.value.pageNum = val
// }
// //
// if (getTime.value != null) {
// if (getTime.value.startTime != '' && getTime.value.endTime != '') {
// dieHardFan.value.startTime = formatTime(getTime.value[0])
// dieHardFan.value.endTime = formatTime(getTime.value[1])
// }
// } else {
// dieHardFan.value.startTime = ''
// dieHardFan.value.endTime = ''
// }
// dieHardFan.value.sortField = sortField.value
// dieHardFan.value.sortOrder = sortOrder.value
// console.log('_', dieHardFan.value.startTime)
// console.log('1', getObj.value)
// console.log('2', dieHardFan.value)
// // POST
// const result = await request({
// url: '/consume/selectBy',
// data: {
// pageNum: getObj.value.pageNum,
// pageSize: getObj.value.pageSize,
// dieHardFan: {
// ... dieHardFan.value,
// sortField: sortField.value,
// sortOrder: sortOrder.value
// }
// }
// })
// console.log('2', sortField)
// //
// // detail.value
// const detailWithoutSort = { ... dieHardFan.value }
// delete detailWithoutSort.sortField
// delete detailWithoutSort.sortOrder
// //
// totalGoldSearch.value.startTime = dieHardFan.value.startTime
// totalGoldSearch.value.endTime = dieHardFan.value.endTime
// totalGoldSearch.value.payPlatform = dieHardFan.value.payPlatform
// totalGoldSearch.value.dept = dieHardFan.value.dept
// totalGoldSearch.value.goodsName = dieHardFan.value.goodsName
// totalGoldSearch.value.jwcode = dieHardFan.value.jwcode
// //
// const resultTotalGold = await request({
// // url: '/consume/statsGold',
// url: '/consume/statsGold',
// data: totalGoldSearch.value
// })
// console.log("", resultTotalGold)
// if (resultTotalGold.code === 200 && resultTotalGold.data) {
// const data = resultTotalGold.data
// console.log(':', data)
// permanentGolds.value = Number(data.permanentGolds) || 0
// freeGolds.value = Number(data.freeGolds) || 0
// taskGolds.value = Number(data.taskGolds) || 0
// }
// //
// tableData.value = result.data.list
// tableDataTotal.value = resultTotalGold.data
// if (resultTotalGold.data == null) {
// console.log('2', resultTotalGold)
// // 西
// tableDataTotal.value = resultTotalGold.data
// }
// const sumGoldList = tableData.value.map(item => item.sumGold);
// console.log("sumGold", sumGoldList); // sumGold
// console.log('@@@@@@@@@@tableDataT', tableDataTotal.value.list)
// // totalGold.value = tableData.value.sum
// // //
// // permanentGold.value = parseFloat(
// // (tableDataTotal.value.list.sumGold / 100).toFixed(2)
// // )
// // freeGold.value = parseFloat(
// // (tableDataTotal.value.sumFcion / 100).toFixed(2)
// // )
// // taskGold.value = parseFloat(
// // (tableDataTotal.value.sumTcion / 100).toFixed(2)
// // )
// // totalGold.value = parseFloat(
// // (tableDataTotal.value.sumcion / 100).toFixed(2)
// // )
// console.log('tableData', tableData.value)
// //
// total.value = result.data.total
// console.log('total', total.value)
// } catch (error) {
// console.log('', error)
// //
// }
// }
const ConsumeSelectBy = async function (val) {
try {
//
if (typeof val === 'number') {
getObj.value.pageNum = val
}
//
if (getTime.value != null) {
if (getTime.value.startTime != '' && getTime.value.endTime != '') {
beanConsumeFan.value.startTime = formatTime(getTime.value[0])
beanConsumeFan.value.endTime = formatTime(getTime.value[1])
}
} else {
beanConsumeFan.value.startTime = ''
beanConsumeFan.value.endTime = ''
}
beanConsumeFan.value.sortField = sortField.value
beanConsumeFan.value.sortOrder = sortOrder.value
console.log('搜索参数_时间', beanConsumeFan.value.startTime)
console.log('搜索参数1', getObj.value)
console.log('搜索参数2', beanConsumeFan.value)
// POST
const result = await request({
url: '/beanConsume/selectFanBy',
data: {
pageNum: getObj.value.pageNum,
pageSize: getObj.value.pageSize,
beanConsumeFan: {
... beanConsumeFan.value,
jwcode: beanConsumeFan.value.jwcode ? String(beanConsumeFan.value.jwcode) : '',
dept: beanConsumeFan.value.dept || '',
channel: beanConsumeFan.value.channel || '',
startTime: beanConsumeFan.value.startTime || '',
endTime: beanConsumeFan.value.endTime || '',
sortField: beanConsumeFan.value.sortField || 'consumeTime',
sortOrder: beanConsumeFan.value.sortOrder || 'desc'
}
}
})
console.log('请求成功3', sortField)
console.log('接口响应结果',result);
if (result.code === 200 && result.data && result.data.list) {
tableData.value = result.data.list;
total.value = result.data.total;
}
//
// beanConsumeFan.value payType 1 7
const sumConsumeParams = {
beanConsumeFan: {
... beanConsumeFan.value,
payType: '7' // payType 7
}
};
// POST
const resultTotalGold = await request({
url: '/beanConsume/sumConsumeGold',
data: sumConsumeParams
});
console.log("总计", resultTotalGold)
if (resultTotalGold.code === 200 && resultTotalGold.data) {
const data = resultTotalGold.data;
console.log('获取到的金币数据:', data);
// permanentBeanfreeBeantotalNum
permanentBean.value = Number(data.permanentBean) || 0;
freeBean.value = Number(data.freeBean) || 0;
totalNum.value = Number(data.totalNum) || 0;
}
//
total.value = result.data.total
console.log('total', total.value)
} catch (error) {
console.log('请求失败', error)
}
}
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1 getObj.value.pageNum = 1
// ConsumeSelectBy() todo
ConsumeSelectBy()
} }
// //
const reset = function () { const reset = function () {
console.log('兄弟,你点了重置') console.log('兄弟,你点了重置')
dieHardFan.value.jwcode = null
beanConsumeFan.value.jwcode = null
dieHardFan.value.type = ''
dieHardFan.value.gift = ''
dieHardFan.value.channel = ''
dieHardFan.value.liveRoom = ''
beanConsumeFan.value.type = ''
beanConsumeFan.value.gift = ''
beanConsumeFan.value.channel = ''
beanConsumeFan.value.liveRoom = ''
dieHardFan.value.dept = ''
beanConsumeFan.value.dept = ''
dieHardFan.value.startTime = ''
beanConsumeFan.value.startTime = ''
dieHardFan.value.endTime = ''
beanConsumeFan.value.endTime = ''
@ -311,8 +250,8 @@ const reset = function () {
// //
// ConsumeSelectBy() todo
console.log(' dieHardFan', dieHardFan.value)
ConsumeSelectBy()
console.log(' beanConsumeFan', beanConsumeFan.value)
} }
// //
const getToday = function () { const getToday = function () {
@ -331,7 +270,7 @@ const getToday = function () {
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = 'today' // activeTimeRange.value = 'today' //
// ConsumeSelectBy()
ConsumeSelectBy
} }
// //
const getYesterday = function () { const getYesterday = function () {
@ -351,7 +290,7 @@ const getYesterday = function () {
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = 'yesterday' // activeTimeRange.value = 'yesterday' //
// ConsumeSelectBy() //todo
ConsumeSelectBy //todo
} }
// 7 // 7
const get7Days = function () { const get7Days = function () {
@ -370,26 +309,9 @@ const get7Days = function () {
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = '7days' // activeTimeRange.value = '7days' //
// ConsumeSelectBy() todo
ConsumeSelectBy
} }
//
// const getGoods = async function () {
// try {
// // POST
// const result = await request({
// url: '/general/goods',
// data: {}
// })
// //
// console.log('product', result)
// //
// goods.value = result.data
// console.log('goods ', goods.value) //
// } catch (error) {
// console.log('', error)
// //
// }
// }
// //
const getDept = async function () { const getDept = async function () {
@ -414,38 +336,34 @@ const getDept = async function () {
} }
} }
// //
// const handleSortChange = (column) => {
// console.log('', column.prop)
// console.log('', column.order)
// if (column.prop === 'permanentGold') {
// sortField.value = 'permanentGold'
// } else if (column.prop === 'taskGold') {
// sortField.value = 'taskGold'
// } else if (column.prop === 'freeGold') {
// sortField.value = 'freeGold'
// } else if (column.prop === 'createTime') {
// sortField.value = 'createTime'
// }
// sortOrder.value = column.order === 'ascending' ? 'DESC' : 'ASC'
// ConsumeSelectBy()
// }
//
const handleSortChange = (column) => {
console.log('排序字段:', column.prop)
console.log('排序方式:', column.order)
if (column.prop === 'beanNum') {
sortField.value = 'beanNum'
} else if (column.prop === 'consumeTime') {
sortField.value = 'consumeTime'
}
sortOrder.value = column.order === 'ascending' ? 'DESC' : 'ASC'
selectLiveBy()
}
// const handlePageSizeChange = function (val) {
// getObj.value.pageSize = val
// ConsumeSelectBy()
// }
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
selectLiveBy()
}
// const handleCurrentChange = function (val) {
// getObj.value.pageNum = val
// ConsumeSelectBy()
// }
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
selectLiveBy()
}
/* /*
====================计算属性================================= ====================计算属性=================================
*/ */
// //
// const sumGold = computed(() => permanentGolds.value + freeGolds.value + taskGolds.value)
// const totalBean = computed(() => permanentBean.value + freeBean.value)
/* /*
====================监听================================= ====================监听=================================
@ -458,26 +376,26 @@ const getDept = async function () {
onMounted(async function () { onMounted(async function () {
await getAdminData() await getAdminData()
// await ConsumeSelectBy()
// // getActivity();
await ConsumeSelectBy()
await getChannel()
await getDept() await getDept()
// await getGoods()
}) })
const exportExcel = async function () { const exportExcel = async function () {
// const params = { //
// dieHardFan: {
// jwcode: dieHardFan.value.jwcode || '',
// payPlatform: dieHardFan.value.payPlatform || '',
// dept: dieHardFan.value.dept || '',
// startTime: dieHardFan.value.startTime || '',
// endTime: dieHardFan.value.endTime || '',
// goodsName: dieHardFan.value.goodsName || '',
// sortField: sortField.value || '',
// sortOrder: sortOrder.value || ''
// }
// }
const params = { //
beanConsumeFan: {
... beanConsumeFan.value,
jwcode: beanConsumeFan.value.jwcode ? String(beanConsumeFan.value.jwcode) : '',
dept: beanConsumeFan.value.dept || '',
channel: beanConsumeFan.value.channel || '',
startTime: beanConsumeFan.value.startTime || '',
endTime: beanConsumeFan.value.endTime || '',
sortField: beanConsumeFan.value.sortField || 'consumeTime',
sortOrder: beanConsumeFan.value.sortOrder || 'desc'
}
}
const res = await API({ url: '/export/exportConsume', data: params }) const res = await API({ url: '/export/exportConsume', data: params })
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('导出成功') ElMessage.success('导出成功')
@ -566,13 +484,13 @@ const getTagText = (state) => {
<el-col :span="4"> <el-col :span="4">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1">精网号</el-text> <el-text class="mx-1">精网号</el-text>
<el-input v-model="dieHardFan.jwcode" placeholder="请输入精网号" style="width: 150px" clearable />
<el-input v-model="beanConsumeFan.jwcode" placeholder="请输入精网号" style="width: 150px" clearable />
</div> </div>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1">地区</el-text> <el-text class="mx-1">地区</el-text>
<el-select v-model="dieHardFan.dept" placeholder="请选择地区" style="width: 150px" clearable>
<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-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
@ -581,7 +499,7 @@ const getTagText = (state) => {
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1">频道</el-text> <el-text class="mx-1">频道</el-text>
<el-select <el-select
v-model="dieHardFan.channel"
v-model="beanConsumeFan.channel"
placeholder="请选择频道" placeholder="请选择频道"
style="width: 180px" style="width: 180px"
clearable clearable
@ -615,7 +533,6 @@ const getTagText = (state) => {
<el-button type="success" @click="reset()">重置</el-button> <el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button> <el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出Excel</el-button> <el-button type="primary" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button> <el-button type="primary" @click="openExportList">查看导出列表</el-button>
</div> </div>
</el-col> </el-col>
@ -627,8 +544,8 @@ const getTagText = (state) => {
<el-col> <el-col>
<el-card> <el-card>
<div> <div>
金豆总数{{ Math.abs(permanentGolds + freeGolds + taskGolds) / 100 }}付费金豆数{{ Math.abs(permanentGolds) / 100 }}免费金豆数{{
Math.abs(freeGolds) / 100
金豆总数{{ Math.abs(permanentBean+freeBean) }}付费金豆数{{ Math.abs(permanentBean) }}免费金豆数{{
Math.abs(freeBean)
}} }}
</div> </div>
<!-- 设置表格容器的高度和滚动样式 --> <!-- 设置表格容器的高度和滚动样式 -->
@ -646,7 +563,7 @@ 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="sumGold" label="金豆数量" width="120px">
<el-table-column prop="beanNum" label="金豆数量" width="120px">
<template #default="scope"> <template #default="scope">
{{ {{
(scope.row.taskGold + (scope.row.taskGold +
@ -656,10 +573,14 @@ const getTagText = (state) => {
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="channel" label="频道" width="120px" /> <el-table-column prop="channel" label="频道" width="120px" />
<el-table-column prop="memberType" label="会员类型" width="120px" />
<el-table-column prop="joinMethod" label="加入方式" width="120px" />
<el-table-column prop="joinTime" label="加入时间" width="180px" />
<el-table-column prop="expireTime" label="到期时间" width="180px" />
<el-table-column prop="type" label="会员类型" width="120px" >
<template #default="scope">
{{ consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型' }}
</template>
</el-table-column>
<!-- <el-table-column prop="joinMethod" label="加入方式" width="120px" /> -->
<el-table-column prop="consumeTime" label="加入时间" width="180px" />
<!-- <el-table-column prop="consumeTime" label="到期时间" width="180px" /> -->
</el-table> </el-table>
</div> </div>

395
src/views/consume/liveStream.vue

@ -21,7 +21,7 @@ const adminData = ref({})
// //
const tableData = ref([]) const tableData = ref([])
// liveStream
// beanConsumeLive
const beanConsumeLive = ref({ const beanConsumeLive = ref({
jwcode: null, jwcode: null,
dept: "", dept: "",
@ -35,8 +35,49 @@ const beanConsumeLive = ref({
sortOrder: '' sortOrder: ''
}) })
//
const gifts = ref([])
//
const getGift = async function () {
try {
const result = await request({
url: '/beanConsume/getLiveGift', // todo
data: {account:adminData.value.account}
})
console.log('请求礼物列表成功', result)
//
gifts.value = result.data
console.log('礼物数据', gifts.value)
} catch (error) {
console.log('请求礼物列表失败', error)
ElMessage({
type: 'error',
message: '获取礼物列表失败,请稍后重试'
})
}
}
// //
const channels = ref([]) const channels = ref([])
//
const getChannel = async function () {
try {
const result = await request({
url: '/beanConsume/getLiveChannel', // todo
data: {account:adminData.value.account}
})
console.log('请求频道列表成功', result)
//
channels.value = result.data
console.log('频道数据', channels.value)
} catch (error) {
console.log('请求频道列表失败', error)
ElMessage({
type: 'error',
message: '获取频道列表失败,请稍后重试'
})
}
}
// //
const consumeTypes = ref([ const consumeTypes = ref([
@ -47,7 +88,6 @@ const consumeTypes = ref([
{ label: '加入粉丝团', value: 5 }, { label: '加入粉丝团', value: 5 },
{ label: '发弹幕', value: 6 } { label: '发弹幕', value: 6 }
]) ])
// //
const handleTypeChange = (value) => { const handleTypeChange = (value) => {
if (value !== 1) { if (value !== 1) {
@ -77,67 +117,38 @@ const getTime = ref({
startTime: '', startTime: '',
endTime: '' endTime: ''
}) })
//
// const activity = ref([])
// //
const dept = ref([]) const dept = ref([])
//
const getDept = async function () {
try {
//
const result = await request({
// url: '/general/dept',
url: '/beanConsume/getDept', // todo
data: {account:adminData.value.account}
})
console.log('请求地区列表成功', result)
//
dept.value = result.data
console.log('地区数据', dept.value)
} catch (error) {
console.log('请求地区列表失败', error)
ElMessage({
type: 'error',
message: '获取地区列表失败,请稍后重试'
})
}
}
// //
const sortField = ref('') const sortField = ref('')
const sortOrder = ref('') const sortOrder = ref('')
// //
// const consumePlatform = [
// {
// value: '',
// label: ''
// },
// {
// value: 'HomilyChart',
// label: 'HomilyChart'
// },
// {
// value: 'HomilyLink',
// label: 'HomilyLink'
// },
// {
// value: 'ERP',
// label: 'ERP'
// },
// {
// value: '',
// label: ''
// },
// {
// value: '',
// label: ''
// },
// ]
// //
// const tableDataTotal = ref({})
// const permanentGold = ref(0)
// const freeGold = ref(0)
// const taskGold = ref(0)
// const totalGold = ref(0)
// //
// const permanentGolds = ref(0)
// const freeGolds = ref(0)
// const taskGolds = ref(0)
// //
// const goods = ref([])
// const totalGoldSearch = ref({
// jwcode: null,
// payPlatform: "",
// dept: "",
// startTime: "",
// endTime: "",
// goodsName: ""
// })
/* /*
====================方法================================= ====================方法=================================
@ -166,22 +177,21 @@ const selectLiveBy = async function (val) {
} }
// //
if (getTime.value != null) {
if (getTime.value.startTime != '' && getTime.value.endTime != '') {
beanConsumeLive.value.startTime = formatTime(getTime.value[0])
beanConsumeLive.value.endTime = formatTime(getTime.value[1])
}
//
if (Array.isArray(getTime.value) && getTime.value.length === 2) {
beanConsumeLive.value.startTime = formatTime(getTime.value[0])
beanConsumeLive.value.endTime = formatTime(getTime.value[1])
} else { } else {
beanConsumeLive.value.startTime = ''
beanConsumeLive.value.endTime = ''
beanConsumeLive.value.startTime = ''
beanConsumeLive.value.endTime = ''
} }
beanConsumeLive.value.sortField = sortField.value
beanConsumeLive.value.sortOrder = sortOrder.value
//
beanConsumeLive.value.sortField = sortField.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
@ -190,97 +200,80 @@ const selectLiveBy = async function (val) {
data: { data: {
pageNum: getObj.value.pageNum, pageNum: getObj.value.pageNum,
pageSize: getObj.value.pageSize, pageSize: getObj.value.pageSize,
beanConsumeLive: {
... beanConsumeLive.value,
sortField: sortField.value,
sortOrder: sortOrder.value
beanConsumeLive: {
...beanConsumeLive.value,
jwcode: beanConsumeLive.value.jwcode ? String(beanConsumeLive.value.jwcode) : '',
dept: beanConsumeLive.value.dept || '',
type: beanConsumeLive.value.type || '',
gift: beanConsumeLive.value.gift || '',
beanNum: beanConsumeLive.value.beanNum || '',
channel: beanConsumeLive.value.channel || '',
liveName: beanConsumeLive.value.liveName || '',
startTime: beanConsumeLive.value.startTime || '',
endTime: beanConsumeLive.value.endTime || '',
sortField: beanConsumeLive.value.sortField || 'consumeTime',
sortOrder: beanConsumeLive.value.sortOrder || 'desc'
} }
} }
}) })
console.log('请求成功2', sortField) console.log('请求成功2', sortField)
console.log('接口响应结果', result); //
if (result.code === 200 && result.data && result.data.list) {
tableData.value = result.data.list;
total.value = result.data.total;
}
// beanConsumeLive.value payType 1
const sumConsumeParams = {
beanConsumeLive: {
...beanConsumeLive.value,
payType: '1' // payType 1
}
};
// //
// // detail.value
// const detailWithoutSort = { ... beanConsumeLive.value }
// delete detailWithoutSort.sortField
// delete detailWithoutSort.sortOrder
// //
// totalGoldSearch.value.startTime = beanConsumeLive.value.startTime
// totalGoldSearch.value.endTime = beanConsumeLive.value.endTime
// totalGoldSearch.value.dept = beanConsumeLive.value.dept
// totalGoldSearch.value.goodsName = beanConsumeLive.value.goodsName
// totalGoldSearch.value.jwcode = beanConsumeLive.value.jwcode
// //
// const resultTotalGold = await request({
// // url: '/consume/statsGold',
// url: '/consume/statsGold',
// data: totalGoldSearch.value
// })
// console.log("", resultTotalGold)
// if (resultTotalGold.code === 200 && resultTotalGold.data) {
// const data = resultTotalGold.data
// console.log(':', data)
// permanentGolds.value = Number(data.permanentGolds) || 0
// freeGolds.value = Number(data.freeGolds) || 0
// taskGolds.value = Number(data.taskGolds) || 0
// }
// POST
const resultTotalGold = await request({
url: '/beanConsume/sumConsumeGold',
data: sumConsumeParams
});
// //
// tableData.value = result.data.list
// tableDataTotal.value = resultTotalGold.data
// if (resultTotalGold.data == null) {
// console.log('2', resultTotalGold)
// // 西
// tableDataTotal.value = resultTotalGold.data
// }
console.log("总计", resultTotalGold);
// const sumGoldList = tableData.value.map(item => item.sumGold);
// console.log("sumGold", sumGoldList); // sumGold
if (resultTotalGold.code === 200 && resultTotalGold.data) {
const data = resultTotalGold.data;
console.log('获取到的金币数据:', data);
// console.log('@@@@@@@@@@tableDataT', tableDataTotal.value.list)
// permanentBeanfreeBeantotalNum
permanentBean.value = Number(data.permanentBean) || 0;
freeBean.value = Number(data.freeBean) || 0;
totalNum.value = Number(data.totalNum) || 0;
}
// console.log('tableData', tableData.value)
// //
total.value = result.data.total total.value = result.data.total
console.log('total', total.value) console.log('total', total.value)
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
//
} }
} }
// //
const search = function () { const search = function () {
getObj.value.pageNum = 1 getObj.value.pageNum = 1
// selectLiveBy() todo
selectLiveBy()
} }
// //
const reset = function () { const reset = function () {
console.log('兄弟,你点了重置') console.log('兄弟,你点了重置')
beanConsumeLive.value.jwcode = null beanConsumeLive.value.jwcode = null
beanConsumeLive.value.type = '' beanConsumeLive.value.type = ''
beanConsumeLive.value.gift = '' beanConsumeLive.value.gift = ''
beanConsumeLive.value.channel = '' beanConsumeLive.value.channel = ''
beanConsumeLive.value.liveName = '' beanConsumeLive.value.liveName = ''
beanConsumeLive.value.dept = '' beanConsumeLive.value.dept = ''
beanConsumeLive.value.startTime = '' beanConsumeLive.value.startTime = ''
beanConsumeLive.value.endTime = '' beanConsumeLive.value.endTime = ''
sortField.value = '' sortField.value = ''
sortOrder.value = '' sortOrder.value = ''
getTime.value = {} getTime.value = {}
@ -308,7 +301,7 @@ const getToday = function () {
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = 'today' // activeTimeRange.value = 'today' //
// selectLiveBy()
selectLiveBy()
} }
// //
const getYesterday = function () { const getYesterday = function () {
@ -328,7 +321,7 @@ const getYesterday = function () {
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = 'yesterday' // activeTimeRange.value = 'yesterday' //
// selectLiveBy() //todo
selectLiveBy()
} }
// 7 // 7
const get7Days = function () { const get7Days = function () {
@ -347,82 +340,40 @@ const get7Days = function () {
console.log('getTime', getTime.value) console.log('getTime', getTime.value)
activeTimeRange.value = '7days' // activeTimeRange.value = '7days' //
// selectLiveBy() todo
selectLiveBy()
} }
//
// const getGoods = async function () {
// try {
// // POST
// const result = await request({
// url: '/general/goods',
// data: {}
// })
// //
// console.log('product', result)
// //
// goods.value = result.data
// console.log('goods ', goods.value) //
// } catch (error) {
// console.log('', error)
// //
// }
// }
//
const getDept = async function () {
try {
//
const result = await request({
// url: '/general/dept',
url: '/beanConsume/getDept', // todo
data: {account:adminData.value.account}
})
console.log('请求地区列表成功', result)
//
dept.value = result.data
console.log('地区数据', dept.value)
} catch (error) {
console.log('请求地区列表失败', error)
ElMessage({
type: 'error',
message: '获取地区列表失败,请稍后重试'
})
//
const handleSortChange = (column) => {
console.log('排序字段:', column.prop)
console.log('排序方式:', column.order)
if (column.prop === 'beanNum') {
sortField.value = 'beanNum'
} else if (column.prop === 'consumeTime') {
sortField.value = 'consumeTime'
} }
sortOrder.value = column.order === 'ascending' ? 'DESC' : 'ASC'
selectLiveBy()
}
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
selectLiveBy()
} }
// //
// const handleSortChange = (column) => {
// console.log('', column.prop)
// console.log('', column.order)
// if (column.prop === 'permanentGold') {
// sortField.value = 'permanentGold'
// } else if (column.prop === 'taskGold') {
// sortField.value = 'taskGold'
// } else if (column.prop === 'freeGold') {
// sortField.value = 'freeGold'
// } else if (column.prop === 'createTime') {
// sortField.value = 'createTime'
// }
// sortOrder.value = column.order === 'ascending' ? 'DESC' : 'ASC'
// selectLiveBy()
// }
// const handlePageSizeChange = function (val) {
// getObj.value.pageSize = val
// selectLiveBy()
// }
// const handleCurrentChange = function (val) {
// getObj.value.pageNum = val
// selectLiveBy()
// }
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
selectLiveBy()
}
/* /*
====================计算属性================================= ====================计算属性=================================
*/ */
// //
// const sumGold = computed(() => permanentGolds.value + freeGolds.value + taskGolds.value)
// const totalBean = computed(() => permanentBean.value + freeBean.value)
/* /*
====================监听================================= ====================监听=================================
@ -435,26 +386,30 @@ const getDept = async function () {
onMounted(async function () { onMounted(async function () {
await getAdminData() await getAdminData()
// await selectLiveBy()
// // getActivity();
await selectLiveBy()
await getDept() await getDept()
// await getGoods()
await getGift()
await getChannel()
}) })
const exportExcel = async function () { const exportExcel = async function () {
// const params = { //
// beanConsumeLive: {
// jwcode: beanConsumeLive.value.jwcode || '',
// payPlatform: beanConsumeLive.value.payPlatform || '',
// dept: beanConsumeLive.value.dept || '',
// startTime: beanConsumeLive.value.startTime || '',
// endTime: beanConsumeLive.value.endTime || '',
// goodsName: beanConsumeLive.value.goodsName || '',
// sortField: sortField.value || '',
// sortOrder: sortOrder.value || ''
// }
// }
const params = {
beanConsumeLive: {
...beanConsumeLive.value,
jwcode: beanConsumeLive.value.jwcode ? String(beanConsumeLive.value.jwcode) : '',
dept: beanConsumeLive.value.dept || '',
type: beanConsumeLive.value.type || '',
gift: beanConsumeLive.value.gift || '',
beanNum: beanConsumeLive.value.beanNum || '',
channel: beanConsumeLive.value.channel || '',
liveName: beanConsumeLive.value.liveName || '',
startTime: beanConsumeLive.value.startTime || '',
endTime: beanConsumeLive.value.endTime || '',
sortField: sortField.value || 'consumeTime',
sortOrder: sortOrder.value || 'desc'
}
}
const res = await API({ url: '/export/exportConsume', data: params }) const res = await API({ url: '/export/exportConsume', data: params })
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('导出成功') ElMessage.success('导出成功')
@ -566,7 +521,7 @@ const getTagText = (state) => {
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1">礼物名称</el-text> <el-text class="mx-1">礼物名称</el-text>
<el-select v-model="beanConsumeLive.gift" placeholder="请选择礼物名称" style="width: 140px" clearable> <el-select v-model="beanConsumeLive.gift" placeholder="请选择礼物名称" style="width: 140px" clearable>
<el-option v-for="(item, index) in goods" :key="index" :label="item" :value="item" />
<el-option v-for="(item, index) in gifts" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
</el-col> </el-col>
@ -596,7 +551,7 @@ const getTagText = (state) => {
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" >充值时间</el-text>
<el-text class="mx-1" >消费时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间" <el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange" /> end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange" />
<el-button @click="getToday()" style="margin-left: 10px" <el-button @click="getToday()" style="margin-left: 10px"
@ -605,10 +560,7 @@ const getTagText = (state) => {
:type="activeTimeRange === 'yesterday' ? 'primary' : ''"> </el-button> :type="activeTimeRange === 'yesterday' ? 'primary' : ''"> </el-button>
<el-button @click="get7Days()" style="margin-left: 10px" <el-button @click="get7Days()" style="margin-left: 10px"
:type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天</el-button> :type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天</el-button>
<!-- </div>
</el-col>
<el-col :span="3">
<div class="head-card-btn"> -->
<el-button type="success" @click="reset()">重置</el-button> <el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button> <el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出excel</el-button> <el-button type="primary" @click="exportExcel()">导出excel</el-button>
@ -623,8 +575,8 @@ const getTagText = (state) => {
<el-col> <el-col>
<el-card> <el-card>
<div> <div>
金豆总数{{ Math.abs(permanentGolds + freeGolds + taskGolds) / 100 }}付费金豆数{{ Math.abs(permanentGolds) / 100 }}免费金豆数{{
Math.abs(freeGolds) / 100
金豆总数{{ Math.abs(permanentBean+freeBean) }}付费金豆数{{ Math.abs(permanentBean) }}免费金豆数{{
Math.abs(freeBean)
}} }}
</div> </div>
<!-- 设置表格容器的高度和滚动样式 --> <!-- 设置表格容器的高度和滚动样式 -->
@ -642,19 +594,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="type" label="类型" width="120px" />
<el-table-column prop="sumGold" label="金豆数量" width="120px">
<el-table-column prop="type" label="类型" width="120px" >
<template #default="scope"> <template #default="scope">
{{
(scope.row.taskGold +
scope.row.freeGold +
scope.row.permanentGold) / 100
}}
{{ consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="beanNum" label="金豆数量" width="120px">
</el-table-column>
<el-table-column prop="channel" label="频道" width="120px" /> <el-table-column prop="channel" 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="createTime" label="消费时间" sortable="custom" width="180px" />
<el-table-column prop="consumeTime" label="消费时间" sortable="custom" width="180px" />
</el-table> </el-table>
</div> </div>
@ -679,9 +628,9 @@ const getTagText = (state) => {
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间">
<el-table-column prop="consumeTime" label="创建时间">
<template #default="scope"> <template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
{{ moment(scope.row.consumeTime).format('YYYY-MM-DD HH:mm:ss') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">

Loading…
Cancel
Save