%PDF- %PDF-
Direktori : /data/www_bck/varak.net_bck/stats.varak.net/plugins/MultiSites/vue/src/Dashboard/ |
Current File : //data/www_bck/varak.net_bck/stats.varak.net/plugins/MultiSites/vue/src/Dashboard/Dashboard.vue |
<!-- Matomo - free/libre analytics platform @link https://matomo.org @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later --> <template> <div ref="root"> <h2 class="card-title"> <EnrichedHeadline help-url="https://matomo.org/faq/new-to-piwik/all-websites-dashboard/" :feature-name="translate('General_AllWebsitesDashboard')" > {{ translate('General_AllWebsitesDashboard') }} <span class="smallTitle" v-html="$sanitize(this.smallTitleContent)" :title="smallTitleTooltip" > </span> </EnrichedHeadline> </h2> <table id="mt" class="dataTable card-table" cellspacing="0" > <thead> <tr> <th id="names" class="label" @click="sortBy('label')" :class="{columnSorted: 'label' === sortColumn}" > <span class="heading">{{ translate('General_Website') }}</span> <span class="arrow" :class="{ multisites_asc: !reverse && 'label' === sortColumn, multisites_desc: reverse && 'label' === sortColumn, }" style="margin-left: 3.5px" /> </th> <th id="visits" class="multisites-column" @click="sortBy('nb_visits')" :class="{columnSorted: 'nb_visits' === sortColumn}" > <span class="arrow" :class="{ multisites_asc: !reverse && 'nb_visits' === sortColumn, multisites_desc: reverse && 'nb_visits' === sortColumn, }" style="margin-right: 3.5px" /> <span class="heading">{{ translate('General_ColumnNbVisits') }}</span> </th> <th id="pageviews" class="multisites-column" @click="sortBy('nb_pageviews')" :class="{columnSorted: 'nb_pageviews' === sortColumn}" > <span class="arrow" :class="{ multisites_asc: !reverse && 'nb_pageviews' === sortColumn, multisites_desc: reverse && 'nb_pageviews' === sortColumn, }" style="margin-right: 3.5px" /> <span class="heading">{{ translate('General_ColumnPageviews') }}</span> </th> <th id="revenue" class="multisites-column" v-if="displayRevenueColumn" @click="sortBy('revenue')" :class="{columnSorted: 'revenue' === sortColumn}" > <span class="arrow" :class="{ multisites_asc: !reverse && 'revenue' === sortColumn, multisites_desc: reverse && 'revenue' === sortColumn, }" style="margin-right: 3.5px" /> <span class="heading">{{ translate('General_ColumnRevenue') }}</span> </th> <th id="evolution" :class="{columnSorted: evolutionSelector === sortColumn}" :colspan="showSparklines ? 2 : 1" > <span class="arrow" :class="{ multisites_asc: !reverse && evolutionSelector === sortColumn, multisites_desc: reverse && evolutionSelector === sortColumn, }" style="margin-right: 3.5px" /> <span class="evolution" @click="sortBy(evolutionSelector)" style="margin-right: 3.5px" > {{ translate('MultiSites_Evolution') }}</span> <select class="selector browser-default" id="evolution_selector" :value="evolutionSelector" @change="evolutionSelector = $event.target.value; sortBy(evolutionSelector)" > <option value="visits_evolution">{{ translate('General_ColumnNbVisits') }}</option> <option value="pageviews_evolution"> {{ translate('General_ColumnPageviews') }} </option> <option value="revenue_evolution" v-if="displayRevenueColumn" > {{ translate('General_ColumnRevenue') }} </option> </select> </th> </tr> </thead> <tbody v-if="isLoading"> <tr> <td colspan="7" class="allWebsitesLoading" > <ActivityIndicator :loading-message="loadingMessage" :loading="isLoading" /> </td> </tr> </tbody> <tbody v-if="!isLoading"> <tr v-if="errorLoadingSites"> <td colspan="7"> <div class="notification system notification-error"> {{ translate('General_ErrorRequest', '', '') }} <br /><br /> {{ translate('General_NeedMoreHelp') }} <a rel="noreferrer noopener" target="_blank" href="https://matomo.org/faq/troubleshooting/faq_19489/" >{{ translate('General_Faq') }}</a> – <a rel="noreferrer noopener" target="_blank" href="https://forum.matomo.org/" >{{ translate('Feedback_CommunityHelp') }}</a> <span v-show="areAdsForProfessionalServicesEnabled"> – </span> <a rel="noreferrer noopener" target="_blank" :href="professionalHelpUrl" v-show="areAdsForProfessionalServicesEnabled" >{{ translate('Feedback_ProfessionalHelp') }}</a>. </div> </td> </tr> <MultisitesSite v-for="website in sites" :key="website.idsite" :website="website" :evolution-metric="evolutionSelector" :date-sparkline="dateSparkline" :show-sparklines="showSparklines" :metric="sortColumn" :display-revenue-column="displayRevenueColumn" > </MultisitesSite> </tbody> <tfoot> <tr> <td colspan="8" class="paging" > <div class="row"> <div class="col s3 add_new_site"> <a :href="addSiteUrl" v-if="hasSuperUserAccess" > <span class="icon-add" /> {{ translate('SitesManager_AddSite') }} </a> </div> <div class="col s6"> <span id="prev" class="previous dataTablePrevious" @click="previousPage()" v-show="!(currentPage === 0)" > <span style="cursor:pointer;">« {{ translate('General_Previous') }}</span> </span> <span class="dataTablePages"> <span id="counter"> {{ translate( 'General_Pagination', paginationLowerBound, paginationUpperBound, numberOfFilteredSites, ) }} </span> </span> <span id="next" class="next dataTableNext" @click="nextPage()" v-show="!(currentPage >= numberOfPages)" > <span style="cursor:pointer;" class="pointer" >{{ translate('General_Next') }} »</span> </span> </div> <div class="col s3"> </div> </div> </td> </tr> <tr row_id="last"> <td colspan="8" class="site_search" > <div class="row"> <div class="input-field col s12"> <input type="text" @keydown.enter="searchSite(searchTerm)" v-model="searchTerm" :placeholder="translate('Actions_SubmenuSitesearch')" /> <span class="icon-search search_ico" @click="searchSite(searchTerm)" :title="translate('General_ClickToSearch')" /> </div> </div> </td> </tr> </tfoot> </table> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import { translate, Matomo, EnrichedHeadline, ActivityIndicator, MatomoUrl, getFormattedEvolution, } from 'CoreHome'; import MultisitesSite from '../MultisitesSite/MultisitesSite.vue'; import DashboardStore from './Dashboard.store'; interface DashboardState { evolutionSelector: string; searchTerm: string; } export default defineComponent({ props: { displayRevenueColumn: Boolean, showSparklines: Boolean, dateSparkline: String, pageSize: Number, autoRefreshTodayReport: Number, }, components: { EnrichedHeadline, ActivityIndicator, MultisitesSite, }, data(): DashboardState { return { evolutionSelector: 'visits_evolution', searchTerm: '', }; }, created() { if (this.pageSize) { DashboardStore.setPageSize(this.pageSize); } this.refresh(this.autoRefreshTodayReport); }, methods: { refresh(interval?: number) { DashboardStore.setRefreshInterval(interval); DashboardStore.fetchAllSites(); }, sortBy(column: string) { DashboardStore.sortBy(column); }, previousPage() { DashboardStore.previousPage(); }, nextPage() { DashboardStore.nextPage(); }, searchSite() { DashboardStore.searchSite(this.searchTerm); }, }, computed: { hasSuperUserAccess() { return Matomo.hasSuperUserAccess; }, date() { return MatomoUrl.urlParsed.value.date as string; }, idSite() { return MatomoUrl.urlParsed.value.idSite as string; }, url() { return Matomo.piwik_url; }, period() { return Matomo.period; }, areAdsForProfessionalServicesEnabled() { return Matomo.config && Matomo.config.are_ads_enabled; }, sortColumn() { return DashboardStore.state.value.sortColumn; }, reverse() { return DashboardStore.state.value.reverse; }, smallTitleContent() { const state = DashboardStore.state.value; return translate( 'General_TotalVisitsPageviewsActionsRevenue', `<strong>${state.totalVisits}</strong>`, `<strong>${state.totalPageviews}</strong>`, `<strong>${state.totalActions}</strong>`, `<strong>${state.totalRevenue}</strong>`, ); }, smallTitleTooltip() { const state = DashboardStore.state.value; return translate( 'General_EvolutionSummaryGeneric', translate('General_NVisits', `${state.totalVisits}`), this.date, `${state.lastVisits}`, state.lastVisitsDate, getFormattedEvolution(state.totalVisits, state.lastVisits), ); }, loadingMessage() { return DashboardStore.state.value.loadingMessage; }, isLoading() { return DashboardStore.state.value.isLoading; }, errorLoadingSites() { return DashboardStore.state.value.errorLoadingSites; }, sites() { return DashboardStore.state.value.sites; }, numberOfPages() { return DashboardStore.numberOfPages.value; }, currentPage() { return DashboardStore.state.value.currentPage; }, paginationLowerBound() { return DashboardStore.paginationLowerBound.value; }, paginationUpperBound() { return DashboardStore.paginationUpperBound.value; }, numberOfFilteredSites() { return DashboardStore.numberOfFilteredSites.value; }, professionalHelpUrl() { return 'https://matomo.org/support-plans/?pk_campaign=Help&pk_medium=AjaxError&pk_content=' + 'MultiSites&pk_source=Matomo_App'; }, addSiteUrl() { return `index.php?module=SitesManager&action=index&showaddsite=1&period=${this.period}&` + `date=${this.date}&idSite=${this.idSite}`; }, }, }); </script>