From 6d8ce3bc776f005551d1149984a6da5c9e3e1efb Mon Sep 17 00:00:00 2001 From: zhangrenyuan <18990852002@163.com> Date: Wed, 30 Jul 2025 11:56:56 +0800 Subject: [PATCH 1/4] feat beanConsume liveStream --- src/views/consume/liveStream.vue | 765 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 762 insertions(+), 3 deletions(-) diff --git a/src/views/consume/liveStream.vue b/src/views/consume/liveStream.vue index 48e128f..ae6aa89 100644 --- a/src/views/consume/liveStream.vue +++ b/src/views/consume/liveStream.vue @@ -1,11 +1,770 @@ - \ No newline at end of file +.pagination { + display: flex; + margin-top: 20px; +} + From 8eeaf604db36a3de3a871f0e9328fd5ea1119c13 Mon Sep 17 00:00:00 2001 From: ZhangYong Date: Wed, 30 Jul 2025 14:50:36 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E9=87=91=E8=B1=86=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=85=85=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 4 +- src/router/index.js | 6 +- src/views/recharge/addBeanRecharge.vue | 292 +++++++++++----------- src/views/recharge/addCoinRecharge.vue | 442 ++++++++++++++------------------- src/views/recharge/beanRecharge.vue | 16 +- 5 files changed, 336 insertions(+), 424 deletions(-) diff --git a/.env.development b/.env.development index b6264c1..8e75b32 100644 --- a/.env.development +++ b/.env.development @@ -3,10 +3,10 @@ # VITE_API_BASE='http://18.143.76.3:10704/' # VITE_API_BASE='http://192.168.9.52:10705/' VITE_UPLOAD_URL=http://39.101.133.168:8828/hljw/api/aws/upload - VITE_API_BASE='http://192.168.9.28:8081/' +# VITE_API_BASE='http://192.168.9.28:8081/' # VITE_API_BASE='http://192.168.9.28:8081/' # sunjiabei # VITE_API_BASE='http://192.168.9.28:8081/' # VITE_API_BASE='http://192.168.5.92:8081/' # zhangyong -# VITE_API_BASE='http://192.168.3.83:8081/' + VITE_API_BASE='http://192.168.9.62:8081/' diff --git a/src/router/index.js b/src/router/index.js index 6a32f14..3253309 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -161,21 +161,21 @@ const routes = [ path: 'add', name: "addBeanRecharge", component: () => import("../views/recharge/addBeanRecharge.vue"), - meta: {permissionId: 17} // 对应"提交金币充值"id=17 + meta: {permissionId: 46} // 对应"提交金豆充值"id=46 }, // 金豆系统充值 { path: 'system', name: "beanSystemRecharge", component: () => import("../views/recharge/beanSystemRecharge.vue"), - meta: {permissionId: 18} // 对应"查看金币充值明细"id=18 + meta: {permissionId: 47} // 对应"查看金豆系统充值明细"id=47 }, // 金豆线上充值 { path: 'online', name: "beanOnlineRecharge", component: () => import("../views/recharge/beanOnlineRecharge.vue"), - meta: {permissionId: 18} // 对应"查看金币充值明细"id=18 + meta: {permissionId: 48} // 对应"查看金豆线上充值明细"id=48 } ] }, diff --git a/src/views/recharge/addBeanRecharge.vue b/src/views/recharge/addBeanRecharge.vue index 6d3d6e9..6613829 100644 --- a/src/views/recharge/addBeanRecharge.vue +++ b/src/views/recharge/addBeanRecharge.vue @@ -6,27 +6,28 @@ 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 { range, re } from 'mathjs' +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: '/user/selectUser', + url: '/beanUser/userCard', data: { jwcode: addForm.value.jwcode } }) - - if (result.code === 0) { ElMessage.error(result.msg); } else if (result.data === null) { @@ -48,87 +49,70 @@ const addForm = ref({ remark: '', adminId: '' }) -const Ref = ref(null) - -// const rules = reactive({ -// jwcode: [{ required: true, validator: validateJwCode, trigger: 'blur' }], -// gode: [ -// { required: true, message: '请输入永久金币数', trigger: 'blur' }, -// { -// validator: (rule, value, callback) => { -// // 检查是否包含特殊符号 -// if (/[^0-9.]/.test(value)) { -// callback(new Error('不能包含特殊符号或负数')); -// return; -// } +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; + } -// // 检查整数位数 -// const integerPart = value.split('.')[0]; -// if (integerPart.length > 6) { -// callback(new Error('整数位数不能超过6位')); -// return; -// } + // 检查位数 + if (value.length > 6) { + callback(new Error('整数位数不能超过6位')); + return; + } + callback(); + }, -// // 检查小数位数 -// if (value.includes('.')) { -// const decimalPart = value.split('.')[1]; -// if (decimalPart.length > 2) { -// callback(new Error('小数位数不能超过两位')); -// return; -// } -// } - -// const numValue = Number(value); -// if (isNaN(numValue)) { -// callback(new Error('请输入有效的数字')); -// } else if (numValue < 0) { -// callback(new Error('输入金额不能小于0')); -// } else { -// callback(); -// } -// }, -// trigger: 'blur' -// } -// ], -// freeGode: [ -// { required: true, message: '请输入免费金币数', trigger: 'blur' }, -// { -// validator: (rule, value, callback) => { -// // 检查是否包含特殊符号 -// if (/[^0-9.]/.test(value)) { -// callback(new Error('不能包含特殊符号或负数')); -// return; -// } - -// // 检查整数位数 -// const integerPart = value.split('.')[0]; -// if (integerPart.length > 6) { -// callback(new Error('整数位数不能超过6位')); -// return; -// } - -// // 检查小数位数 -// if (value.includes('.')) { -// const decimalPart = value.split('.')[1]; -// if (decimalPart.length > 2) { -// callback(new Error('小数位数不能超过两位')); -// return; -// } -// } + trigger: 'blur' + } + ], + freeGode: [ + { required: true, message: '请输入免费金豆数', trigger: 'blur' }, + { + validator: (rule, value, callback) => { + // 检查是否为非负整数 + if (!/^\d+$/.test(value)) { + callback(new Error('请输入非负整数')); + return; + } -// const numValue = Number(value); -// if (isNaN(numValue)) { -// callback(new Error('请输入有效的数字')); -// } else if (numValue < 0) { -// callback(new Error('输入金额不能小于0')); -// } else { -// callback(); -// } -// }, -// trigger: 'blur' -// } -// ], -// }); + // 检查位数 + if (value.length > 6) { + callback(new Error('整数位数不能超过6位')); + return; + } + callback(); + }, + trigger: 'blur' + } + ], + remark: [ + { required: true, message: '请输入备注', trigger: 'blur' } + ] +}); //重置表单 const deleteAddForm = function () { @@ -141,118 +125,110 @@ const deleteAddForm = function () { } } -const handleAddForm = () => { +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 || '操作失败'); + } } - \ No newline at end of file + \ No newline at end of file diff --git a/src/views/recharge/addCoinRecharge.vue b/src/views/recharge/addCoinRecharge.vue index 94d017a..5f208a8 100644 --- a/src/views/recharge/addCoinRecharge.vue +++ b/src/views/recharge/addCoinRecharge.vue @@ -16,7 +16,7 @@ import throttle from 'lodash/throttle' // 精网号去空格 const trimJwCode = () => { if (recharge.value.jwcode) { - recharge.value.jwcode = recharge.value.jwcode.replace(/\s/g, ''); + recharge.value.jwcode = recharge.value.jwcode.replace(/\s/g, ''); } } // 上传图片前的验证函数 @@ -77,9 +77,9 @@ const recharge = ref({ const add = async function () { try { - const formattedRecharge = { ...recharge.value} + const formattedRecharge = { ...recharge.value } - // 将永久金币数、免费金币数和充值金额数乘以 100 + // 将永久金币数、免费金币数和充值金额数乘以 100 if (formattedRecharge.permanentGold) { formattedRecharge.permanentGold = Number(formattedRecharge.permanentGold) * 100; } @@ -154,7 +154,7 @@ const addBefore = () => { }) return } - if(recharge.value.money == null || recharge.value.money == '' || recharge.value.money == undefined){ + if (recharge.value.money == null || recharge.value.money == '' || recharge.value.money == undefined) { ElMessage({ type: 'error', message: '请输入充值金额' @@ -187,21 +187,20 @@ const addBefore = () => { // 表单验证 // 开始时间改变时,重新验证结束时间 const Ref = ref(null) - -const validateJwCode = (rule, value, callback) => { - if (!value) { - callback(new Error('精网号不能为空')); - return; - } - if (/[^0-9]/.test(value)) { - callback(new Error('精网号只能包含数字')); - return; - } - callback(); -}; - const rules = reactive({ - jwcode: [{ required: true, validator: validateJwCode, trigger: 'blur' }], + jwcode: [{ + required: true, validator: (rule, value, callback) => { + if (!value) { + callback(new Error('精网号不能为空')); + return; + } + if (/[^0-9]/.test(value)) { + callback(new Error('精网号只能包含数字')); + return; + } + callback(); + }, trigger: 'blur' + }], activity: [{ required: true, message: '请选择活动名称', trigger: 'blur' }], permanentGold: [ { required: true, message: '请输入永久金币数', trigger: 'blur' }, @@ -219,7 +218,7 @@ const rules = reactive({ callback(new Error('整数位数不能超过6位')); return; } - + // 检查小数位数 if (value.includes('.')) { const decimalPart = value.split('.')[1]; @@ -228,7 +227,7 @@ const rules = reactive({ return; } } - + const numValue = Number(value); if (isNaN(numValue)) { callback(new Error('请输入有效的数字')); @@ -280,11 +279,11 @@ const rules = reactive({ } ], rateName: [{ - required: true, - message: '请选择货币名称', + required: true, + message: '请选择货币名称', trigger: 'blur' }], - + money: [ { required: true, message: '请输入充值金额', trigger: 'blur' }, { @@ -341,7 +340,7 @@ const getUser = async function (jwcode) { } }) - + if (result.code === 0) { ElMessage.error(result.msg); } else if (result.data === null) { @@ -365,7 +364,7 @@ const activity = ref([]) // const result = await API({ // url: '/general/activity', // data: { - + // } // }) @@ -387,7 +386,7 @@ const rateName = [ { value: 'USD', label: 'USD', - rateId: 1 + rateId: 1 }, { value: 'HKD', @@ -436,14 +435,14 @@ const customUpload = async (options) => { try { const formData = new FormData(); formData.append('file', options.file); - + const response = await axios.post(import.meta.env.VITE_UPLOAD_URL, formData, { headers: { 'Content-Type': 'multipart/form-data', 'Authorization': `Bearer ${localStorage.getItem('token')}` } }); - + if (response.data.code === 200 && response.data.data) { // 传递原始文件对象和响应数据 handleAvatarSuccess(response.data, options.file); @@ -463,7 +462,7 @@ const customUpload = async (options) => { const handleAvatarSuccess = (response, file) => { // 直接使用 file 对象创建 Object URL imageUrl.value = URL.createObjectURL(file); - + // 使用服务器返回的文件路径(根据实际响应结构调整) if (response && response.filePath) { recharge.value.voucher = response.filePath; @@ -529,7 +528,7 @@ onMounted(async function () { await getAdminData() // await getCurrency() // await getActivity()// 现在的活动就是文字输入框,不需要请求接口,具体等后续需求 - + }) onMounted(() => { console.log('上传URL:', import.meta.env.VITE_UPLOAD_URL); @@ -539,25 +538,12 @@ onMounted(() => { \ No newline at end of file +.pagination { + display: flex; + margin-top: 20px; +} + diff --git a/src/views/consume/dieHardFan.vue b/src/views/consume/dieHardFan.vue index 78d9704..ac43bd4 100644 --- a/src/views/consume/dieHardFan.vue +++ b/src/views/consume/dieHardFan.vue @@ -1,11 +1,730 @@ - \ No newline at end of file +.pagination { + display: flex; + margin-top: 20px; +} + diff --git a/src/views/consume/liveStream.vue b/src/views/consume/liveStream.vue index ae6aa89..94ca7de 100644 --- a/src/views/consume/liveStream.vue +++ b/src/views/consume/liveStream.vue @@ -22,15 +22,17 @@ const adminData = ref({}) const tableData = ref([]) // 搜索liveStream 表单 -const liveStream = ref({ +const beanConsumeLive = ref({ jwcode: null, - market: "", + dept: "", type: "", - giftName: "", + gift: "", channel: "", - liveRoom: "", + liveName: "", startTime: '', endTime: '', + sortField: '', + sortOrder: '' }) // 频道列表 @@ -38,18 +40,18 @@ const channels = ref([]) // 抽离类型选项到响应式数组 const consumeTypes = ref([ - { label: '发礼物', value: '发礼物' }, - { label: '发红包', value: '发红包' }, - { label: '发福袋', value: '发福袋' }, - { label: '付费直播', value: '付费直播' }, - { label: '加入粉丝团', value: '加入粉丝团' }, - { label: '发弹幕', value: '发弹幕' } + { label: '发礼物', value: 1 }, + { label: '发红包', value: 2 }, + { label: '发福袋', value: 3 }, + { label: '付费直播', value: 4 }, + { label: '加入粉丝团', value: 5 }, + { label: '发弹幕', value: 6 } ]) // 处理类型选择变化 const handleTypeChange = (value) => { - if (value !== '发礼物') { - liveStream.value.giftName = '' + if (value !== 1) { + beanConsumeLive.value.gift = '' } } @@ -79,7 +81,7 @@ const getTime = ref({ // const activity = ref([]) // 搜索地区列表 -const market = ref([]) +const dept = ref([]) // 新增排序字段和排序方式 const sortField = ref('') @@ -131,7 +133,7 @@ const sortOrder = ref('') // const totalGoldSearch = ref({ // jwcode: null, // payPlatform: "", -// market: "", +// dept: "", // startTime: "", // endTime: "", // goodsName: "" @@ -155,144 +157,127 @@ const getAdminData = async function () { } } +const selectLiveBy = async function (val) { + try { -// const ConsumeSelectBy = async function (val) { -// try { + // 搜索参数页码赋值 + if (typeof val === 'number') { + getObj.value.pageNum = val + } + // 搜索参数时间赋值 -// // 搜索参数页码赋值 -// if (typeof val === 'number') { -// getObj.value.pageNum = 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]) + } + } else { + beanConsumeLive.value.startTime = '' + beanConsumeLive.value.endTime = '' + } + beanConsumeLive.value.sortField = sortField.value + beanConsumeLive.value.sortOrder = sortOrder.value -// if (getTime.value != null) { -// if (getTime.value.startTime != '' && getTime.value.endTime != '') { -// liveStream.value.startTime = formatTime(getTime.value[0]) -// liveStream.value.endTime = formatTime(getTime.value[1]) -// } -// } else { -// liveStream.value.startTime = '' -// liveStream.value.endTime = '' -// } -// liveStream.value.sortField = sortField.value -// liveStream.value.sortOrder = sortOrder.value + console.log('搜索参数_时间', beanConsumeLive.value.startTime) -// console.log('搜索参数_时间', liveStream.value.startTime) + console.log('搜索参数1', getObj.value) -// console.log('搜索参数1', getObj.value) + console.log('搜索参数2', beanConsumeLive.value) -// console.log('搜索参数2', liveStream.value) + // 发送POST请求 + const result = await request({ + url: '/beanConsume/selectLiveBy', + data: { + pageNum: getObj.value.pageNum, + pageSize: getObj.value.pageSize, + beanConsumeLive: { + ... beanConsumeLive.value, + sortField: sortField.value, + sortOrder: sortOrder.value + } + } + }) -// // 发送POST请求 -// const result = await request({ -// url: '/consume/selectBy', -// data: { -// pageNum: getObj.value.pageNum, -// pageSize: getObj.value.pageSize, -// liveStream: { -// ... liveStream.value, -// sortField: sortField.value, -// sortOrder: sortOrder.value -// } -// } -// }) + console.log('请求成功2', sortField) -// console.log('请求成功2', sortField) + // // 合计数的接口 + // // 复制一份 detail.value 并移除排序字段和排序方式 + // const detailWithoutSort = { ... beanConsumeLive.value } + // delete detailWithoutSort.sortField + // delete detailWithoutSort.sortOrder -// // 合计数的接口 -// // 复制一份 detail.value 并移除排序字段和排序方式 -// const detailWithoutSort = { ... liveStream.value } -// delete detailWithoutSort.sortField -// delete detailWithoutSort.sortOrder + // // 赋值 + // totalGoldSearch.value.startTime = beanConsumeLive.value.startTime + // totalGoldSearch.value.endTime = beanConsumeLive.value.endTime -// // 赋值 -// totalGoldSearch.value.startTime = liveStream.value.startTime -// totalGoldSearch.value.endTime = liveStream.value.endTime -// totalGoldSearch.value.payPlatform = liveStream.value.payPlatform -// totalGoldSearch.value.market = liveStream.value.market -// totalGoldSearch.value.goodsName = liveStream.value.goodsName -// totalGoldSearch.value.jwcode = liveStream.value.jwcode -// // -// const resultTotalGold = await request({ -// // url: '/consume/statsGold', -// url: '/consume/statsGold', -// data: totalGoldSearch.value + // 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 -// } - -// // 存储表格数据 -// 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) -// // 在这里可以处理错误逻辑,比如显示错误提示等 -// } -// } + // 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) + + // 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 - // ConsumeSelectBy() + // selectLiveBy() todo } // 重置 const reset = function () { console.log('兄弟,你点了重置') - liveStream.value.jwcode = null + beanConsumeLive.value.jwcode = null - liveStream.value.type = '' - liveStream.value.giftName = '' - liveStream.value.channel = '' - liveStream.value.liveRoom = '' + beanConsumeLive.value.type = '' + beanConsumeLive.value.gift = '' + beanConsumeLive.value.channel = '' + beanConsumeLive.value.liveName = '' - liveStream.value.market = '' + beanConsumeLive.value.dept = '' - liveStream.value.startTime = '' + beanConsumeLive.value.startTime = '' - liveStream.value.endTime = '' + beanConsumeLive.value.endTime = '' @@ -303,8 +288,8 @@ const reset = function () { // 点完重置后,重新请求数据 - // ConsumeSelectBy() - console.log(' liveStream', liveStream.value) + selectLiveBy() + console.log(' beanConsumeLive', beanConsumeLive.value) } // 今天 const getToday = function () { @@ -323,7 +308,7 @@ const getToday = function () { console.log('getTime', getTime.value) activeTimeRange.value = 'today' // 标记当前激活状态 - // ConsumeSelectBy() + // selectLiveBy() } // 昨天 const getYesterday = function () { @@ -343,7 +328,7 @@ const getYesterday = function () { console.log('getTime', getTime.value) activeTimeRange.value = 'yesterday' // 标记当前激活状态 - ConsumeSelectBy() + // selectLiveBy() //todo } // 近7天 const get7Days = function () { @@ -362,7 +347,7 @@ const get7Days = function () { console.log('getTime', getTime.value) activeTimeRange.value = '7days' // 标记当前激活状态 - ConsumeSelectBy() + // selectLiveBy() todo } // 获取商品列表 // const getGoods = async function () { @@ -383,28 +368,28 @@ const get7Days = function () { // } // } -// // 获取地区列表的方法 -// const getMarket = async function () { -// try { -// // 发送请求获取地区列表 -// const result = await request({ -// // url: '/general/market', +// 获取地区列表的方法 +const getDept = async function () { + try { + // 发送请求获取地区列表 + const result = await request({ + // url: '/general/dept', -// url: '/general/adminMarkets', // todo 换成实际接口地址 -// data: {account:adminData.value.account} -// }) -// console.log('请求地区列表成功', result) -// // 存储地区数据 -// market.value = result.data -// console.log('地区数据', market.value) -// } catch (error) { -// console.log('请求地区列表失败', error) -// ElMessage({ -// type: 'error', -// message: '获取地区列表失败,请稍后重试' -// }) -// } -// } + 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) => { @@ -420,17 +405,17 @@ const get7Days = function () { // sortField.value = 'createTime' // } // sortOrder.value = column.order === 'ascending' ? 'DESC' : 'ASC' -// ConsumeSelectBy() +// selectLiveBy() // } // const handlePageSizeChange = function (val) { // getObj.value.pageSize = val -// ConsumeSelectBy() +// selectLiveBy() // } // const handleCurrentChange = function (val) { // getObj.value.pageNum = val -// ConsumeSelectBy() +// selectLiveBy() // } /* ====================计算属性================================= @@ -450,104 +435,104 @@ const get7Days = function () { onMounted(async function () { await getAdminData() - // await ConsumeSelectBy() + // await selectLiveBy() // // getActivity(); - // await getMarket() + await getDept() // await getGoods() }) -// const exportExcel = async function () { -// const params = { -// liveStream: { -// jwcode: liveStream.value.jwcode || '', -// payPlatform: liveStream.value.payPlatform || '', -// market: liveStream.value.market || '', -// startTime: liveStream.value.startTime || '', -// endTime: liveStream.value.endTime || '', -// goodsName: liveStream.value.goodsName || '', -// sortField: sortField.value || '', -// sortOrder: sortOrder.value || '' -// } -// } -// const res = await API({ url: '/export/exportConsume', data: params }) -// if (res.code === 200) { -// ElMessage.success('导出成功') -// } -// } -// const exportListVisible = ref(false) +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 res = await API({ url: '/export/exportConsume', data: params }) + if (res.code === 200) { + ElMessage.success('导出成功') + } +} +const exportListVisible = ref(false) -// // 打开导出列表弹窗 -// const openExportList = () => { -// getExportList() -// exportListVisible.value = true -// } +// 打开导出列表弹窗 +const openExportList = () => { + getExportList() + exportListVisible.value = true +} -// // 导出列表数据 -// const exportList = ref([]) -// // 导出列表加载状态 -// const exportListLoading = ref(false) -// // 获取导出列表 -// const getExportList = async () => { -// exportListLoading.value = true -// try { -// const result = await API({ url: '/export/export' }) -// if (result.code === 200) { -// const filteredData = result.data.filter(item => { -// return item.type === 4; //4表示金币消耗列表 -// }); -// exportList.value = filteredData -// } else { -// ElMessage.error(result.msg || '获取导出列表失败') -// } -// } catch (error) { -// console.error('获取导出列表出错:', error) -// ElMessage.error('获取导出列表失败,请稍后重试') -// } finally { -// exportListLoading.value = false -// } -// } -// // 下载导出文件 -// const downloadExportFile = (item) => { -// if (item.state === 2) { -// const link = document.createElement('a') -// link.href = item.url -// link.download = item.fileName -// link.click() -// } else { -// ElMessage.warning('文件还在导出中,请稍后再试') -// } -// } -// //根据状态返回对应的标签类型 -// const getTagType = (state) => { -// switch (state) { -// case 0: -// return 'info'; -// case 1: -// return 'primary'; -// case 2: -// return 'success'; -// case 3: -// return 'danger'; -// default: -// return 'info'; -// } -// } -// //根据状态返回对应的标签文案 -// const getTagText = (state) => { -// switch (state) { -// case 0: -// return '待执行'; -// case 1: -// return '执行中'; -// case 2: -// return '执行完成'; -// case 3: -// return '执行出错'; -// default: -// return '未知状态'; -// } -// } +// 导出列表数据 +const exportList = ref([]) +// 导出列表加载状态 +const exportListLoading = ref(false) +// 获取导出列表 +const getExportList = async () => { + exportListLoading.value = true + try { + const result = await API({ url: '/export/export' }) + if (result.code === 200) { + const filteredData = result.data.filter(item => { + return item.type === 4; //4表示金币消耗列表 // todo 修改对应type + }); + exportList.value = filteredData + } else { + ElMessage.error(result.msg || '获取导出列表失败') + } + } catch (error) { + console.error('获取导出列表出错:', error) + ElMessage.error('获取导出列表失败,请稍后重试') + } finally { + exportListLoading.value = false + } +} +// 下载导出文件 +const downloadExportFile = (item) => { + if (item.state === 2) { + const link = document.createElement('a') + link.href = item.url + link.download = item.fileName + link.click() + } else { + ElMessage.warning('文件还在导出中,请稍后再试') + } +} +//根据状态返回对应的标签类型 +const getTagType = (state) => { + switch (state) { + case 0: + return 'info'; + case 1: + return 'primary'; + case 2: + return 'success'; + case 3: + return 'danger'; + default: + return 'info'; + } +} +//根据状态返回对应的标签文案 +const getTagText = (state) => { + switch (state) { + case 0: + return '待执行'; + case 1: + return '执行中'; + case 2: + return '执行完成'; + case 3: + return '执行出错'; + default: + return '未知状态'; + } +}