Hwt 3 年之前
父节点
当前提交
541d01420c

+ 84 - 63
operationSupport/src/views/newWorkBench/components/index.js

@@ -22,71 +22,92 @@
 // alarmInformation 设备告警信息  单条没有跳转
 // overallCommunity 社区总体情况统计 OK
 
-
 // houseClick 本月房屋点击排名前十 OK
-const comUrl = 'newWorkBench/components/'
+const comUrl = 'newWorkBench/components/';
 export default {
-  components: {
-    maps: resolve => require([`@views/${comUrl}map.vue`], resolve),
-    complaintsSuggestions: resolve => require([`@views/${comUrl}complaintsSuggestions.vue`], resolve),
-    commonFunctions: resolve => require([`@views/${comUrl}commonFunctions.vue`], resolve),
-    satisfaction: resolve => require([`@views/${comUrl}satisfaction.vue`], resolve),
-    discount: resolve => require([`@views/${comUrl}discount.vue`], resolve),
-    rentalAndSaleRate: resolve => require([`@views/${comUrl}rentalAndSaleRate.vue`], resolve),
-    collectionRate: resolve => require([`@views/${comUrl}collectionRate.vue`], resolve),
-    householdGender: resolve => require([`@views/${comUrl}householdGender.vue`], resolve),
-    householdIdentity: resolve => require([`@views/${comUrl}householdIdentity.vue`], resolve),
-    equipmentStatistics: resolve => require([`@views/${comUrl}equipmentStatistics.vue`], resolve),
-    ownerApproval: resolve => require([`@views/${comUrl}ownerApproval.vue`], resolve),
-    pendingComplaints: resolve => require([`@views/${comUrl}pendingComplaints.vue`], resolve),
-    complaintsAndSuggestions: resolve => require([`@views/${comUrl}complaintsAndSuggestions.vue`], resolve),
+    components: {
+        maps: (resolve) => require([`@views/${comUrl}map.vue`], resolve),
+        complaintsSuggestions: (resolve) => require([`@views/${comUrl}complaintsSuggestions.vue`], resolve),
+        commonFunctions: (resolve) => require([`@views/${comUrl}commonFunctions.vue`], resolve),
+        satisfaction: (resolve) => require([`@views/${comUrl}satisfaction.vue`], resolve),
+        discount: (resolve) => require([`@views/${comUrl}discount.vue`], resolve),
+        rentalAndSaleRate: (resolve) => require([`@views/${comUrl}rentalAndSaleRate.vue`], resolve),
+        collectionRate: (resolve) => require([`@views/${comUrl}collectionRate.vue`], resolve),
+        householdGender: (resolve) => require([`@views/${comUrl}householdGender.vue`], resolve),
+        householdIdentity: (resolve) => require([`@views/${comUrl}householdIdentity.vue`], resolve),
+        equipmentStatistics: (resolve) => require([`@views/${comUrl}equipmentStatistics.vue`], resolve),
+        ownerApproval: (resolve) => require([`@views/${comUrl}ownerApproval.vue`], resolve),
+        pendingComplaints: (resolve) => require([`@views/${comUrl}pendingComplaints.vue`], resolve),
+        complaintsAndSuggestions: (resolve) => require([`@views/${comUrl}complaintsAndSuggestions.vue`], resolve),
 
-    patrolDuration: resolve => require([`@views/${comUrl}patrolDuration.vue`], resolve),
-    communityAnnouncement: resolve => require([`@views/${comUrl}communityAnnouncement.vue`], resolve),
-    personnelScore: resolve => require([`@views/${comUrl}personnelScore.vue`], resolve),
-    billToBeCollected: resolve => require([`@views/${comUrl}billToBeCollected.vue`], resolve),
-    contractAward: resolve => require([`@views/${comUrl}contractAward.vue`], resolve),
-    dispatchWorkOrder: resolve => require([`@views/${comUrl}dispatchWorkOrder.vue`], resolve),
-    taskType: resolve => require([`@views/${comUrl}facilityInspections/taskType.vue`], resolve),
-    alarmInformation: resolve => require([`@views/${comUrl}alarmManagement/alarmInformation.vue`], resolve),
-    overallCommunity: resolve => require([`@views/${comUrl}communityManagement/overallCommunity.vue`], resolve),
-    houseClick: resolve => require([`@views/${comUrl}houseClick.vue`], resolve),
+        patrolDuration: (resolve) => require([`@views/${comUrl}patrolDuration.vue`], resolve),
+        communityAnnouncement: (resolve) => require([`@views/${comUrl}communityAnnouncement.vue`], resolve),
+        personnelScore: (resolve) => require([`@views/${comUrl}personnelScore.vue`], resolve),
+        billToBeCollected: (resolve) => require([`@views/${comUrl}billToBeCollected.vue`], resolve),
+        contractAward: (resolve) => require([`@views/${comUrl}contractAward.vue`], resolve),
+        dispatchWorkOrder: (resolve) => require([`@views/${comUrl}dispatchWorkOrder.vue`], resolve),
+        taskType: (resolve) => require([`@views/${comUrl}facilityInspections/taskType.vue`], resolve),
+        alarmInformation: (resolve) => require([`@views/${comUrl}alarmManagement/alarmInformation.vue`], resolve),
+        overallCommunity: (resolve) => require([`@views/${comUrl}communityManagement/overallCommunity.vue`], resolve),
+        houseClick: (resolve) => require([`@views/${comUrl}houseClick.vue`], resolve),
 
-  },
-  data() {
-    return {
-      //拖拽组件
-      componentsIdArr: {
-        1: 'maps',
-        2: 'complaintsSuggestions',
-        3: 'commonFunctions',
-        4: 'satisfaction',
-        5: 'discount',
-        6: 'rentalAndSaleRate',
-        7: 'collectionRate',
-        8: "householdGender",
-        9: 'householdIdentity',
-        10: 'equipmentStatistics',
-        11: "ownerApproval",
-        12: "pendingComplaints",
-        13: "complaintsAndSuggestions",
-        14: 'patrolDuration',
-        15: 'communityAnnouncement',
-        16: "personnelScore",
-        17: 'billToBeCollected',
-        18: 'contractAward',
-        19: 'dispatchWorkOrder',
-        20: "taskType",
-        21: "alarmInformation",
-        22: 'overallCommunity',
-        23: "houseClick"
-      }
-    }
-  },
-  methods: {
-    sumit() {
-      return this.pageLoction
-    }
-  }
+        patrolPersonnel: (resolve) => require([`@views/${comUrl}workbenchMent/patrolPersonnel.vue`], resolve),
+        patrolTaskRate: (resolve) => require([`@views/${comUrl}workbenchMent/patrolTaskRate.vue`], resolve),
+        patrolTaskDistribution: (resolve) => require([`@views/${comUrl}workbenchMent/patrolTaskDistribution.vue`], resolve),
+        operationMaintenancePersonnel: (resolve) => require([`@views/${comUrl}workbenchMent/operationMaintenancePersonnel.vue`], resolve),
+        completionMaintenanceOrder: (resolve) => require([`@views/${comUrl}workbenchMent/completionMaintenanceOrder.vue`], resolve),
+        orderClassification: (resolve) => require([`@views/${comUrl}workbenchMent/orderClassification.vue`], resolve),
+        performanceInspectors: (resolve) => require([`@views/${comUrl}workbenchMent/performanceInspectors.vue`], resolve),
+        patrolInspectionRate: (resolve) => require([`@views/${comUrl}workbenchMent/patrolInspectionRate.vue`], resolve),
+        proportionIncomeMode: (resolve) => require([`@views/${comUrl}workbenchMent/proportionIncomeMode.vue`], resolve),
+        paidAnalysis: (resolve) => require([`@views/${comUrl}workbenchMent/paidAnalysis.vue`], resolve),
+        householdDistribution: (resolve) => require([`@views/${comUrl}workbenchMent/householdDistribution.vue`], resolve)
+    },
+    data() {
+        return {
+            //拖拽组件
+            componentsIdArr: {
+                1: 'maps',
+                2: 'complaintsSuggestions',
+                3: 'commonFunctions',
+                4: 'satisfaction',
+                5: 'discount',
+                6: 'rentalAndSaleRate',
+                7: 'collectionRate',
+                8: 'householdGender',
+                9: 'householdIdentity',
+                10: 'equipmentStatistics',
+                11: 'ownerApproval',
+                12: 'pendingComplaints',
+                13: 'complaintsAndSuggestions',
+                14: 'patrolDuration',
+                15: 'communityAnnouncement',
+                16: 'personnelScore',
+                17: 'billToBeCollected',
+                18: 'contractAward',
+                19: 'dispatchWorkOrder',
+                20: 'taskType',
+                21: 'alarmInformation',
+                22: 'overallCommunity',
+                23: 'houseClick',
 
-};
+                24: 'patrolPersonnel',
+                25: 'patrolTaskRate',
+                26: 'patrolTaskDistribution',
+                27: 'operationMaintenancePersonnel',
+                28: 'completionMaintenanceOrder',
+                29: 'orderClassification',
+                30: 'performanceInspectors',
+                31: 'patrolInspectionRate',
+                32: 'proportionIncomeMode',
+                33: 'paidAnalysis',
+                34: 'householdDistribution'
+            }
+        };
+    },
+    methods: {
+        sumit() {
+            return this.pageLoction;
+        }
+    }
+};

+ 857 - 552
operationSupport/src/views/newWorkBench/components/indexOptionChart.js

