element-plus+vue3+echarts实现自适应可视化大屏

安装 autofit.js 、echarts
npm install --save autofit.js

<template>
  <div class="content">
    <div class="zerofloor">
      <div class="datatitle" id="datatitle">生产作业可视化大屏</div>
      <div class="dashboardquery" id="dashboardquery">
        <div class="dashboarddate">
          <el-date-picker style="width: 130px" v-model="todaydate" @change="handleChangedate" :clearable="false" :default-value="new Date()" type="date"></el-date-picker>
          <el-cascader ref="cascaderRef" @change="handleChangecascader" v-model="warehouseSelect" style="width: 230px" :options="warehouseOptions" :props="cascaderprops" />
          <el-select v-model="dimension" placeholder="Select" style="width: 130px" @change="handleChangeDimension">
            <el-option v-for="item in dimensionOptions" :key="item.value" :label="item.label" :value="item.value" />
          </el-select>
        </div>
      </div>
    </div>
    <div class="firstfloor">
      <el-row>
        <div class="data-progress" id="data-progress">
          <div class="progress" v-for="item in orderOptions" :key="item.index">
            <div class="leftprogress">
              <el-progress type="circle" :percentage="item.percentage" :stroke-width="10" :width="progresswidth" :color="colors">
                <template #default="{ percentage }">
                  <span class="percentage-value">{{ percentage }}%</span>
                  <br />
                  <span class="percentage-label">{{ t('page.完成率') }}</span>
                </template>
              </el-progress>
            </div>
            <div class="rightprogress">
              <span class="progress-text">{{ item.name }}</span>
              <br />
              <span class="progress-text">{{ item.value }}</span>
            </div>
          </div>
        </div>
      </el-row>
    </div>
    <div class="secondfloor">
      <el-row>
        <el-col :span="12">
          <div class="box-card">
            <span class="cardhead"></span>
            <span class="cardtitle">要货单</span>
            <br />
            <div id="requireGoodsPie" style="width: 100%"></div>
          </div>
        </el-col>
        <el-col :span="12">
          <div class="box-card">
            <span class="cardhead"></span>
            <span class="cardtitle">调拨订单/销售订单</span>
            <br />
            <div id="transOrSaleOrderPie" style="width: 100%"></div>
          </div>
        </el-col>
      </el-row>
    </div>
    <div class="thirdfloor">
      <el-row>
        <el-col :span="12">
          <div class="jianxuan">
            <div class="box-card">
              <span class="cardhead"></span>
              <span class="cardtitle">发货通知单</span>
              <br />
              <div id="outOrderPie" style="width: 100%"></div>
            </div>
          </div>
        </el-col>
        <el-col :span="12">
          <div class="peisong">
            <div class="box-card">
              <span class="cardhead"></span>
              <span class="cardtitle">库存调拨入库单</span>
              <br />
              <div id="stockTransInPie" style="width: 100%"></div>
            </div>
          </div>
        </el-col>
      </el-row>
    </div>
    <div class="fourthfloor">
      <el-row>
        <el-col :span="24">
          <div class="quehuo">
            <div class="box-card">
              <span class="cardhead"></span>
              <span class="cardtitle">配送单</span>
              <div>
                <!-- 配送单状态 -->
                <div id="delieveryOrderPie" style="width: 50%; float: left; background-color: #0b2545"></div>
                <!-- 轨迹 -->
                <div id="delieveryTrackPie" style="width: 50%; float: left; background-color: #0b2545"></div>
              </div>
            </div>
          </div>
        </el-col>
      </el-row>
    </div>
  </div>
</template>

<script lang="ts" setup>
import { reactive, onMounted, ref, watch } from 'vue'
import { i18n } from '@/locales/setupI18n'
import { success, confirmBox } from 'fl-ui'
import { warningbox, errorbox } from '@/utils'
import * as echarts from 'echarts'
import autofit from 'autofit.js'
import { Download } from '@element-plus/icons-vue'
import { QueryDashboardOptions, QueryDashboardData } from '@/api/datacenter/datadashboard'
import { fwSelect, fwConstant, fwWarehouseMember, fwTempPage } from '@/components'
import { color } from 'html2canvas/dist/types/css/types/color'
const { t } = i18n.global as any

