372 lines
9.4 KiB
Vue
372 lines
9.4 KiB
Vue
<template>
|
||
<view>
|
||
<v-tabs
|
||
v-model="current"
|
||
:scroll="false"
|
||
:fixed="true"
|
||
field="name"
|
||
lineColor="#F8D247"
|
||
color="#999"
|
||
activeColor="#333"
|
||
height="90rpx"
|
||
:tabs="tabs"
|
||
@change="onClickItem">
|
||
</v-tabs>
|
||
<view v-for="(order, index) in list" :key="index" class="center-order" style="margin-bottom: 40upx;">
|
||
<view class="order-list flex">
|
||
<view class="order-left">
|
||
<text class="order-time" v-if="order.flowingType === 1" style="color: #df0d0d;">¥ -{{order.amount}}</text>
|
||
<text class="order-time" v-else style="color: #17ca03;">¥ +{{order.amount}}</text>
|
||
</view>
|
||
<view class="order-right">
|
||
<text class="order-price" v-if="order.flowingType === 1">支出</text>
|
||
<text class="order-price" v-else>收入</text>
|
||
</view>
|
||
</view>
|
||
<view class="order-store">
|
||
<view class="flex flex-between store-left">
|
||
<text class="store-name">单号: {{order.orderNumber}}</text>
|
||
<text class="font28 color-purple" @click="$onCopy(order.orderNumber)">复制</text>
|
||
</view>
|
||
<view class="store-address1">
|
||
类型: {{filterOperation(order.operationType)}}
|
||
</view>
|
||
<view class="store-address1">
|
||
钱包: {{order.walletType | filterWallet}}
|
||
</view>
|
||
<view class="store-address1">
|
||
余额: {{order.beforeOperationAmount}}
|
||
</view>
|
||
<view class="store-address1">
|
||
详情: {{order.details ? order.details:'无'}}
|
||
</view>
|
||
<view class="store-address1" style="padding: 20upx 0 20upx 0;text-align: right; margin-right: 30rpx;">
|
||
{{order.createTime}}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<uni-load-more :status="loading"></uni-load-more>
|
||
|
||
<!-- #ifdef MP-WEIXIN -->
|
||
<view class="flex flex-center more" @click="openMore">
|
||
<text class="iconfont font40"></text>
|
||
</view>
|
||
<!-- #endif -->
|
||
|
||
<!-- 左侧菜单 -->
|
||
<uni-drawer ref="drawer" mode="right" :width="320">
|
||
<scroll-view scroll-y :style="{height: swiperHeight+'px'}">
|
||
<view class="drawer">
|
||
<view class="title">操作类型(可多选)</view>
|
||
<view class="grid">
|
||
<block v-for="(item, i) in operationList" :key="i">
|
||
<view class="grid-item" :class="{'active':item.select}" v-if="item.isShow" @click="tabsSelect('operation', i)">
|
||
<text>{{item.name}}</text>
|
||
</view>
|
||
</block>
|
||
</view>
|
||
<view class="title">钱包类型(单选)</view>
|
||
<view class="grid">
|
||
<view class="grid-item" :class="{'active':walletIndex === i}" v-for="(item, i) in walletList" :key="i" @click="tabsSelect('wallet', i)">
|
||
<text>{{item.name}}</text>
|
||
</view>
|
||
</view>
|
||
<view class="flex flex-between btns">
|
||
<view class="btn" @click="onCancel">取消</view>
|
||
<view class="btn right" @click="onSave">确定</view>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
</uni-drawer>
|
||
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import vTabs from "@/components/v-tabs/v-tabs.vue"
|
||
import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
|
||
import uniDrawer from "@/components/uni-drawer/uni-drawer.vue"
|
||
import youScroll from '@/components/you-scroll'
|
||
import url from "@/common/http/url.js"
|
||
import selectOptions from "@/common/utils/selectOptions.js"
|
||
export default{
|
||
components: { vTabs, uniLoadMore, uniDrawer, youScroll },
|
||
data(){
|
||
return {
|
||
swiperHeight: 0,
|
||
userType: 1, // 1=用户,2=配送员,3=商家
|
||
current: 0,
|
||
tabs: [
|
||
{name: "全部", value: -1, pageSize: 1, loading: "loading", orderList: []},
|
||
{name: "支出", value: 1, pageSize: 1, loading: "loading", orderList: []},
|
||
{name: "收入", value: 2, pageSize: 1, loading: "loading", orderList: []}
|
||
],
|
||
list: [],
|
||
pageSize: 1,
|
||
loading: "loading",
|
||
walletList: [
|
||
{name: "全部", value: -1},
|
||
...selectOptions.walletType
|
||
],
|
||
walletIndex: 0,
|
||
operationList: [
|
||
{name: "全部", value: "", isShow: true, select: true},
|
||
{name: "支付商品抵扣积分", value: 1, isShow: true},
|
||
{name: "支付商品", value: 2, isShow: true},
|
||
{name: "商品退款", value: 3, isShow: true},
|
||
{name: "积分充值话费", value: 11, isShow: true},
|
||
{name: "积分充值油卡", value: 12, isShow: true},
|
||
{name: "积分还信用卡", value: 13, isShow: true},
|
||
{name: "消费卡奖励", value: 21, isShow: true},
|
||
{name: "红包福利", value: 41, isShow: true},
|
||
{name: "提现", value: 51, isShow: true},
|
||
{name: "积分奖励", value: 70, isShow: true},
|
||
{name: "一代奖励", value: 71, isShow: true},
|
||
{name: "二代奖励", value: 72, isShow: true},
|
||
{name: "配送员收入", value: 86, isShow: true},
|
||
{name: "商家收入", value: 87, isShow: true},
|
||
{name: "平台佣金", value: 89, isShow: true},
|
||
{name: "未分配奖励收入", value: 90, isShow: true},
|
||
{name: "平台操作", value: 99, isShow: true},
|
||
{name: "配送员交纳押金", value: 200, isShow: true},
|
||
{name: "扫码付款", value: 400, isShow: true},
|
||
{name: "店铺收款", value: 401, isShow: true}
|
||
]
|
||
}
|
||
},
|
||
filters:{
|
||
filterWallet(val){
|
||
let walletType = selectOptions.walletType
|
||
let value = "其他"
|
||
walletType.forEach((v) =>{
|
||
if (v.value === val) {
|
||
value = v.name
|
||
return value
|
||
}
|
||
})
|
||
return value
|
||
},
|
||
},
|
||
onNavigationBarButtonTap(){
|
||
this.openMore()
|
||
},
|
||
onReachBottom() {
|
||
this.loadData(false);
|
||
},
|
||
onPullDownRefresh() {
|
||
this.loadData(true);
|
||
},
|
||
onLoad(opt) {
|
||
if (opt.type){
|
||
this.userType = parseInt(opt.type)
|
||
}
|
||
this.swiperHeight = uni.getSystemInfoSync().windowHeight
|
||
//获取订单信息
|
||
this.loadData(false);
|
||
},
|
||
methods:{
|
||
async loadData(type){
|
||
if (type) {
|
||
this.pageSize = 1
|
||
this.list = []
|
||
} else {
|
||
if (this.loading === "nomore") return
|
||
}
|
||
this.loading = "loading"
|
||
let operationTypes = []
|
||
this.operationList.map(v=>{
|
||
if (v.select) {
|
||
operationTypes.push(v.value)
|
||
}
|
||
})
|
||
let params = {
|
||
pageSize: this.pageSize,
|
||
flowingType: this.tabs[this.current].value,
|
||
walletType: this.walletList[this.walletIndex].value,
|
||
operationTypes: operationTypes.join(","),
|
||
userType: this.userType
|
||
}
|
||
let res = await this.$http("GET", url.user.walletFlowing, params)
|
||
this.list = this.list.concat(res.data.records)
|
||
if (this.list.length < res.data.total) {
|
||
this.pageSize++
|
||
this.loading = "more"
|
||
} else {
|
||
this.loading = "nomore"
|
||
}
|
||
uni.stopPullDownRefresh()
|
||
},
|
||
filterOperation(val){
|
||
let value = "其他"
|
||
this.operationList.forEach((v) => {
|
||
if (v.value === val) {
|
||
value = v.name
|
||
return value
|
||
}
|
||
})
|
||
return value
|
||
},
|
||
onClickItem(val) {
|
||
this.current = val;
|
||
this.loadData(true);
|
||
},
|
||
scollSwiper(e) {
|
||
this.current = e.target.current;
|
||
this.loadData(true);
|
||
},
|
||
tabsSelect(name,i){
|
||
if (name === "operation"){
|
||
if (i === 0) {
|
||
this[name+"List"].map(v =>{
|
||
v.select = false
|
||
})
|
||
this[name+"List"][i].select = true
|
||
} else {
|
||
this[name+"List"][0].select = false
|
||
this[name+"List"][i].select = !this[name+"List"][i].select
|
||
}
|
||
} else {
|
||
this[name+"Index"] = i
|
||
this[name+"List"].map(v =>{
|
||
v.select = false
|
||
})
|
||
this[name+"List"][i].select = true
|
||
}
|
||
this.$forceUpdate()
|
||
},
|
||
onReset(){
|
||
this.walletIndex = 0
|
||
this.operationList.map((v, i)=>{
|
||
v.select = i === 0 ? true : false
|
||
})
|
||
},
|
||
onCancel(){
|
||
this.$refs.drawer.close()
|
||
},
|
||
onSave(){
|
||
this.onCancel()
|
||
this.loadData(true)
|
||
},
|
||
openMore(){
|
||
this.$refs.drawer.open()
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped lang="scss">
|
||
page {
|
||
height: 100%;
|
||
}
|
||
|
||
.center-order {
|
||
background-color: #fff;
|
||
margin: 20rpx;
|
||
border-radius: 10rpx 10rpx 0 0;
|
||
}
|
||
|
||
.order-list {
|
||
margin: 10rpx 30rpx 0 30rpx;
|
||
border-bottom: 1rpx dashed #e1e1f5;
|
||
height: 80upx;
|
||
}
|
||
|
||
.order-left {
|
||
height: 80upx;
|
||
line-height: 80rpx;
|
||
width: 50%;
|
||
}
|
||
|
||
.order-right {
|
||
height: 80rpx;
|
||
width: 50%;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: flex-end;
|
||
}
|
||
.order-price {
|
||
color: #444;
|
||
font-size: 38rpx;
|
||
font-weight: 200;
|
||
}
|
||
.store-left {
|
||
margin: 10rpx 30rpx 0;
|
||
}
|
||
.store-name {
|
||
font-weight: 600;
|
||
font-size: 28rpx;
|
||
}
|
||
.store-address1 {
|
||
color: #999;
|
||
margin-left: 30rpx;
|
||
font-size: 28rpx;
|
||
display: -webkit-box;
|
||
-webkit-box-orient: vertical;
|
||
-webkit-line-clamp: 10;
|
||
overflow: hidden;
|
||
padding-top: 10rpx;
|
||
}
|
||
|
||
.more{
|
||
background-color: white;
|
||
width: 80rpx;
|
||
height: 80rpx;
|
||
border-radius: 50%;
|
||
box-shadow: 0rpx 0rpx 20rpx rgba(0, 0, 0, 0.1);
|
||
position: fixed;
|
||
right: 20rpx;
|
||
bottom: 20rpx;
|
||
}
|
||
|
||
.drawer{
|
||
// height: 100%;
|
||
padding: 0 30rpx;
|
||
.title{
|
||
font-size: 32rpx;
|
||
margin-top: 50rpx;
|
||
margin-bottom: 20rpx;
|
||
}
|
||
.grid{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
margin-bottom: 30rpx;
|
||
&-item{
|
||
margin-right: 20rpx;
|
||
margin-bottom: 20rpx;
|
||
width: 240rpx;
|
||
height: 70rpx;
|
||
border-radius: 10rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 28rpx;
|
||
background-color: #f3f4f3;
|
||
color: #87878b;
|
||
}
|
||
.active{
|
||
background-color: rgba($color: #F8D247, $alpha: .3);
|
||
color: #F8D247;
|
||
}
|
||
}
|
||
.btns{
|
||
margin-top: 80rpx;
|
||
padding-bottom: 40rpx;
|
||
.btn{
|
||
width: 45%;
|
||
background-color: #f3f4f3;
|
||
color: #87878b;
|
||
font-size: 32rpx;
|
||
height: 80rpx;
|
||
text-align: center;
|
||
line-height: 80rpx;
|
||
}
|
||
.right{
|
||
background-color: rgba($color: #F8D247, $alpha: .3);
|
||
color: #F8D247;
|
||
}
|
||
}
|
||
}
|
||
</style>
|
||
|