Browse Source

add income api

tags/v1.1.30
刘嘉炜 3 years ago
parent
commit
20bb5e9032
  1. 1
      src/subpackage/income/js/api.js
  2. 149
      src/subpackage/income/pages/details_record/details_record.vue
  3. 71
      src/subpackage/income/pages/search/search.vue
  4. BIN
      src/subpackage/income/static/images/account_null.png

1
src/subpackage/income/js/api.js

@ -3,6 +3,7 @@ import { ORIGIN } from '../../../js/api';
export const INCOME_API = { export const INCOME_API = {
consumeCountDetailList:`${ORIGIN}/admin/stadium/consumeCountDetail/list`, // 收款明细列表 consumeCountDetailList:`${ORIGIN}/admin/stadium/consumeCountDetail/list`, // 收款明细列表
consumeRecordSceneLs:`${ORIGIN}/consumeRecordScene/list`, // 收款明细列表 consumeRecordSceneLs:`${ORIGIN}/consumeRecordScene/list`, // 收款明细列表
stadiumList: `${ORIGIN}/admin/stadium/list`, // 店铺列表
} }
export default { ORIGIN, INCOME_API }; export default { ORIGIN, INCOME_API };

149
src/subpackage/income/pages/details_record/details_record.vue

@ -14,7 +14,7 @@
</view> </view>
<view class="df-right"> <view class="df-right">
<view class="df-name" @click="filterShow">筛选</view>
<view :class="[ 'df-name', isFilter? 'df-active' : '' ]" @click="filterShow">筛选</view>
<view class="dr-icons"> <view class="dr-icons">
<image @click="filterShow" mode="aspectFit" src="/subpackage/income/static/images/filter.png"></image> <image @click="filterShow" mode="aspectFit" src="/subpackage/income/static/images/filter.png"></image>
<view></view> <view></view>
@ -39,7 +39,7 @@
</view> </view>
</view> </view>
<view class="dr-ls">
<view class="dr-ls" v-if="incomeLs&&incomeLs.length">
<details-item <details-item
v-for="(e, i) in incomeLs" v-for="(e, i) in incomeLs"
:key="i" :key="i"
@ -59,9 +59,9 @@
<view class="dc-tit">筛选</view> <view class="dc-tit">筛选</view>
<view class="dc-stadium"> <view class="dc-stadium">
<view class="ds-name">门店</view> <view class="ds-name">门店</view>
<picker>
<picker :range="storeList" range-key="name" @change="stadiumChange">
<view class="ds-frame"> <view class="ds-frame">
<input />
<input :value="modalSelectStore.name || ''" placeholder="全部" disabled />
<image mode="aspectFit" src="/subpackage/income/static/images/bot_arrow.png"></image> <image mode="aspectFit" src="/subpackage/income/static/images/bot_arrow.png"></image>
</view> </view>
</picker> </picker>
@ -70,13 +70,18 @@
</view> </view>
<scroll-view class="dc-scroll" scroll-y :style="modalScrollViewHeight?('height:'+ modalScrollViewHeight + 'px;'): ''"> <scroll-view class="dc-scroll" scroll-y :style="modalScrollViewHeight?('height:'+ modalScrollViewHeight + 'px;'): ''">
<view class="dc-scene-ls"> <view class="dc-scene-ls">
<view class="dsl-item" v-for="(e, i) in sceneLs" :key="i">{{ e.name || '-' }}</view>
<view
v-for="(e, i) in sceneLs"
:key="i"
:class="['dsl-item', (modalSelectScene.scene === e.scene || (modalSelectScene == null&&e.scene==-1))?'dsl-active': '' ]"
@click="sceneSelect(e)"
>{{ e.name || '-' }}</view>
</view> </view>
</scroll-view> </scroll-view>
<view class="dc-btn-bar" id="dcbotbar"> <view class="dc-btn-bar" id="dcbotbar">
<view class="dbb-btns"> <view class="dbb-btns">
<view>重置</view>
<view>确定</view>
<view @click="modalResetBtn">重置</view>
<view @click="modalConfirm">确定</view>
</view> </view>
</view> </view>
</view> </view>
@ -100,17 +105,23 @@
}, },
{ {
name: '联营收款', name: '联营收款',
eng: ' joint'
eng: 'joint'
}, },
]; ];
export default { export default {
components: { components: {
'details-item': details_item 'details-item': details_item
}, },
computed: {
isFilter(){
let { confirmSelectStore, confirmSelectScene } = this
if(confirmSelectStore || confirmSelectScene)return true;
return false
}
},
data(){ data(){
return { return {
modalScrollViewHeight: '', modalScrollViewHeight: '',
isFilterModal: false,
incomeTime: '', incomeTime: '',
incomeLs: [], incomeLs: [],
@ -121,7 +132,13 @@
incomeTypeLs, incomeTypeLs,
incomeTypeInfo: {}, // online 线 offline 线 joint incomeTypeInfo: {}, // online 线 offline 线 joint
sceneLs: [],
isFilterModal: false,
sceneLs: [], //
storeList: [], //
confirmSelectScene: null, // &
confirmSelectStore: null, // &
modalSelectScene: null, //
modalSelectStore: null, //
} }
}, },
onLoad(){ onLoad(){
@ -130,36 +147,117 @@
this.incomeTypeInfo = incomeTypeLs[0]; this.incomeTypeInfo = incomeTypeLs[0];
this.refreshPage(); this.refreshPage();
}, },
onReachBottom(){
let { incomeTime, type, incomeTypeInfo, confirmSelectStore, confirmSelectScene, page } = this;
this.getRecordLs({
type: type || '',
time_str: incomeTime || '',
income_type: incomeTypeInfo.eng || '',
stadium_id: (confirmSelectStore&&confirmSelectStore.id) || '',
scene: (confirmSelectScene&&confirmSelectScene.scene + '') || '',
page: ++page,
});
},
methods: { methods: {
filterShow(){
//
modalResetBtn(){
let { incomeTypeInfo } = this; let { incomeTypeInfo } = this;
this.modalSelectScene = null;
this.modalSelectStore = null;
//
this.sceneLs = [];
this.getSceneLs({
income_type: incomeTypeInfo.eng || '',
});
},
//
modalConfirm(){
let { modalSelectScene, modalSelectStore } = this;
this.confirmSelectScene = modalSelectScene;
this.confirmSelectStore = modalSelectStore;
this.isFilterModal = false;
this.refreshPage();
},
sceneSelect(e){
this.modalSelectScene = e || null;
},
stadiumChange(e){
let { incomeTypeInfo, storeList, modalSelectStore } = this;
let _idx = e.detail.value;
let _stadium = storeList[_idx] || {};
if(modalSelectStore&&(modalSelectStore.id == _stadium.id))return;
this.modalSelectStore = _stadium || null;
this.modalSelectScene = null;
//
this.sceneLs = [];
this.getSceneLs({
income_type: incomeTypeInfo.eng || '',
stadium_id: _stadium.id
});
},
//
filterShow(){
let { incomeTypeInfo, confirmSelectStore, confirmSelectScene } = this;
this.modalSelectScene = confirmSelectScene || null;
this.modalSelectStore = confirmSelectStore || null;
this.isFilterModal = true; this.isFilterModal = true;
this.$nextTick(_=>{
this.$nextTick(async _=>{
this.initFilterScrollView(); this.initFilterScrollView();
if(true)try{
await this.getStoreList();
}catch(err){
console.warn('getStore err ->', err)
};
this.getSceneLs({ this.getSceneLs({
income_type: incomeTypeInfo.eng || ''
})
income_type: incomeTypeInfo.eng || '',
stadium_id: (confirmSelectStore&&confirmSelectStore.id) || ''
});
}); });
}, },
//
getStoreList(){
util.showLoad();
return server.get({
url: INCOME_API.stadiumList,
data: {},
failMsg: '加载店铺列表失败!',
})
.then(res=>{
util.hideLoad();
// let _list = [res.list[0]] || [];
let _list = res.list || [];
this.storeList = _list;
return _list || [];
})
},
//
getSceneLs({ getSceneLs({
brand_id = '', brand_id = '',
stadium_id = '', stadium_id = '',
income_type = '', income_type = '',
}){ }){
util.showLoad();
server.get({ server.get({
url: INCOME_API.consumeRecordSceneLs, url: INCOME_API.consumeRecordSceneLs,
data: { data: {
brand_id, brand_id,
stadium_id,
income_type,
stadium_id, // -1 id
income_type, // online线 offline线 joint
}, },
failMsg: '加载场景列表失败!' failMsg: '加载场景列表失败!'
}) })
.then(res=>{ .then(res=>{
util.hideLoad();
this.sceneLs = res || []; this.sceneLs = res || [];
}) })
}, },
incomeTypeChange(incomeTypeInfo){ incomeTypeChange(incomeTypeInfo){
this.incomeTypeInfo = incomeTypeInfo || {}; this.incomeTypeInfo = incomeTypeInfo || {};
this.refreshPage(); this.refreshPage();
@ -173,9 +271,10 @@
this.incomeTime = _time; this.incomeTime = _time;
this.refreshPage(); this.refreshPage();
}, },
refreshPage(){ refreshPage(){
this.$nextTick(_=>{ this.$nextTick(_=>{
let { incomeTime, type, incomeTypeInfo } = this;
let { incomeTime, type, incomeTypeInfo, confirmSelectStore, confirmSelectScene } = this;
this.page = 1; this.page = 1;
this.incomeLs = []; this.incomeLs = [];
this.incomeMes = {}; this.incomeMes = {};
@ -183,9 +282,12 @@
type: type || '', type: type || '',
time_str: incomeTime || '', time_str: incomeTime || '',
income_type: incomeTypeInfo.eng || '', income_type: incomeTypeInfo.eng || '',
stadium_id: (confirmSelectStore&&confirmSelectStore.id) || '',
scene: (confirmSelectScene&&confirmSelectScene.scene + '') || '',
}); });
}) })
}, },
getRecordLs({ getRecordLs({
brand_id = '', brand_id = '',
stadium_id = '', // -1 id stadium_id = '', // -1 id
@ -256,6 +358,9 @@
font-size: 28upx; font-size: 28upx;
line-height: 40upx; line-height: 40upx;
color: #9C9C9F; color: #9C9C9F;
&.df-active{
color: $themeColor
}
} }
.df-date{ .df-date{
@include centerFlex(flex-start); @include centerFlex(flex-start);
@ -516,13 +621,19 @@
margin: 14upx 10upx; margin: 14upx 10upx;
width: 164upx; width: 164upx;
height: 64upx; height: 64upx;
line-height: 64upx;
line-height: 60upx;
text-align: center; text-align: center;
background-color: #F2F2F7;
border-radius: 10upx; border-radius: 10upx;
border: 2upx solid #F2F2F7;
font-size: 24upx; font-size: 24upx;
color: #1A1A1A; color: #1A1A1A;
background-color: #F2F2F7;
@include textHide(1); @include textHide(1);
&.dsl-active{
color: $themeColor;
border-color: $themeColor;
background-color: rgba($color: $themeColor, $alpha: .16);
}
} }
} }
} }

