218 lines
6.4 KiB
Vue

<template>
<el-card>
<template #header>今日</template>
<el-row class="flex">
<!-- <el-col class="flex" style="flex:1" v-for="(item, index) in statisticLists" :key="index">
<img class="w-[50px] h-[50px] mr-2" :src="item.src" />
<div>
<el-statistic :title="item.title" :value="item.value()" />
<p style="font-size: 11px;color: #FBCE6B;" v-if="item.footer">{{ item.footer }}</p>
</div>
</el-col> -->
<div class="flex " style="flex:1" v-for="(item, index) in statisticLists" :key="index">
<div class="mr-2">
<img class="w-[50px] h-[50px] mr-2" :src="item.src" />
</div>
<div>
<div class="text-info">{{ item.title }}</div>
<div class="text-6xl">{{ item.value() }}</div>
</div>
</div>
</el-row>
</el-card>
<el-card>
<template #header>
<div class="flex justify-between">
<span>累计</span>
<el-date-picker v-model="month" type="month" placeholder="选择月份" @change="monthChange"
value-format="YYYY-MM" />
</div>
</template>
<el-row class="flex">
<div class="flex " style="flex:1" v-for="(item, index) in statisticLists2" :key="index">
<div class="mr-2">
<img class="w-[50px] h-[50px] mr-2" :src="item.src" />
</div>
<div>
<div class="text-info">{{ item.title }}</div>
<div class="text-6xl">{{ item.value() }}</div>
</div>
</div>
</el-row>
</el-card>
<el-card v-loading="loading">
<template #header>
营业趋势
</template>
<v-charts style="height: 350px" :option="visitorOption" :autoresize="true" />
</el-card>
</template>
<script lang="ts" setup name="manageProjectLists">
import { ref, reactive, onMounted } from "vue"
import { apidbusinessStatistics } from '@/api/statistics'
import vCharts from 'vue-echarts'
const month = ref()
const loading = ref(true)
const formData = ref({
today: {},
all: {},
time: {},
})
const statisticLists = reactive([
{
src: 'https://ceshi-engineering.lihaink.cn/uploads/files/20240604/20240604171701552002039.png',
title: "营业额",
value: () => {
return String(formData.value.today.turnover_today || 0)
}
},
{
src: "https://ceshi-engineering.lihaink.cn/uploads/files/20240604/2024060417170150a511510.png",
title: "利润",
value: () => {
return String(formData.value.today.profit_today || 0)
}
},
{
src: 'https://ceshi-engineering.lihaink.cn/uploads/files/20240604/202406041717013a08c6793.png',
title: "成本",
value: () => {
return String(formData.value.today.cost_today || 0)
}
},
{
src: 'https://ceshi-engineering.lihaink.cn/uploads/files/20240604/20240604171701594ff8897.png',
title: "现金收银金额",
value: () => {
return String(formData.value.today.cash_today || 0)
}
},
{
src: 'https://ceshi-engineering.lihaink.cn/uploads/files/20240604/202406041717018a22e1161.png',
title: "保证金",
value: () => {
return String(formData.value.today.deposit_today || 0)
},
footer: "当保证金金额补缴齐后不再扣除"
},
])
const statisticLists2 = reactive([
{
src: 'https://ceshi-engineering.lihaink.cn/uploads/files/20240604/20240604171701552002039.png',
title: "营业额",
value: () => {
return String(formData.value.all.turnover_all || 0)
}
},
{
src: "https://ceshi-engineering.lihaink.cn/uploads/files/20240604/2024060417170150a511510.png",
title: "利润",
value: () => {
return String(formData.value.all.profit_all || 0)
}
},
{
src: 'https://ceshi-engineering.lihaink.cn/uploads/files/20240604/20240604171701fbb680115.png',
title: "现金收银金额",
value: () => {
return String(formData.value.all.cash_all || 0)
}
},
{
src: 'https://ceshi-engineering.lihaink.cn/uploads/files/20240604/20240604171701594ff8897.png',
title: "消耗余额",
value: () => {
return String(formData.value.all.cost_all || 0)
}
},
{
src: 'https://ceshi-engineering.lihaink.cn/uploads/files/20240604/202406041717018a22e1161.png',
title: "保证金",
value: () => {
return String(formData.value.all.deposit_all || 0)
},
footer: "当保证金金额补缴齐后不再扣除"
},
])
const visitorOption = reactive({
tooltip: {
trigger: 'axis'
},
xAxis: {
type: 'category',
data: []
},
yAxis: {
type: 'value'
},
series: [
{
data: [],
type: 'line',
smooth: true,
name: "营业额"
},
{
data: [],
type: 'line',
smooth: true,
name: '利润'
},
{
data: [],
type: 'line',
smooth: true,
name: '成本'
},
{
data: [],
type: 'line',
smooth: true,
name: '保证金'
},
{
data: [],
type: 'line',
smooth: true,
name: '现金'
}
]
})
const getData = async () => {
let res = await apidbusinessStatistics({ month: month.value })
formData.value.all = res.all
formData.value.today = res.today
let data = res.time
visitorOption.xAxis.data = Object.keys(data).reverse()
for (let key in data) {
visitorOption.series[0].data.push(data[key].turnover_today)
visitorOption.series[1].data.push(data[key].profit_today)
visitorOption.series[2].data.push(data[key].cost_today)
visitorOption.series[3].data.push(data[key].deposit_today)
visitorOption.series[3].data.push(data[key].cash_today)
}
loading.value = false
}
const monthChange = () => {
getData()
}
onMounted(() => {
getData()
})
</script>