|
@@ -8,107 +8,139 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
<script setup lang="ts">
|
|
|
-import {ref, onMounted} from "vue";
|
|
|
-import Mock from "mockjs";
|
|
|
+import {ref, onMounted, watch} from "vue";
|
|
|
+import {acceptType} from "@/api/home";
|
|
|
+import dayjs from "dayjs";
|
|
|
+
|
|
|
+const props = defineProps({
|
|
|
+ dateArray: {
|
|
|
+ type: Array,
|
|
|
+ default: () => []
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+const date = ref([]);
|
|
|
+watch(() => props.dateArray, (val: any) => {
|
|
|
+ date.value = val;
|
|
|
+}, {immediate: true})
|
|
|
+
|
|
|
+watch(() => props.dateArray, (val: any) => {
|
|
|
+ getData();
|
|
|
+})
|
|
|
+
|
|
|
|
|
|
-let colors = ["#0BFC7F", "#A0A0A0", "#F48C02", "#F4023C"];
|
|
|
const option = ref({});
|
|
|
-const totalNum = ref(0)
|
|
|
|
|
|
+const getData = async () => {
|
|
|
+ try {
|
|
|
+ const {result} = await acceptType({StartDate: dayjs(date.value[0]).format('YYYY-MM-DD'), EndDate: dayjs(date.value[1]).format('YYYY-MM-DD')});
|
|
|
+ const xData = result.map((item: any) => item.acceptType);
|
|
|
+ const totalData = result.reduce((pre: any, cur: any) => {
|
|
|
+ pre.push(cur.sumCount);
|
|
|
+ return pre;
|
|
|
+ }, []);
|
|
|
+ const handlingCount = result.reduce((pre: any, cur: any) => {
|
|
|
+ pre.push(cur.handlingCount);
|
|
|
+ return pre;
|
|
|
+ }, []);
|
|
|
+ const filedCount = result.reduce((pre: any, cur: any) => {
|
|
|
+ pre.push(cur.filedCount);
|
|
|
+ return pre;
|
|
|
+ }, []);
|
|
|
+ const overTimeCount = result.reduce((pre: any, cur: any) => {
|
|
|
+ pre.push(cur.overTimeCount);
|
|
|
+ return pre;
|
|
|
+ }, []);
|
|
|
+ // mock 数据
|
|
|
+ let dataArr = {
|
|
|
+ xData: xData,
|
|
|
+ result: [
|
|
|
+ {name: '总数', data: totalData},
|
|
|
+ {name: '已办', data: handlingCount},
|
|
|
+ {name: '在办', data: filedCount},
|
|
|
+ {name: '超期', data: overTimeCount},
|
|
|
+ ],
|
|
|
+ series: []
|
|
|
+ }
|
|
|
+ const diamondData = dataArr.result.reduce((pre, cur, index) => {
|
|
|
+ pre[index] = cur.data.map((el, id) => el + (pre[index - 1] ? pre[index - 1][id] : 0))
|
|
|
+ return pre
|
|
|
+ }, [])
|
|
|
+ const color = [
|
|
|
+ [{offset: 0, color: "#efff37",}, {offset: 1, color: "#d5e700",}],
|
|
|
+ [{offset: 0, color: "#32ffee",}, {offset: 1, color: "#00e8d5",}],
|
|
|
+ [{offset: 0, color: "#46c9ff",}, {offset: 1, color: "#00b4ff",}],
|
|
|
+ [{offset: 0, color: "#54a0ff",}, {offset: 1, color: "#1f83ff",}],
|
|
|
+ ]
|
|
|
|
|
|
-const getData = () => {
|
|
|
- // mock 数据
|
|
|
- const dataArr = {
|
|
|
- xdata: ['01-01', '01-02', '01-03', '01-04', '01-05', '01-06', '01-07'],
|
|
|
- result: [
|
|
|
- {name: '总数', data: [320, 435, 490, 340, 320, 270, 360]},
|
|
|
- {name: '已办', data: [150, 220, 210, 310, 140, 180, 288]},
|
|
|
- {name: '在办', data: [250, 120, 240, 280, 240, 180, 288]},
|
|
|
- {name: '超期', data: [180, 420, 370, 250, 210, 180, 288]},
|
|
|
- ],
|
|
|
- series: []
|
|
|
- }
|
|
|
- const diamondData = dataArr.result.reduce((pre, cur, index) => {
|
|
|
- pre[index] = cur.data.map((el, id) => el + (pre[index - 1] ? pre[index - 1][id] : 0))
|
|
|
- return pre
|
|
|
- }, [])
|
|
|
+ dataArr.series = dataArr.result.reduce((p, c, i, array) => {
|
|
|
+ p.push({
|
|
|
+ z: i + 1,
|
|
|
+ stack: true,
|
|
|
+ type: 'bar',
|
|
|
+ name: c.name,
|
|
|
+ barWidth: 15,
|
|
|
+ data: c.data,
|
|
|
+ itemStyle: {
|
|
|
+ color:
|
|
|
+ {type: 'linear', x: 0, x2: 0, y: 0, y2: 1, colorStops: color[i]}
|
|
|
+ },
|
|
|
+ }, {
|
|
|
+ z: i + 10,
|
|
|
+ name: c.name,
|
|
|
+ type: 'pictorialBar',
|
|
|
+ symbolPosition: 'end',
|
|
|
+ symbol: 'circle',
|
|
|
+ symbolOffset: [0, '-50%'],
|
|
|
+ symbolSize: [15, 12.5],
|
|
|
+ data: diamondData[i],
|
|
|
+ itemStyle: {
|
|
|
+ color: color[i + 1] ? color[i + 1][0].color : null
|
|
|
+ },
|
|
|
+ tooltip: {show: false},
|
|
|
+ })
|
|
|
+
|
|
|
+ return p
|
|
|
+ }, [])
|
|
|
|
|
|
- const color = [
|
|
|
- [{offset: 0, color: "#efff37",}, {offset: 1, color: "#d5e700",}],
|
|
|
- [{offset: 0, color: "#32ffee",}, {offset: 1, color: "#00e8d5",}],
|
|
|
- [{offset: 0, color: "#46c9ff",}, {offset: 1, color: "#00b4ff",}],
|
|
|
- [{offset: 0, color: "#54a0ff",}, {offset: 1, color: "#1f83ff",}],
|
|
|
- ]
|
|
|
|
|
|
- dataArr.series = dataArr.result.reduce((p, c, i, array) => {
|
|
|
- p.push({
|
|
|
- z: i + 1,
|
|
|
- stack: true,
|
|
|
- type: 'bar',
|
|
|
- name: c.name,
|
|
|
- barWidth: 15,
|
|
|
- data: c.data,
|
|
|
+// 最上边顶
|
|
|
+ dataArr.series.push({
|
|
|
+ name: dataArr.result[dataArr.result.length - 1].name,
|
|
|
+ z: 20,
|
|
|
+ type: "pictorialBar",
|
|
|
+ symbolPosition: "end",
|
|
|
+ data: diamondData[diamondData.length - 1],
|
|
|
+ symbol: "circle",
|
|
|
+ symbolOffset: ["0%", "-50%"],
|
|
|
+ symbolSize: [15, 12.5],
|
|
|
itemStyle: {
|
|
|
- color:
|
|
|
- {type: 'linear', x: 0, x2: 0, y: 0, y2: 1, colorStops: color[i]}
|
|
|
+ color: color[color.length - 1][0].color
|
|
|
},
|
|
|
- }, {
|
|
|
- z: i + 10,
|
|
|
- name: c.name,
|
|
|
- type: 'pictorialBar',
|
|
|
- symbolPosition: 'end',
|
|
|
- symbol: 'circle',
|
|
|
- symbolOffset: [0, '-50%'],
|
|
|
+ tooltip: {show: false},
|
|
|
+ })
|
|
|
+
|
|
|
+// 最下边底
|
|
|
+ dataArr.series.push({
|
|
|
+ name: dataArr.result[0].name,
|
|
|
+ z: 30,
|
|
|
+ type: "pictorialBar",
|
|
|
+ symbolPosition: "start",
|
|
|
+ data: diamondData[0],
|
|
|
+ symbol: "circle",
|
|
|
+ symbolOffset: ["0%", "50%"],
|
|
|
symbolSize: [15, 12.5],
|
|
|
- data: diamondData[i],
|
|
|
itemStyle: {
|
|
|
- // color: {
|
|
|
- // type: 'linear',
|
|
|
- // x: 0, x2: 0, y: 0, y2: 1,
|
|
|
- // colorStops: color[i + 1]
|
|
|
- // },
|
|
|
- color: color[i + 1] ? color[i + 1][0].color : null
|
|
|
+ color: color[0][0].color
|
|
|
},
|
|
|
tooltip: {show: false},
|
|
|
})
|
|
|
|
|
|
- return p
|
|
|
- }, [])
|
|
|
-
|
|
|
-
|
|
|
-// 最上边顶
|
|
|
- dataArr.series.push({
|
|
|
- name: dataArr.result[dataArr.result.length - 1].name,
|
|
|
- z: 20,
|
|
|
- type: "pictorialBar",
|
|
|
- symbolPosition: "end",
|
|
|
- data: diamondData[diamondData.length - 1],
|
|
|
- symbol: "circle",
|
|
|
- symbolOffset: ["0%", "-50%"],
|
|
|
- symbolSize: [15, 12.5],
|
|
|
- itemStyle: {
|
|
|
- color: color[color.length - 1][0].color
|
|
|
- },
|
|
|
- tooltip: {show: false},
|
|
|
- })
|
|
|
-
|
|
|
-// 最下边底
|
|
|
- dataArr.series.push({
|
|
|
- name: dataArr.result[0].name,
|
|
|
- z: 30,
|
|
|
- type: "pictorialBar",
|
|
|
- symbolPosition: "start",
|
|
|
- data: diamondData[0],
|
|
|
- symbol: "circle",
|
|
|
- symbolOffset: ["0%", "50%"],
|
|
|
- symbolSize: [15, 12.5],
|
|
|
- itemStyle: {
|
|
|
- color: color[0][0].color
|
|
|
- },
|
|
|
- tooltip: {show: false},
|
|
|
- })
|
|
|
+ setOption(dataArr);
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e);
|
|
|
+ }
|
|
|
|
|
|
- setOption(dataArr);
|
|
|
};
|
|
|
const setOption = (data: any) => {
|
|
|
option.value = {
|
|
@@ -117,7 +149,7 @@ const setOption = (data: any) => {
|
|
|
axisTick: {show: true},
|
|
|
axisLine: {lineStyle: {color: 'rgba(255,255,255, .2)'}},
|
|
|
axisLabel: {fontSize: 12, color: '#fff'},
|
|
|
- data: data.xdata
|
|
|
+ data: data.xData
|
|
|
},
|
|
|
yAxis: [{
|
|
|
name: '单位:件',
|