mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	项目结构调整 x 11 : 修改前端项目为 yudao-admin-ui
This commit is contained in:
		
							
								
								
									
										102
									
								
								yudao-admin-ui/src/views/dashboard/BarChart.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								yudao-admin-ui/src/views/dashboard/BarChart.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div :class="className" :style="{height:height,width:width}" />
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import echarts from 'echarts'
 | 
			
		||||
require('echarts/theme/macarons') // echarts theme
 | 
			
		||||
import resize from './mixins/resize'
 | 
			
		||||
 | 
			
		||||
const animationDuration = 6000
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  mixins: [resize],
 | 
			
		||||
  props: {
 | 
			
		||||
    className: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: 'chart'
 | 
			
		||||
    },
 | 
			
		||||
    width: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: '100%'
 | 
			
		||||
    },
 | 
			
		||||
    height: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: '300px'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      chart: null
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.$nextTick(() => {
 | 
			
		||||
      this.initChart()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  beforeDestroy() {
 | 
			
		||||
    if (!this.chart) {
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
    this.chart.dispose()
 | 
			
		||||
    this.chart = null
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    initChart() {
 | 
			
		||||
      this.chart = echarts.init(this.$el, 'macarons')
 | 
			
		||||
 | 
			
		||||
      this.chart.setOption({
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'axis',
 | 
			
		||||
          axisPointer: { // 坐标轴指示器,坐标轴触发有效
 | 
			
		||||
            type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          top: 10,
 | 
			
		||||
          left: '2%',
 | 
			
		||||
          right: '2%',
 | 
			
		||||
          bottom: '3%',
 | 
			
		||||
          containLabel: true
 | 
			
		||||
        },
 | 
			
		||||
        xAxis: [{
 | 
			
		||||
          type: 'category',
 | 
			
		||||
          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
 | 
			
		||||
          axisTick: {
 | 
			
		||||
            alignWithLabel: true
 | 
			
		||||
          }
 | 
			
		||||
        }],
 | 
			
		||||
        yAxis: [{
 | 
			
		||||
          type: 'value',
 | 
			
		||||
          axisTick: {
 | 
			
		||||
            show: false
 | 
			
		||||
          }
 | 
			
		||||
        }],
 | 
			
		||||
        series: [{
 | 
			
		||||
          name: 'pageA',
 | 
			
		||||
          type: 'bar',
 | 
			
		||||
          stack: 'vistors',
 | 
			
		||||
          barWidth: '60%',
 | 
			
		||||
          data: [79, 52, 200, 334, 390, 330, 220],
 | 
			
		||||
          animationDuration
 | 
			
		||||
        }, {
 | 
			
		||||
          name: 'pageB',
 | 
			
		||||
          type: 'bar',
 | 
			
		||||
          stack: 'vistors',
 | 
			
		||||
          barWidth: '60%',
 | 
			
		||||
          data: [80, 52, 200, 334, 390, 330, 220],
 | 
			
		||||
          animationDuration
 | 
			
		||||
        }, {
 | 
			
		||||
          name: 'pageC',
 | 
			
		||||
          type: 'bar',
 | 
			
		||||
          stack: 'vistors',
 | 
			
		||||
          barWidth: '60%',
 | 
			
		||||
          data: [30, 52, 200, 334, 390, 330, 220],
 | 
			
		||||
          animationDuration
 | 
			
		||||
        }]
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
							
								
								
									
										135
									
								
								yudao-admin-ui/src/views/dashboard/LineChart.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								yudao-admin-ui/src/views/dashboard/LineChart.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,135 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div :class="className" :style="{height:height,width:width}" />
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import echarts from 'echarts'
 | 
			
		||||
require('echarts/theme/macarons') // echarts theme
 | 
			
		||||
import resize from './mixins/resize'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  mixins: [resize],
 | 
			
		||||
  props: {
 | 
			
		||||
    className: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: 'chart'
 | 
			
		||||
    },
 | 
			
		||||
    width: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: '100%'
 | 
			
		||||
    },
 | 
			
		||||
    height: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: '350px'
 | 
			
		||||
    },
 | 
			
		||||
    autoResize: {
 | 
			
		||||
      type: Boolean,
 | 
			
		||||
      default: true
 | 
			
		||||
    },
 | 
			
		||||
    chartData: {
 | 
			
		||||
      type: Object,
 | 
			
		||||
      required: true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      chart: null
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    chartData: {
 | 
			
		||||
      deep: true,
 | 
			
		||||
      handler(val) {
 | 
			
		||||
        this.setOptions(val)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.$nextTick(() => {
 | 
			
		||||
      this.initChart()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  beforeDestroy() {
 | 
			
		||||
    if (!this.chart) {
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
    this.chart.dispose()
 | 
			
		||||
    this.chart = null
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    initChart() {
 | 
			
		||||
      this.chart = echarts.init(this.$el, 'macarons')
 | 
			
		||||
      this.setOptions(this.chartData)
 | 
			
		||||
    },
 | 
			
		||||
    setOptions({ expectedData, actualData } = {}) {
 | 
			
		||||
      this.chart.setOption({
 | 
			
		||||
        xAxis: {
 | 
			
		||||
          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
 | 
			
		||||
          boundaryGap: false,
 | 
			
		||||
          axisTick: {
 | 
			
		||||
            show: false
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          left: 10,
 | 
			
		||||
          right: 10,
 | 
			
		||||
          bottom: 20,
 | 
			
		||||
          top: 30,
 | 
			
		||||
          containLabel: true
 | 
			
		||||
        },
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'axis',
 | 
			
		||||
          axisPointer: {
 | 
			
		||||
            type: 'cross'
 | 
			
		||||
          },
 | 
			
		||||
          padding: [5, 10]
 | 
			
		||||
        },
 | 
			
		||||
        yAxis: {
 | 
			
		||||
          axisTick: {
 | 
			
		||||
            show: false
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        legend: {
 | 
			
		||||
          data: ['expected', 'actual']
 | 
			
		||||
        },
 | 
			
		||||
        series: [{
 | 
			
		||||
          name: 'expected', itemStyle: {
 | 
			
		||||
            normal: {
 | 
			
		||||
              color: '#FF005A',
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: '#FF005A',
 | 
			
		||||
                width: 2
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          smooth: true,
 | 
			
		||||
          type: 'line',
 | 
			
		||||
          data: expectedData,
 | 
			
		||||
          animationDuration: 2800,
 | 
			
		||||
          animationEasing: 'cubicInOut'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'actual',
 | 
			
		||||
          smooth: true,
 | 
			
		||||
          type: 'line',
 | 
			
		||||
          itemStyle: {
 | 
			
		||||
            normal: {
 | 
			
		||||
              color: '#3888fa',
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: '#3888fa',
 | 
			
		||||
                width: 2
 | 
			
		||||
              },
 | 
			
		||||
              areaStyle: {
 | 
			
		||||
                color: '#f3f8ff'
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          data: actualData,
 | 
			
		||||
          animationDuration: 2800,
 | 
			
		||||
          animationEasing: 'quadraticOut'
 | 
			
		||||
        }]
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
							
								
								
									
										181
									
								
								yudao-admin-ui/src/views/dashboard/PanelGroup.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								yudao-admin-ui/src/views/dashboard/PanelGroup.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,181 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <el-row :gutter="40" class="panel-group">
 | 
			
		||||
    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
 | 
			
		||||
      <div class="card-panel" @click="handleSetLineChartData('newVisitis')">
 | 
			
		||||
        <div class="card-panel-icon-wrapper icon-people">
 | 
			
		||||
          <svg-icon icon-class="peoples" class-name="card-panel-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="card-panel-description">
 | 
			
		||||
          <div class="card-panel-text">
 | 
			
		||||
            访客
 | 
			
		||||
          </div>
 | 
			
		||||
          <count-to :start-val="0" :end-val="102400" :duration="2600" class="card-panel-num" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </el-col>
 | 
			
		||||
    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
 | 
			
		||||
      <div class="card-panel" @click="handleSetLineChartData('messages')">
 | 
			
		||||
        <div class="card-panel-icon-wrapper icon-message">
 | 
			
		||||
          <svg-icon icon-class="message" class-name="card-panel-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="card-panel-description">
 | 
			
		||||
          <div class="card-panel-text">
 | 
			
		||||
            消息
 | 
			
		||||
          </div>
 | 
			
		||||
          <count-to :start-val="0" :end-val="81212" :duration="3000" class="card-panel-num" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </el-col>
 | 
			
		||||
    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
 | 
			
		||||
      <div class="card-panel" @click="handleSetLineChartData('purchases')">
 | 
			
		||||
        <div class="card-panel-icon-wrapper icon-money">
 | 
			
		||||
          <svg-icon icon-class="money" class-name="card-panel-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="card-panel-description">
 | 
			
		||||
          <div class="card-panel-text">
 | 
			
		||||
            金额
 | 
			
		||||
          </div>
 | 
			
		||||
          <count-to :start-val="0" :end-val="9280" :duration="3200" class="card-panel-num" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </el-col>
 | 
			
		||||
    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
 | 
			
		||||
      <div class="card-panel" @click="handleSetLineChartData('shoppings')">
 | 
			
		||||
        <div class="card-panel-icon-wrapper icon-shopping">
 | 
			
		||||
          <svg-icon icon-class="shopping" class-name="card-panel-icon" />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="card-panel-description">
 | 
			
		||||
          <div class="card-panel-text">
 | 
			
		||||
            订单
 | 
			
		||||
          </div>
 | 
			
		||||
          <count-to :start-val="0" :end-val="13600" :duration="3600" class="card-panel-num" />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </el-col>
 | 
			
		||||
  </el-row>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import CountTo from 'vue-count-to'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  components: {
 | 
			
		||||
    CountTo
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    handleSetLineChartData(type) {
 | 
			
		||||
      this.$emit('handleSetLineChartData', type)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.panel-group {
 | 
			
		||||
  margin-top: 18px;
 | 
			
		||||
 | 
			
		||||
  .card-panel-col {
 | 
			
		||||
    margin-bottom: 32px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .card-panel {
 | 
			
		||||
    height: 108px;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    color: #666;
 | 
			
		||||
    background: #fff;
 | 
			
		||||
    box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
 | 
			
		||||
    border-color: rgba(0, 0, 0, .05);
 | 
			
		||||
 | 
			
		||||
    &:hover {
 | 
			
		||||
      .card-panel-icon-wrapper {
 | 
			
		||||
        color: #fff;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .icon-people {
 | 
			
		||||
        background: #40c9c6;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .icon-message {
 | 
			
		||||
        background: #36a3f7;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .icon-money {
 | 
			
		||||
        background: #f4516c;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .icon-shopping {
 | 
			
		||||
        background: #34bfa3
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .icon-people {
 | 
			
		||||
      color: #40c9c6;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .icon-message {
 | 
			
		||||
      color: #36a3f7;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .icon-money {
 | 
			
		||||
      color: #f4516c;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .icon-shopping {
 | 
			
		||||
      color: #34bfa3
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .card-panel-icon-wrapper {
 | 
			
		||||
      float: left;
 | 
			
		||||
      margin: 14px 0 0 14px;
 | 
			
		||||
      padding: 16px;
 | 
			
		||||
      transition: all 0.38s ease-out;
 | 
			
		||||
      border-radius: 6px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .card-panel-icon {
 | 
			
		||||
      float: left;
 | 
			
		||||
      font-size: 48px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .card-panel-description {
 | 
			
		||||
      float: right;
 | 
			
		||||
      font-weight: bold;
 | 
			
		||||
      margin: 26px;
 | 
			
		||||
      margin-left: 0px;
 | 
			
		||||
 | 
			
		||||
      .card-panel-text {
 | 
			
		||||
        line-height: 18px;
 | 
			
		||||
        color: rgba(0, 0, 0, 0.45);
 | 
			
		||||
        font-size: 16px;
 | 
			
		||||
        margin-bottom: 12px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .card-panel-num {
 | 
			
		||||
        font-size: 20px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (max-width:550px) {
 | 
			
		||||
  .card-panel-description {
 | 
			
		||||
    display: none;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .card-panel-icon-wrapper {
 | 
			
		||||
    float: none !important;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    margin: 0 !important;
 | 
			
		||||
 | 
			
		||||
    .svg-icon {
 | 
			
		||||
      display: block;
 | 
			
		||||
      margin: 14px auto !important;
 | 
			
		||||
      float: none !important;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										79
									
								
								yudao-admin-ui/src/views/dashboard/PieChart.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								yudao-admin-ui/src/views/dashboard/PieChart.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div :class="className" :style="{height:height,width:width}" />
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import echarts from 'echarts'
 | 
			
		||||
require('echarts/theme/macarons') // echarts theme
 | 
			
		||||
import resize from './mixins/resize'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  mixins: [resize],
 | 
			
		||||
  props: {
 | 
			
		||||
    className: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: 'chart'
 | 
			
		||||
    },
 | 
			
		||||
    width: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: '100%'
 | 
			
		||||
    },
 | 
			
		||||
    height: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: '300px'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      chart: null
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.$nextTick(() => {
 | 
			
		||||
      this.initChart()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  beforeDestroy() {
 | 
			
		||||
    if (!this.chart) {
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
    this.chart.dispose()
 | 
			
		||||
    this.chart = null
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    initChart() {
 | 
			
		||||
      this.chart = echarts.init(this.$el, 'macarons')
 | 
			
		||||
 | 
			
		||||
      this.chart.setOption({
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'item',
 | 
			
		||||
          formatter: '{a} <br/>{b} : {c} ({d}%)'
 | 
			
		||||
        },
 | 
			
		||||
        legend: {
 | 
			
		||||
          left: 'center',
 | 
			
		||||
          bottom: '10',
 | 
			
		||||
          data: ['Industries', 'Technology', 'Forex', 'Gold', 'Forecasts']
 | 
			
		||||
        },
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: 'WEEKLY WRITE ARTICLES',
 | 
			
		||||
            type: 'pie',
 | 
			
		||||
            roseType: 'radius',
 | 
			
		||||
            radius: [15, 95],
 | 
			
		||||
            center: ['50%', '38%'],
 | 
			
		||||
            data: [
 | 
			
		||||
              { value: 320, name: 'Industries' },
 | 
			
		||||
              { value: 240, name: 'Technology' },
 | 
			
		||||
              { value: 149, name: 'Forex' },
 | 
			
		||||
              { value: 100, name: 'Gold' },
 | 
			
		||||
              { value: 59, name: 'Forecasts' }
 | 
			
		||||
            ],
 | 
			
		||||
            animationEasing: 'cubicInOut',
 | 
			
		||||
            animationDuration: 2600
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
							
								
								
									
										116
									
								
								yudao-admin-ui/src/views/dashboard/RaddarChart.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								yudao-admin-ui/src/views/dashboard/RaddarChart.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div :class="className" :style="{height:height,width:width}" />
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import echarts from 'echarts'
 | 
			
		||||
require('echarts/theme/macarons') // echarts theme
 | 
			
		||||
import resize from './mixins/resize'
 | 
			
		||||
 | 
			
		||||
const animationDuration = 3000
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  mixins: [resize],
 | 
			
		||||
  props: {
 | 
			
		||||
    className: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: 'chart'
 | 
			
		||||
    },
 | 
			
		||||
    width: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: '100%'
 | 
			
		||||
    },
 | 
			
		||||
    height: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: '300px'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      chart: null
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.$nextTick(() => {
 | 
			
		||||
      this.initChart()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  beforeDestroy() {
 | 
			
		||||
    if (!this.chart) {
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
    this.chart.dispose()
 | 
			
		||||
    this.chart = null
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    initChart() {
 | 
			
		||||
      this.chart = echarts.init(this.$el, 'macarons')
 | 
			
		||||
 | 
			
		||||
      this.chart.setOption({
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'axis',
 | 
			
		||||
          axisPointer: { // 坐标轴指示器,坐标轴触发有效
 | 
			
		||||
            type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        radar: {
 | 
			
		||||
          radius: '66%',
 | 
			
		||||
          center: ['50%', '42%'],
 | 
			
		||||
          splitNumber: 8,
 | 
			
		||||
          splitArea: {
 | 
			
		||||
            areaStyle: {
 | 
			
		||||
              color: 'rgba(127,95,132,.3)',
 | 
			
		||||
              opacity: 1,
 | 
			
		||||
              shadowBlur: 45,
 | 
			
		||||
              shadowColor: 'rgba(0,0,0,.5)',
 | 
			
		||||
              shadowOffsetX: 0,
 | 
			
		||||
              shadowOffsetY: 15
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          indicator: [
 | 
			
		||||
            { name: 'Sales', max: 10000 },
 | 
			
		||||
            { name: 'Administration', max: 20000 },
 | 
			
		||||
            { name: 'Information Techology', max: 20000 },
 | 
			
		||||
            { name: 'Customer Support', max: 20000 },
 | 
			
		||||
            { name: 'Development', max: 20000 },
 | 
			
		||||
            { name: 'Marketing', max: 20000 }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        legend: {
 | 
			
		||||
          left: 'center',
 | 
			
		||||
          bottom: '10',
 | 
			
		||||
          data: ['Allocated Budget', 'Expected Spending', 'Actual Spending']
 | 
			
		||||
        },
 | 
			
		||||
        series: [{
 | 
			
		||||
          type: 'radar',
 | 
			
		||||
          symbolSize: 0,
 | 
			
		||||
          areaStyle: {
 | 
			
		||||
            normal: {
 | 
			
		||||
              shadowBlur: 13,
 | 
			
		||||
              shadowColor: 'rgba(0,0,0,.2)',
 | 
			
		||||
              shadowOffsetX: 0,
 | 
			
		||||
              shadowOffsetY: 10,
 | 
			
		||||
              opacity: 1
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          data: [
 | 
			
		||||
            {
 | 
			
		||||
              value: [5000, 7000, 12000, 11000, 15000, 14000],
 | 
			
		||||
              name: 'Allocated Budget'
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              value: [4000, 9000, 15000, 15000, 13000, 11000],
 | 
			
		||||
              name: 'Expected Spending'
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              value: [5500, 11000, 12000, 15000, 12000, 12000],
 | 
			
		||||
              name: 'Actual Spending'
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          animationDuration: animationDuration
 | 
			
		||||
        }]
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
							
								
								
									
										56
									
								
								yudao-admin-ui/src/views/dashboard/mixins/resize.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								yudao-admin-ui/src/views/dashboard/mixins/resize.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
import { debounce } from '@/utils'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      $_sidebarElm: null,
 | 
			
		||||
      $_resizeHandler: null
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.initListener()
 | 
			
		||||
  },
 | 
			
		||||
  activated() {
 | 
			
		||||
    if (!this.$_resizeHandler) {
 | 
			
		||||
      // avoid duplication init
 | 
			
		||||
      this.initListener()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // when keep-alive chart activated, auto resize
 | 
			
		||||
    this.resize()
 | 
			
		||||
  },
 | 
			
		||||
  beforeDestroy() {
 | 
			
		||||
    this.destroyListener()
 | 
			
		||||
  },
 | 
			
		||||
  deactivated() {
 | 
			
		||||
    this.destroyListener()
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    // use $_ for mixins properties
 | 
			
		||||
    // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
 | 
			
		||||
    $_sidebarResizeHandler(e) {
 | 
			
		||||
      if (e.propertyName === 'width') {
 | 
			
		||||
        this.$_resizeHandler()
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    initListener() {
 | 
			
		||||
      this.$_resizeHandler = debounce(() => {
 | 
			
		||||
        this.resize()
 | 
			
		||||
      }, 100)
 | 
			
		||||
      window.addEventListener('resize', this.$_resizeHandler)
 | 
			
		||||
 | 
			
		||||
      this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
 | 
			
		||||
      this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
 | 
			
		||||
    },
 | 
			
		||||
    destroyListener() {
 | 
			
		||||
      window.removeEventListener('resize', this.$_resizeHandler)
 | 
			
		||||
      this.$_resizeHandler = null
 | 
			
		||||
 | 
			
		||||
      this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
 | 
			
		||||
    },
 | 
			
		||||
    resize() {
 | 
			
		||||
      const { chart } = this
 | 
			
		||||
      chart && chart.resize()
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user