71
src/subpackage/income/pages/search/search.vue

@ -2,28 +2,81 @@
<view class="income-search"> <view class="income-search">
<view class="is-search-bar"> <view class="is-search-bar">
<view class="isb-frame"> <view class="isb-frame">
<image class="if-search-icon"></image>
<input />
<image class="if-close-icon"></image>
<image class="if-search-icon" mode="aspectFit" src="/subpackage/income/static/images/search.png"></image>
<input confirm-type="search" />
<image class="if-close-icon" mode="aspectFit" src="/subpackage/income/static/images/close.png"></image>
</view> </view>
</view> </view>
<view class="is-main"> <view class="is-main">
<view class="im-null" v-if="false">
<image></image>
</view>
<view class="im-ls">
<view class="im-ls" v-if="incomeLs.length">
<details-item v-for="i in 20" :key="i"></details-item> <details-item v-for="i in 20" :key="i"></details-item>
</view> </view>
<view class="im-null" v-else>
<image mode="aspectFit" src="/subpackage/income/static/images/account_null.png"></image>
</view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import details_item from '../../components/details_item/details_item.vue'; import details_item from '../../components/details_item/details_item.vue';
import util from '../../../../utils/util';
import { INCOME_API } from '../../js/api';
import server from '../../js/server';
export default { export default {
components: { components: {
'details-item': details_item 'details-item': details_item
}
},
data(){
return {
incomeLs: [],
}
},
onLoad(){
this.getRecordLs({});
},
methods: {
getRecordLs({
brand_id = '',
stadium_id = '', // -1 id
time_str = '', // y-m-d
scene = '', // int
type = '全部', // /退
income_type = '', // online 线 offline线 joint
page = 1,
page_size = 20,
order_no= '',
}){
util.showLoad();
server.get({
url: INCOME_API.consumeCountDetailList,
data: {
brand_id,
stadium_id,
time_str,
page,
page_size,
scene,
type,
income_type,
order_no
},
failMsg: '加载失败!',
})
.then(res=>{
util.hideLoad();
let { list, ...data } = res;
let _ls = list || [];
if(page == 1)return this.incomeLs = _ls;
if(!_ls || !_ls.length)return util.showNone('没有更多!');
this.incomeLs = [ ...this.incomeLs, ..._ls ];
this.page = page;
})
},
},
} }
</script> </script>
@ -50,7 +103,6 @@ export default {
flex-shrink: 0; flex-shrink: 0;
width: 30upx; width: 30upx;
height: 30upx; height: 30upx;
background-color: skyblue;
} }
.if-search-icon{ .if-search-icon{
margin-right: 24upx; margin-right: 24upx;
@ -69,7 +121,6 @@ export default {
display: block; display: block;
width: 370upx; width: 370upx;
height: 370upx; height: 370upx;
background-color: skyblue;
} }
} }

BIN
src/subpackage/income/static/images/account_null.png

After

Width: 370  |  Height: 370  |  Size: 10 KiB

Loading…
Cancel
Save