Browse Source

导出

zhangrenyuan/feature-20250714163943-金币前端二期
zhangyongQINGHU 2 weeks ago
parent
commit
4235152c47
  1. 1
      src/views/home.vue
  2. 146
      src/views/usergold/clientCountBalance.vue
  3. 53
      src/views/usergold/clientCountDetail.vue

1
src/views/home.vue

@ -264,7 +264,6 @@ const openChangePassword = () => {
<el-menu-item @click="message()">查看个人信息</el-menu-item>
<el-menu-item @click="openChangePassword">修改密码</el-menu-item>
<el-menu-item @click="logout">退出登录</el-menu-item>
<el-menu-item index="1-3" @click="openExportList">查看下载列表</el-menu-item>
</el-sub-menu>

146
src/views/usergold/clientCountBalance.vue

@ -1,11 +1,11 @@
<script setup>
//
import {ref, onMounted, reactive, computed} from 'vue'
import { ref, onMounted, reactive, computed } 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'
//
@ -14,7 +14,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)
@ -35,7 +35,7 @@ const getmarket = async () => {
console.log('获取地区数据成功', result)
// { value, label }
if (Array.isArray(result.data) && typeof result.data[0] === 'string') {
market.value = result.data.map(item => ({value: item, label: item}));
market.value = result.data.map(item => ({ value: item, label: item }));
} else {
market.value = result.data;
}
@ -104,7 +104,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);
@ -112,7 +112,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
@ -231,18 +231,12 @@ const handleCurrentChange = function (val) {
}
const exportExcel = async function () {
const params = {
goldDetail: {
user: {
jwcode: user.value.jwcode || '',
payPlatform: user.value.payPlatform || '',
type: user.value.type || '',
markets: user.value.markets || '',
startTime: user.value.startTime || '',
endTime: user.value.endTime || '',
},
page:getObj.value.pageNum,
size:total.value
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('导出成功')
}
@ -298,8 +292,8 @@ const getTagType = (state) => {
return 'info';
case 1:
return 'primary';
case 2:
return'success';
case 2:
return 'success';
case 3:
return 'danger';
default:
@ -313,14 +307,32 @@ const getTagText = (state) => {
return '待执行';
case 1:
return '执行中';
case 2:
return'执行完成';
case 2:
return '执行完成';
case 3:
return '执行出错';
default:
return '未知状态';
}
}
const handleMarketChange = (val) => {
if (!Array.isArray(val)) return
const hasHeadquarters = val.includes('总部')
const hasOther = val.some(item => item !== '总部')
if (hasHeadquarters && hasOther) {
if (val[val.length - 1] === '总部') {
//
goldDetail.value.markets = ['总部']
ElMessage.warning('“总部”与其他地区不可同时选择,系统已为您保留“总部”')
} else {
//
goldDetail.value.markets = val.filter(item => item !== '总部')
ElMessage.warning('“总部”与其他地区不可同时选择,系统已为您去除“总部”')
}
}
}
</script>
<template>
@ -330,12 +342,12 @@ const getTagText = (state) => {
<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-select v-model="user.markets" placeholder="请选择所属地区" style="width: 180px" clearable multiple>
<el-option v-for="item in market" :key="item.value" :label="item.label" :value="item.value"/>
<el-select v-model="user.markets" placeholder="请选择所属地区" style="width: 180px" clearable multiple @change="handleMarketChange">
<el-option v-for="item in market" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<el-button type="primary" @click="search()">查询</el-button>
@ -360,25 +372,25 @@ const getTagText = (state) => {
<!-- 设置表格容器的高度和滚动样式 -->
<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="market" 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" />
<el-table-column prop="allJb" label="金币总数" width="120" aligh="center">
<template #default="scope">
<span>{{
(scope.row.currentPermanentGold +
scope.row.currentFreeJune +
scope.row.currentFreeDecember +
scope.row.currentTaskGold) / 100
}}</span>
(scope.row.currentPermanentGold +
scope.row.currentFreeJune +
scope.row.currentFreeDecember +
scope.row.currentTaskGold) / 100
}}</span>
</template>
</el-table-column>
<el-table-column prop="currentPermanentGold" label="永久金币" sortable="custom" width="110">
@ -435,45 +447,43 @@ const getTagText = (state) => {
<!-- 分页 -->
<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-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-dialog>
<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>
</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>
</template>

53
src/views/usergold/clientCountDetail.vue

@ -337,12 +337,13 @@ const exportExcel = async function () {
jwcode: goldDetail.value.jwcode || '',
payPlatform: goldDetail.value.payPlatform || '',
type: goldDetail.value.type || '',
markets: goldDetail.value.markets || '',
markets: goldDetail.value.markets || [],
startTime: goldDetail.value.startTime || '',
endTime: goldDetail.value.endTime || '',
sortField: goldDetail.value.sortField || '',
sortOrder: goldDetail.value.sortOrder || ''
},
page: getObj.value.pageNum,
size: total.value
}
const res = await API({ url: '/goldDetail/export', data: params })
if (res.code === 200) {
@ -417,8 +418,8 @@ const getTagType = (state) => {
return 'info';
case 1:
return 'primary';
case 2:
return'success';
case 2:
return 'success';
case 3:
return 'danger';
default:
@ -432,14 +433,32 @@ const getTagText = (state) => {
return '待执行';
case 1:
return '执行中';
case 2:
return'执行完成';
case 2:
return '执行完成';
case 3:
return '执行出错';
default:
return '未知状态';
}
}
const handleMarketChange = (val) => {
if (!Array.isArray(val)) return
const hasHeadquarters = val.includes('总部')
const hasOther = val.some(item => item !== '总部')
if (hasHeadquarters && hasOther) {
if (val[val.length - 1] === '总部') {
//
goldDetail.value.markets = ['总部']
ElMessage.warning('“总部”与其他地区不可同时选择,系统已为您保留“总部”')
} else {
//
goldDetail.value.markets = val.filter(item => item !== '总部')
ElMessage.warning('“总部”与其他地区不可同时选择,系统已为您去除“总部”')
}
}
}
</script>
<template>
<div>
@ -474,8 +493,8 @@ const getTagText = (state) => {
<el-col :span="6">
<div class="head-card-element">
<el-text class="mx-1" size="large">所属地区</el-text>
<el-select v-model="goldDetail.markets" placeholder="请选择所属地区" style="width: 180px" clearable multiple
:loading="isLoadingArea">
<el-select v-model="goldDetail.markets" placeholder="请选择所属地区" style="width: 180px" clearable multiple
:loading="isLoadingArea" @change="handleMarketChange">
<el-option v-for="item in market" :key="item.value || item" :label="item.label || item"
:value="item.value || item" />
</el-select>
@ -486,10 +505,13 @@ const getTagText = (state) => {
<div class="head-card-element">
<el-text class="mx-1" size="large">更新时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间"
end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange"/>
<el-button @click="getToday()" style="margin-left: 10px" :type="activeTimeRange === 'today' ? 'primary' : ''"> </el-button>
<el-button @click="getYesterday()" style="margin-left: 10px" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"> </el-button>
<el-button @click="get7Days()" style="margin-left: 10px" :type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天</el-button>
end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange" />
<el-button @click="getToday()" style="margin-left: 10px"
:type="activeTimeRange === 'today' ? 'primary' : ''"> </el-button>
<el-button @click="getYesterday()" style="margin-left: 10px"
:type="activeTimeRange === 'yesterday' ? 'primary' : ''"> </el-button>
<el-button @click="get7Days()" style="margin-left: 10px"
:type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button>
@ -584,13 +606,12 @@ const getTagText = (state) => {
</el-row>
<!-- 导出列表弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<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'">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }}
</el-tag>
</template>

Loading…
Cancel
Save