123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <template>
- <Card :title="title||'订单数据统计'">
- <template #extra>
- <div class="condition">
- <div class="selct" style="display: inline-block;">
- <span style="margin-right:15px">颗粒度</span>
- <Select
- v-model:value="value"
- style="width: 100px;margin-right:30px"
- placeholder="请选择颗粒度"
- :options="options"
- @change="handleChange"
- ></Select>
- </div>
- <a-button type="primary" @click="handleExport">导出</a-button>
- </div>
- </template>
- <div ref="chartRef" :style="{ height, width }"></div>
- </Card>
- </template>
- <script lang="ts" setup>
- import { basicProps } from './props';
- import type { SelectProps } from 'ant-design-vue';
- import { Card, DatePicker, Select } from 'ant-design-vue';
- import { ref, Ref, watch, defineEmits } from 'vue';
- import { useECharts } from '/@/hooks/web/useECharts';
- import { exportElsxFile, } from '/@/utils/file/download';
- const props = defineProps({
- loading: Boolean,
- ...basicProps,
- });
- const value = ref('2');
- const options = ref<SelectProps['options']>([
- {
- value: '0',
- label: '日',
- },
- {
- value: '1',
- label: '周',
- },
- {
- value: '2',
- label: '月',
- },
- ]);
- const emit = defineEmits(["alertSome"])
- const kjList = ref<number[]>([]);
- const kkList = ref<number[]>([]);
- const ssList = ref<number[]>([]);
- const ssobjList = ref<number[]>([]);
- const yixStringData = ref<string[]>([]);
- const echartTypr = ref('line')
- const nameList = ref<string[]>(['看见场景','看看场景','深时场景','深时obj']);
- const maxSize = ref(0);
- const chartRef = ref<HTMLDivElement | null>(null);
- const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
- function handleChange(val){
- emit('change',{type:'scene',value:val})
- }
-
- function handleExport(){
- let fields = {
- 'time':'日期',
- 'kj':'看见场景',
- 'kk':'看看场景',
- 'ss':'深时场景',
- 'dy':'深时obj',
- }
- let data = yixStringData.value.map((ele,index) => {
- return {
- 'time':ele,
- 'kj':kjList.value && kjList.value[index] || 0,
- 'kk':kkList.value && kkList.value[index] || 0,
- 'ss':ssList.value && ssList.value[index] || 0,
- 'dy':ssobjList.value && ssobjList.value[index] || 0,
- }
- })
- exportElsxFile(data,fields,'场景趋势')
- }
- function handlesetOptions() {
- setOptions({
- tooltip: {
- trigger: 'axis',
- axisPointer: {
- lineStyle: {
- width: 1,
- color: '#019680',
- },
- },
- },
- legend: {
- orient: 'horizontal',
- bottom: 0,
- },
- // grid: { left: '2%', right: '2%', top: '10%', bottom: '10%', containLabel: true },
- xAxis: {
- type: 'category',
- // data: [...new Array(30)].map((_item, index) => `${index + 1}日`),
- data: yixStringData.value,
- },
- yAxis: {
- type: 'value',
- // max: maxSize.value,
- splitNumber: 4,
- },
- series: [
- {
- data: kjList.value,
- type: echartTypr.value,
- itemStyle: { color: '#38a0ff' },
- barMaxWidth: 80,
- name: nameList.value[0],
- },
- {
- data: kkList.value,
- type: echartTypr.value,
- itemStyle: { color: '#4cca73' },
- barMaxWidth: 80,
- name: nameList.value[1],
- },
- {
- data: ssList.value,
- type: echartTypr.value,
- itemStyle: { color: '#FDD56A' },
- barMaxWidth: 80,
- name: nameList.value[2],
- },
- {
- data: ssobjList.value,
- type: echartTypr.value,
- itemStyle: { color: '#d58b55' },
- barMaxWidth: 80,
- name: nameList.value[3],
- },
- ],
- });
- }
- watch(
- () => props.echartData,
- (echartData) => {
- kjList.value = echartData.kjList ||[]
- kkList.value = echartData.kkList ||[]
- ssList.value = echartData.ssList ||[]
- ssobjList.value = echartData.ssobjList ||[]
- yixStringData.value = echartData.xdata ||[]
- if(echartData.nameList){
- nameList.value = echartData.nameList
- }
- if(echartData.echartTypr){
- echartTypr.value = echartData.echartTypr
- }
- // const maxNumber = Math.max(...echartData.downOrder.concat(echartData.incrementOrder));
- // const pow = Math.pow(10, maxNumber.toString().length - 1);
- // maxSize.value = maxNumber > 10 ? Math.floor(maxNumber / 10) * 10 + pow * 2 : 10;
- handlesetOptions();
- },
- {
- immediate: true,
- deep: true,
- },
- );
- </script>
|