Files
ys-app/src/pages/business/CRM/paymentCollection/index.vue
2025-08-29 18:42:15 +08:00

258 lines
6.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="con-body">
<view class="con-bg">
<!-- 头部 -->
<customHeader ref="customHeaderRef" :title="'个人回款信息查看'" :leftFlag="true" :rightFlag="true">
<template #right>
<view class="head-right" @click="handleAdd">
<uni-icons type="plus" size="24" color="#B7D2FF"></uni-icons>新增
</view>
</template>
</customHeader>
<!-- 高度来避免头部遮挡 -->
<view class="top-height" :style="{ paddingTop: navBarPaddingTop + 'px' }"></view>
<!-- 正文内容 -->
<view class="all-body">
<!-- 搜索 @blur="blur" @focus="focus" @input="input" @cancel="cancel" @clear="clear"-->
<!-- <view class="search">
<uni-search-bar class="custom-search" radius="28" placeholder="请输入客户名称" clearButton="auto"
cancelButton="none" bgColor="#6FA2F8" textColor="#ffffff" v-model="searchValue" />
<button type="default" @click="handleSearch" size="mini" class="btn-search">查询</button>
</view> -->
<!-- 分页部分 -->
<mescroll-uni ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
:up="upOption" :down="downOption" :fixed="false" textColor="#ffffff" bgColor="#ffffff"
class="scroll-h" :class="{ 'loading-scroll': cssFlag }">
<view class="white-bg margin-bottom20" v-for="(item, index) in list" :key="index" @click="touchstart(item)">
<view>
<view class="report-list">
<view class="title">客户{{ item.cusName }}</view>
<view class="r-list">
<!-- <view class="r-name">{{ item.visistCode }}</view> -->
</view>
<view class="border-bottom"></view>
<view class="r-list">
<view class="r-left">计划年份</view>
<view class="r-right">{{ item.year }}</view>
</view>
<view class="r-list">
<view class="r-left">计划月份</view>
<view class="r-right">{{ item.month }}</view>
</view>
<view class="border-bottom"></view>
<view class="r-list">
<view class="r-left">创建时间</view>
<view class="r-right">{{ item.createTime }}</view>
</view>
<view class="border-bottom"></view>
<view class="r-list">
<view class="r-left">计划汇款金额</view>
<view class="r-right" style="color: red;">{{ item.targetAmount }}</view>
</view>
</view>
</view>
</view>
</mescroll-uni>
</view>
</view>
</view>
</template>
<script setup>
import { ref, onMounted, watch,onUnmounted } from 'vue'
import customHeader from '@/components/customHeader.vue'
import MescrollUni from 'mescroll-uni/mescroll-uni.vue';
import { getNavBarPaddingTop } from '@/utils/system.js'
import { visitorReportList } from '@/api/business.js'
import { getPaymentList } from '@/api/crm/api_ys.js';
import { onShow } from '@dcloudio/uni-app'
// 获取导航栏高度用于内容区域padding
const navBarPaddingTop = ref(0);
onMounted(() => {
navBarPaddingTop.value = getNavBarPaddingTop() * 2;
})
// 查询列表
let list = ref([]);
let searchValue = ref(null)
//监视查询的内容的变化
watch(searchValue, (newValue, oldValue) => {
//变化了之后,重新查询内容
var data = {
pageNum: 1,
pageSize: 10,
searchContent: searchValue.value
};
getYsVisistList(data).then(res => {
if (res.code == 200) {
//设置列表数据
list.value = res.rows;
}
})
})
// 新增
let handleAdd = () => {
uni.navigateTo({url: '/pages/business/CRM/paymentCollection/addPaymentCollection'})
}
const mescrollRef = ref(null);
const upOption = ref({
page: {num: 0, size: 10},
noMoreSize: 5,
empty: {
tip: '~ 空空如也 ~',
icon: "../../../../static/images/mescroll-empty.png"
},
textLoading: '加载中...',
textNoMore: '已经到底了'
});
const downOption = ref({
auto: false,
textInOffset: '下拉刷新',
textOutOffset: '释放更新',
textLoading: '刷新中...'
});
let cssFlag = ref(false);//控制样式
const mescrollInit = (mescroll) => {
cssFlag.value = true;
mescrollRef.value = mescroll;
};
// 下拉刷新
const downCallback = async (mescroll) => {
try {
setTimeout(async () => {
const res = await GetPaymentList(1, upOption.value.page.size);
cssFlag.value = false;
list.value = res.list;
mescroll.resetUpScroll();
}, 500);
} catch (error) {
mescroll.endErr();
} finally {
setTimeout(async () => {
mescroll.endSuccess();
}, 500);
}
}
// 上拉加载更多
const upCallback = async (mescroll) => {
try {
setTimeout(async () => {
const res = await GetPaymentList(mescroll.num, mescroll.size);
if (mescroll.num === 1) {
list.value = res.list;
} else {
list.value.push(...res.list);
}
mescroll.endBySize(res.list.length, res.total);
}, 500);
} catch (error) {
mescroll.endErr();
}
}
// 获取数据列表
const GetPaymentList = (pageNum, pageSize) => {
return new Promise(async (resolve) => {
let param = {
pageNum,
pageSize
}
let res = await getPaymentList(param);
resolve({
list: res.rows,
total: res.total
});
});
}
let Loop = ref(0)
function touchstart(item) {
uni.navigateTo({
url: "/pages/business/CRM/paymentCollection/paymentDetail?collectionId=" + item.collectionId + '&cusId=' + item.cusId + '&targetAmount=' + item.targetAmount + '&cusName=' + item.cusName
})
}
// 生命周期钩子
onShow(() => {
// 监听刷新事件
uni.$on('refreshList', GetPaymentList(1,10))
// 页面显示时也加载一次数据
GetPaymentList(1,10)
})
onUnmounted(() => {
// 移除监听(避免重复触发)
uni.$off('refreshList')
})
onMounted(() => {
GetPaymentList()
})
</script>
<style scoped>
.all-body {
/* #ifdef APP-PLUS */
top: 150rpx;
height: calc(100vh - 75px);
/* #endif */
/* #ifndef APP-PLUS */
top: 120rpx;
height: calc(100vh);
/* #endif */
}
.search {
display: flex;
}
.search .btn-search {
border: none;
background: none;
line-height: normal;
color: #fff;
line-height: 56rpx !important;
padding: 10rpx 0 0;
text-align: left;
cursor: pointer;
}
.search .btn-search::after {
display: none;
}
.search .custom-search {
width: 80%;
}
.search .custom-search.uni-searchbar {
padding-right: 0 !important;
}
.scroll-h {
/* #ifdef APP-PLUS */
height: calc(100vh - 120px);
/* #endif */
/* #ifndef APP-PLUS */
height: calc(100vh - 110px);
/* #endif */
}
.white-bg {
padding-bottom: 10rpx;
}
</style>