@@ -1,589 +1,894 @@
 //从左往右颜色渐变
 export const GradualChange = (color1, color2) => {
-  return new echarts.graphic.LinearGradient(1, 0, 0, 0, [
-    { offset: 1, color: color1 + '' },
-    { offset: 0, color: color2 + '' || color1 + '' }
-  ]);
+    return new echarts.graphic.LinearGradient(1, 0, 0, 0, [
+        { offset: 1, color: color1 + '' },
+        { offset: 0, color: color2 + '' || color1 + '' }
+    ]);
 };
 export const getColor = ([color1, color2]) => {
-  // 右 下 左 上
-  return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-    { offset: 0, color: color1 + '' },
-    { offset: 1, color: color2 + '' || color1 + '' },
-  ])
-}
+    // 右 下 左 上
+    return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+        { offset: 0, color: color1 + '' },
+        { offset: 1, color: color2 + '' || color1 + '' }
+    ]);
+};
 
 export const dateType = (date) => {
-  let val = '';
-  if (date) {
-    val = `${date.slice(0, 4)}年${date.slice(4)}月`
-  } else {
-    val = date
-  }
-  return val
-}
+    let val = '';
+    if (date) {
+        val = `${date.slice(0, 4)}年${date.slice(4)}月`;
+    } else {
+        val = date;
+    }
+    return val;
+};
 //折现波浪线颜色渐变
 export const getItemStyle = (c1, c2) => {
-  return {
-    color: {
-      type: "linear",
-      x: 0,
-      y: 0,
-      x2: 0,
-      y2: 1,
-      colorStops: [
-        {
-          offset: 0,
-          color: c1 // 0% 处的颜色
-        },
-        {
-          offset: 1,
-          color: c2 // 100% 处的颜色
-        }
-      ],
-      global: false // 缺省为 false
-    }
-  };
-}
-export const defaultMonth = ['01', "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];
-export const defaultName = ['name1', 'name2', 'name3'];
-
-
-const defaultColor = [GradualChange('#22D8FF', '#00B2FF'),
-GradualChange('#F0646C', '#F4994E'),
-GradualChange('#5EEDCC ', '#24C3F1'),
-GradualChange('#7178FF', '#D2A4FF'),
-GradualChange('#884DD2', '#DF63CC')]
-// 饼图
-export const ringType = (
-  color = [],
-  data = [],
-  title = {},
-  legendFcuntion = {}
-) => {
-  let legendFcuntionValue = (v) => {
-    let val = ''
-    data.map(item => {
-      if (item.name == v) {
-        if (legendFcuntion.type == '%') {
-          val = `{a|${v}} · · · · · · {b|${parseInt((item.value / legendFcuntion.total).toFixed(2) * 100) || 0}%}`
-        } else {
-          val = `{a|${v}} · · · · · · {b|${item.value}}`
-        }
-      }
-    })
-    return val
-
-  }
-  return {
-    tooltip: {
-      trigger: 'item'
-    },
-    legend: {
-      orient: 'vertical',
-      right: 10,
-      top: 80,
-      itemGap: 10,
-      itemWidth: 12, // 图例图形宽度
-      itemHeight: 8,
-      type: 'scroll',
-      formatter: (v) => { return legendFcuntionValue(v) },
-      textStyle: {
-        rich: {
-          a: {
-            fontSize: 12,
-            color: '#858892',
-            padding: [0, 5, 0, 0]
-          },
-          b: {
-            fontSize: 14,
-            color: '#fff',
-            padding: [0, 0, 0, 5]
-          }
-        }
-      }
-    },
-    title,
-    color: !!color.length ? color : defaultColor,
-    series: [
-      {
-        type: 'pie',
-        radius: ['55%', '70%'],
-        avoidLabelOverlap: false,
-        center: ['25%', '50%'],
-        label: {
-          show: false,
-          position: 'center'
-        },
-        labelLine: {
-          show: false
-        },
-        data: data
-      }
-    ]
-  }
-}
-
-
-// 折现波浪
-export const discountedWave = (
-  name = "",
-  xAxis = [],
-  series = [],
-  legendShow = false,
-  color = [],
-) => {
-  let option = {
-    tooltip: {
-      trigger: "axis",
-      textStyle: {
-        fontSize: 12,
-        color: "#FFFFFF"
-      },
-      // formatter(param) {
-      //   let el = `<div class="dmp-echart-tooltip"><h4>${dateType(param[0].axisValue)}</h4>`;
-      //   param.forEach(item => {
-      //     el += `<p>
-      //                   <span class="marker" style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-image: linear-gradient(to left, 
-      //                     ${item.color.colorStops[0].color}, ${item.color.colorStops[1].color});"></span>
-      //                   <span>${item.seriesName}:${item.value}</span>
-      //                 </p>`;
-      //   });
-      //   el += `</div>`;
-      //   return el;
-      // }
-    },
-    grid: {
-      top: 50,
-      left: 5,
-      bottom: 0,
-      right: 5,
-      containLabel: true
-    },
-
-    legend: {
-      show: legendShow,
-      icon: "circle",
-      x: "right", // 可设定图例在左、右、居中
-      itemWidth: 8, // 图例图形宽度
-      itemHeight: 8,
-      itemGap: 20,
-    },
-    xAxis: {
-      type: "category",
-      axisLine: {
-        show: false // 不显示坐标轴
-      },
-      axisTick: {
-        show: false // 不显示坐标轴刻度
-      },
-      axisLabel: {
-        formatter: function (params, index) {
-          return params.slice(5)
-        },
-        color: "#9B9DA5",
-        margin: 16
-      },
-      data: xAxis,
-      axisPointer: {
-        type: "shadow",
-        shadowStyle: {
-          color: {
-            type: "linear",
+    return {
+        color: {
+            type: 'linear',
             x: 0,
             y: 0,
             x2: 0,
             y2: 1,
             colorStops: [
-              {
-                offset: 0,
-                color: "rgba(31,207,245,0)" // 0% 处的颜色
-              },
-              {
-                offset: 0.8,
-                color: "rgba(31,207,245,0.15)" // 100% 处的颜色
-              },
-              {
-                offset: 0.2,
-                color: "rgba(31,207,245,0.15)" // 100% 处的颜色
-              },
-              {
-                offset: 1,
-                color: "rgba(31,207,245,0.05)"
-              }
+                {
+                    offset: 0,
+                    color: c1 // 0% 处的颜色
+                },
+                {
+                    offset: 1,
+                    color: c2 // 100% 处的颜色
+                }
             ],
             global: false // 缺省为 false
-          }
-        }
-      }
-    },
-    yAxis: {
-      type: "value",
-      splitNumber: 4,
-      axisLine: {
-        show: false
-      },
-      name: name,
-      axisTick: {
-        show: false
-      },
-      axisLabel: {
-        color: "#9B9DA5",
-        margin: 15,
-        textStyle: {
-          align: "right",
-          baseline: "middle"
-        }
-      },
-      nameLocation: "end",
-      nameTextStyle: { color: "#9B9DA5", padding: [0, 0, 0, -40] },
-      splitLine: {
-        lineStyle: {
-          type: "dotted",
-          width: 0.2
-        }
-      }
-    },
-    series: [
-      {
-        // name: "设备告警",
-        type: "line",
-        smooth: true,
-        symbol: "circle", // 实心
-        symbolSize: 1, // 设定实心点的大小
-        itemStyle: getItemStyle("#5EEDCC", "#24C3F1"),
-        data: series,
-        areaStyle: {
-          normal: {
-            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-              {
-                offset: 0,
-                color: "rgba(36,121,253,0.1)"
-              },
-              {
-                offset: 1,
-                color: "rgba(19,194,247,0.3)"
-              }
-            ])
-          }
-        },
-        lineStyle: {
-          width: 1
         }
-      },
-    ]
+    };
+};
+export const defaultMonth = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
+export const defaultName = ['name1', 'name2', 'name3'];
 
-  };
-  return option;
+const defaultColor = [
+    GradualChange('#22D8FF', '#00B2FF'),
+    GradualChange('#F0646C', '#F4994E'),
+    GradualChange('#5EEDCC ', '#24C3F1'),
+    GradualChange('#7178FF', '#D2A4FF'),
+    GradualChange('#884DD2', '#DF63CC')
+];
+// 饼图
+export const ringType = (color = [], data = [], title = {}, legendFcuntion = {}) => {
+    let legendFcuntionValue = (v) => {
+        let val = '';
+        data.map((item) => {
+            if (item.name == v) {
+                if (legendFcuntion.type == '%') {
+                    val = `{a|${v}} · · · · · · {b|${parseInt((item.value / legendFcuntion.total).toFixed(2) * 100) || 0}%}`;
+                } else {
+                    val = `{a|${v}} · · · · · · {b|${item.value}}`;
+                }
+            }
+        });
+        return val;
+    };
+    return {
+        tooltip: {
+            trigger: 'item'
+        },
+        legend: {
+            orient: 'vertical',
+            right: 10,
+            top: 80,
+            itemGap: 10,
+            itemWidth: 12, // 图例图形宽度
+            itemHeight: 8,
+            type: 'scroll',
+            formatter: (v) => {
+                return legendFcuntionValue(v);
+            },
+            textStyle: {
+                rich: {
+                    a: {
+                        fontSize: 12,
+                        color: '#858892',
+                        padding: [0, 5, 0, 0]
+                    },
+                    b: {
+                        fontSize: 14,
+                        color: '#fff',
+                        padding: [0, 0, 0, 5]
+                    }
+                }
+            }
+        },
+        title,
+        color: !!color.length ? color : defaultColor,
+        series: [
+            {
+                type: 'pie',
+                radius: ['55%', '70%'],
+                avoidLabelOverlap: false,
+                center: ['25%', '50%'],
+                label: {
+                    show: false,
+                    position: 'center'
+                },
+                labelLine: {
+                    show: false
+                },
+                data: data
+            }
+        ]
+    };
 };
 
