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
src/components/layout/col.vue
| ... | ... | @@ -15,7 +15,11 @@ |
| 15 | 15 | offset: [Number, String], |
| 16 | 16 | push: [Number, String], |
| 17 | 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 | 24 | data () { |
| 21 | 25 | return { |
| ... | ... | @@ -24,7 +28,7 @@ |
| 24 | 28 | }, |
| 25 | 29 | computed: { |
| 26 | 30 | classes () { |
| 27 | - return [ | |
| 31 | + let classList = [ | |
| 28 | 32 | `${prefixCls}`, |
| 29 | 33 | { |
| 30 | 34 | [`${prefixCls}-span-${this.span}`]: this.span, |
| ... | ... | @@ -34,7 +38,24 @@ |
| 34 | 38 | [`${prefixCls}-pull-${this.pull}`]: this.pull, |
| 35 | 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 | 60 | styles () { |
| 40 | 61 | let style = {}; | ... | ... |
src/styles/common/layout.less
| ... | ... | @@ -52,3 +52,37 @@ |
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 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 | 9 | .clearfix; |
| 10 | 10 | } |
| 11 | 11 | |
| 12 | -.float-grid-columns() { | |
| 12 | +.float-grid-columns(@class) { | |
| 13 | 13 | .col(@index) { // initial |
| 14 | - @item: ~".@{col-prefix-cls}-span-@{index}"; | |
| 14 | + @item: ~".@{col-prefix-cls}-span@{class}-@{index}"; | |
| 15 | 15 | .col((@index + 1), @item); |
| 16 | 16 | } |
| 17 | 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 | 19 | .col((@index + 1), ~"@{list}, @{item}"); |
| 20 | 20 | } |
| 21 | 21 | .col(@index, @list) when (@index > @grid-columns) { // terminal |
| ... | ... | @@ -27,28 +27,28 @@ |
| 27 | 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 | 32 | display: block; |
| 33 | 33 | width: percentage((@index / @grid-columns)); |
| 34 | 34 | } |
| 35 | - .@{col-prefix-cls}-push-@{index} { | |
| 35 | + .@{col-prefix-cls}@{class}-push-@{index} { | |
| 36 | 36 | left: percentage((@index / @grid-columns)); |
| 37 | 37 | } |
| 38 | - .@{col-prefix-cls}-pull-@{index} { | |
| 38 | + .@{col-prefix-cls}@{class}-pull-@{index} { | |
| 39 | 39 | right: percentage((@index / @grid-columns)); |
| 40 | 40 | } |
| 41 | - .@{col-prefix-cls}-offset-@{index} { | |
| 41 | + .@{col-prefix-cls}@{class}-offset-@{index} { | |
| 42 | 42 | margin-left: percentage((@index / @grid-columns)); |
| 43 | 43 | } |
| 44 | - .@{col-prefix-cls}-order-@{index} { | |
| 44 | + .@{col-prefix-cls}@{class}-order-@{index} { | |
| 45 | 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 | 52 | display: none; |
| 53 | 53 | } |
| 54 | 54 | .@{col-prefix-cls}-push-@{index} { |
| ... | ... | @@ -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 | 66 | \ No newline at end of file | ... | ... |
src/styles/themes/default/custom.less
| ... | ... | @@ -112,6 +112,27 @@ |
| 112 | 112 | // Tag |
| 113 | 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 | 136 | // Z-index |
| 116 | 137 | @zindex-spin : 8; |
| 117 | 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 | 12 | </style> |
| 14 | 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 | 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 | 25 | </template> |
| 72 | 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 | 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 | 30 | </script> | ... | ... |
test/routers/table.vue
| 1 | 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 | 7 | </template> |
| 18 | 8 | <script> |
| 19 | 9 | export default { |
| 20 | 10 | data () { |
| 21 | 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 | 279 | </script> | ... | ... |