Browse Source

add income api

tags/v1.1.30
刘嘉炜 3 years ago
parent
commit
20bb5e9032
  1. 1
      src/subpackage/income/js/api.js
  2. 151
      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 = {
consumeCountDetailList:`${ORIGIN}/admin/stadium/consumeCountDetail/list`, // 收款明细列表
consumeRecordSceneLs:`${ORIGIN}/consumeRecordScene/list`, // 收款明细列表
stadiumList: `${ORIGIN}/admin/stadium/list`, // 店铺列表
}
export default { ORIGIN, INCOME_API };

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

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