Commit 6c634aa6319f6173ea7765be40840fefdf2676f0

Authored by 梁灏
1 parent c2d74eca

fixed #2078

Showing 2 changed files with 358 additions and 247 deletions   Show diff stats
examples/routers/table.vue
@@ -109,292 +109,401 @@ @@ -109,292 +109,401 @@
109 <!--}--> 109 <!--}-->
110 <!--</script>--> 110 <!--</script>-->
111 111
112 -<style scoped>  
113 - .layout{  
114 - border: 1px solid #d7dde4;  
115 - background: #f5f7f9;  
116 - position: relative;  
117 - border-radius: 4px;  
118 - overflow: hidden;  
119 - }  
120 - .layout-breadcrumb{  
121 - padding: 10px 15px 0;  
122 - }  
123 - .layout-content{  
124 - min-height: 200px;  
125 - margin: 15px;  
126 - overflow: hidden;  
127 - background: #fff;  
128 - border-radius: 4px;  
129 - }  
130 - .layout-content-main{  
131 - padding: 10px;  
132 - }  
133 - .layout-copy{  
134 - text-align: center;  
135 - padding: 10px 0 20px;  
136 - color: #9ea7b4;  
137 - }  
138 - .layout-menu-left{  
139 - background: #464c5b;  
140 - }  
141 - .layout-header{  
142 - height: 60px;  
143 - background: #fff;  
144 - box-shadow: 0 1px 1px rgba(0,0,0,.1);  
145 - }  
146 - .layout-logo-left{  
147 - width: 90%;  
148 - height: 30px;  
149 - background: #5b6270;  
150 - border-radius: 3px;  
151 - margin: 15px auto;  
152 - }  
153 - .layout-ceiling-main a{  
154 - color: #9ba7b5;  
155 - }  
156 - .layout-hide-text .layout-text{  
157 - display: none;  
158 - }  
159 - .ivu-col{  
160 - /*transition: width .2s ease-in-out;*/  
161 - }  
162 -</style> 112 +<!--<style scoped>-->
  113 + <!--.layout{-->
  114 + <!--border: 1px solid #d7dde4;-->
  115 + <!--background: #f5f7f9;-->
  116 + <!--position: relative;-->
  117 + <!--border-radius: 4px;-->
  118 + <!--overflow: hidden;-->
  119 + <!--}-->
  120 + <!--.layout-breadcrumb{-->
  121 + <!--padding: 10px 15px 0;-->
  122 + <!--}-->
  123 + <!--.layout-content{-->
  124 + <!--min-height: 200px;-->
  125 + <!--margin: 15px;-->
  126 + <!--overflow: hidden;-->
  127 + <!--background: #fff;-->
  128 + <!--border-radius: 4px;-->
  129 + <!--}-->
  130 + <!--.layout-content-main{-->
  131 + <!--padding: 10px;-->
  132 + <!--}-->
  133 + <!--.layout-copy{-->
  134 + <!--text-align: center;-->
  135 + <!--padding: 10px 0 20px;-->
  136 + <!--color: #9ea7b4;-->
  137 + <!--}-->
  138 + <!--.layout-menu-left{-->
  139 + <!--background: #464c5b;-->
  140 + <!--}-->
  141 + <!--.layout-header{-->
  142 + <!--height: 60px;-->
  143 + <!--background: #fff;-->
  144 + <!--box-shadow: 0 1px 1px rgba(0,0,0,.1);-->
  145 + <!--}-->
  146 + <!--.layout-logo-left{-->
  147 + <!--width: 90%;-->
  148 + <!--height: 30px;-->
  149 + <!--background: #5b6270;-->
  150 + <!--border-radius: 3px;-->
  151 + <!--margin: 15px auto;-->
  152 + <!--}-->
  153 + <!--.layout-ceiling-main a{-->
  154 + <!--color: #9ba7b5;-->
  155 + <!--}-->
  156 + <!--.layout-hide-text .layout-text{-->
  157 + <!--display: none;-->
  158 + <!--}-->
  159 + <!--.ivu-col{-->
  160 + <!--/*transition: width .2s ease-in-out;*/-->
  161 + <!--}-->
  162 +<!--</style>-->
  163 +<!--<template>-->
  164 + <!--<div class="layout" :class="{'layout-hide-text': spanLeft < 5}">-->
  165 + <!--<Row type="flex">-->
  166 + <!--<Col :span="spanLeft" class="layout-menu-left">-->
  167 + <!--<Menu active-name="1" theme="dark" width="auto">-->
  168 + <!--<div class="layout-logo-left"></div>-->
  169 + <!--<MenuItem name="1">-->
  170 + <!--<Icon type="ios-navigate" :size="iconSize"></Icon>-->
  171 + <!--<span class="layout-text">选项 1</span>-->
  172 + <!--</MenuItem>-->
  173 + <!--<MenuItem name="2">-->
  174 + <!--<Icon type="ios-keypad" :size="iconSize"></Icon>-->
  175 + <!--<span class="layout-text">选项 2</span>-->
  176 + <!--</MenuItem>-->
  177 + <!--<MenuItem name="3">-->
  178 + <!--<Icon type="ios-analytics" :size="iconSize"></Icon>-->
  179 + <!--<span class="layout-text">选项 3</span>-->
  180 + <!--</MenuItem>-->
  181 + <!--</Menu>-->
  182 + <!--</Col>-->
  183 + <!--<Col :span="spanRight">-->
  184 + <!--<div class="layout-header">-->
  185 + <!--<Button type="text" @click="toggleClick">-->
  186 + <!--<Icon type="navicon" size="32"></Icon>-->
  187 + <!--</Button>-->
  188 + <!--</div>-->
  189 + <!--<div class="layout-breadcrumb">-->
  190 + <!--<Breadcrumb>-->
  191 + <!--<BreadcrumbItem href="#">首页</BreadcrumbItem>-->
  192 + <!--<BreadcrumbItem href="#">应用中心</BreadcrumbItem>-->
  193 + <!--<BreadcrumbItem>某应用</BreadcrumbItem>-->
  194 + <!--</Breadcrumb>-->
  195 + <!--</div>-->
  196 + <!--<div class="layout-content">-->
  197 + <!--<div class="layout-content-main">-->
  198 + <!--<Table stripe :columns="columns1" :data="data1"></Table>-->
  199 + <!--</div>-->
  200 + <!--<hr style="margin: 10px 0;" />-->
  201 + <!--<div class="layout-content-main">-->
  202 + <!--<Table stripe :columns="columns2" :data="data2" ref="csvTable" @on-row-click="cc" />-->
  203 + <!--<i-button type="primary" size="large" @click="exportCSV">-->
  204 + <!--<icon type="ios-download-outline"></icon> Export to CSV-->
  205 + <!--</i-button>-->
  206 + <!--</div>-->
  207 + <!--</div>-->
  208 + <!--</Col>-->
  209 + <!--</Row>-->
  210 + <!--</div>-->
  211 +<!--</template>-->
  212 +<!--<script>-->
  213 + <!--export default {-->
  214 + <!--data () {-->
  215 + <!--return {-->
  216 + <!--spanLeft: 5,-->
  217 + <!--spanRight: 19,-->
  218 + <!--columns1: [-->
  219 + <!--{-->
  220 + <!--title: '姓名',-->
  221 + <!--key: 'name'-->
  222 + <!--},-->
  223 + <!--{-->
  224 + <!--title: '年龄',-->
  225 + <!--key: 'age'-->
  226 + <!--},-->
  227 + <!--{-->
  228 + <!--title: '地址',-->
  229 + <!--key: 'address'-->
  230 + <!--},-->
  231 + <!--{-->
  232 + <!--title: '姓名',-->
  233 + <!--key: 'name'-->
  234 + <!--},-->
  235 + <!--{-->
  236 + <!--title: '年龄',-->
  237 + <!--key: 'age'-->
  238 + <!--},-->
  239 + <!--{-->
  240 + <!--title: '地址',-->
  241 + <!--key: 'address'-->
  242 + <!--},-->
  243 + <!--{-->
  244 + <!--title: '姓名',-->
  245 + <!--key: 'name'-->
  246 + <!--},-->
  247 + <!--{-->
  248 + <!--title: '年龄',-->
  249 + <!--key: 'age'-->
  250 + <!--},-->
  251 + <!--{-->
  252 + <!--title: '地址',-->
  253 + <!--key: 'address'-->
  254 + <!--}-->
  255 + <!--],-->
  256 + <!--data1: [-->
  257 + <!--{-->
  258 + <!--name: '王小明',-->
  259 + <!--age: 18,-->
  260 + <!--address: '北京市朝阳区芍药居'-->
  261 + <!--},-->
  262 + <!--{-->
  263 + <!--name: '张小刚',-->
  264 + <!--age: 25,-->
  265 + <!--address: '北京市海淀区西二旗'-->
  266 + <!--},-->
  267 + <!--{-->
  268 + <!--name: '李小红',-->
  269 + <!--age: 30,-->
  270 + <!--address: '上海市浦东新区世纪大道'-->
  271 + <!--},-->
  272 + <!--{-->
  273 + <!--name: '周小伟',-->
  274 + <!--age: 26,-->
  275 + <!--address: '深圳市南山区深南大道'-->
  276 + <!--},-->
  277 + <!--{-->
  278 + <!--name: '王小明',-->
  279 + <!--age: 18,-->
  280 + <!--address: '北京市朝阳区芍药居'-->
  281 + <!--},-->
  282 + <!--{-->
  283 + <!--name: '张小刚',-->
  284 + <!--age: 25,-->
  285 + <!--address: '北京市海淀区西二旗'-->
  286 + <!--},-->
  287 + <!--{-->
  288 + <!--name: '李小红',-->
  289 + <!--age: 30,-->
  290 + <!--address: '上海市浦东新区世纪大道'-->
  291 + <!--},-->
  292 + <!--{-->
  293 + <!--name: '周小伟',-->
  294 + <!--age: 26,-->
  295 + <!--address: '深圳市南山区深南大道'-->
  296 + <!--},-->
  297 + <!--{-->
  298 + <!--name: '王小明',-->
  299 + <!--age: 18,-->
  300 + <!--address: '北京市朝阳区芍药居'-->
  301 + <!--},-->
  302 + <!--{-->
  303 + <!--name: '张小刚',-->
  304 + <!--age: 25,-->
  305 + <!--address: '北京市海淀区西二旗'-->
  306 + <!--},-->
  307 + <!--{-->
  308 + <!--name: '李小红',-->
  309 + <!--age: 30,-->
  310 + <!--address: '上海市浦东新区世纪大道'-->
  311 + <!--},-->
  312 + <!--{-->
  313 + <!--name: '周小伟',-->
  314 + <!--age: 26,-->
  315 + <!--address: '深圳市南山区深南大道'-->
  316 + <!--},-->
  317 + <!--{-->
  318 + <!--name: '王小明',-->
  319 + <!--age: 18,-->
  320 + <!--address: '北京市朝阳区芍药居'-->
  321 + <!--},-->
  322 + <!--{-->
  323 + <!--name: '张小刚',-->
  324 + <!--age: 25,-->
  325 + <!--address: '北京市海淀区西二旗'-->
  326 + <!--},-->
  327 + <!--{-->
  328 + <!--name: '李小红',-->
  329 + <!--age: 30,-->
  330 + <!--address: '上海市浦东新区世纪大道'-->
  331 + <!--},-->
  332 + <!--{-->
  333 + <!--name: '周小伟',-->
  334 + <!--age: 26,-->
  335 + <!--address: '深圳市南山区深南大道'-->
  336 + <!--}-->
  337 + <!--],-->
  338 + <!--columns2: [-->
  339 + <!--{-->
  340 + <!--title: '姓名',-->
  341 + <!--key: 'name'-->
  342 + <!--},-->
  343 + <!--{-->
  344 + <!--title: '年龄',-->
  345 + <!--key: 'age'-->
  346 + <!--},-->
  347 + <!--{-->
  348 + <!--title: '地址',-->
  349 + <!--key: 'address',-->
  350 + <!--render: (h) => {-->
  351 + <!--return h('Button', {-->
  352 + <!--nativeOn: {-->
  353 + <!--click: (event) => {-->
  354 + <!--console.log(2)-->
  355 + <!--event.stopPropagation();-->
  356 + <!--}-->
  357 + <!--}-->
  358 + <!--}, 'click')-->
  359 + <!--}-->
  360 + <!--}-->
  361 + <!--],-->
  362 + <!--data2: [-->
  363 + <!--{-->
  364 + <!--name: '王小明',-->
  365 + <!--age: 18,-->
  366 + <!--address: '北京市朝\n阳区芍药居'-->
  367 + <!--},-->
  368 + <!--{-->
  369 + <!--name: '张小刚',-->
  370 + <!--age: 25,-->
  371 + <!--address: '北京市海,淀区西二旗'-->
  372 + <!--},-->
  373 + <!--{-->
  374 + <!--name: '李小红',-->
  375 + <!--age: 30,-->
  376 + <!--address: '上海市浦东\r新区世纪大道'-->
  377 + <!--},-->
  378 + <!--{-->
  379 + <!--name: '周小伟',-->
  380 + <!--age: 26,-->
  381 + <!--address: '深圳市南山区深南大道'-->
  382 + <!--}-->
  383 + <!--]-->
  384 + <!--};-->
  385 + <!--},-->
  386 + <!--computed: {-->
  387 + <!--iconSize () {-->
  388 + <!--return this.spanLeft === 5 ? 14 : 24;-->
  389 + <!--}-->
  390 + <!--},-->
  391 + <!--methods: {-->
  392 + <!--toggleClick () {-->
  393 + <!--if (this.spanLeft === 5) {-->
  394 + <!--this.spanLeft = 2;-->
  395 + <!--this.spanRight = 22;-->
  396 + <!--} else {-->
  397 + <!--this.spanLeft = 5;-->
  398 + <!--this.spanRight = 19;-->
  399 + <!--}-->
  400 + <!--},-->
  401 + <!--exportCSV () {-->
  402 + <!--this.$refs.csvTable.exportCsv({-->
  403 + <!--filename: '原始数据',-->
  404 + <!--separator: ';',-->
  405 + <!--quoted: true-->
  406 + <!--});-->
  407 + <!--},-->
  408 + <!--cc () {-->
  409 + <!--console.log(1)-->
  410 + <!--}-->
  411 + <!--}-->
  412 + <!--};-->
  413 +<!--</script>-->
  414 +