let leftName = ref('')
let progresswidth = 90
let pageheight = window.innerHeight // 获取窗口高度
let cardheight = 0 // 获取窗口高度
const colors = [
  { color: '#f56c6c', percentage: 20 },
  { color: '#e6a23c', percentage: 40 },
  { color: '#5cb87a', percentage: 60 },
  { color: '#1989fa', percentage: 80 },
  { color: '#6f7ad3', percentage: 100 },
]

const cascaderprops = {
  checkStrictly: true,
}

const warehouseOptions = ref()
// const orderOptions = ref()
const cascaderRef = ref<any>(null)

// 入参
let todaydate = ref()
let dimension = ref()
const dimensionOptions = [
  {
    value: '1',
    label: '单据维度',
  },
  {
    value: '2',
    label: '件数维度',
  },
]

const orderOptions = ref([
  {
    index: 0,
    value: 0,
    name: '要货单待生成订单',
    percentage: '0',
  },
  {
    index: 0,
    value: 0,
    name: '订单待生成发货单',
    percentage: '0',
  },
  {
    index: 0,
    value: 0,
    name: '发货单待发货通知',
    percentage: '0',
  },
  {
    index: 0,
    value: 0,
    name: '调拨订单待生成配送单',
    percentage: '0',
  },
  {
    index: 0,
    value: 0,
    name: '配送单待发运',
    percentage: '0',
  },
  {
    index: 0,
    value: 0,
    name: '运单待签收',
    percentage: '0',
  },
])
let warehouseSelect = ref()

// 要货单
let StockReqData = ref([
  { value: 0, name: '已生成订单' },
  { value: 0, name: '未生成订单' },
])
const requireGoodsPieoption = {
  color: ['#0274C1', '#B69241'], // 配置各版块颜色
  title: {
    // text: 'Referer of a Website',
    // subtext: 'Fake Data',
    left: 'center',
  },
  tooltip: {
    trigger: 'item',
  },
  // legend: {
  //   orient: 'vertical',
  //   left: 'left'
  // },
  series: [
    {
      // name: '要货单',
      type: 'pie',
      radius: '65%',
      data: StockReqData.value,
      label: {
        show: true,
        formatter: '{b}:   {c}', // 自定义lable处展示那些数据及其格式
        fontSize: 13, // 字体大小
        color: '#ffffff',
        // padding: [0, -20], //调整左右位置
      },
      labelLine: {
        // length: -50, // 引导线起点到文字的距离
        length2: 80, // 引导线终点到饼图边缘的距离
      },
      labelLayout: {
        verticalAlign: 'bottom',
        dy: 0,
      },
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)',
        },
      },
    },
    {
      // name: '要货单',
      type: 'pie',
      radius: '65%',
      data: StockReqData.value,
      label: {
        normal: {
          position: 'inside',
          show: true,
          color: '#ffffff',
          formatter: (d: any) => {
            return d.percent + '%'
          },
        },
      },
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)',
        },
      },
    },
  ],
}

// 调拨订单/销售订单
let TransSaleOrderData = ref([
  { value: 0, name: '已生成发货单' },
  { value: 0, name: '缺货' },
])
const transOrSaleOrderPieoption = {
  color: ['#0274C1', '#00D7E9'], // 配置各版块颜色
  title: {
    left: 'center',
  },
  tooltip: {
    trigger: 'item',
  },
  series: [
    {
      // name: '调拨订单/销售订单',
      type: 'pie',
      radius: '65%',
      data: TransSaleOrderData.value,
      label: {
        show: true,
        formatter: '{b}:   {c}', // 自定义lable处展示那些数据及其格式
        fontSize: 13, // 字体大小
        color: '#ffffff',
        // padding: [0, -20], //调整左右位置
      },
      labelLine: {
        // length: -50, // 引导线起点到文字的距离
        length2: 80, // 引导线终点到饼图边缘的距离
      },
      labelLayout: {
        verticalAlign: 'bottom',
        dy: 0,
      },
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)',
        },
      },
    },
    {
      // name: '调拨订单/销售订单',
      type: 'pie',
      radius: '65%',
      data: TransSaleOrderData.value,
      label: {
        normal: {
          position: 'inside',
          show: true,
          color: '#ffffff',
          formatter: (d: any) => {
            return d.percent + '%'
          },
        },
      },
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)',
        },
      },
    },
  ],
}

