Blame view

src/components/tree/node.vue 5.43 KB
75c32d5f   梁灏   rebuild Tree
1
  <template>
eae3e936   Aresn   Tree support tran...
2
      <collapse-transition>
d44420be   Sergio Crisostomo   refactor and make...
3
          <ul :class="classes">
75c32d5f   梁灏   rebuild Tree
4
5
              <li>
                  <span :class="arrowClasses" @click="handleExpand">
b31aab71   梁灏   Tree add async lo...
6
7
                      <Icon v-if="showArrow" type="arrow-right-b"></Icon>
                      <Icon v-if="showLoading" type="load-c" class="ivu-load-loop"></Icon>
75c32d5f   梁灏   rebuild Tree
8
9
                  </span>
                  <Checkbox
eae3e936   Aresn   Tree support tran...
10
11
                          v-if="showCheckbox"
                          :value="data.checked"
d44420be   Sergio Crisostomo   refactor and make...
12
                          :indeterminate="data.indeterminate"
eae3e936   Aresn   Tree support tran...
13
14
                          :disabled="data.disabled || data.disableCheckbox"
                          @click.native.prevent="handleCheck"></Checkbox>
174836c4   梁灏   update Tree Rende...
15
16
17
                  <Render v-if="data.render" :render="data.render" :node="data"></Render>
                  <Render v-else-if="isParentRender" :render="parentRender" :node="data"></Render>
                  <span v-else :class="titleClasses" @click="handleSelect">{{ data.title }}</span>
75c32d5f   梁灏   rebuild Tree
18
                  <Tree-node
d44420be   Sergio Crisostomo   refactor and make...
19
                          v-if="data.expand"
da76a837   Sergio Crisostomo   fix dom rendering...
20
21
                          v-for="(item, i) in data.children"
                          :key="i"
eae3e936   Aresn   Tree support tran...
22
                          :data="item"
eae3e936   Aresn   Tree support tran...
23
24
                          :multiple="multiple"
                          :show-checkbox="showCheckbox">
75c32d5f   梁灏   rebuild Tree
25
26
27
                  </Tree-node>
              </li>
          </ul>
eae3e936   Aresn   Tree support tran...
28
      </collapse-transition>
75c32d5f   梁灏   rebuild Tree
29
30
31
  </template>
  <script>
      import Checkbox from '../checkbox/checkbox.vue';
64633e8c   梁灏   fixed #612
32
      import Icon from '../icon/icon.vue';
174836c4   梁灏   update Tree Rende...
33
      import Render from './render';
eae3e936   Aresn   Tree support tran...
34
      import CollapseTransition from '../base/collapse-transition';
75c32d5f   梁灏   rebuild Tree
35
      import Emitter from '../../mixins/emitter';
b31aab71   梁灏   Tree add async lo...
36
      import { findComponentUpward } from '../../utils/assist';
75c32d5f   梁灏   rebuild Tree
37
38
39
40
41
42
  
      const prefixCls = 'ivu-tree';
  
      export default {
          name: 'TreeNode',
          mixins: [ Emitter ],
9b24f1ab   梁灏   Tree add Render f...
43
          components: { Checkbox, Icon, CollapseTransition, Render },
75c32d5f   梁灏   rebuild Tree
44
45
46
47
48
49
50
51
52
53
54
55
56
57
          props: {
              data: {
                  type: Object,
                  default () {
                      return {};
                  }
              },
              multiple: {
                  type: Boolean,
                  default: false
              },
              showCheckbox: {
                  type: Boolean,
                  default: false
75c32d5f   梁灏   rebuild Tree
58
59
60
61
              }
          },
          data () {
              return {
d44420be   Sergio Crisostomo   refactor and make...
62
                  prefixCls: prefixCls
75c32d5f   梁灏   rebuild Tree
63
64
              };
          },
75c32d5f   梁灏   rebuild Tree
65
66
67
68
          computed: {
              classes () {
                  return [
                      `${prefixCls}-children`
3c145e6f   梁灏   update Tree
69
                  ];
75c32d5f   梁灏   rebuild Tree
70
71
72
73
74
75
76
77
78
79
80
81
82
              },
              selectedCls () {
                  return [
                      {
                          [`${prefixCls}-node-selected`]: this.data.selected
                      }
                  ];
              },
              arrowClasses () {
                  return [
                      `${prefixCls}-arrow`,
                      {
                          [`${prefixCls}-arrow-disabled`]: this.data.disabled,
b31aab71   梁灏   Tree add async lo...
83
                          [`${prefixCls}-arrow-open`]: this.data.expand
75c32d5f   梁灏   rebuild Tree
84
85
86
87
88
89
90
91
92
93
                      }
                  ];
              },
              titleClasses () {
                  return [
                      `${prefixCls}-title`,
                      {
                          [`${prefixCls}-title-selected`]: this.data.selected
                      }
                  ];
b31aab71   梁灏   Tree add async lo...
94
95
96
97
98
99
              },
              showArrow () {
                  return (this.data.children && this.data.children.length) || ('loading' in this.data && !this.data.loading);
              },
              showLoading () {
                  return 'loading' in this.data && this.data.loading;
174836c4   梁灏   update Tree Rende...
100
101
102
103
104
105
106
107
108
109
110
111
              },
              isParentRender () {
                  const Tree = findComponentUpward(this, 'Tree');
                  return Tree && Tree.render;
              },
              parentRender () {
                  const Tree = findComponentUpward(this, 'Tree');
                  if (Tree && Tree.render) {
                      return Tree.render;
                  } else {
                      return null;
                  }
75c32d5f   梁灏   rebuild Tree
112
113
114
115
              }
          },
          methods: {
              handleExpand () {
b31aab71   梁灏   Tree add async lo...
116
117
118
119
                  const item = this.data;
                  if (item.disabled) return;
  
                  // async loading
da76a837   Sergio Crisostomo   fix dom rendering...
120
                  if (item.children.length === 0) {
b31aab71   梁灏   Tree add async lo...
121
122
                      const tree = findComponentUpward(this, 'Tree');
                      if (tree && tree.loadData) {
da76a837   Sergio Crisostomo   fix dom rendering...
123
124
125
126
127
128
                          this.$set(this.data, 'loading', true);
                          tree.loadData(item, children => {
                              this.$set(this.data, 'loading', false);
                              if (children.length) {
                                  this.$set(this.data, 'children', children);
                                  this.$nextTick(() => this.handleExpand());
b31aab71   梁灏   Tree add async lo...
129
130
131
132
133
134
135
136
137
138
                              }
                          });
                          return;
                      }
                  }
  
                  if (item.children && item.children.length) {
                      this.$set(this.data, 'expand', !this.data.expand);
                      this.dispatch('Tree', 'toggle-expand', this.data);
                  }
75c32d5f   梁灏   rebuild Tree
139
140
141
              },
              handleSelect () {
                  if (this.data.disabled) return;
d44420be   Sergio Crisostomo   refactor and make...
142
                  this.dispatch('Tree', 'on-selected', this.data.nodeKey);
75c32d5f   梁灏   rebuild Tree
143
144
              },
              handleCheck () {
d44420be   Sergio Crisostomo   refactor and make...
145
146
147
148
149
150
                  if (this.data.disabled) return;
                  const changes = {
                      checked: !this.data.checked && !this.data.indeterminate,
                      nodeKey: this.data.nodeKey
                  };
                  this.dispatch('Tree', 'on-check', changes);
75c32d5f   梁灏   rebuild Tree
151
              }
75c32d5f   梁灏   rebuild Tree
152
153
          }
      };
d44420be   Sergio Crisostomo   refactor and make...
154
  </script>