diff --git a/package.json b/package.json index a0409610b9b802b583501d27e60bb876344369e1..bf4e6041251f8afbad9e555e55852db66c16cc7c 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,8 @@ "vue-router": "2.3.0", "vuedraggable": "2.8.4", "vuex": "2.2.1", - "xlsx": "0.8.1" + "xlsx": "0.8.1", + "vue-count-to":"1.0.5" }, "devDependencies": { "autoprefixer": "6.7.2", diff --git a/src/api/article.js b/src/api/article.js index a359329df360a115c76ac732705e32c312db1645..c062cbb777f3ad71fae74b654f9da54e6db8ba2d 100644 --- a/src/api/article.js +++ b/src/api/article.js @@ -1,29 +1,8 @@ -import fetch, { tpFetch } from 'utils/fetch'; -import { param } from 'utils'; +import { tpFetch } from 'utils/fetch'; -export function getList(query) { +export function getList() { return tpFetch({ url: '/article/list', method: 'get' }); } -export function upload(data) { - return tpFetch({ - url: 'https://upload.qbox.me', - method: 'post', - data - }); -} - - -/* 外部uri转七牛uri*/ -export function netUpload(token, net_url) { - const imgData = { - net_url - }; - return fetch({ - url: '/qiniu/upload/net/async', - method: 'post', - data: imgData - }); -} diff --git a/src/components/Charts/barPercent.vue b/src/components/Charts/barPercent.vue index bdc018743ac52dea24800f64ba21da2bdc344759..e82422fe759c8d2ab0acef683c18c2293468995c 100644 --- a/src/components/Charts/barPercent.vue +++ b/src/components/Charts/barPercent.vue @@ -48,6 +48,7 @@ methods: { initBar() { this.chart = echarts.init(document.getElementById(this.id)); + this.setOptions(); }, setOptions() { this.chart.setOption({ diff --git a/src/components/Charts/line.vue b/src/components/Charts/line.vue index 28b22a111a0e98c964fbd2e351429895a5d5b455..ab416c76f94f6014e9e75c027aa4ebeb7ac880f1 100644 --- a/src/components/Charts/line.vue +++ b/src/components/Charts/line.vue @@ -46,6 +46,7 @@ }, mounted() { this.chart = echarts.init(document.getElementById(this.id)); + this.setLine(this.listData); }, methods: { setLine(dataList) { diff --git a/src/mock/index.js b/src/mock/index.js index e2b0edab8b1f4f8ab814a08f58462109316fd72b..9a125c4f58345bd10e4aa6c37569286d4b5f6610 100644 --- a/src/mock/index.js +++ b/src/mock/index.js @@ -7,6 +7,7 @@ const articleList = { 'data|20': [{ id: '@id', title: '@ctitle(10, 20)', + 'status|1': ['published', 'draft'], author: '@cname', display_time: '@datetime', pageviews: '@integer(300, 5000)' diff --git a/src/router/index.js b/src/router/index.js index 535da322f7399dc283a9a1c2fb495c33d89da72a..2bfd0d13d93d9e5d3a5b68efb3139c11072dd94d 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -19,6 +19,7 @@ import sendPWD from '../views/login/sendpwd'; import reset from '../views/login/reset'; /* components*/ +const componentsIndex = resolve => require(['../views/components/index'], resolve); const Tinymce = resolve => require(['../views/components/tinymce'], resolve); const Markdown = resolve => require(['../views/components/markdown'], resolve); const JsonEditor = resolve => require(['../views/components/jsoneditor'], resolve); @@ -32,6 +33,7 @@ const Mixin = resolve => require(['../views/components/mixin'], resolve); /* charts*/ +const chartIndex = resolve => require(['../views/charts/index'], resolve); const KeyboardChart = resolve => require(['../views/charts/keyboard'], resolve); const KeyboardChart2 = resolve => require(['../views/charts/keyboard2'], resolve); const LineMarker = resolve => require(['../views/charts/line'], resolve); @@ -80,10 +82,11 @@ export default new Router({ { path: '/components', component: Layout, - redirect: 'noredirect', + redirect: '/components/index', name: '组件', icon: 'zujian', children: [ + { path: 'index', component: componentsIndex, name: '介ç»' }, { path: 'tinymce', component: Tinymce, name: '富文本编辑器' }, { path: 'markdown', component: Markdown, name: 'Markdown' }, { path: 'jsoneditor', component: JsonEditor, name: 'JSON编辑器' }, @@ -99,10 +102,11 @@ export default new Router({ { path: '/charts', component: Layout, - redirect: 'noredirect', + redirect: '/charts/index', name: '图表', icon: 'tubiaoleixingzhengchang', children: [ + { path: 'index', component: chartIndex, name: '介ç»' }, { path: 'keyboard', component: KeyboardChart, name: '键盘图表' }, { path: 'keyboard2', component: KeyboardChart2, name: '键盘图表2' }, { path: 'line', component: LineMarker, name: '折线图' }, diff --git a/src/views/charts/index.vue b/src/views/charts/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..af09a352593d7361ca618ffb0683cdfbb3835565 --- /dev/null +++ b/src/views/charts/index.vue @@ -0,0 +1,5 @@ +<template> + <div class="components-container" > + ä»‹ç» + </div> +</template> diff --git a/src/views/components/index.vue b/src/views/components/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..af09a352593d7361ca618ffb0683cdfbb3835565 --- /dev/null +++ b/src/views/components/index.vue @@ -0,0 +1,5 @@ +<template> + <div class="components-container" > + ä»‹ç» + </div> +</template> diff --git a/src/views/dashboard/editor/index.vue b/src/views/dashboard/editor/index.vue index ad89ef25ef8ff76a66899d01c0582830e195ba21..2ea108a75353e8dd1b4776fe10bc529aa72b91e2 100644 --- a/src/views/dashboard/editor/index.vue +++ b/src/views/dashboard/editor/index.vue @@ -7,32 +7,32 @@ <div class="info-container"> <span class="display_name">{{name}}</span> <div class="info-wrapper"> - <router-link class="info-item" :to="'/article/wscnlist?uid='+uid"> - <span class="info-item-num">{{statisticsData.article_count | toThousandslsFilter}}</span> + <div class="info-item" :to="'/article/wscnlist?uid='+uid"> + <countTo class="info-item-num" :startVal='0' :endVal='statisticsData.article_count' :duration='3400'></countTo> <span class="info-item-text">æ–‡ç« </span> <wscn-icon-svg icon-class="a" class="dashboard-editor-icon"/> - </router-link> + </div> <div class="info-item" style="cursor: auto"> - <span class="info-item-num"> {{statisticsData.pageviews_count | toThousandslsFilter}}</span> + <countTo class="info-item-num" :startVal='0' :endVal='statisticsData.pageviews_count' :duration='3600'></countTo> <span class="info-item-text">æµè§ˆé‡</span> <wscn-icon-svg icon-class="b" class="dashboard-editor-icon"/> </div> - <router-link class="info-item" :to="'/comment/commentslist?res_author_id='+uid"> - <span class="info-item-num">{{statisticsData.comment_count | toThousandslsFilter}}</span> + <div class="info-item" :to="'/comment/commentslist?res_author_id='+uid"> + <countTo class="info-item-num" ref='countTo3' :startVal='0' :endVal='statisticsData.comment_count' :duration='3800'></countTo> <span class="info-item-text">评论</span> <wscn-icon-svg icon-class="c" class="dashboard-editor-icon"/> - </router-link> + </div> </div> </div> </div> <div class="btn-group"> - <router-link class="pan-btn blue-btn" to="/article/create">å‘è¡¨æ–‡ç« </router-link> - <router-link class="pan-btn light-blue-btn" to="/livenews/create">å‘布快讯</router-link> - <router-link class="pan-btn red-btn" to="/push/create">推é€</router-link> - <router-link class="pan-btn pink-btn" to="/comment/commentslist">评论管ç†</router-link> - <router-link class="pan-btn green-btn" to="/article/wscnlist">æ–‡ç« åˆ—è¡¨</router-link> - <router-link class="pan-btn tiffany-btn" to="/livenews/list">实时列表</router-link> + <router-link class="pan-btn blue-btn" to="/components/index">组价</router-link> + <router-link class="pan-btn light-blue-btn" to="/charts/index">图表</router-link> + <router-link class="pan-btn red-btn" to="/errorpage/404">错误页é¢</router-link> + <router-link class="pan-btn pink-btn" to="/errlog/log">错误日志</router-link> + <router-link class="pan-btn green-btn" to="/article/wscnlist">导出excel</router-link> + <router-link class="pan-btn tiffany-btn" to="/excel/download">实时列表</router-link> </div> <div class="clearfix main-dashboard-container"> @@ -47,10 +47,10 @@ <template v-if="recentArticles.length!=0"> <div class="recent-articles-item" v-for="item in recentArticles"> <span class="recent-articles-status">{{item.status | statusFilter}}</span> - <router-link class="recent-articles-content" :to="'/article/edit/'+item.id"> - <span>{{item.title}}</span> - </router-link> - <span class="recent-articles-time"><i style="padding-right: 4px;" class="el-icon-time"></i>{{item.display_time | parseTime('{m}-{d} {h}:{i}')}}</span> + <span class="recent-articles-content" :to="'/article/edit/'+item.id"> + {{item.title}} + </span> + <span class="recent-articles-time">{{item.author}}</span> </div> </template> <template v-else> @@ -58,9 +58,6 @@ <!--<img class="emptyGif" :src="emptyGif">--> </template> </div> - <router-link class="recent-articles-more" :to="'/article/wscnlist?uid='+uid"> - Show more - </router-link> </div> </div> </div> @@ -71,23 +68,37 @@ import PanThumb from 'components/PanThumb'; import MonthKpi from './monthKpi'; import ArticlesChart from './articlesChart'; - // import { getStatistics } from 'api/article'; - + import { getList } from 'api/article'; import emptyGif from 'assets/compbig.gif'; + import countTo from 'vue-count-to'; export default { name: 'dashboard-editor', - components: { PanThumb, MonthKpi, ArticlesChart }, + components: { PanThumb, MonthKpi, ArticlesChart, countTo }, data() { return { chart: null, statisticsData: { - article_count: undefined, - comment_count: undefined, + article_count: 1024, + comment_count: 102400, latest_article: [], - month_article_count: undefined, - pageviews_count: undefined, - week_article: [] + month_article_count: 28, + pageviews_count: 1024, + week_article: [ + { count: 30, week: '201716' }, + { count: 26, week: '201715' }, + { count: 31, week: '201714' }, + { count: 28, week: '201713' }, + { count: 40, week: '201712' }, + { count: 41, week: '201711' }, + { count: 50, week: '201710' }, + { count: 42, week: '201709' }, + { count: 36, week: '201708' }, + { count: 32, week: '201707' }, + { count: 40, week: '201706' }, + { count: 41, week: '201705' } + ] }, + list: [], emptyGif } }, @@ -104,15 +115,15 @@ 'roles' ]), recentArticles() { - return this.statisticsData.latest_article.slice(0, 7) + return this.list.slice(0, 7) } }, methods: { fetchData() { - // getStatistics().then(response => { - // this.statisticsData = response.data; - // this.statisticsData.week_article = this.statisticsData.week_article.slice().reverse(); - // }) + getList(this.listQuery).then(response => { + console.log(response.data) + this.list = response.data; + }) } }, filters: {