// 发货通知单
let OutOrderData = ref([
  { value: 0, name: '已打印' },
  { value: 0, name: '拣选中' },
  { value: 0, name: '拣选完成' },
  { value: 0, name: '已发货通知' },
])
const outOrderPieoption = {
  color: ['#686ACC', '#B69241', '#0274C1', '#00D7E9'], // 配置各版块颜色
  title: {
    left: 'center',
  },
  tooltip: {
    trigger: 'item',
  },
  series: [
    {
      // name: '发货通知单',
      type: 'pie',
      radius: '65%',
      data: OutOrderData.value,
      label: {
        show: true,
        position: 'outer',
        formatter: '{b}:   {c}', // 自定义lable处展示那些数据及其格式
        fontSize: 13, // 字体大小
        color: '#ffffff',
        // padding: [0, -50], //调整左右位置
      },
      labelLine: {
        // length: 20, // 引导线起点到文字的距离
        length2: 80, // 引导线终点到饼图边缘的距离
      },
      labelLayout: {
        verticalAlign: 'bottom',
        dy: 0,
      },
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)',
        },
      },
    },
    {
      // name: '发货通知单',
      type: 'pie',
      radius: '65%',
      data: OutOrderData.value,
      label: {
        normal: {
          position: 'inside',
          show: true,
          color: '#ffffff',
          formatter: (d: any) => {
            return d.percent + '%'
          },
        },
      },
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)',
        },
      },
    },
  ],
}

//库存调拨入库单
let StockTransInData = ref({
  allStockTransIn: 0,
  waitStore: 0,
  waitDelievery: 0,
  haveDelievery: 0,
})
const stockTransInPieoption = {
  // backgroundColor: '#100C2A',
  color: ['#6036CD', '#00B0FF', '#FFC000'],
  legend: {
    orient: 'vertical',
    left: '75%',
    x: 'left',
    // y 设置垂直安放位置,默认全图顶端,可选值:'top' ¦ 'bottom' ¦ 'center' ¦ {number}(y坐标,单位px)
    y: 'center',
    top: '20%',
    itemHeight: 12, //图例的高度
    itemGap: 15, //图例之间的间距
    formatter: function (name: string) {
      let target
      if (name == '待集货') {
        target = StockTransInData.value.waitStore
      } else if (name == '已生成配送单') {
        target = StockTransInData.value.haveDelievery
      } else {
        target = StockTransInData.value.waitDelievery
      }
      let arr = [name + ' ', ' ' + target]
      return arr.join(' ')
    },
    data: [
      {
        name: '待集货',
        icon: 'circle',
        textStyle: {
          color: '#6036CD', // 单独设置某一个图列的颜色
        },
      },
      {
        name: '已生成配送单',
        icon: 'circle',
        textStyle: {
          color: '#D2D3D8', // 单独设置某一个图列的颜色
        },
      },
      {
        name: '待生成配送单',
        icon: 'circle',
        textStyle: {
          color: '#D2D3D8', // 单独设置某一个图列的颜色
        },
      },
    ],
    //图例的名字需要和饼图的name一致,才会显示图例
  },
  series: [
    // 待集货
    {
      name: '待集货',
      type: 'pie',
      radius: ['70%', '75%'],
      left: ['65%', '50%'],
      //环的位置
      // label: {
      //   show: false,
      //   position: 'center',
      // },
      label: {
        normal: {
          position: 'center',
          show: true,
          color: '#ffffff',
          formatter: (d: any) => {
            return StockTransInData.value.allStockTransIn + '\n库存调拨入库单总数'
          },
        },
      },
      labelLine: {
        normal: {
          show: false,
        },
      },
      emphasis: {
        label: {
          show: true,
          fontSize: '13',
          fontWeight: 'bold',
          color: '#ffffff',
        },
      },
      data: [
        {
          value: StockTransInData.value.waitStore, //需要显示的数据
          name: StockTransInData.value.waitStore + '\n待集货',
          itemStyle: {
            normal: {
              color: '#6036CD',
            },
          },
        },
        {
          value: StockTransInData.value.allStockTransIn - StockTransInData.value.waitStore,
          //不需要显示的数据,颜色设置成和背景一样
          itemStyle: {
            normal: {
              color: '#081A3C',
            },
          },
        },
      ],
    },
    // 已生成配送单
    {
      name: '已生成配送单',
      type: 'pie',
      radius: ['60%', '65%'],
      left: ['65%', '50%'],
      //环的位置
      label: {
        show: false,
        position: 'center',
      },
      labelLine: {
        normal: {
          show: false,
        },
      },
      emphasis: {
        label: {
          show: false,
          fontSize: '13',
          fontWeight: '500',
          color: '#ffffff',
        },
      },
      data: [
        {
          value: StockTransInData.value.haveDelievery, //需要显示的数据
          name: StockTransInData.value.haveDelievery + '\n已生成配送单',
          itemStyle: {
            normal: {
              color: '#00B0FF',
            },
          },
        },
        {
          value: StockTransInData.value.allStockTransIn - StockTransInData.value.haveDelievery,
          //不需要显示的数据,颜色设置成和背景一样
          itemStyle: {
            normal: {
              color: '#081A3C',
            },
          },
        },
      ],
    },
    // 待生成配送单
    {
      name: '待生成配送单',
      type: 'pie',
      radius: ['50%', '55%'],
      left: ['65%', '50%'],
      //环的位置
      label: {
        show: false,
        position: 'center',
      },
      labelLine: {
        normal: {
          show: false,
        },
      },
      emphasis: {
        label: {
          show: false,
          fontSize: '13',
          fontWeight: 'bold',
          color: '#ffffff',
        },
        itemStyle: {
          normal: {
            color: '#FFC000',
          },
        },
      },
      data: [
        {
          value: StockTransInData.value.waitDelievery, //需要显示的数据
          name: StockTransInData.value.waitDelievery + '\n待生成配送单',
          itemStyle: {
            normal: {
              color: '#FFC000',
            },
          },
        },
        {
          value: StockTransInData.value.allStockTransIn - StockTransInData.value.waitDelievery,
          //不需要显示的数据,颜色设置成和背景一样
          itemStyle: {
            normal: {
              color: '#081A3C',
            },
          },
        },
      ],
    },
  ],
}

