vue-computed 计算属性

<!DOCTYPE html>
<html>
<head>
    <title>123</title>
</head>
<body>
   <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
<div id="app">
  <div>
   <div>
      全选
      <input type="checkbox"  v-model='ischeckAll' name="">
   </div>
      <ul>
         <li v-for="item in objects">
            <span>{{item.name}}</span>
            <input type="checkbox" v-model="item.checked" name="">
         </li>

      </ul>
      <div>
         <b>选中成员:{{total}}</b>
                  <b>选中数量:{{totalCount}}</b>

      </div>
  </div>

</div>

    <script type="text/javascript">
      
            let obj=[
         {
            name:"崔1",            num:1,

            checked:true
         },
          {
            name:"崔2"
            ,            num:1,

            checked:true
         },
          {
            name:"崔3"
            ,            num:1,

            checked:true
         },
          {
            name:"崔1"
            ,            num:1,

            checked:true
         },
          {
            name:"崔2"
            ,            num:1,

            checked:true
         },
          {
            name:"崔2"
            ,            num:1,

            checked:true
         },
          {            num:1,

            name:"崔2",
            checked:true
         }, {
            name:"崔2",            num:1,

            checked:true
         },
          {
            name:"崔2",            num:1,

            checked:true
         },
          {
            name:"崔2",            num:1,

            checked:true
         },
          {
            name:"崔4",
                        num:1,

            checked:true
         },
          {
            name:"崔3",
            num:1,
            checked:true
         },
      ]
      var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!',
    objects:obj,
    ischeck:false
  },
  computed:{
      total(){
        return this.removeDuplicatedItem(this.objects.filter(item=>item.checked)).length
      },
      totalCount(){
         let totalArr=this.objects.filter(item=>item.checked)
         let num =0
         totalArr.map(item=>{
            num +=item.num
         })
         return num
      },
      ischeckAll:{
         get(){
           return this.objects.every(item=>item.checked)
         },
         set(nweValue){
            this.objects.forEach(item=>{
               item.checked=nweValue
            })
         }
      }
  },
  methods:{
      removeDuplicatedItem(option){
        let json={}
        let arr=[]
        for(let i=0;i<option.length;i++){
           let item = option[i]
            if(!json[item.name]){
               json[item.name]=true
               arr.push(item)
            }
        }
        return arr
      }
  }
})
    </script>
</body>
</html>








 

<template>
    <div class="chose-brand">
        <Headers @searchContent="getSearchContent" @editEv='editHandle'></Headers>
        <Popup @applicant='getApplicant' @brandType='getBrandType'></Popup>
        <div>
            <div class="section-title">
                <span class="brandname">商标名称</span>
                <span class="type">类别</span>
                <span class="price">价格</span>
            </div>
            <scroller
            class="scroller" 
            :on-infinite="infinite"
            ref="scroller"
            >
                <div v-for="(item,index) in list"   class="list">
                        <span v-if="item.price">
                            <input type="checkbox" :value="item" :id="'a'+index" v-model="item.checked">
                            <label :for="'a'+index"></label>
                        </span>
                        <span v-else @click="alert">
                            <label></label>
                        </span>
                        <span class="company">
                            {{item.company}}
                        </span>
                        <span class="type">
                            {{item.type}}
                        </span>
                        <span v-if="item.price" class="price">
                            {{item.price}}
                        </span>
                        <span v-else class="pricing" @click="openDialog(1,item)">
                            定价
                        </span>
                </div>
                <div style="height:200px">
                </div>
            </scroller>
        </div>
        <div class="bottom" v-if="totalCount > 0">
            <div class="left">
                <span>
                    <input type="checkbox" v-model="ischeckAll" id="all" >
                    <label for="all"></label>
                </span>
                <span class="all">全选</span>
                <span><span class="fc">{{totalCount}}</span>个商品</span>
            </div>
            <button v-if="showSetPrice" @click="openDialog(2)">设定价格</button>
            <router-link  v-if="!showSetPrice" class="right"  to='/selectBrand'>发布</router-link>
        </div>
        <!-- setPrice dialog -->
        <div class="dialog" v-if="hidMask">
            <input type="text" v-model="inputPrice" placeholder="请输入商标价格"/>
            <b class="price">(元)</b>
            <span class="cancel" @click="hidMask=false">取消</span>
            <span class="confirm" @click="confirm">确定</span>
        </div>
        <div class="mask" v-if="hidMask">

        </div>
    </div>