+// 折现波浪
+export const discountedWave = (name = '', xAxis = [], series = [], legendShow = false, color = []) => {
+    let option = {
+        tooltip: {
+            trigger: 'axis',
+            textStyle: {
+                fontSize: 12,
+                color: '#FFFFFF'
+            }
+            // formatter(param) {
+            //   let el = `<div class="dmp-echart-tooltip"><h4>${dateType(param[0].axisValue)}</h4>`;
+            //   param.forEach(item => {
+            //     el += `<p>
+            //                   <span class="marker" style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-image: linear-gradient(to left,
+            //                     ${item.color.colorStops[0].color}, ${item.color.colorStops[1].color});"></span>
+            //                   <span>${item.seriesName}:${item.value}</span>
+            //                 </p>`;
+            //   });
+            //   el += `</div>`;
+            //   return el;
+            // }
+        },
+        grid: {
+            top: 50,
+            left: 5,
+            bottom: 0,
+            right: 5,
+            containLabel: true
+        },
 
-//柱状日期 
-export const columnOptionsChart = (
-  name = "",
-  xAxis = [],
-  series = [],
-  color = [],
-  barWidth = 6
-) => {
-  let defaultData = [{
-    name: '', type: 'bar', data: []
-  }]
-  let defaultColor = [['#0EAEFF', '#85E9FF'], ['#F0646C', '#F4994E']]
-  let seriesConfiguration = () => {
-    let seriesData = [];
-    series.map((item, index) => {
-      seriesData.push({
-        name: item.name,
-        type: 'bar',
-        data: item.data,
-        barWidth: barWidth,
-        itemStyle: {
-          normal: {
-            barBorderRadius: [15, 15, 0, 0],
-            color: getColor(color[index] || defaultColor[index]),
-          }
+        legend: {
+            show: legendShow,
+            icon: 'circle',
+            x: 'right', // 可设定图例在左、右、居中
+            itemWidth: 8, // 图例图形宽度
+            itemHeight: 8,
+            itemGap: 20
         },
-        barGap: '100%'
-      })
-    })
-    return seriesData
-  }
-  let option = {
-    tooltip: {
-      trigger: "axis",
-      axisPointer: {
-        type: "shadow",
-        shadowStyle: {
-          color: {
-            type: "linear",
-            x: 0,
-            y: 0,
-            x2: 0,
-            y2: 1,
-            colorStops: [
-              {
-                offset: 0,
-                color: "rgba(31,207,245,0)" // 0% 处的颜色
-              },
-              {
-                offset: 0.8,
-                color: "rgba(31,207,245,0.15)" // 100% 处的颜色
-              },
-              {
-                offset: 0.2,
-                color: "rgba(31,207,245,0.15)" // 100% 处的颜色
-              },
-              {
-                offset: 1,
-                color: "rgba(31,207,245,0.05)"
-              }
-            ],
-            global: false // 缺省为 false
-          }
+        xAxis: {
+            type: 'category',
+            axisLine: {
+                show: false // 不显示坐标轴
+            },
+            axisTick: {
+                show: false // 不显示坐标轴刻度
+            },
+            axisLabel: {
+                formatter: function (params, index) {
+                    return params.slice(5);
+                },
+                color: '#9B9DA5',
+                margin: 16
+            },
+            data: xAxis,
+            axisPointer: {
+                type: 'shadow',
+                shadowStyle: {
+                    color: {
+                        type: 'linear',
+                        x: 0,
+                        y: 0,
+                        x2: 0,
+                        y2: 1,
+                        colorStops: [
+                            {
+                                offset: 0,
+                                color: 'rgba(31,207,245,0)' // 0% 处的颜色
+                            },
+                            {
+                                offset: 0.8,
+                                color: 'rgba(31,207,245,0.15)' // 100% 处的颜色
+                            },
+                            {
+                                offset: 0.2,
+                                color: 'rgba(31,207,245,0.15)' // 100% 处的颜色
+                            },
+                            {
+                                offset: 1,
+                                color: 'rgba(31,207,245,0.05)'
+                            }
+                        ],
+                        global: false // 缺省为 false
+                    }
+                }
+            }
         },
-        crossStyle: {
-          shadowBlur: 30,
-          shadowColor: "rgba(0, 0, 0, 0.5)"
+        yAxis: {
+            type: 'value',
+            splitNumber: 4,
+            axisLine: {
+                show: false
+            },
+            name: name,
+            axisTick: {
+                show: false
+            },
+            axisLabel: {
+                color: '#9B9DA5',
+                margin: 15,
+                textStyle: {
+                    align: 'right',
+                    baseline: 'middle'
+                }
+            },
+            nameLocation: 'end',
+            nameTextStyle: { color: '#9B9DA5', padding: [0, 0, 0, -40] },
+            splitLine: {
+                lineStyle: {
+                    type: 'dotted',
+                    width: 0.2
+                }
+            }
+        },
+        series: [
+            {
+                // name: "设备告警",
+                type: 'line',
+                smooth: true,
+                symbol: 'circle', // 实心
+                symbolSize: 1, // 设定实心点的大小
+                itemStyle: getItemStyle('#5EEDCC', '#24C3F1'),
+                data: series,
+                areaStyle: {
+                    normal: {
+                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+                            {
+                                offset: 0,
+                                color: 'rgba(36,121,253,0.1)'
+                            },
+                            {
+                                offset: 1,
+                                color: 'rgba(19,194,247,0.3)'
+                            }
+                        ])
+                    }
+                },
+                lineStyle: {
+                    width: 1
+                }
+            }
+        ]
+    };
+    return option;
+};
+
+//柱状日期
+export const columnOptionsChart = (name = '', xAxis = [], series = [], color = [], barWidth = 6) => {
+    let defaultData = [
+        {
+            name: '',
+            type: 'bar',
+            data: []
         }
-      },
-      extraCssText:
-        "background:rgba(33,40,56,0.6);border-radius:4px;padding:6px 10px",
-      textStyle: {
-        fontSize: 12,
-        color: "#FFFFFF"
-      },
-      formatter(param) {
-        let el = `<div class="dmp-echart-tooltip" style="text-align: center;"><h4>${dateType(param[0].axisValue)}</h4>`;
-        param.forEach(item => {
-          el += `<p style="text-align: left;">
+    ];
+    let defaultColor = [
+        ['#0EAEFF', '#85E9FF'],
+        ['#F0646C', '#F4994E']
+    ];
+    let seriesConfiguration = () => {
+        let seriesData = [];
+        series.map((item, index) => {
+            seriesData.push({
+                name: item.name,
+                type: 'bar',
+                data: item.data,
+                barWidth: barWidth,
+                itemStyle: {
+                    normal: {
+                        barBorderRadius: [15, 15, 0, 0],
+                        color: getColor(color[index] || defaultColor[index])
+                    }
+                },
+                barGap: '100%'
+            });
+        });
+        return seriesData;
+    };
+    let option = {
+        tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+                type: 'shadow',
+                shadowStyle: {
+                    color: {
+                        type: 'linear',
+                        x: 0,
+                        y: 0,
+                        x2: 0,
+                        y2: 1,
+                        colorStops: [
+                            {
+                                offset: 0,
+                                color: 'rgba(31,207,245,0)' // 0% 处的颜色
+                            },
+                            {
+                                offset: 0.8,
+                                color: 'rgba(31,207,245,0.15)' // 100% 处的颜色
+                            },
+                            {
+                                offset: 0.2,
+                                color: 'rgba(31,207,245,0.15)' // 100% 处的颜色
+                            },
+                            {
+                                offset: 1,
+                                color: 'rgba(31,207,245,0.05)'
+                            }
+                        ],
+                        global: false // 缺省为 false
+                    }
+                },
+                crossStyle: {
+                    shadowBlur: 30,
+                    shadowColor: 'rgba(0, 0, 0, 0.5)'
+                }
+            },
+            extraCssText: 'background:rgba(33,40,56,0.6);border-radius:4px;padding:6px 10px',
+            textStyle: {
+                fontSize: 12,
+                color: '#FFFFFF'
+            },
+            formatter(param) {
+                let el = `<div class="dmp-echart-tooltip" style="text-align: center;"><h4>${dateType(param[0].axisValue)}</h4>`;
+                param.forEach((item) => {
+                    el += `<p style="text-align: left;">
           <span style="display:inline-block;margin-right:5px;border-radius:4px;width:12px;height:8px;background-image: linear-gradient(to left, 
             ${item.color.colorStops[0].color}, ${item.color.colorStops[1].color})"></span>
                         <span>${item.seriesName}:${item.value.toFixed(2)}</span>
                       </p>`;
-        });
-        el += `</div>`;
-        return el;
-      }
-    },
-    grid: {
-      top: 50,
-      left: 0,
-      bottom: 0,
-      right: 0,
-      containLabel: true
-    },
-    xAxis: {
-      type: "category",
-      axisLine: {
-        show: false // 不显示坐标轴
-      },
-      axisTick: {
-        show: false // 不显示坐标轴刻度
-      },
-      axisLabel: {
-        formatter: function (params, index) {
-          if (params.length == 2) {
-            return params + '月';
-          } else {
-            return params.slice(5) + '月';
-          }
-
+                });
+                el += `</div>`;
+                return el;
+            }
         },
-        color: "#9B9DA5",
-        margin: 15
-      },
-      data: !!xAxis.length ? xAxis : defaultMonth
-    },
-    yAxis: {
-      type: "value",
-      splitNumber: 4,
-      name: name,
-      axisLine: {
-        show: false
-      },
-      axisTick: {
-        show: false
-      },
-      axisLabel: {
-        color: "#9B9DA5",
-        margin: 15,
-        textStyle: {
-          align: "right",
-          baseline: "middle"
-        }
-      },
-      nameLocation: "end",
-      nameTextStyle: { color: "#9B9DA5", padding: [0, 0, 0, -40] },
-      splitLine: {
-        lineStyle: {
-          type: "dotted",
-          width: 0.5
-        }
-      }
-    },
-    legend: {
-      show: false,
-      x: 'right',
-      icon: "circle",
-      itemWidth: 8, // 图例图形宽度
-      itemHeight: 8,
-      itemGap: 20
-    },
-    series: seriesConfiguration() || defaultData
-  };
-  return option;
-}
-
-//柱状name  单柱状
-export const columnOptionsChartName = (
-  name = "",
-  xAxis = [],
-  series = [],
-  color = [],
-  barWidth = 6
-) => {
-  let defaultData = [{
-    name: '', type: 'bar', data: []
-  }]
-  let defaultColor = [['#0EAEFF', '#85E9FF'], ['#F0646C', '#F4994E']]
-  let seriesConfiguration = () => {
-    let seriesData = [
-      {
-        type: 'bar',
-        data: [],
-        barWidth: barWidth,
-        itemStyle: {
-          normal: {
-            barBorderRadius: [15, 15, 0, 0],
-            color: getColor(color[0] || defaultColor[0]),
-          }
+        grid: {
+            top: 50,
+            left: 0,
+            bottom: 0,
+            right: 0,
+            containLabel: true
         },
-        barGap: '100%'
-      }
-    ];
-    series.map((item, index) => {
-      seriesData[0].data.push(item.data)
-    })
-    return seriesData
-  }
-  let option = {
-    tooltip: {
-      trigger: "axis",
-      axisPointer: {
-        type: "shadow",
-        shadowStyle: {
-          color: {
-            type: "linear",
-            x: 0,
-            y: 0,
-            x2: 0,
-            y2: 1,
-            colorStops: [
-              {
-                offset: 0,
-                color: "rgba(31,207,245,0)" // 0% 处的颜色
-              },
-              {
-                offset: 0.8,
-                color: "rgba(31,207,245,0.15)" // 100% 处的颜色
-              },
-              {
-                offset: 0.2,
-                color: "rgba(31,207,245,0.15)" // 100% 处的颜色
-              },
-              {
-                offset: 1,
-                color: "rgba(31,207,245,0.05)"
-              }
-            ],
-            global: false // 缺省为 false
-          }
+        xAxis: {
+            type: 'category',
+            axisLine: {
+                show: false // 不显示坐标轴
+            },
+            axisTick: {
+                show: false // 不显示坐标轴刻度
+            },
+            axisLabel: {
+                formatter: function (params, index) {
+                    if (params.length == 2) {
+                        return params + '月';
+                    } else {
+                        return params.slice(5) + '月';
+                    }
+                },
+                color: '#9B9DA5',
+                margin: 15
+            },
+            data: !!xAxis.length ? xAxis : defaultMonth
+        },
+        yAxis: {
+            type: 'value',
+            splitNumber: 4,
+            name: name,
+            axisLine: {
+                show: false
+            },
+            axisTick: {
+                show: false
+            },
+            axisLabel: {
+                color: '#9B9DA5',
+                margin: 15,
+                textStyle: {
+                    align: 'right',
+                    baseline: 'middle'
+                }
+            },
+            nameLocation: 'end',
+            nameTextStyle: { color: '#9B9DA5', padding: [0, 0, 0, -40] },
+            splitLine: {
+                lineStyle: {
+                    type: 'dotted',
+                    width: 0.5
+                }
+            }
         },
-        crossStyle: {
-          shadowBlur: 30,
-          shadowColor: "rgba(0, 0, 0, 0.5)"
+        legend: {
+            show: false,
+            x: 'right',
+            icon: 'circle',
+            itemWidth: 8, // 图例图形宽度
+            itemHeight: 8,
+            itemGap: 20
+        },
+        series: seriesConfiguration() || defaultData
+    };
+    return option;
+};
+
+//柱状name  单柱状
+export const columnOptionsChartName = (name = '', xAxis = [], series = [], color = [], barWidth = 6) => {
+    let defaultData = [
+        {
+            name: '',
+            type: 'bar',
+            data: []
         }
-      },
-      extraCssText:
-        "background:rgba(33,40,56,0.6);border-radius:4px;padding:6px 10px",
-      textStyle: {
-        fontSize: 12,
-        color: "#FFFFFF"
-      },
-      formatter(param) {
-        let el = ``;
-        param.forEach(item => {
-          el += `<p style="text-align: left;">
+    ];
+    let defaultColor = [
+        ['#0EAEFF', '#85E9FF'],
+        ['#F0646C', '#F4994E']
+    ];
+    let seriesConfiguration = () => {
+        let seriesData = [
+            {
+                type: 'bar',
+                data: [],
+                barWidth: barWidth,
+                itemStyle: {
+                    normal: {
+                        barBorderRadius: [15, 15, 0, 0],
+                        color: getColor(color[0] || defaultColor[0])
+                    }
+                },
+                barGap: '100%'
+            }
+        ];
+        series.map((item, index) => {
+            seriesData[0].data.push(item.data);
+        });
+        return seriesData;
+    };
+    let option = {
+        tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+                type: 'shadow',
+                shadowStyle: {
+                    color: {
+                        type: 'linear',
+                        x: 0,
+                        y: 0,
+                        x2: 0,
+                        y2: 1,
+                        colorStops: [
+                            {
+                                offset: 0,
+                                color: 'rgba(31,207,245,0)' // 0% 处的颜色
+                            },
+                            {
+                                offset: 0.8,
+                                color: 'rgba(31,207,245,0.15)' // 100% 处的颜色
+                            },
+                            {
+                                offset: 0.2,
+                                color: 'rgba(31,207,245,0.15)' // 100% 处的颜色
+                            },
+                            {
+                                offset: 1,
+                                color: 'rgba(31,207,245,0.05)'
+                            }
+                        ],
+                        global: false // 缺省为 false
+                    }
+                },
+                crossStyle: {
+                    shadowBlur: 30,
+                    shadowColor: 'rgba(0, 0, 0, 0.5)'
+                }
+            },
+            extraCssText: 'background:rgba(33,40,56,0.6);border-radius:4px;padding:6px 10px',
+            textStyle: {
+                fontSize: 12,
+                color: '#FFFFFF'
+            },
+            formatter(param) {
+                let el = ``;
+                param.forEach((item) => {
+                    el += `<p style="text-align: left;">
           <span style="display:inline-block;margin-right:5px;border-radius:4px;width:12px;height:8px;background-image: linear-gradient(to left, 
             ${item.color.colorStops[0].color}, ${item.color.colorStops[1].color})"></span>
                         <span>${item.name}:${item.value}${name}</span>
                       </p>`;
-        });
-        el += ``;
-        return el;
-      }
-    },
-    grid: {
-      top: 50,
-      left: 0,
-      bottom: 0,
-      right: 0,
-      containLabel: true
-    },
-    xAxis: {
-      type: "category",
-      axisLine: {
-        show: false // 不显示坐标轴
-      },
-      axisTick: {
-        show: false // 不显示坐标轴刻度
-      },
-      axisLabel: {
-        formatter: function (params, index) {
-          return params
+                });
+                el += ``;
+                return el;
+            }
         },
-        color: "#9B9DA5",
-        margin: 15
-      },
-      data: !!xAxis.length ? xAxis : defaultName
-    },
-    yAxis: {
-      type: "value",
-      splitNumber: 4,
-      name: name,
-      axisLine: {
-        show: false
-      },
-      axisTick: {
-        show: false
-      },
-      axisLabel: {
-        color: "#9B9DA5",
-        margin: 15,
-        textStyle: {
-          align: "right",
-          baseline: "middle"
-        }
-      },
-      nameLocation: "end",
-      nameTextStyle: { color: "#9B9DA5", padding: [0, 0, 0, -40] },
-      splitLine: {
-        lineStyle: {
-          type: "dotted",
-          width: 0.5
+        grid: {
+            top: 50,
+            left: 0,
+            bottom: 0,
+            right: 0,
+            containLabel: true
+        },
+        xAxis: {
+            type: 'category',
+            axisLine: {
+                show: false // 不显示坐标轴
+            },
+            axisTick: {
+                show: false // 不显示坐标轴刻度
+            },
+            axisLabel: {
+                formatter: function (params, index) {
+                    return params;
+                },
+                color: '#9B9DA5',
+                margin: 15
+            },
+            data: !!xAxis.length ? xAxis : defaultName
+        },
+        yAxis: {
+            type: 'value',
+            splitNumber: 4,
+            name: name,
+            axisLine: {
+                show: false
+            },
+            axisTick: {
+                show: false
+            },
+            axisLabel: {
+                color: '#9B9DA5',
+                margin: 15,
+                textStyle: {
+                    align: 'right',
+                    baseline: 'middle'
+                }
+            },
+            nameLocation: 'end',
+            nameTextStyle: { color: '#9B9DA5', padding: [0, 0, 0, -40] },
+            splitLine: {
+                lineStyle: {
+                    type: 'dotted',
+                    width: 0.5
+                }
+            }
+        },
+        legend: {
+            show: false,
+            x: 'right',
+            icon: 'circle',
+            itemWidth: 8, // 图例图形宽度
+            itemHeight: 8,
+            itemGap: 20
+        },
+        series: seriesConfiguration() || defaultData
+    };
+    return option;
+};
+
+// 柱状图堆叠
+export const columnOptionsChartStacking = (name = '', xAxis = [], series = [], color = [], barWidth = 6) => {
+    let defaultData = [
+        {
+            name: '',
+            type: 'bar',
+            data: []
         }
-      }
-    },
-    legend: {
-      show: false,
-      x: 'right',
-      icon: "circle",
-      itemWidth: 8, // 图例图形宽度
-      itemHeight: 8,
-      itemGap: 20
-    },
-    series: seriesConfiguration() || defaultData
-  };
-  return option;
-}
+    ];
+    let defaultColor = [
+        // ['#0EAEFF', '#85E9FF'],
+        ['#0EAEFF', '#0EAEFF'],
+        ['#85E9FF', '#85E9FF']
+        // ['#F0646C', '#F4994E']
+    ];
+
+    let seriesConfiguration = () => {
+        let seriesData = [
+            {
+                type: 'bar',
+                data: [],
+                name: '',
+                barWidth: barWidth,
+                itemStyle: {
+                    normal: {
+                        barBorderRadius: [15, 15, 0, 0],
+                        color: getColor(color[0] || defaultColor[0])
+                    }
+                },
+                barGap: '100%'
+            },
+            {
+                type: 'bar',
+                data: [],
+                name: '',
+                barWidth: barWidth,
+                itemStyle: {
+                    normal: {
+                        barBorderRadius: [15, 15, 0, 0],
+                        color: getColor(color[1] || defaultColor[1])
+                    }
+                },
+                barGap: '-100%',
+                z: '1'
+            }
+        ];
+        series.map((item, index) => {
+            seriesData[index].data = item.data;
+            seriesData[index].name = item.name;
+        });
+        return seriesData;
+    };
+    let option = {
+        tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+                type: 'shadow',
+                shadowStyle: {
+                    color: {
+                        type: 'linear',
+                        x: 0,
+                        y: 0,
+                        x2: 0,
+                        y2: 1,
+                        colorStops: [
+                            {
+                                offset: 0,
+                                color: 'rgba(31,207,245,0)' // 0% 处的颜色
+                            },
+                            {
+                                offset: 0.8,
+                                color: 'rgba(31,207,245,0.15)' // 100% 处的颜色
+                            },
+                            {
+                                offset: 0.2,
+                                color: 'rgba(31,207,245,0.15)' // 100% 处的颜色
+                            },
+                            {
+                                offset: 1,
+                                color: 'rgba(31,207,245,0.05)'
+                            }
+                        ],
+                        global: false // 缺省为 false
+                    }
+                },
+                crossStyle: {
+                    shadowBlur: 30,
+                    shadowColor: 'rgba(0, 0, 0, 0.5)'
+                }
+            },
+            extraCssText: 'background:rgba(33,40,56,0.6);border-radius:4px;padding:6px 10px',
+            textStyle: {
+                fontSize: 12,
+                color: '#FFFFFF'
+            },
+            formatter(param) {
+                let el = ``;
+                param.forEach((item) => {
+                    el += `<p style="text-align: left;">
+          <span style="display:inline-block;margin-right:5px;border-radius:4px;width:12px;height:8px;background-image: linear-gradient(to left, 
+            ${item.color.colorStops[0].color}, ${item.color.colorStops[1].color})"></span>
+                        <span>${item.seriesName}:${item.value}${name}</span>
+                      </p>`;
+                });
+                el += ``;
+                return el;
+            }
+        },
+        grid: {
+            top: 50,
+            left: 0,
+            bottom: 0,
+            right: 0,
+            containLabel: true
+        },
+        xAxis: {
+            type: 'category',
+            axisLine: {
+                show: false // 不显示坐标轴
+            },
+            axisTick: {
+                show: false // 不显示坐标轴刻度
+            },
+            axisLabel: {
+                formatter: function (params, index) {
+                    return params;
+                },
+                color: '#9B9DA5',
+                margin: 15
+            },
+            data: !!xAxis.length ? xAxis : defaultName
+        },
+        yAxis: {
+            type: 'value',
+            splitNumber: 4,
+            name: name,
+            axisLine: {
+                show: false
+            },
+            axisTick: {
+                show: false
+            },
+            axisLabel: {
+                color: '#9B9DA5',
+                margin: 15,
+                textStyle: {
+                    align: 'right',
+                    baseline: 'middle'
+                }
+            },
+            nameLocation: 'end',
+            nameTextStyle: { color: '#9B9DA5', padding: [0, 0, 0, -40] },
+            splitLine: {
+                lineStyle: {
+                    type: 'dotted',
+                    width: 0.5
+                }
+            }
+        },
+        legend: {
+            show: false,
+            x: 'right',
+            icon: 'circle',
+            itemWidth: 8, // 图例图形宽度
+            itemHeight: 8,
+            itemGap: 20
+        },
+        series: seriesConfiguration() || defaultData
+    };
+    return option;
+};
+
+// 折线日期  间隔4个
+export const discountedChart = (name = '', xAxis = [], series = [], legendShow = false, color = []) => {
+    let option = {
+        tooltip: {
+            trigger: 'axis',
+            textStyle: {
+                fontSize: 12,
+                color: '#FFFFFF'
+            }
+            // formatter(param) {
+            //   let el = `<div class="dmp-echart-tooltip"><h4>${dateType(param[0].axisValue)}</h4>`;
+            //   param.forEach(item => {
+            //     el += `<p>
+            //                   <span class="marker" style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-image: linear-gradient(to left,
+            //                     ${item.color.colorStops[0].color}, ${item.color.colorStops[1].color});"></span>
+            //                   <span>${item.seriesName}:${item.value}</span>
+            //                 </p>`;
+            //   });
+            //   el += `</div>`;
+            //   return el;
+            // }
+        },
+        grid: {
+            top: 50,
+            left: 5,
+            bottom: 0,
+            right: 5,
+            containLabel: true
+        },
+
+        legend: {
+            show: legendShow,
+            icon: 'circle',
+            x: 'right', // 可设定图例在左、右、居中
+            itemWidth: 8, // 图例图形宽度
+            itemHeight: 8,
+            itemGap: 20
+        },
+        xAxis: {
+            type: 'category',
+            axisLine: {
+                show: false // 不显示坐标轴
+            },
+            axisTick: {
+                show: false // 不显示坐标轴刻度
+            },
+            axisLabel: {
+                interval: 4,
+                // formatter: function (params, index) {
+                //     return params.slice(5);
+                // },
+                color: '#9B9DA5',
+                margin: 16
+            },
+            data: xAxis,
+            axisPointer: {
+                type: 'shadow',
+                shadowStyle: {
+                    color: {
+                        type: 'linear',
+                        x: 0,
+                        y: 0,
+                        x2: 0,
+                        y2: 1,
+                        colorStops: [
+                            {
+                                offset: 0,
+                                color: 'rgba(31,207,245,0)' // 0% 处的颜色
+                            },
+                            {
+                                offset: 0.8,
+                                color: 'rgba(31,207,245,0.15)' // 100% 处的颜色
+                            },
+                            {
+                                offset: 0.2,
+                                color: 'rgba(31,207,245,0.15)' // 100% 处的颜色
+                            },
+                            {
+                                offset: 1,
+                                color: 'rgba(31,207,245,0.05)'
+                            }
+                        ],
+                        global: false // 缺省为 false
+                    }
+                }
+            }
+        },
+        yAxis: {
+            type: 'value',
+            splitNumber: 4,
+            axisLine: {
+                show: false
+            },
+            name: name,
+            axisTick: {
+                show: false
+            },
+            axisLabel: {
+                color: '#9B9DA5',
+                margin: 15,
+                textStyle: {
+                    align: 'right',
+                    baseline: 'middle'
+                }
+            },
+            nameLocation: 'end',
+            nameTextStyle: { color: '#9B9DA5', padding: [0, 0, 0, -40] },
+            splitLine: {
+                lineStyle: {
+                    type: 'dotted',
+                    width: 0.2
+                }
+            }
+        },
+        series: [
+            {
+                // name: "设备告警",
+                type: 'line',
+                smooth: true,
+                symbol: 'circle', // 实心
+                symbolSize: 1, // 设定实心点的大小
+                itemStyle: getItemStyle('#5EEDCC', '#24C3F1'),
+                data: series,
+                areaStyle: {
+                    normal: {
+                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+                            {
+                                offset: 0,
+                                color: 'rgba(36,121,253,0.1)'
+                            },
+                            {
+                                offset: 1,
+                                color: 'rgba(19,194,247,0.3)'
+                            }
+                        ])
+                    }
+                },
+                lineStyle: {
+                    width: 1
+                }
+            }
+        ]
+    };
+    return option;
+};

