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';
1acabf79   梁灏   Table support mul...
106
      import { getAllColumns, convertToRows, convertColumnOrder } 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
181
              }
          },
          data () {
              return {
adaeca88   梁灏   update Table
182
                  ready: false,
744eb0af   梁灏   update Table comp...
183
                  tableWidth: 0,
224a3ae5   梁灏   publish 0.9.9-rc-3
184
                  columnsWidth: {},
2cb8a6d9   梁灏   commit Table comp...
185
                  prefixCls: prefixCls,
0d136465   梁灏   update Table
186
                  compiledUids: [],
35ad3764   梁灏   update Table
187
                  objData: this.makeObjData(),     // checkbox or highlight-row
5d0499ce   梁灏   update Table
188
                  rebuildData: [],    // for sort or filter
35ad3764   梁灏   update Table
189
                  cloneColumns: this.makeColumns(),
c1e965c3   梁灏   fixed-head
190
191
192
                  columnRows: this.makeColumnRows(false),
                  leftFixedColumnRows: this.makeColumnRows('left'),
                  rightFixedColumnRows: this.makeColumnRows('right'),
1acabf79   梁灏   Table support mul...
193
                  allColumns: getAllColumns(this.columns),  // for multiple table-head, get columns that have no children
e7e8c8ff   梁灏   update Table
194
195
                  showSlotHeader: true,
                  showSlotFooter: true,
3d6fa54b   梁灏   update Table
196
                  bodyHeight: 0,
d16dce64   梁灏   fixed #193
197
                  bodyRealHeight: 0,
486d4fda   梁灏   update Table
198
                  scrollBarWidth: getScrollBarSize(),
d8892603   梁灏   Table prop: conte...
199
                  currentContext: this.context,
14d1de05   huanghong   fix table changin...
200
                  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
201
                  showVerticalScrollBar:false,
9fea8e7d   huanghong   fixed ivu-table-f...
202
                  showHorizontalScrollBar:false,
63014189   huanghong   fix table fixed-r...
203
204
                  headerWidth:0,
                  headerHeight:0,
b0893113   jingsam   :art: add eslint
205
              };
2cb8a6d9   梁灏   commit Table comp...
206
207
          },
          computed: {
e5337c81   梁灏   fixed some compon...
208
209
210
211
212
213
214
215
216
217
218
219
220
221
              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
222
223
224
225
              wrapClasses () {
                  return [
                      `${prefixCls}-wrapper`,
                      {
0f4ccf44   梁灏   release 0.9.9
226
227
228
                          [`${prefixCls}-hide`]: !this.ready,
                          [`${prefixCls}-with-header`]: this.showSlotHeader,
                          [`${prefixCls}-with-footer`]: this.showSlotFooter
45e7ed7e   梁灏   update Table
229
                      }
b0893113   jingsam   :art: add eslint
230
                  ];
45e7ed7e   梁灏   update Table
231
              },
2cb8a6d9   梁灏   commit Table comp...
232
233
234
235
              classes () {
                  return [
                      `${prefixCls}`,
                      {
0d136465   梁灏   update Table
236
237
                          [`${prefixCls}-${this.size}`]: !!this.size,
                          [`${prefixCls}-border`]: this.border,
e7e8c8ff   梁灏   update Table
238
                          [`${prefixCls}-stripe`]: this.stripe,
e7e8c8ff   梁灏   update Table
239
                          [`${prefixCls}-with-fixed-top`]: !!this.height
2cb8a6d9   梁灏   commit Table comp...
240
                      }
b0893113   jingsam   :art: add eslint
241
                  ];
0d136465   梁灏   update Table
242
              },
548eac43   梁灏   fixed #1387 and u...
243
244
245
246
247
248
249
250
              fixedHeaderClasses () {
                  return [
                      `${prefixCls}-fixed-header`,
                      {
                          [`${prefixCls}-fixed-header-with-empty`]: !this.rebuildData.length
                      }
                  ];
              },
e7e8c8ff   梁灏   update Table
251
252
              styles () {
                  let style = {};
3d6fa54b   梁灏   update Table
253
254
255
256
                  if (this.height) {
                      const height = (this.isLeftFixed || this.isRightFixed) ? parseInt(this.height) + this.scrollBarWidth : parseInt(this.height);
                      style.height = `${height}px`;
                  }
b0893113   jingsam   :art: add eslint
257
                  if (this.width) style.width = `${this.width}px`;
e7e8c8ff   梁灏   update Table
258
259
                  return style;
              },
0d136465   梁灏   update Table
260
261
              tableStyle () {
                  let style = {};
3d6fa54b   梁灏   update Table
262
                  if (this.tableWidth !== 0) {
d16dce64   梁灏   fixed #193
263
264
265
266
267
268
269
                      let width = '';
                      if (this.bodyHeight === 0) {
                          width = this.tableWidth;
                      } else {
                          if (this.bodyHeight > this.bodyRealHeight) {
                              width = this.tableWidth;
                          } else {
8e171de8   huanghong   fixed #3124
270
                              width = this.tableWidth - (this.showVerticalScrollBar?this.scrollBarWidth:0);
d16dce64   梁灏   fixed #193
271
272
273
                          }
                      }
  //                    const width = this.bodyHeight === 0 ? this.tableWidth : this.tableWidth - this.scrollBarWidth;
3d6fa54b   梁灏   update Table
274
275
                      style.width = `${width}px`;
                  }
0d136465   梁灏   update Table
276
                  return style;
e7e8c8ff   梁灏   update Table
277
              },
eec3859c   huanghong   fixed table scollbar
278
279
280
281
282
283
284
285
286
              tableHeaderStyle () {
                  let style = {};
                  if (this.tableWidth !== 0) {
                      let width = '';
                      width = this.tableWidth;
                      style.width = `${width}px`;
                  }
                  return style;
              },
7f34c510   梁灏   update Table
287
288
              fixedTableStyle () {
                  let style = {};
5d0499ce   梁灏   update Table
289
290
                  let width = 0;
                  this.leftFixedColumns.forEach((col) => {
224a3ae5   梁灏   publish 0.9.9-rc-3
291
                      if (col.fixed && col.fixed === 'left') width += col._width;
5d0499ce   梁灏   update Table
292
293
                  });
                  style.width = `${width}px`;
7f34c510   梁灏   update Table
294
295
296
297
                  return style;
              },
              fixedRightTableStyle () {
                  let style = {};
5d0499ce   梁灏   update Table
298
299
                  let width = 0;
                  this.rightFixedColumns.forEach((col) => {
224a3ae5   梁灏   publish 0.9.9-rc-3
300
                      if (col.fixed && col.fixed === 'right') width += col._width;
5d0499ce   梁灏   update Table
301
                  });
9fea8e7d   huanghong   fixed ivu-table-f...
302
                  //width += this.scrollBarWidth;
5d0499ce   梁灏   update Table
303
                  style.width = `${width}px`;
9fea8e7d   huanghong   fixed ivu-table-f...
304
                  style.right = `${this.showVerticalScrollBar?this.scrollBarWidth:0}px`;
7f34c510   梁灏   update Table
305
306
                  return style;
              },
63014189   huanghong   fix table fixed-r...
307
308
309
310
311
312
313
314
315
316
317
              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
318
319
              bodyStyle () {
                  let style = {};
3d6fa54b   梁灏   update Table
320
321
322
323
324
                  if (this.bodyHeight !== 0) {
                      // add a height to resolve scroll bug when browser has a scrollBar in fixed type and height prop
                      const height = (this.isLeftFixed || this.isRightFixed) ? this.bodyHeight + this.scrollBarWidth : this.bodyHeight;
                      style.height = `${height}px`;
                  }
e7e8c8ff   梁灏   update Table
325
                  return style;
b8a43000   梁灏   update Table
326
327
328
              },
              fixedBodyStyle () {
                  let style = {};
3d6fa54b   梁灏   update Table
329
                  if (this.bodyHeight !== 0) {
9fea8e7d   huanghong   fixed ivu-table-f...
330
                      let height = this.bodyHeight + (!this.showHorizontalScrollBar?this.scrollBarWidth:0) - 1;
d16dce64   梁灏   fixed #193
331
  
b142865e   梁灏   fixed #2102
332
333
                      // #2102 里,如果 Table 没有设置 width,而是集成父级的 width,固定列也应该不包含滚动条高度,所以这里直接计算表格宽度
                      const tableWidth = parseInt(getStyle(this.$el, 'width')) - 1;
9fea8e7d   huanghong   fixed ivu-table-f...
334
                      if ((this.width && this.width < this.tableWidth) || tableWidth < this.tableWidth+(this.showVerticalScrollBar?this.scrollBarWidth:0)){
d16dce64   梁灏   fixed #193
335
336
337
338
                          height = this.bodyHeight;
                      }
  //                    style.height = this.scrollBarWidth > 0 ? `${this.bodyHeight}px` : `${this.bodyHeight - 1}px`;
                      style.height = this.scrollBarWidth > 0 ? `${height}px` : `${height - 1}px`;
3d6fa54b   梁灏   update Table
339
                  }
b8a43000   梁灏   update Table
340
                  return style;
35ad3764   梁灏   update Table
341
342
              },
              leftFixedColumns () {
1acabf79   梁灏   Table support mul...
343
                  return convertColumnOrder(this.cloneColumns, 'left');
35ad3764   梁灏   update Table
344
345
              },
              rightFixedColumns () {
1acabf79   梁灏   Table support mul...
346
                  return convertColumnOrder(this.cloneColumns, 'right');
a81dc06c   梁灏   publish 0.9.9-rc-4
347
348
349
350
351
352
              },
              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...
353
354
355
              }
          },
          methods: {
e7e8c8ff   梁灏   update Table
356
357
358
              rowClsName (index) {
                  return this.rowClassName(this.data[index], index);
              },
a3547c1b   梁灏   update Table
359
              handleResize () {
2cb8a6d9   梁灏   commit Table comp...
360
                  this.$nextTick(() => {
1acabf79   梁灏   Table support mul...
361
                      const allWidth = !this.allColumns.some(cell => !cell.width);    // each column set a width
a3547c1b   梁灏   update Table
362
                      if (allWidth) {
1acabf79   梁灏   Table support mul...
363
                          this.tableWidth = this.allColumns.map(cell => cell.width).reduce((a, b) => a + b, 0);
a3547c1b   梁灏   update Table
364
365
                      } else {
                          this.tableWidth = parseInt(getStyle(this.$el, 'width')) - 1;
2cb8a6d9   梁灏   commit Table comp...
366
                      }
224a3ae5   梁灏   publish 0.9.9-rc-3
367
                      this.columnsWidth = {};
9fea8e7d   huanghong   fixed ivu-table-f...
368
369
                      this.$nextTick(()=>{
                          this.headerWidth = this.$refs.header.childNodes[0].offsetWidth;
63014189   huanghong   fix table fixed-r...
370
                          this.headerHeight = this.$refs.header.childNodes[0].offsetHeight;
9fea8e7d   huanghong   fixed ivu-table-f...
371
372
373
374
375
                          if (!this.$refs.tbody) {
                              this.showVerticalScrollBar = false;
                              return;
                          }
                      });
a3547c1b   梁灏   update Table
376
                      this.$nextTick(() => {
224a3ae5   梁灏   publish 0.9.9-rc-3
377
                          let columnsWidth = {};
192e2cb8   梁灏   update Table
378
  
77201524   huanghong   column add prop m...
379
380
381
382
383
384
385
386
387
388
389
390
                          let hasWidthColumns = [];
                          let noWidthColumns = [];
                          let minWidthColumns = [];
                          let maxWidthColumns = [];
                          this.cloneColumns.forEach((col) => {
                              if (col.width) {
                                  hasWidthColumns.push(col);
                              }
                              else{
                                  noWidthColumns.push(col);
                                  if(col.minWidth){
                                      minWidthColumns.push(col);
d0e206c5   梁灏   Table add content...
391
                                  }
77201524   huanghong   column add prop m...
392
393
394
395
396
                                  if(col.maxWidth){
                                      maxWidthColumns.push(col);
                                  }
                              }
                          });
224a3ae5   梁灏   publish 0.9.9-rc-3
397
  
77201524   huanghong   column add prop m...
398
399
                          minWidthColumns.sort((a,b)=>a.minWidth > b.minWidth);
                          maxWidthColumns.sort((a,b)=>a.maxWidth < b.maxWidth);
224a3ae5   梁灏   publish 0.9.9-rc-3
400
  
77201524   huanghong   column add prop m...
401
402
403
404
405
406
407
408
409
410
                          let unUsableWidth = hasWidthColumns.map(cell => cell.width).reduce((a, b) => a + b, 0);
                          let usableWidth = this.tableWidth - unUsableWidth - (this.showVerticalScrollBar?this.scrollBarWidth:0);
                          let usableLength = noWidthColumns.length;
                          let columnWidth = parseInt(usableWidth / usableLength);
  
                          for (let i = 0; i < maxWidthColumns.length; i++) {
                              if(columnWidth > maxWidthColumns[i].maxWidth){
                                  usableWidth -= maxWidthColumns[i].maxWidth;
                                  usableLength--;
                                  columnWidth = parseInt(usableWidth / usableLength);
2cb8a6d9   梁灏   commit Table comp...
411
                              }
77201524   huanghong   column add prop m...
412
413
414
415
416
417
418
419
420
                          }
  
                          for (let i = 0; i < minWidthColumns.length; i++) {
                              if(columnWidth < minWidthColumns[i].minWidth){
                                  usableWidth -= minWidthColumns[i].minWidth;
                                  usableLength--;
                                  columnWidth = parseInt(usableWidth / usableLength);
                              }
                          }
14d1de05   huanghong   fix table changin...
421
  
77201524   huanghong   column add prop m...
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
                          if (usableLength===0){
                              columnWidth = 0;
                          }
                          
                          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.minWidth > width){
                                      width = column.minWidth;
                                  }
                                  else if (column.maxWidth < width){
                                      width = column.maxWidth;
                                  }
                                  else{
                                      if (usableLength > 1) {
                                          usableLength--;
                                          usableWidth -= width;
                                          columnWidth = parseInt(usableWidth / usableLength);
                                      }
14d1de05   huanghong   fix table changin...
445
                                  }
77201524   huanghong   column add prop m...
446
447
448
449
450
451
452
453
454
                              }
  
  
                              this.cloneColumns[i]._width = width;
  
                              columnsWidth[column._index] = {
                                  width: width
                              };
  
192e2cb8   梁灏   update Table
455
                          }
77201524   huanghong   column add prop m...
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
                          this.tableWidth = this.cloneColumns.map(cell => cell._width).reduce((a, b) => a + b, 0);
                          this.columnsWidth = columnsWidth;
                          this.$nextTick(()=>{
                              this.fixedHeader();
                              if (this.$refs.tbody) {
                                  let bodyContentEl = this.$refs.tbody.$el;
                                  let bodyEl = bodyContentEl.parentElement;
                                  let bodyContentHeight = bodyContentEl.offsetHeight;
                                  let bodyContentWidth = bodyContentEl.offsetWidth;
                                  let bodyWidth = bodyEl.offsetWidth;
                                  let bodyHeight = bodyEl.offsetHeight;
                                  let scrollBarWidth = 0;
                                  if (bodyWidth < bodyContentWidth + (bodyHeight<bodyContentHeight?this.scrollBarWidth : 0)) {
                                      scrollBarWidth = this.scrollBarWidth;
                                  }
                                  
                                  this.showVerticalScrollBar = this.bodyHeight? bodyHeight - scrollBarWidth < bodyContentHeight : false;
                                  this.showHorizontalScrollBar = bodyWidth  < bodyContentWidth + (this.showVerticalScrollBar?this.scrollBarWidth:0);
                                  
                                  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');
                                  }
                                  this.tableWidth = this.cloneColumns.map(cell => cell._width).reduce((a, b) => a + b, 0) + (this.showVerticalScrollBar?this.scrollBarWidth:0);
                              }
                          });
744eb0af   梁灏   update Table comp...
488
                      });
