Browse Source

导出弹窗列表样式优化

zhangrenyuan/feature-20250728113353-金币前端三期
ZhangYong 2 weeks ago
parent
commit
16bdcc5fbb
  1. 2
      src/views/consume/bean/articleVideo.vue
  2. 2
      src/views/consume/bean/dieHardFan.vue
  3. 2
      src/views/consume/bean/liveStream.vue
  4. 2
      src/views/consume/gold/coinConsumeDetail.vue
  5. 189
      src/views/recharge/beanOnlineRecharge.vue
  6. 114
      src/views/recharge/beanSystemRecharge.vue
  7. 2
      src/views/recharge/gold/coinRechargeDetail.vue
  8. 2
      src/views/refund/gold/coinRefundDetail.vue
  9. 80
      src/views/usergold/gold/clientCountBalance.vue
  10. 2
      src/views/usergold/gold/clientCountDetail.vue

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

@ -591,7 +591,7 @@ const getTagText = (state) => {
<!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<template #default="scope">

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

@ -566,7 +566,7 @@ const getTagText = (state) => {
<!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<template #default="scope">

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

@ -599,7 +599,7 @@ const getTagText = (state) => {
<!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<template #default="scope">

2
src/views/consume/gold/coinConsumeDetail.vue

@ -739,7 +739,7 @@ const getMarket = async function () {
<!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名"/>
<el-table-column prop="state" label="状态">
<template #default="scope">

189
src/views/recharge/beanOnlineRecharge.vue

@ -140,7 +140,7 @@ const search = () => {
//
const get = async () => {
try {
if ( getTime.value != null) {
if (getTime.value != null) {
selectData.value.startTime = formatTime(getTime.value[0])
selectData.value.endTime = formatTime(getTime.value[1])
} else {
@ -219,6 +219,102 @@ const handleCurrentChange = (value) => {
get()
}
//=============================================
const exportExcel = async () => {
const params = {
...getObj.value,
"beanRechargeInfo": {
...selectData.value,
sortField: sortField.value,
sortOrder: sortOrder.value,
},
}
try {
const res = await API({ url: '/export', data: params })
if (res.code === 200) {
ElMessage.success('导出成功')
} else {
ElMessage.error(res.message || '导出失败,请稍后重试')
}
} catch (error) {
console.log('请求失败', error)
ElMessage.error('导出失败,请稍后重试')
}
}
const exportListVisible = ref(false)
//
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 === 2; //2
// });
// exportList.value = filteredData
exportList.value = result.data
} 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 '未知状态';
}
}
onMounted(async function () {
await get()
await getArea()
@ -265,7 +361,7 @@ onMounted(async function () {
</el-row>
<el-row>
<el-col :span="23">
<el-col :span="24">
<div class="head-card-element">
<el-text class="mx-1" size="large">充值时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator=""
@ -282,8 +378,8 @@ onMounted(async function () {
</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
<!-- <el-button type="primary" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button> -->
<el-button type="primary" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
</div>
</el-col>
</el-row>
@ -295,8 +391,7 @@ onMounted(async function () {
<el-card>
<div class="bean-info">
<!-- 汉字用 <strong> 加粗动态数据用 <span> 包一层单独改色 -->
<strong>金豆总数</strong><span class="data-text">{{ beanNum }}</span>
<strong>, 充值金豆数</strong><span class="data-text">{{ permanentBeans }}</span>
<strong> 充值金豆数</strong><span class="data-text">{{ beanNum }}</span>
<strong>, 合计新币数</strong><span class="data-text">{{ money }}</span>
</div>
<!-- 设置表格容器的高度和滚动样式 -->
@ -336,36 +431,56 @@ onMounted(async function () {
</el-col>
</el-row>
<!-- 导出弹窗 -->
<!-- <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名"/>
<el-table-column prop="state" label="状态">
<template #default="scope">
<el-tag :type="getTagType(scope.row.state)"
:effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }}
</el-tag>
<el-dialog v-model="exportListVisible" title="导出列表" width="80%" class="custom-height-dialog">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间">
<template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column label="操作">
<template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2">
下载
</el-button>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button text @click="exportListVisible = false">关闭</el-button>
</div>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间">
<template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column label="操作">
<template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2">
下载
</el-button>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button text @click="exportListVisible = false">关闭</el-button>
</div>
</template>
</el-dialog> -->
</el-dialog>
</template>
<style></style>
<style scoped>
:deep(.custom-height-dialog .el-dialog__body) {
height: 60vh;
overflow-y: auto;
padding: 15px;
}
.bean-info {
background-color: #eaf5ff;
padding: 12px 16px;
border-radius: 6px;
font-size: 16px;
color: #333;
}
.bean-info strong {
font-weight: 700;
}
.bean-info .data-text {
color: #007bff;
}
</style>

114
src/views/recharge/beanSystemRecharge.vue

@ -204,6 +204,102 @@ const handleCurrentChange = (value) => {
get()
}
//=============================================
const exportExcel = async () => {
const params = {
...getObj.value,
"beanRechargeInfo": {
...selectData.value,
sortField: sortField.value,
sortOrder: sortOrder.value,
},
}
try {
const res = await API({ url: '/export', data: params })
if (res.code === 200) {
ElMessage.success('导出成功')
} else {
ElMessage.error(res.message || '导出失败,请稍后重试')
}
} catch (error) {
console.log('请求失败', error)
ElMessage.error('导出失败,请稍后重试')
}
}
const exportListVisible = ref(false)
//
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 === 2; //2
// });
// exportList.value = filteredData
exportList.value = result.data
} 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 '未知状态';
}
}
onMounted(async function () {
await get()
await getArea()
@ -215,10 +311,10 @@ onMounted(async function () {
<el-col>
<el-card style="margin-bottom: 20px;margin-top: 10px">
<el-row style="margin-bottom: 10px">
<el-col :span="4">
<el-col :span="3">
<div class="head-card-element">
<el-text class="mx-1" size="large">精网号</el-text>
<el-input v-model="selectData.jwcode" placeholder="请输入精网号" style="width: 150px" clearable />
<el-input v-model="selectData.jwcode" placeholder="请输入精网号" style="width: 115px" clearable />
</div>
</el-col>
<el-col :span="4">
@ -229,7 +325,7 @@ onMounted(async function () {
</el-select>
</div>
</el-col>
<el-col :span="15">
<el-col :span="17">
<div class="head-card-element">
<el-text class="mx-1" size="large">充值时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator=""
@ -246,8 +342,8 @@ onMounted(async function () {
</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
<!-- <el-button type="primary" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button> -->
<el-button type="primary" style="width: 80px;" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" style="width: 95px;" @click="openExportList">查看导出列表</el-button>
</div>
</el-col>
</el-row>
@ -294,8 +390,8 @@ onMounted(async function () {
</el-col>
</el-row>
<!-- 导出弹窗 -->
<!-- <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名"/>
<el-table-column prop="state" label="状态">
<template #default="scope">
@ -324,9 +420,9 @@ onMounted(async function () {
<el-button text @click="exportListVisible = false">关闭</el-button>
</div>
</template>
</el-dialog> -->
</el-dialog>
</template>
<style>
<style scoped>
.bean-info {
background-color: #eaf5ff;
padding: 12px 16px;

2
src/views/recharge/gold/coinRechargeDetail.vue

@ -658,7 +658,7 @@ const props = {multiple: true}
</el-row>
<!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名"/>
<el-table-column prop="state" label="状态">
<template #default="scope">

2
src/views/refund/gold/coinRefundDetail.vue

@ -785,7 +785,7 @@ const getMarket = async function () {
<!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名"/>
<el-table-column prop="state" label="状态">
<template #default="scope">

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

@ -1,13 +1,13 @@
<script setup>
//
import {ref, onMounted, reactive, computed, watch} from 'vue'
import { ref, onMounted, reactive, computed, watch } from 'vue'
import ElementPlus from 'element-plus'
import {ElMessage, ElMessageBox} from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios'
import moment from 'moment'
import {ta} from 'element-plus/es/locales.mjs'
import { ta } from 'element-plus/es/locales.mjs'
import API from '@/util/http.js'
import {marketMapping, reverseMarketMapping} from "@/utils/marketMap.js";
import { marketMapping, reverseMarketMapping } from "@/utils/marketMap.js";
//
//
@ -15,7 +15,7 @@ const adminData = ref({})
const dialogVisible = ref(false)
const getAdminData = async function () {
try {
const result = await API({url: '/admin/userinfo', data: {}})
const result = await API({ url: '/admin/userinfo', data: {} })
adminData.value = result
// console.log('', result)
console.log('管理员用户信息', adminData.value)
@ -85,7 +85,7 @@ const get = async function (val) {
// POST
const requestData = {...getObj.value, user: {...user.value}};//
const requestData = { ...getObj.value, user: { ...user.value } };//
console.log('最终请求参数', JSON.stringify(requestData, null, 2)); //
//console.log('', requestData);
@ -93,7 +93,7 @@ const get = async function (val) {
const result = await API({
url: '/goldDetail/getGold',
method: 'post',
data: {...getObj.value, user: {...user.value}}
data: { ...getObj.value, user: { ...user.value } }
})
console.log('响应数据', result)
tableData.value = result.data.list
@ -167,7 +167,7 @@ const search = function () {
}
//
const reset = function () {
user.value = {markets: []}
user.value = { markets: [] }
sortField.value = ''
sortOrder.value = ''
get()
@ -220,7 +220,7 @@ const exportExcel = async function () {
markets: user.value.markets || []
}
}
const res = await API({url: '/goldDetail/exportGold', data: params})
const res = await API({ url: '/goldDetail/exportGold', data: params })
if (res.code === 200) {
ElMessage.success('导出成功')
}
@ -242,7 +242,7 @@ const exportListLoading = ref(false)
const getExportList = async () => {
exportListLoading.value = true
try {
const result = await API({url: '/export/export'})
const result = await API({ url: '/export/export' })
if (result.code === 200) {
const filteredData = result.data.filter(item => {
return item.type === 1; //type0
@ -318,7 +318,7 @@ const handleMarketChange = (value) => {
const traverse = (node, parentName = null) => {
if (!node.children || node.children.length === 0) {
leafNames.push({name: node.label, parent: parentName});
leafNames.push({ name: node.label, parent: parentName });
} else {
node.children.forEach(child => traverse(child, node.label));
}
@ -332,7 +332,7 @@ const handleMarketChange = (value) => {
//
const parentToChildren = {};
leafNameMap.forEach(({name, parent}) => {
leafNameMap.forEach(({ name, parent }) => {
if (!parentToChildren[parent]) parentToChildren[parent] = [];
parentToChildren[parent].push(name);
});
@ -356,7 +356,7 @@ const handleMarketChange = (value) => {
console.log('最终映射后的 market IDs:', user.value.markets);
};
const props = {multiple: true}
const props = { multiple: true }
//
const getMarket = async function () {
try {
@ -375,8 +375,8 @@ const getMarket = async function () {
return allChildren.map(child => {
const grandchildren = child.children && child.children.length
? transformTree([child]) //
: null;
? transformTree([child]) //
: null;
return {
value: child.name,
@ -402,21 +402,12 @@ const getMarket = async function () {
<div class="head-card">
<div class="head-card-element">
<el-text class="mx-1" size="large">精网号</el-text>
<el-input v-model="user.jwcode" style="width: 160px" placeholder="请输入精网号" clearable/>
<el-input v-model="user.jwcode" style="width: 160px" placeholder="请输入精网号" clearable />
</div>
<div class="head-card-element">
<el-text class="mx-1" size="large">所属地区</el-text>
<el-cascader
v-model="selectedMarketPath"
:options="markets"
placeholder="请选择所属地区"
clearable
collapse-tags
collapse-tags-tooltip
style="width:180px"
@change="handleMarketChange"
:props="props"
/>
<el-cascader v-model="selectedMarketPath" :options="markets" placeholder="请选择所属地区" clearable collapse-tags
collapse-tags-tooltip style="width:180px" @change="handleMarketChange" :props="props" />
</div>
<el-button type="primary" @click="search()">查询</el-button>
<el-button @click="reset" type="success">重置</el-button>
@ -440,16 +431,16 @@ const getMarket = async function () {
<!-- 设置表格容器的高度和滚动样式 -->
<div style="height: 626px; overflow-y: auto">
<el-table :data="tableData" @cellClick="cellClick" style="width: 100%" height="626px"
@sort-change="handleSortChange">
@sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="100px" fixed="left">
<template #default="scope">
<span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
</template>
</el-table-column>
<el-table-column prop="name" label="姓名" width="120"/>
<el-table-column prop="jwcode" label="精网号" width="120"/>
<el-table-column prop="name" label="姓名" width="120" />
<el-table-column prop="jwcode" label="精网号" width="120" />
<el-table-column prop="market" label="所属地区" width="120">
<template #default="scope">
{{ marketMapping[scope.row.market] || scope.row.market }}
@ -458,11 +449,11 @@ const getMarket = async function () {
<el-table-column prop="allJb" label="金币总数" width="120" aligh="center">
<template #default="scope">
<span>{{
((scope.row.currentPermanentGold || 0) +
(scope.row.currentFreeJune || 0) +
(scope.row.currentFreeDecember || 0) +
(scope.row.currentTaskGold || 0)) / 100
}}</span>
((scope.row.currentPermanentGold || 0) +
(scope.row.currentFreeJune || 0) +
(scope.row.currentFreeDecember || 0) +
(scope.row.currentTaskGold || 0)) / 100
}}</span>
</template>
</el-table-column>
<el-table-column prop="currentPermanentGold" label="永久金币" sortable="custom" width="110">
@ -515,8 +506,8 @@ const getMarket = async function () {
<div>
<div>永久金币{{ (scope.row.sumConsumeGold || 0) / 100 }}</div>
<div>免费金币{{
((scope.row.sumConsumeJune || 0) + (scope.row.sumConsumeDecember || 0)) / 100
}}
((scope.row.sumConsumeJune || 0) + (scope.row.sumConsumeDecember || 0)) / 100
}}
</div>
<div>任务金币{{ (scope.row.sumConsumeJune || 0) / 100 }}</div>
</div>
@ -540,17 +531,16 @@ const getMarket = async function () {
<!-- 分页 -->
<div class="pagination" style="margin-top: 20px">
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
</div>
</el-card>
</el-col>
</el-row>
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名"/>
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
@ -566,7 +556,7 @@ const getMarket = async function () {
<el-table-column label="操作">
<template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2">
:disabled="scope.row.state !== 2">
下载
</el-button>
</template>

2
src/views/usergold/gold/clientCountDetail.vue

@ -674,7 +674,7 @@ const getMarket = async function () {
<!-- 导出列表弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名"/>
<el-table-column prop="state" label="状态">
<template #default="scope">

Loading…
Cancel
Save