feat: 完善仪表盘热门模块区块内容

1.完善仪表盘热门模块区块内容
2.sys_log 表增加 module 字段索引
3.优化总计区块图标
This commit is contained in:
2023-09-09 11:28:44 +08:00
parent 3440aa4faa
commit 83b2e2a7c0
27 changed files with 200 additions and 68 deletions

View File

@@ -5,8 +5,8 @@
:span="{ xs: 12, sm: 12, md: 12, lg: 12, xl: 12, xxl: 6 }"
>
<a-space>
<a-avatar :size="54" class="col-avatar">
<svg-icon icon-class="popularity" />
<a-avatar :size="50" class="col-avatar">
<img :src="PvCountIcon" alt="PvCountIcon" />
</a-avatar>
<a-statistic
:title="$t('workplace.pvCount')"
@@ -26,8 +26,8 @@
:span="{ xs: 12, sm: 12, md: 12, lg: 12, xl: 12, xxl: 6 }"
>
<a-space>
<a-avatar :size="54" class="col-avatar">
<svg-icon icon-class="same-city" />
<a-avatar :size="50" class="col-avatar">
<img :src="IpCountIcon" alt="IpCountIcon" />
</a-avatar>
<a-statistic
:title="$t('workplace.ipCount')"
@@ -47,8 +47,8 @@
:span="{ xs: 12, sm: 12, md: 12, lg: 12, xl: 12, xxl: 6 }"
>
<a-space>
<a-avatar :size="54" class="col-avatar">
<svg-icon icon-class="hot" />
<a-avatar :size="50" class="col-avatar">
<img :src="TodayPvCountIcon" alt="TodayPvCountIcon" />
</a-avatar>
<a-statistic
:title="$t('workplace.todayPvCount')"
@@ -69,8 +69,8 @@
style="border-right: none"
>
<a-space>
<a-avatar :size="54" class="col-avatar">
<svg-icon icon-class="data" />
<a-avatar :size="50" class="col-avatar">
<img :src="NewPvFromYesterdayIcon" alt="NewPvFromYesterdayIcon" />
</a-avatar>
<a-statistic
:title="$t('workplace.newPvFromYesterday')"
@@ -102,6 +102,10 @@
<script lang="ts" setup>
import { ref } from 'vue';
import { DashboardTotalRecord, getTotal } from '@/api/common/dashboard';
import PvCountIcon from '@/assets/icons/png/popularity.png';
import IpCountIcon from '@/assets/icons/png/same-city.png';
import TodayPvCountIcon from '@/assets/icons/png/hot.png';
import NewPvFromYesterdayIcon from '@/assets/icons/png/data.png';
const totalData = ref<DashboardTotalRecord>({
pvCount: 0,

View File

@@ -6,61 +6,50 @@
:body-style="{ padding: '17px 20px 21px 20px' }"
>
<template #title>
{{ $t('workplace.popularContent') }}
</template>
<template #extra>
<a-link>{{ $t('workplace.viewMore') }}</a-link>
{{ $t('workplace.popularModule') }}
</template>
<a-space direction="vertical" :size="10" fill>
<a-radio-group
v-model:model-value="type"
type="button"
@change="typeChange as any"
>
<a-radio value="text">
{{ $t('workplace.popularContent.text') }}
</a-radio>
<a-radio value="image">
{{ $t('workplace.popularContent.image') }}
</a-radio>
<a-radio value="video">
{{ $t('workplace.popularContent.video') }}
</a-radio>
</a-radio-group>
<a-table
:data="renderList"
:data="dataList"
:pagination="false"
:bordered="false"
:scroll="{ x: '100%', y: '264px' }"
:scroll="{ x: '100%', y: '310px' }"
>
<template #columns>
<a-table-column title="排名" data-index="key"></a-table-column>
<a-table-column title="内容标题" data-index="title">
<a-table-column title="排名">
<template #cell="{ rowIndex }">
{{ rowIndex + 1 }}
</template>
</a-table-column>
<a-table-column title="模块" data-index="module">
<template #cell="{ record }">
<a-typography-paragraph
:ellipsis="{
rows: 1,
}"
>
{{ record.title }}
{{ record.module }}
</a-typography-paragraph>
</template>
</a-table-column>
<a-table-column title="点击量" data-index="clickNumber">
</a-table-column>
<a-table-column title="总浏览量" data-index="pvCount" />
<a-table-column
title="日涨幅"
data-index="increases"
data-index="newPvFromYesterday"
:sortable="{
sortDirections: ['ascend', 'descend'],
}"
>
<template #cell="{ record }">
<div class="increases-cell">
<span>{{ record.increases }}%</span>
<span>{{ record.newPvFromYesterday }}%</span>
<icon-caret-up
v-if="record.increases !== 0"
style="color: #f53f3f; font-size: 8px"
v-if="record.newPvFromYesterday > 0"
style="color: rgb(var(--red-6)); font-size: 8px"
/>
<icon-caret-down
v-if="record.newPvFromYesterday < 0"
style="color: rgb(var(--green-6)); font-size: 8px"
/>
</div>
</template>
@@ -75,27 +64,27 @@
<script lang="ts" setup>
import { ref } from 'vue';
import useLoading from '@/hooks/loading';
import { queryPopularList } from '@/api/common/dashboard';
import { listPopularModule } from '@/api/common/dashboard';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
const type = ref('text');
const { loading, setLoading } = useLoading();
const renderList = ref<TableData[]>();
const fetchData = async (contentType: string) => {
const dataList = ref<TableData[]>();
/**
* 查询热门模块列表
*/
const getList = async () => {
try {
setLoading(true);
const { data } = await queryPopularList({ type: contentType });
renderList.value = data;
const { data } = await listPopularModule();
dataList.value = data;
} catch (err) {
// you can report use errorHandler or other
} finally {
setLoading(false);
}
};
const typeChange = (contentType: string) => {
fetchData(contentType);
};
fetchData('text');
getList();
</script>
<style scoped lang="less">

View File

@@ -10,7 +10,7 @@
<a-grid-item
:span="{ xs: 24, sm: 24, md: 24, lg: 12, xl: 12, xxl: 12 }"
>
<PopularContent />
<PopularModule />
</a-grid-item>
<a-grid-item
:span="{ xs: 24, sm: 24, md: 24, lg: 12, xl: 12, xxl: 12 }"
@@ -45,7 +45,7 @@
import Banner from './components/banner.vue';
import DataPanel from './components/data-panel.vue';
import ContentChart from './components/content-chart.vue';
import PopularContent from './components/popular-content.vue';
import PopularModule from './components/popular-module.vue';
import CategoriesPercent from './components/categories-percent.vue';
import RecentlyVisited from './components/recently-visited.vue';
import QuickOperation from './components/quick-operation.vue';

View File

@@ -23,10 +23,7 @@ export default {
'workplace.loadMore': 'More',
'workplace.viewMore': 'More',
'workplace.contentData': 'Content Data',
'workplace.popularContent': 'Popular Content',
'workplace.popularContent.text': 'text',
'workplace.popularContent.image': 'image',
'workplace.popularContent.video': 'video',
'workplace.popularModule': 'Popular Module',
'workplace.categoriesPercent': 'Categories Percent',
'workplace.unit.pecs': 'pecs',
'workplace.unit.times': 'times',

View File

@@ -23,10 +23,7 @@ export default {
'workplace.loadMore': '加载更多',
'workplace.viewMore': '查看更多',
'workplace.contentData': '内容数据',
'workplace.popularContent': '线上热门内容',
'workplace.popularContent.text': '文本',
'workplace.popularContent.image': '图片',
'workplace.popularContent.video': '视频',
'workplace.popularModule': '热门模块',
'workplace.categoriesPercent': '内容类型占比',
'workplace.unit.pecs': '个',
'workplace.unit.times': '次',