| | |
| | | <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> |
| | | <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>
|