d16dce64   梁灏   fixed #193
489
490
                      // get table real height,for fixed when set height prop,but height < table's height,show scrollBarWidth
                      this.bodyRealHeight = parseInt(getStyle(this.$refs.tbody.$el, 'height'));
744eb0af   梁灏   update Table comp...
491
492
                  });
              },
d3dfdb26   梁灏   update Table
493
              handleMouseIn (_index) {
174158b1   Lawrence Lee   change disable-ho...
494
                  if (this.disabledHover) return;
d3dfdb26   梁灏   update Table
495
496
                  if (this.objData[_index]._isHover) return;
                  this.objData[_index]._isHover = true;
abdec99d   梁灏   update Table
497
              },
d3dfdb26   梁灏   update Table
498
              handleMouseOut (_index) {
174158b1   Lawrence Lee   change disable-ho...
499
                  if (this.disabledHover) return;
d3dfdb26   梁灏   update Table
500
                  this.objData[_index]._isHover = false;
abdec99d   梁灏   update Table
501
              },
3aca3d56   梁灏   fixed #1372
502
503
              // 通用处理 highlightCurrentRow 和 clearCurrentRow
              handleCurrentRow (type, _index) {
0d136465   梁灏   update Table
504
                  let oldIndex = -1;
d3dfdb26   梁灏   update Table
505
506
507
508
                  for (let i in this.objData) {
                      if (this.objData[i]._isHighlight) {
                          oldIndex = parseInt(i);
                          this.objData[i]._isHighlight = false;
0d136465   梁灏   update Table
509
                      }
d3dfdb26   梁灏   update Table
510
                  }
3aca3d56   梁灏   fixed #1372
511
                  if (type === 'highlight') this.objData[_index]._isHighlight = true;
63f2e0f4   梁灏   fixed Table bug w...
512
                  const oldData = oldIndex < 0 ? null : JSON.parse(JSON.stringify(this.cloneData[oldIndex]));
3aca3d56   梁灏   fixed #1372
513
514
515
516
517
518
519
520
521
522
                  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
523
              },
