Blame view

src/components/table/table.vue 42.4 KB
2cb8a6d9   梁灏   commit Table comp...
1
  <template>
45e7ed7e   梁灏   update Table
2
      <div :class="wrapClasses" :style="styles">
39311a50   梁灏   update Table
3
          <div :class="classes">
486d4fda   梁灏   update Table
4
5
              <div :class="[prefixCls + '-title']" v-if="showSlotHeader" ref="title"><slot name="header"></slot></div>
              <div :class="[prefixCls + '-header']" v-if="showHeader" ref="header" @mousewheel="handleMouseWheel">
b8a43000   梁灏   update Table
6
                  <table-head
39311a50   梁灏   update Table
7
                      :prefix-cls="prefixCls"
eec3859c   huanghong   fixed table scollbar
8
                      :styleObject="tableHeaderStyle"
39311a50   梁灏   update Table
9
                      :columns="cloneColumns"
1acabf79   梁灏   Table support mul...
10
                      :column-rows="columnRows"
39311a50   梁灏   update Table
11
                      :obj-data="objData"
224a3ae5   梁灏   publish 0.9.9-rc-3
12
                      :columns-width="columnsWidth"
39311a50   梁灏   update Table
13
                      :data="rebuildData"></table-head>
b8a43000   梁灏   update Table
14
              </div>
486d4fda   梁灏   update Table
15
              <div :class="[prefixCls + '-body']" :style="bodyStyle" ref="body" @scroll="handleBodyScroll"
e5337c81   梁灏   fixed some compon...
16
                  v-show="!((!!localeNoDataText && (!data || data.length === 0)) || (!!localeNoFilteredDataText && (!rebuildData || rebuildData.length === 0)))">
b8a43000   梁灏   update Table
17
                  <table-body
486d4fda   梁灏   update Table
18
                      ref="tbody"
31b4618b   Aresn   change api name
19
                      :draggable="draggable"
39311a50   梁灏   update Table
20
                      :prefix-cls="prefixCls"
486d4fda   梁灏   update Table
21
                      :styleObject="tableStyle"
39311a50   梁灏   update Table
22
23
                      :columns="cloneColumns"
                      :data="rebuildData"
76ae3e88   梁灏   fix #5380
24
                      :row-key="rowKey"
224a3ae5   梁灏   publish 0.9.9-rc-3
25
                      :columns-width="columnsWidth"
39311a50   梁灏   update Table
26
                      :obj-data="objData"></table-body>
b8a43000   梁灏   update Table
27
              </div>
2f7660b4   Rijn   fade table body w...
28
              <div
8e171de8   huanghong   fixed #3124
29
                  :class="[prefixCls + '-tip']" :style="bodyStyle" @scroll="handleBodyScroll"
e5337c81   梁灏   fixed some compon...
30
                  v-show="((!!localeNoDataText && (!data || data.length === 0)) || (!!localeNoFilteredDataText && (!rebuildData || rebuildData.length === 0)))">
2f7660b4   Rijn   fade table body w...
31
32
33
                  <table cellspacing="0" cellpadding="0" border="0">
                      <tbody>
                          <tr>
8e171de8   huanghong   fixed #3124
34
                              <td :style="{'height':bodyStyle.height,'width':`${this.headerWidth}px`}">
e5337c81   梁灏   fixed some compon...
35
36
                                  <span v-html="localeNoDataText" v-if="!data || data.length === 0"></span>
                                  <span v-html="localeNoFilteredDataText" v-else></span>
2f7660b4   Rijn   fade table body w...
37
38
39
40
41
                              </td>
                          </tr>
                      </tbody>
                  </table>
              </div>
a81dc06c   梁灏   publish 0.9.9-rc-4
42
              <div :class="[prefixCls + '-fixed']" :style="fixedTableStyle" v-if="isLeftFixed">
548eac43   梁灏   fixed #1387 and u...
43
                  <div :class="fixedHeaderClasses" v-if="showHeader">
45e7ed7e   梁灏   update Table
44
                      <table-head
5d0499ce   梁灏   update Table
45
                          fixed="left"
39311a50   梁灏   update Table
46
                          :prefix-cls="prefixCls"
486d4fda   梁灏   update Table
47
                          :styleObject="fixedTableStyle"
39311a50   梁灏   update Table
48
                          :columns="leftFixedColumns"
1acabf79   梁灏   Table support mul...
49
                          :column-rows="columnRows"
c1e965c3   梁灏   fixed-head
50
                          :fixed-column-rows="leftFixedColumnRows"
39311a50   梁灏   update Table
51
                          :obj-data="objData"
68b308ee   梁灏   fixex #1353
52
                          :columns-width="columnsWidth"
39311a50   梁灏   update Table
53
                          :data="rebuildData"></table-head>
45e7ed7e   梁灏   update Table
54
                  </div>
b08f5e08   Aresn   Update table.vue
55
                  <div :class="[prefixCls + '-fixed-body']" :style="fixedBodyStyle" ref="fixedBody" @mousewheel="handleFixedMousewheel" @DOMMouseScroll="handleFixedMousewheel">
45e7ed7e   梁灏   update Table
56
                      <table-body
5d0499ce   梁灏   update Table
57
                          fixed="left"
31b4618b   Aresn   change api name
58
                          :draggable="draggable"
39311a50   梁灏   update Table
59
                          :prefix-cls="prefixCls"
486d4fda   梁灏   update Table
60
                          :styleObject="fixedTableStyle"
39311a50   梁灏   update Table
61
62
                          :columns="leftFixedColumns"
                          :data="rebuildData"
76ae3e88   梁灏   fix #5380
63
                          :row-key="rowKey"
224a3ae5   梁灏   publish 0.9.9-rc-3
64
                          :columns-width="columnsWidth"
39311a50   梁灏   update Table
65
                          :obj-data="objData"></table-body>
45e7ed7e   梁灏   update Table
66
                  </div>
b8a43000   梁灏   update Table
67
              </div>
a81dc06c   梁灏   publish 0.9.9-rc-4
68
              <div :class="[prefixCls + '-fixed-right']" :style="fixedRightTableStyle" v-if="isRightFixed">
548eac43   梁灏   fixed #1387 and u...
69
                  <div :class="fixedHeaderClasses" v-if="showHeader">
45e7ed7e   梁灏   update Table
70
                      <table-head
5d0499ce   梁灏   update Table
71
                          fixed="right"
39311a50   梁灏   update Table
72
                          :prefix-cls="prefixCls"
486d4fda   梁灏   update Table
73
                          :styleObject="fixedRightTableStyle"
39311a50   梁灏   update Table
74
                          :columns="rightFixedColumns"
1acabf79   梁灏   Table support mul...
75
                          :column-rows="columnRows"
c1e965c3   梁灏   fixed-head
76
                          :fixed-column-rows="rightFixedColumnRows"
39311a50   梁灏   update Table
77
                          :obj-data="objData"
486d4fda   梁灏   update Table
78
                          :columns-width="columnsWidth"
39311a50   梁灏   update Table
79
                          :data="rebuildData"></table-head>
45e7ed7e   梁灏   update Table
80
                  </div>
12739c33   梁灏   update Table
81
                  <div :class="[prefixCls + '-fixed-body']" :style="fixedBodyStyle" ref="fixedRightBody" @mousewheel="handleFixedMousewheel" @DOMMouseScroll="handleFixedMousewheel">
45e7ed7e   梁灏   update Table
82
                      <table-body
5d0499ce   梁灏   update Table
83
                          fixed="right"
31b4618b   Aresn   change api name
84
                          :draggable="draggable"
39311a50   梁灏   update Table
85
                          :prefix-cls="prefixCls"
486d4fda   梁灏   update Table
86
                          :styleObject="fixedRightTableStyle"