163 <template> 415 <template>
164 - <div class="layout" :class="{'layout-hide-text': spanLeft < 5}">  
165 - <Row type="flex">  
166 - <Col :span="spanLeft" class="layout-menu-left">  
167 - <Menu active-name="1" theme="dark" width="auto">  
168 - <div class="layout-logo-left"></div>  
169 - <MenuItem name="1">  
170 - <Icon type="ios-navigate" :size="iconSize"></Icon>  
171 - <span class="layout-text">选项 1</span>  
172 - </MenuItem>  
173 - <MenuItem name="2">  
174 - <Icon type="ios-keypad" :size="iconSize"></Icon>  
175 - <span class="layout-text">选项 2</span>  
176 - </MenuItem>  
177 - <MenuItem name="3">  
178 - <Icon type="ios-analytics" :size="iconSize"></Icon>  
179 - <span class="layout-text">选项 3</span>  
180 - </MenuItem>  
181 - </Menu>  
182 - </Col>  
183 - <Col :span="spanRight">  
184 - <div class="layout-header">  
185 - <Button type="text" @click="toggleClick">  
186 - <Icon type="navicon" size="32"></Icon>  
187 - </Button>  
188 - </div>  
189 - <div class="layout-breadcrumb">  
190 - <Breadcrumb>  
191 - <BreadcrumbItem href="#">首页</BreadcrumbItem>  
192 - <BreadcrumbItem href="#">应用中心</BreadcrumbItem>  
193 - <BreadcrumbItem>某应用</BreadcrumbItem>  
194 - </Breadcrumb>  
195 - </div>  
196 - <div class="layout-content">  
197 - <div class="layout-content-main">  
198 - <Table stripe :columns="columns1" :data="data1"></Table>  
199 - </div>  
200 - <hr style="margin: 10px 0;" />  
201 - <div class="layout-content-main">  
202 - <Table stripe :columns="columns2" :data="data2" ref="csvTable" />  
203 - <i-button type="primary" size="large" @click="exportCSV">  
204 - <icon type="ios-download-outline"></icon> Export to CSV  
205 - </i-button>  
206 - </div>  
207 - </div>  
208 - </Col>  
209 - </Row>  
210 - </div> 416 + <Table border :columns="columns6" :data="data5" @on-filter-change="cc"></Table>
211 </template> 417 </template>
212 <script> 418 <script>
213 export default { 419 export default {
214 data () { 420 data () {
215 return { 421 return {
216 - spanLeft: 5,  
217 - spanRight: 19,  
218 - columns1: [  
219 - {  
220 - title: '姓名',  
221 - key: 'name'  
222 - },  
223 - {  
224 - title: '年龄',  
225 - key: 'age'  
226 - },  
227 - {  
228 - title: '地址',  
229 - key: 'address'  
230 - },  
231 - {  
232 - title: '姓名',  
233 - key: 'name'  
234 - },  
235 - {  
236 - title: '年龄',  
237 - key: 'age'  
238 - },  
239 - {  
240 - title: '地址',  
241 - key: 'address'  
242 - },  
243 - {  
244 - title: '姓名',  
245 - key: 'name'  
246 - },  
247 - {  
248 - title: '年龄',  
249 - key: 'age'  
250 - }, 422 + columns6: [
251 { 423 {
252 - title: '地址',  
253 - key: 'address'  
254 - }  
255 - ],  
256 - data1: [  
257 - {  
258 - name: '王小明',  
259 - age: 18,  
260 - address: '北京市朝阳区芍药居'  
261 - },  
262 - {  
263 - name: '张小刚',  
264 - age: 25,  
265 - address: '北京市海淀区西二旗'  
266 - },  
267 - {  
268 - name: '李小红',  
269 - age: 30,  
270 - address: '上海市浦东新区世纪大道'  
271 - },  
272 - {  
273 - name: '周小伟',  
274 - age: 26,  
275 - address: '深圳市南山区深南大道' 424 + title: '日期',
  425 + key: 'date'
276 }, 426 },
277 { 427 {
278 - name: '王小明',  
279 - age: 18,  
280 - address: '北京市朝阳区芍药居'  
281 - },  
282 - {  
283 - name: '张小刚',  
284 - age: 25,  
285 - address: '北京市海淀区西二旗'  
286 - },  
287 - {  
288 - name: '李小红',  
289 - age: 30,  
290 - address: '上海市浦东新区世纪大道'  
291 - },  
292 - {  
293 - name: '周小伟',  
294 - age: 26,  
295 - address: '深圳市南山区深南大道'  
296 - },  
297 - {  
298 - name: '王小明',  
299 - age: 18,  
300 - address: '北京市朝阳区芍药居'  
301 - },  
302 - {  
303 - name: '张小刚',  
304 - age: 25,  
305 - address: '北京市海淀区西二旗'  
306 - },  
307 - {  
308 - name: '李小红',  
309 - age: 30,  
310 - address: '上海市浦东新区世纪大道'  
311 - },  
312 - {  
313 - name: '周小伟',  
314 - age: 26,  
315 - address: '深圳市南山区深南大道'  
316 - },  
317 - {  
318 - name: '王小明',  
319 - age: 18,  
320 - address: '北京市朝阳区芍药居'  
321 - },  
322 - {  
323 - name: '张小刚',  
324 - age: 25,  
325 - address: '北京市海淀区西二旗'  
326 - },  
327 - {  
328 - name: '李小红',  
329 - age: 30,  
330 - address: '上海市浦东新区世纪大道'  
331 - },  
332 - {  
333 - name: '周小伟',  
334 - age: 26,  
335 - address: '深圳市南山区深南大道'  
336 - }  
337 - ],  
338 - columns2: [  
339 - {  
340 title: '姓名', 428 title: '姓名',
341 key: 'name' 429 key: 'name'
342 }, 430 },
343 { 431 {
344 title: '年龄', 432 title: '年龄',
345 - key: 'age' 433 + key: 'age',
  434 + filters: [
  435 + {
  436 + label: '大于25岁',
  437 + value: 1
  438 + },
  439 + {
  440 + label: '小于25岁',
  441 + value: 2
  442 + }
  443 + ],
  444 + filterMultiple: false,
  445 + filterMethod (value, row) {
  446 + if (value === 1) {
  447 + return row.age > 25;
  448 + } else if (value === 2) {
  449 + return row.age < 25;
  450 + }
  451 + }
346 }, 452 },
347 { 453 {
348 title: '地址', 454 title: '地址',
349 - key: 'address' 455 + key: 'address',
  456 + filters: [
  457 + {
  458 + label: '北京',
  459 + value: '北京'
  460 + },
  461 + {
  462 + label: '上海',
  463 + value: '上海'
  464 + },
  465 + {
  466 + label: '深圳',
  467 + value: '深圳'
  468 + }
  469 + ],
  470 + filterMethod (value, row) {
  471 + return row.address.indexOf(value) > -1;
  472 + }
350 } 473 }
351 ], 474 ],
352 - data2: [ 475 + data5: [
353 { 476 {
354 name: '王小明', 477 name: '王小明',
355 age: 18, 478 age: 18,
356 - address: '北京市朝\n阳区芍药居' 479 + address: '北京市朝阳区芍药居',
  480 + date: '2016-10-03'
357 }, 481 },
358 { 482 {
359 name: '张小刚', 483 name: '张小刚',
360 age: 25, 484 age: 25,
361 - address: '北京市海,淀区西二旗' 485 + address: '北京市海淀区西二旗',
  486 + date: '2016-10-01'
362 }, 487 },
363 { 488 {
364 name: '李小红', 489 name: '李小红',
365 age: 30, 490 age: 30,
366 - address: '上海市浦东\r新区世纪大道' 491 + address: '上海市浦东新区世纪大道',
  492 + date: '2016-10-02'
367 }, 493 },
368 { 494 {
369 name: '周小伟', 495 name: '周小伟',
370 age: 26, 496 age: 26,
371 - address: '深圳市南山区深南大道' 497 + address: '深圳市南山区深南大道',
  498 + date: '2016-10-04'
372 } 499 }
373 ] 500 ]
374 - };  
375 - },  
376 - computed: {  
377 - iconSize () {  
378 - return this.spanLeft === 5 ? 14 : 24;  
379 } 501 }
380 }, 502 },
381 methods: { 503 methods: {
382 - toggleClick () {  
383 - if (this.spanLeft === 5) {  
384 - this.spanLeft = 2;  
385 - this.spanRight = 22;  
386 - } else {  
387 - this.spanLeft = 5;  
388 - this.spanRight = 19;  
389 - }  
390 - },  
391 - exportCSV () {  
392 - this.$refs.csvTable.exportCsv({  
393 - filename: '原始数据',  
394 - separator: ';',  
395 - quoted: true  
396 - }); 504 + cc (dd) {
  505 + console.log(dd);
397 } 506 }
398 } 507 }
399 - }; 508 + }
400 </script> 509 </script>
src/components/table/table.vue
@@ -574,6 +574,7 @@ @@ -574,6 +574,7 @@
574 574
575 this.cloneColumns[index]._isFiltered = true; 575 this.cloneColumns[index]._isFiltered = true;
576 this.cloneColumns[index]._filterVisible = false; 576 this.cloneColumns[index]._filterVisible = false;
  577 + this.$emit('on-filter-change', column);
577 }, 578 },
578 handleFilterSelect (index, value) { 579 handleFilterSelect (index, value) {
579 this.cloneColumns[index]._filterChecked = [value]; 580 this.cloneColumns[index]._filterChecked = [value];
@@ -587,6 +588,7 @@ @@ -587,6 +588,7 @@
587 let filterData = this.makeDataWithSort(); 588 let filterData = this.makeDataWithSort();
588 filterData = this.filterOtherData(filterData, index); 589 filterData = this.filterOtherData(filterData, index);
589 this.rebuildData = filterData; 590 this.rebuildData = filterData;
  591 + this.$emit('on-filter-change', this.cloneColumns[index]);
590 }, 592 },
591 makeData () { 593 makeData () {
592 let data = deepCopy(this.data); 594 let data = deepCopy(this.data);