da55375f   Rijn   Added click and d...
524
525
              clickCurrentRow (_index) {
                  this.highlightCurrentRow (_index);
ade5dbba   梁灏   fixed #693
526
                  this.$emit('on-row-click', JSON.parse(JSON.stringify(this.cloneData[_index])), _index);
da55375f   Rijn   Added click and d...
527
528
529
              },
              dblclickCurrentRow (_index) {
                  this.highlightCurrentRow (_index);
ade5dbba   梁灏   fixed #693
530
                  this.$emit('on-row-dblclick', JSON.parse(JSON.stringify(this.cloneData[_index])), _index);
da55375f   Rijn   Added click and d...
531
              },
0d136465   梁灏   update Table
532
533
              getSelection () {
                  let selectionIndexes = [];
d3dfdb26   梁灏   update Table
534
535
536
                  for (let i in this.objData) {
                      if (this.objData[i]._isChecked) selectionIndexes.push(parseInt(i));
                  }
0d136465   梁灏   update Table
537
538
                  return JSON.parse(JSON.stringify(this.data.filter((data, index) => selectionIndexes.indexOf(index) > -1)));
              },
d3dfdb26   梁灏   update Table
539
              toggleSelect (_index) {
741b987a   梁灏   update Table
540
                  let data = {};
d3dfdb26   梁灏   update Table
541
542
543
544
  
                  for (let i in this.objData) {
                      if (parseInt(i) === _index) {
                          data = this.objData[i];
14cfcf3c   Kevin   Performance Impro...
545
                          break;
741b987a   梁灏   update Table
546
547
548
                      }
                  }
                  const status = !data._isChecked;
d3dfdb26   梁灏   update Table
549
550
  
                  this.objData[_index]._isChecked = status;
0d136465   梁灏   update Table
551
552
  
                  const selection = this.getSelection();
b0f1c61f   Rijn   add a event @on-s...
553
                  this.$emit(status ? 'on-select' : 'on-select-cancel', selection, JSON.parse(JSON.stringify(this.data[_index])));
0d136465   梁灏   update Table
554
555
                  this.$emit('on-selection-change', selection);
              },
