413 lines
11 KiB
Vue
413 lines
11 KiB
Vue
<template>
|
||
<div class="list-gold-coin-transfer">
|
||
<div class="container">
|
||
<div class="handle-box">
|
||
<el-form
|
||
ref="searchForm"
|
||
:model="searchForm"
|
||
:rules="searchRule"
|
||
label-width="120px"
|
||
:disabled="tableLoading"
|
||
>
|
||
<div class="search-line">
|
||
<el-form-item label="转赠用户平台号" prop="sendUserPlatformNo">
|
||
<el-input
|
||
v-model.number="searchForm.sendUserPlatformNo"
|
||
placeholder="请输入"
|
||
></el-input>
|
||
</el-form-item>
|
||
<el-form-item label="接收用户平台号" prop="receiveUserPlatformNo">
|
||
<el-input
|
||
v-model.number="searchForm.receiveUserPlatformNo"
|
||
placeholder="请输入"
|
||
></el-input>
|
||
</el-form-item>
|
||
<el-form-item label="创建时间" class="large">
|
||
<el-form-item prop="startTime">
|
||
<el-date-picker
|
||
type="datetime"
|
||
placeholder="选择开始时间"
|
||
v-model="searchForm.startTime"
|
||
value-format="yyyy/MM/dd HH:mm:ss"
|
||
></el-date-picker>
|
||
</el-form-item>
|
||
<el-col :span="2" align="center">-</el-col>
|
||
<el-form-item prop="endTime">
|
||
<el-date-picker
|
||
type="datetime"
|
||
placeholder="选择结束时间"
|
||
v-model="searchForm.endTime"
|
||
value-format="yyyy/MM/dd HH:mm:ss"
|
||
></el-date-picker>
|
||
</el-form-item>
|
||
</el-form-item>
|
||
<el-form-item label-width="40px">
|
||
<el-button type="primary" @click="handSearch">搜索</el-button>
|
||
<el-button plain @click="resetSearchForm">重置搜索</el-button>
|
||
<el-button
|
||
type="primary"
|
||
class="mr10"
|
||
@click="exportVisible = true"
|
||
>导出</el-button
|
||
>
|
||
</el-form-item>
|
||
</div>
|
||
</el-form>
|
||
|
||
<p style="color: #00d1b2">当前汇总值:{{ totalCoins }}</p>
|
||
</div>
|
||
<el-table
|
||
:data="tableData"
|
||
border
|
||
class="table"
|
||
ref="multipleTable"
|
||
header-cell-class-name="table-header"
|
||
@header-click="headerCopy"
|
||
v-loading="tableLoading"
|
||
>
|
||
<el-table-column
|
||
prop="id"
|
||
width="90"
|
||
label="ID"
|
||
align="center"
|
||
fixed="left"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="fromUserNick"
|
||
label="转赠用户昵称"
|
||
align="center"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="fromUserPlatformNo"
|
||
width="120"
|
||
label="转赠用户平台号"
|
||
align="center"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="toUserNick"
|
||
label="接收用户昵称"
|
||
align="center"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="toUserPlatformNo"
|
||
width="120"
|
||
label="接收用户平台号"
|
||
align="center"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="abbr"
|
||
label="接收用户国家"
|
||
align="center"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="goldNum"
|
||
width="110"
|
||
label="金币数量"
|
||
align="center"
|
||
></el-table-column>
|
||
<el-table-column width="160" label="创建时间" align="center">
|
||
<template v-slot="scope">{{
|
||
convertTimestamp(scope.row.createTime)
|
||
}}</template>
|
||
</el-table-column>
|
||
<el-table-column width="160" label="更新时间" align="center">
|
||
<template v-slot="scope">{{
|
||
convertTimestamp(scope.row.updateTime)
|
||
}}</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
<table-pagination
|
||
:pageParams="pageParams"
|
||
:pageTotal="pageTotal"
|
||
@handleSizeChange="handleSizeChange"
|
||
@handlePageChange="handlePageChange"
|
||
></table-pagination>
|
||
</div>
|
||
<!-- 确认导出弹出框 -->
|
||
<el-dialog
|
||
v-model="exportVisible"
|
||
width="30%"
|
||
:before-close="handlDialogClose"
|
||
>
|
||
<!-- 使用 v-slot 指令提供 'title' 插槽的内容 -->
|
||
<template v-slot:title>
|
||
<div style="display: flex; align-items: center">提示</div>
|
||
</template>
|
||
|
||
<!-- 默认插槽的内容 -->
|
||
<div style="font-size: 16px">确定以当前筛选条件导出Excel吗?</div>
|
||
|
||
<!-- 使用 v-slot 指令提供 'footer' 插槽的内容 -->
|
||
<template v-slot:footer>
|
||
<span class="dialog-footer">
|
||
<el-button @click="exportVisible = false" :disabled="dialogDisabled"
|
||
>取 消</el-button
|
||
>
|
||
<el-button
|
||
type="primary"
|
||
@click="confirmExport2Excel"
|
||
:loading="btnLoading"
|
||
:disabled="dialogDisabled"
|
||
>确 定</el-button
|
||
>
|
||
</span>
|
||
</template>
|
||
</el-dialog>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import {
|
||
getGoldCoinTransferList,
|
||
getGoldCoinSumGold,
|
||
} from "@/api/relUserBelongings/relUserBelongings.js";
|
||
import { formatDate } from "@/utils/relDate.js";
|
||
import { exportExcel } from "@/utils/exportExcel.js";
|
||
import TablePagination from "@/components/common/TablePagination.vue";
|
||
export default {
|
||
name: "GoldCoinGiftingHistory",
|
||
components: { TablePagination },
|
||
data() {
|
||
return {
|
||
clickedLineId: null, // 记录被点击的某行数据的id
|
||
clickedLineText: "GIFT_IN_ROOM", // 记录红包类型
|
||
tableData: [], // 接口返回的表格数据
|
||
pageTotal: 0, // 接口返回的表格总条数
|
||
pageParams: {
|
||
pageNo: 1,
|
||
pageSize: 10,
|
||
},
|
||
exportVisible: false,
|
||
tableLoading: false, // 表格是否加载中
|
||
|
||
// 搜索表单相关
|
||
searchForm: {
|
||
sendUserPlatformNo: null, // 接收者平台号
|
||
receiveUserPlatformNo: null, // 发送者平台号
|
||
startTime: null,
|
||
endTime: null,
|
||
},
|
||
searchRule: {
|
||
startTime: [
|
||
{
|
||
validator: (rule, value, callback) => {
|
||
this.$refs["searchForm"].validateField("endTime");
|
||
callback();
|
||
},
|
||
trigger: "change",
|
||
},
|
||
],
|
||
endTime: [
|
||
{
|
||
validator: (rule, value, callback) => {
|
||
const { startTime } = this.searchForm;
|
||
if (startTime !== null && startTime !== "" && value) {
|
||
if (value <= startTime) {
|
||
callback(new Error("须晚于开始时间"));
|
||
} else {
|
||
callback();
|
||
}
|
||
} else {
|
||
callback();
|
||
}
|
||
},
|
||
trigger: "change",
|
||
},
|
||
],
|
||
},
|
||
|
||
dialogDisabled: false, // 是否禁用弹出框(dialog)表单元素
|
||
btnLoading: false, // 弹出框(dialog)的确认按钮
|
||
totalCoins: null, //当前金币汇总值
|
||
};
|
||
},
|
||
created() {
|
||
// this.getData();
|
||
},
|
||
methods: {
|
||
getData() {
|
||
this.tableLoading = true;
|
||
|
||
let { pageParams, searchForm } = this;
|
||
searchForm = JSON.parse(JSON.stringify(searchForm));
|
||
pageParams = JSON.parse(JSON.stringify(pageParams));
|
||
Object.keys(searchForm).forEach((item) => {
|
||
if (
|
||
!searchForm[item] ||
|
||
(searchForm[item] !== undefined && searchForm[item] === "")
|
||
) {
|
||
delete searchForm[item];
|
||
}
|
||
});
|
||
Object.assign(pageParams, searchForm);
|
||
|
||
getGoldCoinSumGold(pageParams).then((res) => {
|
||
if (res.data.success === true) {
|
||
let data = res.data.data;
|
||
this.totalCoins = data;
|
||
}
|
||
});
|
||
getGoldCoinTransferList(pageParams).then((res) => {
|
||
this.tableLoading = false;
|
||
if (res.data.success === true) {
|
||
let data = res.data.data;
|
||
this.tableData = data.list;
|
||
this.pageTotal = data.total;
|
||
}
|
||
});
|
||
},
|
||
// 点击搜索
|
||
handSearch() {
|
||
this.$refs["searchForm"].validate((valid) => {
|
||
if (valid) {
|
||
this.pageParams.pageNo = 1;
|
||
this.getData();
|
||
}
|
||
});
|
||
},
|
||
// 重置搜索表单
|
||
resetSearchForm() {
|
||
this.$refs["searchForm"].resetFields();
|
||
this.pageParams.pageNo = 1;
|
||
this.getData();
|
||
},
|
||
// 弹窗关闭前控制
|
||
handlDialogClose(done) {
|
||
const { dialogDisabled } = this;
|
||
if (dialogDisabled) return;
|
||
done();
|
||
},
|
||
// 重置表单状态
|
||
resetDialog() {
|
||
this.btnLoading = false;
|
||
this.dialogDisabled = false;
|
||
},
|
||
|
||
// 分页导航
|
||
handleSizeChange(val) {
|
||
this.$set(this.pageParams, "pageSize", val);
|
||
this.getData();
|
||
},
|
||
handlePageChange(val) {
|
||
this.$set(this.pageParams, "pageNo", val);
|
||
this.getData();
|
||
},
|
||
headerCopy(column, e) {
|
||
this.$copy(column.label);
|
||
},
|
||
|
||
// 确认导出
|
||
confirmExport2Excel() {
|
||
this.btnLoading = true;
|
||
this.dialogDisabled = true;
|
||
|
||
let { searchForm } = this;
|
||
searchForm = JSON.parse(JSON.stringify(searchForm));
|
||
Object.keys(searchForm).forEach((item) => {
|
||
if (
|
||
!searchForm[item] ||
|
||
(searchForm[item] !== undefined && searchForm[item] === "")
|
||
) {
|
||
delete searchForm[item];
|
||
}
|
||
});
|
||
Object.assign(searchForm, { pageSize: 10000, pageNo: 1 });
|
||
|
||
getGoldCoinTransferList(searchForm).then((res) => {
|
||
this.resetDialog();
|
||
if (res.data.success === true) {
|
||
this.exportVisible = false;
|
||
|
||
const list = res.data.data.list;
|
||
list.forEach((item) => {
|
||
item.createTime = formatDate(item.createTime);
|
||
item.updateTime = formatDate(item.updateTime);
|
||
});
|
||
const tHeader = [
|
||
"ID",
|
||
"转赠用户昵称",
|
||
"转赠用户平台号",
|
||
"接收用户昵称",
|
||
"接收用户平台号",
|
||
"接收用户国家",
|
||
"金币数量",
|
||
"创建时间",
|
||
"更新时间",
|
||
];
|
||
const filterVal = [
|
||
"id",
|
||
"fromUserNick",
|
||
"fromUserPlatformNo",
|
||
"toUserNick",
|
||
"toUserPlatformNo",
|
||
"abbr",
|
||
"goldNum",
|
||
"createTime",
|
||
"updateTime",
|
||
];
|
||
const exportName = `金币转赠历史${formatDate(new Date())}`;
|
||
|
||
exportExcel(tHeader, filterVal, list, exportName);
|
||
}
|
||
});
|
||
},
|
||
},
|
||
computed: {
|
||
convertTimestamp() {
|
||
return function (time) {
|
||
let date = new Date(time);
|
||
return formatDate(date);
|
||
};
|
||
},
|
||
},
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.handle-box {
|
||
overflow: hidden;
|
||
.search-line {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
.el-form-item {
|
||
width: 320px;
|
||
.el-input,
|
||
.el-select {
|
||
width: 200px;
|
||
}
|
||
.el-form-item--small {
|
||
margin-bottom: 0;
|
||
}
|
||
.el-form-item {
|
||
float: left;
|
||
}
|
||
&.large {
|
||
width: 580px;
|
||
.el-form-item {
|
||
width: 200px;
|
||
}
|
||
}
|
||
&.small {
|
||
.el-form-item {
|
||
width: 90px;
|
||
.el-input {
|
||
width: 100%;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.table {
|
||
width: 100%;
|
||
font-size: 14px;
|
||
}
|
||
|
||
.table-td-thumb {
|
||
display: block;
|
||
margin: auto;
|
||
width: 40px;
|
||
height: 40px;
|
||
}
|
||
</style> |