Commit d0e206c501029b2b9889eb317f02bd772814e40d

Authored by 梁灏
1 parent 224a3ae5

Table add content prop to compile custom component

Table add content prop to compile custom component
src/components/table/cell.vue
@@ -27,7 +27,8 @@ @@ -27,7 +27,8 @@
27 data () { 27 data () {
28 return { 28 return {
29 renderType: '', 29 renderType: '',
30 - uid: -1 30 + uid: -1,
  31 + content: this.$parent.$parent.content
31 } 32 }
32 }, 33 },
33 computed: { 34 computed: {
@@ -43,7 +44,7 @@ @@ -43,7 +44,7 @@
43 methods: { 44 methods: {
44 compile () { 45 compile () {
45 if (this.column.render) { 46 if (this.column.render) {
46 - const $parent = this.$parent.$parent.$parent; 47 + const $parent = this.content;
47 const template = this.column.render(this.row, this.column, this.index); 48 const template = this.column.render(this.row, this.column, this.index);
48 const cell = document.createElement('div'); 49 const cell = document.createElement('div');
49 cell.innerHTML = template; 50 cell.innerHTML = template;
@@ -59,7 +60,7 @@ @@ -59,7 +60,7 @@
59 } 60 }
60 }, 61 },
61 destroy () { 62 destroy () {
62 - const $parent = this.$parent.$parent.$parent; 63 + const $parent = this.content;
63 for (let i = 0; i < $parent.$children.length; i++) { 64 for (let i = 0; i < $parent.$children.length; i++) {
64 if ($parent.$children[i]._uid === this.uid) { 65 if ($parent.$children[i]._uid === this.uid) {
65 $parent.$children[i].$destroy(); 66 $parent.$children[i].$destroy();
src/components/table/table-head.vue
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 </div> 34 </div>
35 </div> 35 </div>
36 <div slot="content" :class="[prefixCls + '-filter-list']" v-else> 36 <div slot="content" :class="[prefixCls + '-filter-list']" v-else>
37 - <ul> 37 + <ul :class="[prefixCls + '-filter-list-single']">
38 <li 38 <li
39 :class="[prefixCls + '-filter-select-item', {[prefixCls + '-filter-select-item-selected']: !column._filterChecked.length}]" 39 :class="[prefixCls + '-filter-select-item', {[prefixCls + '-filter-select-item-selected']: !column._filterChecked.length}]"
40 @click="handleReset($index)">全部</li> 40 @click="handleReset($index)">全部</li>
src/components/table/table.vue
@@ -122,6 +122,9 @@ @@ -122,6 +122,9 @@
122 default () { 122 default () {
123 return ''; 123 return '';
124 } 124 }
  125 + },
  126 + content: {
  127 + type: Object
125 } 128 }
126 }, 129 },
127 data () { 130 data () {
@@ -243,23 +246,25 @@ @@ -243,23 +246,25 @@
243 let autoWidthIndex = -1; 246 let autoWidthIndex = -1;
244 if (allWidth) autoWidthIndex = this.cloneColumns.findIndex(cell => !cell.width);//todo 这行可能有问题 247 if (allWidth) autoWidthIndex = this.cloneColumns.findIndex(cell => !cell.width);//todo 这行可能有问题
245 248
246 - const $td = this.$refs.tbody.$el.querySelectorAll('tbody tr')[0].querySelectorAll('td');  
247 - for (let i = 0; i < $td.length; i++) { // can not use forEach in Firefox  
248 - const column = this.cloneColumns[i]; 249 + if (this.data.length) {
  250 + const $td = this.$refs.tbody.$el.querySelectorAll('tbody tr')[0].querySelectorAll('td');
  251 + for (let i = 0; i < $td.length; i++) { // can not use forEach in Firefox
  252 + const column = this.cloneColumns[i];
249 253
250 - let width = parseInt(getStyle($td[i], 'width'));  
251 - if (i === autoWidthIndex) {  
252 - width = parseInt(getStyle($td[i], 'width')) - 1;  
253 - }  
254 - if (column.width) width = column.width; 254 + let width = parseInt(getStyle($td[i], 'width'));
  255 + if (i === autoWidthIndex) {
  256 + width = parseInt(getStyle($td[i], 'width')) - 1;
  257 + }
  258 + if (column.width) width = column.width;
255 259
256 - this.cloneColumns[i]._width = width; 260 + this.cloneColumns[i]._width = width;
257 261
258 - columnsWidth[column._index] = {  
259 - width: width 262 + columnsWidth[column._index] = {
  263 + width: width
  264 + }
260 } 265 }
  266 + this.columnsWidth = columnsWidth;
261 } 267 }
262 - this.columnsWidth = columnsWidth;  
263 }); 268 });
264 }); 269 });
265 }, 270 },
@@ -502,6 +507,7 @@ @@ -502,6 +507,7 @@
502 } 507 }
503 }, 508 },
504 compiled () { 509 compiled () {
  510 + if (!this.content) this.content = this.$parent;
505 this.showSlotHeader = this.$els.title.innerHTML.replace(/\n/g, '').replace(/<!--[\w\W\r\n]*?-->/gmi, '') !== ''; 511 this.showSlotHeader = this.$els.title.innerHTML.replace(/\n/g, '').replace(/<!--[\w\W\r\n]*?-->/gmi, '') !== '';
506 this.showSlotFooter = this.$els.footer.innerHTML.replace(/\n/g, '').replace(/<!--[\w\W\r\n]*?-->/gmi, '') !== ''; 512 this.showSlotFooter = this.$els.footer.innerHTML.replace(/\n/g, '').replace(/<!--[\w\W\r\n]*?-->/gmi, '') !== '';
507 this.rebuildData = this.makeDataWithSortAndFilter(); 513 this.rebuildData = this.makeDataWithSortAndFilter();
test/routers/table.vue
1 <template> 1 <template>
2 - <i-table border :columns="columns1" :data="data1"></i-table> 2 + <Card>
  3 + <i-table :content="self" border :columns="columns7" :data="data6"></i-table>
  4 + </Card>
3 </template> 5 </template>
4 <script> 6 <script>
5 export default { 7 export default {
6 data () { 8 data () {
7 return { 9 return {
8 - columns1: [ 10 + self: this,
  11 + columns7: [
  12 +// {
  13 +// title: '姓名',
  14 +// key: 'name',
  15 +// render (row, column, index) {
  16 +// return `<strong>${row.name}</strong>`;
  17 +// }
  18 +// },
  19 +// {
  20 +// title: '年龄',
  21 +// key: 'age'
  22 +// },
  23 +// {
  24 +// title: '地址',
  25 +// key: 'address'
  26 +// },
9 { 27 {
10 - title: '姓名',  
11 - key: 'name'  
12 - },  
13 - {  
14 - title: '年龄',  
15 - key: 'age',  
16 - fixed: 'left',  
17 -// width: 200  
18 - },  
19 - {  
20 - title: '地址',  
21 - key: 'address' 28 + title: '操作',
  29 + key: 'action',
  30 + render (row, column, index) {
  31 + return `<i-button type="primary" size="small" @click="show(${index})">查看</i-button> <i-button type="error" size="small" @click="remove(${index})">删除</i-button>`;
  32 + }
22 } 33 }
23 ], 34 ],
24 - data1: [ 35 + data6: [
25 { 36 {
26 name: '王小明', 37 name: '王小明',
27 age: 18, 38 age: 18,
@@ -44,6 +55,11 @@ @@ -44,6 +55,11 @@
44 } 55 }
45 ] 56 ]
46 } 57 }
  58 + },
  59 + methods: {
  60 + remove (index) {
  61 + this.data6.splice(index, 1);
  62 + }
47 } 63 }
48 } 64 }
49 -</script>  
50 \ No newline at end of file 65 \ No newline at end of file
  66 +</script>