08fd628d   Aresn   Table support expand
556
557
558
559
560
561
              toggleExpand (_index) {
                  let data = {};
  
                  for (let i in this.objData) {
                      if (parseInt(i) === _index) {
                          data = this.objData[i];
14cfcf3c   Kevin   Performance Impro...
562
                          break;
08fd628d   Aresn   Table support expand
563
564
565
566
567
568
                      }
                  }
                  const status = !data._isExpanded;
                  this.objData[_index]._isExpanded = status;
                  this.$emit('on-expand', JSON.parse(JSON.stringify(this.cloneData[_index])), status);
              },
3d9e4f20   梁灏   update Table
569
              selectAll (status) {
cd85c675   leonine   修改_checked=true 时...
570
571
572
573
574
575
                  // 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...
576
  
cd85c675   leonine   修改_checked=true 时...
577
578
                  // });
                  for(const data of this.rebuildData){
0dcc9482   leonine   itable 添加禁用某行选中的功能
579
                      if(this.objData[data._index]._isDisabled){
cd85c675   leonine   修改_checked=true 时...
580
                          continue;
0dcc9482   leonine   itable 添加禁用某行选中的功能
581
582
583
                      }else{
                          this.objData[data._index]._isChecked = status;
                      }
cd85c675   leonine   修改_checked=true 时...
584
                  }
52874e27   梁灏   update Table
585
                  const selection = this.getSelection();
3d9e4f20   梁灏   update Table
586
                  if (status) {
52874e27   梁灏   update Table
587
                      this.$emit('on-select-all', selection);
3d9e4f20   梁灏   update Table
588
                  }
52874e27   梁灏   update Table
589
                  this.$emit('on-selection-change', selection);
e7e8c8ff   梁灏   update Table
590
              },
