<script setup>
|
import { getCurrentInstance, ref, onMounted, reactive } from 'vue';
|
import { get, post } from '@/utils/request.js'
|
import * as echarts from "echarts";
|
const context = getCurrentInstance()?.appContext.config.globalProperties;
|
|
let chartPie = null;
|
const chartPieContainer = ref(null);
|
let chartLine = null;
|
const chartLineContainer = ref(null);
|
|
function getPieOptions() {
|
post('/api/charts/loc/use', {}).then(resp => {
|
let result = resp.data;
|
if (result.code == 200) {
|
let data = result.data;
|
|
let pieOptions = {
|
title: {
|
text: '库位使用比例',
|
left: 'center',
|
top: '0%'
|
},
|
tooltip: {
|
trigger: 'item',
|
top: '0%'
|
},
|
grid: {
|
top: '0%',
|
left: '3%',
|
right: '4%',
|
bottom: '3%',
|
containLabel: true
|
},
|
// legend: {
|
// orient: 'vertical',
|
// left: 'left'
|
// },
|
series: [
|
{
|
type: 'pie',
|
radius: '70%',
|
data: data,
|
emphasis: {
|
itemStyle: {
|
shadowBlur: 10,
|
shadowOffsetX: 0,
|
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
}
|
}
|
}
|
]
|
}
|
|
chartPie.setOption(pieOptions);
|
|
}
|
})
|
}
|
|
function getLineOptions() {
|
post('/api/charts/loc/line', {}).then(resp => {
|
let result = resp.data;
|
if (result.code == 200) {
|
let data = result.data;
|
|
let lineOptions = {
|
title: {
|
text: '日出入库数量',
|
left: 'center',
|
},
|
tooltip: {
|
trigger: 'axis'
|
},
|
legend: {
|
data: ['入库数量', '出库数量'],
|
top: '10%'
|
},
|
grid: {
|
top: '20%',
|
left: '3%',
|
right: '4%',
|
bottom: '3%',
|
containLabel: true
|
},
|
xAxis: {
|
type: 'category',
|
boundaryGap: false,
|
data: data.days
|
},
|
yAxis: {
|
type: 'value'
|
},
|
series: [
|
{
|
name: '入库数量',
|
type: 'line',
|
data: data.in.value,
|
smooth: true
|
},
|
{
|
name: '出库数量',
|
type: 'line',
|
data: data.out.value,
|
smooth: true
|
}
|
]
|
}
|
|
chartLine.setOption(lineOptions);
|
|
}
|
})
|
}
|
|
function initChart() {
|
chartPie = echarts.init(chartPieContainer.value);
|
chartPie.setOption({
|
type: Object,
|
required: true
|
})
|
|
chartLine = echarts.init(chartLineContainer.value);
|
chartLine.setOption({
|
type: Object,
|
required: true
|
})
|
}
|
|
const information = reactive({
|
inCount: 0,
|
outCount: 0,
|
totalCount: 0,
|
matCount: 0,
|
});
|
function getInformation() {
|
post('/api/charts/information', {}).then(resp => {
|
let result = resp.data;
|
if (result.code == 200) {
|
let data = result.data;
|
information.inCount = data.inCount;
|
information.outCount = data.outCount;
|
information.totalCount = data.totalCount;
|
information.matCount = data.matCount;
|
}
|
})
|
}
|
|
const informationTop = reactive({
|
topIn: [],
|
topOut: [],
|
});
|
function getInformationTop() {
|
post('/api/charts/information/top', {}).then(resp => {
|
let result = resp.data;
|
if (result.code == 200) {
|
let data = result.data;
|
informationTop.topIn = data.topIn;
|
informationTop.topOut = data.topOut;
|
}
|
})
|
}
|
|
onMounted(() => {
|
initChart()
|
getPieOptions()
|
getLineOptions()
|
getInformation()
|
getInformationTop()
|
})
|
|
</script>
|
|
<script>
|
export default {
|
name: '主页'
|
}
|
</script>
|
|
<template>
|
<div style="display: flex;">
|
<div style="width: 24%;margin-right: 20px;">
|
<a-card>
|
<a-statistic title="今日入出库" :value="information.totalCount" :value-style="{ color: '#3f8600' }"
|
style="margin-right: 50px">
|
<template #prefix>
|
<!-- <arrow-up-outlined /> -->
|
</template>
|
</a-statistic>
|
</a-card>
|
</div>
|
<div style="width: 24%;margin-right: 20px;">
|
<a-card>
|
<a-statistic title="今日入库" :value="information.inCount" :value-style="{ color: '#3f8600' }"
|
style="margin-right: 50px">
|
<template #prefix>
|
<!-- <arrow-up-outlined /> -->
|
</template>
|
</a-statistic>
|
</a-card>
|
</div>
|
<div style="width: 24%;margin-right: 20px;">
|
<a-card>
|
<a-statistic title="今日出库" :value="information.outCount" :value-style="{ color: '#3f8600' }"
|
style="margin-right: 50px">
|
<template #prefix>
|
<!-- <arrow-up-outlined /> -->
|
</template>
|
</a-statistic>
|
</a-card>
|
</div>
|
<div style="width: 24%;margin-right: 20px;">
|
<a-card>
|
<a-statistic title="商品总数" :value="information.matCount" :value-style="{ color: '#3f8600' }"
|
style="margin-right: 50px">
|
<template #prefix>
|
<!-- <arrow-up-outlined /> -->
|
</template>
|
</a-statistic>
|
</a-card>
|
</div>
|
</div>
|
<div style="display: flex;margin-top: 20px;">
|
<div style="width: 49%;margin-right: 20px;">
|
<a-card title="今日入库Top10">
|
<div v-if="informationTop.topIn.length == 0">
|
<a-empty />
|
</div>
|
<div v-else v-for="(item, index) in informationTop.topIn" :key="index"
|
style="display: flex;justify-content: space-between;margin-top: 10px;">
|
<div>{{ item.matnr }} - {{ item.maktx }}</div>
|
<div>
|
<a-tag v-if="index == 0" color="#87d068">{{ item.count }}</a-tag>
|
<a-tag v-else color="#2db7f5">{{ item.count }}</a-tag>
|
</div>
|
</div>
|
</a-card>
|
</div>
|
<div style="width: 49%;margin-right: 20px;">
|
<a-card title="今日出库Top10">
|
<div v-if="informationTop.topOut.length == 0">
|
<a-empty />
|
</div>
|
<div v-else v-for="(item, index) in informationTop.topOut" :key="index"
|
style="display: flex;justify-content: space-between;margin-top: 10px;">
|
<div>{{ item.matnr }} - {{ item.maktx }}</div>
|
<div>
|
<a-tag v-if="index == 0" color="#87d068">{{ item.count }}</a-tag>
|
<a-tag v-else color="#2db7f5">{{ item.count }}</a-tag>
|
</div>
|
</div>
|
</a-card>
|
</div>
|
</div>
|
<div style="display: flex;margin-top: 20px;">
|
<div style="width: 49%;margin-right: 20px;">
|
<a-card>
|
<div ref="chartPieContainer" style="width: 100%;height: 400px;"></div>
|
</a-card>
|
</div>
|
<div style="width: 49%;">
|
<a-card>
|
<div ref="chartLineContainer" style="width: 90%;height: 400px;"></div>
|
</a-card>
|
</div>
|
<!-- <EChartView ref="chartChild2" /> -->
|
</div>
|
</template>
|