<template>
<div class="chose-brand">
<Headers @seachIcon="selectType" @searchContent="getSearchContent" @goBack="$router.go(-1)" @editEv='editHandle'></Headers>
<Popup :select ="select" @selectType="selectType" @applicant='getApplicant' @brandType='getBrandType' :registrants="registrants"></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" :key="index" class="list">
<span>
<!-- 价格为空并且不是在编辑模式下 绑定上disabled -->
<input type="checkbox" :disabled="!showSetPrice&&!item.price" :id="'a'+index" v-model="item.checked">
<label :for="'a'+index" @click="dialogTip(item)"></label>
</span>
<span class="company">
{{item.trademark_name}}
</span>
<span class="type">
{{item.trademark_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-show="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>
<span v-if="!showSetPrice" class="right" @click="publish">发布</span>
</div>
<!-- tip about no set price -->
<div class="toast" v-show='toast'>
您还没有设定价格哦
</div>
<!-- setPrice dialog -->
<div class="dialog" v-show="hidMask">
<div class="input-box">
<input type="text" maxlength="8" v-model="inputPrice" v-number-only placeholder="请输入商标价格"/>
<b class="price">(元)</b>
</div>
<span class="cancel" @click="hidMask=false">取消</span>
<span class="confirm" @click="confirm">确定</span>
</div>
<div class="dialog-mask" v-show="hidMask"></div>
<!-- publish dialog -->
<div class="publish-dialog" v-show="publishMask">
<div class="content">
<h1>您的商标信息已成功提交</h1>
<p>本次发布商标
<span>{{total}}</span>
个 ,我们将尽快帮您审核
</p>
<span @click="goBack" class="rebackMyBrand">返回我的商标</span>
<router-link to="/trademarkToaudit" class="watchPublishBrand">查看发布商标</router-link>
</div>
</div>
<div class="dialog-mask" v-show="publishMask"></div>
</div>
</template>
<script>
import '@/style/select-brand.scss'
import '@/style/trademark-registant.scss'
import Headers from '@/components/Header'
import Popup from '@/components/Popup'
import {registrantsGet,released} from '@/api/registrants'
import { setTimeout } from 'timers';
export default {
data(){
return{
certifyType:'certifyType',
certifyTypeNo:'certifyTypeNo',
// 认领商标列表
list:[],
// 申请人列表
registrants:[],
// 控制设定价格的遮罩的show hide
hidMask:false,
//控制底部设定价格的show hide
showSetPrice:false,
// 设定价格是由那个事件调起来 1是定价,2是设定价格
dialogType:'',
// 存放定价调起弹框存放的item
dialogItem:"",
inputPrice:"",
// 没有设定价格的toast
toast:false,
// 发布弹框遮罩
publishMask:false,
// 上个页面穿来的hash 和type值
formData:{
page:1,
pagesize:'20',
registrant_hash:this.$route.params.registrant_hash,
trademark_type:"",
keyword:""
},
// 初始化申请人,只执行一次
initRegistrants:true,
initScroll:false,//防止触发下拉加载函数,执行两遍alax
emptyData:false, //主要用来判断数据为空 拉倒顶部又拉到底部 重新触发infinite事件不显示没有更多数据的问题
select:0,
total:"" //发布成功后后台返回的total
}
},
components:{
Headers ,
Popup
},
created(){
// this.formData.registrant_hash = this.$route.params.registrant_hash
this.getData()
},
directives: {
numberOnly: {
bind: function(el) {
el.handler = function() {
el.value = el.value.replace(/\D+/, '')
}
el.addEventListener('input', el.handler)
},
unbind: function(el) {
el.removeEventListener('input', el.handler)
}
}
},
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.forEach(item=>{
item.checked=newValue
})
}
}
},
methods:{
getData(){
let form = this.formData
registrantsGet(form).then((res)=>{
if(this.initRegistrants){
this.registrants = res.subData
this.registrants.unshift({registrant_hash:'0',company_name:'全部申请人'})
this.initRegistrants = false
}
if(form.page == '1'){
this.list = res.data
this.list.forEach(item=>{
this.$set(item,"checked",false)
})
this.initScroll = true
this.$refs.scroller.finishInfinite()
if(this.list.length< 20){
this.emptyData = true
return
}
}else{
this.$refs.scroller.finishInfinite()
let resArr = res.data
if(resArr.length == 0){
this.emptyData = true
return
}
resArr.forEach(item=>{
this.$set(item,"checked",false)
})
this.list = [...this.list,...resArr]
}
})
},
// 初始化搜索字段
initSearch(){
this.initScroll = false
this.emptyData = false
this.formData.page = 1
this.$refs.scroller.scrollTo(0,0,true)
},
// 接受popup组件 emit的申请人
getApplicant(item){
this.initSearch()
this.formData.registrant_hash=item.registrant_hash
this.getData()
},
// 接受popup组件 emit的商标类别
getBrandType(item){
this.initSearch()
this.formData.trademark_type=item.id
this.getData()
},
// 接受Header组件搜索emit 的内容
getSearchContent(val){
this.initSearch()
this.formData.keyword=val
this.getData()
},
// 接受Header组件 点击编辑emit 的内容
editHandle(bol){
if(bol){
this.list.forEach((item)=>{
item.checked=true
})
}else{
this.list.forEach((item)=>{
if(!item.price){
item.checked=false
}
})
}
this.showSetPrice= bol
},
// 调起设定价格弹框
openDialog(id,item){
this.dialogItem = item
console.log(item,"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.inputPrice= ''
this.hidMask = false
},
// 发布商标
publish(){
var publishList = this.list.filter(item=>{
return item.checked
})
released(publishList).then((res)=>{
this.publishMask = true
this.total = res.total
})
},
infinite: function (done) {
if(this.emptyData){
this.$refs.scroller.finishInfinite(true)
return;
}
if(!this.initScroll){
return
}
this.formData.page++;
this.getData()
},
selectType(val){
this.select = val
},
dialogTip(item){
// 不在编辑模式下并且价格为空
if(!item.price&&!this.showSetPrice){
this.toast = true
setTimeout(()=>{
this.toast = false
},1500)
}
}
}
}
</script>