47638ad8   huanghong   fixed table scrol...
591
              
e7e8c8ff   梁灏   update Table
592
              fixedHeader () {
b0893113   jingsam   :art: add eslint
593
                  if (this.height) {
e7e8c8ff   梁灏   update Table
594
                      this.$nextTick(() => {
486d4fda   梁灏   update Table
595
596
597
                          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
598
                          this.bodyHeight = this.height - titleHeight - headerHeight - footerHeight;
b0893113   jingsam   :art: add eslint
599
                      });
f2a051a1   梁灏   publish 0.9.9-rc-6
600
601
                  } else {
                      this.bodyHeight = 0;
e7e8c8ff   梁灏   update Table
602
                  }
abdec99d   梁灏   update Table
603
              },
99f80db0   梁灏   update Table
604
605
606
              hideColumnFilter () {
                  this.cloneColumns.forEach((col) => col._filterVisible = false);
              },
192e2cb8   梁灏   update Table
607
              handleBodyScroll (event) {
486d4fda   梁灏   update Table
608
609
610
                  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
611
                  this.hideColumnFilter();
192e2cb8   梁灏   update Table
612
              },
e25070eb   huanghong   fixed #2871
613
              handleFixedMousewheel(event) {
e970884b   huanghong   mousewheel suppor...
614
615
616
617
618
619
620
                  let deltaY = event.deltaY;
                  if(!deltaY && event.detail){
                      deltaY = event.detail * 40;
                  }
                  if(!deltaY && event.wheelDeltaY){
                      deltaY = -event.wheelDeltaY;
                  }
a796b2c5   huanghong   support ie Mousew...
621
622
623
                  if(!deltaY && event.wheelDelta){
                      deltaY = -event.wheelDelta;
                  }
e970884b   huanghong   mousewheel suppor...
624
                  if(!deltaY) return;
e25070eb   huanghong   fixed #2871
625
626
627
628
629
630
631
632
633
634
635
                  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...
636
                      step += 5;
e25070eb   huanghong   fixed #2871
637
                      if(deltaY>0){
7f2e78d8   huanghong   Decrease table sc...
638
                          body.scrollTop += 2;
e25070eb   huanghong   fixed #2871
639
640
                      }
                      else{
7f2e78d8   huanghong   Decrease table sc...
641
                          body.scrollTop -= 2;
e25070eb   huanghong   fixed #2871
642
                      }
7f2e78d8   huanghong   Decrease table sc...
643
                      if(step >= Math.abs(deltaY)){
e25070eb   huanghong   fixed #2871
644
645
                          clearInterval(timeId);
                      }
7f2e78d8   huanghong   Decrease table sc...
646
                  }, 5);
e25070eb   huanghong   fixed #2871
647
              },
