|
@@ -0,0 +1,129 @@
|
|
|
+ <template>
|
|
|
+ <Card :title="title||'订单数据统计'">
|
|
|
+ <template #extra>
|
|
|
+ <condition type="2" :typeShow="title=='相机出库数量统计'" :name="title=='订单数据统计'?{1:'金额',0:'数量'}:{}" @change="Search" @expor="expor" />
|
|
|
+ </template>
|
|
|
+ <div ref="chartRef" :style="{ height, width }"></div>
|
|
|
+ </Card>
|
|
|
+</template>
|
|
|
+<script lang="ts" setup>
|
|
|
+ import { basicProps } from '../components/props';
|
|
|
+ import condition from '../components/condition.vue';
|
|
|
+ import { Card, DatePicker } 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 emit = defineEmits(["alertSome"])
|
|
|
+ const downOrderData = ref<number[]>([]);
|
|
|
+ const incrementOrderData = ref<number[]>([]);
|
|
|
+ const partsOrderData = ref<number[]>([]);
|
|
|
+ const yixStringData = ref<string[]>([]);
|
|
|
+ const echartTypr = ref('line')
|
|
|
+ const nameList = ref<string[]>(['全景图','三维场景','综合作品']);
|
|
|
+ const maxSize = ref(0);
|
|
|
+ const chartRef = ref<HTMLDivElement | null>(null);
|
|
|
+ const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
|
|
+
|
|
|
+ function Search(val){
|
|
|
+ emit('change',val)
|
|
|
+ }
|
|
|
+ function expor(val){
|
|
|
+ // emit('expor',val)
|
|
|
+ let hader = ['时间', ...nameList.value]
|
|
|
+ console.log('数量',hader,val)
|
|
|
+ let fields = {
|
|
|
+ 'time':'日期',
|
|
|
+ '1':hader[1],
|
|
|
+ '2':hader[2],
|
|
|
+ '3':hader[3],
|
|
|
+ }
|
|
|
+ if(props.title=='订单数据统计' && val?.value){
|
|
|
+ fields.time = `${val.value == 0?'数量/':'金额/'}` + fields.time
|
|
|
+ }
|
|
|
+ let data = yixStringData.value.map((ele,index) => {
|
|
|
+ return {
|
|
|
+ 'time':ele,
|
|
|
+ '1':downOrderData.value && downOrderData.value[index] || 0,
|
|
|
+ '2':incrementOrderData.value && incrementOrderData.value[index] || 0,
|
|
|
+ '3':partsOrderData.value && partsOrderData.value[index] || 0,
|
|
|
+ }
|
|
|
+ })
|
|
|
+ exportElsxFile(data,fields,props.title)
|
|
|
+ }
|
|
|
+ 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: downOrderData.value,
|
|
|
+ type: 'bar',
|
|
|
+ itemStyle: { color: '#38a0ff' },
|
|
|
+ barMaxWidth: 40,
|
|
|
+ name: nameList.value[0],
|
|
|
+ "stack": "总量",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ data: incrementOrderData.value,
|
|
|
+ type: 'bar',
|
|
|
+ itemStyle: { color: '#4cca73' },
|
|
|
+ barMaxWidth: 40,
|
|
|
+ name: nameList.value[1],
|
|
|
+ "stack": "总量",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ data: partsOrderData.value,
|
|
|
+ type: 'bar',
|
|
|
+ itemStyle: { color: '#FDD56A' },
|
|
|
+ barMaxWidth: 40,
|
|
|
+ name: nameList.value[2],
|
|
|
+ "stack": "总量",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ });
|
|
|
+ }
|
|
|
+ watch(
|
|
|
+ () => props.echartData,
|
|
|
+ (echartData) => {
|
|
|
+ console.log('workTrendechartData', echartData);
|
|
|
+ downOrderData.value = echartData.downOrder ||[]
|
|
|
+ incrementOrderData.value = echartData.incrementOrder ||[]
|
|
|
+ partsOrderData.value = echartData.partOrder ||[]
|
|
|
+ yixStringData.value = echartData.xdata ||[]
|
|
|
+ if(echartData.echartTypr){
|
|
|
+ echartTypr.value = echartData.echartTypr
|
|
|
+ }
|
|
|
+ handlesetOptions();
|
|
|
+ },
|
|
|
+ {
|
|
|
+ immediate: true,
|
|
|
+ deep: true,
|
|
|
+ },
|
|
|
+ );
|
|
|
+</script>
|