//配送单
let DelieveryOrderData = ref([
  { value: 0, name: '已调度' },
  { value: 0, name: '已发运' },
])
const delieveryOrderPieoption = {
  tooltip: {
    trigger: 'item',
  },
  legend: {
    orient: 'vertical',
    left: '75%',
    x: 'left',
    // y 设置垂直安放位置,默认全图顶端,可选值:'top' ¦ 'bottom' ¦ 'center' ¦ {number}(y坐标,单位px)
    y: 'center',
    top: '42%',
    textStyle: {
      color: '#ffffff',
    },
    itemHeight: 12, //图例的高度
    itemGap: 15, //图例之间的间距
  },
  formatter: function (name: string) {
    return name + DelieveryOrderData.value.filter(x => x.name == name)[0]?.value
  },
  series: [
    {
      type: 'pie',
      radius: ['50%', '66%'],
      left: ['65%', '50%'],
      //环的位置
      // label: {
      //   show: false,
      //   position: 'center',
      // },
      label: {
        normal: {
          position: 'center',
          show: true,
          color: '#D2D3D8',
          formatter: (d: any) => {
            let total = 0
            DelieveryOrderData.value.forEach(order => {
              total += order.value
            })
            return total
          },
        },
      },
      labelLine: {
        normal: {
          show: false,
        },
      },
      emphasis: {
        label: {
          show: true,
          fontSize: '13',
          fontWeight: 'bold',
          color: '#ffffff',
        },
      },
      data: DelieveryOrderData.value,
    },
  ],
}
//配送单物流轨迹
const DelieveryTrackData = ref({
  collected: 0,
  transited: 0,
  signed: 0,
  allTrack: 0,
})
// 物流轨迹百分比
const PercentTrackData = ref(['0%', '0%', '0%'])
const delieveryTrackPieoption = {
  // backgroundColor: '#100C2A',
  color: ['#6036CD', '#00B0FF', '#FFC000'],
  legend: {
    orient: 'vertical',
    left: '75%',
    x: 'left',
    // y 设置垂直安放位置,默认全图顶端,可选值:'top' ¦ 'bottom' ¦ 'center' ¦ {number}(y坐标,单位px)
    y: 'center',
    top: '20%',
    itemHeight: 12, //图例的高度
    itemGap: 15, //图例之间的间距
    formatter: function (name: string) {
      let target
      if (name == '已揽收') {
        target = DelieveryTrackData.value.collected
      } else if (name == '已中转') {
        target = DelieveryTrackData.value.transited
      } else {
        target = DelieveryTrackData.value.signed
      }
      let arr = [name + ' ', ' \n\n' + target + '件']
      return arr.join(' ')
    },
    data: [
      {
        name: '已揽收',
        icon: 'circle',
        textStyle: {
          color: '#6036CD', // 单独设置某一个图列的颜色
        },
      },
      {
        name: '已中转',
        icon: 'circle',
        textStyle: {
          color: '#D2D3D8', // 单独设置某一个图列的颜色
        },
      },
      {
        name: '已签收',
        icon: 'circle',
        textStyle: {
          color: '#D2D3D8', // 单独设置某一个图列的颜色
        },
      },
    ],
    //图例的名字需要和饼图的name一致,才会显示图例
  },
  tooltip: {
    show: false,
    fontSize: '11',
    trigger: 'item',
    formatter: '{a}<br>{b}:{c}({d}%)',
  },
  grid: {
    top: '12%',
    bottom: '50%',
    left: '44%',
    containLabel: false,
  },
  yAxis: [
    {
      type: 'category',
      inverse: true,
      axisLine: {
        show: false,
      },
      axisTick: {
        show: false,
      },
      axisLabel: {
        interval: 0,
        inside: true,
        textStyle: {
          color: '#ffffff',
          fontSize: 13,
        },
        show: true,
      },
      data: PercentTrackData.value,
    },
  ],
  xAxis: [
    {
      show: false,
    },
  ],
  series: [
    // 已揽收
    {
      name: '已揽收',
      type: 'pie',
      radius: ['55%', '75%'],
      left: ['65%', '50%'],
      //环的位置
      label: {
        normal: {
          position: 'inside',
          show: false,
          fontSize: '11',
          color: '#ffffff',
          formatter: (d: any) => {
            return d.percent + '%'
          },
        },
      },
      labelLine: {
        normal: {
          show: false,
        },
      },
      emphasis: {
        label: {
          show: false,
          fontSize: '13',
          fontWeight: 'bold',
          color: '#ffffff',
        },
      },
      data: [
        {
          value: DelieveryTrackData.value.collected, //需要显示的数据
          name: DelieveryTrackData.value.collected + '\n已揽收',
          itemStyle: {
            normal: {
              color: '#6036CD',
            },
          },
        },
        {
          value: DelieveryTrackData.value.allTrack - DelieveryTrackData.value.collected,
          //不需要显示的数据,颜色设置成和背景一样
          itemStyle: {
            // stop the chart from rendering this piece
            color: 'none',
            decal: {
              symbol: 'none',
            },
          },
          label: {
            show: false,
          },
        },
      ],
    },
    // 已中转
    {
      name: '已中转',
      type: 'pie',
      radius: ['30%', '50%'],
      left: ['65%', '50%'],
      //环的位置
      label: {
        normal: {
          position: 'inside',
          show: false,
          fontSize: '11',
          color: '#ffffff',
          formatter: (d: any) => {
            return d.percent + '%'
          },
        },
      },
      labelLine: {
        normal: {
          show: false,
        },
      },
      emphasis: {
        label: {
          show: false,
          fontSize: '13',
          fontWeight: '500',
          color: '#ffffff',
        },
      },
      data: [
        {
          value: DelieveryTrackData.value.transited, //需要显示的数据
          name: DelieveryTrackData.value.transited + '\n已中转',
          itemStyle: {
            normal: {
              color: '#00B0FF',
            },
          },
        },
        {
          value: DelieveryTrackData.value.allTrack - DelieveryTrackData.value.transited,
          //不需要显示的数据,颜色设置成和背景一样
          itemStyle: {
            // stop the chart from rendering this piece
            color: 'none',
            decal: {
              symbol: 'none',
            },
          },
          label: {
            show: false,
          },
        },
      ],
    },
    // 已签收
    {
      name: '已签收',
      type: 'pie',
      radius: ['5%', '25%'],
      left: ['65%', '50%'],
      //环的位置
      label: {
        normal: {
          position: 'inside',
          show: false,
          fontSize: '11',
          color: '#ffffff',
          formatter: (d: any) => {
            return d.percent + '%'
          },
        },
      },
      labelLine: {
        normal: {
          show: false,
        },
      },
      emphasis: {
        label: {
          show: false,
          fontSize: '13',
          fontWeight: 'bold',
          color: '#ffffff',
        },
        itemStyle: {
          normal: {
            color: '#FFC000',
          },
        },
      },
      data: [
        {
          value: DelieveryTrackData.value.signed, //需要显示的数据
          name: DelieveryTrackData.value.signed + '\n已签收',
          itemStyle: {
            normal: {
              color: '#FFC000',
            },
          },
        },
        {
          value: DelieveryTrackData.value.allTrack - DelieveryTrackData.value.signed,
          //不需要显示的数据,颜色设置成和背景一样
          itemStyle: {
            // stop the chart from rendering this piece
            color: 'none',
            decal: {
              symbol: 'none',
            },
          },
          label: {
            show: false,
          },
        },
      ],
    },
  ],
}

