From 0e01884eab5b2bb1238a51db6c9c55e7941459a1 Mon Sep 17 00:00:00 2001 From: zhangrenyuan <18990852002@163.com> Date: Thu, 31 Jul 2025 17:49:50 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E7=9B=B4=E6=92=ADliveStream=20=E9=93=81?= =?UTF-8?q?=E7=B2=89dieHardFan=20all=E7=9A=84=E6=8E=A5=E5=8F=A3interface?= =?UTF-8?q?=20and=20=E6=96=87=E7=AB=A0=E8=A7=86=E9=A2=91articleVideo=20opt?= =?UTF-8?q?imize?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/consume/addBeanConsume.vue | 256 +++++++++++++++++++- src/views/consume/articleVideo.vue | 133 +++------- src/views/consume/dieHardFan.vue | 455 +++++++++++++++-------------------- src/views/consume/liveStream.vue | 395 +++++++++++++----------------- 4 files changed, 647 insertions(+), 592 deletions(-) diff --git a/src/views/consume/addBeanConsume.vue b/src/views/consume/addBeanConsume.vue index 399ab7f..6613829 100644 --- a/src/views/consume/addBeanConsume.vue +++ b/src/views/consume/addBeanConsume.vue @@ -1,11 +1,259 @@ - + // 检查位数 + 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 || '操作失败'); + } +} + +
+ + + + 查询 + + + + + + + + + + + + 重置 + 提交 + + + + + 客户信息 + + + + + +

{{ user.name }}

+
+
+ + +

+ {{ Number(user.permanentBean) }} +

+ +

+
+
+
+ + + + + +

{{ user.jwcode }}

+
+
+ + + {{ user.freeBean }} + + + +
+ + + + +

{{ user.market }}

+
+
+ + +

{{ user.consumeNum }}

+

{{ 0 }}

