add dashboard

This commit is contained in:
Pan 2017-04-21 15:12:45 +08:00
parent 33e384ee95
commit a3a331bd15
9 changed files with 67 additions and 59 deletions

View file

@ -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",

View file

@ -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
});
}

View file

@ -48,6 +48,7 @@
methods: {
initBar() {
this.chart = echarts.init(document.getElementById(this.id));
this.setOptions();
},
setOptions() {
this.chart.setOption({

View file

@ -46,6 +46,7 @@
},
mounted() {
this.chart = echarts.init(document.getElementById(this.id));
this.setLine(this.listData);
},
methods: {
setLine(dataList) {

View file

@ -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)'

View file

@ -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: '折线图' },

View file

@ -0,0 +1,5 @@
<template>
<div class="components-container" >
介绍
</div>
</template>

View file

@ -0,0 +1,5 @@
<template>
<div class="components-container" >
介绍
</div>
</template>

View file

@ -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: {