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 || '操作失败');
+ }
+}
+
- addBeanConsume
-
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+ 提交
+
+
+
+
+ 客户信息
+
+
+
+
+
+ {{ 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) => {
-
{{ consumeTypes.value.find(item => item.value === scope.row.type)?.label || '未知类型' }}
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) => {
-
+
{{
(scope.row.taskGold +
@@ -656,10 +573,14 @@ const getTagText = (state) => {
-
-
-
-
+
+
+ {{ consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型' }}
+
+
+
+
+
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) => {
-
-
+
- {{
- (scope.row.taskGold +
- scope.row.freeGold +
- scope.row.permanentGold) / 100
- }}
+ {{ consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型' }}
+
+
-
+
@@ -679,9 +628,9 @@ const getTagText = (state) => {
-
+
- {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
+ {{ moment(scope.row.consumeTime).format('YYYY-MM-DD HH:mm:ss') }}