Browse Source

数据看板

lucky 2 years ago
parent
commit
22d5aba1ea
33 changed files with 3495 additions and 0 deletions
  1. 4 0
      package.json
  2. 31 0
      src/apis/service/bigScreen/index.js
  3. 66 0
      src/common/echart/index.vue
  4. 490 0
      src/common/echart/theme.json
  5. 46 0
      src/common/map/fujian.js
  6. 156 0
      src/components/echart/bottom/bottomLeftChart/chart.vue
  7. 55 0
      src/components/echart/bottom/bottomLeftChart/index.vue
  8. 226 0
      src/components/echart/bottom/bottomRightChart/chart.vue
  9. 89 0
      src/components/echart/bottom/bottomRightChart/index.vue
  10. 104 0
      src/components/echart/center/centerChartRate/index.vue
  11. 80 0
      src/components/echart/centerLeft/centerLeft1Chart/chart.vue
  12. 41 0
      src/components/echart/centerLeft/centerLeft1Chart/index.vue
  13. 290 0
      src/components/echart/centerLeft/centerLeft2Chart/chart.vue
  14. 67 0
      src/components/echart/centerLeft/centerLeft2Chart/index.vue
  15. 132 0
      src/components/echart/centerRight/centerRightChart/chart.vue
  16. 55 0
      src/components/echart/centerRight/centerRightChart/index.vue
  17. 14 0
      src/filters/filter.js
  18. 15 0
      src/main.js
  19. BIN
      src/views/bigScreen/assetsDv/logo.png
  20. BIN
      src/views/bigScreen/assetsDv/pageBg.png
  21. 98 0
      src/views/bigScreen/assetsDv/scss/_variables.scss
  22. 146 0
      src/views/bigScreen/assetsDv/scss/index.scss
  23. 185 0
      src/views/bigScreen/assetsDv/scss/style.scss
  24. 52 0
      src/views/bigScreen/datavScr/bottomLeft.vue
  25. 60 0
      src/views/bigScreen/datavScr/bottomRight.vue
  26. 166 0
      src/views/bigScreen/datavScr/center.vue
  27. 207 0
      src/views/bigScreen/datavScr/centerLeft1.vue
  28. 172 0
      src/views/bigScreen/datavScr/centerLeft2.vue
  29. 104 0
      src/views/bigScreen/datavScr/centerRight1.vue
  30. 75 0
      src/views/bigScreen/datavScr/centerRight2.vue
  31. 161 0
      src/views/bigScreen/datavScr/index.vue
  32. 57 0
      src/views/bigScreen/drawMixin.js
  33. 51 0
      src/views/bigScreen/index.js

+ 4 - 0
package.json