+ 157 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/completionMaintenanceOrder.vue

@@ -0,0 +1,157 @@
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">运维工单完成率</div>
+        <div class="model-title-right">
+          <el-date-picker
+            value-format="yyyy-MM"
+            v-model="date"
+            type="month"
+            placeholder="选择月"
+            class="saveColumn-select"
+            @change="changeTime"
+            :clearable="false"
+          >
+          </el-date-picker>
+        </div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+        <div class="totals">
+          <span>{{ total }}</span>
+          <span class="numbers">任务总数</span>
+        </div>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="运维工单完成率"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { GradualChange, ringType } from '../indexOptionChart';
+import permissionComponent from '../permissionComponent';
+const colors = [
+  GradualChange('#22D8FF', '#00B2FF'),
+  GradualChange('#F0646C', '#F4994E'),
+  GradualChange('#5EEDCC ', '#24C3F1'),
+  GradualChange('#7178FF', '#D2A4FF'),
+  GradualChange('#884DD2', '#DF63CC')
+];
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      defaultModel: {
+        permissUrl: '17',
+        titleName: '运维工单'
+      },
+      mixins_query: {
+        communityId: '',
+        date: '',
+      },
+      date: '',
+      total: 0,
+      clientOptions: ringType(
+        colors,
+        [
+          { value: 0, name: '待派单' },
+          { value: 0, name: '处理中' },
+          { value: 0, name: '已完成' },
+          { value: 0, name: '已完成(超时)' },
+          { value: 0, name: '已关闭' }
+        ],
+        {},
+        { type: 'number', total: 0 }
+      )
+    };
+  },
+  methods: {
+    getData () {
+      this.$http.get('/sc-community-web/statisticWorkOrderComplete', this.mixins_query).then(({ data, msg, status }) => {
+        if (status == 0 && !!data.datas) {
+          this.clientOptions = ringType(colors, this.eachartObj(data), {}, { type: 'number', total: data.total });
+        }
+      })
+    },
+    changeTime (v) {
+      this.mixins_query.date = v + '-01';
+      this.getData();
+    },
+    eachartObj (data) {
+      this.total = data.total || 0;
+      let newData = [];
+      for (let a in data.datas) {
+        newData.push({
+          value: data.datas[a],
+          name: a
+        });
+      }
+
+      return newData;
+    }
+  },
+  created () {
+    this.mixins_query.date = this.$moment().format('YYYY-MM') + '-01';
+    this.date = this.$moment().format('YYYY-MM');
+    this.getData();
+  }
+};
+</script>
+<style lang="scss" scoped>
+@import '@assets/css/public-style.scss';
+.modelBlock {
+    height: 100%;
+    padding: rem(15) rem(20) rem(20);
+    background: #171f32;
+    .model-title {
+        line-height: rem(30);
+        display: flex;
+        justify-content: space-between;
+        padding-bottom: rem(15);
+        border-bottom: 1px solid rgba(224, 225, 227, 0.2);
+        .saveColumn-select {
+            width: rem(120);
+            margin-left: rem(20);
+            /deep/ .el-input__inner {
+                background: transparent;
+                color: white;
+                border-color: rgba(255, 255, 255, 0.2);
+            }
+        }
+        .model-title-text {
+            color: white;
+        }
+    }
+    .model-content {
+        height: calc(100% - #{rem(45)});
+        display: flex;
+        justify-content: space-between;
+        font-size: 12px;
+        position: relative;
+        .totals {
+            position: absolute;
+            right: rem(10);
+            top: rem(26);
+            width: rem(120);
+            height: rem(40);
+            background: linear-gradient(90deg, rgba(14, 174, 255, 0.5) 0%, rgba(14, 174, 255, 0) 100%);
+            border-radius: 5px;
+            font-size: 20px;
+            padding: rem(8) rem(10);
+            display: flex;
+            justify-content: space-between;
+            .numbers {
+                font-size: 12px;
+                opacity: 0.5;
+                line-height: rem(32);
+            }
+        }
+    }
+}
+</style>

+ 91 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/householdDistribution.vue

@@ -0,0 +1,91 @@
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">住户年龄分布</div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="住户年龄分布"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { columnOptionsChartName } from '../indexOptionChart.js';
+import permissionComponent from '../permissionComponent';
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      defaultModel: {
+        permissUrl: '12',
+        titleName: '住户管理'
+      },
+      mixins_query: {
+        communityId: ''
+      },
+      clientOptions: columnOptionsChartName(
+        '(人)',
+        ['name1', 'name2', 'name3'],
+        [
+          {
+            name: 'name1',
+            data: 0
+          },
+          {
+            name: 'name2',
+            data: 0
+          },
+          {
+            name: 'name3',
+            data: 0
+          }
+        ],
+        [],
+        10
+      )
+    };
+  },
+  created () {
+    this.getData();
+  },
+  mounted () { },
+  computed: {},
+  methods: {
+    getData () {
+      this.$http.get('/sc-community-web/statisticGeneration', this.mixins_query)
+        .then(({ status, data, msg }) => {
+          debugger
+          if (status == 0) {
+            let name = ['0-18岁', '19-30岁', '31-40岁', '41-50岁', '51-60岁', '60岁以上']
+            debugger
+            let date = []
+            let dateRes = [];
+            for (let a in data.datas) {
+              date.push(data.datas[a])
+            }
+            console.log('date', date);
+            for (let i = 0; i < name.length; i++) {
+              dateRes.push({
+                name: name[i],
+                data: date[i]
+              })
+            }
+            this.clientOptions = columnOptionsChartName('(人)', name, dateRes, [], 10);
+          }
+        })
+        .catch((err) => { });
+    }
+  }
+};
+</script>
+<style scoped lang="scss">
+@import '../style.scss';
+</style>