3ef4dfb9   梁灏   update Table
648
649
              handleMouseWheel (event) {
                  const deltaX = event.deltaX;
486d4fda   梁灏   update Table
650
                  const $body = this.$refs.body;
3ef4dfb9   梁灏   update Table
651
652
653
654
655
656
  
                  if (deltaX > 0) {
                      $body.scrollLeft = $body.scrollLeft + 10;
                  } else {
                      $body.scrollLeft = $body.scrollLeft - 10;
                  }
52874e27   梁灏   update Table
657
              },
9f853e3e   梁灏   update Table
658
659
660
661
              sortData (data, type, index) {
                  const key = this.cloneColumns[index].key;
                  data.sort((a, b) => {
                      if (this.cloneColumns[index].sortMethod) {
da020a63   Rijn   Changed parameter...
662
                          return this.cloneColumns[index].sortMethod(a[key], b[key], type);
9f853e3e   梁灏   update Table
663
                      } else {
89670198   梁灏   publish 0.9.9-rc-5
664
665
666
667
668
                          if (type === 'asc') {
                              return a[key] > b[key] ? 1 : -1;
                          } else if (type === 'desc') {
                              return a[key] < b[key] ? 1 : -1;
                          }
9f853e3e   梁灏   update Table
669
670
671
672
                      }
                  });
                  return data;
              },
b34e09b8   梁灏   fixed #2832
673
674
              handleSort (_index, type) {
                  const index = this.GetOriginalIndex(_index);
35ad3764   梁灏   update Table
675
676
677
                  this.cloneColumns.forEach((col) => col._sortType = 'normal');
  
                  const key = this.cloneColumns[index].key;
642299b9   梁灏   update Table
678
                  if (this.cloneColumns[index].sortable !== 'custom') {    // custom is for remote sort
9f853e3e   梁灏   update Table
679
                      if (type === 'normal') {
97edb2eb   梁灏   update Table
680
                          this.rebuildData = this.makeDataWithFilter();
9f853e3e   梁灏   update Table
681
682
                      } else {
                          this.rebuildData = this.sortData(this.rebuildData, type, index);
642299b9   梁灏   update Table
683
                      }
52874e27   梁灏   update Table
684
                  }
35ad3764   梁灏   update Table
685
686
687
                  this.cloneColumns[index]._sortType = type;
  
                  this.$emit('on-sort-change', {
1acabf79   梁灏   Table support mul...
688
                      column: JSON.parse(JSON.stringify(this.allColumns[this.cloneColumns[index]._index])),
35ad3764   梁灏   update Table
689
690
                      key: key,
                      order: type
9f853e3e   梁灏   update Table
691
                  });
741b987a   梁灏   update Table
692
              },
adaeca88   梁灏   update Table
693
694
695
              handleFilterHide (index) {    // clear checked that not filter now
                  if (!this.cloneColumns[index]._isFiltered) this.cloneColumns[index]._filterChecked = [];
              },
cb31ede0   梁灏   update Table
696
697
              filterData (data, column) {
                  return data.filter((row) => {
73ae27d8   梁灏   update Table filt...
698
                      //如果定义了远程过滤方法则忽略此方法
257bc4e6   H   filterRemote过滤时,单...
699
                      if (typeof column.filterRemote === 'function') return true;
73ae27d8   梁灏   update Table filt...
700
  
cb31ede0   梁灏   update Table
701
                      let status = !column._filterChecked.length;
adaeca88   梁灏   update Table
702
703
704
705
706
707
                      for (let i = 0; i < column._filterChecked.length; i++) {
                          status = column.filterMethod(column._filterChecked[i], row);
                          if (status) break;
                      }
                      return status;
                  });
cb31ede0   梁灏   update Table
708
709
              },
              filterOtherData (data, index) {
12bcf7bd   H   添加 remoteFilter方法...
710
                  let column = this.cloneColumns[index];
73ae27d8   梁灏   update Table filt...
711
712
                  if (typeof column.filterRemote === 'function') {
                      column.filterRemote.call(this.$parent, column._filterChecked, column.key, column);
12bcf7bd   H   添加 remoteFilter方法...
713
714
                  }
  
cb31ede0   梁灏   update Table
715
716
717
718
719
720
721
722
723
                  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
724
                  let filterData = this.makeDataWithSort();
cb31ede0   梁灏   update Table
725
726
727
728
729
  
                  // filter others first, after filter this column
                  filterData = this.filterOtherData(filterData, index);
                  this.rebuildData = this.filterData(filterData, column);
  
adaeca88   梁灏   update Table
730
731
                  this.cloneColumns[index]._isFiltered = true;
                  this.cloneColumns[index]._filterVisible = false;
6c634aa6   梁灏   fixed #2078
732
                  this.$emit('on-filter-change', column);
adaeca88   梁灏   update Table
733
              },
