Commit 84a351dfdcedda56a1fbcf0e263a2f81e9e3d3e2
1 parent
43509ad8
Layout support reponsive
Layout support reponsive
Showing
7 changed files
with
380 additions
and
285 deletions
Show diff stats
package.json
| 1 | { | 1 | { |
| 2 | "name": "iview", | 2 | "name": "iview", |
| 3 | - "version": "0.9.10-rc-3", | 3 | + "version": "0.9.10-rc-4", |
| 4 | "title": "iView", | 4 | "title": "iView", |
| 5 | "description": "A high quality UI components Library with Vue.js", | 5 | "description": "A high quality UI components Library with Vue.js", |
| 6 | "homepage": "http://www.iviewui.com", | 6 | "homepage": "http://www.iviewui.com", |
src/components/layout/col.vue
| @@ -15,7 +15,11 @@ | @@ -15,7 +15,11 @@ | ||
| 15 | offset: [Number, String], | 15 | offset: [Number, String], |
| 16 | push: [Number, String], | 16 | push: [Number, String], |
| 17 | pull: [Number, String], | 17 | pull: [Number, String], |
| 18 | - className: String | 18 | + className: String, |
| 19 | + xs: [Number, Object], | ||
| 20 | + sm: [Number, Object], | ||
| 21 | + md: [Number, Object], | ||
| 22 | + lg: [Number, Object] | ||
| 19 | }, | 23 | }, |
| 20 | data () { | 24 | data () { |
| 21 | return { | 25 | return { |
| @@ -24,7 +28,7 @@ | @@ -24,7 +28,7 @@ | ||
| 24 | }, | 28 | }, |
| 25 | computed: { | 29 | computed: { |
| 26 | classes () { | 30 | classes () { |
| 27 | - return [ | 31 | + let classList = [ |
| 28 | `${prefixCls}`, | 32 | `${prefixCls}`, |
| 29 | { | 33 | { |
| 30 | [`${prefixCls}-span-${this.span}`]: this.span, | 34 | [`${prefixCls}-span-${this.span}`]: this.span, |
| @@ -34,7 +38,24 @@ | @@ -34,7 +38,24 @@ | ||
| 34 | [`${prefixCls}-pull-${this.pull}`]: this.pull, | 38 | [`${prefixCls}-pull-${this.pull}`]: this.pull, |
| 35 | [`${this.className}`]: !!this.className | 39 | [`${this.className}`]: !!this.className |
| 36 | } | 40 | } |
| 37 | - ] | 41 | + ]; |
| 42 | + | ||
| 43 | + ['xs', 'sm', 'md', 'lg'].forEach(size => { | ||
| 44 | + if (typeof this[size] === 'number') { | ||
| 45 | + classList.push(`${prefixCls}-span-${size}-${this[size]}`); | ||
| 46 | + } else if (typeof this[size] === 'object') { | ||
| 47 | + let props = this[size]; | ||
| 48 | + Object.keys(props).forEach(prop => { | ||
| 49 | + classList.push( | ||
| 50 | + prop !== 'span' | ||
| 51 | + ? `${prefixCls}-${size}-${prop}-${props[prop]}` | ||
| 52 | + : `${prefixCls}-span-${size}-${props[prop]}` | ||
| 53 | + ); | ||
| 54 | + }); | ||
| 55 | + } | ||
| 56 | + }); | ||
| 57 | + | ||
| 58 | + return classList; | ||
| 38 | }, | 59 | }, |
| 39 | styles () { | 60 | styles () { |
| 40 | let style = {}; | 61 | let style = {}; |
src/styles/common/layout.less
| @@ -52,3 +52,37 @@ | @@ -52,3 +52,37 @@ | ||
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | .make-grid(); | 54 | .make-grid(); |
| 55 | + | ||
| 56 | +// Extra small grid | ||
| 57 | +// | ||
| 58 | +// Columns, offsets, pushes, and pulls for extra small devices like | ||
| 59 | +// smartphones. | ||
| 60 | + | ||
| 61 | +.make-grid(-xs); | ||
| 62 | + | ||
| 63 | +// Small grid | ||
| 64 | +// | ||
| 65 | +// Columns, offsets, pushes, and pulls for the small device range, from phones | ||
| 66 | +// to tablets. | ||
| 67 | + | ||
| 68 | +@media (min-width: @screen-sm-min) { | ||
| 69 | + .make-grid(-sm); | ||
| 70 | +} | ||
| 71 | + | ||
| 72 | + | ||
| 73 | +// Medium grid | ||
| 74 | +// | ||
| 75 | +// Columns, offsets, pushes, and pulls for the desktop device range. | ||
| 76 | + | ||
| 77 | +@media (min-width: @screen-md-min) { | ||
| 78 | + .make-grid(-md); | ||
| 79 | +} | ||
| 80 | + | ||
| 81 | + | ||
| 82 | +// Large grid | ||
| 83 | +// | ||
| 84 | +// Columns, offsets, pushes, and pulls for the large desktop device range. | ||
| 85 | + | ||
| 86 | +@media (min-width: @screen-lg-min) { | ||
| 87 | + .make-grid(-lg); | ||
| 88 | +} |
src/styles/mixins/layout.less
| @@ -9,13 +9,13 @@ | @@ -9,13 +9,13 @@ | ||
| 9 | .clearfix; | 9 | .clearfix; |
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | -.float-grid-columns() { | 12 | +.float-grid-columns(@class) { |
| 13 | .col(@index) { // initial | 13 | .col(@index) { // initial |
| 14 | - @item: ~".@{col-prefix-cls}-span-@{index}"; | 14 | + @item: ~".@{col-prefix-cls}-span@{class}-@{index}"; |
| 15 | .col((@index + 1), @item); | 15 | .col((@index + 1), @item); |
| 16 | } | 16 | } |
| 17 | .col(@index, @list) when (@index =< @grid-columns) { // general | 17 | .col(@index, @list) when (@index =< @grid-columns) { // general |
| 18 | - @item: ~".@{col-prefix-cls}-span-@{index}"; | 18 | + @item: ~".@{col-prefix-cls}-span@{class}-@{index}"; |
| 19 | .col((@index + 1), ~"@{list}, @{item}"); | 19 | .col((@index + 1), ~"@{list}, @{item}"); |
| 20 | } | 20 | } |
| 21 | .col(@index, @list) when (@index > @grid-columns) { // terminal | 21 | .col(@index, @list) when (@index > @grid-columns) { // terminal |
| @@ -27,28 +27,28 @@ | @@ -27,28 +27,28 @@ | ||
| 27 | .col(1); // kickstart it | 27 | .col(1); // kickstart it |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | -.loop-grid-columns(@index) when (@index > 0) { | ||
| 31 | - .@{col-prefix-cls}-span-@{index} { | 30 | +.loop-grid-columns(@index, @class) when (@index > 0) { |
| 31 | + .@{col-prefix-cls}-span@{class}-@{index} { | ||
| 32 | display: block; | 32 | display: block; |
| 33 | width: percentage((@index / @grid-columns)); | 33 | width: percentage((@index / @grid-columns)); |
| 34 | } | 34 | } |
| 35 | - .@{col-prefix-cls}-push-@{index} { | 35 | + .@{col-prefix-cls}@{class}-push-@{index} { |
| 36 | left: percentage((@index / @grid-columns)); | 36 | left: percentage((@index / @grid-columns)); |
| 37 | } | 37 | } |
| 38 | - .@{col-prefix-cls}-pull-@{index} { | 38 | + .@{col-prefix-cls}@{class}-pull-@{index} { |
| 39 | right: percentage((@index / @grid-columns)); | 39 | right: percentage((@index / @grid-columns)); |
| 40 | } | 40 | } |
| 41 | - .@{col-prefix-cls}-offset-@{index} { | 41 | + .@{col-prefix-cls}@{class}-offset-@{index} { |
| 42 | margin-left: percentage((@index / @grid-columns)); | 42 | margin-left: percentage((@index / @grid-columns)); |
| 43 | } | 43 | } |
| 44 | - .@{col-prefix-cls}-order-@{index} { | 44 | + .@{col-prefix-cls}@{class}-order-@{index} { |
| 45 | order: @index; | 45 | order: @index; |
| 46 | } | 46 | } |
| 47 | - .loop-grid-columns((@index - 1)); | 47 | + .loop-grid-columns((@index - 1), @class); |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | -.loop-grid-columns(@index) when (@index = 0) { | ||
| 51 | - .@{col-prefix-cls}-@{index} { | 50 | +.loop-grid-columns(@index, @class) when (@index = 0) { |
| 51 | + .@{col-prefix-cls}@{class}-@{index} { | ||
| 52 | display: none; | 52 | display: none; |
| 53 | } | 53 | } |
| 54 | .@{col-prefix-cls}-push-@{index} { | 54 | .@{col-prefix-cls}-push-@{index} { |
| @@ -59,7 +59,7 @@ | @@ -59,7 +59,7 @@ | ||
| 59 | } | 59 | } |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | -.make-grid() { | ||
| 63 | - .float-grid-columns(); | ||
| 64 | - .loop-grid-columns(@grid-columns); | 62 | +.make-grid(@class: ~'') { |
| 63 | + .float-grid-columns(@class); | ||
| 64 | + .loop-grid-columns(@grid-columns, @class); | ||
| 65 | } | 65 | } |
| 66 | \ No newline at end of file | 66 | \ No newline at end of file |
src/styles/themes/default/custom.less
| @@ -112,6 +112,27 @@ | @@ -112,6 +112,27 @@ | ||
| 112 | // Tag | 112 | // Tag |
| 113 | @tag-font-size : 12px; | 113 | @tag-font-size : 12px; |
| 114 | 114 | ||
| 115 | +// Media queries breakpoints | ||
| 116 | +// Extra small screen / phone | ||
| 117 | +@screen-xs : 480px; | ||
| 118 | +@screen-xs-min : @screen-xs; | ||
| 119 | +@screen-xs-max : (@screen-xs-min - 1); | ||
| 120 | + | ||
| 121 | +// Small screen / tablet | ||
| 122 | +@screen-sm : 768px; | ||
| 123 | +@screen-sm-min : @screen-sm; | ||
| 124 | +@screen-sm-max : (@screen-sm-min - 1); | ||
| 125 | + | ||
| 126 | +// Medium screen / desktop | ||
| 127 | +@screen-md : 992px; | ||
| 128 | +@screen-md-min : @screen-md; | ||
| 129 | +@screen-md-max : (@screen-md-min - 1); | ||
| 130 | + | ||
| 131 | +// Large screen / wide desktop | ||
| 132 | +@screen-lg : 1200px; | ||
| 133 | +@screen-lg-min : @screen-lg; | ||
| 134 | +@screen-lg-max : (@screen-lg-min - 1); | ||
| 135 | + | ||
| 115 | // Z-index | 136 | // Z-index |
| 116 | @zindex-spin : 8; | 137 | @zindex-spin : 8; |
| 117 | @zindex-affix : 10; | 138 | @zindex-affix : 10; |
test/routers/more.vue
| 1 | -<style scoped> | ||
| 2 | - /*body{*/ | ||
| 3 | - /*padding: 50px;*/ | ||
| 4 | - /*height: 2000px;*/ | ||
| 5 | - /*}*/ | ||
| 6 | - .example-badge{ | ||
| 7 | - width: 42px; | ||
| 8 | - height: 42px; | ||
| 9 | - border-radius: 6px; | ||
| 10 | - background: #eee; | ||
| 11 | - display: inline-block; | 1 | +<style> |
| 2 | + .ivu-col div.aaaaa{ | ||
| 3 | + height: 100px; | ||
| 4 | + line-height: 100px; | ||
| 5 | + text-align: center; | ||
| 6 | + color: #fff; | ||
| 7 | + background: rgba(0, 153, 229, .9); | ||
| 8 | + } | ||
| 9 | + .ivu-col:nth-child(odd) div.aaaaa{ | ||
| 10 | + background: rgba(0, 153, 229, .7); | ||
| 12 | } | 11 | } |
| 13 | </style> | 12 | </style> |
| 14 | <template> | 13 | <template> |
| 15 | - | ||
| 16 | - <Badge count="10"> | ||
| 17 | - <a class="example-badge"></a> | ||
| 18 | - </Badge> | ||
| 19 | - | ||
| 20 | - <Tag color="green" closable @on-close="closed">管理员</Tag> | ||
| 21 | - <Progress :percent="50" status="active" :stroke-width="20"> | ||
| 22 | - | ||
| 23 | - </Progress> | ||
| 24 | - | ||
| 25 | - <Circle :percent="p"> | ||
| 26 | - {{p}}% | ||
| 27 | - </Circle> | ||
| 28 | - <br><br> | ||
| 29 | - <Timeline pending> | ||
| 30 | - <Timeline-item color="red">发布3.0版本</Timeline-item> | ||
| 31 | - <Timeline-item color="green"> | ||
| 32 | - <Icon type="cloak" slot="dot"></Icon> | ||
| 33 | - 发布2.0版本 | ||
| 34 | - </Timeline-item> | ||
| 35 | - <Timeline-item color="#ff6600">发布1.0版本</Timeline-item> | ||
| 36 | - <Timeline-item>发布里程碑版本</Timeline-item> | ||
| 37 | - </Timeline> | 14 | + <Row> |
| 15 | + <i-col :xs="2" :sm="4" :md="6" :lg="8"><div class="aaaaa">Col 1</div></i-col> | ||
| 16 | + <i-col :xs="20" :sm="16" :md="12" :lg="8"><div class="aaaaa">Col 2</div></i-col> | ||
| 17 | + <i-col :xs="2" :sm="4" :md="6" :lg="8"><div class="aaaaa">Col 3</div></i-col> | ||
| 18 | + </Row> | ||
| 38 | <br><br> | 19 | <br><br> |
| 39 | - <Affix :offset-top="50" @on-change="affixChange"> | ||
| 40 | - <i-button>固定的图钉</i-button> | ||
| 41 | - </Affix> | ||
| 42 | - <Back-top @on-click="backtop"> | ||
| 43 | - | ||
| 44 | - </Back-top> | ||
| 45 | - | ||
| 46 | - <div style="width: 200px;height: 100px;border:1px solid #b2b2b2;position:relative"> | ||
| 47 | - <!--<Spin size="large" fix>加载中...</Spin>--> | ||
| 48 | - <Spin size="large" fix v-if="spinShow">加载中...</Spin> | ||
| 49 | - </div> | ||
| 50 | - <div @click="spinShow = !spinShow">消失</div> | ||
| 51 | - <br><br> | ||
| 52 | - | ||
| 53 | - <i-button @click="nextStep">下一步</i-button> | ||
| 54 | - <i-button @click="step_status = 'error'">步骤3切换为错误</i-button> | ||
| 55 | - <i-button @click="step_process = 'error'">切换steps状态为error</i-button> | ||
| 56 | - <Breadcrumb separator="<b>=></b>"> | ||
| 57 | - <Breadcrumb-item href="/index">首页</Breadcrumb-item> | ||
| 58 | - <Breadcrumb-item href="/my">我的</Breadcrumb-item> | ||
| 59 | - <Breadcrumb-item> | ||
| 60 | - <Icon type="photo"></Icon>照片 | ||
| 61 | - </Breadcrumb-item> | ||
| 62 | - </Breadcrumb> | ||
| 63 | - <br> | ||
| 64 | - <Steps :current="1" status="error"> | ||
| 65 | - <Step title="已完成" content="这里是该步骤的描述信息"></Step> | ||
| 66 | - <Step title="进行中" content="这里是该步骤的描述信息"></Step> | ||
| 67 | - <Step title="待进行" content="这里是该步骤的描述信息"></Step> | ||
| 68 | - <Step title="待进行" content="这里是该步骤的描述信息"></Step> | ||
| 69 | - </Steps> | ||
| 70 | - <i-button @click="testStatus = 'process'">change Status</i-button> | 20 | + <Row> |
| 21 | + <i-col :xs="{ span: 5, offset: 1 }" :lg="{ span: 6, offset: 2 }"><div class="aaaaa">Col 1</div></i-col> | ||
| 22 | + <i-col :xs="{ span: 11, offset: 1 }" :lg="{ span: 6, offset: 2 }"><div class="aaaaa">Col 2</div></i-col> | ||
| 23 | + <i-col :xs="{ span: 5, offset: 1 }" :lg="{ span: 6, offset: 2 }"><div class="aaaaa">Col 3</div></i-col> | ||
| 24 | + </Row> | ||
| 71 | </template> | 25 | </template> |
| 72 | <script> | 26 | <script> |
| 73 | - import { Badge, Tag, Progress, Circle, Timeline, Icon, Affix, iButton, BackTop, Spin, Steps, Breadcrumb} from 'iview'; | ||
| 74 | - const TimelineItem = Timeline.Item; | ||
| 75 | - const Step = Steps.Step; | ||
| 76 | - const BreadcrumbItem = Breadcrumb.Item; | ||
| 77 | - | ||
| 78 | export default { | 27 | export default { |
| 79 | - components: { | ||
| 80 | - Badge, | ||
| 81 | - Tag, | ||
| 82 | - Progress, | ||
| 83 | - Circle, | ||
| 84 | - Timeline, | ||
| 85 | - TimelineItem, | ||
| 86 | - Icon, | ||
| 87 | - Affix, | ||
| 88 | - iButton, | ||
| 89 | - BackTop, | ||
| 90 | - Spin, | ||
| 91 | - Steps, | ||
| 92 | - Step, | ||
| 93 | - Breadcrumb, | ||
| 94 | - BreadcrumbItem | ||
| 95 | - }, | ||
| 96 | - props: { | ||
| 97 | - | ||
| 98 | - }, | ||
| 99 | - data () { | ||
| 100 | - return { | ||
| 101 | - total: 512, | ||
| 102 | - p: 50, | ||
| 103 | - step_current: 0, | ||
| 104 | - step_status: 'wait', | ||
| 105 | - step_process: 'process', | ||
| 106 | - spinShow: true, | ||
| 107 | - testStatus: 'wait' | ||
| 108 | - } | ||
| 109 | - }, | ||
| 110 | - computed: { | ||
| 111 | 28 | ||
| 112 | - }, | ||
| 113 | - methods: { | ||
| 114 | - closed (e) { | ||
| 115 | - console.log(e) | ||
| 116 | - }, | ||
| 117 | - affixChange (status) { | ||
| 118 | - console.log(status) | ||
| 119 | - }, | ||
| 120 | - backtop () { | ||
| 121 | - console.log('toppp') | ||
| 122 | - }, | ||
| 123 | - nextStep () { | ||
| 124 | - this.step_current += 1; | ||
| 125 | - } | ||
| 126 | - }, | ||
| 127 | - ready () { | ||
| 128 | - setTimeout(() => { | ||
| 129 | - this.p = 60; | ||
| 130 | - }, 1000) | ||
| 131 | - } | ||
| 132 | } | 29 | } |
| 133 | </script> | 30 | </script> |
test/routers/table.vue
| 1 | <template> | 1 | <template> |
| 2 | - <i-button @click="down">down</i-button> | ||
| 3 | - <checkbox-group :model.sync="tableColumnsChecked" @on-change="changeTableColumns"> | ||
| 4 | - <checkbox value="show">展示</checkbox> | ||
| 5 | - <checkbox value="weak">唤醒</checkbox> | ||
| 6 | - <checkbox value="signin">登录</checkbox> | ||
| 7 | - <checkbox value="click">点击</checkbox> | ||
| 8 | - <checkbox value="active">激活</checkbox> | ||
| 9 | - <checkbox value="day7">7日留存</checkbox> | ||
| 10 | - <checkbox value="day30">30日留存</checkbox> | ||
| 11 | - <checkbox value="tomorrow">次日留存</checkbox> | ||
| 12 | - <checkbox value="day">日活跃</checkbox> | ||
| 13 | - <checkbox value="week">周活跃</checkbox> | ||
| 14 | - <checkbox value="month">月活跃</checkbox> | ||
| 15 | - </checkbox-group> | ||
| 16 | - <i-table :content="self" :data="tableData2" :columns="tableColumns2" border v-ref:table></i-table> | 2 | + <i-table :columns="columns8" :data="data7" size="small" v-ref:table></i-table> |
| 3 | + <br> | ||
| 4 | + <i-button type="primary" size="large" @click="exportData(1)"><Icon type="ios-download-outline"></Icon> 导出原始数据</i-button> | ||
| 5 | + <i-button type="primary" size="large" @click="exportData(2)"><Icon type="ios-download-outline"></Icon> 导出排序和过滤后的数据</i-button> | ||
| 6 | + <i-button type="primary" size="large" @click="exportData(3)"><Icon type="ios-download-outline"></Icon> 导出自定义数据</i-button> | ||
| 17 | </template> | 7 | </template> |
| 18 | <script> | 8 | <script> |
| 19 | export default { | 9 | export default { |
| 20 | data () { | 10 | data () { |
| 21 | return { | 11 | return { |
| 22 | - self: this, | ||
| 23 | - tableData2: this.mockTableData2(), | ||
| 24 | - tableColumns2: [], | ||
| 25 | - tableColumnsChecked: ['show', 'weak', 'signin', 'click', 'active', 'day7', 'day30', 'tomorrow', 'day', 'week', 'month'] | ||
| 26 | - } | ||
| 27 | - }, | ||
| 28 | - methods: { | ||
| 29 | - mockTableData2 () { | ||
| 30 | - let data = []; | ||
| 31 | - function getNum() { | ||
| 32 | - return Math.floor(Math.random () * 10000 + 1); | ||
| 33 | - } | ||
| 34 | - for (let i = 0; i < 10; i++) { | ||
| 35 | - data.push({ | ||
| 36 | - name: '推广名称' + (i+1), | ||
| 37 | - fav: 0, | ||
| 38 | - show: getNum(), | ||
| 39 | - weak: getNum(), | ||
| 40 | - signin: getNum(), | ||
| 41 | - click: getNum(), | ||
| 42 | - active: getNum(), | ||
| 43 | - day7: getNum(), | ||
| 44 | - day30: getNum(), | ||
| 45 | - tomorrow: getNum(), | ||
| 46 | - day: getNum(), | ||
| 47 | - week: getNum(), | ||
| 48 | - month: getNum() | ||
| 49 | - }) | ||
| 50 | - } | ||
| 51 | - return data; | ||
| 52 | - }, | ||
| 53 | - getTable2Columns () { | ||
| 54 | - const table2ColumnList = { | ||
| 55 | - name: { | ||
| 56 | - title: '名称', | ||
| 57 | - key: 'name', | ||
| 58 | - fixed: 'left', | ||
| 59 | - width: 200, | ||
| 60 | - render (row, column, index) { | ||
| 61 | - return `<Icon style="cursor: pointer" type="ios-star-outline" v-if="tableData2[${index}].fav === 0" @click="toggleFav(${index})"></Icon> | ||
| 62 | - <Icon style="cursor: pointer;color:#f60" type="ios-star" v-if="tableData2[${index}].fav === 1" @click="toggleFav(${index})"></Icon> | ||
| 63 | - <span>${row.name}</span>`; | 12 | + columns8: [ |
| 13 | + { | ||
| 14 | + "title": "名称", | ||
| 15 | + "key": "name", | ||
| 16 | + "fixed": "left", | ||
| 17 | + "width": 200 | ||
| 18 | + }, | ||
| 19 | + { | ||
| 20 | + "title": "展示", | ||
| 21 | + "key": "show", | ||
| 22 | + "width": 150, | ||
| 23 | + "sortable": true, | ||
| 24 | + filters: [ | ||
| 25 | + { | ||
| 26 | + label: '大于4000', | ||
| 27 | + value: 1 | ||
| 28 | + }, | ||
| 29 | + { | ||
| 30 | + label: '小于4000', | ||
| 31 | + value: 2 | ||
| 32 | + } | ||
| 33 | + ], | ||
| 34 | + filterMultiple: false, | ||
| 35 | + filterMethod (value, row) { | ||
| 36 | + if (value === 1) { | ||
| 37 | + return row.show > 4000; | ||
| 38 | + } else if (value === 2) { | ||
| 39 | + return row.show < 4000; | ||
| 40 | + } | ||
| 64 | } | 41 | } |
| 65 | }, | 42 | }, |
| 66 | - show: { | ||
| 67 | - title: '展示', | ||
| 68 | - key: 'show', | ||
| 69 | - width: 150, | ||
| 70 | - sortable: true | ||
| 71 | - }, | ||
| 72 | - weak: { | ||
| 73 | - title: '唤醒', | ||
| 74 | - key: 'weak', | ||
| 75 | - width: 150, | ||
| 76 | - sortable: true | ||
| 77 | - }, | ||
| 78 | - signin: { | ||
| 79 | - title: '登录', | ||
| 80 | - key: 'signin', | ||
| 81 | - width: 150, | ||
| 82 | - sortable: true | ||
| 83 | - }, | ||
| 84 | - click: { | ||
| 85 | - title: '点击', | ||
| 86 | - key: 'click', | ||
| 87 | - width: 150, | ||
| 88 | - sortable: true | ||
| 89 | - }, | ||
| 90 | - active: { | ||
| 91 | - title: '激活', | ||
| 92 | - key: 'active', | ||
| 93 | - width: 150, | ||
| 94 | - sortable: true | ||
| 95 | - }, | ||
| 96 | - day7: { | ||
| 97 | - title: '7日留存', | ||
| 98 | - key: 'day7', | ||
| 99 | - width: 150, | ||
| 100 | - sortable: true | ||
| 101 | - }, | ||
| 102 | - day30: { | ||
| 103 | - title: '30日留存', | ||
| 104 | - key: 'day30', | ||
| 105 | - width: 150, | ||
| 106 | - sortable: true | ||
| 107 | - }, | ||
| 108 | - tomorrow: { | ||
| 109 | - title: '次日留存', | ||
| 110 | - key: 'tomorrow', | ||
| 111 | - width: 150, | ||
| 112 | - sortable: true | ||
| 113 | - }, | ||
| 114 | - day: { | ||
| 115 | - title: '日活跃', | ||
| 116 | - key: 'day', | ||
| 117 | - width: 150, | ||
| 118 | - sortable: true | ||
| 119 | - }, | ||
| 120 | - week: { | ||
| 121 | - title: '周活跃', | ||
| 122 | - key: 'week', | ||
| 123 | - width: 150, | ||
| 124 | - sortable: true | ||
| 125 | - }, | ||
| 126 | - month: { | ||
| 127 | - title: '月活跃', | ||
| 128 | - key: 'month', | ||
| 129 | - width: 150, | ||
| 130 | - sortable: true | 43 | + { |
| 44 | + "title": "唤醒", | ||
| 45 | + "key": "weak", | ||
| 46 | + "width": 150, | ||
| 47 | + "sortable": true | ||
| 48 | + }, | ||
| 49 | + { | ||
| 50 | + "title": "登录", | ||
| 51 | + "key": "signin", | ||
| 52 | + "width": 150, | ||
| 53 | + "sortable": true | ||
| 54 | + }, | ||
| 55 | + { | ||
| 56 | + "title": "点击", | ||
| 57 | + "key": "click", | ||
| 58 | + "width": 150, | ||
| 59 | + "sortable": true | ||
| 60 | + }, | ||
| 61 | + { | ||
| 62 | + "title": "激活", | ||
| 63 | + "key": "active", | ||
| 64 | + "width": 150, | ||
| 65 | + "sortable": true | ||
| 66 | + }, | ||
| 67 | + { | ||
| 68 | + "title": "7日留存", | ||
| 69 | + "key": "day7", | ||
| 70 | + "width": 150, | ||
| 71 | + "sortable": true | ||
| 72 | + }, | ||
| 73 | + { | ||
| 74 | + "title": "30日留存", | ||
| 75 | + "key": "day30", | ||
| 76 | + "width": 150, | ||
| 77 | + "sortable": true | ||
| 78 | + }, | ||
| 79 | + { | ||
| 80 | + "title": "次日留存", | ||
| 81 | + "key": "tomorrow", | ||
| 82 | + "width": 150, | ||
| 83 | + "sortable": true | ||
| 84 | + }, | ||
| 85 | + { | ||
| 86 | + "title": "日活跃", | ||
| 87 | + "key": "day", | ||
| 88 | + "width": 150, | ||
| 89 | + "sortable": true | ||
| 90 | + }, | ||
| 91 | + { | ||
| 92 | + "title": "周活跃", | ||
| 93 | + "key": "week", | ||
| 94 | + "width": 150, | ||
| 95 | + "sortable": true | ||
| 96 | + }, | ||
| 97 | + { | ||
| 98 | + "title": "月活跃", | ||
| 99 | + "key": "month", | ||
| 100 | + "width": 150, | ||
| 101 | + "sortable": true | ||
| 102 | + } | ||
| 103 | + ], | ||
| 104 | + data7: [ | ||
| 105 | + { | ||
| 106 | + "name": "推广名称1", | ||
| 107 | + "fav": 0, | ||
| 108 | + "show": 7302, | ||
| 109 | + "weak": 5627, | ||
| 110 | + "signin": 1563, | ||
| 111 | + "click": 4254, | ||
| 112 | + "active": 1438, | ||
| 113 | + "day7": 274, | ||
| 114 | + "day30": 285, | ||
| 115 | + "tomorrow": 1727, | ||
| 116 | + "day": 558, | ||
| 117 | + "week": 4440, | ||
| 118 | + "month": 5610 | ||
| 119 | + }, | ||
| 120 | + { | ||
| 121 | + "name": "推广名称2", | ||
| 122 | + "fav": 0, | ||
| 123 | + "show": 4720, | ||
| 124 | + "weak": 4086, | ||
| 125 | + "signin": 3792, | ||
| 126 | + "click": 8690, | ||
| 127 | + "active": 8470, | ||
| 128 | + "day7": 8172, | ||
| 129 | + "day30": 5197, | ||
| 130 | + "tomorrow": 1684, | ||
| 131 | + "day": 2593, | ||
| 132 | + "week": 2507, | ||
| 133 | + "month": 1537 | ||
| 134 | + }, | ||
| 135 | + { | ||
| 136 | + "name": "推广名称3", | ||
| 137 | + "fav": 0, | ||
| 138 | + "show": 7181, | ||
| 139 | + "weak": 8007, | ||
| 140 | + "signin": 8477, | ||
| 141 | + "click": 1879, | ||
| 142 | + "active": 16, | ||
| 143 | + "day7": 2249, | ||
| 144 | + "day30": 3450, | ||
| 145 | + "tomorrow": 377, | ||
| 146 | + "day": 1561, | ||
| 147 | + "week": 3219, | ||
| 148 | + "month": 1588 | ||
| 149 | + }, | ||
| 150 | + { | ||
| 151 | + "name": "推广名称4", | ||
| 152 | + "fav": 0, | ||
| 153 | + "show": 9911, | ||
| 154 | + "weak": 8976, | ||
| 155 | + "signin": 8807, | ||
| 156 | + "click": 8050, | ||
| 157 | + "active": 7668, | ||
| 158 | + "day7": 1547, | ||
| 159 | + "day30": 2357, | ||
| 160 | + "tomorrow": 7278, | ||
| 161 | + "day": 5309, | ||
| 162 | + "week": 1655, | ||
| 163 | + "month": 9043 | ||
| 164 | + }, | ||
| 165 | + { | ||
| 166 | + "name": "推广名称5", | ||
| 167 | + "fav": 0, | ||
| 168 | + "show": 934, | ||
| 169 | + "weak": 1394, | ||
| 170 | + "signin": 6463, | ||
| 171 | + "click": 5278, | ||
| 172 | + "active": 9256, | ||
| 173 | + "day7": 209, | ||
| 174 | + "day30": 3563, | ||
| 175 | + "tomorrow": 8285, | ||
| 176 | + "day": 1230, | ||
| 177 | + "week": 4840, | ||
| 178 | + "month": 9908 | ||
| 179 | + }, | ||
| 180 | + { | ||
| 181 | + "name": "推广名称6", | ||
| 182 | + "fav": 0, | ||
| 183 | + "show": 6856, | ||
| 184 | + "weak": 1608, | ||
| 185 | + "signin": 457, | ||
| 186 | + "click": 4949, | ||
| 187 | + "active": 2909, | ||
| 188 | + "day7": 4525, | ||
| 189 | + "day30": 6171, | ||
| 190 | + "tomorrow": 1920, | ||
| 191 | + "day": 1966, | ||
| 192 | + "week": 904, | ||
| 193 | + "month": 6851 | ||
| 194 | + }, | ||
| 195 | + { | ||
| 196 | + "name": "推广名称7", | ||
| 197 | + "fav": 0, | ||
| 198 | + "show": 5107, | ||
| 199 | + "weak": 6407, | ||
| 200 | + "signin": 4166, | ||
| 201 | + "click": 7970, | ||
| 202 | + "active": 1002, | ||
| 203 | + "day7": 8701, | ||
| 204 | + "day30": 9040, | ||
| 205 | + "tomorrow": 7632, | ||
| 206 | + "day": 4061, | ||
| 207 | + "week": 4359, | ||
| 208 | + "month": 3676 | ||
| 209 | + }, | ||
| 210 | + { | ||
| 211 | + "name": "推广名称8", | ||
| 212 | + "fav": 0, | ||
| 213 | + "show": 862, | ||
| 214 | + "weak": 6520, | ||
| 215 | + "signin": 6696, | ||
| 216 | + "click": 3209, | ||
| 217 | + "active": 6801, | ||
| 218 | + "day7": 6364, | ||
| 219 | + "day30": 6850, | ||
| 220 | + "tomorrow": 9408, | ||
| 221 | + "day": 2481, | ||
| 222 | + "week": 1479, | ||
| 223 | + "month": 2346 | ||
| 224 | + }, | ||
| 225 | + { | ||
| 226 | + "name": "推广名称9", | ||
| 227 | + "fav": 0, | ||
| 228 | + "show": 567, | ||
| 229 | + "weak": 5859, | ||
| 230 | + "signin": 128, | ||
| 231 | + "click": 6593, | ||
| 232 | + "active": 1971, | ||
| 233 | + "day7": 7596, | ||
| 234 | + "day30": 3546, | ||
| 235 | + "tomorrow": 6641, | ||
| 236 | + "day": 1611, | ||
| 237 | + "week": 5534, | ||
| 238 | + "month": 3190 | ||
| 239 | + }, | ||
| 240 | + { | ||
| 241 | + "name": "推广名称10", | ||
| 242 | + "fav": 0, | ||
| 243 | + "show": 3651, | ||
| 244 | + "weak": 1819, | ||
| 245 | + "signin": 4595, | ||
| 246 | + "click": 7499, | ||
| 247 | + "active": 7405, | ||
| 248 | + "day7": 8710, | ||
| 249 | + "day30": 5518, | ||
| 250 | + "tomorrow": 428, | ||
| 251 | + "day": 9768, | ||
| 252 | + "week": 2864, | ||
| 253 | + "month": 5811 | ||
| 131 | } | 254 | } |
| 132 | - }; | ||
| 133 | - | ||
| 134 | - let data = [table2ColumnList.name]; | ||
| 135 | - | ||
| 136 | - this.tableColumnsChecked.forEach(col => data.push(table2ColumnList[col])); | ||
| 137 | - | ||
| 138 | - return data; | ||
| 139 | - }, | ||
| 140 | - changeTableColumns () { | ||
| 141 | - this.tableColumns2 = this.getTable2Columns(); | ||
| 142 | - }, | ||
| 143 | - toggleFav (index) { | ||
| 144 | - this.tableData2[index].fav = this.tableData2[index].fav === 0 ? 1 : 0; | ||
| 145 | - }, | ||
| 146 | - down () { | ||
| 147 | - this.$refs.table.exportCsv({ | ||
| 148 | - filename: '2132', | ||
| 149 | - original: false | ||
| 150 | - }); | 255 | + ] |
| 151 | } | 256 | } |
| 152 | }, | 257 | }, |
| 153 | - ready () { | ||
| 154 | - this.changeTableColumns(); | 258 | + methods: { |
| 259 | + exportData (type) { | ||
| 260 | + if (type === 1) { | ||
| 261 | + this.$refs.table.exportCsv({ | ||
| 262 | + filename: '原始数据' | ||
| 263 | + }); | ||
| 264 | + } else if (type === 2) { | ||
| 265 | + this.$refs.table.exportCsv({ | ||
| 266 | + filename: '排序和过滤后的数据', | ||
| 267 | + original: false | ||
| 268 | + }); | ||
| 269 | + } else if (type === 3) { | ||
| 270 | + this.$refs.table.exportCsv({ | ||
| 271 | + filename: '自定义数据', | ||
| 272 | + columns: this.columns8.filter((col, index) => index < 4), | ||
| 273 | + data: this.data7.filter((data, index) => index < 4) | ||
| 274 | + }); | ||
| 275 | + } | ||
| 276 | + } | ||
| 155 | } | 277 | } |
| 156 | } | 278 | } |
| 157 | </script> | 279 | </script> |