+ 112 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/operationMaintenancePersonnel.vue

@@ -0,0 +1,112 @@
+
+<!-- 已完成 -->
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">运维人员任务执行情况</div>
+        <div class="model-title-right">
+          <el-date-picker
+            value-format="yyyy-MM"
+            v-model="date"
+            type="month"
+            placeholder="选择月"
+            class="saveColumn-select"
+            :clearable="false"
+            @change="changeTime"
+          >
+          </el-date-picker>
+        </div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="运维人员任务执行情况"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { columnOptionsChartStacking } from '../indexOptionChart';
+import permissionComponent from '../permissionComponent';
+let dataArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      defaultModel: {
+        permissUrl: '17',
+        titleName: '运维工单'
+      },
+      mixins_query: {
+        communityId: '',
+        date: '',
+      },
+      date: '',
+      clientOptions: columnOptionsChartStacking(
+        '(个)',
+        ['name1', 'name2', 'name3'],
+        [
+          {
+            data: [10, 20, 15],
+            name: '任务总数'
+          },
+          {
+            data: [20, 30, 10],
+            name: '已完成'
+          }
+        ],
+        [],
+        10
+      ),
+    };
+  },
+  methods: {
+    getData () {
+      this.$http.get('/sc-community-web/statisticWorkOrderTask', this.mixins_query).then(({ data, msg, status }) => {
+        debugger
+        console.log('data', data);
+        if (status == 0 && !!data) {
+          let dataName = [];
+          let dataNums = [];
+          let datacompelete = [];
+          data.map((item) => {
+            dataName.push(item.name);
+            dataNums.push(item.total);
+            datacompelete.push(item.completeTotal);
+          })
+          this.clientOptions = columnOptionsChartStacking('(个)', dataName, [{ data: dataNums, name: '任务总数' }, { data: datacompelete, name: '已完成' }], [], 10);
+        }
+      })
+    },
+    changeTime (v) {
+      debugger
+      this.mixins_query.date = v + '-01';
+      this.getData();
+    }
+  },
+  created () {
+    debugger
+    this.mixins_query.date = this.$moment().format('YYYY-MM') + '-01';
+    this.date = this.$moment().format('YYYY-MM');
+    this.getData();
+  }
+};
+</script>
+<style scoped lang="scss">
+@import '../style.scss';
+.model-title {
+    .model-title-right {
+        .saveColumn-select {
+            &:not(:first-child) {
+                margin-left: rem(20);
+            }
+        }
+    }
+}
+</style>

+ 101 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/orderClassification.vue

@@ -0,0 +1,101 @@
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">运维工单分类</div>
+        <div class="model-title-right">
+          <el-date-picker
+            value-format="yyyy-MM"
+            v-model="date"
+            type="month"
+            placeholder="选择月"
+            class="saveColumn-select"
+            @change="changeTime"
+            :clearable="false"
+          >
+          </el-date-picker>
+        </div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+        <div class="totals">
+          <span>{{ total }}</span>
+          <span class="numbers">工作总数</span>
+        </div>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="运维工单分类"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { ringType } from '../indexOptionChart';
+import permissionComponent from '../permissionComponent';
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      defaultModel: {
+        permissUrl: '17',
+        titleName: '运维工单'
+      },
+      mixins_query: {
+        communityId: '',
+        date: '',
+      },
+      total: 0,
+      date: '',
+      clientOptions: ringType(
+        [],
+        [
+          { value: 0, name: '业主报修' },
+          { value: 0, name: '内部报修' }
+        ],
+        {},
+        { type: '%', total: 0 }
+      )
+    };
+  },
+  methods: {
+    changeTime (v) {
+      this.mixins_query.date = v + '-01';
+      this.getData();
+    },
+    getData () {
+      this.$http.get('/sc-community-web/statisticWorkOrderCategory', this.mixins_query).then(({ data, msg, status }) => {
+        if (status == 0 && !!data.datas) {
+          this.clientOptions = ringType([], this.eachartObj(data), {}, { type: '%', total: data.total });
+        }
+      });
+    },
+    eachartObj (data) {
+      this.total = data.total;
+      let typeName = {
+        1: '业主报修',
+        2: '内部报修'
+      };
+      let newData = [];
+      for (let a in data.datas) {
+        newData.push({
+          value: data.datas[a],
+          name: a
+        });
+      }
+      return newData;
+    }
+  },
+  created () {
+    this.mixins_query.date = this.$moment().format('YYYY-MM') + '-01';
+    this.date = this.$moment().format('YYYY-MM');
+    this.getData();
+  }
+};
+</script>
+<style lang="scss" scoped>
+@import '../style.scss';
+</style>

+ 151 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/paidAnalysis.vue