39311a50   梁灏   update Table
87
88
                          :columns="rightFixedColumns"
                          :data="rebuildData"
76ae3e88   梁灏   fix #5380
89
                          :row-key="rowKey"
224a3ae5   梁灏   publish 0.9.9-rc-3
90
                          :columns-width="columnsWidth"
ccfe4714   other   更新
91
                          :row-expander="rowExpander"
39311a50   梁灏   update Table
92
                          :obj-data="objData"></table-body>
45e7ed7e   梁灏   update Table
93
                  </div>
b8a43000   梁灏   update Table
94
              </div>
63014189   huanghong   fix table fixed-r...
95
              <div :class="[prefixCls + '-fixed-right-header']" :style="fixedRightHeaderStyle" v-if="isRightFixed"></div>
486d4fda   梁灏   update Table
96
              <div :class="[prefixCls + '-footer']" v-if="showSlotFooter" ref="footer"><slot name="footer"></slot></div>
abdec99d   梁灏   update Table
97
          </div>
300bd662   梁灏   fixed #704
98
99
100
          <Spin fix size="large" v-if="loading">
              <slot name="loading"></slot>
          </Spin>
2cb8a6d9   梁灏   commit Table comp...
101
102
103
      </div>
  </template>
  <script>
7f34c510   梁灏   update Table
104
105
      import tableHead from './table-head.vue';
      import tableBody from './table-body.vue';
300bd662   梁灏   fixed #704
106
      import Spin from '../spin/spin.vue';
3d6fa54b   梁灏   update Table
107
      import { oneOf, getStyle, deepCopy, getScrollBarSize } from '../../utils/assist';
f00b5343   梁灏   update Table
108
      import { on, off } from '../../utils/dom';
43509ad8   梁灏   Table support exp...
109
110
      import Csv from '../../utils/csv';
      import ExportCsv from './export-csv';
e5337c81   梁灏   fixed some compon...
111
      import Locale from '../../mixins/locale';
c5beedf8   梁灏   fixed #690
112
      import elementResizeDetectorMaker from 'element-resize-detector';
5d164b03   梁灏   fixed #3339
113
      import { getAllColumns, convertToRows, convertColumnOrder, getRandomStr } from './util';
e5337c81   梁灏   fixed some compon...
114
  
2cb8a6d9   梁灏   commit Table comp...
115
116
      const prefixCls = 'ivu-table';
  
68b308ee   梁灏   fixex #1353
117
118
119
      let rowKey = 1;
      let columnKey = 1;
  
