| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- <template>
- <div class="app-container home">
- <div class="box01">
- <div class="top-main">
- <span>商品扫码分析</span>
- <el-button type="primary" @click="showHandle">扫描日志</el-button>
- </div>
- <div class="chart-box">
- <div class="l01">
- <div class="title">
- <span>总扫描次数</span>
- </div>
- <div class="show-main col">
- <span class="num">{{ scanNum }}</span>
- <div class="msg">最近{{time}}更新</div>
- </div>
- </div>
- <div class="line">
- <div class="title">
- <span>扫码时间分布</span>
- <el-select v-model="select" style="width: 120px;" placeholder="请选择" @change="loadLine">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </div>
- <div class="line-chart" id="line-index"></div>
- </div>
- </div>
- </div>
- <div class="box02">
- <div class="con">
- <div class="title">
- <span>广告</span>
- </div>
- <div class="show-main">
- <div>
- <span class="num">{{ adNum }}</span>
- <span class="spec">个</span>
- </div>
- </div>
- </div>
- <div class="con">
- <div class="title">
- <span>设备</span>
- <div class="eqiup-state">
- <div class="success">正常使用:{{suc}}台</div>
- <div class="disad">禁止使用:{{dis}}台</div>
- </div>
- </div>
- <div class="show-main">
- <div>
- <span class="num">{{ equipNum }}</span>
- <span class="spec">台</span>
- </div>
- </div>
- </div>
- </div>
- <scanModal ref="modalView" />
- </div>
- </template>
- <script setup name="Index">
- import {equipTotal,scanTotal,planTotal,scanTime,scanLog} from '@/api/base/home'
- import { computed,getCurrentInstance,ref,markRaw,shallowRef,defineEmits } from "vue";
- const { proxy } = getCurrentInstance();
- import * as echarts from 'echarts';
- import scanModal from './components/scanModal.vue';
- const scanNum = ref(0);
- const time = ref('');
- const adNum = ref(0);
- const equipNum = ref(0);
- const suc = ref(0)
- const dis = ref(0)
- const select = ref('month')
- const options = ref([
- {
- label:'日',
- value:'day'
- },
- {
- label:'月',
- value:'month'
- },
- {
- label:'年',
- value:'year'
- }
- ])
- const showHandle = () => {
- proxy.$refs.modalView.setShow(true)
- }
- const initLine = data => {
- let chartDom = document.getElementById('line-index');
- let myChart = echarts.init(chartDom);
- let option;
- let dataX = [];
- let dataY = [];
- for(let i = data.length - 1; i >= 0; i--){
- let item = data[i];
- dataX.push(item.time);
- dataY.push(item.count)
- }
- option = {
- xAxis: {
- type: 'category',
- data: dataX
- },
- yAxis: {
- type: 'value'
- },
- tooltip: {
- trigger: 'axis'
- },
- series: [
- {
- data: dataY,
- type: 'line'
- }
- ]
- };
- option && myChart.setOption(option);
- }
- const getEquip = () => {
- scanTotal().then(res => {
- scanNum.value = res.data.total;
- time.value = res.data.time;
- }).catch(() =>{})
- }
- const getAdCount = () => {
- planTotal().then(res => {
- adNum.value = res.data.total;
- time.value = res.data.time;
- }).catch(() =>{})
- }
- const getEquipTotal = () => {
- equipTotal().then(res => {
- equipNum.value = res.data.total;
- dis.value = res.data[1]
- suc.value = res.data[0]
- }).catch(() =>{})
- }
- const loadLine = () => {
- scanTime({option:select.value}).then(res => {
- initLine(res.data)
- }).catch(() =>{})
- }
- getEquip();
- loadLine();
- getAdCount();
- getEquipTotal();
- </script>
- <style scoped lang="scss">
- .home {
- width: calc(100% - 64px);
- height: calc(100% - 64px);
- box-sizing: border-box;
- margin: 32px;
- .box01{
- width: 100%;
- height: calc(60% - 16px);
- box-sizing: border-box;
- padding: 0 24px 24px;
- margin-bottom: 16px;
- border: solid 1px #BBB;
- .top-main{
- width: 100%;
- height: 70px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- border-bottom: solid 1px #BBB;
- box-sizing: border-box;
- margin-bottom: 16px;
- >span{
- font-size: 28px;
- font-weight: 700;
- }
- }
- .chart-box{
- width: 100%;
- height: calc(100% - 86px);
- display: flex;
- .l01{
- width: 40%;
- height: 100%;
- box-sizing: border-box;
- border-right: solid 1px #BBB;
- }
- .line{
- width: 60%;
- height: calc(100% - 50px);
- box-sizing: border-box;
- padding-left: 24px;
- .line-chart{
- height: 100%;
- width: 100%;
- }
- }
- }
- }
- .box02{
- width: 100%;
- height: 40%;
- box-sizing: border-box;
- padding: 16px;
- border: solid 1px #BBB;
- display: flex;
- .eqiup-state{
- font-size: 12px;
- .success{
- color: #00AE66;
- padding-bottom: 8px;
- }
- .disad{
- color: #f00;
- }
- }
-
- .con{
- width: 50%;
- height: 100%;
- box-sizing: border-box;
- .spec{
- font-size: 18px;
- padding-left: 16px;
- }
- }
- .con:first-child{
- padding-right: 24px;
- border-right: solid 1px #BBB;
- }
- .con:last-child{
- padding-left: 24px;
- }
- }
- .title{
- height: 50px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- width: 100%;
- >span{
- font-size: 18px;
- }
- }
- .show-main{
- height: calc(100% - 50px);
- width: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
- .num{
- font-size: 72px;
- }
- .msg{
- font-size: 14px;
- color: #666;
- }
- }
- .col{
- flex-direction: column;
- }
- }
- </style>
|