/**初始化数据 */
let datatitle = ref<any>(null)
let dashboardquery = ref<any>(null)
let dataprogress = ref<any>(null)
let requireGoodsPie = ref<any>(null)
let transOrSaleOrderPie = ref<any>(null)
let outOrderPie = ref<any>(null)
let stockTransInPie = ref<any>(null)
let delieveryOrderPie = ref<any>(null)
let delieveryTrackPie = ref<any>(null)
/**初始化 */
function pageinit() {
  autofit.init({
    dh: 880,
    dw: 1920,
    el: '.content',
    resize: true,
  })
  pageheight = window.innerHeight - 60 // 获取窗口高度
  cardheight = pageheight / 4 > 188 ? pageheight / 4 : 188
  datatitle = document.getElementById('datatitle')
  datatitle.style.height = cardheight * 0.3 - 30 + 'px'
  dashboardquery = document.getElementById('dashboardquery')
  dashboardquery.style.height = cardheight * 0.2 + 'px'

  dataprogress = document.getElementById('data-progress')
  dataprogress.style.height = cardheight * 0.5 + 'px'
  progresswidth = (90 / (cardheight * 0.5)) * 90
  // 要货单
  requireGoodsPie = document.getElementById('requireGoodsPie') // 基于准备好的dom,初始化echarts实例
  requireGoodsPie.style.height = cardheight + 'px'
  var pickChart = echarts.init(requireGoodsPie)
  pickChart.clear()
  pickChart.setOption(requireGoodsPieoption) // 绘制图表
  // 调拨订单/销售订单
  transOrSaleOrderPie = document.getElementById('transOrSaleOrderPie')
  transOrSaleOrderPie.style.height = cardheight + 'px'
  var deliveryChart = echarts.init(transOrSaleOrderPie)
  deliveryChart.clear()
  deliveryChart.setOption(transOrSaleOrderPieoption)
  // 发货通知单
  outOrderPie = document.getElementById('outOrderPie')
  outOrderPie.style.height = cardheight + 'px'
  var shipmentChart = echarts.init(outOrderPie)
  shipmentChart.clear()
  shipmentChart.setOption(outOrderPieoption)
  // 库存调拨入库单
  stockTransInPie = document.getElementById('stockTransInPie')
  stockTransInPie.style.height = cardheight + 'px'
  var stockTransInChart = echarts.init(stockTransInPie)
  stockTransInChart.clear()
  stockTransInChart.setOption(stockTransInPieoption, true)
  // 配送单
  delieveryOrderPie = document.getElementById('delieveryOrderPie')
  delieveryOrderPie.style.height = cardheight + 'px'
  var outstockcomChart = echarts.init(delieveryOrderPie)
  outstockcomChart.setOption(delieveryOrderPieoption)
  // 配送单物流轨迹
  delieveryTrackPie = document.getElementById('delieveryTrackPie')
  delieveryTrackPie.style.height = cardheight + 'px'
  var outstocksamChart = echarts.init(delieveryTrackPie)
  outstocksamChart.setOption(delieveryTrackPieoption)
}

