vue中过滤器的使用(多个过滤器的同时使用)

前一阵在做一个微信扫码的功能,客户想不单单通过扫码更新业务状态,还想通过点击按钮的方式直接更新业务的状态,其实功能方面并不难实现,只是展示这里我稍加思索,因为每个用户根据岗位的不同,并根据每条信息案卷状态的不同,在按钮中展示的文本并不一样,在这里我是通过filters实现的。既然点击的文本不同,那点击前后按钮的颜色和状态也应一并变化
!!!实现目标:更改按钮文本、更改按钮状态、更改按钮颜色

其实实现这三个功能的逻辑判断都是一样的,明确下用户在可以点击按钮的情况下按钮的颜色应该是蓝色、状态是可点击的、文本是确认接收不可以点击的情况下,按钮是白色、状态是不可点击的、文本是已更新,明白上述实现思路,话不多说直接上代码:

视图层(这里我就直接展示按钮的代码):

<van-button :type="item | getColor" 
		   class="button_info" size="small" 
			@click="confirmUpTz(item)" 
			:disabled="item | getdisabled">{{item | getzsxx}}
</van-button>

按钮我使用的是vant的button组件,通过改变type的取值来更改按钮颜色的变换,按钮是否可以点击取决与disabled的取值为true还是false,文本则通过{{ }}中的过滤器

切记:过滤器是写在filters中,与data,methods同级:

按钮的颜色

getColor(item){
		let zw = localStorage.getItem('myjobtitle');
		if(zw == '生产单位'){
			return 'default'
		}else if(zw == '出图室'){
			if((item.dqzt == '0.5' && item.dqjd == '出图室') || Number(item.dqzt) >= 1 ){
				return 'default'
			}else{
				return 'info'
			}
		}else if(zw == '计划科'){
			if((item.dqzt == '0.5' && item.dqjd == '计划科') || Number(item.dqzt) >= 1 ){
				return 'default'
			}else{
				return 'info'
			}
		}else if(zw == '资料室'){
			if(Number(item.dqzt) >= 2){
				return 'default'
			}else{
				return 'info'
			}
		}else if(zw == '经营部大厅'){
			if(Number(item.dqzt) == 3){
				return 'info'
			}else if(Number(item.dqzt) >3){
				return 'default'
			}else{
				return 'info'
			}
		}else if(zw == '甲方'){
			if(Number(item.dqzt) >= 4){
				return 'default'
			}else{
				return 'info'
			}
		}
	}

按钮的状态

getdisabled(item){
		let zw = localStorage.getItem('myjobtitle');
		if(zw == '生产单位'){
			return true
		}else if(zw == '出图室'){
			if((item.dqzt == '0.5' && item.dqjd == '出图室') || Number(item.dqzt) >= 1 ){
				return true
			}else{
				return false
			}
		}else if(zw == '计划科'){
			if((item.dqzt == '0.5' && item.dqjd == '计划科') || Number(item.dqzt) >= 1 ){
				return true
			}else{
				return false
			}
		}else if(zw == '资料室'){
			if(Number(item.dqzt) >= 2){
				return true
			}else{
				return false
			}
		}else if(zw == '经营部大厅'){
			if(Number(item.dqzt) == 3){
				return false
			}else if(Number(item.dqzt) >3){
				return true
			}else{
				return false
			}
		}else if(zw == '甲方'){
			if(Number(item.dqzt) >= 4){
				return true
			}else{
				return false
			}
		}
	},

按钮的文本

getzsxx(item){
	let zw = localStorage.getItem('myjobtitle');
	if(zw == '生产单位'){
		return '已更新'
	}else if(zw == '出图室'){
		if((item.dqzt == '0.5' && item.dqjd == '出图室') || Number(item.dqzt) >= 1 ){
			return '已更新'
		}else{
			return '确认接收'
		}
	}else if(zw == '计划科'){
		if((item.dqzt == '0.5' && item.dqjd == '计划科') || Number(item.dqzt) >= 1 ){
			return '已更新'
		}else{
			return '确认接收'
		}
	}else if(zw == '资料室'){
		if(Number(item.dqzt) >= 2){
			return '已更新'
		}else{
			return '确认接收'
		}
	}else if(zw == '经营部大厅'){
		if(Number(item.dqzt) == 3){
			return '为甲方代领'
		}else if(Number(item.dqzt) >3){
			return '已完成'
		}else{
			return '确认接收'
		}
	}else if(zw == '甲方'){
		if(Number(item.dqzt) >= 4){
			return '已完成'
		}else{
			return '确认接收'
		}
	}
}

前台最终展示效果
在这里插入图片描述

其实这三个过滤器的逻辑是一样的,只是return的返回值不一样,我目前想到的使用filter的实现方式是这一种,各位大佬们如果有更好的实现思路,欢迎在下方评论去留言,大家一起学习一同进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙姐姐QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值