</template>

<script>
import '@/style/select-brand.scss'
import '@/style/trademark-registant.scss'
import Headers from '@/components/Header'
import Popup from '@/components/Popup'
export default {
    data(){
        return{
            certifyType:'certifyType',
            certifyTypeNo:'certifyTypeNo',
            list:[
                {   
                    id:1,
                    company:"1腾讯科技有限公司",
                    certifyType:"已认证",
                    num:"987",
                    type:"35类",
                    price:"1"
                },
                {   
                    id:1,
                    company:"1腾讯科技有限公司",
                    certifyType:"已认证",
                    num:"987",
                    type:"35类",
                    price:""
                },
                {   
                    id:1,
                    company:"1腾讯科技有限公司",
                    certifyType:"已认证",
                    num:"987",
                    type:"35类",
                    price:""
                },
                {   
                    id:1,
                    company:"1腾讯科技有限公司",
                    certifyType:"已认证",
                    num:"987",
                    type:"35类",
                    price:""
                },
                {   
                    id:1,
                    company:"1腾讯科技有限公司",
                    certifyType:"已认证",
                    num:"987",
                    type:"35类",
                    price:""
                },
            ],
            // 控制设定价格的遮罩的show hide
            hidMask:false,
            //控制底部设定价格的show hide
            showSetPrice:false,
            // 设定价格是由那个事件调起来 1是定价,2是设定价格
            dialogType:'',
            // 存放定价调起弹框存放的item
            dialogItem:"",
            inputPrice:""
        }
    },
    components:{
       Headers ,
       Popup
    },
    created(){
        this.list.forEach(item=>{
            this.$set(item,"checked",false)
        })
    },
    computed:{
        totalCount(){
            let totalArr = this.list.filter(item=>item.checked)
            return totalArr.length
        },
        ischeckAll:{
                get(){
                    var list = this.list.filter((item)=>{
                        return item.price
                    })
                    return list.every(item=>item.checked)
                },
                set(newValue){
                    this.list.filter((item)=>{
                        return item.price
                    }).forEach(item=>{
                        item.checked=newValue
                    })
                }
            }
    },
    methods:{
        // 接受popup组件 emit的申请人
        getApplicant(item){
            console.log(item)
        },
        // 接受popup组件 emit的尚标状态
        getBrandType(item){
            console.log(item)
        },  
        // 接受Header组件搜索emit 的内容
        getSearchContent(val){
            console.log(val,"search val")
        },
        // 接受Header组件 点击编辑emit 的内容
        editHandle(val){
            console.log(val,"edit");
            this.showSetPrice= val
        },
        // 调起设定价格弹框
        openDialog(id,item){
            this.dialogItem = item
            this.dialogType = id
            this.hidMask = true
        },
        confirm(){
            if(this.dialogType == '1'){
                this.dialogItem.price = this.inputPrice
            }else{
                this.list.forEach(item=>{
                    if(item.checked){
                        item.price = this.inputPrice
                    }
                })
            }
            this.hidMask = false
        },
        infinite: function (done) {
            if(this.list.length>10){
                done(true)
                console.log(456)
                this.$refs.scroller.finishInfinite(true)
                return
            }
            console.log(123)
            setTimeout(()=>{
                this.list.push(               
                {   
                    id:1,
                    company:"1213123",
                    certifyType:"已认证",
                    num:"987",
                    type:'35类',
                    price:""
                },)
                 done()
            },1000)
            
        },
        alert(){
            alert('您还没有设定价格哦')
        }
    }
}
</script>

 