/**
 * 级联选择器改变
 */
function handleChangecascader(value: any, selectedData: any) {
  GetDashboardData()
  console.log(warehouseSelect)
  // 关闭级联选择器
  cascaderRef.value.togglePopperVisible()
  var selectoption = cascaderRef.value.getCheckedNodes()
  leftName.value = selectoption[0].label
}

/**
 * 日期改变
 */
function handleChangedate() {
  GetDashboardData()
}

/**
 * 维度
 */
function handleChangeDimension() {
  GetDashboardData()
}
/**
 * 调用接口
 */
function GetDashboardData() {
  debugger
  QueryDashboardData({ Dimension: dimension.value, TodayDate: todaydate.value, BaseUnitID: warehouseSelect?.value[0], WarehouseID: warehouseSelect?.value[1] }).then((res: any) => {
    if (res.flag) {
      orderOptions.value = res.data.orderPercents //单据数据

      //要货数据
      StockReqData.value = [
        { value: res.data.stockReqData.haveStockreq, name: '已生成订单' },
        { value: res.data.stockReqData.waitStockreq, name: '未生成订单' },
      ]
      requireGoodsPieoption.series[0].data = StockReqData.value
      requireGoodsPieoption.series[1].data = StockReqData.value

      //调拨订单/销售订单
      TransSaleOrderData.value = [
        { value: res.data.transOrSaleOrderData.beOutOrder, name: '已生成发货单' },
        { value: res.data.transOrSaleOrderData.stockOut, name: '缺货' },
      ]
      transOrSaleOrderPieoption.series[0].data = TransSaleOrderData.value
      transOrSaleOrderPieoption.series[1].data = TransSaleOrderData.value

      //发货通知单
      OutOrderData.value = [
        { value: res.data.outOrderData.printed, name: '已打印' },
        { value: res.data.outOrderData.picking, name: '拣选中' },
        { value: res.data.outOrderData.picked, name: '拣选完成' },
        { value: res.data.outOrderData.outed, name: '已发货通知' },
      ]
      outOrderPieoption.series[0].data = OutOrderData.value
      outOrderPieoption.series[1].data = OutOrderData.value

      //库存调拨入库单
      StockTransInData.value = {
        allStockTransIn: res.data.stockTransInData.allStockTransIn,
        waitStore: res.data.stockTransInData.waitStore,
        waitDelievery: res.data.stockTransInData.waitDelievery,
        haveDelievery: res.data.stockTransInData.haveDelievery,
      }
      stockTransInPieoption.series[0].data[0].value = StockTransInData.value.waitStore
      stockTransInPieoption.series[0].data[1].value = StockTransInData.value.allStockTransIn - StockTransInData.value.waitStore
      stockTransInPieoption.series[1].data[0].value = StockTransInData.value.haveDelievery
      stockTransInPieoption.series[1].data[1].value = StockTransInData.value.allStockTransIn - StockTransInData.value.haveDelievery
      stockTransInPieoption.series[2].data[0].value = StockTransInData.value.waitDelievery
      stockTransInPieoption.series[2].data[1].value = StockTransInData.value.allStockTransIn - StockTransInData.value.waitDelievery

      //配送单
      DelieveryOrderData.value = [
        { value: res.data.delieveryData.dispatched, name: '已调度' },
        { value: res.data.delieveryData.shiped, name: '已发运' },
      ]
      delieveryOrderPieoption.series[0].data = DelieveryOrderData.value

      //配送单物流轨迹
      DelieveryTrackData.value = {
        collected: res.data.delieveryData.collected,
        transited: res.data.delieveryData.transited,
        signed: res.data.delieveryData.signed,
        allTrack: res.data.delieveryData.allTrack,
      }

      //物流轨迹百分比
      PercentTrackData.value = DelieveryTrackData.value.allTrack == 0 ? ['0%', '0%', '0%'] : [((DelieveryTrackData.value.collected * 100) / DelieveryTrackData.value.allTrack).toFixed(2) + '%', ((DelieveryTrackData.value.transited * 100) / DelieveryTrackData.value.allTrack).toFixed(2) + '%', ((DelieveryTrackData.value.signed * 100) / DelieveryTrackData.value.allTrack).toFixed(2) + '%']
      delieveryTrackPieoption.yAxis[0].data = PercentTrackData.value
      delieveryTrackPieoption.series[0].data[0].value = DelieveryTrackData.value.collected
      delieveryTrackPieoption.series[0].data[1].value = DelieveryTrackData.value.allTrack - DelieveryTrackData.value.collected
      delieveryTrackPieoption.series[1].data[0].value = DelieveryTrackData.value.transited
      delieveryTrackPieoption.series[1].data[1].value = DelieveryTrackData.value.allTrack - DelieveryTrackData.value.transited
      delieveryTrackPieoption.series[2].data[0].value = DelieveryTrackData.value.signed
      delieveryTrackPieoption.series[2].data[1].value = DelieveryTrackData.value.allTrack - DelieveryTrackData.value.signed
      pageinit()
    }
  })
}
//监听变更,刷新数据来源
// watch(
//   () => StockTransInData.value,
//   async () => {

