Blame view

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