2cb8a6d9   梁灏   commit Table comp...
120
      export default {
486d4fda   梁灏   update Table
121
          name: 'Table',
e5337c81   梁灏   fixed some compon...
122
          mixins: [ Locale ],
300bd662   梁灏   fixed #704
123
          components: { tableHead, tableBody, Spin },
8135a8c3   梁灏   init
124
125
126
127
128
          provide () {
              return {
                  tableRoot: this
              };
          },
2cb8a6d9   梁灏   commit Table comp...
129
130
131
132
          props: {
              data: {
                  type: Array,
                  default () {
b0893113   jingsam   :art: add eslint
133
                      return [];
2cb8a6d9   梁灏   commit Table comp...
134
135
136
137
138
                  }
              },
              columns: {
                  type: Array,
                  default () {
b0893113   jingsam   :art: add eslint
139
                      return [];
2cb8a6d9   梁灏   commit Table comp...
140
141
142
143
                  }
              },
              size: {
                  validator (value) {
f2a051a1   梁灏   publish 0.9.9-rc-6
144
                      return oneOf(value, ['small', 'large', 'default']);
645d482f   梁灏   Table support glo...
145
146
                  },
                  default () {
fe5ffd7f   梁灏   fixed #4196 #4165
147
                      return !this.$IVIEW || this.$IVIEW.size === '' ? 'default' : this.$IVIEW.size;
2cb8a6d9   梁灏   commit Table comp...
148
149
                  }
              },
3ef4dfb9   梁灏   update Table
150
151
152
              width: {
                  type: [Number, String]
              },
e7e8c8ff   梁灏   update Table
153
154
155
              height: {
                  type: [Number, String]
              },
72979a78   梁灏   fix #4207
156
157
158
159
              // 3.4.0
              maxHeight: {
                  type: [Number, String]
              },
2cb8a6d9   梁灏   commit Table comp...
160
161
162
163
164
165
166
167
              stripe: {
                  type: Boolean,
                  default: false
              },
              border: {
                  type: Boolean,
                  default: false
              },
2cb8a6d9   梁灏   commit Table comp...
168
169
170
171
              showHeader: {
                  type: Boolean,
                  default: true
              },
0d136465   梁灏   update Table
172
              highlightRow: {
2cb8a6d9   梁灏   commit Table comp...
173
174
                  type: Boolean,
                  default: false
e7e8c8ff   梁灏   update Table
175
176
177
178
179
180
              },
              rowClassName: {
                  type: Function,
                  default () {
                      return '';
                  }
d0e206c5   梁灏   Table add content...
181
              },
d8892603   梁灏   Table prop: conte...
182
              context: {
d0e206c5   梁灏   Table add content...
183
                  type: Object
cf7887ba   Rijn   Fixed #151
184
185
              },
              noDataText: {
e5337c81   梁灏   fixed some compon...
186
                  type: String
cf7887ba   Rijn   Fixed #151
187
188
              },
              noFilteredDataText: {
e5337c81   梁灏   fixed some compon...
189
                  type: String
2474ee59   Lawrence Lee   add hover-highlig...
190
              },
174158b1   Lawrence Lee   change disable-ho...
191
              disabledHover: {
2474ee59   Lawrence Lee   add hover-highlig...
192
                  type: Boolean
300bd662   梁灏   fixed #704
193
194
195
196
              },
              loading: {
                  type: Boolean,
                  default: false
7e8e6ef8   forfire   add dragdrop for tr
197
              },
31b4618b   Aresn   change api name
198
              draggable: {
7e8e6ef8   forfire   add dragdrop for tr
199
200
                  type: Boolean,
                  default: false
847c0d43   梁灏   fixed #4158
201
202
203
204
205
206
              },
              tooltipTheme: {
                  validator (value) {
                      return oneOf(value, ['dark', 'light']);
                  },
                  default: 'dark'
76ae3e88   梁灏   fix #5380
207
208
209
210
211
              },
              // #5380 开启后,:key 强制更新,否则使用 index
              rowKey: {
                  type: Boolean,
                  default: false
ccfe4714   other   更新
212
213
214
215
216
217
              },
              rowExpander: {
                  type: Function,
                  default: function(){
                      return 1;
                  }
2cb8a6d9   梁灏   commit Table comp...
218
219
220
              }
          },
          data () {
5d164b03   梁灏   fixed #3339
221
              const colsWithId = this.makeColumnsId(this.columns);
2cb8a6d9   梁灏   commit Table comp...
222
              return {
adaeca88   梁灏   update Table
223
                  ready: false,
744eb0af   梁灏   update Table comp...
224
                  tableWidth: 0,
224a3ae5   梁灏   publish 0.9.9-rc-3
225
                  columnsWidth: {},
2cb8a6d9   梁灏   commit Table comp...
226
                  prefixCls: prefixCls,
0d136465   梁灏   update Table
227
                  compiledUids: [],
35ad3764   梁灏   update Table
228
                  objData: this.makeObjData(),     // checkbox or highlight-row
5d0499ce   梁灏   update Table
229
                  rebuildData: [],    // for sort or filter
5d164b03   梁灏   fixed #3339
230
                  cloneColumns: this.makeColumns(colsWithId),
5d164b03   梁灏   fixed #3339
231
232
233
234
                  columnRows: this.makeColumnRows(false, colsWithId),
                  leftFixedColumnRows: this.makeColumnRows('left', colsWithId),
                  rightFixedColumnRows: this.makeColumnRows('right', colsWithId),
                  allColumns: getAllColumns(colsWithId),  // for multiple table-head, get columns that have no children
e7e8c8ff   梁灏   update Table
235
236
                  showSlotHeader: true,
                  showSlotFooter: true,
3d6fa54b   梁灏   update Table
237
                  bodyHeight: 0,
486d4fda   梁灏   update Table
238
                  scrollBarWidth: getScrollBarSize(),
d8892603   梁灏   Table prop: conte...
239
                  currentContext: this.context,
14d1de05   huanghong   fix table changin...
240
                  cloneData: deepCopy(this.data),    // when Cell has a button to delete row data, clickCurrentRow will throw an error, so clone a data
f25f1252   huanghong   Refactor
241
                  showVerticalScrollBar:false,
9fea8e7d   huanghong   fixed ivu-table-f...
242
                  showHorizontalScrollBar:false,
63014189   huanghong   fix table fixed-r...
243
244
                  headerWidth:0,
                  headerHeight:0,
b0893113   jingsam   :art: add eslint
245
              };
2cb8a6d9   梁灏   commit Table comp...
246
247
          },
          computed: {
e5337c81   梁灏   fixed some compon...
248
249
250
251
252
253
254
255
256
257
258
259
260
261
              localeNoDataText () {
                  if (this.noDataText === undefined) {
                      return this.t('i.table.noDataText');
                  } else {
                      return this.noDataText;
                  }
              },
              localeNoFilteredDataText () {
                  if (this.noFilteredDataText === undefined) {
                      return this.t('i.table.noFilteredDataText');
                  } else {
                      return this.noFilteredDataText;
                  }
              },
45e7ed7e   梁灏   update Table
262
263
264
265
              wrapClasses () {
                  return [
                      `${prefixCls}-wrapper`,
                      {
0f4ccf44   梁灏   release 0.9.9
266
267
268
                          [`${prefixCls}-hide`]: !this.ready,
                          [`${prefixCls}-with-header`]: this.showSlotHeader,
                          [`${prefixCls}-with-footer`]: this.showSlotFooter
45e7ed7e   梁灏   update Table
269
                      }
b0893113   jingsam   :art: add eslint
270
                  ];
45e7ed7e   梁灏   update Table
271
              },
2cb8a6d9   梁灏   commit Table comp...
272
273
274
275
              classes () {
                  return [
                      `${prefixCls}`,
                      {
0d136465   梁灏   update Table
276
277
                          [`${prefixCls}-${this.size}`]: !!this.size,
                          [`${prefixCls}-border`]: this.border,
e7e8c8ff   梁灏   update Table
278
                          [`${prefixCls}-stripe`]: this.stripe,
e7e8c8ff   梁灏   update Table
279
                          [`${prefixCls}-with-fixed-top`]: !!this.height
2cb8a6d9   梁灏   commit Table comp...
280
                      }
b0893113   jingsam   :art: add eslint
281
                  ];
0d136465   梁灏   update Table
282
              },
548eac43   梁灏   fixed #1387 and u...
283
284
285
286
287
288
289
290
              fixedHeaderClasses () {
                  return [
                      `${prefixCls}-fixed-header`,
                      {
                          [`${prefixCls}-fixed-header-with-empty`]: !this.rebuildData.length
                      }
                  ];
              },
e7e8c8ff   梁灏   update Table
291
292
              styles () {
                  let style = {};
3d6fa54b   梁灏   update Table
293
                  if (this.height) {
fda6dfa2   huanghong   column add prop m...
294
                      const height = parseInt(this.height);
3d6fa54b   梁灏   update Table
295
296
                      style.height = `${height}px`;
                  }
72979a78   梁灏   fix #4207
297
298
299
300
                  if (this.maxHeight) {
                      const maxHeight = parseInt(this.maxHeight);
                      style.maxHeight = `${maxHeight}px`;
                  }
b0893113   jingsam   :art: add eslint
301
                  if (this.width) style.width = `${this.width}px`;
e7e8c8ff   梁灏   update Table
302
303
                  return style;
              },
0d136465   梁灏   update Table
304
305
              tableStyle () {
                  let style = {};
3d6fa54b   梁灏   update Table
306
                  if (this.tableWidth !== 0) {
d16dce64   梁灏   fixed #193
307
308
309
310
                      let width = '';
                      if (this.bodyHeight === 0) {
                          width = this.tableWidth;
                      } else {
9d304dd6   huanghong   fixed safari scro...
311
                          width = this.tableWidth - (this.showVerticalScrollBar?this.scrollBarWidth:0);
d16dce64   梁灏   fixed #193
312
313
                      }
  //                    const width = this.bodyHeight === 0 ? this.tableWidth : this.tableWidth - this.scrollBarWidth;
3d6fa54b   梁灏   update Table
314
315
                      style.width = `${width}px`;
                  }
0d136465   梁灏   update Table
316
                  return style;
e7e8c8ff   梁灏   update Table
317
              },
eec3859c   huanghong   fixed table scollbar
318
319
320
321
322
323
324
325
326
              tableHeaderStyle () {
                  let style = {};
                  if (this.tableWidth !== 0) {
                      let width = '';
                      width = this.tableWidth;
                      style.width = `${width}px`;
                  }
                  return style;
              },
7f34c510   梁灏   update Table
327
328
              fixedTableStyle () {
                  let style = {};
5d0499ce   梁灏   update Table
329
330
                  let width = 0;
                  this.leftFixedColumns.forEach((col) => {
224a3ae5   梁灏   publish 0.9.9-rc-3
331
                      if (col.fixed && col.fixed === 'left') width += col._width;
5d0499ce   梁灏   update Table
332
333
                  });
                  style.width = `${width}px`;
7f34c510   梁灏   update Table
334
335
336
337
                  return style;
              },
              fixedRightTableStyle () {
                  let style = {};
5d0499ce   梁灏   update Table
338
339
                  let width = 0;
                  this.rightFixedColumns.forEach((col) => {
224a3ae5   梁灏   publish 0.9.9-rc-3
340
                      if (col.fixed && col.fixed === 'right') width += col._width;
5d0499ce   梁灏   update Table
341
                  });
9fea8e7d   huanghong   fixed ivu-table-f...
342
                  //width += this.scrollBarWidth;
5d0499ce   梁灏   update Table
343
                  style.width = `${width}px`;
9fea8e7d   huanghong   fixed ivu-table-f...
344
                  style.right = `${this.showVerticalScrollBar?this.scrollBarWidth:0}px`;
7f34c510   梁灏   update Table
345
346
                  return style;
              },
63014189   huanghong   fix table fixed-r...
347
348
349
350
351
352
353
354
355
356
357
              fixedRightHeaderStyle () {
                  let style = {};
                  let width = 0;
                  let height = this.headerHeight+1;
                  if(this.showVerticalScrollBar){
                      width = this.scrollBarWidth;
                  }
                  style.width = `${width}px`;
                  style.height = `${height}px`;
                  return style;
              },
e7e8c8ff   梁灏   update Table
358
359
              bodyStyle () {
                  let style = {};
3d6fa54b   梁灏   update Table
360
                  if (this.bodyHeight !== 0) {
fda6dfa2   huanghong   column add prop m...
361
                      const height = this.bodyHeight;
72979a78   梁灏   fix #4207
362
363
364
365
366
                      if (this.height) {
                          style.height = `${height}px`;
                      } else if (this.maxHeight) {
                          style.maxHeight = `${height}px`;
                      }
3d6fa54b   梁灏   update Table
367
                  }
e7e8c8ff   梁灏   update Table
368
                  return style;
b8a43000   梁灏   update Table
369
370
371
              },
              fixedBodyStyle () {
                  let style = {};
3d6fa54b   梁灏   update Table
372
                  if (this.bodyHeight !== 0) {
fda6dfa2   huanghong   column add prop m...
373
374
                      let height = this.bodyHeight - (this.showHorizontalScrollBar?this.scrollBarWidth:0);
                      style.height = this.showHorizontalScrollBar ? `${height}px` : `${height - 1}px`;
3d6fa54b   梁灏   update Table
375
                  }
b8a43000   梁灏   update Table
376
                  return style;
35ad3764   梁灏   update Table
377
378
              },
              leftFixedColumns () {
1acabf79   梁灏   Table support mul...
379
                  return convertColumnOrder(this.cloneColumns, 'left');
35ad3764   梁灏   update Table
380
381
              },
              rightFixedColumns () {
1acabf79   梁灏   Table support mul...
382
                  return convertColumnOrder(this.cloneColumns, 'right');
a81dc06c   梁灏   publish 0.9.9-rc-4
383
384
385
386
387
388
              },
              isLeftFixed () {
                  return this.columns.some(col => col.fixed && col.fixed === 'left');
              },
              isRightFixed () {
                  return this.columns.some(col => col.fixed && col.fixed === 'right');
2cb8a6d9   梁灏   commit Table comp...
389
390
391
              }
          },
          methods: {
e7e8c8ff   梁灏   update Table
392
393
394
              rowClsName (index) {
                  return this.rowClassName(this.data[index], index);
              },
a3547c1b   梁灏   update Table
395
              handleResize () {
9d304dd6   huanghong   fixed safari scro...
396
                      //let tableWidth = parseInt(getStyle(this.$el, 'width')) - 1;
9d3aada3   huanghong   npm test
397
398
                  let tableWidth = this.$el.offsetWidth - 1;
                  let columnsWidth = {};
3f5e84a1   huanghong   update table colu...
399
                  let sumMinWidth = 0;
9d3aada3   huanghong   npm test
400
401
                  let hasWidthColumns = [];
                  let noWidthColumns = [];
3f5e84a1   huanghong   update table colu...
402
403
                  let maxWidthColumns = [];
                  let noMaxWidthColumns = [];
9d3aada3   huanghong   npm test
404
405
406
407
408
409
                  this.cloneColumns.forEach((col) => {
                      if (col.width) {
                          hasWidthColumns.push(col);
                      }
                      else{
                          noWidthColumns.push(col);
3f5e84a1   huanghong   update table colu...
410
411
412
413
414
415
416
417
418
                          if (col.minWidth) {
                              sumMinWidth += col.minWidth;
                          }
                          if (col.maxWidth) {
                              maxWidthColumns.push(col);
                          }
                          else {
                              noMaxWidthColumns.push(col);
                          }
9d3aada3   huanghong   npm test
419
420
421
422
423
424
                      }
                      col._width = null;
                  });
  
  
                  let unUsableWidth = hasWidthColumns.map(cell => cell.width).reduce((a, b) => a + b, 0);
8f230d68   huanghong   fixed table
425
                  let usableWidth = tableWidth - unUsableWidth - sumMinWidth - (this.showVerticalScrollBar?this.scrollBarWidth:0) - 1;
9d3aada3   huanghong   npm test
426
427
428
429
430
                  let usableLength = noWidthColumns.length;
                  let columnWidth = 0;
                  if(usableWidth > 0 && usableLength > 0){
                      columnWidth = parseInt(usableWidth / usableLength);
                  }
14d1de05   huanghong   fix table changin...
431
  
9d304dd6   huanghong   fixed safari scro...
432
                      
9d3aada3   huanghong   npm test
433
434
                  for (let i = 0; i < this.cloneColumns.length; i++) {
                      const column = this.cloneColumns[i];
3f5e84a1   huanghong   update table colu...
435
                      let width = columnWidth + (column.minWidth?column.minWidth:0);
9d3aada3   huanghong   npm test
436
437
438
439
440
441
                      if(column.width){
                          width = column.width;
                      }
                      else{
                          if (column._width) {
                              width = column._width;
77201524   huanghong   column add prop m...
442
                          }
9d3aada3   huanghong   npm test
443
                          else {
0f983a5c   huanghong   update table colu...
444
445
446
447
448
449
                              if (column.minWidth > width){
                                  width = column.minWidth;
                              }
                              else if (column.maxWidth < width){
                                  width = column.maxWidth;
                              }
3f5e84a1   huanghong   update table colu...
450
                              
9d3aada3   huanghong   npm test
451
                              if (usableWidth>0) {
3f5e84a1   huanghong   update table colu...
452
453
454
                                  usableWidth -= width - (column.minWidth?column.minWidth:0);
                                  usableLength--;
                                  if (usableLength > 0) {
9d3aada3   huanghong   npm test
455
                                      columnWidth = parseInt(usableWidth / usableLength);
9d304dd6   huanghong   fixed safari scro...
456
                                  }
9d3aada3   huanghong   npm test
457
                                  else {
9d304dd6   huanghong   fixed safari scro...
458
                                      columnWidth = 0;
14d1de05   huanghong   fix table changin...
459
                                  }
77201524   huanghong   column add prop m...
460
                              }
9d3aada3   huanghong   npm test
461
462
463
                              else{
                                  columnWidth = 0;
                              }
9d304dd6   huanghong   fixed safari scro...
464
                          }
9d3aada3   huanghong   npm test
465
                      }
77201524   huanghong   column add prop m...
466
  
3f5e84a1   huanghong   update table colu...
467
                      column._width = width;
77201524   huanghong   column add prop m...
468
  
9d3aada3   huanghong   npm test
469
470
471
                      columnsWidth[column._index] = {
                          width: width
                      };
77201524   huanghong   column add prop m...
472
  
9d3aada3   huanghong   npm test
473
                  }
3f5e84a1   huanghong   update table colu...
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
                  if(usableWidth>0) {
                      usableLength = noMaxWidthColumns.length;
                      columnWidth = parseInt(usableWidth / usableLength);
                      for (let i = 0; i < noMaxWidthColumns.length; i++) {
                          const column = noMaxWidthColumns[i];
                          let width = column._width + columnWidth;
                          if (usableLength > 1) {
                              usableLength--;
                              usableWidth -= columnWidth;
                              columnWidth = parseInt(usableWidth / usableLength);
                          }
                          else {
                              columnWidth = 0;
                          }
  
                          column._width = width;
  
                          columnsWidth[column._index] = {
                              width: width
                          };
  
                      }
                  }
4fd4d763   huanghong   remove console log
497
                  
8f230d68   huanghong   fixed table
498
                  this.tableWidth = this.cloneColumns.map(cell => cell._width).reduce((a, b) => a + b, 0) + (this.showVerticalScrollBar?this.scrollBarWidth:0) + 1;
9d3aada3   huanghong   npm test
499
500
                  this.columnsWidth = columnsWidth;
                  this.fixedHeader();
744eb0af   梁灏   update Table comp...
501
              },
d3dfdb26   梁灏   update Table
502
              handleMouseIn (_index) {
174158b1   Lawrence Lee   change disable-ho...
503
                  if (this.disabledHover) return;
d3dfdb26   梁灏   update Table
504
505
                  if (this.objData[_index]._isHover) return;
                  this.objData[_index]._isHover = true;
abdec99d   梁灏   update Table
506
              },
d3dfdb26   梁灏   update Table
507
              handleMouseOut (_index) {
174158b1   Lawrence Lee   change disable-ho...
508
                  if (this.disabledHover) return;
d3dfdb26   梁灏   update Table
509
                  this.objData[_index]._isHover = false;
abdec99d   梁灏   update Table
510
              },
3aca3d56   梁灏   fixed #1372
511
512
              // 通用处理 highlightCurrentRow 和 clearCurrentRow
              handleCurrentRow (type, _index) {
0d136465   梁灏   update Table
513
                  let oldIndex = -1;
d3dfdb26   梁灏   update Table
514
515
516
517
                  for (let i in this.objData) {
                      if (this.objData[i]._isHighlight) {
                          oldIndex = parseInt(i);
                          this.objData[i]._isHighlight = false;
0d136465   梁灏   update Table
518
                      }
d3dfdb26   梁灏   update Table
519
                  }
3aca3d56   梁灏   fixed #1372
520
                  if (type === 'highlight') this.objData[_index]._isHighlight = true;
63f2e0f4   梁灏   fixed Table bug w...
521
                  const oldData = oldIndex < 0 ? null : JSON.parse(JSON.stringify(this.cloneData[oldIndex]));
3aca3d56   梁灏   fixed #1372
522
523
524
525
526
527
528
529
530
531
                  const newData = type === 'highlight' ? JSON.parse(JSON.stringify(this.cloneData[_index])) : null;
                  this.$emit('on-current-change', newData, oldData);
              },
              highlightCurrentRow (_index) {
                  if (!this.highlightRow || this.objData[_index]._isHighlight) return;
                  this.handleCurrentRow('highlight', _index);
              },
              clearCurrentRow () {
                  if (!this.highlightRow) return;
                  this.handleCurrentRow('clear');
0d136465   梁灏   update Table
532
              },
da55375f   Rijn   Added click and d...
533
534
              clickCurrentRow (_index) {
                  this.highlightCurrentRow (_index);
ade5dbba   梁灏   fixed #693
535
                  this.$emit('on-row-click', JSON.parse(JSON.stringify(this.cloneData[_index])), _index);
da55375f   Rijn   Added click and d...
536
537
538
              },
              dblclickCurrentRow (_index) {
                  this.highlightCurrentRow (_index);
ade5dbba   梁灏   fixed #693
539
                  this.$emit('on-row-dblclick', JSON.parse(JSON.stringify(this.cloneData[_index])), _index);
da55375f   Rijn   Added click and d...
540
              },
0d136465   梁灏   update Table
541
542
              getSelection () {
                  let selectionIndexes = [];
d3dfdb26   梁灏   update Table
543
544
545
                  for (let i in this.objData) {
                      if (this.objData[i]._isChecked) selectionIndexes.push(parseInt(i));
                  }
0d136465   梁灏   update Table
546
547
                  return JSON.parse(JSON.stringify(this.data.filter((data, index) => selectionIndexes.indexOf(index) > -1)));
              },
d3dfdb26   梁灏   update Table
548
              toggleSelect (_index) {
741b987a   梁灏   update Table
549
                  let data = {};
d3dfdb26   梁灏   update Table
550
551
552
553
  
                  for (let i in this.objData) {
                      if (parseInt(i) === _index) {
                          data = this.objData[i];
14cfcf3c   Kevin   Performance Impro...
554
                          break;
741b987a   梁灏   update Table
555
556
557
                      }
                  }
                  const status = !data._isChecked;
d3dfdb26   梁灏   update Table
558
559
  
                  this.objData[_index]._isChecked = status;
0d136465   梁灏   update Table
560
561
  
                  const selection = this.getSelection();
b0f1c61f   Rijn   add a event @on-s...
562
                  this.$emit(status ? 'on-select' : 'on-select-cancel', selection, JSON.parse(JSON.stringify(this.data[_index])));
0d136465   梁灏   update Table
563
564
                  this.$emit('on-selection-change', selection);
              },
08fd628d   Aresn   Table support expand
565
566
567
568
569
570
              toggleExpand (_index) {
                  let data = {};
  
                  for (let i in this.objData) {
                      if (parseInt(i) === _index) {
                          data = this.objData[i];
14cfcf3c   Kevin   Performance Impro...
571
                          break;
08fd628d   Aresn   Table support expand
572
573
574
575
576
                      }
                  }
                  const status = !data._isExpanded;
                  this.objData[_index]._isExpanded = status;
                  this.$emit('on-expand', JSON.parse(JSON.stringify(this.cloneData[_index])), status);
026f0729   Junan   表格展开或缩进的时候重新计算表格高...
577
                  
72979a78   梁灏   fix #4207
578
                  if(this.height || this.maxHeight){
026f0729   Junan   表格展开或缩进的时候重新计算表格高...
579
580
                      this.$nextTick(()=>this.fixedBody());
                  }
08fd628d   Aresn   Table support expand
581
              },
3d9e4f20   梁灏   update Table
582
              selectAll (status) {
cd85c675   leonine   修改_checked=true 时...
583
584
585
586
587
588
                  // this.rebuildData.forEach((data) => {
                  //     if(this.objData[data._index]._isDisabled){
                  //         this.objData[data._index]._isChecked = false;
                  //     }else{
                  //         this.objData[data._index]._isChecked = status;
                  //     }
6a248176   Sergio Crisostomo   Add counter start...
589
  
cd85c675   leonine   修改_checked=true 时...
590
591
                  // });
                  for(const data of this.rebuildData){
0dcc9482   leonine   itable 添加禁用某行选中的功能
592
                      if(this.objData[data._index]._isDisabled){
cd85c675   leonine   修改_checked=true 时...
593
                          continue;
0dcc9482   leonine   itable 添加禁用某行选中的功能
594
595
596
                      }else{
                          this.objData[data._index]._isChecked = status;
                      }
cd85c675   leonine   修改_checked=true 时...
597
                  }
52874e27   梁灏   update Table
598
                  const selection = this.getSelection();
3d9e4f20   梁灏   update Table
599
                  if (status) {
52874e27   梁灏   update Table
600
                      this.$emit('on-select-all', selection);
d483c545   梁灏   Table add on-sele...
601
602
                  } else {
                      this.$emit('on-select-all-cancel', selection);
3d9e4f20   梁灏   update Table
603
                  }
52874e27   梁灏   update Table
604
                  this.$emit('on-selection-change', selection);
e7e8c8ff   梁灏   update Table
605
              },
47638ad8   huanghong   fixed table scrol...
606
              
e7e8c8ff   梁灏   update Table
607
              fixedHeader () {
72979a78   梁灏   fix #4207
608
                  if (this.height || this.maxHeight) {
e7e8c8ff   梁灏   update Table
609
                      this.$nextTick(() => {
486d4fda   梁灏   update Table
610
611
612
                          const titleHeight = parseInt(getStyle(this.$refs.title, 'height')) || 0;
                          const headerHeight = parseInt(getStyle(this.$refs.header, 'height')) || 0;
                          const footerHeight = parseInt(getStyle(this.$refs.footer, 'height')) || 0;
72979a78   梁灏   fix #4207
613
614
615
616
617
                          if (this.height) {
                              this.bodyHeight = this.height - titleHeight - headerHeight - footerHeight;
                          } else if (this.maxHeight) {
                              this.bodyHeight = this.maxHeight - titleHeight - headerHeight - footerHeight;
                          }
6136e4dd   huanghong   fixed table horiz...
618
                          this.$nextTick(()=>this.fixedBody());
b0893113   jingsam   :art: add eslint
619
                      });
f2a051a1   梁灏   publish 0.9.9-rc-6
620
621
                  } else {
                      this.bodyHeight = 0;
6136e4dd   huanghong   fixed table horiz...
622
                      this.$nextTick(()=>this.fixedBody());
e7e8c8ff   梁灏   update Table
623
                  }
abdec99d   梁灏   update Table
624
              },
fda6dfa2   huanghong   column add prop m...
625
              fixedBody (){
f1dfa8ff   huanghong   fixed table show-...
626
627
628
                  if (this.$refs.header) {
                      this.headerWidth = this.$refs.header.children[0].offsetWidth;
                      this.headerHeight = this.$refs.header.children[0].offsetHeight;
6136e4dd   huanghong   fixed table horiz...
629
                      //this.showHorizontalScrollBar = this.headerWidth>this.$refs.header.offsetWidth;
f1dfa8ff   huanghong   fixed table show-...
630
631
                  }
  
b1262a3d   huanghong   fixed no data wid...
632
                  if (!this.$refs.tbody || !this.data || this.data.length === 0) {
fda6dfa2   huanghong   column add prop m...
633
                      this.showVerticalScrollBar = false;
fda6dfa2   huanghong   column add prop m...
634
635
636
637
638
639
                  }
                  else{
                      let bodyContentEl = this.$refs.tbody.$el;
                      let bodyEl = bodyContentEl.parentElement;
                      let bodyContentHeight = bodyContentEl.offsetHeight;
                      let bodyHeight = bodyEl.offsetHeight;
f1dfa8ff   huanghong   fixed table show-...
640
  
6136e4dd   huanghong   fixed table horiz...
641
                      this.showHorizontalScrollBar = bodyEl.offsetWidth < bodyContentEl.offsetWidth + (this.showVerticalScrollBar?this.scrollBarWidth:0);
fda6dfa2   huanghong   column add prop m...
642
643
644
645
646
647
648
649
650
651
652
653
                      this.showVerticalScrollBar = this.bodyHeight? bodyHeight - (this.showHorizontalScrollBar?this.scrollBarWidth:0) < bodyContentHeight : false;
                      
                      if(this.showVerticalScrollBar){
                          bodyEl.classList.add(this.prefixCls +'-overflowY');
                      }else{
                          bodyEl.classList.remove(this.prefixCls +'-overflowY');
                      }
                      if(this.showHorizontalScrollBar){
                          bodyEl.classList.add(this.prefixCls +'-overflowX');
                      }else{
                          bodyEl.classList.remove(this.prefixCls +'-overflowX');
                      }
f1dfa8ff   huanghong   fixed table show-...
654
                  } 
fda6dfa2   huanghong   column add prop m...
655
656
              },
  
99f80db0   梁灏   update Table
657
658
659
              hideColumnFilter () {
                  this.cloneColumns.forEach((col) => col._filterVisible = false);
              },
192e2cb8   梁灏   update Table
660
              handleBodyScroll (event) {
486d4fda   梁灏   update Table
661
662
663
                  if (this.showHeader) this.$refs.header.scrollLeft = event.target.scrollLeft;
                  if (this.isLeftFixed) this.$refs.fixedBody.scrollTop = event.target.scrollTop;
                  if (this.isRightFixed) this.$refs.fixedRightBody.scrollTop = event.target.scrollTop;
99f80db0   梁灏   update Table
664
                  this.hideColumnFilter();
192e2cb8   梁灏   update Table
665
              },
e25070eb   huanghong   fixed #2871
666
              handleFixedMousewheel(event) {
e970884b   huanghong   mousewheel suppor...
667
668
669
670
671
672
673
                  let deltaY = event.deltaY;
                  if(!deltaY && event.detail){
                      deltaY = event.detail * 40;
                  }
                  if(!deltaY && event.wheelDeltaY){
                      deltaY = -event.wheelDeltaY;
                  }
a796b2c5   huanghong   support ie Mousew...
674
675
676
                  if(!deltaY && event.wheelDelta){
                      deltaY = -event.wheelDelta;
                  }
e970884b   huanghong   mousewheel suppor...
677
                  if(!deltaY) return;
e25070eb   huanghong   fixed #2871
678
679
680
681
682
683
684
685
686
687
688
                  const body = this.$refs.body;
                  const currentScrollTop = body.scrollTop;
                  if (deltaY < 0 && currentScrollTop !== 0) {
                      event.preventDefault();
                  }
                  if (deltaY > 0 && body.scrollHeight - body.clientHeight > currentScrollTop) {
                      event.preventDefault();
                  }
                  //body.scrollTop += deltaY;
                  let step = 0;
                  let timeId = setInterval(()=>{
7f2e78d8   huanghong   Decrease table sc...
689
                      step += 5;
e25070eb   huanghong   fixed #2871
690
                      if(deltaY>0){
7f2e78d8   huanghong   Decrease table sc...
691
                          body.scrollTop += 2;
e25070eb   huanghong   fixed #2871
692
693
                      }
                      else{
7f2e78d8   huanghong   Decrease table sc...
694
                          body.scrollTop -= 2;
e25070eb   huanghong   fixed #2871
695
                      }
7f2e78d8   huanghong   Decrease table sc...
696
                      if(step >= Math.abs(deltaY)){
e25070eb   huanghong   fixed #2871
697
698
                          clearInterval(timeId);
                      }
7f2e78d8   huanghong   Decrease table sc...
699
                  }, 5);
e25070eb   huanghong   fixed #2871
700
              },
3ef4dfb9   梁灏   update Table
701
702
              handleMouseWheel (event) {
                  const deltaX = event.deltaX;
486d4fda   梁灏   update Table
703
                  const $body = this.$refs.body;
3ef4dfb9   梁灏   update Table
704
705
706
707
708
709
  
                  if (deltaX > 0) {
                      $body.scrollLeft = $body.scrollLeft + 10;
                  } else {
                      $body.scrollLeft = $body.scrollLeft - 10;
                  }
52874e27   梁灏   update Table
710
              },
9f853e3e   梁灏   update Table
711
712
713
714
              sortData (data, type, index) {
                  const key = this.cloneColumns[index].key;
                  data.sort((a, b) => {
                      if (this.cloneColumns[index].sortMethod) {
da020a63   Rijn   Changed parameter...
715
                          return this.cloneColumns[index].sortMethod(a[key], b[key], type);
9f853e3e   梁灏   update Table
716
                      } else {
89670198   梁灏   publish 0.9.9-rc-5
717
718
719
720
721
                          if (type === 'asc') {
                              return a[key] > b[key] ? 1 : -1;
                          } else if (type === 'desc') {
                              return a[key] < b[key] ? 1 : -1;
                          }
9f853e3e   梁灏   update Table
722
723
724
725
                      }
                  });
                  return data;
              },
b34e09b8   梁灏   fixed #2832
726
727
              handleSort (_index, type) {
                  const index = this.GetOriginalIndex(_index);
35ad3764   梁灏   update Table
728
729
730
                  this.cloneColumns.forEach((col) => col._sortType = 'normal');
  
                  const key = this.cloneColumns[index].key;
642299b9   梁灏   update Table
731
                  if (this.cloneColumns[index].sortable !== 'custom') {    // custom is for remote sort
9f853e3e   梁灏   update Table
732
                      if (type === 'normal') {
97edb2eb   梁灏   update Table
733
                          this.rebuildData = this.makeDataWithFilter();
9f853e3e   梁灏   update Table
734
735
                      } else {
                          this.rebuildData = this.sortData(this.rebuildData, type, index);
642299b9   梁灏   update Table
736
                      }
52874e27   梁灏   update Table
737
                  }
35ad3764   梁灏   update Table
738
739
740
                  this.cloneColumns[index]._sortType = type;
  
                  this.$emit('on-sort-change', {
1acabf79   梁灏   Table support mul...
741
                      column: JSON.parse(JSON.stringify(this.allColumns[this.cloneColumns[index]._index])),
35ad3764   梁灏   update Table
742
743
                      key: key,
                      order: type
9f853e3e   梁灏   update Table
744
                  });
741b987a   梁灏   update Table
745
              },
adaeca88   梁灏   update Table
746
747
748
              handleFilterHide (index) {    // clear checked that not filter now
                  if (!this.cloneColumns[index]._isFiltered) this.cloneColumns[index]._filterChecked = [];
              },
cb31ede0   梁灏   update Table
749
750
              filterData (data, column) {
                  return data.filter((row) => {
73ae27d8   梁灏   update Table filt...
751
                      //如果定义了远程过滤方法则忽略此方法
257bc4e6   H   filterRemote过滤时,单...
752
                      if (typeof column.filterRemote === 'function') return true;
73ae27d8   梁灏   update Table filt...
753
  
cb31ede0   梁灏   update Table
754
                      let status = !column._filterChecked.length;
adaeca88   梁灏   update Table
755
756
757
758
759
760
                      for (let i = 0; i < column._filterChecked.length; i++) {
                          status = column.filterMethod(column._filterChecked[i], row);
                          if (status) break;
                      }
                      return status;
                  });
cb31ede0   梁灏   update Table
761
762
              },
              filterOtherData (data, index) {
12bcf7bd   H   添加 remoteFilter方法...
763
                  let column = this.cloneColumns[index];
73ae27d8   梁灏   update Table filt...
764
765
                  if (typeof column.filterRemote === 'function') {
                      column.filterRemote.call(this.$parent, column._filterChecked, column.key, column);
12bcf7bd   H   添加 remoteFilter方法...
766
767
                  }
  
cb31ede0   梁灏   update Table
768
769
770
771
772
773
774
775
776
                  this.cloneColumns.forEach((col, colIndex) => {
                      if (colIndex !== index) {
                          data = this.filterData(data, col);
                      }
                  });
                  return data;
              },
              handleFilter (index) {
                  const column = this.cloneColumns[index];
9f853e3e   梁灏   update Table
777
                  let filterData = this.makeDataWithSort();
cb31ede0   梁灏   update Table
778
779
780
781
782
  
                  // filter others first, after filter this column
                  filterData = this.filterOtherData(filterData, index);
                  this.rebuildData = this.filterData(filterData, column);
  
adaeca88   梁灏   update Table
783
784
                  this.cloneColumns[index]._isFiltered = true;
                  this.cloneColumns[index]._filterVisible = false;
6c634aa6   梁灏   fixed #2078
785
                  this.$emit('on-filter-change', column);
adaeca88   梁灏   update Table
786
              },
b34e09b8   梁灏   fixed #2832
787
788
789
790
791
792
793
794
795
796
797
798
              /**
               * #2832
               * 应该区分当前表头的 column 是左固定还是右固定
               * 否则执行到 $parent 时,方法的 index 与 cloneColumns 的 index 是不对应的
               * 左固定和右固定,要区分对待
               * 所以,此方法用来获取正确的 index
               * */
              GetOriginalIndex (_index) {
                  return this.cloneColumns.findIndex(item => item._index === _index);
              },
              handleFilterSelect (_index, value) {
                  const index = this.GetOriginalIndex(_index);
45e7ed7e   梁灏   update Table
799
800
801
                  this.cloneColumns[index]._filterChecked = [value];
                  this.handleFilter(index);
              },
b34e09b8   梁灏   fixed #2832
802
803
              handleFilterReset (_index) {
                  const index = this.GetOriginalIndex(_index);
adaeca88   梁灏   update Table
804
                  this.cloneColumns[index]._isFiltered = false;
45e7ed7e   梁灏   update Table
805
806
                  this.cloneColumns[index]._filterVisible = false;
                  this.cloneColumns[index]._filterChecked = [];
cb31ede0   梁灏   update Table
807
  
9f853e3e   梁灏   update Table
808
                  let filterData = this.makeDataWithSort();
cb31ede0   梁灏   update Table
809
810
                  filterData = this.filterOtherData(filterData, index);
                  this.rebuildData = filterData;
6c634aa6   梁灏   fixed #2078
811
                  this.$emit('on-filter-change', this.cloneColumns[index]);
adaeca88   梁灏   update Table
812
              },
741b987a   梁灏   update Table
813
814
              makeData () {
                  let data = deepCopy(this.data);
68b308ee   梁灏   fixex #1353
815
816
817
818
                  data.forEach((row, index) => {
                      row._index = index;
                      row._rowKey = rowKey++;
                  });
741b987a   梁灏   update Table
819
                  return data;
d3dfdb26   梁灏   update Table
820
              },
9f853e3e   梁灏   update Table
821
822
823
824
              makeDataWithSort () {
                  let data = this.makeData();
                  let sortType = 'normal';
                  let sortIndex = -1;
2533a192   梁灏   update DatePicker
825
826
                  let isCustom = false;
  
9f853e3e   梁灏   update Table
827
828
829
830
                  for (let i = 0; i < this.cloneColumns.length; i++) {
                      if (this.cloneColumns[i]._sortType !== 'normal') {
                          sortType = this.cloneColumns[i]._sortType;
                          sortIndex = i;
2533a192   梁灏   update DatePicker
831
                          isCustom = this.cloneColumns[i].sortable === 'custom';
9f853e3e   梁灏   update Table
832
833
834
                          break;
                      }
                  }
2533a192   梁灏   update DatePicker
835
                  if (sortType !== 'normal' && !isCustom) data =  this.sortData(data, sortType, sortIndex);
9f853e3e   梁灏   update Table
836
837
                  return data;
              },
97edb2eb   梁灏   update Table
838
839
840
841
842
843
844
845
846
847
              makeDataWithFilter () {
                  let data = this.makeData();
                  this.cloneColumns.forEach(col => data = this.filterData(data, col));
                  return data;
              },
              makeDataWithSortAndFilter () {
                  let data = this.makeDataWithSort();
                  this.cloneColumns.forEach(col => data = this.filterData(data, col));
                  return data;
              },
d3dfdb26   梁灏   update Table
848
849
850
851
852
              makeObjData () {
                  let data = {};
                  this.data.forEach((row, index) => {
                      const newRow = deepCopy(row);// todo 直接替换
                      newRow._isHover = false;
08fd628d   Aresn   Table support expand
853
                      if (newRow._disabled) {
c7315098   leonine   修复两个问题:
854
                          newRow._isDisabled = newRow._disabled;
08fd628d   Aresn   Table support expand
855
                      } else {
c7315098   leonine   修复两个问题:
856
857
                          newRow._isDisabled = false;
                      }
2404849c   leonine   合并原作者更新
858
                      if (newRow._checked) {
03773f7e   梁灏   update
859
                          newRow._isChecked = newRow._checked;
2404849c   leonine   合并原作者更新
860
                      } else {
1594942f   leonine   itable 添加设置默认选中行的功能
861
862
                          newRow._isChecked = false;
                      }
08fd628d   Aresn   Table support expand
863
864
865
866
867
                      if (newRow._expanded) {
                          newRow._isExpanded = newRow._expanded;
                      } else {
                          newRow._isExpanded = false;
                      }
2404849c   leonine   合并原作者更新
868
869
870
871
872
                      if (newRow._highlight) {
                          newRow._isHighlight = newRow._highlight;
                      } else {
                          newRow._isHighlight = false;
                      }
d3dfdb26   梁灏   update Table
873
874
875
                      data[index] = newRow;
                  });
                  return data;
35ad3764   梁灏   update Table
876
              },
5d164b03   梁灏   fixed #3339
877
878
879
              // 修改列,设置一个隐藏的 id,便于后面的多级表头寻找对应的列,否则找不到
              makeColumnsId (columns) {
                  return columns.map(item => {
76965bf1   Kindy Lin   fix #3472 table c...
880
                      if ('children' in item) this.makeColumnsId(item.children);
5d164b03   梁灏   fixed #3339
881
882
883
884
885
                      item.__id = getRandomStr(6);
                      return item;
                  });
              },
              makeColumns (cols) {
1acabf79   梁灏   Table support mul...
886
                  // 在 data 时,this.allColumns 暂时为 undefined
5d164b03   梁灏   fixed #3339
887
                  let columns = deepCopy(getAllColumns(cols));
35ad3764   梁灏   update Table
888
889
890
891
892
                  let left = [];
                  let right = [];
                  let center = [];
  
                  columns.forEach((column, index) => {
35ad3764   梁灏   update Table
893
                      column._index = index;
68b308ee   梁灏   fixex #1353
894
                      column._columnKey = columnKey++;
a18ffad6   Haven   fix(table): Table...
895
                      column.width = parseInt(column.width);
224a3ae5   梁灏   publish 0.9.9-rc-3
896
                      column._width = column.width ? column.width : '';    // update in handleResize()
99f80db0   梁灏   update Table
897
898
899
900
                      column._sortType = 'normal';
                      column._filterVisible = false;
                      column._isFiltered = false;
                      column._filterChecked = [];
35ad3764   梁灏   update Table
901
  
adaeca88   梁灏   update Table
902
903
904
905
906
                      if ('filterMultiple' in column) {
                          column._filterMultiple = column.filterMultiple;
                      } else {
                          column._filterMultiple = true;
                      }
5d0499ce   梁灏   update Table
907
908
909
910
                      if ('filteredValue' in column) {
                          column._filterChecked = column.filteredValue;
                          column._isFiltered = true;
                      }
adaeca88   梁灏   update Table
911
  
835b37ff   梁灏   fixed #1403
912
913
914
915
                      if ('sortType' in column) {
                          column._sortType = column.sortType;
                      }
  
35ad3764   梁灏   update Table
916
917
918
919
920
921
922
923
924
                      if (column.fixed && column.fixed === 'left') {
                          left.push(column);
                      } else if (column.fixed && column.fixed === 'right') {
                          right.push(column);
                      } else {
                          center.push(column);
                      }
                  });
                  return left.concat(center).concat(right);
43509ad8   梁灏   Table support exp...
925
              },
1acabf79   梁灏   Table support mul...
926
              // create a multiple table-head
5d164b03   梁灏   fixed #3339
927
928
              makeColumnRows (fixedType, cols) {
                  return convertToRows(cols, fixedType);
1acabf79   梁灏   Table support mul...
929
              },
43509ad8   梁灏   Table support exp...
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
              exportCsv (params) {
                  if (params.filename) {
                      if (params.filename.indexOf('.csv') === -1) {
                          params.filename += '.csv';
                      }
                  } else {
                      params.filename = 'table.csv';
                  }
  
                  let columns = [];
                  let datas = [];
                  if (params.columns && params.data) {
                      columns = params.columns;
                      datas = params.data;
                  } else {
1acabf79   梁灏   Table support mul...
945
                      columns = this.allColumns;
43509ad8   梁灏   Table support exp...
946
947
948
949
950
951
952
                      if (!('original' in params)) params.original = true;
                      datas = params.original ? this.data : this.rebuildData;
                  }
  
                  let noHeader = false;
                  if ('noHeader' in params) noHeader = params.noHeader;
  
fb847998   Sergio Crisostomo   Improve export to...
953
954
955
                  const data = Csv(columns, datas, params, noHeader);
                  if (params.callback) params.callback(data);
                  else ExportCsv.download(params.filename, data);
7e8e6ef8   forfire   add dragdrop for tr
956
957
958
              },
              dragAndDrop(a,b) {
                  this.$emit('on-drag-drop', a,b);
2cb8a6d9   梁灏   commit Table comp...
959
960
              }
          },
486d4fda   梁灏   update Table
961
          created () {
d8892603   梁灏   Table prop: conte...
962
              if (!this.context) this.currentContext = this.$parent;
7409cb3c   梁灏   fixed #549
963
964
              this.showSlotHeader = this.$slots.header !== undefined;
              this.showSlotFooter = this.$slots.footer !== undefined;
5d0499ce   梁灏   update Table
965
              this.rebuildData = this.makeDataWithSortAndFilter();
e7e8c8ff   梁灏   update Table
966
          },
486d4fda   梁灏   update Table
967
          mounted () {
a3547c1b   梁灏   update Table
968
              this.handleResize();
adaeca88   梁灏   update Table
969
              this.$nextTick(() => this.ready = true);
c5beedf8   梁灏   fixed #690
970
  
f00b5343   梁灏   update Table
971
              on(window, 'resize', this.handleResize);
c5beedf8   梁灏   fixed #690
972
973
974
              this.observer = elementResizeDetectorMaker();
              this.observer.listenTo(this.$el, this.handleResize);
  
67c9b1c8   梁灏   fixed #591
975
              this.$on('on-visible-change', (val) => {
a6eee4e5   梁灏   update Table
976
977
                  if (val) {
                      this.handleResize();
a6eee4e5   梁灏   update Table
978
                  }
67c9b1c8   梁灏   fixed #591
979
              });
744eb0af   梁灏   update Table comp...
980
981
          },
          beforeDestroy () {
f00b5343   梁灏   update Table
982
              off(window, 'resize', this.handleResize);
c5beedf8   梁灏   fixed #690
983
              this.observer.removeListener(this.$el, this.handleResize);
2cb8a6d9   梁灏   commit Table comp...
984
985
986
987
          },
          watch: {
              data: {
                  handler () {
119eeafe   梁灏   fixed a Table bug
988
                      const oldDataLen = this.rebuildData.length;
d3dfdb26   梁灏   update Table
989
                      this.objData = this.makeObjData();
97edb2eb   梁灏   update Table
990
                      this.rebuildData = this.makeDataWithSortAndFilter();
a3547c1b   梁灏   update Table
991
                      this.handleResize();
119eeafe   梁灏   fixed a Table bug
992
993
994
                      if (!oldDataLen) {
                          this.fixedHeader();
                      }
63f2e0f4   梁灏   fixed Table bug w...
995
996
997
998
                      // here will trigger before clickCurrentRow, so use async
                      setTimeout(() => {
                          this.cloneData = deepCopy(this.data);
                      }, 0);
2cb8a6d9   梁灏   commit Table comp...
999
1000
1001
1002
1003
                  },
                  deep: true
              },
              columns: {
                  handler () {
f2a051a1   梁灏   publish 0.9.9-rc-6
1004
                      // todo 这里有性能问题,可能是左右固定计算属性影响的
5d164b03   梁灏   fixed #3339
1005
1006
                      const colsWithId = this.makeColumnsId(this.columns);
                      this.allColumns = getAllColumns(colsWithId);
948accad   梁灏   forget update func
1007
                      this.cloneColumns = this.makeColumns(colsWithId);
9d304dd6   huanghong   fixed safari scro...
1008
  
5d164b03   梁灏   fixed #3339
1009
1010
1011
                      this.columnRows = this.makeColumnRows(false, colsWithId);
                      this.leftFixedColumnRows = this.makeColumnRows('left', colsWithId);
                      this.rightFixedColumnRows = this.makeColumnRows('right', colsWithId);
97edb2eb   梁灏   update Table
1012
                      this.rebuildData = this.makeDataWithSortAndFilter();
a3547c1b   梁灏   update Table
1013
                      this.handleResize();
2cb8a6d9   梁灏   commit Table comp...
1014
1015
                  },
                  deep: true
e7e8c8ff   梁灏   update Table
1016
1017
              },
              height () {
b08bd8a8   huanghong   fixed height changed
1018
                  this.handleResize();
75803add   huanghong   fixed scoll bar
1019
              },
72979a78   梁灏   fix #4207
1020
1021
1022
              maxHeight () {
                  this.handleResize();
              },
75803add   huanghong   fixed scoll bar
1023
1024
              showHorizontalScrollBar () {
                  this.handleResize();
fda6dfa2   huanghong   column add prop m...
1025
1026
1027
              },
              showVerticalScrollBar () {
                  this.handleResize();
2cb8a6d9   梁灏   commit Table comp...
1028
1029
              }
          }
b0893113   jingsam   :art: add eslint
1030
1031
      };
  </script>