@@ -0,0 +1,151 @@
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">实收分析</div>
+        <div class="model-title-right">
+          <el-date-picker
+            value-format="yyyy-MM"
+            v-model="date"
+            type="month"
+            placeholder="选择月"
+            class="saveColumn-select"
+            @change="changeTime"
+            :clearable="false"
+          >
+          </el-date-picker>
+          <el-select
+            v-model="mixins_query.chargeType"
+            placeholder="所有费用"
+            clearable
+            class="saveColumn-select"
+            @change="getData"
+          >
+            <el-option
+              v-for="(item, index) in amountType"
+              :label="item.name"
+              :value="item.value"
+              :key="index"
+            ></el-option>
+          </el-select>
+        </div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="实收分析"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { discountedChart } from '../indexOptionChart';
+import permissionComponent from '../permissionComponent';
+let dataArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
+let dataDay = [
+  '1月',
+  '2月',
+  '3月',
+  '4月',
+  '5月',
+  '6月',
+  '7月',
+  '8月',
+  '9月',
+  '10月',
+  '11月',
+  '12月',
+];
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      defaultModel: {
+        permissUrl: '16',
+        titleName: '告警管理'
+      },
+      clientOptions: discountedChart('(元)', dataDay, dataArr),
+      mixins_query: {
+        communityId: '',
+        date: '',
+        chargeType: ''
+      },
+      date: '',
+      amountType: [
+        {
+          value: 1,
+          name: '物业费'
+        },
+        {
+          value: 2,
+          name: '水费'
+        },
+        {
+          value: 3,
+          name: '电费'
+        },
+        {
+          value: 4,
+          name: '车位费'
+        },
+        {
+          value: 6,
+          name: '卫生费'
+        },
+        {
+          value: 7,
+          name: '其他费用'
+        }
+      ],
+    };
+  },
+  created () {
+    this.mixins_query.date = this.$moment().format('YYYY-MM') + '-01';
+    this.date = this.$moment().format('YYYY-MM');
+    this.getData();
+  },
+  methods: {
+    getData () {
+      this.$http
+        .get('/sc-community-web/statisticActuallyReceived', this.mixins_query)
+        .then(({ status, data, msg }) => {
+          debugger
+          if (status == 0) {
+            let date = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
+            let dateRes = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+            let dateTime = [];
+            let dateTimes = [];
+            for (let i = 0; i < data.length; i++) {
+              for (let k = i; k < date.length; k++) {
+                if ((data[i].date.substr(5, 1) == '0' ? data[i].date.substr(6) : data[i].date.substr(5)) == date[k]) {
+                  dateTime.push(date[k])
+                  dateRes[k] = data[i].receivedAmount
+                }
+                dateTime.push(date[k])
+              }
+            }
+            dateTime = Array.from(new Set(dateTime))
+            for (let j = 0; j < dateTime.length; j++) {
+              dateTimes.push(dateTime[j] + '月')
+            }
+            this.clientOptions = discountedChart('(元)', dateTimes, dateRes);
+
+          }
+        })
+        .catch((err) => { });
+    },
+    changeTime (v) {
+      this.mixins_query.date = v + '-01';
+      this.getData();
+    },
+  }
+};
+</script>
+<style scoped lang="scss">
+@import '../style.scss';
+</style>

+ 163 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/patrolInspectionRate.vue

@@ -0,0 +1,163 @@
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">巡检任务完成率</div>
+        <div class="model-title-right">
+          <el-date-picker
+            value-format="yyyy-MM"
+            v-model="date"
+            type="month"
+            placeholder="选择月"
+            class="saveColumn-select"
+            @change="changeTime"
+            :clearable="false"
+          >
+          </el-date-picker>
+        </div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+        <div class="totals">
+          <span>{{ total }}</span>
+          <span class="numbers">任务总数</span>
+        </div>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="巡检任务完成率"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { GradualChange, ringType } from '../indexOptionChart';
+import permissionComponent from '../permissionComponent';
+const colors = [
+  GradualChange('#22D8FF', '#00B2FF'),
+  GradualChange('#F0646C', '#F4994E'),
+  GradualChange('#5EEDCC ', '#24C3F1'),
+  GradualChange('#7178FF', '#D2A4FF'),
+  GradualChange('#884DD2', '#DF63CC')
+];
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      defaultModel: {
+        permissUrl: '18',
+        titleName: '设备巡检'
+      },
+      mixins_query: {
+        communityId: '',
+        date: '',
+      },
+      date: '',
+      total: 0,
+      clientOptions: ringType(
+        colors,
+        [
+          { value: 0, name: '待执行' },
+          { value: 0, name: '执行中' },
+          { value: 0, name: '已完成' },
+          { value: 0, name: '已完成(超时)' },
+          { value: 0, name: '已逾期' }
+        ],
+        {},
+        { type: 'number', total: 0 }
+      )
+    };
+  },
+  methods: {
+    getData () {
+      this.$http.get('/sc-community-web/statisticInspectionTaskCompletionRate', this.mixins_query).then(({ data, msg, status }) => {
+        if (status == 0 && !!data.datas) {
+          this.clientOptions = ringType(colors, this.eachartObj(data), {}, { type: 'number', total: data.total });
+        }
+      })
+    },
+    changeTime (v) {
+      this.mixins_query.date = v + '-01';
+      this.getData();
+    },
+    eachartObj (data) {
+      this.total = data.total || 0;
+      let typeName = {
+        1: '待执行',
+        2: '执行中',
+        3: '已完成',
+        4: '已完成(超时)',
+        5: '已逾期'
+      };
+      let newData = [];
+      for (let a in data.datas) {
+        newData.push({
+          value: data.datas[a],
+          name: typeName[a]
+        });
+      }
+      return newData;
+    }
+  },
+  created () {
+    this.mixins_query.date = this.$moment().format('YYYY-MM') + '-01';
+    this.date = this.$moment().format('YYYY-MM');
+    this.getData();
+  }
+};
+</script>
+<style lang="scss" scoped>
+@import '@assets/css/public-style.scss';
+.modelBlock {
+    height: 100%;
+    padding: rem(15) rem(20) rem(20);
+    background: #171f32;
+    .model-title {
+        line-height: rem(30);
+        display: flex;
+        justify-content: space-between;
+        padding-bottom: rem(15);
+        border-bottom: 1px solid rgba(224, 225, 227, 0.2);
+        .saveColumn-select {
+            width: rem(120);
+            margin-left: rem(20);
+            /deep/ .el-input__inner {
+                background: transparent;
+                color: white;
+                border-color: rgba(255, 255, 255, 0.2);
+            }
+        }
+        .model-title-text {
+            color: white;
+        }
+    }
+    .model-content {
+        height: calc(100% - #{rem(45)});
+        display: flex;
+        justify-content: space-between;
+        font-size: 12px;
+        position: relative;
+        .totals {
+            position: absolute;
+            right: rem(10);
+            top: rem(26);
+            width: rem(120);
+            height: rem(40);
+            background: linear-gradient(90deg, rgba(14, 174, 255, 0.5) 0%, rgba(14, 174, 255, 0) 100%);
+            border-radius: 5px;
+            font-size: 20px;
+            padding: rem(8) rem(10);
+            display: flex;
+            justify-content: space-between;
+            .numbers {
+                font-size: 12px;
+                opacity: 0.5;
+                line-height: rem(32);
+            }
+        }
+    }
+}
+</style>

+ 112 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/patrolPersonnel.vue

@@ -0,0 +1,112 @@
+
+<!-- 已完成 -->
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">巡更人员任务执行情况</div>
+        <div class="model-title-right">
+          <el-date-picker
+            value-format="yyyy-MM"
+            v-model="date"
+            type="month"
+            placeholder="选择月"
+            class="saveColumn-select"
+            :clearable="false"
+            @change="changeTime"
+          >
+          </el-date-picker>
+        </div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="巡更人员任务执行情况"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { columnOptionsChartStacking } from '../indexOptionChart';
+import permissionComponent from '../permissionComponent';
+let dataArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      defaultModel: {
+        permissUrl: '19',
+        titleName: '安保巡更'
+      },
+      mixins_query: {
+        communityId: '',
+        date: '',
+      },
+      date: '',
+      clientOptions: columnOptionsChartStacking(
+        '(个)',
+        ['name1', 'name2', 'name3'],
+        [
+          {
+            data: [10, 20, 15],
+            name: '任务总数'
+          },
+          {
+            data: [20, 30, 10],
+            name: '已完成'
+          }
+        ],
+        [],
+        10
+      ),
+    };
+  },
+  methods: {
+    getData () {
+      this.$http.get('/sc-community-web/statisticPatrolPersonnelSituation', this.mixins_query).then(({ data, msg, status }) => {
+        debugger
+        console.log('data', data);
+        if (status == 0 && !!data) {
+          let dataName = [];
+          let dataNums = [];
+          let datacompelete = [];
+          data.map((item) => {
+            dataName.push(item.type);
+            dataNums.push(item.nums);
+            datacompelete.push(item.compeleteNums);
+          })
+          this.clientOptions = columnOptionsChartStacking('(个)', dataName, [{ data: dataNums, name: '任务总数' }, { data: datacompelete, name: '已完成' }], [], 10);
+        }
+      })
+    },
+    changeTime (v) {
+      debugger
+      this.mixins_query.date = v + '-01';
+      this.getData();
+    }
+  },
+  created () {
+    debugger
+    this.mixins_query.date = this.$moment().format('YYYY-MM') + '-01';
+    this.date = this.$moment().format('YYYY-MM');
+    this.getData();
+  }
+};
+</script>
+<style scoped lang="scss">
+@import '../style.scss';
+.model-title {
+    .model-title-right {
+        .saveColumn-select {
+            &:not(:first-child) {
+                margin-left: rem(20);
+            }
+        }
+    }
+}
+</style>

+ 117 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/patrolTaskDistribution.vue

@@ -0,0 +1,117 @@
+
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">巡更任务分布</div>
+        <div class="model-title-right">
+          <el-date-picker
+            value-format="yyyy-MM"
+            v-model="date"
+            type="month"
+            placeholder="选择月"
+            class="saveColumn-select"
+            @change="changeTime"
+            :clearable="false"
+          >
+          </el-date-picker>
+        </div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="巡更任务分布"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { discountedChart } from '../indexOptionChart';
+import permissionComponent from '../permissionComponent';
+let dataArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
+let dataDay = [
+  '01-01',
+  '01-02',
+  '01-03',
+  '01-04',
+  '01-05',
+  '01-06',
+  '01-07',
+  '01-08',
+  '01-09',
+  '01-10',
+  '01-11',
+  '01-12',
+  '01-13',
+  '01-14',
+  '01-15',
+  '01-16',
+  '01-17',
+  '01-18',
+  '01-19',
+  '01-20',
+  '01-21',
+  '01-22',
+  '01-23',
+  '01-24',
+  '01-25',
+  '01-26',
+  '01-27',
+  '01-28',
+  '01-29',
+  '01-30',
+  '01-31'
+];
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      // permissionFiltering: '1',
+      defaultModel: {
+        permissUrl: '19',
+        titleName: '安保巡更'
+      },
+      mixins_query: {
+        communityId: '',
+        date: ''
+      },
+      date: '',
+      clientOptions: discountedChart('(个)', dataDay, dataArr)
+    };
+  },
+  created () {
+    this.mixins_query.date = this.$moment().format('YYYY-MM') + '-01';
+    this.date = this.$moment().format('YYYY-MM');
+    this.getData();
+  },
+  methods: {
+    getData () {
+      this.$http
+        .get('/sc-community-web/statisticPatrolTaskDistribution', this.mixins_query)
+        .then(({ status, data, msg }) => {
+          if (status == 0) {
+            let dateTime = []
+            let valueArr = [];
+            data.map((item) => {
+              dateTime.push((item.date).substr(5));
+              valueArr.push(item.data);
+            })
+            this.clientOptions = discountedChart('(次)', dateTime, valueArr);
+          }
+        })
+    },
+    changeTime (v) {
+      this.mixins_query.date = v + '-01';
+      this.getData();
+    }
+  }
+};
+</script>
+<style scoped lang="scss">
+@import '../style.scss';
+</style>

+ 163 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/patrolTaskRate.vue

@@ -0,0 +1,163 @@
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">巡更任务完成率</div>
+        <div class="model-title-right">
+          <el-date-picker
+            value-format="yyyy-MM"
+            v-model="date"
+            type="month"
+            placeholder="选择月"
+            class="saveColumn-select"
+            @change="changeTime"
+            :clearable="false"
+          >
+          </el-date-picker>
+        </div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+        <div class="totals">
+          <span>{{ total }}</span>
+          <span class="numbers">任务总数</span>
+        </div>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="巡更任务完成率"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { GradualChange, ringType } from '../indexOptionChart';
+import permissionComponent from '../permissionComponent';
+const colors = [
+  GradualChange('#22D8FF', '#00B2FF'),
+  GradualChange('#F0646C', '#F4994E'),
+  GradualChange('#5EEDCC ', '#24C3F1'),
+  GradualChange('#7178FF', '#D2A4FF'),
+  GradualChange('#884DD2', '#DF63CC')
+];
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      defaultModel: {
+        permissUrl: '19',
+        titleName: '安保巡更'
+      },
+      mixins_query: {
+        communityId: '',
+        date: '',
+      },
+      date: '',
+      total: 0,
+      clientOptions: ringType(
+        colors,
+        [
+          { value: 0, name: '待执行' },
+          { value: 0, name: '执行中' },
+          { value: 0, name: '已完成' },
+          { value: 0, name: '已完成(超时)' },
+          { value: 0, name: '已逾期' }
+        ],
+        {},
+        { type: 'number', total: 0 }
+      )
+    };
+  },
+  methods: {
+    getData () {
+      this.$http.get('/sc-community-web/statisticPatrolCompletionRate', this.mixins_query).then(({ data, msg, status }) => {
+        if (status == 0 && !!data.datas) {
+          this.clientOptions = ringType(colors, this.eachartObj(data), {}, { type: 'number', total: data.total });
+        }
+      })
+    },
+    changeTime (v) {
+      this.mixins_query.date = v + '-01';
+      this.getData();
+    },
+    eachartObj (data) {
+      this.total = data.total || 0;
+      let typeName = {
+        1: '待执行',
+        2: '执行中',
+        3: '已完成',
+        4: '已完成(超时)',
+        5: '已逾期'
+      };
+      let newData = [];
+      for (let a in data.datas) {
+        newData.push({
+          value: data.datas[a],
+          name: typeName[a]
+        });
+      }
+      return newData;
+    }
+  },
+  created () {
+    this.mixins_query.date = this.$moment().format('YYYY-MM') + '-01';
+    this.date = this.$moment().format('YYYY-MM');
+    this.getData();
+  }
+};
+</script>
+<style lang="scss" scoped>
+@import '@assets/css/public-style.scss';
+.modelBlock {
+    height: 100%;
+    padding: rem(15) rem(20) rem(20);
+    background: #171f32;
+    .model-title {
+        line-height: rem(30);
+        display: flex;
+        justify-content: space-between;
+        padding-bottom: rem(15);
+        border-bottom: 1px solid rgba(224, 225, 227, 0.2);
+        .saveColumn-select {
+            width: rem(120);
+            margin-left: rem(20);
+            /deep/ .el-input__inner {
+                background: transparent;
+                color: white;
+                border-color: rgba(255, 255, 255, 0.2);
+            }
+        }
+        .model-title-text {
+            color: white;
+        }
+    }
+    .model-content {
+        height: calc(100% - #{rem(45)});
+        display: flex;
+        justify-content: space-between;
+        font-size: 12px;
+        position: relative;
+        .totals {
+            position: absolute;
+            right: rem(10);
+            top: rem(26);
+            width: rem(120);
+            height: rem(40);
+            background: linear-gradient(90deg, rgba(14, 174, 255, 0.5) 0%, rgba(14, 174, 255, 0) 100%);
+            border-radius: 5px;
+            font-size: 20px;
+            padding: rem(8) rem(10);
+            display: flex;
+            justify-content: space-between;
+            .numbers {
+                font-size: 12px;
+                opacity: 0.5;
+                line-height: rem(32);
+            }
+        }
+    }
+}
+</style>

+ 109 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/performanceInspectors.vue

@@ -0,0 +1,109 @@
+
+<!-- 已完成 -->
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">巡检人员任务执行情况</div>
+        <div class="model-title-right">
+          <el-date-picker
+            value-format="yyyy-MM"
+            v-model="date"
+            type="month"
+            placeholder="选择月"
+            class="saveColumn-select"
+            :clearable="false"
+            @change="changeTime"
+          >
+          </el-date-picker>
+        </div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="巡检人员任务执行情况"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { columnOptionsChartStacking } from '../indexOptionChart';
+import permissionComponent from '../permissionComponent';
+let dataArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      defaultModel: {
+        permissUrl: '18',
+        titleName: '设备巡检'
+      },
+      mixins_query: {
+        communityId: '',
+        date: '',
+      },
+      date: '',
+      clientOptions: columnOptionsChartStacking(
+        '(个)',
+        ['name1', 'name2', 'name3'],
+        [
+          {
+            data: [10, 20, 15],
+            name: '任务总数'
+          },
+          {
+            data: [20, 30, 10],
+            name: '已完成'
+          }
+        ],
+        [],
+        10
+      ),
+    };
+  },
+  methods: {
+    getData () {
+      this.$http.get('/sc-community-web/statisticInspectionPersonnelSituation', this.mixins_query).then(({ data, msg, status }) => {
+        console.log('data', data);
+        if (status == 0 && !!data) {
+          let dataName = [];
+          let dataNums = [];
+          let datacompelete = [];
+          data.map((item) => {
+            dataName.push(item.type);
+            dataNums.push(item.nums);
+            datacompelete.push(item.compeleteNums);
+          })
+          this.clientOptions = columnOptionsChartStacking('(个)', dataName, [{ data: dataNums, name: '任务总数' }, { data: datacompelete, name: '已完成' }], [], 10);
+        }
+      })
+    },
+    changeTime (v) {
+      this.mixins_query.date = v + '-01';
+      this.getData();
+    }
+  },
+  created () {
+    this.mixins_query.date = this.$moment().format('YYYY-MM') + '-01';
+    this.date = this.$moment().format('YYYY-MM');
+    this.getData();
+  }
+};
+</script>
+<style scoped lang="scss">
+@import '../style.scss';
+.model-title {
+    .model-title-right {
+        .saveColumn-select {
+            &:not(:first-child) {
+                margin-left: rem(20);
+            }
+        }
+    }
+}
+</style>

+ 173 - 0
operationSupport/src/views/newWorkBench/components/workbenchMent/proportionIncomeMode.vue

@@ -0,0 +1,173 @@
+<template>
+  <div class="modelBlock">
+    <template v-if="permissionFiltering">
+      <div class="model-title">
+        <div class="model-title-text">收入方式占比</div>
+        <div class="model-title-right">
+          <el-date-picker
+            value-format="yyyy-MM"
+            v-model="date"
+            type="month"
+            placeholder="选择月"
+            class="saveColumn-select"
+            @change="changeTime"
+            :clearable="false"
+          >
+          </el-date-picker>
+          <el-select
+            v-model="mixins_query.chargeType"
+            placeholder="所有费用"
+            clearable
+            class="saveColumn-select"
+            @change="getData"
+          >
+            <el-option
+              v-for="(item, index) in amountType"
+              :label="item.name"
+              :value="item.value"
+              :key="index"
+            ></el-option>
+          </el-select>
+        </div>
+      </div>
+      <div class="model-content">
+        <zz-echart
+          :option="clientOptions"
+          class="chart"
+        ></zz-echart>
+        <div class="totals">
+          <span
+            style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"
+            :title="total + '元'"
+          >{{ total }}元</span>
+          <span
+            class="numbers"
+            style="white-space: nowrap;"
+          >总收入</span>
+        </div>
+      </div>
+    </template>
+    <no-permission
+      v-else
+      tipsText="收入方式占比"
+    ></no-permission>
+  </div>
+</template>
+<script>
+import { GradualChange, ringType } from '../indexOptionChart';
+import permissionComponent from '../permissionComponent';
+const colors = [
+  GradualChange('#22D8FF', '#00B2FF'),
+  GradualChange('#F0646C', '#F4994E'),
+  GradualChange('#5EEDCC ', '#24C3F1'),
+  GradualChange('#7178FF', '#D2A4FF'),
+  GradualChange('#884DD2', '#DF63CC')
+];
+export default {
+  mixins: [permissionComponent],
+  data () {
+    return {
+      defaultModel: {
+        permissUrl: '14',
+        titleName: '收费管理'
+      },
+      mixins_query: {
+        communityId: '',
+        date: '',
+        chargeType: ''
+      },
+      date: '',
+      total: 0,
+      clientOptions: ringType(
+        colors,
+        [
+          { value: 0, name: '微信' },
+          { value: 0, name: '支付宝' },
+          { value: 0, name: '现金' },
+          { value: 0, name: '预存' },
+          { value: 0, name: '其他' }
+        ],
+        {},
+        { type: 'number', total: 0 }
+      ),
+      amountType: [
+        {
+          value: 1,
+          name: '物业费'
+        },
+        {
+          value: 2,
+          name: '水费'
+        },
+        {
+          value: 3,
+          name: '电费'
+        },
+        {
+          value: 4,
+          name: '车位费'
+        },
+        {
+          value: 6,
+          name: '卫生费'
+        },
+        {
+          value: 7,
+          name: '其他费用'
+        }
+      ],
+    };
+  },
+  methods: {
+    getData () {
+      this.$http.get('/sc-community-web/statisticIncomeMethod', this.mixins_query).then(({ data, msg, status }) => {
+        debugger
+        if (status == 0 && !!data.datas) {
+          this.clientOptions = ringType(colors, this.eachartObj(data), {}, { type: 'number', total: this.total });
+        }
+      })
+    },
+    changeTime (v) {
+      this.mixins_query.date = v + '-01';
+      this.getData();
+    },
+    eachartObj (data) {
+      this.total = data.total || 0;
+      let typeName = {
+        1: '微信',
+        2: '支付宝',
+        3: '现金',
+        4: '预存',
+        5: '其他'
+      };
+      let newData = [];
+      debugger
+      for (let a in data.datas) {
+        newData.push({
+          value: data.datas[a],
+          name: typeName[a]
+        });
+        this.total = this.total + data.datas[a];
+      }
+      return newData;
+    }
+  },
+  created () {
+    this.mixins_query.date = this.$moment().format('YYYY-MM') + '-01';
+    this.date = this.$moment().format('YYYY-MM');
+    this.getData();
+  }
+};
+</script>
+<style lang="scss" scoped>
+@import '../style.scss';
+.model-title {
+    .model-title-right {
+        .saveColumn-select {
+            &:not(:first-child) {
+                margin-left: rem(10);
+            }
+        }
+    }
+}
+</style>

+ 372 - 280
operationSupport/src/views/newWorkBench/template/leftAssembly.vue

@@ -1,292 +1,384 @@
 <template>
-    <div class="leftAssembly">
-        <el-select v-model="componentsValue" @change="changeSelect" class="saveColumn-select">
-            <el-option v-for="(item, index) in componentsSelect" :key="index" :label="item.lable" :value="item.model_id"></el-option>
-        </el-select>
-        <div class="componentsBlock">
-            <div
-                class="moveBlock"
-                :data-id="item.data_id"
-                v-for="(item, index) in putCompArr"
-                :key="index"
-                draggable
-                @dragstart="dragstart($event, item)"
-                @dragend="dragend($event)"
-                @drag="drag($event)"
-            >
-                <div class="moveBlock_titles">{{ item.title }}</div>
-                <div class="moveBlock_img">
-                    <img :src="item.imgPng" :alt="item.title" />
-                </div>
-                <div class="moveBlock_icon">
-                    <img :src="item.imgIcon" :alt="item.title" />
-                </div>
-            </div>
+  <div class="leftAssembly">
+    <el-select
+      v-model="componentsValue"
+      @change="changeSelect"
+      class="saveColumn-select"
+    >
+      <el-option
+        v-for="(item, index) in componentsSelect"
+        :key="index"
+        :label="item.lable"
+        :value="item.model_id"
+      ></el-option>
+    </el-select>
+    <div class="componentsBlock">
+      <div
+        class="moveBlock"
+        :data-id="item.data_id"
+        v-for="(item, index) in putCompArr"
+        :key="index"
+        draggable
+        @dragstart="dragstart($event, item)"
+        @dragend="dragend($event)"
+        @drag="drag($event)"
+      >
+        <div class="moveBlock_titles">{{ item.title }}</div>
+        <div class="moveBlock_img">
+          <img
+            :src="item.imgPng"
+            :alt="item.title"
+          />
         </div>
