hls_crm/pages/index/contract/contract.vue

639 lines
16 KiB
Vue

<template>
<view>
<view class="tab_list" style="margin-top:0;">
<view class="tabli" :class="typeIndex == 0 ? 'tabliactive' : ''" @click="changeFirTab(0)">全部</view>
<view class="tabli" :class="typeIndex == 1 ? 'tabliactive' : ''" @click="changeFirTab(1)">我创建的</view>
<view class="tabli" :class="typeIndex == 2 ? 'tabliactive' : ''" @click="changeFirTab(2)">下属创建的</view>
<view class="tabli" :class="typeIndex == 3 ? 'tabliactive' : ''" @click="changeFirTab(3)">抄送给我的</view>
</view>
<view class="select_warp">
<view class="searchbox">
<view class="searchtext" @click="toQuery">
<image style="width: 30rpx;height: 30rpx;margin-right: 5rpx;"
:src="BASE_IMG_URL+'shaixuan2.png'" mode="scaleToFill"></image>筛选
</view>
</view>
<uni-popup ref="screenpopup" type="top" background-color="#fff">
<view class="warpbox">
<scroll-view scroll-y class="scrollbox" style="height:680rpx;background:#fff;">
<!--筛选模块 -->
<view class="screen_content" @tap.stop.prevent>
<view class="fir_li" v-if="typeIndex == 2">
<view class="li_label">归属人</view>
<picker @change="changeAscrip" :value="ascripIndex" :range="ascripList" :range-key="'name'">
<view class="li_box" >
<view class="form_right" style="text-align: center;">
<view :class="ascripList[ascripIndex] ? 'valueactive' : ''">
{{ascripList[ascripIndex] ? ascripList[ascripIndex].name : '点击选择'}}
</view>
</view>
</view>
</picker>
</view>
<view class="fir_li">
<view class="li_label">关联客户</view>
<view class="li_box" @click="toSelectCustomer">
<view class="form_right" style="text-align: center;">
<view :class="customerObj ? 'valueactive' : ''">
{{customerObj ? customerObj.name : '点击选择'}}
</view>
</view>
</view>
</view>
<view class="fir_li">
<view class="li_label">采购状态</view>
<picker @change="changeTab" :value="status" :range="statusList">
<view class="li_box" >
<view class="form_right" style="text-align: center;">
<view :class="statusList[status] ? 'valueactive' : ''">
{{statusList[status] ? statusList[status] : '点击选择'}}
</view>
</view>
</view>
</picker>
</view>
<view class="fir_li">
<view class="li_label">签约时间</view>
<view class="li_box" style="display: flex;">
<picker @change="changeStartTime" mode="date" :end="end_time"
style="width:50%;border-right:1rpx solid #CCCCCC">
<view class="form_right">
<view style="flex:1;text-align: center;"
:class="start_time ? 'valueactive' : '' ">
{{start_time ? start_time : '生效时间'}}</view>
</view>
</picker>
<picker @change="changeEndTime" mode="date" :start="start_time" style="width:50%">
<view class="form_right">
<view style="flex:1;text-align: center;"
:class="end_time ? 'valueactive' : '' ">{{end_time ? end_time : '到期时间'}}
</view>
</view>
</picker>
</view>
</view>
<search-item v-for="(item,index) in searchForm" :key="index" :objInfo="item" @changeSearchData="changeSearchData"></search-item>
</view>
</scroll-view>
<view class="button_bottom">
<view @tap.stop="reset">重置</view>
<view @tap.stop="sureQuery">确定</view>
</view>
</view>
</uni-popup>
</view>
<view class="lxr_con_list" v-for="(item,index) in contract_list" :key="index"
@click="toContractDetail(item.id)">
<view class="name">{{item.owner_staff?item.owner_staff.name:'--'}}</view>
<view class="info">门店名称:{{item.customer?item.customer.name:'--'}}</view>
<view class="info">采购编号:{{item.num}}</view>
<view class="info">已回款:&yen;{{item.receivables.repayment_money}}</view>
<view class="info">待回款:&yen;{{item.receivables.be_money}}</view>
<view class="proce_li">
<view class="pro_li_left">
<view class="protext">回款进度:</view>
<view class="probox">
<view class="proin"
:style="{width:(item.receivables.ratio >= 100 ? 100 : item.receivables.ratio) +'%'}">
</view>
</view>
<view class="pronum">{{item.receivables.ratio >= 100 ? 100 : item.receivables.ratio }}%</view>
</view>
<view class="pro_li_right">&yen;{{item.money}}</view>
</view>
<!-- <view class="info">签约时间:{{item.order_date}}</view> -->
<view class="con_status" v-if="item.check_status == 0">
<span>待审核</span>
</view>
<view class="con_status" v-if="item.check_status == 1">
<span>审核中</span>
</view>
<view class="con_status pass" v-if="item.check_status == 2">
<span>审核通过</span>
</view>
<view class="con_status nopass" v-if="item.check_status == 3">
<span>审核未通过</span>
</view>
<view class="con_status nopass" v-if="item.check_status == 4">
<span>已撤回</span>
</view>
</view>
<u-empty v-if="contract_list.length == 0" text="暂无更多"></u-empty>
<view style="height: 200rpx;"></view>
<view class="bot_total" @click="lookTotal">总金额合计> </view>
<uni-popup ref="popup" type="bottom" background-color="#fff" @touchmove.stop.prevent>
<view class="botwarp">
<view class="wa_li">
<view class="wa_label">采购总金额</view>
<view class="wa_money"> <text>{{moneyInfo.allmoney?moneyInfo.allmoney:'0'}}</text>元 </view>
</view>
<view class="wa_li">
<view class="wa_label">已回款金额</view>
<view class="wa_money"> <text>{{moneyInfo.repayment_money?moneyInfo.repayment_money:'0'}}</text>元 </view>
</view>
<view class="wa_li">
<view class="wa_label">未回款金额</view>
<view class="wa_money"> <text>{{moneyInfo.be_money?moneyInfo.be_money:'0'}}</text>元 </view>
</view>
<view class="wa_btn" @click="removeTotal">取消</view>
</view>
</uni-popup>
<!-- 创建用户图标 -->
<view class="icon_creat" @click="toCreateContract">
<image :src="BASE_IMG_URL+'1.png'" mode="scaleToFill"></image>
</view>
<select-customer ref="customerChild" @getCustomerinfo="getCustomerinfo"></select-customer>
</view>
</template>
<script>
import {
netCrmContractList,
netSearchStaffList
} from '@/api/kehu.js'
import { BASE_IMG_URL } from '@/util/api.js'
import selectCustomer from '@/components/selectCustomer.vue'
import searchItem from '@/components/search/searchitem.vue'
export default {
components:{
selectCustomer,
searchItem
},
data() {
return {
moneyInfo:{}, //总计金额
contract_list: [], //列表数据
page: 1,
limit: 10,
totalPage: 1,
BASE_IMG_URL:BASE_IMG_URL,
name: '',
type: '', //客户分类 '0 全部客户','1 我的客户','2 下属负责的客户'
typeList: ['全部客户', '我的客户', '下级的客户'],
typeIndex: 0,
statusList:['全部','待审核','待回款','已回款'],
status:null,
start_time: '',
end_time: '',
ascripList: [], //归属人
ascripId: null,
ascripIndex: null,
customerObj:null, //关联客户
goodsList: ['全部客户', '我的客户', '下级的客户'],
info: 0,
rSelect: [],
searchForm:[],
}
},
onLoad(options) {
if (options.startTime) {
this.typeIndex = options.type == 0 ? 1 : options.type == 1 ? 0 : 2
this.type = this.typeList[this.typeIndex]
this.start_time = options.startTime
this.end_time = options.endTime
this.ascripId = options.staffid
}
if(options.stime){
this.typeIndex = options.status
this.start_time = options.stime
this.end_time = options.etime
}
this.handleSearchForm('contract',(data)=>{
this.searchForm = data
})
},
onShow() {
this.init()
//归属人
this.getGuishu()
},
onReachBottom() {
if (this.page >= this.totalPage) {
return
}
this.page++
this.getList()
},
methods: {
//去选择客户
toSelectCustomer() {
this.$refs.customerChild.init()
},
getCustomerinfo(obj) {
this.customerObj = obj
},
init() {
this.page = 1
this.contract_list = []
setTimeout(()=>{
this.getList()
},200)
},
//筛选
toQuery() {
this.$refs.screenpopup.open()
},
//查看总金额合计
lookTotal() {
this.$refs.popup.open()
},
removeTotal() {
this.$refs.popup.close()
},
changeTab(e) {
this.status = e.detail.value
},
changeFirTab(type) {
this.typeIndex = type
this.init()
},
moveStop(){},
toCreateContract() {
uni.navigateTo({
url:'/pagesA/crm/contract/contract'
})
},
tab(index) {
this.info = index
},
//归属人
getGuishu() {
netSearchStaffList().then(res => {
this.ascripList = res.data
if (this.ascripId) {
this.ascripList.forEach((ele, index) => {
if (ele.id == this.ascripId) {
this.ascripIndex = index
}
})
}
})
},
changeAscrip(e) {
this.ascripIndex = e.detail.value
this.ascripId = this.ascripList[this.ascripIndex].id
},
getList() {
let params = {
page: this.page,
limit: this.limit,
createtime: (this.start_time && this.end_time) ? (this.start_time + ',' + this.end_time) : '',
type: this.typeIndex,
status: this.status,
staff_id: this.ascripId,
customer_id: this.customerObj?this.customerObj.id:'',
...this.handleSureSearch(this.searchForm)
}
netCrmContractList(params).then(res => {
this.contract_list = this.contract_list.concat(res.data.data)
this.totalPage = res.data.last_page
this.moneyInfo = res.data.moneyinfo
})
},
//客户分类
changeType(e) {
this.typeIndex = e
},
//线索创建 开始时间
changeStartTime(e) {
this.start_time = e.detail.value
if(!this.end_time){
this.end_time = e.detail.value
}
},
//线索 创建 结束时间
changeEndTime(e) {
this.end_time = e.detail.value
if(!this.start_time){
this.start_time = e.detail.value
}
},
changeSearchData(type,key,value){
let arr = this.searchForm
arr.forEach((ele,index)=>{
if(ele.field == type){
ele[key] = value
this.$set(this.searchForm, index, ele)
}
})
},
//重置
reset() {
this.type = ''
this.start_time = ''
this.end_time = ''
this.ascripId = null
this.ascripIndex = null
this.status = null
this.customerObj = null
this.searchForm = this.handleResetSearch(this.searchForm)
},
//确定
sureQuery() {
this.$refs.screenpopup.close()
this.init()
},
//采购详情
toContractDetail(id) {
uni.navigateTo({
url: '/pagesB/contract/contractDetail?id=' + id
})
},
}
}
</script>
<style lang="scss" scoped>
.tab_list{
width:750rpx;
height:80rpx;
display: flex;
justify-content: space-around;
align-items: center;
background:#fff;
.tabli{
font-size:24rpx;
color:#333;
line-height: 75rpx;
text-align: center;
border-bottom:4rpx solid #fff;
}
.tabliactive{
border-bottom:4rpx solid $uni-text-color;
}
}
.active {
border: 1px solid red;
text-align: center;
border: none;
background: $uni-text-color;
padding: 5rpx 10rpx ;
border-radius: 10rpx;
color: #FFFFFF;
border: 1px solid $uni-text-color !important;;
}
.list-box {
overflow: hidden;
white-space: nowrap;
}
.list-box {
overflow: hidden;
white-space: nowrap;
}
.list-item {
border: 1px solid #999999;
padding: 5rpx 10rpx ;
border-radius: 10rpx;
}
.valueactive {
color: #666;
}
.select_warp {
z-index: 9;
position: relative;
}
.searchbox {
display: flex;
justify-content: flex-end;
margin: 20rpx 0;
.searchtext {
display: flex;
justify-content: center;
align-items: center;
font-size: 30rpx;
color: #999;
margin-right: 55rpx;
background:#ffffff;
padding:8rpx;
border-radius: 5rpx;
}
}
.warpbox {
width: 750rpx;
background: rgba(0, 0, 0, 0.7);
.screen_content {
z-index: 2;
border-top: 1rpx solid #CCCCCC;
background-color: #fff;
padding: 24rpx;
.fir_li {
margin-bottom: 20rpx;
.li_label {
font-size: 28rpx;
margin-top: 30rpx;
margin-bottom: 20rpx;
}
.classify {
display: flex;
justify-content: space-around;
.classify_flex {
padding: 5rpx 16rpx;
color: #999;
font-size: 30rpx;
border: 1px solid #999;
border-radius: 10rpx;
}
.c_f {
background: $uni-text-color !important;
color: #fff;
}
}
.li_box {
border-radius: 15rpx;border: 1rpx solid #CCCCCC;
width:690rpx;
height: 60rpx;
padding: 0 35rpx;
line-height: 60rpx;
display: flex;
justify-content: space-around;
color: #999;
box-sizing: border-box;
}
.form_right {
color: #999;
text-align: center;
image {
width: 40rpx;
height: 40rpx;
margin: 28rpx 5rpx 0 0;
}
}
}
}
.button_bottom {
display: flex;
width: 100%;
height: 90rpx;
background-color: #fff;
line-height: 90rpx;
text-align: center;
font-size: 32rpx;
justify-content: space-around;
padding-bottom: 100rpx;
:first-child {
color: #999;
border: 1rpx solid #999;
width: 260rpx;
height: 88rpx;
line-height: 88rpx;
border-radius: 30rpx;
}
:last-child {
background-color: $uni-text-color;
color: #fff;
width: 260rpx;
height: 88rpx;
line-height: 88rpx;
border-radius: 30rpx;
}
}
}
.lxr_con_list {
padding: 20rpx 0;
margin-bottom: 20rpx;
background: #fff;
&:last-child {
border-bottom: none;
}
.name {
font-size: 34rpx;
color: #333333;
font-weight: 500;
border-bottom: 1rpx solid #ededed;
padding: 0 0 30rpx 63rpx;
}
.info {
font-size: 32rpx;
color: #999999;
margin: 10rpx 0;
padding-left: 63rpx;
}
.proce_li {
display: flex;
justify-content: space-between;
align-items: center;
padding-left: 63rpx;
margin: 10rpx 0;
.pro_li_left {
display: flex;
justify-content: flex-start;
align-items: center;
.protext {
font-size: 32rpx;
color: #999999;
}
.probox {
width: 120rpx;
height: 30rpx;
border-radius: 15rpx;
background: #C0C0C0;
margin: 0 15rpx;
.proin {
width: 20%;
height: 30rpx;
border-radius: 15rpx;
background: $uni-text-color;
}
}
.pronum {
font-size: 24rpx;
color: #999999;
}
}
.pro_li_right {
color:$uni-text-color;
font-size: 33rpx;
font-weight: 500;
margin-right: 28rpx;
}
}
.con_status {
width: 130rpx;
height: 36rpx;
text-align: center;
line-height: 36rpx;
background: $uni-text-color-opcity;
margin-top: 30rpx;
margin-left: 63rpx;
span {
font-size: 26rpx;
color: $uni-text-color;
}
}
.nopass {
color: #ec7f51;
}
.pass {
color: #22A7F6;
}
}
.bot_total{
position: fixed;
left:0;
bottom:0;
width:750rpx;
height:calc(80rpx + env(safe-area-inset-bottom) / 2);
background:#fff;
font-size:24rpx;
color:#333;
text-align: center;
line-height: 80rpx;
color:$uni-text-color;
border-top:1rpx solid #f5f5f5;
padding-bottom:calc(env(safe-area-inset-bottom) / 2);
}
.botwarp{
background:#fff;
padding:0 24rpx;
.wa_li{
padding:24rpx 35rpx;
border-bottom:1rpx solid #f5f5f5;
display: flex;
justify-content: space-between;
align-items: center;
.wa_label{
font-size:24rpx;
color:#333;
}
.wa_money{
font-size:24rpx;
color:#666;
text{
color:$uni-text-color;
}
}
}
.wa_btn{
width:100%;
height:100rpx;
font-size:24rpx;
color:$uni-text-color;
text-align: center;
line-height: 100rpx;
}
}
</style>