+
+
+
+
+
+ + +
+ \ No newline at end of file diff --git a/src/views/consume/articleVideo.vue b/src/views/consume/articleVideo.vue index 99a6226..92a6c9d 100644 --- a/src/views/consume/articleVideo.vue +++ b/src/views/consume/articleVideo.vue @@ -43,7 +43,12 @@ const consumeTypes = ref([ { label: '发福袋', value: 3 }, { label: '付费直播', value: 4 }, { 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 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) => { @@ -93,57 +120,6 @@ const filterChannel = (query) => { const sortField = 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) { // try { @@ -283,7 +259,7 @@ const getAdminData = async function () { // 搜索 const search = function () { getObj.value.pageNum = 1 - // ConsumeSelectBy() todo + // ConsumeSelectBy() } // 重置 const reset = function () { @@ -311,7 +287,7 @@ const reset = function () { // 点完重置后,重新请求数据 - // ConsumeSelectBy() todo + // ConsumeSelectBy() console.log(' articleVideo', articleVideo.value) } // 今天 @@ -351,7 +327,7 @@ const getYesterday = function () { console.log('getTime', getTime.value) activeTimeRange.value = 'yesterday' // 标记当前激活状态 - // ConsumeSelectBy() //todo + // ConsumeSelectBy() } // 近7天 const get7Days = function () { @@ -370,49 +346,11 @@ const get7Days = function () { console.log('getTime', getTime.value) 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) => { @@ -502,7 +440,7 @@ const getExportList = async () => { const result = await API({ url: '/export/export' }) if (result.code === 200) { const filteredData = result.data.filter(item => { - return item.type === 4; //4表示金币消耗列表 // todo 修改对应type + // return item.type === 4; //4表示金币消耗列表 // todo 修改对应type }); exportList.value = filteredData } else { @@ -658,7 +596,6 @@ const getTagText = (state) => { diff --git a/src/views/consume/dieHardFan.vue b/src/views/consume/dieHardFan.vue index ac43bd4..a10cc72 100644 --- a/src/views/consume/dieHardFan.vue +++ b/src/views/consume/dieHardFan.vue @@ -21,8 +21,8 @@ const adminData = ref({}) // 充值明细表格 const tableData = ref([]) -// 搜索liveStream 表单 -const dieHardFan = ref({ +// 搜索beanConsumeFan 表单 +const beanConsumeFan = ref({ jwcode: null, dept: "", type: "", @@ -35,6 +35,32 @@ const dieHardFan = 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([ @@ -43,15 +69,17 @@ const consumeTypes = ref([ { label: '发福袋', value: 3 }, { label: '付费直播', value: 4 }, { 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 filterChannel = (query) => { - if (query) { - return channels.value.filter(item => item.toLowerCase().includes(query.toLowerCase())); - } - return channels.value; -}; + // 新增排序字段和排序方式 const sortField = 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); + + // 返回字段为 permanentBean、freeBean、totalNum + 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 () { getObj.value.pageNum = 1 - // ConsumeSelectBy() todo + ConsumeSelectBy() } // 重置 const reset = function () { 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 () { @@ -331,7 +270,7 @@ const getToday = function () { console.log('getTime', getTime.value) activeTimeRange.value = 'today' // 标记当前激活状态 - // ConsumeSelectBy() + ConsumeSelectBy } // 昨天 const getYesterday = function () { @@ -351,7 +290,7 @@ const getYesterday = function () { console.log('getTime', getTime.value) activeTimeRange.value = 'yesterday' // 标记当前激活状态 - // ConsumeSelectBy() //todo + ConsumeSelectBy //todo } // 近7天 const get7Days = function () { @@ -370,26 +309,9 @@ const get7Days = function () { console.log('getTime', getTime.value) 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 () { @@ -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 () { await getAdminData() - // await ConsumeSelectBy() - // // getActivity(); + await ConsumeSelectBy() + await getChannel() await getDept() - // await getGoods() + }) 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 }) if (res.code === 200) { ElMessage.success('导出成功') @@ -566,13 +484,13 @@ const getTagText = (state) => {
精网号: - +
地区: - +
@@ -581,7 +499,7 @@ const getTagText = (state) => {
频道: { 重置 查询 导出Excel - 查看导出列表
@@ -627,8 +544,8 @@ const getTagText = (state) => {
- 金豆总数:{{ Math.abs(permanentGolds + freeGolds + taskGolds) / 100 }},付费金豆数:{{ Math.abs(permanentGolds) / 100 }},免费金豆数:{{ - Math.abs(freeGolds) / 100 + 金豆总数:{{ Math.abs(permanentBean+freeBean) }},付费金豆数:{{ Math.abs(permanentBean) }},免费金豆数:{{ + Math.abs(freeBean) }}
@@ -646,7 +563,7 @@ const getTagText = (state) => { - + - - - - + + + + + + diff --git a/src/views/consume/liveStream.vue b/src/views/consume/liveStream.vue index 94ca7de..6c36deb 100644 --- a/src/views/consume/liveStream.vue +++ b/src/views/consume/liveStream.vue @@ -21,7 +21,7 @@ const adminData = ref({}) // 充值明细表格 const tableData = ref([]) -// 搜索liveStream 表单 +// 搜索beanConsumeLive 表单 const beanConsumeLive = ref({ jwcode: null, dept: "", @@ -35,8 +35,49 @@ const beanConsumeLive = ref({ 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 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([ @@ -47,7 +88,6 @@ const consumeTypes = ref([ { label: '加入粉丝团', value: 5 }, { label: '发弹幕', value: 6 } ]) - // 处理类型选择变化 const handleTypeChange = (value) => { if (value !== 1) { @@ -77,67 +117,38 @@ const getTime = ref({ startTime: '', endTime: '' }) -// 搜索活动列表 -// const activity = 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 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 { - 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('搜索参数1', getObj.value) - console.log('搜索参数2', beanConsumeLive.value) // 发送POST请求 @@ -190,97 +200,80 @@ const selectLiveBy = async function (val) { data: { pageNum: getObj.value.pageNum, 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('接口响应结果', 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) + // 返回字段为 permanentBean、freeBean、totalNum + 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 console.log('total', total.value) } catch (error) { console.log('请求失败', error) - // 在这里可以处理错误逻辑,比如显示错误提示等 } } // 搜索 const search = function () { getObj.value.pageNum = 1 - // selectLiveBy() todo + selectLiveBy() } // 重置 const reset = function () { console.log('兄弟,你点了重置') beanConsumeLive.value.jwcode = null - beanConsumeLive.value.type = '' beanConsumeLive.value.gift = '' beanConsumeLive.value.channel = '' beanConsumeLive.value.liveName = '' - beanConsumeLive.value.dept = '' - beanConsumeLive.value.startTime = '' - beanConsumeLive.value.endTime = '' - - - sortField.value = '' sortOrder.value = '' getTime.value = {} @@ -308,7 +301,7 @@ const getToday = function () { console.log('getTime', getTime.value) activeTimeRange.value = 'today' // 标记当前激活状态 - // selectLiveBy() + selectLiveBy() } // 昨天 const getYesterday = function () { @@ -328,7 +321,7 @@ const getYesterday = function () { console.log('getTime', getTime.value) activeTimeRange.value = 'yesterday' // 标记当前激活状态 - // selectLiveBy() //todo + selectLiveBy() } // 近7天 const get7Days = function () { @@ -347,82 +340,40 @@ const get7Days = function () { console.log('getTime', getTime.value) 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 () { await getAdminData() - // await selectLiveBy() - // // getActivity(); + await selectLiveBy() await getDept() - // await getGoods() + await getGift() + await getChannel() }) 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 }) if (res.code === 200) { ElMessage.success('导出成功') @@ -566,7 +521,7 @@ const getTagText = (state) => {
礼物名称: - +
@@ -596,7 +551,7 @@ const getTagText = (state) => {
- 充值时间: + 消费时间: { :type="activeTimeRange === 'yesterday' ? 'primary' : ''"> 昨 近7天 - + 重置 查询 导出excel @@ -623,8 +575,8 @@ const getTagText = (state) => {
- 金豆总数:{{ Math.abs(permanentGolds + freeGolds + taskGolds) / 100 }},付费金豆数:{{ Math.abs(permanentGolds) / 100 }},免费金豆数:{{ - Math.abs(freeGolds) / 100 + 金豆总数:{{ Math.abs(permanentBean+freeBean) }},付费金豆数:{{ Math.abs(permanentBean) }},免费金豆数:{{ + Math.abs(freeBean) }}
@@ -642,19 +594,16 @@ const getTagText = (state) => { - - + + + - +
@@ -679,9 +628,9 @@ const getTagText = (state) => {
- +