Commit 63f74695 authored by lixy's avatar lixy

Merge branch 'dev-td' into master-td

parents 1ae390ae 776ccc9e
import fetch from 'utils/fetch';
/**
* 获取统计列表
* @param query
*/
export function financialList(query) {
return fetch({
url: '/api/admin/memberShareCountRecord/selectList',
method: 'get',
params: query
});
}
/**
* 分红明细列表
*/
export function getAllRecord(query) {
return fetch({
url: '/api/admin/memberShareRecord/getAllRecord',
method: 'get',
params: query
});
}
/**
* 创客收益统计列表
*/
export function memberShareCountRecord(query) {
return fetch({
url: '/api/admin/memberShareRecord/getAllCountRecord',
method: 'get',
params: query
});
}
...@@ -4,6 +4,28 @@ export function page(query) { ...@@ -4,6 +4,28 @@ export function page(query) {
return fetch({ return fetch({
url: '/api/order/baseOrder/getOrderList', url: '/api/order/baseOrder/getOrderList',
method: 'get', method: 'get',
params:query params: query
});
}
/**
* 会员等级
*/
export function memberLevels(query) {
return fetch({
url: '/api/admin/member/app/unauth/levels',
method: 'get',
params: query
});
}
/**
* 会员录入
*/
export function createMemberOrder(query) {
return fetch({
url: '/api/order/orderMember/baseOrder/createOrder',
method: 'post',
data: query
}); });
} }
...@@ -679,6 +679,27 @@ export const asyncRouterMap = [ ...@@ -679,6 +679,27 @@ export const asyncRouterMap = [
}, },
], ],
}, },
{
path: "/financialReports",
component: Layout,
name: "财务报表",
icon: "setting",
authority: "financialReports",
children: [
{
path: "dividendStatistics",
component: _import("financialReports/dividendStatistics"),
name: "创客收益",
authority: "dividendStatistics",
},
{
path: "revenueStatistics",
component: _import("financialReports/revenueStatistics"),
name: "创客收益统计",
authority: "revenueStatistics",
}
],
},
{ {
path: "/summit", path: "/summit",
component: Layout, component: Layout,
......
<template>
<div class="app-container calendar-list-container" v-loading.body="showLoadingBody">
<div class="filter-container" ref="filter-container">
<el-form ref="queryForm" :inline="inline" :model="listQuery" label-width="100px" class="ulti-form">
<el-row>
<el-col :span="8">
<el-form-item label="姓名">
<el-input v-model.number="listQuery.name" placeholder="请输入姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="时间">
<el-date-picker
v-model="dateList"
type="monthrange"
value-format="yyyy-MM"
range-separator="至"
start-placeholder="开始月份"
end-placeholder="结束月份">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-button class="filter-item" type="primary" v-waves @click="handleFilter">搜索</el-button>
<el-button class="filter-item" style="margin-left: 10px;" @click="handleClean" >清除搜索</el-button>
<el-button class="filter-item" style="margin-left: 10px;" @click="handleExport" >导出</el-button>
</div>
<el-table :key='tableKey' :data="list" border fit highlight-current-row
style="width: 100%">
<el-table-column
type="index"
align="center" label="序号" width="65">
</el-table-column>
<el-table-column align="center" label="统计时间">
<template slot-scope="scope">
<span>{{scope.row.countMonth}}</span>
</template>
</el-table-column>
<el-table-column width="300" align="center" label="会员">
<template slot-scope="scope">
<span>{{scope.row.realName}}</span>
</template>
</el-table-column>
<el-table-column width="200" align="center" label="等级">
<template slot-scope="scope">
<span>{{scope.row.levelName}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="总分红">
<template slot-scope="scope">
<span>{{scope.row.amount}}</span>
</template>
</el-table-column>
<el-table-column align="center" width="150" label="操作">
<template slot-scope="scope">
<el-button size="small" class="el-button el-button--text el-button--small" @click="handleSee(scope.row)">查看明细</el-button>
</template>
</el-table-column>
</el-table>
<div v-show="!listLoading" class="pagination-container">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page.sync="listQuery.page" :page-sizes="[10,20,30, 50]" :page-size="listQuery.limit"
layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
</div>
<el-dialog :visible.sync="oneDialogVisible" title="分红明细">
<one-dividend :one-row="oneRow" v-on:oneDialogEvent="oneDialogEvent" ></one-dividend>
</el-dialog>
</div>
</template>
<style>
.el-date-editor .el-range-separator {
width: auto !important;
}
</style>
<script type="javascript">
import {mapGetters} from 'vuex';
import {
getToken
} from 'utils/auth';
import {
financialList
} from 'api/financialReports';
import oneDividend from "./oneDividend";
import Element1 from "../admin/menu/components/element";
import ElRow from "element-ui/packages/row/src/row";
import ElCol from "element-ui/packages/col/src/col";
export default {
name: 'tourManage',
components: {
ElCol,
ElRow,
Element1,
oneDividend
},
data() {
return {
BASE_API: process.env.BASE_API,
oneDialogVisible: false,//查看明细
showLoadingBody: false,
oneRow: {},
list: [],
total: 0,
listLoading: true,
listQuery: {
page: 1,
limit: 20,
startDate: undefined,
endDate: undefined,
name: '' // 姓名
},
dateList: '',
inline: true,
tableKey: 0
}
},
created() {
this.getList();
},
computed: {
...mapGetters([
'elements'
])
},
methods: {
/**
* 查看明细
* */
handleSee(row) {
this.oneRow = row;
this.oneDialogVisible = true;
},
/**
* 旅游modal传递回来的数据
* */
oneDialogEvent(e){
this.oneDialogVisible = false;
},
/**
* 获取列表
* */
getList() {
this.listLoading = true;
financialList(this.listQuery).then(response => {
let totalCountRs = 0;
let listRs = [];
if (!this.$utils.isEmpty(response.data.data) && this.$utils.isInteger(response.data.totalCount)) {
listRs = response.data.data;
totalCountRs = response.data.totalCount;
}
this.listLoading = false;
this.list = listRs;
this.total = totalCountRs;
})
},
/**
* 清除搜索
*/
handleClean(){
this.listQuery = {
page: 1,
limit: 20,
startDate: undefined,
endDate: undefined,
name: '' // 姓名
}
this.dateList = ''
this.getList()
},
/**
* 导出
*/
handleExport() {
var url =
this.BASE_API + "/api/admin/memberShareCountRecord/export";
if(this.dateList) {
this.listQuery.startDate = this.dateList[0]
this.listQuery.endDate = this.dateList[1]
}
var params = this.listQuery;
for (var c in params) {
if (!params[c]) {
delete params[c];
}
if (c == "page") {
delete params[c];
}
if (c == "limit") {
delete params[c];
}
}
console.log(params);
let paramsArray = [];
//拼接参数
Object.keys(params).forEach((key) =>
paramsArray.push(key + "=" + params[key])
);
if (url.search(/\?/) === -1) {
url += "?" + paramsArray.join("&");
} else {
url += "&" + paramsArray.join("&");
}
console.log(url);
this.exportExcel(url);
},
exportExcel(excelUrl) {
fetch(excelUrl, {
headers: {
"Authorization": getToken(),
"Content-type": "application/json;charset=UTF-8"
},
}).then((res) =>
res.blob().then((blob) => {
var filename = `创客收益.xlsx`;
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, filename); //兼容ie10
} else {
var a = document.createElement("a");
document.body.appendChild(a); //兼容火狐,将a标签添加到body当中
var url = window.URL.createObjectURL(blob); // 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
a.href = url;
a.download = filename;
a.target = "_blank"; // a标签增加target属性
a.click();
a.remove(); //移除a标签
window.URL.revokeObjectURL(url);
}
})
);
},
/**
* 搜索
*/
handleFilter() {
this.listQuery.page = 1;
if(this.dateList) {
this.listQuery.startDate = this.dateList[0]
this.listQuery.endDate = this.dateList[1]
}
this.$refs.queryForm.validate(valid => {
if (valid) {
this.getList();
} else {
return false;
}
});
},
handleSizeChange(val) {
this.listQuery.limit = val;
this.getList();
},
handleCurrentChange(val) {
this.listQuery.page = val;
this.getList();
}
}
}
</script>
<template>
<div v-loading.body="showLoadingBody">
<el-table :key='tableKey' :data="list" border fit highlight-current-row
style="width: 100%">
<el-table-column
type="index"
align="center" label="序号" width="65">
</el-table-column>
<el-table-column align="center" label="会员单号">
<template slot-scope="scope">
<span>{{scope.row.orderNo}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="下单用户">
<template slot-scope="scope">
<span>{{scope.row.realName}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="下单时间">
<template slot-scope="scope">
<span>{{scope.row.payTimeStr}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="订单金额">
<template slot-scope="scope">
<span>{{scope.row.orderAmount}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="总分红">
<template slot-scope="scope">
<span>{{scope.row.totalAmount}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="分红人数">
<template slot-scope="scope">
<span>{{scope.row.memberNum}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="分红人">
<template slot-scope="scope">
<span>{{oneRow.levelName}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="等级">
<template slot-scope="scope">
<span>{{scope.row.levelName}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="分红">
<template slot-scope="scope">
<span>{{scope.row.amount}}</span>
</template>
</el-table-column>
</el-table>
<div v-show="!listLoading" class="pagination-container">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page.sync="listQuery.page" :page-sizes="[10,20,30, 50]" :page-size="listQuery.limit"
layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
</div>
<div slot="footer" style="display:flex;justify-content: flex-end; margin-top:10px;">
<el-button @click="cancel">关 闭</el-button>
<el-button type="primary" @click="handleExport">导 出</el-button>
</div>
</div>
</template>
<style>
.el-date-editor .el-range-separator {
width: auto !important;
}
</style>
<script type="javascript">
import {
timestamp2Date
} from 'utils/dateUtils';
import {mapGetters} from 'vuex';
import {getToken} from 'src/utils/auth';
import {
getAllRecord
} from 'api/financialReports';
import Element1 from "../admin/menu/components/element";
import ElRow from "element-ui/packages/row/src/row";
import ElCol from "element-ui/packages/col/src/col";
export default {
props: ['oneRow'],
name: 'tourManage',
components: {
ElCol,
ElRow,
Element1
},
data() {
return {
BASE_API: process.env.BASE_API,
showLoadingBody: false,
list: [],
total: 0,
listQuery: {
page: 1,
limit: 20,
userId: this.oneRow.userId
},
listLoading: true,
tableKey: 0
}
},
mounted() {
this.getList();
},
computed: {
...mapGetters([
'elements'
])
},
methods: {
/**
* 获取列表
* */
getList() {
this.listLoading = true;
getAllRecord(this.listQuery).then(response => {
let totalCountRs = undefined;
let listRs = undefined;
if (!this.$utils.isEmpty(response.data.data) && this.$utils.isInteger(response.data.totalCount)) {
listRs = response.data.data;
totalCountRs = response.data.totalCount;
listRs.map(function(item){
item.payTimeStr = timestamp2Date(item.payTime);
});
}
this.listLoading = false;
this.list = listRs;
this.total = totalCountRs;
})
},
/**
* 导出
*/
handleExport() {
var url =
this.BASE_API + "/api/admin/memberShareRecord/export";
var params = this.listQuery;
for (var c in params) {
if (!params[c]) {
delete params[c];
}
if (c == "page") {
delete params[c];
}
if (c == "limit") {
delete params[c];
}
}
console.log(params);
let paramsArray = [];
//拼接参数
Object.keys(params).forEach((key) =>
paramsArray.push(key + "=" + params[key])
);
if (url.search(/\?/) === -1) {
url += "?" + paramsArray.join("&");
} else {
url += "&" + paramsArray.join("&");
}
console.log(url);
this.exportExcel(url);
},
exportExcel(excelUrl) {
fetch(excelUrl, {
headers: {
"Content-type": "application/json;charset=UTF-8",
"Authorization": getToken()
},
}).then((res) =>
res.blob().then((blob) => {
var filename = `分红明细.xlsx`;
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, filename); //兼容ie10
} else {
var a = document.createElement("a");
document.body.appendChild(a); //兼容火狐,将a标签添加到body当中
var url = window.URL.createObjectURL(blob); // 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
a.href = url;
a.download = filename;
a.target = "_blank"; // a标签增加target属性
a.click();
a.remove(); //移除a标签
window.URL.revokeObjectURL(url);
}
})
);
},
/**
* 搜索
*/
handleFilter() {
this.listQuery.page = 1;
if(this.dateList) {
this.listQuery.startDate = this.dateList[0]
this.listQuery.endDate = this.dateList[1]
}
this.$refs.queryForm.validate(valid => {
if (valid) {
this.getList();
} else {
return false;
}
});
},
handleSizeChange(val) {
this.listQuery.limit = val;
this.getList();
},
handleCurrentChange(val) {
this.listQuery.page = val;
this.getList();
},
cancel(){
this.$emit('oneDialogEvent', false)
}
}
}
</script>
<template>
<div class="app-container calendar-list-container">
<div class="filter-container">
<el-form ref="queryForm" :model="listQuery" label-width="100px">
<el-row>
<el-col :span="8">
<el-form-item label="统计时间:">
<el-date-picker
v-model="listQuery.time"
type="daterange"
range-separator="-"
value-format="timestamp"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="changeTime"
placeholder="请选择统计时间"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="统计方式:" class="wayMsg">
<span
v-for="(item,index) in way"
:key="index"
:class="{active:isactive==item.label}"
@click="changeWay(item)"
>{{item.label}}</span>
</el-form-item>
</el-col>
<el-col :span="5" style="float:right;text-align:right">
<el-button class="filter-item" type="primary" v-waves @click="handleFilter">导出为Excel</el-button>
</el-col>
</el-row>
</el-form>
<el-table :data="list" border fit highlight-current-row v-loading="loading">
<el-table-column align="center" label="统计时间">
<template slot-scope="scope">
<span>{{scope.row.date}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="会员等级">
<template slot-scope="scope">
<span>{{scope.row.levelName}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="会员人数">
<template slot-scope="scope">
<span>{{scope.row.userNum}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="总分红">
<template slot-scope="scope">
<span>{{scope.row.totalAmount}}</span>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="listQuery.page"
:page-sizes="[10,20,30, 50]"
:page-size="listQuery.limit"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
style="margin-top:20px"
></el-pagination>
</div>
</div>
</template>
<script type="javascript">
import { memberShareCountRecord } from 'api/financialReports'
import {getToken} from 'utils/auth';
export default {
data() {
return {
BASE_API: process.env.BASE_API,
loading: false,
total: null,
list: [],
scrollTop: '',
// 统计时间筛选
listQuery: {
type: '1',
startDate: null,
endDate: null,
time: '',
limit: 10,
page: 1
},
//统计方式筛选
way: [
{
label: '日统计',
id: '1'
},
{
label: '月统计',
id: '2'
},
{
label: '年统计',
id: '3'
}
],
isactive: '日统计'
}
},
created() {
this.getList()
},
methods: {
//统计时间筛选
changeTime() {
if(this.listQuery.time){
!!this.listQuery.time[0]
? (this.listQuery.startDate = this.listQuery.time[0])
: (this.listQuery.startDate = null)
!!this.listQuery.time[1]
? (this.listQuery.endDate = this.listQuery.time[1])
: (this.listQuery.endDate = null)
} else {
this.listQuery.endDate = undefined
this.listQuery.startDate = undefined
}
this.listQuery.page = 1
this.getList()
},
//统计方式筛选
changeWay(val) {
this.isactive = val.label
this.listQuery.type = val.id
this.listQuery.page = 1
this.getList()
},
/**
* 导出
*/
handleFilter() {
var url = this.BASE_API + "/api/admin/memberShareRecord/exportCountRecordList";
var params = this.listQuery;
for (var c in params) {
if (!params[c]) {
delete params[c];
}
if (c == "page") {
delete params[c];
}
if (c == "limit") {
delete params[c];
}
if (c == "time") {
delete params[c];
}
}
console.log(params);
let paramsArray = [];
//拼接参数
Object.keys(params).forEach((key) =>
paramsArray.push(key + "=" + params[key])
);
if (url.search(/\?/) === -1) {
url += "?" + paramsArray.join("&");
} else {
url += "&" + paramsArray.join("&");
}
console.log(url);
this.exportExcel(url);
},
exportExcel(excelUrl) {
fetch(excelUrl, {
headers: {
"Authorization": getToken(),
"Content-type": "application/json;charset=UTF-8"
},
}).then((res) =>
res.blob().then((blob) => {
var filename = `创客收益统计.xlsx`;
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, filename); //兼容ie10
} else {
var a = document.createElement("a");
document.body.appendChild(a); //兼容火狐,将a标签添加到body当中
var url = window.URL.createObjectURL(blob); // 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
a.href = url;
a.download = filename;
a.target = "_blank"; // a标签增加target属性
a.click();
a.remove(); //移除a标签
window.URL.revokeObjectURL(url);
}
})
);
},
handleSizeChange(val) {
this.listQuery.limit = val
this.getList()
},
handleCurrentChange(val) {
this.listQuery.page = val
this.getList()
},
// 数组去重
repeat(json){
try{
let newJson = [];
for(var i = 0;i < json.length; i++){
let flag = true;
for(var j = 0; j < newJson.length; j++){
if(newJson[j].tname == json[i].tname) {
flag = false;
}
}
if(flag){ //判断是否重复
newJson.push(json[i]);
}
}
return newJson
} catch(err){
console.log(err)
}
},
//列表
getList() {
let _this = this
let params = {
type: this.listQuery.type,
startDate: this.listQuery.startDate,
endDate: this.listQuery.endDate,
page: this.listQuery.page,
limit: this.listQuery.limit
}
this.loading = true
memberShareCountRecord(params).then(data => {
if (data.status == 200) {
this.total = data.data.total
this.list = data.data.data
}
setTimeout(() => {
this.loading = false
}, 300)
document.documentElement.scrollTop = 0
})
}
}
}
</script>
<style>
.wayMsg span {
margin: 10px;
cursor: pointer;
}
.active {
color: #409eff;
font-weight: bold;
}
</style>
<template>
<el-dialog
title="新增订单"
:visible.sync="memberDialogVisible"
@close="closePop"
:modal="false"
class="flex-aic vehicle-dialog"
>
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="140px"
>
<el-row>
<el-col :span="12">
<el-form-item label="用户手机号" prop="phone">
<el-input v-model="form.phone" placeholder="输入用户手机号" ></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="会员等级" prop="memberIndex">
<el-select class="filter-item" v-model="form.memberIndex" placeholder="请选择会员类型" @change="changeLevel">
<el-option v-for="(item, index) in memeberList" :key="item.level" :label="item.name" :value="index"> </el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="免费天数">
<el-input v-model="form.freeDay" placeholder="输入免费天数" type="number" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="实付金额" prop="orderAmount">
<el-input v-model="form.orderAmount" placeholder="输入实付金额" type="number"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="下单时间" prop="payTime">
<el-date-picker
v-model="form.payTime"
:picker-options="pickerOptions"
type="datetime"
value-format="timestamp"
placeholder="选择下单时间">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleSubmit" v-if="!isClick">确 定</el-button>
<el-button type="primary" style="opacity: 0.6;" v-if="isClick">确 定</el-button>
<el-button @click="closePop">关 闭</el-button>
</div>
</el-dialog>
</template>
<script type="javascript">
import { memberLevels, createMemberOrder } from 'api/order/memeber'
export default {
name: 'addMemberModal',
data() {
return {
memberDialogVisible:false,
form: {
memberIndex: undefined, // 会员等级index
memberLevel: undefined, // 会员等级
freeDay: undefined, // 当前会员等级免费天数
phone: undefined, // 用户手机号
orderAmount: undefined, // 实付金额
payTime: undefined // 下单时间
},
pickerOptions: {
disabledDate(time) {
return time.getTime() > Date.now();
}
},
isClick: false, // 是否已点击,防二次触发
selectedMember:{}, // 当前已选会员等级
rules: {
phone: {
required: true, message:'请输入用户手机号',trigger: 'blur'
},
memberIndex: {
required: true, message:'请选择会员等级',trigger: 'change'
},
payTime: {
required: true, message:'请选择下单时间',trigger: 'change'
},
orderAmount: { required: true, message: '请填写正确的实付金额,最多保留2位小数', trigger: 'blur',
transform(value) {
if(value !== null && value !== '' && value !== undefined) {
if (String(value).trim() === '' || Number(value) <= 0) {
return false
} else if (!/^\d+(\.\d{0,2})?$/.test(value)) {
return false
} else{
return parseFloat(value).toFixed(2)
}
} else {
return null
}
}
}
},
memeberList: [], // 会员类型列表
}
},
created() {
this.getAllMemeberList() // 获取全部会员等级
},
mounted() {
this.memberDialogVisible = true
},
methods: {
/**
* 获取全部会员列表
*/
getAllMemeberList(){
memberLevels().then(res => {
this.memeberList = res
})
},
closePop(){
this.$emit('memberEvent', false)
},
/**
* 会员等级变化
*/
changeLevel(index){
this.selectedMember = this.memeberList[index]
this.form.memberLevel = this.selectedMember.level
this.form.freeDay = this.selectedMember.number
},
/**
* 确定
*/
handleSubmit() {
let _this = this
const set = this.$refs;
if (this.isClick) {
return;
}
this.isClick = true;
setTimeout(function(){
_this.isClick = false
}, 2000)
set["form"].validate((valid) => {
let params = {
phone: _this.form.phone,
payTime: _this.form.payTime,
orderAmount: _this.form.orderAmount,
memberLevel: _this.selectedMember.level,
memberLevelId: _this.selectedMember.id
}
if (valid) {
createMemberOrder(params).then((response) => {
if (response.status == 200) {
this.$notify({
title: "操作成功",
message: "添加成功",
type: "success",
duration: 2000,
});
setTimeout(function(){
_this.$emit("memberEvent", true);
}, 1000)
} else {
this.isClick = false;
this.$notify({
title: "失败",
message: response.message,
type: "error",
duration: 2000,
});
}
});
}
})
}
}
}
</script>
...@@ -55,11 +55,11 @@ ...@@ -55,11 +55,11 @@
<el-input v-model="listQuery.leaderPhone" placeholder="请输入上级手机号"></el-input> <el-input v-model="listQuery.leaderPhone" placeholder="请输入上级手机号"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="5"> <!-- <el-col :span="5">-->
<el-form-item label="促成人手机号"> <!-- <el-form-item label="促成人手机号">-->
<el-input v-model="listQuery.facilitatePhone" placeholder="请输入促成人手机号"></el-input> <!-- <el-input v-model="listQuery.facilitatePhone" placeholder="请输入促成人手机号"></el-input>-->
</el-form-item> <!-- </el-form-item>-->
</el-col> <!-- </el-col>-->
<!-- <el-col> <!-- <el-col>
<el-form-item label="时间"> <el-form-item label="时间">
<el-date-picker v-model="listQuery.startTime" type = "date" placeholder = "请输入开始时间"></el-date-picker> <el-date-picker v-model="listQuery.startTime" type = "date" placeholder = "请输入开始时间"></el-date-picker>
...@@ -71,9 +71,10 @@ ...@@ -71,9 +71,10 @@
<el-form-item label="会员类型"> <el-form-item label="会员类型">
<el-select class="filter-item" v-model="listQuery.level" placeholder="请选择会员类型"> <el-select class="filter-item" v-model="listQuery.level" placeholder="请选择会员类型">
<el-option :key="null" label="全部" :value="undefined"></el-option> <el-option :key="null" label="全部" :value="undefined"></el-option>
<el-option :key="1" label="普通会员" :value="1"></el-option> <el-option v-for="item in memeberList" :key="item.level" :label="item.name" :value="item.level"> </el-option>
<el-option :key="2" label="黄金会员" :value="2"></el-option> <!-- <el-option :key="1" label="普通会员" :value="1"></el-option>-->
<el-option :key="3" label="钻石会员" :value="3"></el-option> <!-- <el-option :key="2" label="黄金会员" :value="2"></el-option>-->
<!-- <el-option :key="3" label="钻石会员" :value="3"></el-option>-->
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -81,43 +82,22 @@ ...@@ -81,43 +82,22 @@
</el-form> </el-form>
<p class="num-title">数据统计</p> <p class="num-title">数据统计</p>
<el-card class="box-card" style="margin-bottom:20px;"> <el-card class="box-card" style="margin-bottom:20px;">
<ul> <div class="flex-aic-wrap">
<li> <div v-for="item in statisticsList" :key="item.type" class="flex-aic">
<p>{{statistics.orderNum|| '0'}}</p> <div class="order-count-item">
<p>订单总数(单)</p> <p>{{item.orderNum|| '0'}}</p>
</li> <p>{{item.orderNumName}}</p>
<li> </div>
<p>{{statistics.totalAmount|| '0'}}</p> <div class="order-count-item">
<p>支付总额(元)</p> <p>{{item.totalAmount|| '0'}}</p>
</li> <p>{{item.amountName}}</p>
<li> </div>
<p>{{statistics.diamondOrderNum|| '0'}}</p> </div>
<p>钻石订单</p> </div>
</li>
<li>
<p>{{statistics.totalDiamondAmount|| '0'}}</p>
<p>钻石支付总额(元)</p>
</li>
<li>
<p>{{statistics.goldOrderNum|| '0'}}</p>
<p>黄金订单</p>
</li>
<li>
<p>{{statistics.totalGoldAmount|| '0'}}</p>
<p>黄金支付总额(元)</p>
</li>
<li>
<p>{{statistics.generalOrderNum|| '0'}}</p>
<p>普通订单</p>
</li>
<li>
<p>{{statistics.totalGeneralAmount ||'0'}}</p>
<p>普通支付总额(元)</p>
</li>
</ul>
</el-card> </el-card>
<el-button class="filter-item" type="primary" v-waves icon="search" @click="handleFilter">搜索</el-button> <el-button class="filter-item" type="primary" v-waves icon="search" @click="handleFilter">搜索</el-button>
<el-button class="filter-item" type="primary" v-waves icon="delete" @click="clearSearch">清除搜索</el-button> <el-button class="filter-item" type="primary" v-waves icon="delete" @click="clearSearch">清除搜索</el-button>
<el-button class="filter-item" type="primary" @click="addMemberOrder">新增订单</el-button>
<el-button class="filter-item" type="primary" @click="excel">导出表格</el-button> <el-button class="filter-item" type="primary" @click="excel">导出表格</el-button>
</div> </div>
...@@ -170,12 +150,12 @@ ...@@ -170,12 +150,12 @@
<p>{{scope.row.leaderPhone}}</p> <p>{{scope.row.leaderPhone}}</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="130" align="center" label="促成人姓名/手机号"> <!-- <el-table-column width="130" align="center" label="促成人姓名/手机号">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
<p>{{scope.row.facilitateName}}</p> <!-- <p>{{scope.row.facilitateName}}</p>-->
<p>{{scope.row.facilitatePhone}}</p> <!-- <p>{{scope.row.facilitatePhone}}</p>-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column width="110" align="center" label="订单价格(元)"> <el-table-column width="110" align="center" label="订单价格(元)">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -217,8 +197,7 @@ ...@@ -217,8 +197,7 @@
</div> </div>
<!-- 用户详细信息窗口--> <!-- 用户详细信息窗口-->
<el-dialog title="用户详情" :visible.sync="detailsDialogFormVisible" type="text" label-width="95px" <el-dialog title="用户详情" :visible.sync="detailsDialogFormVisible" type="text" label-width="95px" class="user-list-dialog">
class="user-list-dialog">
<el-form> <el-form>
<el-row> <el-row>
<el-form-item label="基础信息"> <el-form-item label="基础信息">
...@@ -363,25 +342,30 @@ ...@@ -363,25 +342,30 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="detailsDialogFormVisible = false">关 闭</el-button> <el-button type="primary" @click="detailsDialogFormVisible = false">关 闭</el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 新增订单 -->
<add-member-modal v-on:memberEvent="memberEvent" v-if="memberDialogVisible"></add-member-modal>
</div> </div>
</template> </template>
<script> <script type="javascript">
import { pageList, orderMemberExcel,user_info } from 'api/order/rentVehicle' import { pageList, orderMemberExcel,user_info } from 'api/order/rentVehicle'
import { memberLevels } from 'api/order/memeber'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import rsCode from '../../../utils/rsCode'
// import dataFormattor from '../../../utils/dataFormattor'
import { formatDate } from 'utils/dateFormattor' import { formatDate } from 'utils/dateFormattor'
import addMemberModal from "./addMemberModal";
export default { export default {
name: 'branchCompanyStock', name: 'branchCompanyStock',
components: {
addMemberModal
},
data() { data() {
return { return {
memberDialogVisible: false, // 新增订单
detailsDialogFormVisible:false,//用户信息弹窗 detailsDialogFormVisible:false,//用户信息弹窗
userDetails:{},//用户信息 userDetails:{},//用户信息
statusBoolean:false,//实名认证 statusBoolean:false,//实名认证
...@@ -417,7 +401,7 @@ export default { ...@@ -417,7 +401,7 @@ export default {
label: '确认购买' label: '确认购买'
} }
}, },
statistics: [], statisticsList: [],
isStatistics:true, isStatistics:true,
list: null, list: null,
total: null, total: null,
...@@ -450,7 +434,7 @@ export default { ...@@ -450,7 +434,7 @@ export default {
btn_cancel: true, btn_cancel: true,
tableKey: 0, tableKey: 0,
query:null, query:null,
memeberList: [], // 会员类型列表
} }
}, },
created() { created() {
...@@ -489,7 +473,7 @@ export default { ...@@ -489,7 +473,7 @@ export default {
} }
this.getList() this.getList()
this.btn_del = this.elements['branchCompany/stockApply:btn_delete'] this.btn_del = this.elements['branchCompany/stockApply:btn_delete']
this.getAllMemeberList() // 获取全部会员等级
}, },
computed: { computed: {
...mapGetters(['elements']), ...mapGetters(['elements']),
...@@ -504,6 +488,29 @@ export default { ...@@ -504,6 +488,29 @@ export default {
} }
}, },
methods: { methods: {
/**
* 新增订单
*/
addMemberOrder(){
this.memberDialogVisible = true
},
/**
* 新增订单
*/
memberEvent(e){
this.memberDialogVisible = false
if(e){
this.getList()
}
},
/**
* 获取全部会员列表
*/
getAllMemeberList(){
memberLevels().then(res => {
this.memeberList = res
})
},
//上级信息 //上级信息
getSuperiorInformation(name,mobile,type){ getSuperiorInformation(name,mobile,type){
if (type==1&&name && mobile) { if (type==1&&name && mobile) {
...@@ -627,7 +634,7 @@ export default { ...@@ -627,7 +634,7 @@ export default {
pageList(this.listQuery).then(response => { pageList(this.listQuery).then(response => {
this.list = response.data.memberOrderPage.data this.list = response.data.memberOrderPage.data
if (this.listQuery.page == 1) { if (this.listQuery.page == 1) {
this.statistics = response.data.memberOrderStatisticsBo this.statisticsList = response.data.memberOrderStatisticsBo
} }
this.total = response.data.memberOrderPage.totalCount this.total = response.data.memberOrderPage.totalCount
}) })
...@@ -647,6 +654,20 @@ export default { ...@@ -647,6 +654,20 @@ export default {
} }
</script> </script>
<style> <style>
.filter-container .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner{
width: 250px;
}
.flex-aic-wrap{
display: flex;
align-items: center;
flex-wrap: wrap;
}
.order-count-item{
display: flex;
flex-direction: column;
align-items: center;
padding: 10px 35px;
}
.member .el-dialog--small { .member .el-dialog--small {
width: 500px; width: 500px;
} }
...@@ -662,7 +683,7 @@ export default { ...@@ -662,7 +683,7 @@ export default {
.num-title { .num-title {
display: inline-block; display: inline-block;
float: left; float: left;
margin-right: 40px; margin-right: 20px;
font-size: 14px; font-size: 14px;
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<div class="filter-container"> <div class="filter-container">
<el-form ref="queryForm" :model="listQuery" label-width="100px"> <el-form ref="queryForm" :model="listQuery" label-width="100px">
<el-row> <el-row>
<el-col :span="6"> <el-col :span="8">
<el-form-item label="统计时间:"> <el-form-item label="统计时间:">
<el-date-picker <el-date-picker
v-model="listQuery.time" v-model="listQuery.time"
...@@ -38,36 +38,38 @@ ...@@ -38,36 +38,38 @@
<span>{{scope.row.timeSlot}}</span> <span>{{scope.row.timeSlot}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="普通会员购买量">
<template slot-scope="scope"> <el-table-column align="center" :label="item.name" v-for="item in tableHead" :key="item.name">
<span>{{scope.row.pNumber}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="支付金额(普通会员)">
<template slot-scope="scope">
<span>{{scope.row.pAmount}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="黄金会员购买量">
<template slot-scope="scope">
<span>{{scope.row.goldNumber}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="支付金额(黄金会员)">
<template slot-scope="scope">
<span>{{scope.row.goldAmount}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="钻石会员购买量">
<template slot-scope="scope">
<span>{{scope.row.hNumber}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="支付金额(钻石会员)">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{scope.row.hAmount}}</span> <span v-for="(iitem, iindex) in scope.row.members" :key="iindex" v-if="iitem.level == item.level && item.type=='number'">{{iitem.number}}</span>
<span v-for="(iitem, iindex) in scope.row.members" :key="iindex" v-if="iitem.level == item.level && item.type=='amount'">{{iitem.amount}}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column align="center" label="支付金额(普通会员)">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{scope.row.pAmount}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center" label="黄金会员购买量">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{scope.row.goldNumber}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center" label="支付金额(黄金会员)">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{scope.row.goldAmount}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center" label="钻石会员购买量">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{scope.row.hNumber}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center" label="支付金额(钻石会员)">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{scope.row.hAmount}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column align="center" label="总支付金额"> <el-table-column align="center" label="总支付金额">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{scope.row.totalPayment}}</span> <span>{{scope.row.totalPayment}}</span>
...@@ -88,21 +90,22 @@ ...@@ -88,21 +90,22 @@
</div> </div>
</div> </div>
</template> </template>
<script> <script type="javascript">
import { orderStatistics, downloadExcel } from 'api/order/rentVehicle' import { orderStatistics, downloadExcel } from 'api/order/rentVehicle'
import { memberLevels } from 'api/order/memeber'
export default { export default {
created() { created() {
this.getList() this.getAllMemeberList() // 获取全部会员等级
}, },
data() { data() {
return { return {
loading: false, loading: false,
total: null, total: null,
list: [], list: [],
tableHead:[], //动态表头
scrollTop: '', scrollTop: '',
// 统计时间筛选 // 统计时间筛选
listQuery: { listQuery: {
time: 'null',
type: '1', type: '1',
startTime: null, startTime: null,
endTime: null, endTime: null,
...@@ -129,6 +132,28 @@ export default { ...@@ -129,6 +132,28 @@ export default {
} }
}, },
methods: { methods: {
/**
* 获取全部会员列表
*/
getAllMemeberList(){
memberLevels().then(res => {
let arr = []
res.map(function(item){
arr.push({
name: item.name + '购买量',
level: item.level,
type: 'number'
})
arr.push({
name: '支付金额(' + item.name + ")",
level: item.level,
type:'amount'
})
})
this.tableHead = arr
this.getList()
})
},
//统计时间筛选 //统计时间筛选
changeTime() { changeTime() {
!!this.listQuery.time[0] !!this.listQuery.time[0]
...@@ -177,37 +202,66 @@ export default { ...@@ -177,37 +202,66 @@ export default {
this.listQuery.page = val this.listQuery.page = val
this.getList() this.getList()
}, },
// 数组去重
repeat(json){
try{
let newJson = [];
for(var i = 0;i < json.length; i++){
let flag = true;
for(var j = 0; j < newJson.length; j++){
if(newJson[j].tname == json[i].tname) {
flag = false;
}
}
if(flag){ //判断是否重复
newJson.push(json[i]);
}
}
return newJson
} catch(err){
console.log(err)
}
},
//列表 //列表
getList() { getList() {
let _this = this
let params = {} let params = {}
this.loading = true this.loading = true
let tableHead = this.tableHead
orderStatistics(this.listQuery).then(data => { orderStatistics(this.listQuery).then(data => {
if (data.status == 200) { if (data.status == 200) {
data.data.list.forEach(element => {
for (let i in element.members) { // tableHead.map(function(item){
if (element.members[i].level == 1) { // data.data.list.forEach(element => {
element.pAmount = element.members[i].amount // let listArr = []
element.plevel = element.members[i].level // element.members.map(function(iitem){
element.pMemberName = // // if(item.level == iitem.level){
element.members[i].memberName // listArr.push({level: iitem.level, tnumber: iitem.number, tamount: iitem.amount})
element.pNumber = element.members[i].number // // }
} else if (element.members[i].level == 2) { // })
element.goldAmount = element.members[i].amount // element.listArr = listArr
element.goldlevel = element.members[i].level // })
element.goldMemberName = // })
element.members[i].memberName // debugger
element.goldNumber = element.members[i].number // data.data.list.forEach(element => {
} else if (element.members[i].level == 3) { // tableHead.map(function(item){
element.hAmount = element.members[i].amount // let p = {tname: item.name, tvalue: 0}
element.hlevel = element.members[i].level // element.members.map(function(iitem){
element.hMemberName = // if(item.level == iitem.level){
element.members[i].memberName // p = {tname: item.name, tvalue: item.type == 'number'?iitem.number : iitem.amount}
element.hNumber = element.members[i].number // }
} // })
} // listArr.push(p)
}) // })
// element.listArr = _this.repeat(listArr)
// })
this.total = data.data.total this.total = data.data.total
// console.log(listArr)
console.log(data.data.list)
this.list = data.data.list this.list = data.data.list
// this.listArr = listArr
} }
setTimeout(() => { setTimeout(() => {
this.loading = false this.loading = false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment