Jelajahi Sumber

添加新组件

Shannon_mu 2 tahun lalu
induk
melakukan
ca49f19772

+ 124 - 0
operationSupport/src/views/newWorkBench/components/billToBeCollected.vue

@@ -0,0 +1,124 @@
+
+<template>
+    <div class="modelBlock">
+        <template v-if="permissionFiltering">
+            <div class="model-title">
+                <div class="model-title-text">待收款账单</div>
+                <div class="buttons" @click="$router.push({ path: '/payService/propertyFee/index' })">
+                    <span class="text">查看更多</span> <span class="triangle"></span>
+                </div>
+            </div>
+            <div class="model-content">
+                <div class="listInformation" v-for="(item, index) in datas" :key="index">
+                    <div class="flex">
+                        <img class="listInformation_img" src="@assets/img/homePage/icon_chuli@2x.png" />
+                        <div class="listInformation_text">
+                            <div>房产地址:{{ item.assets }}</div>
+                            <div>费用名称:{{ item.chargeName }}</div>
+                        </div>
+                    </div>
+                    <div class="listInformation_operation">
+                        应收金额: {{ item.receivableAmount }}
+                        <el-tooltip effect="light" placement="bottom" content="收款">
+                            <span class="zoniot_font zoniot-icon-shoukuan" @click="collections('single', item)"></span>
+                        </el-tooltip>
+                    </div>
+                </div>
+                <div v-if="datas.length <= 0" class="noData">暂无数据</div>
+            </div>
+        </template>
+        <no-permission v-else tipsText="待收款账单"></no-permission>
+    </div>
+</template>
+<script>
+import permissionComponent from './permissionComponent';
+export default {
+    mixins: [permissionComponent],
+    data() {
+        return {
+            defaultModel: {
+                permissUrl: '14',
+                titleName: '收费管理'
+            },
+            mixins_query: {
+                pageNum: 1,
+                pageSize: 3,
+                chargeStatus: 1,
+                chargeType: '1,2,3,4,5,6,7',
+                communityId: ''
+            },
+            datas: []
+        };
+    },
+    created() {
+        this.getData();
+    },
+    methods: {
+        getData() {
+            this.$http
+                .post('/sc-charge/charge/bill/page', this.mixins_query)
+                .then(({ status, data, msg }) => {
+                    if (status == 0) {
+                        this.datas = data.list;
+                    }
+                })
+                .catch((err) => {});
+        },
+        collections(todo, row) {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/payService/leaseBill/stepPage/single.vue',
+                    width: '614px',
+                    height: '614px',
+                    props: {
+                        data: row,
+                        tabList: todo,
+                        communityId: this.mixins_query.communityId,
+                        callback: resolve
+                    },
+                    title: '收款'
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        }
+    }
+};
+</script>
+<style scoped lang="scss">
+@import './style.scss';
+.noData {
+    text-align: center;
+    line-height: rem(100);
+}
+.modelBlock {
+    .model-content {
+        display: block;
+        .flex {
+            display: flex;
+        }
+        .listInformation {
+            display: flex;
+            justify-content: space-between;
+            margin-top: rem(10);
+            .listInformation_img {
+                width: rem(46);
+                height: rem(46);
+                margin-right: rem(20);
+            }
+            .listInformation_text {
+                line-height: rem(23);
+                opacity: 0.5;
+            }
+            .listInformation_operation {
+                display: flex;
+                align-items: center;
+                opacity: 0.5;
+                .zoniot_font {
+                    margin-left: rem(20);
+                }
+            }
+        }
+    }
+}
+</style>

+ 112 - 0
operationSupport/src/views/newWorkBench/components/contractAward.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"
+                        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 { discountedWave } from './indexOptionChart';
+import permissionComponent from './permissionComponent';
+let dataArr = [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 {
+    props: ['dataObj'],
+    mixins: [permissionComponent],
+    data() {
+        return {
+            defaultModel: {
+                permissUrl: 'propertyManagement/index',
+                titleName: '投诉建议'
+            },
+            mixins_query: {
+                communityId: '',
+                date: ''
+            },
+            date: '',
+            clientOptions: discountedWave('(次)', dataDay, dataArr)
+        };
+    },
+    created() {
+        this.mixins_query.date = this.$moment().format('YYYY');
+        this.date = this.$moment().format('YYYY');
+        this.getData();
+    },
+    methods: {
+        getData() {
+            this.$http
+                .get('/sc-community/statisticContractSigning', this.mixins_query)
+                .then(({ status, data, msg }) => {
+                    if (status == 0) {
+                        let dateTime = [],
+                            valueArr = [];
+                        data.map((item) => {
+                            dateTime.push(item.date);
+                            valueArr.push(item.data);
+                        });
+                        this.clientOptions = discountedWave('(次)', dateTime, valueArr);
+                    }
+                })
+                .catch((err) => {});
+        },
+        changeTime(v) {
+            this.mixins_query.date = v;
+            this.getData();
+        }
+    }
+};
+</script>
+<style scoped lang="scss">
+@import './style.scss';
+</style>

+ 147 - 0
operationSupport/src/views/newWorkBench/components/dispatchWorkOrder.vue

@@ -0,0 +1,147 @@
+
+<template>
+    <div class="modelBlock">
+        <template v-if="permissionFiltering">
+            <div class="model-title">
+                <div class="model-title-text">待分派工单</div>
+                <div class="buttons" @click="$router.push({ path: '/workOrders/index' })">
+                    <span class="text">查看更多</span> <span class="triangle"></span>
+                </div>
+            </div>
+            <div class="model-content">
+                <div class="listInformation" v-for="(item, index) in datas" :key="index">
+                    <div class="listInformation_text">
+                        <div>住户姓名:{{ item.repairName }}</div>
+                        <div>房产地址:{{ item.address }}</div>
+                    </div>
+                    <div class="listInformation_text">
+                        <div>报修内容:{{ item.repairContent }}</div>
+                        <div>投诉时间:{{ item.createDate }}</div>
+                    </div>
+                    <div class="listInformation_operation">
+                        <el-tooltip effect="light" placement="bottom" content="派单">
+                            <i v-if="item.orderStatus !== 4" class="zoniot_font zoniot-icon-paidan" @click="dispatchTask(item)"></i>
+                            <i v-else class="zoniot_font zoniot-icon-paidan ashText"></i>
+                        </el-tooltip>
+                    </div>
+                </div>
+                <div v-if="datas.length <= 0" class="noData">暂无数据</div>
+            </div>
+        </template>
+        <no-permission v-else tipsText="待分派工单"></no-permission>
+    </div>
+</template>
+<script>
+import permissionComponent from './permissionComponent';
+export default {
+    mixins: [permissionComponent],
+    data() {
+        return {
+            defaultModel: {
+                permissUrl: '17',
+                titleName: '运维工单'
+            },
+            mixins_query: {
+                pageNum: 1,
+                pageSize: 3,
+                communityId: ''
+            },
+            datas: [],
+            findUser: []
+        };
+    },
+    created() {
+        this.getData();
+        this.getUserList();
+    },
+    methods: {
+        getData() {
+            this.$http
+                .get('/sc-community/workOrder/pageByHandle', this.mixins_query)
+                .then(({ status, data, msg }) => {
+                    if (status == 0) {
+                        this.datas = data.list;
+                    }
+                })
+                .catch((err) => {});
+        },
+        toPage(row) {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/propertyManagement/stepPage/indexEdit.vue',
+                    width: '700px',
+                    height: '650px',
+                    props: {
+                        row,
+                        callback: resolve
+                    },
+                    showResetButton: row.handleStatus == 1 || row.handleStatus == 3 ? true : false,
+                    showConfirmButton: row.handleStatus == 1 || row.handleStatus == 3 ? false : true,
+                    showCancelButton: row.handleStatus == 1 || row.handleStatus == 3 ? true : false,
+                    confirmButtonText: '提交',
+                    title: '投诉建议'
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        },
+        getUserList() {
+            this.$http.get('/sc-user-center/user/findUserList').then(({ data, status, msg }) => {
+                this.findUser = data;
+            });
+        },
+        dispatchTask(data = {}) {
+            new Promise((resolve) => {
+                let title = '派单';
+                this.$store.dispatch('addPopup', {
+                    url: '/workOrders/popups/dispatchTsk.vue',
+                    width: '500px',
+                    height: '300px',
+                    props: {
+                        data,
+                        arrData: this.findUser,
+                        callback: resolve
+                    },
+                    title: title
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        }
+    }
+};
+</script>
+<style scoped lang="scss">
+@import './style.scss';
+.noData {
+    text-align: center;
+    line-height: rem(100);
+}
+.modelBlock {
+    .model-content {
+        display: block;
+        .flex {
+            display: flex;
+        }
+        .listInformation {
+            display: flex;
+            justify-content: space-between;
+            margin-top: rem(10);
+            .listInformation_img {
+                width: rem(46);
+                height: rem(46);
+                margin-right: rem(20);
+            }
+            .listInformation_text {
+                line-height: rem(23);
+                opacity: 0.5;
+            }
+            .listInformation_operation {
+                display: flex;
+                align-items: center;
+                opacity: 0.5;
+            }
+        }
+    }
+}
+</style>

+ 23 - 5
operationSupport/src/views/newWorkBench/components/index.js

@@ -11,8 +11,15 @@
 // ownerApproval 业主审批
 // pendingComplaints 待处理投诉
 // complaintsAndSuggestions投诉建议数量趋势
-// patrolDuration 巡更人员任务执行时长
-// communityAnnouncement
+
+// patrolDuration 巡更人员任务执行时长 数据格式待调试
+// communityAnnouncement 社区公告 OK
+// personnelScore 运维人员评分 OK
+// billToBeCollected  待收款账单 OK
+// contractAward 合同签约   接口不通
+// dispatchWorkOrder 待分派工单 OK
+
+
 
 import maps from '@views/newWorkBench/components/map.vue';
 import complaintsSuggestions from '@views/newWorkBench/components/complaintsSuggestions.vue';
@@ -29,8 +36,11 @@ import pendingComplaints from '@views/newWorkBench/components/pendingComplaints.
 import complaintsAndSuggestions from '@views/newWorkBench/components/complaintsAndSuggestions.vue';
 
 import patrolDuration from '@views/newWorkBench/components/patrolDuration.vue';
-
 import communityAnnouncement from '@views/newWorkBench/components/communityAnnouncement.vue';
+import personnelScore from '@views/newWorkBench/components/personnelScore.vue';
+import billToBeCollected from '@views/newWorkBench/components/billToBeCollected.vue';
+import contractAward from '@views/newWorkBench/components/contractAward.vue';
+import dispatchWorkOrder from '@views/newWorkBench/components/dispatchWorkOrder.vue';
 
 
 export default {
@@ -51,7 +61,11 @@ export default {
     complaintsAndSuggestions,
 
     patrolDuration,
-    communityAnnouncement
+    communityAnnouncement,
+    personnelScore,
+    billToBeCollected,
+    contractAward,
+    dispatchWorkOrder
   },
   data() {
     return {
@@ -71,7 +85,11 @@ export default {
         12: "pendingComplaints",
         13: "complaintsAndSuggestions",
         14: 'patrolDuration',
-        15: 'communityAnnouncement'
+        15: 'communityAnnouncement',
+        16: "personnelScore",
+        17: 'billToBeCollected',
+        18: 'contractAward',
+        19: 'dispatchWorkOrder'
       }
     }
   },

+ 157 - 2
operationSupport/src/views/newWorkBench/components/indexOptionChart.js

@@ -46,12 +46,15 @@ export const getItemStyle = (c1, c2) => {
   };
 }
 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 = [],
@@ -275,7 +278,7 @@ export const discountedWave = (
 };
 
 
-//柱状  
+//柱状日期 
 export const columnOptionsChart = (
   name = "",
   xAxis = [],
@@ -304,7 +307,6 @@ export const columnOptionsChart = (
         barGap: '100%'
       })
     })
-
     return seriesData
   }
   let option = {
@@ -431,4 +433,157 @@ export const columnOptionsChart = (
     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]),
+          }
+        },
+        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
+        },
+        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;
 }

+ 100 - 0
operationSupport/src/views/newWorkBench/components/personnelScore.vue

@@ -0,0 +1,100 @@
+<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="yyyyMM"
+                        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 { columnOptionsChartName } from './indexOptionChart';
+import permissionComponent from './permissionComponent';
+export default {
+    mixins: [permissionComponent],
+    data() {
+        return {
+            defaultModel: {
+                permissUrl: '23',
+                titleName: '绩效管理'
+            },
+            mixins_query: {
+                communityId: '',
+                date: ''
+            },
+            date: '',
+            clientOptions: columnOptionsChartName(
+                '(分)',
+                ['name1', 'name2', 'name3'],
+                [
+                    {
+                        name: 'name1',
+                        data: 0
+                    },
+                    {
+                        name: 'name2',
+                        data: 0
+                    },
+                    {
+                        name: 'name3',
+                        data: 0
+                    }
+                ],
+                [],
+                10
+            )
+        };
+    },
+    methods: {
+        getData() {
+            this.$http.get('/sc-community/statisticWorkOrderEvaluate', this.mixins_query).then(({ data, msg, status }) => {
+                if (status == 0 && !!data) {
+                    let name = [];
+                    data.map((item) => {
+                        name.push(item.date);
+                        item.data = item.evaluation;
+                    });
+                    this.clientOptions = columnOptionsChartName('(分)', name, data, [], 10);
+                }
+            });
+        },
+        changeTime(v) {
+            this.mixins_query.date = v + '01';
+            this.getData();
+        }
+    },
+    created() {
+        this.date = this.$moment().format('YYYYMM') + '01';
+        this.mixins_query.date = this.$moment().format('YYYYMM') + '01';
+        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>

+ 28 - 0
operationSupport/src/views/newWorkBench/template/leftAssembly.vue

@@ -193,6 +193,34 @@ export default {
                     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')
                 }
             ],
             componentsValue: 0

+ 8 - 6
operationSupport/src/views/newWorkBench/template/styleFour.vue

@@ -63,12 +63,14 @@ export default {
         };
     },
     created() {
-        this.pageLoction =
-            typeof this.$parent.oldValue.positionInfo == 'object'
-                ? this.$parent.oldValue.positionInfo
-                : JSON.parse(this.$parent.oldValue.positionInfo).model == 4
-                ? JSON.parse(this.$parent.oldValue.positionInfo).pageLoction
-                : {};
+        if (!!this.$parent.oldValue.positionInfo) {
+            this.pageLoction =
+                typeof this.$parent.oldValue.positionInfo == 'object'
+                    ? this.$parent.oldValue.positionInfo
+                    : JSON.parse(this.$parent.oldValue.positionInfo).model == 4
+                    ? JSON.parse(this.$parent.oldValue.positionInfo).pageLoction
+                    : {};
+        }
     },
     mounted() {},
     computed: {},

+ 8 - 6
operationSupport/src/views/newWorkBench/template/styleThree.vue

@@ -56,12 +56,14 @@ export default {
         };
     },
     created() {
-        this.pageLoction =
-            typeof this.$parent.oldValue.positionInfo == 'object'
-                ? this.$parent.oldValue.positionInfo
-                : JSON.parse(this.$parent.oldValue.positionInfo).model == 3
-                ? JSON.parse(this.$parent.oldValue.positionInfo).pageLoction
-                : {};
+        if (!!this.$parent.oldValue.positionInfo) {
+            this.pageLoction =
+                typeof this.$parent.oldValue.positionInfo == 'object'
+                    ? this.$parent.oldValue.positionInfo
+                    : JSON.parse(this.$parent.oldValue.positionInfo).model == 3
+                    ? JSON.parse(this.$parent.oldValue.positionInfo).pageLoction
+                    : {};
+        }
     },
     mounted() {},
     computed: {},