//   },
// )
/**
 * 首次加载
 */
onMounted(() => {
  // 控件初始化
  todaydate.value = new Date()
  dimension.value = dimensionOptions[0].value // 默认选择第一个选项的值
  QueryDashboardOptions().then((res: any) => {
    if (res.flag) {
      warehouseOptions.value = res.data
      warehouseSelect.value = [res.data[0].value]
      leftName.value = res.data[0].label
      GetDashboardData()
    }
  })

  //页面初始化
  pageinit()
  //监视窗口发生变化再调用一次
  window.onresize = function (event) {
    pageinit()
  }
  setInterval(() => {
    // 这里写页面刷新的逻辑
    location.reload()
  }, 5 * 60 * 1000) // 5分钟刷新一次,单位是毫秒
})
</script>
<style scoped lang="scss">
.content {
  width: 100%;
  height: 100%;
  background-color: #2a4a69;
  .zerofloor {
    // height: 15%;
    width: 100%;
    // background: linear-gradient(to left, #4e5973 0%, #467391 50%, #4e5973 100%);
    .datatitle {
      width: 100%;
      float: center;
      text-align: center;
      font-size: 25px;
      padding-bottom: 5px;
      // background-clip: text;
      color: azure;
    }
    .dashboardquery {
      width: 100%;
      .dashboarddate {
        width: 500px;
        margin-left: 70%;
        margin-top: 5px;
        display: flex;
        align-items: left;
        justify-content: space-between;
        :deep(.el-input__wrapper) {
          background-color: #2a4a69 !important;
          .el-input__inner {
            color: #ffffff;
          }
        }
      }
    }
  }

  .firstfloor {
    // height: 10%;
    margin: 0 5px 5px 0;
    padding-top: 5px;
    margin-left: 10px;
    .data-progress {
      width: 100%;
      padding: 5px 0 5px 0;
      background-color: #0a213d;
      display: flex;
      justify-content: space-between;
    }
    .data-progress .progress {
      float: left;
      width: 16.6%;
      color: azure;
    }
    .data-progress .progress .rightprogress {
      float: left;
      font-size: 16px;
      margin: 35px 0 0 10px;
    }
    .data-progress .progress .leftprogress {
      float: left;
      margin-left: 15px;
      .percentage-label {
        color: azure;
      }
      .percentage-value {
        color: azure;
      }
    }
  }
  .secondfloor,
  .thirdfloor,
  .fourthfloor {
    // height: 25%;
    margin: 0 0 5px 10px;
    .box-card {
      // height: 270px;
      background-color: #0b2545;
      margin: 0 5px 0 0;
      .cardhead {
        color: #31a7ff;
        margin-right: 3px;
      }
      .cardtitle {
        color: azure;
      }
    }
  }
}
</style>

