Browse Source

导出

zhangrenyuan/feature-20250714163943-金币前端二期
zhangyongQINGHU 3 weeks ago
parent
commit
4235152c47
  1. 1
      src/views/home.vue
  2. 68
      src/views/usergold/clientCountBalance.vue
  3. 47
      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="message()">查看个人信息</el-menu-item>
<el-menu-item @click="openChangePassword">修改密码</el-menu-item> <el-menu-item @click="openChangePassword">修改密码</el-menu-item>
<el-menu-item @click="logout">退出登录</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> </el-sub-menu>

68
src/views/usergold/clientCountBalance.vue

@ -1,11 +1,11 @@
<script setup> <script setup>
// //
import {ref, onMounted, reactive, computed} from 'vue'
import { ref, onMounted, reactive, computed } from 'vue'
import ElementPlus from 'element-plus' import ElementPlus from 'element-plus'
import {ElMessage, ElMessageBox} from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios' import axios from 'axios'
import moment from 'moment' 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' import API from '@/util/http'
// //
@ -14,7 +14,7 @@ const adminData = ref({})
const dialogVisible = ref(false) const dialogVisible = ref(false)
const getAdminData = async function () { const getAdminData = async function () {
try { try {
const result = await API({url: '/admin/userinfo', data: {}})
const result = await API({ url: '/admin/userinfo', data: {} })
adminData.value = result adminData.value = result
// console.log('', result) // console.log('', result)
console.log('管理员用户信息', adminData.value) console.log('管理员用户信息', adminData.value)
@ -35,7 +35,7 @@ const getmarket = async () => {
console.log('获取地区数据成功', result) console.log('获取地区数据成功', result)
// { value, label } // { value, label }
if (Array.isArray(result.data) && typeof result.data[0] === 'string') { 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 { } else {
market.value = result.data; market.value = result.data;
} }
@ -104,7 +104,7 @@ const get = async function (val) {
// POST // POST
const requestData = {...getObj.value, user: {...user.value}};//
const requestData = { ...getObj.value, user: { ...user.value } };//
console.log('最终请求参数', JSON.stringify(requestData, null, 2)); // console.log('最终请求参数', JSON.stringify(requestData, null, 2)); //
//console.log('', requestData); //console.log('', requestData);
@ -112,7 +112,7 @@ const get = async function (val) {
const result = await API({ const result = await API({
url: '/goldDetail/getGold', url: '/goldDetail/getGold',
method: 'post', method: 'post',
data: {...getObj.value, user: {...user.value}}
data: { ...getObj.value, user: { ...user.value } }
}) })
console.log('响应数据', result) console.log('响应数据', result)
tableData.value = result.data.list tableData.value = result.data.list
@ -231,18 +231,12 @@ const handleCurrentChange = function (val) {
} }
const exportExcel = async function () { const exportExcel = async function () {
const params = { const params = {
goldDetail: {
user: {
jwcode: user.value.jwcode || '', 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) { if (res.code === 200) {
ElMessage.success('导出成功') ElMessage.success('导出成功')
} }
@ -299,7 +293,7 @@ const getTagType = (state) => {
case 1: case 1:
return 'primary'; return 'primary';
case 2: case 2:
return'success';
return 'success';
case 3: case 3:
return 'danger'; return 'danger';
default: default:
@ -314,13 +308,31 @@ const getTagText = (state) => {
case 1: case 1:
return '执行中'; return '执行中';
case 2: case 2:
return'执行完成';
return '执行完成';
case 3: case 3:
return '执行出错'; return '执行出错';
default: default:
return '未知状态'; 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> </script>
<template> <template>
@ -330,12 +342,12 @@ const getTagText = (state) => {
<div class="head-card"> <div class="head-card">
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">精网号</el-text> <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>
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">所属地区</el-text> <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> </el-select>
</div> </div>
<el-button type="primary" @click="search()">查询</el-button> <el-button type="primary" @click="search()">查询</el-button>
@ -368,9 +380,9 @@ const getTagText = (state) => {
}}</span> }}</span>
</template> </template>
</el-table-column> </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"> <el-table-column prop="allJb" label="金币总数" width="120" aligh="center">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
@ -435,8 +447,7 @@ const getTagText = (state) => {
<!-- 分页 --> <!-- 分页 -->
<div class="pagination" style="margin-top: 20px"> <div class="pagination" style="margin-top: 20px">
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" <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"
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination> @current-change="handleCurrentChange"></el-pagination>
</div> </div>
</el-card> </el-card>
@ -448,8 +459,7 @@ const getTagText = (state) => {
<el-table-column prop="fileName" label="文件名" /> <el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态"> <el-table-column prop="state" label="状态">
<template #default="scope"> <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) }} {{ getTagText(scope.row.state) }}
</el-tag> </el-tag>
</template> </template>

47
src/views/usergold/clientCountDetail.vue

@ -337,12 +337,13 @@ const exportExcel = async function () {
jwcode: goldDetail.value.jwcode || '', jwcode: goldDetail.value.jwcode || '',
payPlatform: goldDetail.value.payPlatform || '', payPlatform: goldDetail.value.payPlatform || '',
type: goldDetail.value.type || '', type: goldDetail.value.type || '',
markets: goldDetail.value.markets || '',
markets: goldDetail.value.markets || [],
startTime: goldDetail.value.startTime || '', startTime: goldDetail.value.startTime || '',
endTime: goldDetail.value.endTime || '', 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 }) const res = await API({ url: '/goldDetail/export', data: params })
if (res.code === 200) { if (res.code === 200) {
@ -418,7 +419,7 @@ const getTagType = (state) => {
case 1: case 1:
return 'primary'; return 'primary';
case 2: case 2:
return'success';
return 'success';
case 3: case 3:
return 'danger'; return 'danger';
default: default:
@ -433,13 +434,31 @@ const getTagText = (state) => {
case 1: case 1:
return '执行中'; return '执行中';
case 2: case 2:
return'执行完成';
return '执行完成';
case 3: case 3:
return '执行出错'; return '执行出错';
default: default:
return '未知状态'; 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> </script>
<template> <template>
<div> <div>
@ -475,7 +494,7 @@ const getTagText = (state) => {
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">所属地区</el-text> <el-text class="mx-1" size="large">所属地区</el-text>
<el-select v-model="goldDetail.markets" placeholder="请选择所属地区" style="width: 180px" clearable multiple <el-select v-model="goldDetail.markets" placeholder="请选择所属地区" style="width: 180px" clearable multiple
:loading="isLoadingArea">
:loading="isLoadingArea" @change="handleMarketChange">
<el-option v-for="item in market" :key="item.value || item" :label="item.label || item" <el-option v-for="item in market" :key="item.value || item" :label="item.label || item"
:value="item.value || item" /> :value="item.value || item" />
</el-select> </el-select>
@ -486,10 +505,13 @@ const getTagText = (state) => {
<div class="head-card-element"> <div class="head-card-element">
<el-text class="mx-1" size="large">更新时间</el-text> <el-text class="mx-1" size="large">更新时间</el-text>
<el-date-picker v-model="getTime" type="datetimerange" range-separator="" start-placeholder="起始时间" <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="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">查询</el-button> <el-button type="primary" @click="search()">查询</el-button>
@ -584,13 +606,12 @@ const getTagText = (state) => {
</el-row> </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 :data="exportList" style="width: 100%" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" /> <el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态"> <el-table-column prop="state" label="状态">
<template #default="scope"> <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) }} {{ getTagText(scope.row.state) }}
</el-tag> </el-tag>
</template> </template>

Loading…
Cancel
Save