|
@ -1,11 +1,11 @@ |
|
|
<script setup> |
|
|
<script setup> |
|
|
import {ref, onMounted, computed, nextTick, watch} from 'vue' |
|
|
import {ref, onMounted, computed, nextTick, watch} from 'vue' |
|
|
|
|
|
|
|
|
import { ElMessage } from 'element-plus' |
|
|
|
|
|
|
|
|
import {ElMessage} from 'element-plus' |
|
|
import axios from 'axios' |
|
|
import axios from 'axios' |
|
|
import moment from 'moment' |
|
|
import moment from 'moment' |
|
|
import API from '@/util/http' |
|
|
import API from '@/util/http' |
|
|
import { writeFile, utils } from 'xlsx' |
|
|
|
|
|
|
|
|
import {writeFile, utils} from 'xlsx' |
|
|
import request from "@/util/request.js"; |
|
|
import request from "@/util/request.js"; |
|
|
|
|
|
|
|
|
// 标记当前激活的时间范围按钮 |
|
|
// 标记当前激活的时间范围按钮 |
|
@ -25,16 +25,12 @@ const totalGoldTotal = ref(0) |
|
|
const adminData = ref({}) |
|
|
const adminData = ref({}) |
|
|
const getAdminData = async function () { |
|
|
const getAdminData = async function () { |
|
|
try { |
|
|
try { |
|
|
const result = await API({ |
|
|
|
|
|
url: '/admin/userinfo', |
|
|
|
|
|
method: 'post', |
|
|
|
|
|
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) |
|
|
} catch (error) { |
|
|
} catch (error) { |
|
|
console.log('管理员用户信息请求失败', error) |
|
|
|
|
|
|
|
|
console.log('请求失败', error) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -61,7 +57,7 @@ const getPlatform = async () => { |
|
|
}) |
|
|
}) |
|
|
// 假设后端返回的是字符串数组,转换为 { value, label } 格式 |
|
|
// 假设后端返回的是字符串数组,转换为 { value, label } 格式 |
|
|
if (Array.isArray(result.data)) { |
|
|
if (Array.isArray(result.data)) { |
|
|
platform.value = result.data.map(item => ({ value: item, label: item })); |
|
|
|
|
|
|
|
|
platform.value = result.data.map(item => ({value: item, label: item})); |
|
|
} else { |
|
|
} else { |
|
|
console.error('平台信息格式错误', result) |
|
|
console.error('平台信息格式错误', result) |
|
|
ElMessage.error('平台信息格式错误,请联系管理员') |
|
|
ElMessage.error('平台信息格式错误,请联系管理员') |
|
@ -91,14 +87,19 @@ const type = [ |
|
|
] |
|
|
] |
|
|
|
|
|
|
|
|
// 定义加载状态,获取地区数据 |
|
|
// 定义加载状态,获取地区数据 |
|
|
const isLoadingArea = ref(false); |
|
|
|
|
|
|
|
|
// 定义加载状态,获取地区数据 |
|
|
|
|
|
const isLoadingmarket = ref(false); |
|
|
const market = ref([]) |
|
|
const market = ref([]) |
|
|
const getArea = async () => { |
|
|
|
|
|
isLoadingArea.value = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const getmarket = async () => { |
|
|
|
|
|
isLoadingmarket.value = true; |
|
|
try { |
|
|
try { |
|
|
const result = await API({ |
|
|
const result = await API({ |
|
|
url: '/general/market' |
|
|
|
|
|
|
|
|
url: '/general/roleMarkets', |
|
|
|
|
|
data: {account: adminData.value.account} |
|
|
}); |
|
|
}); |
|
|
|
|
|
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 |
|
|
market.value = result.data |
|
@ -113,10 +114,9 @@ const getArea = async () => { |
|
|
// 可以提供默认数据 |
|
|
// 可以提供默认数据 |
|
|
market.value = []; |
|
|
market.value = []; |
|
|
} finally { |
|
|
} finally { |
|
|
isLoadingArea.value = false; |
|
|
|
|
|
|
|
|
isLoadingmarket.value = false; |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
/*// 地区下拉框 |
|
|
/*// 地区下拉框 |
|
|
const getMarket = async function () { |
|
|
const getMarket = async function () { |
|
|
try { |
|
|
try { |
|
@ -179,12 +179,12 @@ const get = async function (val) { |
|
|
console.log('jwcode 类型:', typeof goldDetail.value.jwcode); |
|
|
console.log('jwcode 类型:', typeof goldDetail.value.jwcode); |
|
|
console.log('jwcode 值:', goldDetail.value.jwcode); |
|
|
console.log('jwcode 值:', goldDetail.value.jwcode); |
|
|
|
|
|
|
|
|
const requestData = { ...getObj.value, goldDetail: { ...goldDetail.value } }; |
|
|
|
|
|
|
|
|
const requestData = {...getObj.value, goldDetail: {...goldDetail.value}}; |
|
|
console.log('最终请求参数', JSON.stringify(requestData, null, 2)); // 打印格式化后的请求参数 |
|
|
console.log('最终请求参数', JSON.stringify(requestData, null, 2)); // 打印格式化后的请求参数 |
|
|
const result = await API({ |
|
|
const result = await API({ |
|
|
url: '/goldDetail/getGoldDetail', |
|
|
url: '/goldDetail/getGoldDetail', |
|
|
method: 'post', |
|
|
method: 'post', |
|
|
data: { ...getObj.value, goldDetail: { ...goldDetail.value } } |
|
|
|
|
|
|
|
|
data: {...getObj.value, goldDetail: {...goldDetail.value}} |
|
|
}) |
|
|
}) |
|
|
console.log('响应数据', result) |
|
|
console.log('响应数据', result) |
|
|
tableData.value = result.data.list |
|
|
tableData.value = result.data.list |
|
@ -205,7 +205,7 @@ const get = async function (val) { |
|
|
url: '/goldDetail/getTotal', |
|
|
url: '/goldDetail/getTotal', |
|
|
method: 'post', |
|
|
method: 'post', |
|
|
data: { |
|
|
data: { |
|
|
goldDetail: { ...goldDetail.value }, |
|
|
|
|
|
|
|
|
goldDetail: {...goldDetail.value}, |
|
|
/* jwcode: goldDetail.value.jwcode || '', |
|
|
/* jwcode: goldDetail.value.jwcode || '', |
|
|
payPlatform: goldDetail.value.payPlatform || '', |
|
|
payPlatform: goldDetail.value.payPlatform || '', |
|
|
type: goldDetail.value.type || '', |
|
|
type: goldDetail.value.type || '', |
|
@ -346,7 +346,7 @@ const exportExcel = async function () { |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
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) { |
|
|
ElMessage.success('导出成功') |
|
|
ElMessage.success('导出成功') |
|
|
} |
|
|
} |
|
@ -365,9 +365,10 @@ const handleCurrentChange = function (val) { |
|
|
|
|
|
|
|
|
// 挂载 |
|
|
// 挂载 |
|
|
onMounted(async function () { |
|
|
onMounted(async function () { |
|
|
await get() |
|
|
|
|
|
await getArea() |
|
|
|
|
|
await getAdminData() |
|
|
await getAdminData() |
|
|
|
|
|
await get() |
|
|
|
|
|
await getmarket() |
|
|
|
|
|
|
|
|
await getPlatform() // 调用获取平台信息的函数 |
|
|
await getPlatform() // 调用获取平台信息的函数 |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
@ -387,7 +388,7 @@ const exportListLoading = ref(false) |
|
|
const getExportList = async () => { |
|
|
const getExportList = async () => { |
|
|
exportListLoading.value = true |
|
|
exportListLoading.value = true |
|
|
try { |
|
|
try { |
|
|
const result = await API({ url: '/export/export' }) |
|
|
|
|
|
|
|
|
const result = await API({url: '/export/export'}) |
|
|
if (result.code === 200) { |
|
|
if (result.code === 200) { |
|
|
const filteredData = result.data.filter(item => { |
|
|
const filteredData = result.data.filter(item => { |
|
|
return item.type === 0; //0表示客户明细 |
|
|
return item.type === 0; //0表示客户明细 |
|
@ -473,7 +474,7 @@ const handleMarketChange = (val) => { |
|
|
<el-col :span="5"> |
|
|
<el-col :span="5"> |
|
|
<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="goldDetail.jwcode" style="width: 150px" placeholder="请输入精网号" clearable /> |
|
|
|
|
|
|
|
|
<el-input v-model="goldDetail.jwcode" style="width: 150px" placeholder="请输入精网号" clearable/> |
|
|
</div> |
|
|
</div> |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-col :span="6"> |
|
@ -481,7 +482,7 @@ const handleMarketChange = (val) => { |
|
|
<el-text class="mx-1" size="large">平台信息:</el-text> |
|
|
<el-text class="mx-1" size="large">平台信息:</el-text> |
|
|
<el-select v-model="goldDetail.payPlatform" placeholder="请选择平台信息" style="width: 160px" clearable |
|
|
<el-select v-model="goldDetail.payPlatform" placeholder="请选择平台信息" style="width: 160px" clearable |
|
|
:loading="isLoadingPlatform"> |
|
|
:loading="isLoadingPlatform"> |
|
|
<el-option v-for="item in platform" :key="item.value" :label="item.label" :value="item.value" /> |
|
|
|
|
|
|
|
|
<el-option v-for="item in platform" :key="item.value" :label="item.label" :value="item.value"/> |
|
|
</el-select> |
|
|
</el-select> |
|
|
</div> |
|
|
</div> |
|
|
</el-col> |
|
|
</el-col> |
|
@ -489,14 +490,15 @@ const handleMarketChange = (val) => { |
|
|
<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.type" placeholder="请选择更新类型" style="width: 160px" clearable> |
|
|
<el-select v-model="goldDetail.type" placeholder="请选择更新类型" style="width: 160px" clearable> |
|
|
<el-option v-for="item in type" :key="item.value" :label="item.label" :value="item.value" /> |
|
|
|
|
|
|
|
|
<el-option v-for="item in type" :key="item.value" :label="item.label" :value="item.value"/> |
|
|
</el-select> |
|
|
</el-select> |
|
|
</div> |
|
|
</div> |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-col :span="6"> |
|
|
<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" @change="handleMarketChange"> |
|
|
:loading="isLoadingArea" @change="handleMarketChange"> |
|
|
<el-option v-for="item in market" |
|
|
<el-option v-for="item in market" |
|
|
:key="item.value || item" |
|
|
:key="item.value || item" |
|
@ -512,13 +514,16 @@ const handleMarketChange = (val) => { |
|
|
<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" /> |
|
|
|
|
|
|
|
|
end-placeholder="结束时间" style="width: 400px" @change="handleDatePickerChange"/> |
|
|
<el-button @click="getToday()" style="margin-left: 10px" |
|
|
<el-button @click="getToday()" style="margin-left: 10px" |
|
|
:type="activeTimeRange === 'today' ? 'primary' : ''"> 今</el-button> |
|
|
|
|
|
|
|
|
:type="activeTimeRange === 'today' ? 'primary' : ''"> 今 |
|
|
|
|
|
</el-button> |
|
|
<el-button @click="getYesterday()" style="margin-left: 10px" |
|
|
<el-button @click="getYesterday()" style="margin-left: 10px" |
|
|
:type="activeTimeRange === 'yesterday' ? 'primary' : ''"> 昨</el-button> |
|
|
|
|
|
|
|
|
:type="activeTimeRange === 'yesterday' ? 'primary' : ''"> 昨 |
|
|
|
|
|
</el-button> |
|
|
<el-button @click="get7Days()" style="margin-left: 10px" |
|
|
<el-button @click="get7Days()" style="margin-left: 10px" |
|
|
:type="activeTimeRange === '7days' ? 'primary' : ''"> 近7天</el-button> |
|
|
|
|
|
|
|
|
: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> |
|
@ -546,9 +551,9 @@ const handleMarketChange = (val) => { |
|
|
}}</span> |
|
|
}}</span> |
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
<el-table-column fixed="left" prop="name" label="姓名" width="150" /> |
|
|
|
|
|
<el-table-column fixed="left" prop="jwcode" label="精网号" width="120" /> |
|
|
|
|
|
<el-table-column prop="market" label="所属地区" width="120" /> |
|
|
|
|
|
|
|
|
<el-table-column fixed="left" prop="name" label="姓名" width="150"/> |
|
|
|
|
|
<el-table-column fixed="left" prop="jwcode" label="精网号" width="120"/> |
|
|
|
|
|
<el-table-column prop="market" label="所属地区" width="120"/> |
|
|
<el-table-column prop="payPlatform" label="平台信息" width="140"> |
|
|
<el-table-column prop="payPlatform" label="平台信息" width="140"> |
|
|
|
|
|
|
|
|
</el-table-column> |
|
|
</el-table-column> |
|
@ -591,7 +596,7 @@ const handleMarketChange = (val) => { |
|
|
<span>{{ scope.row.taskGold / 100 }}</span> |
|
|
<span>{{ scope.row.taskGold / 100 }}</span> |
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
<el-table-column prop="adminName" label="提交人" width="110" /> |
|
|
|
|
|
|
|
|
<el-table-column prop="adminName" label="提交人" width="110"/> |
|
|
<el-table-column prop="auditTime" sortable="custom" label="更新时间" width="210" show-overflow-tooltip> |
|
|
<el-table-column prop="auditTime" sortable="custom" label="更新时间" width="210" show-overflow-tooltip> |
|
|
<template #default="scope"> |
|
|
<template #default="scope"> |
|
|
<span>{{ |
|
|
<span>{{ |
|
@ -605,7 +610,8 @@ const handleMarketChange = (val) => { |
|
|
<!-- 此处分页 --> |
|
|
<!-- 此处分页 --> |
|
|
<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> |
|
@ -615,7 +621,7 @@ const handleMarketChange = (val) => { |
|
|
<!-- 导出列表弹窗 --> |
|
|
<!-- 导出列表弹窗 --> |
|
|
<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'"> |
|
|