|
@@ -6,68 +6,142 @@
|
|
|
v-container(fluid, grid-list-lg)
|
|
|
v-layout(row, wrap)
|
|
|
v-flex(xs12 md6 lg4 xl3 d-flex)
|
|
|
- v-card.primary(dark)
|
|
|
+ v-card.primary.dashboard-card(dark)
|
|
|
v-card-text
|
|
|
v-icon.dashboard-icon insert_drive_file
|
|
|
.subheading Pages
|
|
|
animated-number.display-1(
|
|
|
- :value='357'
|
|
|
+ :value='info.pagesTotal'
|
|
|
:duration='2000'
|
|
|
:formatValue='round'
|
|
|
easing='easeOutQuint'
|
|
|
)
|
|
|
v-flex(xs12 md6 lg4 xl3 d-flex)
|
|
|
- v-card.indigo.lighten-1(dark)
|
|
|
+ v-card.indigo.lighten-1.dashboard-card(dark)
|
|
|
v-card-text
|
|
|
v-icon.dashboard-icon person
|
|
|
.subheading Users
|
|
|
animated-number.display-1(
|
|
|
- :value='34'
|
|
|
+ :value='info.usersTotal'
|
|
|
:duration='2000'
|
|
|
:formatValue='round'
|
|
|
easing='easeOutQuint'
|
|
|
)
|
|
|
v-flex(xs12 md6 lg4 xl3 d-flex)
|
|
|
- v-card.indigo.lighten-2(dark)
|
|
|
+ v-card.indigo.lighten-2.dashboard-card(dark)
|
|
|
v-card-text
|
|
|
v-icon.dashboard-icon people
|
|
|
.subheading Groups
|
|
|
animated-number.display-1(
|
|
|
- :value='5'
|
|
|
+ :value='info.groupsTotal'
|
|
|
:duration='2000'
|
|
|
:formatValue='round'
|
|
|
easing='easeOutQuint'
|
|
|
)
|
|
|
v-flex(xs12 md6 lg12 xl3 d-flex)
|
|
|
- v-card.teal.lighten-2(dark)
|
|
|
+ v-card.dashboard-card(
|
|
|
+ :class='isLatestVersion ? "teal lighten-2" : "red lighten-2"'
|
|
|
+ dark
|
|
|
+ )
|
|
|
+ v-btn(fab, absolute, right, top, small, light, to='system')
|
|
|
+ v-icon(v-if='isLatestVersion', color='teal') build
|
|
|
+ v-icon(v-else, color='red darken-4') get_app
|
|
|
v-card-text
|
|
|
v-icon.dashboard-icon blur_on
|
|
|
- .subheading Wiki.js 2.0.0
|
|
|
- .body-2 You are running the latest version.
|
|
|
+ .subheading Wiki.js {{info.currentVersion}}
|
|
|
+ .body-2(v-if='isLatestVersion') You are running the latest version.
|
|
|
+ .body-2(v-else) A new version is available: {{info.latestVersion}}
|
|
|
v-flex(xs12)
|
|
|
v-card
|
|
|
- v-card-text ---
|
|
|
+ v-card-title.subheading Recent Pages
|
|
|
+ v-data-table.pb-2(
|
|
|
+ :items='recentPages'
|
|
|
+ hide-actions
|
|
|
+ hide-headers
|
|
|
+ )
|
|
|
+ template(slot='items' slot-scope='props')
|
|
|
+ td(width='20', style='padding-right: 0;'): v-icon insert_drive_file
|
|
|
+ td
|
|
|
+ .body-2.primary--text {{ props.item.title }}
|
|
|
+ .caption.grey--text.text--darken-2 {{ props.item.description }}
|
|
|
+ td.caption /{{ props.item.path }}
|
|
|
+ td.grey--text.text--darken-2(width='250')
|
|
|
+ .caption: strong Updated {{ props.item.updatedAt | moment('from') }}
|
|
|
+ .caption Created {{ props.item.createdAt | moment('calendar') }}
|
|
|
+ v-flex(xs12)
|
|
|
+ v-card
|
|
|
+ v-card-title.subheading Most Popular Pages
|
|
|
+ v-data-table.pb-2(
|
|
|
+ :items='popularPages'
|
|
|
+ hide-actions
|
|
|
+ hide-headers
|
|
|
+ )
|
|
|
+ template(slot='items' slot-scope='props')
|
|
|
+ td(width='20', style='padding-right: 0;'): v-icon insert_drive_file
|
|
|
+ td
|
|
|
+ .body-2.primary--text {{ props.item.title }}
|
|
|
+ .caption.grey--text.text--darken-2 {{ props.item.description }}
|
|
|
+ td.caption /{{ props.item.path }}
|
|
|
+ td.grey--text.text--darken-2(width='250')
|
|
|
+ .caption: strong Updated {{ props.item.updatedAt | moment('from') }}
|
|
|
+ .caption Created {{ props.item.createdAt | moment('calendar') }}
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import AnimatedNumber from 'animated-number-vue'
|
|
|
|
|
|
+import statsQuery from 'gql/admin/dashboard/dashboard-query-stats.gql'
|
|
|
+
|
|
|
export default {
|
|
|
components: {
|
|
|
AnimatedNumber
|
|
|
},
|
|
|
data() {
|
|
|
- return {}
|
|
|
+ return {
|
|
|
+ info: {
|
|
|
+ currentVersion: 'n/a',
|
|
|
+ latestVersion: 'n/a',
|
|
|
+ groupsTotal: 0,
|
|
|
+ pagesTotal: 0,
|
|
|
+ usersTotal: 0
|
|
|
+ },
|
|
|
+ recentPages: [],
|
|
|
+ popularPages: []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ isLatestVersion() {
|
|
|
+ return this.info.currentVersion === this.info.latestVersion
|
|
|
+ }
|
|
|
},
|
|
|
methods: {
|
|
|
round(val) { return Math.round(val) }
|
|
|
+ },
|
|
|
+ apollo: {
|
|
|
+ info: {
|
|
|
+ query: statsQuery,
|
|
|
+ fetchPolicy: 'network-only',
|
|
|
+ update: (data) => data.system.info,
|
|
|
+ watchLoading (isLoading) {
|
|
|
+ this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-system-refresh')
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<style lang='scss'>
|
|
|
|
|
|
+.dashboard-card {
|
|
|
+ display: flex;
|
|
|
+
|
|
|
+ .v-card__text {
|
|
|
+ overflow: hidden;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
.dashboard-icon {
|
|
|
position: absolute;
|
|
|
right: 0;
|