123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <template>
- <div class="p-4">
- <a-card :bordered="false" style="height: 100%">
- <a-tabs v-model:activeKey="activeKey" animated @change="tabChange">
- <a-tab-pane key="bar" tab="柱状图">
- <a-row>
- <a-col :span="10">
- <a-radio-group v-model:value="barType" @change="statisticst">
- <a-radio-button value="year">按年统计</a-radio-button>
- <a-radio-button value="month">按月统计</a-radio-button>
- <a-radio-button value="category">按类别统计</a-radio-button>
- <a-radio-button value="cabinet">按柜号统计</a-radio-button>
- </a-radio-group>
- </a-col>
- </a-row>
- <Bar :chartData="dataSource" height="50vh"></Bar>
- </a-tab-pane>
- <a-tab-pane key="pie" tab="饼状图" force-render>
- <a-row :gutter="24">
- <a-col :span="10">
- <a-radio-group v-model:value="pieType" @change="statisticst">
- <a-radio-button value="year">按年统计</a-radio-button>
- <a-radio-button value="month">按月统计</a-radio-button>
- <a-radio-button value="category">按类别统计</a-radio-button>
- <a-radio-button value="cabinet">按柜号统计</a-radio-button>
- </a-radio-group>
- </a-col>
- <Pie :chartData="dataSource" height="40vh"></Pie>
- </a-row>
- </a-tab-pane>
- </a-tabs>
- </a-card>
- </div>
- </template>
- <script lang="ts" setup>
- import { defHttp } from '/@/utils/http/axios';
- import { ref, unref, reactive } from 'vue';
- import Bar from '/@/components/chart/Bar.vue';
- import Pie from '/@/components/chart/Pie.vue';
- const activeKey = ref('bar');
- const barType = ref('year');
- const pieType = ref('year');
- const dataSource = ref([]);
- const url = reactive({
- getYearCountInfo: '/mock/api/report/getYearCountInfo',
- getMonthCountInfo: '/mock/api/report/getMonthCountInfo',
- getCntrNoCountInfo: '/mock/api/report/getCntrNoCountInfo',
- getCabinetCountInfo: '/mock/api/report/getCabinetCountInfo',
- });
- async function loadDate(url, type, params) {
- const res = await defHttp.get({ url, params }, { isTransformResponse: false, errorMessageMode: 'none' });
- if (res.success) {
- dataSource.value = [];
- switch (type) {
- case 'year':
- getYearCountSource(res.result);
- break;
- case 'month':
- getMonthCountSource(res.result);
- break;
- case 'category':
- getCategoryCountSource(res.result);
- break;
- case 'cabinet':
- getCabinetCountSource(res.result);
- break;
- default:
- break;
- }
- }
- }
- function getYearCountSource(data) {
- for (let i = 0; i < data.length; i++) {
- dataSource.value.push({
- name: `${data[i].year}年`,
- value: data[i].yearcount,
- });
- }
- }
- function getMonthCountSource(data) {
- for (let i = 0; i < data.length; i++) {
- dataSource.value.push({
- name: `${data[i].month}`,
- value: data[i].monthcount,
- });
- }
- }
- function getCategoryCountSource(data) {
- for (let i = 0; i < data.length; i++) {
- dataSource.value.push({
- name: `${data[i].classifyname}`,
- value: data[i].cntrnocount,
- });
- }
- }
- function getCabinetCountSource(data) {
- for (let i = 0; i < data.length; i++) {
- dataSource.value.push({
- name: `${data[i].cabinetname}`,
- value: data[i].cabinetcocunt,
- });
- }
- }
- // 选择统计类别
- function statisticst(e) {
- if (unref(activeKey) === 'pie') {
- loadDate(getUrl(unref(pieType)), unref(pieType), {});
- } else {
- loadDate(getUrl(unref(barType)), unref(barType), {});
- }
- }
- function getUrl(type) {
- if (type === 'year') {
- return url.getYearCountInfo;
- }
- if (type === 'month') {
- return url.getMonthCountInfo;
- }
- if (type === 'category') {
- return url.getCntrNoCountInfo;
- }
- if (type === 'cabinet') {
- return url.getCabinetCountInfo;
- }
- }
- //tab切换
- function tabChange(key) {
- console.log('切换的key:', key);
- }
- loadDate(url.getYearCountInfo, 'year', {});
- </script>
|