You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
5.0 KiB
180 lines
5.0 KiB
<template>
|
|
<div class="module-box link-select">
|
|
<div class="module-box__title">
|
|
<label class="module-box__label">{{title}}</label>
|
|
</div>
|
|
<div class="link-select__confirm">
|
|
<div class="btn" v-if="selectedCategoryList && selectedCategoryList.length === 0" @click="openDialog">
|
|
<span class="iconfont"></span> 添加类别
|
|
</div>
|
|
<div class="info" v-else>
|
|
<div><span>{{selectedCategoryList[0].categoryName}}</span><span v-if="selectedCategoryList.length > 1">+{{selectedCategoryList.length-1}}</span></div>
|
|
<div class="operation">
|
|
<i class="iconfont" @click="openDialog"></i>
|
|
<i class="iconfont" @click="deleteCategory"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<el-dialog width="500" title="选择类别" :visible.sync="categoryVisible">
|
|
<el-select v-if="terminal === 4"
|
|
v-model="categoryValue"
|
|
multiple
|
|
collapse-tags
|
|
placeholder="请选择">
|
|
<el-option
|
|
v-for="item in categoryList"
|
|
:key="item.id"
|
|
:label="item.categoryName"
|
|
:value="item.id">
|
|
</el-option>
|
|
</el-select>
|
|
<el-cascader v-else
|
|
ref="cascader"
|
|
:options="categoryList" :props="{ multiple: true,label: 'categoryName',value: 'id',children: 'childs' }"
|
|
clearable></el-cascader>
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button @click="categoryVisible = false">{{ $t('common.cancel') }}</el-button>
|
|
<el-button type="primary" @click="categoryChanged">{{ $t('common.sure') }}</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import api from '@@/components/canvasShow/config/api'
|
|
import {sendReqMixin} from '@@/components/canvasShow/config/mixin'
|
|
import {checkEmptyChild} from '@@/config/common'
|
|
import { mapGetters } from 'vuex'
|
|
export default {
|
|
name: 'tool-select-category',
|
|
mixins: [sendReqMixin],
|
|
data () {
|
|
return {
|
|
props: { multiple: true },
|
|
selectName: '',
|
|
categoryValue: [],
|
|
selectedCategoryList: [],
|
|
categoryList: [],
|
|
categoryVisible: false
|
|
}
|
|
},
|
|
props: {
|
|
title: {
|
|
type: String,
|
|
default: '链接'
|
|
},
|
|
category: {
|
|
type: Array,
|
|
default: () => []
|
|
}
|
|
},
|
|
mounted () {
|
|
this.getCategory()
|
|
this.selectedCategoryList = this.category
|
|
},
|
|
computed: {
|
|
...mapGetters([
|
|
'terminal'
|
|
])
|
|
},
|
|
methods: {
|
|
// 获取类别
|
|
getCategory () {
|
|
var _this = this
|
|
let params = {
|
|
url: api.getClassify,
|
|
method: 'GET'
|
|
}
|
|
this.sendReq(params, (res) => {
|
|
_this.categoryList = res.data
|
|
checkEmptyChild(_this.categoryList)
|
|
})
|
|
},
|
|
// 打开添加弹窗
|
|
openDialog () {
|
|
this.categoryVisible = true
|
|
},
|
|
// 类别选择
|
|
categoryChanged () {
|
|
this.categoryVisible = false
|
|
if (this.terminal === 4) {
|
|
this.selectedCategoryList = this.categoryList.filter((item) => {
|
|
for (let i = 0; i < this.categoryValue.length; i++) {
|
|
if (this.categoryValue[i] === item.id) {
|
|
return true
|
|
}
|
|
}
|
|
})
|
|
} else {
|
|
let nodesArr = this.$refs['cascader'].getCheckedNodes()
|
|
if (nodesArr) {
|
|
nodesArr = nodesArr.filter((item) => {
|
|
return item.children.length === 0
|
|
})
|
|
this.selectedCategoryList = []
|
|
for (let i = 0; i < nodesArr.length; i++) {
|
|
this.selectedCategoryList.push(nodesArr[i].data)
|
|
}
|
|
}
|
|
}
|
|
this.$emit('update:category', this.selectedCategoryList)
|
|
},
|
|
// 删除选择
|
|
deleteCategory () {
|
|
this.categoryValue = []
|
|
this.$emit('update:category', [])
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.link-select{
|
|
&__select{
|
|
width: 100%;
|
|
}
|
|
&__confirm{
|
|
margin-top: 10px;
|
|
.btn{
|
|
text-align: center;
|
|
background-color: $mainColor;
|
|
color: #fff;
|
|
height: 36px;
|
|
line-height: 36px;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
}
|
|
.info{
|
|
height: 36px;
|
|
line-height: 36px;
|
|
border-radius: 4px;
|
|
padding: 0 10px;
|
|
border:1px solid $mainColor;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
span{
|
|
background-color: #f4f4f5;
|
|
border:1px solid #e9e9eb;
|
|
color: #909399;
|
|
height: 26px;
|
|
padding: 0 8px;
|
|
line-height: 24px;
|
|
border-radius: 4px;
|
|
margin: 5px 6px 5px 0px;
|
|
display: inline-block;
|
|
}
|
|
.operation{
|
|
float: right;
|
|
i{
|
|
width: 35px;
|
|
display: inline-block;
|
|
height: 35px;
|
|
line-height: 35px;
|
|
text-align: center;
|
|
cursor: pointer;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|