b34e09b8   梁灏   fixed #2832
734
735
736
737
738
739
740
741
742
743
744
745
              /**
               * #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
746
747
748
                  this.cloneColumns[index]._filterChecked = [value];
                  this.handleFilter(index);
              },
b34e09b8   梁灏   fixed #2832
749
750
              handleFilterReset (_index) {
                  const index = this.GetOriginalIndex(_index);
adaeca88   梁灏   update Table
751
                  this.cloneColumns[index]._isFiltered = false;
45e7ed7e   梁灏   update Table
752
753
                  this.cloneColumns[index]._filterVisible = false;
                  this.cloneColumns[index]._filterChecked = [];
cb31ede0   梁灏   update Table
754
  
9f853e3e   梁灏   update Table
755
                  let filterData = this.makeDataWithSort();
cb31ede0   梁灏   update Table
756
757
                  filterData = this.filterOtherData(filterData, index);
                  this.rebuildData = filterData;
6c634aa6   梁灏   fixed #2078
758
                  this.$emit('on-filter-change', this.cloneColumns[index]);
adaeca88   梁灏   update Table
759
              },
741b987a   梁灏   update Table
760
761
              makeData () {
                  let data = deepCopy(this.data);
68b308ee   梁灏   fixex #1353
762
763
764
765
                  data.forEach((row, index) => {
                      row._index = index;
                      row._rowKey = rowKey++;
                  });
741b987a   梁灏   update Table
766
                  return data;
d3dfdb26   梁灏   update Table
767
              },
9f853e3e   梁灏   update Table
768
769
770
771
              makeDataWithSort () {
                  let data = this.makeData();
                  let sortType = 'normal';
                  let sortIndex = -1;
2533a192   梁灏   update DatePicker
772
773
                  let isCustom = false;
  
9f853e3e   梁灏   update Table
774
775
776
777
                  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
778
                          isCustom = this.cloneColumns[i].sortable === 'custom';
9f853e3e   梁灏   update Table
779
780
781
                          break;
                      }
                  }
2533a192   梁灏   update DatePicker
782
                  if (sortType !== 'normal' && !isCustom) data =  this.sortData(data, sortType, sortIndex);
9f853e3e   梁灏   update Table
783
784
                  return data;
              },
97edb2eb   梁灏   update Table
785
786
787
788
789
790
791
792
793
794
              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
795
796
797
798
799
              makeObjData () {
                  let data = {};
                  this.data.forEach((row, index) => {
                      const newRow = deepCopy(row);// todo 直接替换
                      newRow._isHover = false;
08fd628d   Aresn   Table support expand
800
                      if (newRow._disabled) {
c7315098   leonine   修复两个问题:
801
                          newRow._isDisabled = newRow._disabled;
08fd628d   Aresn   Table support expand
802
                      } else {
c7315098   leonine   修复两个问题:
803
804
                          newRow._isDisabled = false;
                      }
2404849c   leonine   合并原作者更新
805
                      if (newRow._checked) {
03773f7e   梁灏   update
806
                          newRow._isChecked = newRow._checked;
2404849c   leonine   合并原作者更新
807
                      } else {
1594942f   leonine   itable 添加设置默认选中行的功能
808
809
                          newRow._isChecked = false;
                      }
08fd628d   Aresn   Table support expand
810
811
812
813
814
                      if (newRow._expanded) {
                          newRow._isExpanded = newRow._expanded;
                      } else {
                          newRow._isExpanded = false;
                      }
2404849c   leonine   合并原作者更新
815
816
817
818
819
                      if (newRow._highlight) {
                          newRow._isHighlight = newRow._highlight;
                      } else {
                          newRow._isHighlight = false;
                      }
d3dfdb26   梁灏   update Table
820
821
822
                      data[index] = newRow;
                  });
                  return data;
35ad3764   梁灏   update Table
823
824
              },
              makeColumns () {
1acabf79   梁灏   Table support mul...
825
826
                  // 在 data 时,this.allColumns 暂时为 undefined
                  let columns = deepCopy(getAllColumns(this.columns));
35ad3764   梁灏   update Table
827
828
829
830
831
                  let left = [];
                  let right = [];
                  let center = [];
  
                  columns.forEach((column, index) => {
35ad3764   梁灏   update Table
832
                      column._index = index;
68b308ee   梁灏   fixex #1353
833
                      column._columnKey = columnKey++;
224a3ae5   梁灏   publish 0.9.9-rc-3
834
                      column._width = column.width ? column.width : '';    // update in handleResize()
99f80db0   梁灏   update Table
835
836
837
838
                      column._sortType = 'normal';
                      column._filterVisible = false;
                      column._isFiltered = false;
                      column._filterChecked = [];
35ad3764   梁灏   update Table
839
  
adaeca88   梁灏   update Table
840
841
842
843
844
                      if ('filterMultiple' in column) {
                          column._filterMultiple = column.filterMultiple;
                      } else {
                          column._filterMultiple = true;
                      }
5d0499ce   梁灏   update Table
845
846
847
848
                      if ('filteredValue' in column) {
                          column._filterChecked = column.filteredValue;
                          column._isFiltered = true;
                      }
adaeca88   梁灏   update Table
849
  
835b37ff   梁灏   fixed #1403
850
851
852
853
                      if ('sortType' in column) {
                          column._sortType = column.sortType;
                      }
  
35ad3764   梁灏   update Table
854
855
856
857
858
859
860
861
862
                      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...
863
              },
1acabf79   梁灏   Table support mul...
864
              // create a multiple table-head
c1e965c3   梁灏   fixed-head
865
866
              makeColumnRows (fixedType) {
                  return convertToRows(this.columns, fixedType);
1acabf79   梁灏   Table support mul...
867
              },
43509ad8   梁灏   Table support exp...
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
              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...
883
                      columns = this.allColumns;
43509ad8   梁灏   Table support exp...
884
885
886
887
888
889
890
                      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...
891
892
893
                  const data = Csv(columns, datas, params, noHeader);
                  if (params.callback) params.callback(data);
                  else ExportCsv.download(params.filename, data);
2cb8a6d9   梁灏   commit Table comp...
894
895
              }
          },
486d4fda   梁灏   update Table
896
          created () {
d8892603   梁灏   Table prop: conte...
897
              if (!this.context) this.currentContext = this.$parent;
7409cb3c   梁灏   fixed #549
898
899
              this.showSlotHeader = this.$slots.header !== undefined;
              this.showSlotFooter = this.$slots.footer !== undefined;
5d0499ce   梁灏   update Table
900
              this.rebuildData = this.makeDataWithSortAndFilter();
e7e8c8ff   梁灏   update Table
901
          },
486d4fda   梁灏   update Table
902
          mounted () {
a3547c1b   梁灏   update Table
903
              this.handleResize();
e7e8c8ff   梁灏   update Table
904
              this.fixedHeader();
adaeca88   梁灏   update Table
905
              this.$nextTick(() => this.ready = true);
c5beedf8   梁灏   fixed #690
906
  
f00b5343   梁灏   update Table
907
              on(window, 'resize', this.handleResize);
c5beedf8   梁灏   fixed #690
908
909
910
              this.observer = elementResizeDetectorMaker();
              this.observer.listenTo(this.$el, this.handleResize);
  
67c9b1c8   梁灏   fixed #591
911
              this.$on('on-visible-change', (val) => {
a6eee4e5   梁灏   update Table
912
913
914
915
                  if (val) {
                      this.handleResize();
                      this.fixedHeader();
                  }
67c9b1c8   梁灏   fixed #591
916
              });
744eb0af   梁灏   update Table comp...
917
918
          },
          beforeDestroy () {
f00b5343   梁灏   update Table
919
              off(window, 'resize', this.handleResize);
c5beedf8   梁灏   fixed #690
920
              this.observer.removeListener(this.$el, this.handleResize);
2cb8a6d9   梁灏   commit Table comp...
921
922
923
924
          },
          watch: {
              data: {
                  handler () {
119eeafe   梁灏   fixed a Table bug
925
                      const oldDataLen = this.rebuildData.length;
d3dfdb26   梁灏   update Table
926
                      this.objData = this.makeObjData();
97edb2eb   梁灏   update Table
927
                      this.rebuildData = this.makeDataWithSortAndFilter();
a3547c1b   梁灏   update Table
928
                      this.handleResize();
119eeafe   梁灏   fixed a Table bug
929
930
931
                      if (!oldDataLen) {
                          this.fixedHeader();
                      }
63f2e0f4   梁灏   fixed Table bug w...
932
933
934
935
                      // here will trigger before clickCurrentRow, so use async
                      setTimeout(() => {
                          this.cloneData = deepCopy(this.data);
                      }, 0);
2cb8a6d9   梁灏   commit Table comp...
936
937
938
939
940
                  },
                  deep: true
              },
              columns: {
                  handler () {
f2a051a1   梁灏   publish 0.9.9-rc-6
941
                      // todo 这里有性能问题,可能是左右固定计算属性影响的
1acabf79   梁灏   Table support mul...
942
                      this.allColumns = getAllColumns(this.columns);
35ad3764   梁灏   update Table
943
                      this.cloneColumns = this.makeColumns();
c1e965c3   梁灏   fixed-head
944
945
946
                      this.columnRows = this.makeColumnRows(false);
                      this.leftFixedColumnRows = this.makeColumnRows('left');
                      this.rightFixedColumnRows = this.makeColumnRows('right');
97edb2eb   梁灏   update Table
947
                      this.rebuildData = this.makeDataWithSortAndFilter();
a3547c1b   梁灏   update Table
948
                      this.handleResize();
2cb8a6d9   梁灏   commit Table comp...
949
950
                  },
                  deep: true
e7e8c8ff   梁灏   update Table
951
952
              },
              height () {
b08bd8a8   huanghong   fixed height changed
953
                  this.handleResize();
e7e8c8ff   梁灏   update Table
954
                  this.fixedHeader();
75803add   huanghong   fixed scoll bar
955
956
957
958
              },
              showHorizontalScrollBar () {
                  this.handleResize();
                  this.fixedHeader();
2cb8a6d9   梁灏   commit Table comp...
959
960
              }
          }
b0893113   jingsam   :art: add eslint
961
962
      };
  </script>