175 lines
4.4 KiB
Vue
175 lines
4.4 KiB
Vue
<template>
|
|
<section class="partyTrans">
|
|
<el-row class="search-panel" type="flex" justify="space-between">
|
|
<div class="add-item" style="padding-bottom:3px;overflow-x: hidden">
|
|
<p class="add_top">
|
|
<span>党组织</span>
|
|
<el-input placeholder="党组织名称" size="small" style="width:166px;" clearable suffix-icon="el-icon-search"
|
|
v-model="filterText" @change="$refs.partyOrgTree.filter(filterText)"
|
|
@keyup.native="$refs.partyOrgTree.filter(filterText)"/>
|
|
</p>
|
|
<el-tree ref="partyOrgTree" :data="treeData" :show-checkbox="multipleSelection" node-key="id"
|
|
:filter-node-method="filterNode" @node-click="nodeClick"
|
|
@check-change="multipleSelection&&(selectParty=$refs.partyOrgTree.getCheckedNodes())"
|
|
:highlight-current="true" :props="defaultProps"/>
|
|
</div>
|
|
</el-row>
|
|
<div class="selected-people add-item">
|
|
<p class="add_top">
|
|
<span>已选择</span>
|
|
<el-button icon="iconfont iconDelete" size="mini" @click="clearSelect()">清空</el-button>
|
|
</p>
|
|
<div class="add_tag" v-if="selectParty.length" style="width:100%;">
|
|
<el-tag v-for="(item,i) in selectParty" :key="i" closable type="info" @close="cancelSelect(i)"
|
|
:disable-transitions="true">{{item.name}}
|
|
</el-tag>
|
|
</div>
|
|
<div class="select-no-data" v-else>
|
|
<span>暂无数据</span>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: "partyTrans",
|
|
props: {
|
|
multipleSelection: {type: Boolean, default: false},
|
|
orgs: Array,
|
|
},
|
|
computed: {
|
|
treeData() {
|
|
return this.orgs || []
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
defaultProps: {
|
|
children: 'children',
|
|
label: 'name'
|
|
},
|
|
filterText: "",//tree模糊搜索
|
|
selectParty: [],//选中的党组织
|
|
}
|
|
},
|
|
methods: {
|
|
//节点过滤/搜索
|
|
filterNode(value, data) {
|
|
if (!value) return true;
|
|
return data.name.indexOf(value) !== -1;
|
|
},
|
|
//取消选择
|
|
cancelSelect(index) {
|
|
this.selectParty.splice(index, 1)
|
|
this.$refs.partyOrgTree.setCheckedNodes(this.selectParty);
|
|
},
|
|
clearSelect() {
|
|
this.$refs.partyOrgTree.setCheckedKeys([]);
|
|
this.selectParty = [];
|
|
},
|
|
nodeClick(data) {
|
|
if (!this.multipleSelection) {
|
|
let {id, name, orgType, partyType} = data
|
|
this.selectParty = [{id, name, orgType, partyType}]
|
|
}
|
|
}
|
|
},
|
|
watch: {
|
|
selectParty: {
|
|
handler(v) {
|
|
this.$emit('change', v)
|
|
},
|
|
deep: true
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.partyTrans {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
|
|
.select-no-data {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 100%;
|
|
height: calc(100% - 40px);
|
|
}
|
|
|
|
.search-panel {
|
|
width: auto;
|
|
flex: 1;
|
|
padding-right: 10px;
|
|
|
|
& > div {
|
|
width: 100%;
|
|
}
|
|
}
|
|
|
|
.add-item {
|
|
width: 280px;
|
|
height: 400px;
|
|
background: rgba(252, 252, 252, 1);
|
|
border-radius: 2px;
|
|
border: 1px solid rgba(208, 212, 220, 1);
|
|
position: relative;
|
|
overflow: auto;
|
|
box-sizing: border-box;
|
|
|
|
.add_top {
|
|
width: 100%;
|
|
height: 40px;
|
|
background: rgba(245, 245, 245, 1);
|
|
border-bottom: 1px solid rgba(208, 212, 220, 1);
|
|
padding: 0 8px;
|
|
box-sizing: border-box;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
}
|
|
|
|
.tree_list {
|
|
width: 100%;
|
|
overflow: auto;
|
|
height: calc(100% - 40px);
|
|
|
|
.el-tree {
|
|
height: 100%;
|
|
}
|
|
}
|
|
|
|
.add_buttom {
|
|
position: absolute;
|
|
left: 0;
|
|
bottom: 0;
|
|
font-size: 12px;
|
|
width: 310px;
|
|
height: 32px;
|
|
line-height: 32px;
|
|
z-index: 10000;
|
|
background: rgba(245, 246, 247, 1);
|
|
color: rgba(51, 51, 51, 1);
|
|
box-shadow: 0 1px 0 0 rgba(216, 220, 227, 1);
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.add_tag {
|
|
width: 310px;
|
|
height: calc(100% - 40px);
|
|
overflow-y: auto;
|
|
|
|
.el-tag {
|
|
margin: 8px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|