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.

79 lines
1.9 KiB

<script type="text/jsx">
import Vue from 'vue'
import TreeDialog from "./TreeDialog"
import common from '../mixin'
const TreeDialogConstructor = Vue.extend(TreeDialog)
let limit, full
export default {
name: "RegionTreeSelector",
mixins: [common],
data() {
return {
dialogVisible: false,
limitTree: []
}
},
methods: {
openDialog() {
if (this.limit) {
this.initLimit()
return limit.visible = true
}
else {
!full && this.initFull()
full.visible = true
}
},
handler(payload) {
this.$emit('select', ...payload)
},
initLimit() {
if (limit) {
limit.getChildrenOnSelect = this.getChildrenOnSelect
limit.limit = this.limit
limit.limitApi = this.limitApi
return limit.init()
}
const data = {...this.$props, handler: this.handler}
limit = new TreeDialogConstructor({data}).$mount()
document.body.appendChild(limit.$el)
return limit.init()
},
initFull() {
if (full) {
return full.getChildrenOnSelect = this.getChildrenOnSelect
}
const data = {getChildrenOnSelect: this.getChildrenOnSelect, handler: this.handler}
full = new TreeDialogConstructor({data}).$mount()
document.body.appendChild(full.$el)
return full.init()
}
},
render() {
return (
<el-input
value={this.value}
readonly={this.readonly}
size={this.size}
clearable
v-on:clear={() => this.$emit('clear')}
v-on:focus={this.openDialog}
/>
)
}
}
</script>