< template >
< div class= "chose-brand" >
< Headers @searchContent=" getSearchContent" @editEv=' editHandle' ></ Headers >
< Popup @applicant=' getApplicant' @brandType=' getBrandType' ></ Popup >
< div >
< div class= "section-title" >
< span class= "brandname" >商标名称 </ span >
< span class= "type" >类别 </ span >
< span class= "price" >价格 </ span >
</ div >
< scroller
class= "scroller"
:on-infinite=" infinite"
ref= "scroller"
>
< div v-for="( item, index) in list" class= "list" >
< span v-if=" item. price" >
< input type= "checkbox" :value=" item" :id=" 'a'+ index" v-model=" item. checked" >
< label :for=" 'a'+ index" ></ label >
</ span >
< span v-else @click=" alert" >
< label ></ label >
</ span >
< span class= "company" >
{{ item. company}}
</ span >
< span class= "type" >
{{ item. type}}
</ span >
< span v-if=" item. price" class= "price" >
{{ item. price}}
</ span >
< span v-else class= "pricing" @click=" openDialog( 1, item)" >
定价
</ span >
</ div >
< div style= "height:200px" >
</ div >
</ scroller >
</ div >
< div class= "bottom" v-if=" totalCount > 0" >
< div class= "left" >
< span >
< input type= "checkbox" v-model=" ischeckAll" id= "all" >
< label for= "all" ></ label >
</ span >
< span class= "all" >全选 </ span >
< span >< span class= "fc" >{{ totalCount}} </ span >个商品 </ span >
</ div >
< button v-if=" showSetPrice" @click=" openDialog( 2)" >设定价格 </ button >
< router-link v-if="! showSetPrice" class= "right" to= '/selectBrand' >发布 </ router-link >
</ div >
<!-- setPrice dialog -->
< div class= "dialog" v-if=" hidMask" >
< input type= "text" v-model=" inputPrice" placeholder= "请输入商标价格" />
< b class= "price" >(元) </ b >
< span class= "cancel" @click=" hidMask= false" >取消 </ span >
< span class= "confirm" @click=" confirm" >确定 </ span >
</ div >
< div class= "mask" v-if=" hidMask" >

</ div >
</ div >
</ template >

< script >
import '@/style/select-brand.scss'
import '@/style/trademark-registant.scss'
import Headers from '@/components/Header'
import Popup from '@/components/Popup'
export default {
data(){
return{
certifyType: 'certifyType',
certifyTypeNo: 'certifyTypeNo',
list:[
{
id: 1,
company: "1腾讯科技有限公司",
certifyType: "已认证",
num: "987",
type: "35类",
price: "1"
},
{
id: 1,
company: "1腾讯科技有限公司",
certifyType: "已认证",
num: "987",
type: "35类",
price: ""
},
{
id: 1,
company: "1腾讯科技有限公司",
certifyType: "已认证",
num: "987",
type: "35类",
price: ""
},
{
id: 1,
company: "1腾讯科技有限公司",
certifyType: "已认证",
num: "987",
type: "35类",
price: ""
},
{
id: 1,
company: "1腾讯科技有限公司",
certifyType: "已认证",
num: "987",
type: "35类",
price: ""
},
],
// 控制设定价格的遮罩的show hide
hidMask: false,
//控制底部设定价格的show hide
showSetPrice: false,
// 设定价格是由那个事件调起来 1是定价,2是设定价格
dialogType: '',
// 存放定价调起弹框存放的item
dialogItem: "",
inputPrice: ""
}
},
components:{
Headers ,
Popup
},
created(){
this. list. forEach( item =>{
this. $set( item, "checked", false)
})
},
computed:{
totalCount(){
let totalArr = this. list. filter( item => item. checked)
return totalArr. length
},
ischeckAll:{
get(){
var list = this. list. filter(( item) =>{
return item. price
})
return list. every( item => item. checked)
},
set( newValue){
this. list. filter(( item) =>{
return item. price
}). forEach( item =>{
item. checked= newValue
})
}
}
},
methods:{
// 接受popup组件 emit的申请人
getApplicant( item){
console. log( item)
},
// 接受popup组件 emit的尚标状态
getBrandType( item){
console. log( item)
},
// 接受Header组件搜索emit 的内容
getSearchContent( val){
console. log( val, "search val")
},
// 接受Header组件 点击编辑emit 的内容
editHandle( val){
console. log( val, "edit");
this. showSetPrice= val
},
// 调起设定价格弹框
openDialog( id, item){
this. dialogItem = item
this. dialogType = id
this. hidMask = true
},
confirm(){
if( this. dialogType == '1'){
this. dialogItem. price = this. inputPrice
} else{
this. list. forEach( item =>{
if( item. checked){
item. price = this. inputPrice
}
})
}
this. hidMask = false
},
infinite : function ( done) {
if( this. list. length> 10){
done( true)
console. log( 456)
this. $refs. scroller. finishInfinite( true)
return
}
console. log( 123)
setTimeout(() =>{
this. list. push(
{
id: 1,
company: "1213123",
certifyType: "已认证",
num: "987",
type: '35类',
price: ""
},)
done()
}, 1000)
 
},
alert(){
alert( '您还没有设定价格哦')
}
}
}
</ script >

转载于:https://www.cnblogs.com/MR-cui/p/10175452.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值