| | |
| | | > |
| | | <template slot-scope="_"> |
| | | <slot :vm="_.vm" :model="_.model"> |
| | | <i :class="_.vm.themeIconClasses" role="presentation" v-if="!_.model.loading"></i> |
| | | <i |
| | | :class="_.vm.themeIconClasses" |
| | | role="presentation" |
| | | v-if="!_.model.loading" |
| | | ></i> |
| | | <span v-html="_.model[textFieldName]"></span> |
| | | </slot> |
| | | </template> |
| | |
| | | data: { type: Array }, |
| | | size: { |
| | | type: String, |
| | | validator: value => ["large", "small"].indexOf(value) > -1 |
| | | validator: (value) => ["large", "small"].indexOf(value) > -1, |
| | | }, |
| | | showCheckbox: { type: Boolean, default: false }, |
| | | wholeRow: { type: Boolean, default: false }, |
| | |
| | | type: Object, |
| | | default: function () { |
| | | return {}; |
| | | } |
| | | }, |
| | | }, |
| | | async: { type: Function }, |
| | | loadingText: { type: String, default: "Loading..." }, |
| | | draggable: { type: Boolean, default: false }, |
| | | dragOverBackgroundColor: { type: String, default: "#C9FDC9" }, |
| | | klass: String |
| | | klass: String, |
| | | }, |
| | | data() { |
| | | return { |
| | | draggedItem: undefined, |
| | | draggedElm: undefined |
| | | draggedElm: undefined, |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | { "tree-default": !this.size }, |
| | | { [`tree-default-${this.size}`]: !!this.size }, |
| | | { "tree-checkbox-selection": !!this.showCheckbox }, |
| | | { [this.klass]: !!this.klass } |
| | | { [this.klass]: !!this.klass }, |
| | | ]; |
| | | }, |
| | | containerClasses() { |
| | |
| | | { "tree-container-ul": true }, |
| | | { "tree-children": true }, |
| | | { "tree-wholerow-ul": !!this.wholeRow }, |
| | | { "tree-no-dots": !!this.noDots } |
| | | { "tree-no-dots": !!this.noDots }, |
| | | ]; |
| | | }, |
| | | sizeHeight() { |
| | |
| | | default: |
| | | return ITEM_HEIGHT_DEFAULT; |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | methods: { |
| | | initializeData(items) { |
| | |
| | | let self = this; |
| | | node.addBefore = function (data, selectedNode) { |
| | | let newItem = self.initializeDataItem(data); |
| | | let index = selectedNode.parentItem.findIndex(t => t.id === node.id); |
| | | let index = selectedNode.parentItem.findIndex((t) => t.id === node.id); |
| | | selectedNode.parentItem.splice(index, 0, newItem); |
| | | }; |
| | | node.addAfter = function (data, selectedNode) { |
| | | let newItem = self.initializeDataItem(data); |
| | | let index = |
| | | selectedNode.parentItem.findIndex(t => t.id === node.id) + 1; |
| | | selectedNode.parentItem.findIndex((t) => t.id === node.id) + 1; |
| | | selectedNode.parentItem.splice(index, 0, newItem); |
| | | }; |
| | | node.addChild = function (data) { |
| | |
| | | }; |
| | | node.openChildren = function () { |
| | | node.opened = true; |
| | | self.handleRecursionNodeChildren(node, node => { |
| | | self.handleRecursionNodeChildren(node, (node) => { |
| | | node.opened = true; |
| | | }); |
| | | }; |
| | | node.closeChildren = function () { |
| | | node.opened = false; |
| | | self.handleRecursionNodeChildren(node, node => { |
| | | self.handleRecursionNodeChildren(node, (node) => { |
| | | node.opened = false; |
| | | }); |
| | | }; |
| | |
| | | this.$emit("item-click", oriNode, oriItem, e); |
| | | }, |
| | | handleSingleSelectItems(oriNode, oriItem) { |
| | | this.handleRecursionNodeChilds(this, node => { |
| | | this.handleRecursionNodeChilds(this, (node) => { |
| | | if (node.model) node.model.selected = false; |
| | | }); |
| | | oriNode.model.selected = true; |
| | | }, |
| | | handleBatchSelectItems(oriNode, oriItem) { |
| | | console.log('oriNode, oriItem', oriNode, oriItem) |
| | | this.handleRecursionNodeChilds(oriNode, node => { |
| | | console.log("oriNode, oriItem", oriNode, oriItem); |
| | | this.handleRecursionNodeChilds(oriNode, (node) => { |
| | | if (!!node.model) { |
| | | if (!!node.model.disabled) return; |
| | | node.model.selected = oriNode.model.selected; |
| | |
| | | var self = this; |
| | | if (this.async) { |
| | | if (oriParent[0].loading) { |
| | | this.async(oriNode, data => { |
| | | this.async(oriNode, (data) => { |
| | | if (data.length > 0) { |
| | | for (let i in data) { |
| | | if (!data[i].isLeaf) { |
| | | if (typeof data[i][self.childrenFieldName] !== "object") { |
| | | data[i][self.childrenFieldName] = [ |
| | | self.initializeLoading() |
| | | self.initializeLoading(), |
| | | ]; |
| | | } |
| | | } |
| | | var dataItem = self.initializeDataItem(data[i]); |
| | | debugger |
| | | self.$set(oriParent, i, dataItem); |
| | | } |
| | | } else { |
| | |
| | | this.draggedItem = { |
| | | item: oriItem, |
| | | parentItem: oriNode.parentItem, |
| | | index: oriNode.parentItem.findIndex(t => t.id === oriItem.id) |
| | | index: oriNode.parentItem.findIndex((t) => t.id === oriItem.id), |
| | | }; |
| | | |
| | | this.$emit("item-drag-start", oriNode, oriItem, e); |
| | |
| | | this.draggedItem.item === oriItem || |
| | | (oriItem[this.childrenFieldName] && |
| | | oriItem[this.childrenFieldName].findIndex( |
| | | t => t.id === this.draggedItem.item.id |
| | | (t) => t.id === this.draggedItem.item.id |
| | | ) !== -1) |
| | | ) { |
| | | return; |
| | |
| | | }); |
| | | this.$emit("item-drop", oriNode, oriItem, draggedItem.item, e); |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | created() { |
| | | this.initializeData(this.data); |
| | |
| | | } |
| | | }, |
| | | components: { |
| | | TreeItem |
| | | } |
| | | TreeItem, |
| | | }, |
| | | }; |
| | | </script> |
| | | <style lang="less"> |