|
|
@@ -0,0 +1,132 @@
|
|
|
+<x-admin::layouts>
|
|
|
+ <x-slot:title>
|
|
|
+ @lang('admin::app.reporting.search-logs.title')
|
|
|
+ </x-slot>
|
|
|
+
|
|
|
+ <div class="mb-5 flex items-center justify-between gap-4 max-sm:flex-wrap">
|
|
|
+ <p class="text-xl font-bold text-gray-800 dark:text-white">
|
|
|
+ @lang('admin::app.reporting.search-logs.title')
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <v-search-log-report>
|
|
|
+ <div class="grid gap-4">
|
|
|
+ <div class="grid grid-cols-1 gap-4 md:grid-cols-3">
|
|
|
+ @foreach (range(1, 3) as $index)
|
|
|
+ <div class="shimmer h-24 rounded-lg"></div>
|
|
|
+ @endforeach
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <x-admin::shimmer.datagrid />
|
|
|
+ </div>
|
|
|
+ </v-search-log-report>
|
|
|
+
|
|
|
+ @pushOnce('scripts')
|
|
|
+ <script
|
|
|
+ type="text/x-template"
|
|
|
+ id="v-search-log-report-template"
|
|
|
+ >
|
|
|
+ <div class="grid gap-4">
|
|
|
+ <div class="flex justify-end gap-2 max-sm:flex-wrap">
|
|
|
+ <input
|
|
|
+ type="date"
|
|
|
+ class="rounded-md border px-3 py-2 text-sm dark:border-gray-800 dark:bg-gray-900"
|
|
|
+ v-model="filters.start"
|
|
|
+ @change="getStats"
|
|
|
+ >
|
|
|
+
|
|
|
+ <input
|
|
|
+ type="date"
|
|
|
+ class="rounded-md border px-3 py-2 text-sm dark:border-gray-800 dark:bg-gray-900"
|
|
|
+ v-model="filters.end"
|
|
|
+ @change="getStats"
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="grid grid-cols-1 gap-4 md:grid-cols-3">
|
|
|
+ <div class="rounded-lg border bg-white p-5 dark:border-gray-800 dark:bg-gray-900">
|
|
|
+ <p class="text-sm text-gray-600 dark:text-gray-300">
|
|
|
+ @lang('admin::app.reporting.search-logs.total-searches')
|
|
|
+ </p>
|
|
|
+ <p class="mt-2 text-3xl font-bold">@{{ statistics.total }}</p>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="rounded-lg border bg-white p-5 dark:border-gray-800 dark:bg-gray-900">
|
|
|
+ <p class="text-sm text-gray-600 dark:text-gray-300">
|
|
|
+ @lang('admin::app.reporting.search-logs.zero-results')
|
|
|
+ </p>
|
|
|
+ <p class="mt-2 text-3xl font-bold">@{{ statistics.zeroResult }}</p>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="rounded-lg border bg-white p-5 dark:border-gray-800 dark:bg-gray-900">
|
|
|
+ <p class="text-sm text-gray-600 dark:text-gray-300">
|
|
|
+ @lang('admin::app.reporting.search-logs.corrected-searches')
|
|
|
+ </p>
|
|
|
+ <p class="mt-2 text-3xl font-bold">@{{ statistics.corrected }}</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="rounded-lg border bg-white p-5 dark:border-gray-800 dark:bg-gray-900">
|
|
|
+ <p class="mb-3 font-semibold">
|
|
|
+ @lang('admin::app.reporting.search-logs.top-queries')
|
|
|
+ </p>
|
|
|
+
|
|
|
+ <div
|
|
|
+ v-if="statistics.topQueries.length"
|
|
|
+ class="grid gap-2"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ v-for="query in statistics.topQueries"
|
|
|
+ class="flex justify-between border-b pb-2 last:border-0 dark:border-gray-800"
|
|
|
+ >
|
|
|
+ <span>@{{ query.query_text }}</span>
|
|
|
+ <span>@{{ query.uses }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <p v-else class="text-sm text-gray-500">
|
|
|
+ @lang('admin::app.reporting.search-logs.no-records')
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <x-admin::datagrid :src="route('admin.reporting.search_logs.index')" />
|
|
|
+ </div>
|
|
|
+ </script>
|
|
|
+
|
|
|
+ <script type="module">
|
|
|
+ app.component('v-search-log-report', {
|
|
|
+ template: '#v-search-log-report-template',
|
|
|
+
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ filters: {
|
|
|
+ start: "{{ $startDate->format('Y-m-d') }}",
|
|
|
+ end: "{{ $endDate->format('Y-m-d') }}",
|
|
|
+ },
|
|
|
+
|
|
|
+ statistics: {
|
|
|
+ total: 0,
|
|
|
+ zeroResult: 0,
|
|
|
+ corrected: 0,
|
|
|
+ topQueries: [],
|
|
|
+ },
|
|
|
+ };
|
|
|
+ },
|
|
|
+
|
|
|
+ mounted() {
|
|
|
+ this.getStats();
|
|
|
+ },
|
|
|
+
|
|
|
+ methods: {
|
|
|
+ getStats() {
|
|
|
+ this.$axios.get("{{ route('admin.reporting.search_logs.stats') }}", {
|
|
|
+ params: this.filters,
|
|
|
+ }).then(({ data }) => {
|
|
|
+ this.statistics = data.statistics;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
+ });
|
|
|
+ </script>
|
|
|
+ @endPushOnce
|
|
|
+</x-admin::layouts>
|