+        <div class="moveBlock_icon">
+          <img
+            :src="item.imgIcon"
+            :alt="item.title"
+          />
+        </div>
+      </div>
     </div>
+  </div>
 </template>
 <script>
 export default {
-    data() {
-        return {
-            componentsSelect: [
-                {
-                    model_id: 0,
-                    lable: '全部'
-                },
-                {
-                    model_id: 1,
-                    lable: '房产管理'
-                },
-                {
-                    model_id: 2,
-                    lable: '住户管理'
-                },
-                {
-                    model_id: 3,
-                    lable: '收费管理'
-                },
-                {
-                    model_id: 4,
-                    lable: '设备管理'
-                },
-                {
-                    model_id: 5,
-                    lable: '告警管理'
-                },
-                {
-                    model_id: 6,
-                    lable: '运维工单'
-                },
-                {
-                    model_id: 7,
-                    lable: '设备巡检'
-                },
-                {
-                    model_id: 8,
-                    lable: '安保巡更'
-                },
-                {
-                    model_id: 9,
-                    lable: '客服服务'
-                },
-                {
-                    model_id: 10,
-                    lable: '商业管理'
-                },
-                {
-                    model_id: 11,
-                    lable: '社区运营'
-                },
-                {
-                    model_id: 12,
-                    lable: '绩效管理'
-                },
-                {
-                    model_id: 13,
-                    lable: '流程管理'
-                }
-            ],
-            componentsArrar: [
-                {
-                    data_id: 1,
-                    title: '高德地图',
-                    type: 0,
-                    imgPng: require('@assets/img/formulation/img_ditu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_4x@2x.png')
-                },
-                {
-                    data_id: 2,
-                    type: 9,
-                    title: '投诉建议',
-                    imgPng: require('@assets/img/formulation/img_bingzhuangtu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
-                },
-                {
-                    data_id: 3,
-                    type: 0,
-                    title: '常用功能',
-                    imgPng: require('@assets/img/formulation/img_changyonggongneng@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
-                },
-                {
-                    data_id: 4,
-                    title: '服务满意度趋势',
-                    type: 9,
-                    imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 5,
-                    title: '设备告警趋势',
-                    type: 5,
-                    imgPng: require('@assets/img/formulation/img_zhexiantu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 6,
-                    title: '房屋租售率',
-                    type: 10,
-                    imgPng: require('@assets/img/formulation/img_bing+baifenbi@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
-                },
-                {
-                    data_id: 7,
-                    title: '收款率分析',
-                    type: 3,
-                    imgPng: require('@assets/img/formulation/img_bing+baifenbi@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
-                },
-
-                {
-                    data_id: 8,
-                    title: '住户性别占比',
-                    type: 2,
-                    imgPng: require('@assets/img/formulation/img_bingzhuangtu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
-                },
-                {
-                    data_id: 9,
-                    title: '住户身份占比',
-                    type: 2,
-                    imgPng: require('@assets/img/formulation/img_bingzhuangtu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
-                },
-                {
-                    data_id: 10,
-                    title: '设备设施统计',
-                    type: 4,
-                    imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 11,
-                    title: '业主审批',
-                    type: 2,
-                    imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 12,
-                    title: '待处理投诉',
-                    type: 9,
-                    imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 13,
-                    title: '投诉建议数量趋势',
-                    type: 9,
-                    imgPng: require('@assets/img/formulation/img_zhexiantu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 14,
-                    title: '巡更人员任务执行时长',
-                    type: 8,
-                    imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 15,
-                    title: '社区公告',
-                    type: 9,
-                    imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 16,
-                    title: '运维人员评分',
-                    type: 12,
-                    imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 17,
-                    title: '待收款账单',
-                    type: 3,
-                    imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 18,
-                    title: '合同签约',
-                    type: 10,
-                    imgPng: require('@assets/img/formulation/img_zhexiantu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 19,
-                    title: '待分派工单',
-                    type: 6,
-                    imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 20,
-                    title: '巡检任务类型分布',
-                    type: 7,
-                    imgPng: require('@assets/img/formulation/img_bingzhuangtu@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 21,
-                    title: '设备告警信息',
-                    type: 5,
-                    imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
-                },
-                {
-                    data_id: 22,
-                    title: '社区总体情况统计',
-                    type: 1,
-                    imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
-                },
-                {
-                    data_id: 23,
-                    title: '本月房屋点击排名前十',
-                    type: 1,
-                    imgPng: require('@assets/img/formulation/img_tongji@2x.png'),
-                    imgIcon: require('@assets/img/formulation/tag_4x@2x.png')
-                },
-                
-            ],
-            componentsValue: 0
-        };
-    },
-    computed: {
-        putCompArr() {
-            let newArr = [];
-            if (this.componentsValue == 0) {
-                return this.componentsArrar;
-            } else {
-                this.componentsArrar.map((item) => {
-                    if (this.componentsValue == item.type) {
-                        newArr.push(item);
-                    }
-                });
-            }
-            return newArr;
+  data () {
+    return {
+      componentsSelect: [
+        {
+          model_id: 0,
+          lable: '全部'
+        },
+        {
+          model_id: 1,
+          lable: '房产管理'
+        },
+        {
+          model_id: 2,
+          lable: '住户管理'
+        },
+        {
+          model_id: 3,
+          lable: '收费管理'
+        },
+        {
+          model_id: 4,
+          lable: '设备管理'
+        },
+        {
+          model_id: 5,
+          lable: '告警管理'
+        },
+        {
+          model_id: 6,
+          lable: '运维工单'
+        },
+        {
+          model_id: 7,
+          lable: '设备巡检'
+        },
+        {
+          model_id: 8,
+          lable: '安保巡更'
+        },
+        {
+          model_id: 9,
+          lable: '客服服务'
+        },
+        {
+          model_id: 10,
+          lable: '商业管理'
+        },
+        {
+          model_id: 11,
+          lable: '社区运营'
+        },
+        {
+          model_id: 12,
+          lable: '绩效管理'
+        },
+        {
+          model_id: 13,
+          lable: '流程管理'
         }
+      ],
+      componentsArrar: [
+        {
+          data_id: 1,
+          title: '高德地图',
+          type: 0,
+          imgPng: require('@assets/img/formulation/img_ditu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_4x@2x.png')
+        },
+        {
+          data_id: 2,
+          type: 9,
+          title: '投诉建议',
+          imgPng: require('@assets/img/formulation/img_bingzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 3,
+          type: 0,
+          title: '常用功能',
+          imgPng: require('@assets/img/formulation/img_changyonggongneng@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 4,
+          title: '服务满意度趋势',
+          type: 9,
+          imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 5,
+          title: '设备告警趋势',
+          type: 5,
+          imgPng: require('@assets/img/formulation/img_zhexiantu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 6,
+          title: '房屋租售率',
+          type: 10,
+          imgPng: require('@assets/img/formulation/img_bing+baifenbi@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 7,
+          title: '收款率分析',
+          type: 3,
+          imgPng: require('@assets/img/formulation/img_bing+baifenbi@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+
+        {
+          data_id: 8,
+          title: '住户性别占比',
+          type: 2,
+          imgPng: require('@assets/img/formulation/img_bingzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 9,
+          title: '住户身份占比',
+          type: 2,
+          imgPng: require('@assets/img/formulation/img_bingzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 10,
+          title: '设备设施统计',
+          type: 4,
+          imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 11,
+          title: '业主审批',
+          type: 2,
+          imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 12,
+          title: '待处理投诉',
+          type: 9,
+          imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 13,
+          title: '投诉建议数量趋势',
+          type: 9,
+          imgPng: require('@assets/img/formulation/img_zhexiantu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 14,
+          title: '巡更人员任务执行时长',
+          type: 8,
+          imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 15,
+          title: '社区公告',
+          type: 9,
+          imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 16,
+          title: '运维人员评分',
+          type: 12,
+          imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 17,
+          title: '待收款账单',
+          type: 3,
+          imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 18,
+          title: '合同签约',
+          type: 10,
+          imgPng: require('@assets/img/formulation/img_zhexiantu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 19,
+          title: '待分派工单',
+          type: 6,
+          imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 20,
+          title: '巡检任务类型分布',
+          type: 7,
+          imgPng: require('@assets/img/formulation/img_bingzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 21,
+          title: '设备告警信息',
+          type: 5,
+          imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 22,
+          title: '社区总体情况统计',
+          type: 1,
+          imgPng: require('@assets/img/formulation/img_liebiao@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 23,
+          title: '本月房屋点击排名前十',
+          type: 1,
+          imgPng: require('@assets/img/formulation/img_tongji@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_4x@2x.png')
+        },
+        {
+          data_id: 24,
+          title: '巡更人员任务执行情况',
+          type: 8,
+          imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 25,
+          title: '巡更任务完成率',
+          type: 8,
+          imgPng: require('@assets/img/formulation/img_bing+baifenbi@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 26,
+          title: '巡更任务分布',
+          type: 8,
+          imgPng: require('@assets/img/formulation/img_zhexiantu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 27,
+          title: '运维人员任务执行情况',
+          type: 6,
+          imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 28,
+          title: '运维工单完成率',
+          type: 6,
+          imgPng: require('@assets/img/formulation/img_bing+baifenbi@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 29,
+          title: '运维工单分类',
+          type: 6,
+          imgPng: require('@assets/img/formulation/img_bingzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 30,
+          title: '巡检人员任务执行情况',
+          type: 7,
+          imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 31,
+          title: '巡检人员任务执行情况',
+          type: 7,
+          imgPng: require('@assets/img/formulation/img_bing+baifenbi@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 32,
+          title: '收入方式占比',
+          type: 3,
+          imgPng: require('@assets/img/formulation/img_bing+baifenbi@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_1x@2x.png')
+        },
+        {
+          data_id: 33,
+          title: '实收分析',
+          type: 3,
+          imgPng: require('@assets/img/formulation/img_zhexiantu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+        {
+          data_id: 34,
+          title: '住户年龄分布',
+          type: 2,
+          imgPng: require('@assets/img/formulation/img_zhuzhuangtu@2x.png'),
+          imgIcon: require('@assets/img/formulation/tag_2x@2x.png')
+        },
+
+      ],
+      componentsValue: 0
+    };
+  },
+  computed: {
+    putCompArr () {
+      let newArr = [];
+      if (this.componentsValue == 0) {
+        return this.componentsArrar;
+      } else {
+        this.componentsArrar.map((item) => {
+          if (this.componentsValue == item.type) {
+            newArr.push(item);
+          }
+        });
+      }
+      return newArr;
+    }
+  },
+  watch: {},
+  methods: {
+    dragstart (e, item) {
+      //拖拽开始时将item存入vuex
+      this.$store.commit('setDragItem', item);
     },
-    watch: {},
-    methods: {
-        dragstart(e, item) {
-            //拖拽开始时将item存入vuex
-            this.$store.commit('setDragItem', item);
-        },
-        drag(e) {
-            //拖拽中执行的事件
-            // console.log('drag',e)s
-        },
-        dragend(e) {
-            //拖拽结束执行的事件
-            // console.log('dragend', e);
-        }
+    drag (e) {
+      //拖拽中执行的事件
+      // console.log('drag',e)s
     },
-    destroyed() {},
-    created() {}
+    dragend (e) {
+      //拖拽结束执行的事件
+      // console.log('dragend', e);
+    }
+  },
+  destroyed () { },
+  created () { }
 };
 </script>
 <style lang="scss" scoped>