效果在这里插入图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Element Plus Carousel走马灯图片的自适应,你可以使用以下代码作为参考: ``` <template> <el-carousel :interval="5000" arrow="always" :height="bannerHeight + 'px'" style="border: 1px solid red;"> <el-carousel-item v-for="item in 4" :key="item"> <el-row :gutter="12"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" style="height:340px;margin-bottom: 20px;"> <img ref="bannerHeight" src="../image/banner1.png" alt="" @load="imgLoad" style="width: 100%"> </el-col> </el-row> </el-carousel-item> </el-carousel> <div id="test-div" style="border: 5px solid red;background-color: antiquewhite;">当前高度:{{bannerHeight}}</div> </template> <script> export default { data() { return { bannerHeight: 0, }; }, methods: { imgLoad() { const imgElement = this.$refs.bannerHeight; this.bannerHeight = imgElement.clientHeight; }, }, }; </script> ``` 这段代码中,我们使用`imgLoad`方法监听图片加载事件,通过`this.$refs.bannerHeight`获取图片元素的实际高度,然后将该高度赋值给`bannerHeight`变量。最后,在`el-carousel`的`:height`属性中使用`bannerHeight`作为高度值,实现了图片的自适应效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【最简便方法】element-plus/element-ui走马灯配置图片以及图片自适应](https://blog.csdn.net/m0_62742402/article/details/127837417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [element-ui走马灯实现图片自适应](https://blog.csdn.net/qq_40976321/article/details/104513316)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值