From 8fb277ad9289b50f58b7771ca2d59d44211c5273 Mon Sep 17 00:00:00 2001 From: weipengfei <2187978347@qq.com> Date: Sat, 2 Dec 2023 19:04:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 6 - src/api/index.js | 8 +- src/components/Businesses.vue | 97 ++++--- src/components/paging.vue | 51 +++- src/utils/axios.js | 8 +- src/view/index/components/centerItem2.vue | 302 ++++++++++++---------- src/view/index/components/centerMap.vue | 24 +- src/view/index/components/leftItme1.vue | 182 +++++++++---- src/view/index/components/leftItme2.vue | 75 +++--- src/view/index/components/rightItem1.vue | 1 + vite.config.js | 4 +- 11 files changed, 450 insertions(+), 308 deletions(-) diff --git a/src/App.vue b/src/App.vue index 4a15f6f..d24c6a0 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,12 +1,6 @@ diff --git a/src/api/index.js b/src/api/index.js index cd75d54..c33feec 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -1,5 +1,9 @@ import axios from "@/utils/axios.js"; -export const test = () => { - return axios.get('/common/home'); +export const orderList = (data) => { + return axios.get('dataview/curr_order_info', { params: data }); +} + +export const orderRanking = (data) => { + return axios.get('dataview/order_ranking', { params: data }); } \ No newline at end of file diff --git a/src/components/Businesses.vue b/src/components/Businesses.vue index c356b69..dae74b4 100644 --- a/src/components/Businesses.vue +++ b/src/components/Businesses.vue @@ -4,6 +4,7 @@ import { ref, reactive, onMounted } from "vue" import { useRouter } from 'vue-router' import paging from "./paging.vue" import mitt from "@/utils/mitt" +import { orderList } from "@/api/index.js" const route = useRouter() const ShwostoreType = ref(false) @@ -22,43 +23,31 @@ const hdClick = (e) => { } -const a = (aaa) => { - for (let i = 0; i < 100; i++) { - if (i % 2 == 0) { - aaa.data.push( - [ - `排序`, - `排sd序`, - `排序`, - `排序`, - `排序`, - `排序`, - `排序`, - `排序`, - `排序`, - ] - ) - } else { - aaa.data.push( - [ - `排序`, - `排sd序`, - `排序`, - `排序`, - `排序`, - `排序`, - `排序`, - `排序`, - `排序`, - ] - - - ) +const initData = (data) => { + let arr = []; + for (let i = 0; i < data.length; i++) { + let calss = 'div'; + if (i % 2 != 0) { + calss = 'div div2' } - - + arr.push( + [ + `${data[i].order_sn || '-'}`, + `${data[i].real_name || '-'}`, + `${data[i].user_phone || '-'}`, + `${data[i].user_address || '-'}`, + `${data[i].store_name || '-'}`, + `${data[i].mer_name || '-'}`, + `${data[i].create_time || '-'}`, + `${data[i].status || '-'}`, + `${data[i].courier || '-'}`, + ] + ) } + configs.data = arr; + scrollBoardRef.value?.updateRows(configs.data); } +const scrollBoardRef = ref(null); const configs = reactive({ headerBGC: "linear-gradient(to right, #ff0000, #00ff00)", oddRowBGC: '', @@ -78,8 +67,28 @@ const configs = reactive({ data: [ ] }) + +const pages = ref({ + areaCode: 510524, + streetCode: 510524100, + page: 1, + limit: 30, + total: 0, + pageAll: 0 +}) + +const loadOrderList = (pramas) => { + orderList(pramas).then((res) => { + initData(res.data.currOrderList); + pages.value.total = res.data.currOrderCount; + pages.value.pageAll = Math.ceil(res.data.currOrderCount / pages.value.limit); + }).catch(err => { + console.error(err); + }) +} + onMounted(() => { - a(configs); + // loadOrderList(); mitt.on('showBusinesses', () => { isShow.value = !isShow.value; }) @@ -95,12 +104,13 @@ onMounted(() => { 关闭 - + @@ -152,6 +162,21 @@ onMounted(() => { } } +:deep(.div) { + width: 100%; + text-align: center; + height: 100%; + color: aliceblue; + background: rgba(91, 219, 246, 0.2); + white-space: nowrap; /* 防止文本换行 */ + overflow: hidden; /* 溢出部分隐藏 */ + text-overflow: ellipsis; /* 显示省略号 */ +} + +:deep(.div2) { + background: rgba(0, 168, 255, 0.16); +} + :deep(.ceil) { padding: 0 !important; margin-bottom: 5px; diff --git a/src/components/paging.vue b/src/components/paging.vue index 743f84b..3cab8a9 100644 --- a/src/components/paging.vue +++ b/src/components/paging.vue @@ -1,31 +1,56 @@ @@ -85,7 +110,7 @@ const input = (e) => { {{ ">" }} 前往 - + 页 diff --git a/src/utils/axios.js b/src/utils/axios.js index 2f0c9a4..553fa28 100644 --- a/src/utils/axios.js +++ b/src/utils/axios.js @@ -5,10 +5,16 @@ const request = axios.create({ timeout: 5000 }) +function convertParamsToQueryString (params) { + const queryString = Object.keys(params) + .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`) + .join('&'); + return queryString; +} + // 请求拦截器 request.interceptors.request.use( config => { - // 在发送请求之前做些什么,例如添加token、修改请求头等 return config; }, error => { diff --git a/src/view/index/components/centerItem2.vue b/src/view/index/components/centerItem2.vue index c5d4018..b06918e 100644 --- a/src/view/index/components/centerItem2.vue +++ b/src/view/index/components/centerItem2.vue @@ -2,143 +2,12 @@ import { onMounted, reactive, ref } from "vue"; import * as echarts from 'echarts'; import border from "../../../components/border.vue" -const xData2 = reactive(["福集镇", "嘉明镇", "喻寺镇", "得胜镇", "牛滩镇", "兆雅镇", - "太伏镇", "云龙镇", "石桥镇", "毗卢镇", "奇峰镇", "潮河镇", "云锦镇"]); -const data1 = reactive([200, 100, 200, 200, 100, 120, 150, 164, 153, 140, 255, 284, 230]); -const data_bottom = reactive([]); +import { orderRanking } from "@/api/index.js" -const option = reactive({ - backgroundColor: 'rgba(0,0,0,0)', - tooltip: { - trigger: 'item', - backgroundColor: 'rgba(91, 219, 246, 0.7)', - textStyle: { - color: '#fff' - } - }, - grid: { - left: 60, - bottom: 50 - }, - xAxis: { - data: xData2, - axisTick: { - show: false - }, - axisLine: { - show: false - }, - axisLabel: { - interval: 0, - textStyle: { - color: '#fff', - fontSize: 10, - }, - margin: 20, //刻度标签与轴线之间的距离。 - }, - - }, - yAxis: { - splitLine: { - show: true, - lineStyle: { - color: 'rgba(0, 156, 255, 0.10)' // 设置分隔线颜色 - } - }, - axisTick: { - show: false - }, - axisLine: { - show: false - }, - axisLabel: { - textStyle: { - color: '#fff', - fontSize: 10, - }, - } - }, - series: [ - {//三个最低下的圆片 - "name": "", - "type": "pictorialBar", - "symbolSize": [10, 4], - "symbolOffset": [0, 2], - "z": 12, - itemStyle: { - opacity: 1, - color: function (params) { - return new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ - offset: 0, - color: '#0E60B2' // 0% 处的颜色 - }, { - offset: 1, - color: '#5BDBF6'// 100% 处的颜色 - }], false) - } - }, - "data": data_bottom - }, - - - //下半截柱状图 - { - name: '2020', - type: 'bar', - barWidth: 10, - barGap: '-100%', - itemStyle: {//lenged文本 - opacity: .7, - color: function (params) { - return new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ - offset: 0, - color: '#0E60B2' // 0% 处的颜色 - }, { - offset: 1, - color: '#5BDBF6'// 100% 处的颜色 - }], false) - } - }, - - data: data1 - }, - - { // 替代柱状图 默认不显示颜色,是最下方柱图(邮件营销)的value值 - 20 - type: 'bar', - barWidth: 10, - barGap: '-100%', - stack: '广告', - itemStyle: { - color: 'transparent' - }, - data: data1 - }, - - { - "name": "", - "type": "pictorialBar", - "symbolSize": [10, 4], - "symbolOffset": [0, -2], - "z": 12, - itemStyle: { - opacity: 1, - color: function (params) { - return new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ - offset: 0, - color: '#0E60B2' // 0% 处的颜色 - }, { - offset: 1, - color: '#5BDBF6'// 100% 处的颜色 - }], false) - } - }, - "symbolPosition": "end", - "data": data1 - }, - - - ] -}) +const xData2 = ref([]); +const data1 = ref([]); +const data_bottom = ref([]); +const orderCount = ref(0); const echartsRef = ref(null); const initMap = () => { @@ -146,15 +15,166 @@ const initMap = () => { // 基于DOM元素初始化echarts实例 const chart = echarts.init(echartsRef.value); - data1.forEach(item => { - data_bottom.push(1) - }) + let option = { + backgroundColor: 'rgba(0,0,0,0)', + tooltip: { + trigger: 'item', + backgroundColor: 'rgba(91, 219, 246, 0.7)', + textStyle: { + color: '#fff' + } + }, + grid: { + left: 60, + bottom: 50 + }, + xAxis: { + data: xData2.value, + axisTick: { + show: false + }, + axisLine: { + show: false + }, + axisLabel: { + // interval: 0, + textStyle: { + color: '#fff', + fontSize: 10, + }, + margin: 20, //刻度标签与轴线之间的距离。 + formatter: function (value) { + return value.split("").slice(0, 3).join("\n"); // 将文字逐个字符换行显示 + } + }, + + }, + yAxis: { + splitLine: { + show: true, + lineStyle: { + color: 'rgba(0, 156, 255, 0.10)' // 设置分隔线颜色 + } + }, + axisTick: { + show: false + }, + axisLine: { + show: false + }, + axisLabel: { + textStyle: { + color: '#fff', + fontSize: 10, + }, + } + }, + series: [ + {//三个最低下的圆片 + "name": "", + "type": "pictorialBar", + "symbolSize": [10, 4], + "symbolOffset": [0, 2], + "z": 12, + itemStyle: { + opacity: 1, + color: function (params) { + return new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ + offset: 0, + color: '#0E60B2' // 0% 处的颜色 + }, { + offset: 1, + color: '#5BDBF6'// 100% 处的颜色 + }], false) + } + }, + "data": data_bottom.value + }, + + + //下半截柱状图 + { + name: '2020', + type: 'bar', + barWidth: 10, + barGap: '-100%', + itemStyle: {//lenged文本 + opacity: .7, + color: function (params) { + return new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ + offset: 0, + color: '#0E60B2' // 0% 处的颜色 + }, { + offset: 1, + color: '#5BDBF6'// 100% 处的颜色 + }], false) + } + }, + + data: data1.value + }, + + { // 替代柱状图 默认不显示颜色,是最下方柱图(邮件营销)的value值 - 20 + type: 'bar', + barWidth: 10, + barGap: '-100%', + stack: '广告', + itemStyle: { + color: 'transparent' + }, + data: data1.value + }, + + { + "name": "", + "type": "pictorialBar", + "symbolSize": [10, 4], + "symbolOffset": [0, -2], + "z": 12, + itemStyle: { + opacity: 1, + color: function (params) { + return new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ + offset: 0, + color: '#0E60B2' // 0% 处的颜色 + }, { + offset: 1, + color: '#5BDBF6'// 100% 处的颜色 + }], false) + } + }, + "symbolPosition": "end", + "data": data1.value + }, + + + ] + } // 使用配置项显示图表 chart.setOption(option); } + +const loadOrderList = () => { + orderRanking({ + areaCode: '510524', + streetCode: '510524100', + type: 2, // 1表示今日, 2表示总计 + }).then((res) => { + orderCount.value = res.data.orderCount; + res.data.townOrderList.forEach(e => { + xData2.value.push(e.street_name); + data1.value.push(e.order_count); + data_bottom.value.push(1) + }) + setTimeout(() => { + initMap() + }) + }) +} + onMounted(() => { - initMap() + loadOrderList(); }) @@ -165,7 +185,7 @@ onMounted(() => { - 61258 + {{ orderCount }} 订单总数 diff --git a/src/view/index/components/centerMap.vue b/src/view/index/components/centerMap.vue index 3f098ec..96167c8 100644 --- a/src/view/index/components/centerMap.vue +++ b/src/view/index/components/centerMap.vue @@ -1,7 +1,6 @@ @@ -76,12 +136,9 @@ onMounted(() => { 今日订单数 - 0 - 0 - 5 - 2 - 4 - 1 + + {{ item }} + @@ -94,38 +151,42 @@ onMounted(() => { {{ "〉" }} - + - - 已完成{{ cell1.label }} + + 占比{{ cell[0].label }} - {{ cell1.count }} + {{ cell[0].count }} - + 待取货订单数 - 已完成{{ cell1.label }} + 占比{{ cell[1].label }} - {{ cell1.count }} + {{ cell[1].count }} - + 未配送订单数 - 已完成{{ cell1.label }} + 占比{{ cell[2].label }} - {{ cell1.count }} + {{ cell[2].count }} - + 已完成订单数 @@ -202,6 +263,21 @@ onMounted(() => { } } + :deep(.div) { + width: 100%; + text-align: center; + height: 100%; + color: aliceblue; + background: rgba(91, 219, 246, 0.2); + white-space: nowrap; /* 防止文本换行 */ + overflow: hidden; /* 溢出部分隐藏 */ + text-overflow: ellipsis; /* 显示省略号 */ + } + + :deep(.div2) { + background: rgba(0, 168, 255, 0.16); + } + :deep(.ceil) { padding: 0 !important; margin-bottom: 5px; diff --git a/src/view/index/components/leftItme2.vue b/src/view/index/components/leftItme2.vue index 8c770d6..412e90e 100644 --- a/src/view/index/components/leftItme2.vue +++ b/src/view/index/components/leftItme2.vue @@ -1,40 +1,8 @@