@@ -20,6 +20,10 @@
     "new:page": "node ./scripts/generatePage"
   },
   "dependencies": {
+    "@jiaminghi/data-view": "^2.7.3",
+    "@types/echarts": "^4.4.3",
+    "echarts": "^4.6.0",
+    "vue-awesome": "^4.0.2",
     "babel-eslint": "^7.2.3",
     "babel-polyfill": "^6.26.0",
     "clipboard": "2.0.4",

+ 31 - 0
src/apis/service/bigScreen/index.js

@@ -0,0 +1,31 @@
+
+// 封装页面请求
+import http from "@/apis/axios";
+const api = "admin/";
+ 
+export default {
+// 数据大屏信息
+// 今日销量
+datatodaysalesvolume : (data,params) => http(api + 'datatodaysalesvolume',data,'post',params),
+
+// 今日销冠
+datatodaysaleschampion : (data,params) => http(api + 'datatodaysaleschampion',data,'post',params),
+// 3.今日采购
+datatodaypurchase : (data,params) => http(api + 'datatodaypurchase',data,'post',params),
+// .票(暂时不做)
+// addLogin : (data,params) => http(api + 'datatodaysalesvolume',data,'post',params),
+// 5.竞价单和采购单,
+datatotalzixunpurchease : (data,params) => http(api + 'datatotalzixunpurchease',data,'post',params),
+// 6.未发货
+datawaitsendtotal : (data,params) => http(api + 'datawaitsendtotal',data,'post',params),
+// 7.今日订单
+datatodaysale : (data,params) => http(api + 'datatodaysale',data,'post',params),
+// 8.本月完成率
+datamonthfinishrate : (data,params) => http(api + 'datamonthfinishrate',data,'post',params),
+// 9.转单率-今日
+datatordertransferratetoday : (data,params) => http(api + 'datatordertransferratetoday',data,'post',params),
+// 9.转单率-本月
+datatordertransferratemonth : (data,params) => http(api + 'datatordertransferratemonth',data,'post',params),
+// 9.转单率-今年
+datatordertransferrateyear : (data,params) => http(api + 'datatordertransferrateyear',data,'post',params),
+}

+ 66 - 0
src/common/echart/index.vue

@@ -0,0 +1,66 @@
+<template>
+  <div :id="id" :class="className" :style="{ height: height, width: width }" />
+</template>
+
+<script>
+import tdTheme from './theme.json' // 引入默认主题
+import '../map/fujian.js'
+
+export default {
+  name: 'echart',
+  props: {
+    className: {
+      type: String,
+      default: 'chart'
+    },
+    id: {
+      type: String,
+      default: 'chart'
+    },
+    width: {
+      type: String,
+      default: '100%'
+    },
+    height: {
+      type: String,
+      default: '2.5rem'
+    },
+    options: {
+      type: Object,
+      default: ()=>({})
+    }
+  },
+  data () {
+    return {
+      chart: null
+    }
+  },
+  watch: {
+    options: {
+      handler (options) {
+        // 设置true清空echart缓存
+        this.chart.setOption(options, true)
+      },
+      deep: true
+    }
+  },
+  mounted () {
+    this.$echarts.registerTheme('tdTheme', tdTheme); // 覆盖默认主题
+    this.initChart();
+  },
+  beforeDestroy () {
+    this.chart.dispose()
+    this.chart = null
+  },
+  methods: {
+    initChart () {
+      // 初始化echart
+      this.chart = this.$echarts.init(this.$el, 'tdTheme')
+      this.chart.setOption(this.options, true)
+    }
+  }
+}
+</script>
+
+<style>
+</style>

+ 490 - 0
src/common/echart/theme.json

@@ -0,0 +1,490 @@
+{
+  "color": [
+    "#2d8cf0",
+    "#19be6b",
+    "#ff9900",
+    "#E46CBB",
+    "#9A66E4",
+    "#ed3f14"
+  ],
+  "backgroundColor": "rgba(0,0,0,0)",
+  "textStyle": {},
+  "title": {
+    "textStyle": {
+      "color": "#516b91"
+    },
+    "subtextStyle": {
+      "color": "#93b7e3"
+    }
+  },
+  "line": {
+    "itemStyle": {
+      "normal": {
+        "borderWidth": "2"
+      }
+    },
+    "lineStyle": {
+      "normal": {
+        "width": "2"
+      }
+    },
+    "symbolSize": "6",
+    "symbol": "emptyCircle",
+    "smooth": true
+  },
+  "radar": {
+    "itemStyle": {
+      "normal": {
+        "borderWidth": "2"
+      }
+    },
+    "lineStyle": {
+      "normal": {
+        "width": "2"
+      }
+    },
+    "symbolSize": "6",
+    "symbol": "emptyCircle",
+    "smooth": true
+  },
+  "bar": {
+    "itemStyle": {
+      "normal": {
+        "barBorderWidth": 0,
+        "barBorderColor": "#ccc"
+      },
+      "emphasis": {
+        "barBorderWidth": 0,
+        "barBorderColor": "#ccc"
+      }
+    }
+  },
+  "pie": {
+    "itemStyle": {
+      "normal": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      },
+      "emphasis": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      }
+    }
+  },
+  "scatter": {
+    "itemStyle": {
+      "normal": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      },
+      "emphasis": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      }
+    }
+  },
+  "boxplot": {
+    "itemStyle": {
+      "normal": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      },
+      "emphasis": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      }
+    }
+  },
+  "parallel": {
+    "itemStyle": {
+      "normal": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      },
+      "emphasis": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      }
+    }
+  },
+  "sankey": {
+    "itemStyle": {
+      "normal": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      },
+      "emphasis": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      }
+    }
+  },
+  "funnel": {
+    "itemStyle": {
+      "normal": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      },
+      "emphasis": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      }
+    }
+  },
+  "gauge": {
+    "itemStyle": {
+      "normal": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      },
+      "emphasis": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      }
+    }
+  },
+  "candlestick": {
+    "itemStyle": {
+      "normal": {
+        "color": "#edafda",
+        "color0": "transparent",
+        "borderColor": "#d680bc",
+        "borderColor0": "#8fd3e8",
+        "borderWidth": "2"
+      }
+    }
+  },
+  "graph": {
+    "itemStyle": {
+      "normal": {
+        "borderWidth": 0,
+        "borderColor": "#ccc"
+      }
+    },
+    "lineStyle": {
+      "normal": {
+        "width": 1,
+        "color": "#aaa"
+      }
+    },
+    "symbolSize": "6",
+    "symbol": "emptyCircle",
+    "smooth": true,
+    "color": [
+      "#2d8cf0",
+      "#19be6b",
+      "#f5ae4a",
+      "#9189d5",
+      "#56cae2",
+      "#cbb0e3"
+    ],
+    "label": {
+      "normal": {
+        "textStyle": {
+          "color": "#eee"
+        }
+      }
+    }
+  },
+  "map": {
+    "itemStyle": {
+      "normal": {
+        "areaColor": "#f3f3f3",
+        "borderColor": "#516b91",
+        "borderWidth": 0.5
+      },
+      "emphasis": {
+        "areaColor": "rgba(165,231,240,1)",
+        "borderColor": "#516b91",
+        "borderWidth": 1
+      }
+    },
+    "label": {
+      "normal": {
+        "textStyle": {
+          "color": "#000"
+        }
+      },
+      "emphasis": {
+        "textStyle": {
+          "color": "rgb(81,107,145)"
+        }
+      }
+    }
+  },
+  "geo": {
+    "itemStyle": {
+      "normal": {
+        "areaColor": "#f3f3f3",
+        "borderColor": "#516b91",
+        "borderWidth": 0.5
+      },
+      "emphasis": {
+        "areaColor": "rgba(165,231,240,1)",
+        "borderColor": "#516b91",
+        "borderWidth": 1
+      }
+    },
+    "label": {
+      "normal": {
+        "textStyle": {
+          "color": "#000"
+        }
+      },
+      "emphasis": {
+        "textStyle": {
+          "color": "rgb(81,107,145)"
+        }
+      }
+    }
+  },
+  "categoryAxis": {
+    "axisLine": {
+      "show": true,
+      "lineStyle": {
+        "color": "#cccccc"
+      }
+    },
+    "axisTick": {
+      "show": false,
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "axisLabel": {
+      "show": true,
+      "textStyle": {
+        "color": "#fff"
+      }
+    },
+    "splitLine": {
+      "show": false,
+      "lineStyle": {
+        "color": [
+          "#eeeeee"
+        ]
+      }
+    },
+    "splitArea": {
+      "show": false,
+      "areaStyle": {
+        "color": [
+          "rgba(250,250,250,0.05)",
+          "rgba(200,200,200,0.02)"
+        ]
+      }
+    }
+  },
+  "valueAxis": {
+    "axisLine": {
+      "show": true,
+      "lineStyle": {
+        "color": "#cccccc"
+      }
+    },
+    "axisTick": {
+      "show": false,
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "axisLabel": {
+      "show": true,
+      "textStyle": {
+        "color": "#fff"
+      }
+    },
+    "splitLine": {
+      "show": false,
+      "lineStyle": {
+        "color": [
+          "#eeeeee"
+        ]
+      }
+    },
+    "splitArea": {
+      "show": false,
+      "areaStyle": {
+        "color": [
+          "rgba(250,250,250,0.05)",
+          "rgba(200,200,200,0.02)"
+        ]
+      }
+    }
+  },
+  "logAxis": {
+    "axisLine": {
+      "show": true,
+      "lineStyle": {
+        "color": "#cccccc"
+      }
+    },
+    "axisTick": {
+      "show": false,
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "axisLabel": {
+      "show": true,
+      "textStyle": {
+        "color": "#999999"
+      }
+    },
+    "splitLine": {
+      "show": true,
+      "lineStyle": {
+        "color": [
+          "#eeeeee"
+        ]
+      }
+    },
+    "splitArea": {
+      "show": false,
+      "areaStyle": {
+        "color": [
+          "rgba(250,250,250,0.05)",
+          "rgba(200,200,200,0.02)"
+        ]
+      }
+    }
+  },
+  "timeAxis": {
+    "axisLine": {
+      "show": true,
+      "lineStyle": {
+        "color": "#cccccc"
+      }
+    },
+    "axisTick": {
+      "show": false,
+      "lineStyle": {
+        "color": "#333"
+      }
+    },
+    "axisLabel": {
+      "show": true,
+      "textStyle": {
+        "color": "#999999"
+      }
+    },
+    "splitLine": {
+      "show": true,
+      "lineStyle": {
+        "color": [
+          "#eeeeee"
+        ]
+      }
+    },
+    "splitArea": {
+      "show": false,
+      "areaStyle": {
+        "color": [
+          "rgba(250,250,250,0.05)",
+          "rgba(200,200,200,0.02)"
+        ]
+      }
+    }
+  },
+  "toolbox": {
+    "iconStyle": {
+      "normal": {
+        "borderColor": "#999"
+      },
+      "emphasis": {
+        "borderColor": "#666"
+      }
+    }
+  },
+  "legend": {
+    "textStyle": {
+      "color": "#fff"
+    }
+  },
+  "tooltip": {
+    "axisPointer": {
+      "lineStyle": {
+        "color": "#ccc",
+        "width": 1
+      },
+      "crossStyle": {
+        "color": "#ccc",
+        "width": 1
+      }
+    }
+  },
+  "timeline": {
+    "lineStyle": {
+      "color": "#8fd3e8",
+      "width": 1
+    },
+    "itemStyle": {
+      "normal": {
+        "color": "#8fd3e8",
+        "borderWidth": 1
+      },
+      "emphasis": {
+        "color": "#8fd3e8"
+      }
+    },
+    "controlStyle": {
+      "normal": {
+        "color": "#8fd3e8",
+        "borderColor": "#8fd3e8",
+        "borderWidth": 0.5
+      },
+      "emphasis": {
+        "color": "#8fd3e8",
+        "borderColor": "#8fd3e8",
+        "borderWidth": 0.5
+      }
+    },
+    "checkpointStyle": {
+      "color": "#8fd3e8",
+      "borderColor": "rgba(138,124,168,0.37)"
+    },
+    "label": {
+      "normal": {
+        "textStyle": {
+          "color": "#8fd3e8"
+        }
+      },
+      "emphasis": {
+        "textStyle": {
+          "color": "#8fd3e8"
+        }
+      }
+    }
+  },
+  "visualMap": {
+    "color": [
+      "#516b91",
+      "#59c4e6",
+      "#a5e7f0"
+    ]
+  },
+  "dataZoom": {
+    "backgroundColor": "rgba(0,0,0,0)",
+    "dataBackgroundColor": "rgba(255,255,255,0.3)",
+    "fillerColor": "rgba(167,183,204,0.4)",
+    "handleColor": "#a7b7cc",
+    "handleSize": "100%",
+    "textStyle": {
+      "color": "#333"
+    }
+  },
+  "markPoint": {
+    "label": {
+      "normal": {
+        "textStyle": {
+          "color": "#eee"
+        }
+      },
+      "emphasis": {
+        "textStyle": {
+          "color": "#eee"
+        }
+      }
+    }
+  }
+}

File diff suppressed because it is too large
+ 46 - 0
src/common/map/fujian.js


+ 156 - 0
src/components/echart/bottom/bottomLeftChart/chart.vue

@@ -0,0 +1,156 @@
+<template>
+  <div>
+    <!-- 年度开工率 -->
+    <Echart
+      :options="options"
+      id="bottomLeftChart"
+      height="480px"
+      width="100%"
+    ></Echart>
+  </div>
+</template>
+
+<script>
+import Echart from "@/common/echart";
+import asyncRequest from "@/apis/service/bigScreen";
+// import resToken from "@/mixins/resToken";
+export default {
+  data() {
+    return {
+      options: {
+          legend: {},
+          tooltip: {},
+          dataset: {
+            source: [
+              ["product", "今日", "本月", "今年"],
+              // ["销售一组", 20, 30, 50],
+              // ["销售二组", 15, 60, 80],
+              // ["销售三组", 10, 20, 100],
+              // ["销售6组", 1, 30, 100],
+            ],
+          },
+          xAxis: { type: "category" },
+          yAxis: {},
+          series: [
+            {
+              type: "bar",
+              label: {
+                show: true,
+                color: "#fff", 
+                position: 'top',
+                formatter: function (params) {
+                  return params.value[1]+"%"
+                }
+              },
+              itemStyle: {
+                normal: { 
+                  color: "#1a8cd7", 
+
+                },
+              },
+            },
+            {
+              type: "bar",
+              label: {
+                show: true,
+                color: "#fff", 
+                position: 'top',
+                formatter: function (params) {
+                  return params.value[2]+"%"
+                }
+              },
+              itemStyle: {
+                normal: { 
+                  color: "skyblue", 
+
+                },
+              },
+            },
+            {
+              type: "bar",
+              label: {
+                show: true,
+                color: "#fff", 
+                position: 'top',
+                formatter: function (params) {
+                  return params.value[3]+"%"
+                }
+              },
+              itemStyle: {
+                normal: { 
+                  color: "orange", 
+
+                },
+              },
+            },
+          ],
+        },
+        flag:false,
+    };
+  },
+  components: {
+    Echart,
+  },
+  props: {
+    cdata: {
+      type: Object,
+      default: () => ({}),
+    },
+  },
+  mounted(){
+    this.initHttp()
+    // this.initHttp2()
+    // this.initHttp3()
+  },
+  methods:{
+   async initHttp(){
+      let res = await asyncRequest.datatordertransferratetoday();
+     if(res.code == 0){
+       console.log(res)
+      res.data.forEach((item,index) => {
+        this.$set(this.options.dataset.source, index+1, [item.companyName])
+        this.$set(this.options.dataset.source[index+1], 1, item.transfer_rate)
+      });
+     await this.initHttp2()
+     await this.initHttp3()
+     }else{
+       this.$message.error(res.message)
+       return;
+     }
+    },
+    async initHttp2(){
+      let res = await asyncRequest.datatordertransferratemonth();
+     if(res.code == 0){
+      res.data.forEach((item,index) => {
+        // this.$set(this.options.dataset.source, index+1, [item.companyName])
+        this.$set(this.options.dataset.source[index+1], 2, item.transfer_rate)
+      });
+     }else{
+       this.$message.error(res.message)
+       return;
+     }
+    },
+    async initHttp3(){
+      let res = await asyncRequest.datatordertransferrateyear();
+     if(res.code == 0){
+      res.data.forEach((item,index) => {
+        // this.$set(this.options.dataset.source, index+1, [item.companyName])
+        this.$set(this.options.dataset.source[index+1], 3, item.transfer_rate)
+      });
+     }else{
+       this.$message.error(res.message)
+       return;
+     }
+    }
+  },
+  watch: {
+    // cdata: {
+    //   handler() {
+      
+    //   },
+    //   immediate: true,
+    //   deep: true,
+    // },
+  },
+};
+</script>

+ 55 - 0
src/components/echart/bottom/bottomLeftChart/index.vue

@@ -0,0 +1,55 @@
+<template>
+  <div>
+    <Chart :cdata="cdata" />
+  </div>
+</template>
+
+<script>
+import Chart from './chart.vue'
+export default {
+  data () {
+    return {
+      cdata: {
+        category: [
+          "销售一组",
+          "销售二组",
+          "销售三组",
+         
+        ],
+        lineData: [
+          99,
+          18092,
+          18092
+        ],
+        barData: [
+          4600,
+          4600,
+          5000,
+          5500
+
+        ],
+        rateData: [
+          40,
+          50,
+          60
+        ]
+      }
+    };
+  },
+  components: {
+    Chart,
+  },
+  mounted () {
+    // this.setData();
+  },
+  methods: {
+    // 根据自己的业务情况修改
+    setData () {
+      
+    },
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 226 - 0
src/components/echart/bottom/bottomRightChart/chart.vue

@@ -0,0 +1,226 @@
+<template>
+  <div>
+    <!-- <dv-water-level-pond :config="config" class="dv" /> -->
+
+  <div class="dv">
+    <p style="font-size:12px;">本月汇总完成率</p>
+<dv-decoration-9>{{total_finish_rate}}</dv-decoration-9>
+  </div>
+  
+
+    
+    <Echart
+      :options="options"
+     
+      id="centreLeft1Chart"
+      height="480px"
+      width="100%"
+    ></Echart>
+  </div>
+</template>
+
+<script>
+import Echart from '@/common/echart'
+import asyncRequest from "@/apis/service/bigScreen";
+// import resToken from "@/mixins/resToken";
+export default {
+  data() {
+    return {
+      // config:{
+      //   data: [55],
+      //   shape: 'roundRect'
+      // },
+      obj:{
+
+        total_finish_rate:11,
+      },
+      total_finish_rate:"",
+      options : {
+          legend: {},
+          tooltip: {},
+          dataset: {
+            source: [
+              ["product",  "本月完成率" ],
+              
+            ],
+          },
+          xAxis: { type: "category" },
+          yAxis: {},
+          series: [
+            {
+              type: "bar",
+              barWidth:40,
+              label: {
+                show: true,
+                color: "#fff", 
+                position: 'top',
+                formatter:  (params)=> {
+                  return params.value[1]+"%"
+                }
+              },
+              itemStyle: {
+                normal: { 
+                  color: "#1a8cd7",
+                },
+              },
+            },
+            // {
+            //   type: "bar",
+            //   barWidth:40,
+            //   label: {
+            //     show: true,
+            //     color: "#fff", 
+            //     position: 'top',
+            //     formatter: function (params) {
+            //       return params.value[2]+"元"
+            //     }
+            //   },
+            //   itemStyle: {
+            //     normal: { 
+            //       color: "#28ffcd", 
+
+            //     },
+            //   },
+            // },
+            // {
+            //   type: "bar",
+            //   barWidth:40,
+            //   label: {
+            //     show: true,
+            //     color: "#fff", 
+            //     position: 'top',
+            //     formatter: function (params) {
+            //       return params.value[3]+"%"
+            //     }
+            //   },
+            //   itemStyle: {
+            //     normal: { 
+            //       color: "#ffbc25", 
+
+            //     },
+            //   },
+            // }
+          ],
+        }
+    }
+  },
+  components: {
+    Echart
+  },
+  props: {
+    cdata: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+  mounted(){
+    this.initHttp()
+  },
+  methods:{
+    async initHttp(){
+     let res = await asyncRequest.datamonthfinishrate();
+     if(res.code == 0){
+   
+      this.total_finish_rate = res.data.total_finish_rate +"%"
+  
+      res.data.list.forEach((item,index) => {
+        this.$set(this.options.dataset.source, index+1, [item.department,item.finish_rate,item.total_tips])
+        
+      });
+      // console.log(this.options.dataset.source)
+     }else{
+       this.$message.error(res.message)
+       return;
+     }
+   },
+  },
+  // watch: {
+  //   cdata: {
+  //     handler() {
+  //       this.options = {
+  //         legend: {},
+  //         tooltip: {},
+  //         dataset: {
+  //           source: [
+  //             ["product",  "本月完成率"],
+              
+  //           ],
+  //         },
+  //         xAxis: { type: "category" },
+  //         yAxis: {},
+  //         series: [
+  //           {
+  //             type: "bar",
+  //             barWidth:40,
+  //             label: {
+  //               show: true,
+  //               color: "#fff", 
+  //               position: 'top',
+  //               formatter:  (params)=> {
+  //                 return params.value[1]+"%"
+  //               }
+  //             },
+  //             itemStyle: {
+  //               normal: { 
+  //                 color: "#1a8cd7", 
+
+  //               },
+  //             },
+  //           },
+  //           // {
+  //           //   type: "bar",
+  //           //   barWidth:40,
+  //           //   label: {
+  //           //     show: true,
+  //           //     color: "#fff", 
+  //           //     position: 'top',
+  //           //     formatter: function (params) {
+  //           //       return params.value[2]+"元"
+  //           //     }
+  //           //   },
+  //           //   itemStyle: {
+  //           //     normal: { 
+  //           //       color: "#28ffcd", 
+
+  //           //     },
+  //           //   },
+  //           // },
+  //           // {
+  //           //   type: "bar",
+  //           //   barWidth:40,
+  //           //   label: {
+  //           //     show: true,
+  //           //     color: "#fff", 
+  //           //     position: 'top',
+  //           //     formatter: function (params) {
+  //           //       return params.value[3]+"%"
+  //           //     }
+  //           //   },
+  //           //   itemStyle: {
+  //           //     normal: { 
+  //           //       color: "#ffbc25", 
+
+  //           //     },
+  //           //   },
+  //           // }
+  //         ],
+  //       };
+  //     },
+  //     immediate: true,
+  //     deep: true,
+  //   },
+  // }
+}
+</script>
+<style scoped>
+   .dv{
+     width: 100px;
+     height: 100px;
+     position: absolute;
+     right: 15px;
+   }
+   .dv>p{
+     text-align: center;
+     padding-bottom: 5px;
+   }
+</style>

+ 89 - 0
src/components/echart/bottom/bottomRightChart/index.vue

@@ -0,0 +1,89 @@
+<template>
+  <div>
+    <Chart :cdata="cdata" />
+  </div>
+</template>
+
+<script>
+import Chart from './chart.vue'
+export default {
+  data () {
+    return {
+      drawTiming: null,
+      cdata: {
+        year: null,
+        weekCategory: [],
+        radarData: [],
+        radarDataAvg: [],
+        maxData: 12000,
+        weekMaxData: [],
+        weekLineData: []
+      }
+    }
+  },
+  components: {
+    Chart,
+  },
+  mounted () {
+    this.drawTimingFn();
+  },
+  beforeDestroy () {
+    clearInterval(this.drawTiming);
+  },
+  methods: {
+    drawTimingFn () {
+      this.setData();
+      this.drawTiming = setInterval(() => {
+        this.setData();
+      }, 6000);
+    },
+    setData () {
+      // 清空轮询数据
+      this.cdata.weekCategory = [];
+      this.cdata.weekMaxData = [];
+      this.cdata.weekLineData = [];
+      this.cdata.radarData = [];
+      this.cdata.radarDataAvg = [];
+
+      let dateBase = new Date();
+      this.cdata.year = dateBase.getFullYear();
+      // 周数据
+      for (let i = 0; i < 7; i++) {
+        // 日期
+        let date = new Date();
+        this.cdata.weekCategory.unshift([date.getMonth() + 1, date.getDate()-i].join("/"));
+
+        // 折线图数据
+        this.cdata.weekMaxData.push(this.cdata.maxData);
+        let distance = Math.round(Math.random() * 11000 + 500);
+        this.cdata.weekLineData.push(distance);
+
+        // 雷达图数据
+        // 我的指标
+        let averageSpeed = +(Math.random() * 5 + 3).toFixed(3);
+        let maxSpeed = averageSpeed + +(Math.random() * 3).toFixed(2);
+        let hour = +(distance / 1000 / averageSpeed).toFixed(1);
+        let radarDayData = [distance, averageSpeed, maxSpeed, hour];
+        this.cdata.radarData.unshift(radarDayData);
+
+        // 平均指标
+        let distanceAvg = Math.round(Math.random() * 8000 + 4000);
+        let averageSpeedAvg = +(Math.random() * 4 + 4).toFixed(3);
+        let maxSpeedAvg = averageSpeedAvg + +(Math.random() * 2).toFixed(2);
+        let hourAvg = +(distance / 1000 / averageSpeed).toFixed(1);
+        let radarDayDataAvg = [
+          distanceAvg,
+          averageSpeedAvg,
+          maxSpeedAvg,
+          hourAvg
+        ];
+        this.cdata.radarDataAvg.unshift(radarDayDataAvg);
+      }
+
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 104 - 0
src/components/echart/center/centerChartRate/index.vue

@@ -0,0 +1,104 @@
+<template>
+  <div>
+    <!-- 通过率/达标率 -->
+    <Echart
+      :options="options"
+      :id="id"
+      height="100px"
+      width="100px"
+    ></Echart>
+  </div>
+</template>
+
+<script>
+import Echart from '@/common/echart'
+export default {
+  data () {
+    return {
+      options: {},
+    };
+  },
+  components: {
+    Echart,
+  },
+  props: {
+    id: {
+      type: String,
+      required: true,
+      default: "chartRate"
+    },
+    tips: {
+      type: Number,
+      required: true,
+      default: 50
+    },
+    colorObj: {
+      type: Object,
+      default: function () {
+        return {
+          textStyle: "#3fc0fb",
+          series: {
+            color: ["#00bcd44a", "transparent"],
+            dataColor: {
+              normal: "#03a9f4",
+              shadowColor: "#97e2f5"
+            }
+          }
+        };
+      }
+    }
+  },
+  watch: {
+    // tips 是会变更的数据,所以进行监听
+    tips: {
+      handler (newData) {
+        this.options = {
+          title:{
+            text: newData * 1 + "%",
+            x: "center",
+            y: "center",
+            textStyle: {
+              color: this.colorObj.textStyle,
+              fontSize: 16
+            }
+          },
+          series: [
+            {
+              type: "pie",
+              radius: ["75%", "80%"],
+              center: ["50%", "50%"],
+              hoverAnimation: false,
+              color: this.colorObj.series.color,
+              label: {
+                normal: {
+                  show: false
+                }
+              },
+              data: [
+                {
+                  value: newData,
+                  itemStyle: {
+                    normal: {
+                      color: this.colorObj.series.dataColor.normal,
+                      shadowBlur: 10,
+                      shadowColor: this.colorObj.series.dataColor.shadowColor
+                    }
+                  }
+                },
+                {
+                  value: 100 - newData
+                }
+              ]
+            }
+          ]
+        }
+      },
+      immediate: true,
+      deep: true
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 80 - 0
src/components/echart/centerLeft/centerLeft1Chart/chart.vue

@@ -0,0 +1,80 @@
+<template>
+  <div>
+    <Echart
+      :options="options"
+      id="centreLeft1Chart"
+      height="220px"
+      width="260px"
+    ></Echart>
+  </div>
+</template>
+
+<script>
+import Echart from '@/common/echart'
+export default {
+  data () {
+    return {
+      options: {},
+    };
+  },
+  components: {
+    Echart,
+  },
+  props: {
+    cdata: {
+      type: Object,
+      default: () => ({})
+    },
+  },
+  watch: {
+    cdata: {
+      handler (newData) {
+        this.options = {
+          color: [
+            "#ffdb5c",
+            "#ff9f7f",
+            "#fb7293",
+            "#e7bcf3",
+            "#8378ea"
+          ],
+          tooltip: {
+            trigger: "item",
+            formatter: "{a} <br/>{b} : {c}%"
+          },
+          toolbox: {
+            show: true
+          },
+          calculable: true,
+
+          //部门标识
+          legend: {
+            orient: "horizontal",
+            icon: "circle",
+            bottom: 0,
+            x: "center",
+            data: newData.xData,
+            textStyle: {
+              color: "#fff"
+            }
+          },
+          series: [
+            {
+              name: "今日销量",
+              type: "pie",
+              radius: '50%',
+              roseType: "area",
+              center: ["50%", "40%"],
+              data: newData.seriesData
+            }
+          ]
+        }
+      },
+      immediate: true,
+      deep: true
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 41 - 0
src/components/echart/centerLeft/centerLeft1Chart/index.vue

@@ -0,0 +1,41 @@
+<template>
+  <div>
+    <Chart :cdata="cdata" />
+  </div>
+</template>
+
+<script>
+import Chart from './chart.vue';
+export default {
+  data () {
+    return {
+      cdata: {
+        // xData: ["data1", "data2", "data3", "data4", "data5", "data6"],
+        xData: ["单数", "金额"],
+        // seriesData: [
+        //   { value: 100, name: "data1" },
+        //   { value: 100, name: "data2" },
+        //   { value: 100, name: "data3" },
+        //   { value: 90, name: "data4" },
+        //   { value: 70, name: "data5" },
+        //   { value: 50, name: "data6" }
+        // ]
+        seriesData: [
+          { value: 10, name: "单数" },
+          { value: 1000, name: "金额" },
+        ]
+      }
+    }
+  },
+  components: {
+    Chart,
+  },
+  mounted () {
+  },
+  methods: {
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 290 - 0
src/components/echart/centerLeft/centerLeft2Chart/chart.vue

@@ -0,0 +1,290 @@
+<template>
+  <div>
+    <Echart
+      id="centreLeft2Chart"
+      ref="centreLeft2ChartRef"
+      :options="options"
+      height="360px"
+      width="330px"
+    ></Echart>
+  </div>
+</template>
+
+<script>
+import Echart from '@/common/echart';
+export default {
+  data() {
+    return {
+      options: {},
+    };
+  },
+  components: {
+    Echart,
+  },
+  props: {
+    cdata: {
+      type: Array,
+      default: () => [],
+    },
+  },
+  watch: {
+    cdata: {
+      handler(newData) {
+        // 设置点的位置(经纬度)
+        const geoCoordMap = {
+          厦门市: [118.11022, 24.490474, 20],
+          福州市: [119.206239, 26.275302, 20],
+          泉州市: [118.589421, 24.908853, 20],
+          漳州市: [117.561801, 24.510897, 20],
+          龙岩市: [116.82978, 25.391603, 20],
+          莆田市: [119.007558, 25.591011, 20],
+          三明市: [117.435001, 26.465444, 20],
+          南平市: [118.178459, 27.535627, 20],
+          宁德市: [119.527082, 27.15924, 20],
+        };
+        let seriesData = [
+          {
+            name: '厦门市',
+          },
+          {
+            name: '福州市',
+          },
+          {
+            name: '泉州市',
+          },
+          {
+            name: '漳州市',
+          },
+          {
+            name: '龙岩市',
+          },
+          {
+            name: '莆田市',
+          },
+          {
+            name: '三明市',
+          },
+          {
+            name: '南平市',
+          },
+          {
+            name: '宁德市',
+          },
+        ];
+        let convertData = function (data) {
+          let scatterData = [];
+          for (var i = 0; i < data.length; i++) {
+            var geoCoord = geoCoordMap[data[i].name];
+            if (geoCoord) {
+              scatterData.push({
+                name: data[i].name,
+                value: geoCoord.concat(data[i].value),
+              });
+            }
+          }
+          return scatterData;
+        };
+        this.options = {
+          showLegendSymbol: true,
+          tooltip: {
+            trigger: 'item',
+            textStyle: {
+              fontSize: 14,
+              lineHeight: 22,
+            },
+            position: point => {
+              // 固定在顶部
+              return [point[0] + 50, point[1] - 20];
+            },
+            // 如果需要自定义 tooltip样式,需要使用formatter
+            /*
+              formatter: params => {
+                return `<div style=""> ... </div>`
+              }
+            */
+          },
+          visualMap: {
+            min: 0,
+            max: 10,
+            show: false,
+            seriesIndex: 0,
+            // 颜色
+            inRange: {
+              color: ['rgba(41,166,206, .5)', 'rgba(69,117,245, .9)'],
+            },
+          },
+          // 底部背景
+          geo: {
+            show: true,
+            aspectScale: 0.85, //长宽比
+            zoom: 1.2,
+            top: '10%',
+            left: '16%',
+            map: '福建',
+            roam: false,
+            itemStyle: {
+              normal: {
+                areaColor: 'rgba(0,0,0,0)',
+                shadowColor: 'rgba(7,114,204, .8)',
+                shadowOffsetX: 5,
+                shadowOffsetY: 5,
+              },
+              emphasis: {
+                areaColor: '#00aeef',
+              },
+            },
+          },
+          series: [
+            {
+              name: '相关指数',
+              type: 'map',
+              aspectScale: 0.85, //长宽比
+              zoom: 1.2,
+              mapType: '福建', // 自定义扩展图表类型
+              top: '10%',
+              left: '16%',
+              itemStyle: {
+                normal: {
+                  color: 'red',
+                  areaColor: 'rgba(19,54,162, .5)',
+                  borderColor: 'rgba(0,242,252,.3)',
+                  borderWidth: 1,
+                  shadowBlur: 7,
+                  shadowColor: '#00f2fc',
+                },
+                emphasis: {
+                  areaColor: '#4f7fff',
+                  borderColor: 'rgba(0,242,252,.6)',
+                  borderWidth: 2,
+                  shadowBlur: 10,
+                  shadowColor: '#00f2fc',
+                },
+              },
+              label: {
+                formatter: params => `${params.name}`,
+                show: true,
+                position: 'insideRight',
+                textStyle: {
+                  fontSize: 14,
+                  color: '#efefef',
+                },
+                emphasis: {
+                  textStyle: {
+                    color: '#fff',
+                  },
+                },
+              },
+              data: newData,
+            },
+            {
+              type: 'effectScatter',
+              coordinateSystem: 'geo',
+              symbolSize: 7,
+              effectType: 'ripple',
+              legendHoverLink: false,
+              showEffectOn: 'render',
+              rippleEffect: {
+                period: 4,
+                scale: 2.5,
+                brushType: 'stroke',
+              },
+              zlevel: 1,
+              itemStyle: {
+                normal: {
+                  color: '#99FBFE',
+                  shadowBlur: 5,
+                  shadowColor: '#fff',
+                },
+              },
+              data: convertData(seriesData),
+            },
+          ],
+        };
+        // 重新选择区域
+        this.handleMapRandomSelect();
+      },
+      immediate: true,
+      deep: true,
+    },
+  },
+  methods: {
+    // 开启定时器
+    startInterval() {
+      const _self = this;
+      // 应通过接口获取配置时间,暂时写死5s
+      const time = 2000;
+      if (this.intervalId !== null) {
+        clearInterval(this.intervalId);
+      }
+      this.intervalId = setInterval(() => {
+        _self.reSelectMapRandomArea();
+      }, time);
+    },
+    // 重新随机选中地图区域
+    reSelectMapRandomArea() {
+      const length = 9;
+      this.$nextTick(() => {
+        try {
+          const map = this.$refs.centreLeft2ChartRef.chart;
+          let index = Math.floor(Math.random() * length);
+          while (index === this.preSelectMapIndex || index >= length) {
+            index = Math.floor(Math.random() * length);
+          }
+          map.dispatchAction({
+            type: 'mapUnSelect',
+            seriesIndex: 0,
+            dataIndex: this.preSelectMapIndex,
+          });
+          map.dispatchAction({
+            type: 'showTip',
+            seriesIndex: 0,
+            dataIndex: index,
+          });
+          map.dispatchAction({
+            type: 'mapSelect',
+            seriesIndex: 0,
+            dataIndex: index,
+          });
+          this.preSelectMapIndex = index;
+        } catch (error) {
+          console.log(error)
+        }
+      });
+    },
+    handleMapRandomSelect() {
+      this.$nextTick(() => {
+        try {
+          const map = this.$refs.centreLeft2ChartRef.chart;
+          const _self = this;
+          setTimeout(() => {
+            _self.reSelectMapRandomArea();
+          }, 0);
+          // 移入区域,清除定时器、取消之前选中并选中当前
+          map.on('mouseover', function (params) {
+            clearInterval(_self.intervalId);
+            map.dispatchAction({
+              type: 'mapUnSelect',
+              seriesIndex: 0,
+              dataIndex: _self.preSelectMapIndex,
+            });
+            map.dispatchAction({
+              type: 'mapSelect',
+              seriesIndex: 0,
+              dataIndex: params.dataIndex,
+            });
+            _self.preSelectMapIndex = params.dataIndex;
+          });
+          // 移出区域重新随机选中地图区域,并开启定时器
+          map.on('globalout', function () {
+            _self.reSelectMapRandomArea();
+            _self.startInterval();
+          });
+          this.startInterval();
+        } catch (error) {
+          console.log(error)
+        }
+      });
+    },
+  },
+};
+</script>

+ 67 - 0
src/components/echart/centerLeft/centerLeft2Chart/index.vue

@@ -0,0 +1,67 @@
+<template>
+  <div>
+    <Chart :cdata="cdata" />
+  </div>
+</template>
+
+<script>
+import Chart from './chart.vue';
+export default {
+  data () {
+    return {
+      cdata: [
+        {
+          // 名字需要与 “common/map/fujian.js” 地图数据文件里面定义的一一对应,不能是 “福州” 或者 “闽” 之类的缩写
+          name: '福州市',
+          value: 10,
+          elseData:{
+            // 这里放置地图 tooltip 里想显示的数据
+          }
+        },
+        {
+          name: '厦门市',
+          value: 9,
+        },
+        {
+          name: '漳州市',
+          value: 8,
+        },
+        {
+          name: '泉州市',
+          value: 7,
+        },
+        {
+          name: '三明市',
+          value: 6,
+        },
+        {
+          name: '莆田市',
+          value: 5,
+        },
+        {
+          name: '南平市',
+          value: 4,
+        },
+        {
+          name: '龙岩市',
+          value: 3,
+        },
+        {
+          name: '宁德市',
+          value: 2,
+        }
+      ]
+    }
+  },
+  components: {
+    Chart,
+  },
+  mounted () {
+  },
+  methods: {
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 132 - 0
src/components/echart/centerRight/centerRightChart/chart.vue

@@ -0,0 +1,132 @@
+<template>
+  <div>
+    <Echart
+      :options="options"
+      id="centreRight2Chart1"
+      height="200px"
+      width="260px"
+    ></Echart>
+  </div>
+</template>
+
+<script>
+import Echart from '@/common/echart'
+export default {
+  data () {
+    return {
+      options: {},
+    };
+  },
+  components: {
+    Echart,
+  },
+  props: {
+    cdata: {
+      type: Object,
+      default: () => ({})
+    },
+  },
+  watch: {
+    cdata: {
+      handler (newData) {
+        // 固定样式数据
+        let lineStyle = {
+          normal: {
+            width: 1,
+            opacity: 0.5
+          }
+        };
+
+        this.options = {
+          radar: {
+            indicator: newData.indicatorData,
+            shape: "circle",
+            splitNumber: 5,
+            radius: ["0%", "65%"],
+            name: {
+              textStyle: {
+                color: "rgb(238, 197, 102)"
+              }
+            },
+            splitLine: {
+              lineStyle: {
+                color: [
+                  "rgba(238, 197, 102, 0.1)",
+                  "rgba(238, 197, 102, 0.2)",
+                  "rgba(238, 197, 102, 0.4)",
+                  "rgba(238, 197, 102, 0.6)",
+                  "rgba(238, 197, 102, 0.8)",
+                  "rgba(238, 197, 102, 1)"
+                ].reverse()
+              }
+            },
+            splitArea: {
+              show: false
+            },
+            axisLine: {
+              lineStyle: {
+                color: "rgba(238, 197, 102, 0.5)"
+              }
+            }
+          },
+          series: [
+            {
+              name: "北京",
+              type: "radar",
+              lineStyle: lineStyle,
+              data: newData.dataBJ,
+              symbol: "none",
+              itemStyle: {
+                normal: {
+                  color: "#F9713C"
+                }
+              },
+              areaStyle: {
+                normal: {
+                  opacity: 0.1
+                }
+              }
+            },
+            {
+              name: "上海",
+              type: "radar",
+              lineStyle: lineStyle,
+              data: newData.dataSH,
+              symbol: "none",
+              itemStyle: {
+                normal: {
+                  color: "#B3E4A1"
+                }
+              },
+              areaStyle: {
+                normal: {
+                  opacity: 0.05
+                }
+              }
+            },
+            {
+              name: "广州",
+              type: "radar",
+              lineStyle: lineStyle,
+              data: newData.dataGZ,
+              symbol: "none",
+              itemStyle: {
+                normal: {
+                  color: "rgb(238, 197, 102)"
+                }
+              },
+              areaStyle: {
+                normal: {
+                  opacity: 0.05
+                }
+              }
+            } //end
+          ]
+        }
+      },
+      immediate: true,
+      deep: true
+    }
+  }
+};
+</script>

+ 55 - 0
src/components/echart/centerRight/centerRightChart/index.vue

@@ -0,0 +1,55 @@
+<template>
+  <div>
+    <Chart :cdata="cdata" />
+  </div>
+</template>
+
+<script>
+import Chart from './chart.vue';
+export default {
+  data () {
+    return {
+      cdata: {
+        indicatorData: [
+          { name: "data1", max: 300 },
+          { name: "data2", max: 250 },
+          { name: "data3", max: 300 },
+          { name: "data4", max: 5},
+          { name: "data5", max: 200 },
+          { name: "data6", max: 100 }
+        ],
+        dataBJ: [
+          [94, 69, 114, 2.08, 73, 39, 22],
+          [99, 73, 110, 2.43, 76, 48, 23],
+          [31, 12, 30, 0.5, 32, 16, 24],
+          [42, 27, 43, 1, 53, 22, 25],
+          [154, 117, 157, 3.05, 92, 58, 26],
+          [234, 185, 230, 4.09, 123, 69, 27],
+          [160, 120, 186, 2.77, 91, 50, 28]
+        ],
+        dataGZ: [
+          [84, 94, 140, 2.238, 68, 18, 22],
+          [93, 77, 104, 1.165, 53, 7, 23],
+          [99, 130, 227, 3.97, 55, 15, 24],
+          [146, 84, 139, 1.094, 40, 17, 25],
+          [113, 108, 137, 1.481, 48, 15, 26],
+          [81, 48, 62, 1.619, 26, 3, 27],
+          [56, 48, 68, 1.336, 37, 9, 28]
+        ],
+        dataSH: [
+          [91, 45, 125, 0.82, 34, 23, 1],
+          [65, 27, 78, 0.86, 45, 29, 2],
+          [83, 60, 84, 1.09, 73, 27, 3],
+          [109, 81, 121, 1.28, 68, 51, 4],
+          [106, 77, 114, 1.07, 55, 51, 5],
+          [109, 81, 121, 1.28, 68, 51, 6],
+          [106, 77, 114, 1.07, 55, 51, 7]
+        ]
+      }
+    }
+  },
+  components: {
+    Chart,
+  }
+}
+</script>

+ 14 - 0
src/filters/filter.js

@@ -62,3 +62,17 @@ Vue.filter('timewd', function (value) {
     return value.replace(".000", "")
   }
 })
+
+
+/** 大额数字单位换算 */
+Vue.filter('getNum', function (num) {
+  num = Number(num);
+  if (!num) return '0.00';
+  if (num > 10000 || num < -10000) {
+    const moneys = num / 10000
+    const realVal = parseFloat(moneys).toFixed(2);
+    return realVal + "万"
+  } else {
+    return num.toFixed(2)
+  }
+})

+ 15 - 0
src/main.js

@@ -18,7 +18,21 @@ import App from './App'
 import store from './store'
 import base from './assets/utils/prototype/index'
 
+import dataV from '@jiaminghi/data-view';
+// 按需引入vue-awesome图标
+import Icon from 'vue-awesome/components/Icon';
+import 'vue-awesome/icons/chart-bar.js';
+import 'vue-awesome/icons/chart-area.js';
+import 'vue-awesome/icons/chart-pie.js';
+import 'vue-awesome/icons/chart-line.js';
+import 'vue-awesome/icons/align-left.js';
+import echarts from 'echarts'
 import * as filters from './filters' // global filters
+Vue.component('icon', Icon);
+Vue.use(dataV);
+
+Vue.prototype.$echarts = echarts
+
 
 Array.prototype.remove = function (val) {
   var index = this.indexOf(val);
@@ -46,6 +60,7 @@ Vue.use(PuzzleVerification)
 
 // register global utility filters
 Object.keys(filters).forEach(key => {
+  console.log("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",key)
   Vue.filter(key, filters[key])
 })
 

BIN
src/views/bigScreen/assetsDv/logo.png


BIN
src/views/bigScreen/assetsDv/pageBg.png


+ 98 - 0
src/views/bigScreen/assetsDv/scss/_variables.scss

@@ -0,0 +1,98 @@
+// 颜色
+$colors: (
+  "primary": #1A5CD7,
+  "info-1": #4394e4,
+  "info": #4b67af,
+  "white": #ffffff,
+  "light": #f9f9f9,
+  "grey-1": #999999,
+  "grey": #666666,
+  "dark-1": #5f5f5f,
+  "dark": #222222,
+  "black-1": #171823,
+  "black": #000000,
+  "icon": #5cd9e8
+);
+
+// 字体大小
+$base-font-size: 0.2rem;
+$font-sizes: (
+  xxs: 0.1,
+  //8px
+    xs: 0.125,
+  //10px
+    sm: 0.2875,
+  //12px
+    md: 0.1625,
+  //13px
+    lg: 0.175,
+  //14px
+    xl: 0.2,
+  //16px
+    xxl: 0.225,
+  //18px
+    xxxl: 0.25 //20px,,,,
+);
+
+// 宽高
+.w-100 {
+  width: 100%;
+}
+.h-100 {
+  height: 100%;
+}
+
+//flex
+.d-flex {
+  display: flex;
+}
+.flex-column {
+  flex-direction: column;
+}
+.flex-wrap {
+  flex-wrap: wrap;
+}
+.flex-nowrap {
+  flex-wrap: nowrap;
+}
+$flex-jc: (
+  start: flex-start,
+  end: flex-end,
+  center: center,
+  between: space-between,
+  around: space-around,
+  evenly: space-evenly,
+);
+
+$flex-ai: (
+  start: flex-start,
+  end: flex-end,
+  center: center,
+  stretch: stretch,
+);
+
+.flex-1 {
+  flex: 1;
+}
+
+//.mt-1 => margin top
+//spacing
+$spacing-types: (
+  m: margin,
+  p: padding,
+);
+$spacing-directions: (
+  t: top,
+  r: right,
+  b: bottom,
+  l: left,
+);
+$spacing-base-size: 0.5rem;
+$spacing-sizes: (
+  0: 0,
+  1: 0.5,
+  2: 1,
+  3: 1.5,
+  4: 2,
+  5: 2.5,
+);

+ 146 - 0
src/views/bigScreen/assetsDv/scss/index.scss

@@ -0,0 +1,146 @@
+#index {
+  color: #d3d6dd;
+  width: 1920px;
+  height: 1080px;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  transform-origin: left top;
+  // overflow: hidden;
+  // padding-top: 20px;
+  
+  .bg {
+    width: 100%;
+    height: 100%;
+    padding: 16px 16px 0 16px;
+    background-image: url("../assetsDv/pageBg.png");
+    background-size: cover;
+    background-position: center center;
+  }
+
+  .host-body {
+    .dv-dec-10,
+    .dv-dec-10-s {
+      width: 33.3%;
+      height: 5px;
+    }
+    .dv-dec-10-s {
+      transform: rotateY(180deg);
+    }
+    .dv-dec-8 {
+      width: 200px;
+      height: 50px;
+    }
+    .title {
+      position: relative;
+      width: 500px;
+      text-align: center;
+      background-size: cover;
+      background-repeat: no-repeat;
+
+      .title-text {
+        font-size: 24px;
+        position: absolute;
+        bottom: 0;
+        left: 50%;
+        transform: translate(-50%);
+      }
+
+      .dv-dec-6 {
+        position: absolute;
+        bottom: -30px;
+        left: 50%;
+        width: 250px;
+        height: 8px;
+        transform: translate(-50%);
+      }
+    }
+
+    // 第二行
+    .aside-width {
+      width: 40%;
+    }
+    .react-r-s,
+    .react-l-s {
+      background-color: #0f1325;
+    }
+
+    // 平行四边形
+    .react-right {
+      &.react-l-s {
+        text-align: right;
+        width: 500px;
+      }
+      font-size: 18px;
+      width: 300px;
+      line-height: 50px;
+      text-align: center;
+      transform: skewX(-45deg);
+
+      .react-after {
+        position: absolute;
+        right: -25px;
+        top: 0;
+        height: 50px;
+        width: 50px;
+        background-color: #0f1325;
+        transform: skewX(45deg);
+      }
+
+      .text {
+        display: inline-block;
+        transform: skewX(45deg);
+      }
+    }
+
+    .react-left {
+      &.react-l-s {
+        width: 500px;
+        text-align: left;
+      }
+      font-size: 18px;
+      width: 300px;
+      height: 50px;
+      line-height: 50px;
+      text-align: center;
+      transform: skewX(45deg);
+      background-color: #0f1325;
+
+      .react-left {
+        position: absolute;
+        left: -25px;
+        top: 0;
+        height: 50px;
+        width: 50px;
+        background-color: #0f1325;
+        transform: skewX(-45deg);
+      }
+
+      .text {
+        display: inline-block;
+        transform: skewX(-45deg);
+      }
+    }
+
+    .body-box {
+      margin-top: 16px;
+      display: flex;
+      flex-direction: column;
+
+      //下方区域的布局
+      .content-box {
+        display: grid;
+        // grid-template-columns: 2fr 3fr 5fr 3fr 2fr;
+        grid-template-columns: 3fr 2fr 5fr 5fr;
+      }
+
+      // 底部数据
+      .bototm-box {
+        margin-top: 10px;
+        display: grid;
+        grid-template-columns: repeat(2, 50%);
+      }
+    }
+  }
+}

+ 185 - 0
src/views/bigScreen/assetsDv/scss/style.scss

@@ -0,0 +1,185 @@
+@import "./variables";
+
+//  全局样式
+* {
+  margin: 0;
+  padding: 0;
+  list-style-type: none;
+  outline: none;
+  box-sizing: border-box;
+}
+
+html {
+  margin: 0;
+  padding: 0;
+}
+
+body {
+  font-family: Arial, Helvetica, sans-serif;
+  line-height: 1.2em;
+  background-color: #f1f1f1;
+  margin: 0;
+  padding: 0;
+}
+
+a {
+  color: #343440;
+  text-decoration: none;
+}
+
+.clearfix {
+  &::after {
+    content: "";
+    display: table;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    clear: both;
+  }
+}
+
+//浮动
+.float-r {
+  float: right;
+}
+
+//浮动
+.float-l {
+  float: left;
+}
+
+// 字体加粗
+.fw-b {
+  font-weight: bold;
+}
+
+//文章一行显示,多余省略号显示
+.title-item {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.bg-color-black {
+  background-color: rgba(19, 25, 47, 0.6);
+}
+
+.bg-color-blue {
+  background-color: #1a5cd7;
+}
+
+.colorBlack {
+  color: #272727 !important;
+
+  &:hover {
+    color: #272727 !important;
+  }
+}
+
+.colorGrass {
+  color: #33cea0;
+
+  &:hover {
+    color: #33cea0 !important;
+  }
+}
+
+.colorRed {
+  color: #ff5722;
+
+  &:hover {
+    color: #ff5722 !important;
+  }
+}
+
+.colorText {
+  color: #d3d6dd !important;
+
+  &:hover {
+    color: #d3d6dd !important;
+  }
+}
+
+.colorBlue {
+  color: #257dff !important;
+
+  &:hover {
+    color: #257dff !important;
+  }
+}
+
+//颜色
+@each $colorkey, $color in $colors {
+  .text-#{$colorkey} {
+    color: $color;
+  }
+
+  .bg-#{$colorkey} {
+    background-color: $color;
+  }
+}
+
+//对齐
+@each $var in (left, center, right) {
+  .text-#{$var} {
+    text-align: $var !important;
+  }
+}
+
+//flex
+@each $key, $value in $flex-jc {
+  .jc-#{$key} {
+    justify-content: $value;
+  }
+}
+
+@each $key, $value in $flex-ai {
+  .ai-#{$key} {
+    align-items: $value;
+  }
+}
+
+//字体
+@each $fontkey, $fontvalue in $font-sizes {
+  .fs-#{$fontkey} {
+    font-size: $fontvalue * $base-font-size;
+  }
+}
+
+//.mt-1 => margin top
+//spacing
+
+@each $typekey, $type in $spacing-types {
+  //.m-1
+  @each $sizekey, $size in $spacing-sizes {
+    .#{$typekey}-#{$sizekey} {
+      #{$type}: $size * $spacing-base-size;
+    }
+  }
+
+  //.mx-1
+  @each $sizekey, $size in $spacing-sizes {
+    .#{$typekey}x-#{$sizekey} {
+      #{$type}-left: $size * $spacing-base-size;
+      #{$type}-right: $size * $spacing-base-size;
+    }
+
+    .#{$typekey}y-#{$sizekey} {
+      #{$type}-top: $size * $spacing-base-size;
+      #{$type}-bottom: $size * $spacing-base-size;
+    }
+  }
+
+  //.mt-1
+  @each $directionkey, $direction in $spacing-directions {
+    @each $sizekey, $size in $spacing-sizes {
+      .#{$typekey}#{$directionkey}-#{$sizekey} {
+        #{$type}-#{$direction}: $size * $spacing-base-size;
+      }
+    }
+  }
+
+  .#{$typekey} {
+    #{$type}: 0;
+  }
+}

+ 52 - 0
src/views/bigScreen/datavScr/bottomLeft.vue

@@ -0,0 +1,52 @@
+<template>
+  <div id="bottomLeft">
+    <div class="bg-color-black">
+      <div class="d-flex pt-2 pl-2">
+        <span>
+          <icon name="chart-bar" class="text-icon"></icon>
+        </span>
+        <div class="d-flex">
+          <span class="fs-xl text mx-2">转单率</span>
+        </div>
+      </div>
+      <div>
+        <BottomLeftChart />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import BottomLeftChart from '@/components/echart/bottom/bottomLeftChart'
+export default {
+  components: {
+    BottomLeftChart
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+$box-height: 520px;
+$box-width: 100%;
+#bottomLeft {
+  padding: 20px 16px;
+  height: $box-height;
+  width: $box-width;
+  border-radius: 5px;
+  .bg-color-black {
+    height: $box-height - 35px;
+    border-radius: 10px;
+  }
+  .text {
+    color: #c3cbde;
+  }
+  .chart-box {
+    margin-top: 16px;
+    width: 170px;
+    height: 170px;
+    .active-ring-name {
+      padding-top: 10px;
+    }
+  }
+}
+</style>

+ 60 - 0
src/views/bigScreen/datavScr/bottomRight.vue

@@ -0,0 +1,60 @@
+<template>
+  <div id="bottomRight">
+    <div class="bg-color-black">
+      <div class="d-flex pt-2 pl-2">
+        <span>
+          <icon name="chart-area" class="text-icon"></icon>
+        </span>
+        <div class="d-flex">
+          <span class="fs-xl text mx-2">本月完成率</span>
+          <div class="decoration2">
+            <dv-decoration-2 :reverse="true" style="width:5px;height:6rem;" />
+          </div>
+        </div>
+      </div>
+      <div>
+        <BottomRightChart />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import BottomRightChart from "@/components/echart/bottom/bottomRightChart";
+export default {
+  components: {
+    BottomRightChart
+  }
+};
+</script>
+
+<style lang="scss" class>
+$box-height: 520px;
+$box-width: 100%;
+#bottomRight {
+  padding: 14px 16px;
+  height: $box-height;
+  width: $box-width;
+  border-radius: 5px;
+  .bg-color-black {
+    height: $box-height - 30px;
+    border-radius: 10px;
+  }
+  .text {
+    color: #c3cbde;
+  }
+  //下滑线动态
+  .decoration2 {
+    position: absolute;
+    right: 0.125rem;
+  }
+  .chart-box {
+    margin-top: 16px;
+    width: 170px;
+    height: 170px;
+    .active-ring-name {
+      padding-top: 10px;
+    }
+  }
+}
+</style>

+ 166 - 0
src/views/bigScreen/datavScr/center.vue

@@ -0,0 +1,166 @@
+<template>
+  <div id="center">
+    <div class="up">
+      <div class="bg-color-black item">
+        <p class="ml-3 fw-b fs-xl cec"><span style="color:#ffbc25;">(竞价单)</span> 招标单数</p>
+        <div class="ml-3 cex">{{datatotalzixunpurchease.zixun_total | getNum}}</div>    
+      </div>
+      <div class="bg-color-black item">
+        <p class="ml-3 fw-b fs-xl cec"><span style="color:#ffbc25;">(竞价单)</span> 未竞标单数</p>
+        <div class="ml-3 cex">{{datatotalzixunpurchease.not_feedback | getNum}}</div>    
+      </div>
+      <div class="bg-color-black item">
+        <p class="ml-3 fw-b fs-xl cec"><span style="color:#ffbc25;">(采购单)</span> 采购单数</p>
+        <div class="ml-3 cex">{{datatotalzixunpurchease.purchease_total | getNum}}</div>    
+      </div>
+      <div class="bg-color-black item">
+        <p class="ml-3 fw-b fs-xl cec"><span style="color:#ffbc25;">(采购单)</span> 未下单数</p>
+        <div class="ml-3 cex">{{datatotalzixunpurchease.purchease_wait_confirm | getNum}}</div>    
+      </div>
+      <!-- <div class="bg-color-black item">
+        <p class="ml-3 fw-b fs-xl cec"><span style="color:#ffbc25;">(采购单)</span> 采购下单数</p>
+        <div class="ml-3 cex">{{datatotalzixunpurchease.zixun_total | getNum}}</div>    
+      </div>
+      <div class="bg-color-black item">
+        <p class="ml-3 fw-b fs-xl cec"><span style="color:#ffbc25;">(采购单)</span> 未生产单数</p>
+        <div class="ml-3 cex">{{datatotalzixunpurchease.zixun_total | getNum}}</div>    
+      </div> -->
+      <div class="bg-color-black item" style="margin-bottom:0;">
+        <p class="ml-3 fw-b fs-xl cec"><span style="color:#ffbc25;">(未发货)</span> 单数</p>
+        <div class="ml-3 cex">{{datawaitsendtotal.order_num | getNum}}</div>    
+      </div>
+      <div class="bg-color-black item" style="margin-bottom:0;">
+        <p class="ml-3 fw-b fs-xl cec"><span style="color:#ffbc25;">(未发货)</span> 商品数</p>
+        <div class="ml-3 cex">{{datawaitsendtotal.wsend_num | getNum}}</div>    
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+// import CenterChart from '@/components/echart/center/centerChartRate'
+import asyncRequest from "@/apis/service/bigScreen";
+// import resToken from "@/mixins/resToken";
+export default {
+  data() {
+    return {
+
+      datatotalzixunpurchease:{},
+     
+      datawaitsendtotal:{},
+    }
+  },
+  mounted() {
+   this.initHttp()
+  },
+  methods: {
+  async initHttp(){
+    
+     let res = await asyncRequest.datatotalzixunpurchease();
+     if(res.code == 0){
+       this.datatotalzixunpurchease = res.data;
+      //  console.log(this.datatotalzixunpurchease)
+     }else{
+       this.$message.error(res.message)
+       return;
+     }
+
+    
+     let res_1 = await asyncRequest.datawaitsendtotal();
+     if(res_1.code == 0){
+      //  console.log(res_1)
+       this.datawaitsendtotal = res_1.data;
+      //  console.log(this.datawaitsendtotal)
+     }else{
+       this.$message.error(res_1.message)
+       return;
+     }
+   },
+
+
+   
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+#center {
+  display: flex;
+  flex-direction: column;
+  .up {
+    width: 100%;
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-around;
+    .item {
+      border-radius: 6px;
+      padding-top: 8px;
+      margin-top: 8px;
+      margin-bottom: 82px;
+      width: 48%;
+      height: 70px;
+      .dv-dig-flop {
+        width: 150px;
+        height: 30px;
+      }
+    }
+  }
+  .down {
+    padding: 6px 4px;
+    padding-bottom: 0;
+    width: 100%;
+    display: flex;
+    height: 255px;
+    justify-content: space-between;
+    .bg-color-black {
+      border-radius: 5px;
+    }
+    .ranking {
+      padding: 10px;
+      width: 59%;
+      .dv-scr-rank-board {
+        height: 225px;
+      }
+    }
+    .percent {
+      width: 40%;
+      display: flex;
+      flex-wrap: wrap;
+      .item {
+        width: 50%;
+        height: 120px;
+        span {
+          margin-top: 8px;
+          font-size: 14px;
+          display: flex;
+          justify-content: center;
+        }
+      }
+      .water {
+        width: 100%;
+        .dv-wa-le-po {
+          height: 120px;
+        }
+      }
+    }
+  }
+
+  .cex{
+    color: #28ffcd;
+    width: 100%;
+    font-size: 22px;
+    // text-align: center;
+    font-weight: 500;
+    display: inline-block;
+    margin-top: 10px;
+  }
+  .cec{
+    color: #c3cbde;
+    width: 100%;
+    font-size: 16px;
+    // text-align: center;
+    font-weight: 500;
+    display: inline-block;
+  }
+}
+</style>

+ 207 - 0
src/views/bigScreen/datavScr/centerLeft1.vue

@@ -0,0 +1,207 @@
+<template>
+  <div id="centerLeft1">
+    <div class="bg-color-black">
+      <div class="d-flex pt-2 pl-2">
+        <span>
+          <icon name="chart-bar" class="text-icon"></icon>
+        </span>
+        <div class="d-flex">
+          <span class="fs-xl text mx-2">今日销量与采购</span>
+          <dv-decoration-3 class="dv-dec-3" />
+        </div>
+      </div>
+      <div class="d-flex jc-center">
+      </div>
+
+      <div class="bottom-data">
+        <h3 class="title">今日销量</h3>
+        <div class="item-box mt-2">
+            <div class="d-flex">
+              <span class="cex">{{datatodaysalesvolume.orders_number | getNum}}</span>
+            </div>
+            <p class="text" style="text-align: center;">
+              今日销售单数
+              <span class="colorYellow">(单)</span>
+            </p>
+        </div>
+
+        <div class="item-box mt-2">
+            <div class="d-flex">
+              <span class="cex">{{datatodaysalesvolume.money | getNum}}</span>
+            </div>
+            <p class="text" style="text-align: center;">
+              今日销售金额
+              <span class="colorYellow">(元)</span>
+            </p>
+        </div>
+        <h3 class="title">今日采购</h3>
+        <div class="item-box mt-2">
+            <div class="d-flex">
+              <span class="cex">{{datatodaypurchase.orders_number | getNum}}</span>
+            </div>
+            <p class="text" style="text-align: center;">
+              采购订单数量
+              <span class="colorYellow">(单)</span>
+            </p>
+        </div>
+        <div class="item-box mt-2">
+            <div class="d-flex">
+              <span class="cex">{{datatodaypurchase.good_num | getNum}}</span>
+            </div>
+            <p class="text" style="text-align: center;">
+              商品数量
+              <span class="colorYellow">(件)</span>
+            </p>
+        </div>
+        <div class="item-box mt-2">
+            <div class="d-flex">
+              <span class="cex">{{datatodaypurchase.consult_info_total | getNum}}</span>
+            </div>
+            <p class="text" style="text-align: center;">
+              竞价单数
+              <span class="colorYellow">(单)</span>
+            </p>
+        </div>
+        <div class="item-box mt-2">
+            <div class="d-flex">
+              <span class="cex">{{datatodaypurchase.consult_bids_total | getNum}}</span>
+            </div>
+            <p class="text" style="text-align: center;">
+              反馈商品数
+              <span class="colorYellow">(件)</span>
+            </p>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import asyncRequest from "@/apis/service/bigScreen";
+// import resToken from "@/mixins/resToken";
+export default {
+  data() {
+    return {
+   
+      datatodaysalesvolume:{},
+  
+      datatodaypurchase:{},
+    }
+  },
+  mounted() {
+   this.initHttp()
+  //  console.log(this.getNum(18990.230))
+  },
+  methods: {
+  async initHttp(){
+    
+     let res = await asyncRequest.datatodaysalesvolume();
+     console.log(res)
+     if(res.code == 0){
+       this.datatodaysalesvolume = res.data;
+      //  console.log(this.datatodaysalesvolume)
+     }else{
+       this.$message.error(res.message)
+       return;
+     }
+
+     let res_1 = await asyncRequest.datatodaypurchase();
+     if(res_1.code == 0){
+      //  console.log(res_1)
+       this.datatodaypurchase = res_1.data;
+      //  console.log(this.datatodaypurchase)
+     }else{
+       this.$message.error(res_1.message)
+       return;
+     }
+   },
+  getNum(num){
+    num = Number(num);
+    if(!num) return '0.00';
+    if(num > 10000 || num < -10000){
+      const moneys = num/10000
+      const realVal =parseFloat(moneys).toFixed(2);
+      return realVal+"万"
+    }else{
+      return num.toFixed(2)
+    }
+  }
+
+   
+  },
+
+}
+</script>
+
+<style lang="scss" scoped>
+$box-width: 300px;
+$box-height: 410px;
+
+#centerLeft1 {
+  padding: 16px;
+  height: $box-height;
+  width: 100%;
+  border-radius: 10px;
+  .bg-color-black {
+    height: $box-height - 30px;
+    border-radius: 10px;
+  }
+  .text {
+    color: #c3cbde;
+  }
+  .dv-dec-3 {
+    position: relative;
+    width: 100px;
+    height: 20px;
+    top: -3px;
+  }
+
+  .bottom-data {
+    .item-box {
+      & > div {
+        padding-right: 5px;
+      }
+      font-size: 14px;
+      float: right;
+      position: relative;
+      width: 50%;
+      color: #d3d6dd;
+      .dv-digital-flop {
+        width: 120px;
+        height: 30px;
+      }
+      // 金币
+      .coin {
+        position: relative;
+        top: 6px;
+        font-size: 20px;
+        color: #ffc107;
+      }
+      .colorYellow {
+        color: yellowgreen;
+      }
+      p {
+        text-align: center;
+      }
+    }
+  }
+  .cex{
+    color: #28ffcd;
+    width: 100%;
+    font-size: 18px;
+    text-align: center;
+    font-weight: 800;
+    display: inline-block;
+    margin: 5px 10px;
+  }
+  .title{
+    width: 100%;
+    float: left;
+    font-size: 16px;
+    margin-top: 40px;
+    margin-bottom: 15px;
+    text-indent: 10px;
+    color: #ffbc25;
+  }
+}
+</style>

+ 172 - 0
src/views/bigScreen/datavScr/centerLeft2.vue

@@ -0,0 +1,172 @@
+<template>
+  <div id="centerLeft1">
+    <div class="bg-color-black">
+      <div class="d-flex pt-2 pl-2">
+        <span>
+          <icon name="chart-pie" class="text-icon"></icon>
+        </span>
+        <div class="d-flex">
+          <span class="fs-xl text mx-2">今日销冠</span>
+          <dv-decoration-1 class="dv-dec-1" />
+        </div>
+      </div>
+      <div class="cc">
+        <div class="bottom-data">
+          <h3 class="title">今日销冠</h3>
+          <div class="item-box mt-2">
+            <div class="d-flex">
+              <span class="cex">{{datatodaysaleschampion.orders | getNum}}</span>
+            </div>
+            <p class="text" style="text-align: center">
+              今日销售单数
+              <span class="colorYellow">(单)</span>
+            </p>
+          </div>
+          <div class="item-box mt-2">
+            <div class="d-flex">
+              <span class="cex">{{datatodaysaleschampion.money | getNum}}</span>
+            </div>
+            <p class="text" style="text-align: center">
+              今日销售金额
+              <span class="colorYellow">(元)</span>
+            </p>
+          </div>
+        </div>
+
+
+        <div class="nameImg">
+          <!-- <img src="../assets/logo.png" alt=""> -->
+          <p>{{datatodaysaleschampion.company}}<br>{{datatodaysaleschampion.nickname}}</p>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import asyncRequest from "@/apis/service/bigScreen";
+// import resToken from "@/mixins/resToken";
+export default {
+   data() {
+    return {
+      
+      datatodaysaleschampion:{},
+    }
+  },
+  mounted() {
+   this.initHttp()
+  },
+  methods: {
+  async initHttp(){
+    
+     let res = await asyncRequest.datatodaysaleschampion();
+     if(res.code == 0){
+       this.datatodaysaleschampion = res.data;
+      //  console.log(this.datatodaysaleschampion)
+     }else{
+       this.$message.error(res.message)
+     }
+     
+   }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+#centerLeft1 {
+  $box-width: 300px;
+  $box-height: 410px;
+  padding: 16px;
+  height: $box-height;
+  min-width: $box-width;
+  border-radius: 5px;
+  .bg-color-black {
+    height: $box-height - 30px;
+    border-radius: 10px;
+  }
+  .text {
+    color: #c3cbde;
+  }
+  .dv-dec-1 {
+    position: relative;
+    width: 100px;
+    height: 20px;
+    top: -3px;
+  }
+  .chart-box {
+    margin-top: 16px;
+    width: 170px;
+    height: 170px;
+    .active-ring-name {
+      padding-top: 10px;
+    }
+  }
+  .bottom-data {
+    .item-box {
+      & > div {
+        padding-right: 5px;
+      }
+      font-size: 14px;
+      float: right;
+      position: relative;
+      width: 50%;
+      color: #d3d6dd;
+      .dv-digital-flop {
+        width: 120px;
+        height: 30px;
+      }
+      // 金币
+      .coin {
+        position: relative;
+        top: 6px;
+        font-size: 20px;
+        color: #ffc107;
+      }
+      .colorYellow {
+        color: yellowgreen;
+      }
+      p {
+        text-align: center;
+      }
+    }
+  }
+  .cex {
+    color: #28ffcd;
+    width: 100%;
+    font-size: 18px;
+    text-align: center;
+    font-weight: 800;
+    display: inline-block;
+    margin: 5px 10px;
+  }
+  .title {
+    width: 100%;
+    float: left;
+    font-size: 16px;
+    margin-top: 40px;
+    margin-bottom: 15px;
+    text-indent: 10px;
+    color: #ffbc25;
+  }
+  .nameImg{
+    width: 100%;
+    margin: 70px 0 0 0;
+    float: left;
+    // img{
+    //   width: 50%;
+    //   height: 90px;
+    //   display: block;
+    //   margin: 30px auto 5px;
+
+    // }
+    p{
+      width: 100%;
+      text-align: center;
+      font-size: 20px;
+      line-height: 40px;
+      font-weight: 600;
+      color: #ffbc25;
+    }
+  }
+}
+</style>

+ 104 - 0
src/views/bigScreen/datavScr/centerRight1.vue

@@ -0,0 +1,104 @@
+<template>
+  <div id="centerRight1">
+    <div class="bg-color-black">
+      <div class="d-flex pt-2 pl-2">
+        <span>
+          <icon name="chart-line" class="text-icon"></icon>
+        </span>
+        <div class="d-flex">
+          <span class="fs-xl text mx-2">今日订单</span>
+        </div>
+      </div>
+      <div class="d-flex jc-center body-box">
+        <dv-scroll-board class="dv-scr-board" :config="config" v-if="config.data.length>0" />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import asyncRequest from "@/apis/service/bigScreen";
+// import resToken from "@/mixins/resToken";
+export default {
+  data() {
+    return {
+      config: {
+        header: ['部门', '单数', '金额'],
+        data: [
+          
+
+        ],
+        // rowNum: 5, //表格行数
+        headerHeight: 35,
+        headerBGC: '#0f1325', //表头
+        oddRowBGC: '#0f1325', //奇数行
+        evenRowBGC: '#171c33', //偶数行
+        index: true,
+        columnWidth: [50],
+        align: ['center'],
+
+        datatodaysale:[],
+      }
+    }
+  },
+  mounted() {
+    // this.rowNum = this.config.data.length
+
+    this.initHttp()
+  },
+  methods:{
+    async initHttp(){
+     let res = await asyncRequest.datatodaysale();
+     if(res.code == 0){
+       res.data.forEach((item,index) => {
+        item.total_price = this.getNum(item.total_price)
+        this.$set(this.config.data, index, [item.companyName,item.total_order,item.total_price])
+        
+      });
+     }else{
+       this.$message.error(res.message)
+       return;
+     }
+   },
+   getNum(num){
+        num = Number(num);
+        if(!num) return '0.00';
+        if(num > 10000 || num < -10000){
+          const moneys = num/10000
+          const realVal =parseFloat(moneys).toFixed(2);
+          return realVal+"万"
+        }else{
+          return num.toFixed(2)
+        }
+      }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+$box-height: 410px;
+$box-width: 400px;
+#centerRight1 {
+  padding: 16px;
+  padding-top: 20px;
+  height: $box-height;
+  width: 100%;
+  // background: orange;
+  border-radius: 5px;
+  .bg-color-black {
+    height: $box-height - 30px;
+    border-radius: 10px;
+  }
+  .text {
+    color: #c3cbde;
+  }
+  .body-box {
+    border-radius: 10px;
+    overflow: hidden;
+    .dv-scr-board {
+      width: 100%;
+      height: 340px;
+    }
+  }
+}
+</style>

+ 75 - 0
src/views/bigScreen/datavScr/centerRight2.vue

@@ -0,0 +1,75 @@
+<template>
+  <div id="centerRight2">
+    <div class="bg-color-black">
+      <div class="d-flex pt-2 pl-2">
+        <span>
+          <icon name="align-left" class="text-icon"></icon>
+        </span>
+        <span class="fs-xl text mx-2">待处理</span>
+      </div>
+      <div class="d-flex jc-center body-box">
+        <dv-scroll-board class="dv-scr-board" :config="config" />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+// import centerRight2Chart1 from '@/components/echart/centerRight/centerRightChart'
+
+export default {
+  data() {
+    return {
+      config: {
+        header: ['待处理', '单数', '金额'],
+        data: [
+          ['待开票', '123124', "150000000"],
+          ['待回款', '123124-2', "100"],
+          ['待回票', 'dev-123124', "100"],
+          ['待付款', 'dev-123124', "100"]
+
+        ],
+        // rowNum: 5, //表格行数
+        headerHeight: 35,
+        headerBGC: '#0f1325', //表头
+        oddRowBGC: '#0f1325', //奇数行
+        evenRowBGC: '#171c33', //偶数行
+        index: true,
+        columnWidth: [50],
+        align: ['center']
+      }
+    }
+  },
+  // components: { centerRight2Chart1 }
+}
+</script>
+
+<style lang="scss" scoped>
+#centerRight2 {
+  $box-height: 401px;
+  $box-width: 380px;
+  padding: 5px;
+  height: $box-height;
+  width: $box-width;
+  border-radius: 5px;
+  display: flex;
+  // padding-top: 10px;
+  .bg-color-black {
+    padding: 5px;
+    height: $box-height;
+    width: $box-width;
+    border-radius: 10px;
+  }
+  .text {
+    color: #c3cbde;
+  }
+  .body-box {
+    border-radius: 10px;
+    overflow: hidden;
+    .dv-scr-board {
+      width: 360px;
+      height: 340px;
+    }
+  }
+}
+</style>

+ 161 - 0
src/views/bigScreen/datavScr/index.vue

@@ -0,0 +1,161 @@
+<template>
+  <div class="pagePadding box">
+    <div id="index" ref="appRef">
+    <div class="bg">
+      <dv-loading v-if="loading">Loading...</dv-loading>
+      <div v-else class="host-body">
+        <div class="d-flex jc-center">
+          <dv-decoration-10 class="dv-dec-10" />
+          <div class="d-flex jc-center">
+            <dv-decoration-8 class="dv-dec-8" :color="decorationColor" />
+            <div class="title">
+              <span class="title-text">数据可视化面板</span>
+              <dv-decoration-6
+                class="dv-dec-6"
+                :reverse="true"
+                :color="['#50e3c2', '#67a1e5']"
+              />
+            </div>
+            <dv-decoration-8
+              class="dv-dec-8"
+              :reverse="true"
+              :color="decorationColor"
+            />
+          </div>
+          <dv-decoration-10 class="dv-dec-10-s" />
+        </div>
+
+        <!-- 第二行 -->
+        <div class="d-flex jc-between px-2">
+          <div class="d-flex aside-width">
+            <div class="react-left ml-4 react-l-s">
+              <span class="react-left"></span>
+              <span class="text">今日相关</span>
+            </div>
+            <div class="react-left ml-3">
+              <span class="text">数据概览</span>
+            </div>
+          </div>
+          <div class="d-flex aside-width">
+            <div class="react-right bg-color-blue mr-3">
+              <span class="text fw-b">待处理</span>
+            </div>
+            <div class="react-right mr-4 react-l-s">
+              <span class="react-after"></span>
+              <span class="text"
+                >{{ dateYear }} {{ dateWeek }} {{ dateDay }}</span
+              >
+            </div>
+          </div>
+        </div>
+
+        <div class="body-box">
+          <!-- 第三行数据 -->
+          <div class="content-box">
+            <div>
+              <dv-border-box-12>
+                <centerLeft1 />
+              </dv-border-box-12>
+            </div>
+            <div>
+              <dv-border-box-12>
+                <centerLeft2 />
+              </dv-border-box-12>
+            </div>
+            <!-- 中间 -->
+            <div>
+              <center />
+            </div>
+            <!-- 中间 -->
+            <!-- <div>
+              
+              <dv-border-box-13>
+                <centerRight2 />
+              </dv-border-box-13>
+            </div> -->
+            <div>
+              <dv-border-box-13>
+                <centerRight1 />
+              </dv-border-box-13>
+            </div>
+          </div>
+
+          <!-- 第四行数据 -->
+          <div class="bototm-box">
+            <dv-border-box-13>
+              <bottomLeft />
+            </dv-border-box-13>
+            <dv-border-box-12>
+              <bottomRight />
+            </dv-border-box-12>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+  </div>
+  
+</template>
+
+<script>
+import drawMixin from "../drawMixin";
+import { formatTime } from '../index.js'
+import centerLeft1 from './centerLeft1'
+import centerLeft2 from './centerLeft2'
+import centerRight1 from './centerRight1'
+import centerRight2 from './centerRight2'
+import center from './center'
+import bottomLeft from './bottomLeft'
+import bottomRight from './bottomRight'
+
+export default {
+  mixins: [ drawMixin ],
+  data() {
+    return {
+      timing: null,
+      loading: true,
+      dateDay: null,
+      dateYear: null,
+      dateWeek: null,
+      weekday: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
+      decorationColor: ['#568aea', '#000000']
+    }
+  },
+  components: {
+    centerLeft1,
+    centerLeft2,
+    centerRight1,
+    centerRight2,
+    center,
+    bottomLeft,
+    bottomRight
+  },
+  mounted() {
+    this.timeFn()
+    this.cancelLoading()
+  },
+  beforeDestroy () {
+    clearInterval(this.timing)
+  },
+  methods: {
+    timeFn() {
+      this.timing = setInterval(() => {
+        this.dateDay = formatTime(new Date(), 'HH: mm: ss')
+        this.dateYear = formatTime(new Date(), 'yyyy-MM-dd')
+        this.dateWeek = this.weekday[new Date().getDay()]
+      }, 1000)
+    },
+    cancelLoading() {
+      setTimeout(() => {
+        this.loading = false
+      }, 500)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import '../assetsDv/scss/index.scss';
+@import '../assetsDv/scss/style.scss';
+
+</style>

+ 57 - 0
src/views/bigScreen/drawMixin.js

@@ -0,0 +1,57 @@
+// 屏幕适配 mixin 函数
+
+// * 默认缩放值
+const scale = {
+  width: '1',
+  height: '1',
+}
+
+// * 设计稿尺寸(px)
+const baseWidth = 1920
+const baseHeight = 1080
+
+// * 需保持的比例(默认1.77778)
+const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
+
+export default {
+  data() {
+    return {
+      // * 定时函数
+      drawTiming: null
+    }
+  },
+  mounted () {
+    this.calcRate()
+    window.addEventListener('resize', this.resize)
+  },
+  beforeDestroy () {
+    window.removeEventListener('resize', this.resize)
+  },
+  methods: {
+    calcRate () {
+      const appRef = this.$refs["appRef"]
+      if (!appRef) return 
+      // 当前宽高比
+      const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5))
+      if (appRef) {
+        if (currentRate > baseProportion) {
+          // 表示更宽
+          scale.width = ((window.innerHeight * baseProportion) / baseWidth).toFixed(5)
+          scale.height = (window.innerHeight / baseHeight).toFixed(5)
+          appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`
+        } else {
+          // 表示更高
+          scale.height = ((window.innerWidth / baseProportion) / baseHeight).toFixed(5)
+          scale.width = (window.innerWidth / baseWidth).toFixed(5)
+          appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`
+        }
+      }
+    },
+    resize () {
+      clearTimeout(this.drawTiming)
+      this.drawTiming = setTimeout(() => {
+        this.calcRate()
+      }, 200)
+    }
+  },
+}

+ 51 - 0
src/views/bigScreen/index.js

@@ -0,0 +1,51 @@
+/**
+ * @param {Function} fn 防抖函数
+ * @param {Number} delay 延迟时间
+ */
+export function debounce(fn, delay) {
+  var timer;
+  return function () {
+    var context = this;
+    var args = arguments;
+    clearTimeout(timer);
+    timer = setTimeout(function () {
+      fn.apply(context, args);
+    }, delay);
+  };
+}
+
+/**
+ * @param {date} time 需要转换的时间
+ * @param {String} fmt 需要转换的格式 如 yyyy-MM-dd、yyyy-MM-dd HH:mm:ss
+ */
+export function formatTime(time, fmt) {
+  if (!time) return '';
+  else {
+    const date = new Date(time);
+    const o = {
+      'M+': date.getMonth() + 1,
+      'd+': date.getDate(),
+      'H+': date.getHours(),
+      'm+': date.getMinutes(),
+      's+': date.getSeconds(),
+      'q+': Math.floor((date.getMonth() + 3) / 3),
+      S: date.getMilliseconds(),
+    };
+    if (/(y+)/.test(fmt))
+      fmt = fmt.replace(
+        RegExp.$1,
+        (date.getFullYear() + '').substr(4 - RegExp.$1.length)
+      );
+    for (const k in o) {
+      if (new RegExp('(' + k + ')').test(fmt)) {
+        fmt = fmt.replace(
+          RegExp.$1,
+          RegExp.$1.length === 1
+            ? o[k]
+            : ('00' + o[k]).substr(('' + o[k]).length)
+        );
+      }
+    }
+    return fmt;
+  }
+}

Some files were not shown because too many files changed in this diff