zhiyuan007 1 year ago
parent
commit
12f4e464d1

+ 33 - 0
src/data/all-form.js

@@ -3325,6 +3325,39 @@ export const creditRepairEdit = {
     ]
 }
 
+export const HousingAndConstructionAreaStatics = {
+    formItemsArr:[
+        {
+            type:'date-picker',
+            modelValue:'START_DATE',
+            label:'开始时间',
+            colClass:'el-col-6 mr12',
+            options:[],
+            elDatePickerAttrs:{
+                'value-format':'YYYY-MM',
+                format:"YYYY-MM",
+                type:"month"
+            }
+        },
+        {
+            type:'date-picker',
+            modelValue:'END_DATE',
+            label:'结束时间',
+            colClass:'el-col-6 mr12',
+            options:[],
+            elDatePickerAttrs:{
+                'value-format':'YYYY-MM',
+                format:"YYYY-MM",
+                type:"month"
+            }
+        },
+        {
+            type:'slot',
+            slotName:'searchBtn'
+        },
+    ]
+}
+
 export const userManageHome = {
     formItemsArr:[
         {

+ 20 - 0
src/data/all-table-header.js

@@ -1048,6 +1048,26 @@ export const matterDetailSettingDialogHeader = [
     }
 ]
 
+export const HousingAndConstructionAreaStaticsHeader = [
+    {
+        prop:"XXLY",
+        label:"事项名称"
+    },
+    {
+        prop:"JCDBCS",
+        label:"核查比对次数"
+    },
+    {
+        prop:"XZCJCS",
+        label:"限制惩戒次数"
+    },
+    {
+        prop:"JZCJDXS",
+        label:"限制惩戒对象数"
+    }
+]
+
+
 export const dataLogHomeHeader = [
     {
         prop:"RKSJ",

+ 204 - 0
src/echarts/option.js

@@ -564,3 +564,207 @@ export function dataApplyGeneralSituationEcharts(ele,lastData) {
     setOptions(ele,option)
 }
 
+export function housingAndConstructionAreaStaticsEcharts(ele,dataTitle,dataLeft_bin,dataMiddle_bin,dataRight_bin) {
+    let  option = {
+        tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+                type: 'shadow'
+            }
+        },
+        legend: {
+            top: '5%',
+            right:'5%',
+            buttom: '5%',
+            data: ['限制惩戒(次数)', '限制惩戒对象(个数)', '比对次数(次数)']
+        },
+        grid: {
+            left: '4%',
+            right: '4%',
+            bottom: '4%',
+            containLabel: true,
+            top: '15%'
+        },
+        toolbox: {
+            show: false,
+            feature: {
+                saveAsImage: {}
+            }
+        },
+        xAxis: {
+            type: 'log',
+            min: 1,
+            axisLabel: {
+                formatter: '{value}'
+            }
+        },
+        yAxis: {
+            axisLabel:{
+                interval: 0,//标签设置为全部显示
+                formatter:function(params){
+                    var newParamsName = "";// 最终拼接成的字符串
+                    var paramsNameNumber = params.length;// 实际标签的字数
+                    var provideNumber = 6;// 每行能显示的字的个数
+                    var rowNumber = Math.ceil(paramsNameNumber / provideNumber);// 换行的话,需要显示几行,向上取整
+                    /**
+                     * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
+                     */
+                    // 条件等同于rowNumber>1
+                    if (paramsNameNumber > provideNumber) {
+                        /** 循环每一行,p表示行 */
+                        for (var p = 0; p < rowNumber; p++) {
+                            var tempStr = "";// 表示每一次截取的字符串
+                            var start = p * provideNumber;// 开始截取的位置
+                            var end = start + provideNumber;// 结束截取的位置
+                            // 此处特殊处理最后一行的索引值
+                            if (p == rowNumber - 1) {
+                                // 最后一次不换行
+                                tempStr = params.substring(start, paramsNameNumber);
+                            } else {
+                                // 每一次拼接字符串并换行
+                                tempStr = params.substring(start, end) + "\n";
+                            }
+                            newParamsName += tempStr;// 最终拼成的字符串
+                        }
+
+                    } else {
+                        // 将旧标签的值赋给新标签
+                        newParamsName = params;
+                    }
+                    //将最终的字符串返回
+                    return newParamsName
+
+                }
+            },
+            data: dataTitle
+        },
+        series: [
+            {
+                name: '限制惩戒对象(个数)',
+                type: 'bar',
+                label: {
+                    title: {
+                        text: '案例数量查询统计',
+                    },
+                    normal: {
+                        show: true,
+                        textBorderColor: '#333',
+                        textBorderWidth: 2
+                    }
+                },
+                data: dataMiddle_bin
+            },
+            {
+                name: '限制惩戒(次数)',
+                type: 'bar',
+                data: dataRight_bin,
+                label: {
+                    title: {
+                        text: '案例数量查询统计',
+                    },
+                    normal: {
+                        show: true,
+                        textBorderColor: '#333',
+                        textBorderWidth: 2
+                    }
+                },
+
+            },
+            {
+                name: '比对次数(次数)',
+                type: 'bar',
+                label: {
+                    title: {
+                        text: '案例数量查询统计',
+                    },
+                    normal: {
+                        show: true,
+                        textBorderColor: '#333',
+                        textBorderWidth: 2
+                    }
+                },
+                data: dataLeft_bin
+            }
+
+        ],
+
+    };
+    setOptions(ele,option)
+}
+
+
+export function compareSearchStaticsMonthlyEcharts(ele,dataLeft_bin,dataRight_bin) {
+    debugger
+    let  option = {
+
+        tooltip: {
+            trigger: 'axis',
+            axisPointer: { // 坐标轴指示器,坐标轴触发有效
+                type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
+            }
+        },
+        legend: [
+            {
+                data: ['直接访问']
+            },
+            {
+                top: '1%',
+                left: '25%',
+                buttom: '10%',
+                data: ['委行政服务中心', '市城管执法局', '市公积金中心', '市房管局', '市燃气处', ],
+            }
+        ],
+        grid: {
+            left: '3%',
+            right: '4%',
+            bottom: '4%',
+            containLabel: true,
+            top: '12%'
+        },
+        toolbox: {
+        },
+        calculable: true,
+        xAxis: [
+            {
+                type: 'category',
+                data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
+            }
+        ],
+        yAxis: [
+            {
+                type: 'value'
+            }
+        ],
+        series: [
+            {
+                name: '委行政服务中心',
+                type: 'bar',
+                data: [dataRight_bin.一月, dataRight_bin.二月, dataRight_bin.三月, dataRight_bin.四月, dataRight_bin.五月, dataRight_bin.六月,
+                    dataRight_bin.七月, dataRight_bin.八月, dataRight_bin.九月, dataRight_bin.十月, dataRight_bin.十一月, dataRight_bin.十二月],
+            },
+            {
+                name: '市城管执法局',
+                type: 'bar',
+                data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+            },
+            {
+                name: '市公积金中心',
+                type: 'bar',
+                data: [dataLeft_bin.一月, dataLeft_bin.二月, dataLeft_bin.三月, dataLeft_bin.四月, dataLeft_bin.五月, dataLeft_bin.六月,
+                    dataLeft_bin.七月, dataLeft_bin.八月, dataLeft_bin.九月, dataLeft_bin.十月, dataLeft_bin.十一月, dataLeft_bin.十二月],
+            },
+            {
+                name: '市房管局',
+                type: 'bar',
+                data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+            },
+            {
+                name: '市燃气处',
+                type: 'bar',
+                data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+            }
+        ]
+    };
+    setOptions(ele,option)
+}
+

+ 1 - 1
src/pinia/useStore.js

@@ -87,7 +87,7 @@ export const useRootStore = defineStore('root',{
                             "name":"信用修复"
                         },
                         {
-                            "path":"/19",
+                            "path":"combined-rewards-and-punishments",
                             "name":"联合奖惩"
                         },
                         {

+ 7 - 0
src/router/index.js

@@ -20,6 +20,8 @@ import combinedRewardAndPunishmentsMeasureManage
 import DataImputationPush from "@/views/main/c-views/credit-data/data-imputation-push/DataImputationPush.vue";
 import ApplyInformation from "@/views/main/c-views/credit-data/apply-information/ApplyInformation.vue";
 import CreditRepair from "@/views/main/c-views/credit-data/credit-repair/CreditRepair.vue";
+import CombinedRewardsAndPunishments
+  from "@/views/main/c-views/credit-data/combined-rewards-and-punishments/CombinedRewardsAndPunishments.vue";
 import DataLog from "@/views/main/c-views/credit-data/data-log/DataLog.vue";
 import UserManage from "@/views/main/c-views/system-manage/user-manage/UserManage.vue";
 const router = createRouter({
@@ -105,6 +107,11 @@ const router = createRouter({
           name: 'credit-repair',
           component:CreditRepair
         },
+        {
+          path: '/main/combined-rewards-and-punishments',
+          name: 'combined-rewards-and-punishments',
+          component:CombinedRewardsAndPunishments
+        },
         {
           path: '/main/data-log',
           name: 'data-log',

+ 24 - 0
src/service/credit-data/combined-rewards-and-punishments/combined-rewards-and-punishments.js

@@ -0,0 +1,24 @@
+//应用情况 事项应用情况
+import {requestInstance} from "@/service";
+
+
+//联合奖惩 住建领域联合惩戒实施情况统计情况
+export function proSelectXyxxJctj(params){
+    return requestInstance({
+        url:'/XyxxApi/proSelectXyxxJctj',
+        data:{
+            ...params
+        }
+    })
+}
+
+
+//联合奖惩 对比查询统计(月)情况
+export function proSelectJctd(params){
+    return requestInstance({
+        url:'/XyxxApi/proSelectJctd',
+        data:{
+            ...params
+        }
+    })
+}

+ 36 - 0
src/views/main/c-views/credit-data/combined-rewards-and-punishments/CombinedRewardsAndPunishments.vue

@@ -0,0 +1,36 @@
+<template>
+  <el-tabs type="border-card" class="demo-tabs" v-model="activeName"  @tab-click="handleClick" >
+    <el-tab-pane label="住建领域联合惩戒实施情况" name="first">
+      <housing-and-construction-area-statics v-if="activeName=='first'" />
+    </el-tab-pane>
+    <el-tab-pane label="对比查询统计(月)" name="second">
+      <compare-search-statics-monthly v-if="activeName=='second'" />
+    </el-tab-pane>
+  </el-tabs>
+</template>
+
+<script>
+import HousingAndConstructionAreaStatics
+  from "@/views/main/c-views/credit-data/combined-rewards-and-punishments/HousingAndConstructionAreaStatics.vue";
+import CompareSearchStaticsMonthly
+  from "@/views/main/c-views/credit-data/combined-rewards-and-punishments/CompareSearchStaticsMonthly.vue";
+import {ref} from "vue";
+export default {
+  name: "CombinedRewardsAndPunishments",
+  components: {CompareSearchStaticsMonthly, HousingAndConstructionAreaStatics},
+  setup(){
+    const activeName = ref('first')
+    function handleClick(tab,event){
+
+    }
+    return{
+      activeName,
+      handleClick
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 102 - 0
src/views/main/c-views/credit-data/combined-rewards-and-punishments/CompareSearchStaticsMonthly.vue

@@ -0,0 +1,102 @@
+<template>
+  <div class="department-data">
+    <diy-el-form ref="formRef"  v-bind="{'span-attrs':{span:4}}"   v-model:model-form="forms" :forms="formConfig">
+      <template #searchBtn>
+        <el-button  type="primary" :icon="Search" @click="getChartData()">查询</el-button>
+      </template>
+    </diy-el-form>
+    <div class="department-content">
+      <div class="echarts" ref="monthEcharts">
+
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import DiyElForm from "@/components/common/DiyElForm.vue";
+import {Close, Delete, Document, Search, SuccessFilled} from "@element-plus/icons-vue";
+import {nextTick, onMounted, ref} from "vue";
+import {dataPushSituationMonthlySituation} from "@/data/all-form";
+import {compareSearchStaticsMonthlyEcharts, dataPushSituationMonthlyEcharts} from "@/echarts/option";
+import {getFullYear} from "@/units/use-method/veritification-tools";
+import {proSelectJctd} from "@/service/credit-data/combined-rewards-and-punishments/combined-rewards-and-punishments";
+
+export default {
+  name: "CompareSearchStaticsMonthly",
+  components:{DiyElForm},
+  computed: {
+    Delete() {
+      return Delete
+    },
+    Search() {
+      return Search
+    },
+    Document() {
+      return Document
+    },
+    SuccessFilled() {
+      return SuccessFilled
+    },
+    Close() {
+      return Close
+    }
+  },
+  setup(){
+    const forms = ref({});
+    const formRef = ref(null);
+    const formConfig = ref({...dataPushSituationMonthlySituation});
+    const monthEcharts = ref(null);
+    function getChartData(){
+      debugger
+      proSelectJctd({
+        YEAR:forms.value.YEAR,
+        pageSize:10000,
+        pageIndex:1
+      }).then(res =>{
+        debugger
+        getEcharts(res);
+      })
+    }
+    function getEcharts(data){
+      let date = data.msg[0]
+      let dataLeft_bin = [];
+      let dataRight_bin =  [];
+      if(date.Rows != null && date.Rows != "null"){
+        for (let i = 0; i < date.Rows.length; i++) {
+          if (date.Rows[i].XXLY == "公积金") {
+            dataLeft_bin = date.Rows[i];
+          }
+          if (date.Rows[i].XXLY == "委行政服务中心") {
+            dataRight_bin = date.Rows[i];
+          }
+        }
+      }
+      nextTick(() => {
+        debugger
+        compareSearchStaticsMonthlyEcharts(monthEcharts.value,dataLeft_bin,dataRight_bin);
+      })
+    }
+    onMounted(()=>{
+      forms.value.YEAR = getFullYear("year");
+      getChartData()
+    })
+    return {
+      forms,
+      formRef,
+      formConfig,
+      getChartData,
+      monthEcharts
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.department-content{
+  height: 600px;
+  .echarts{
+    height: 580px;
+  }
+}
+</style>

+ 199 - 0
src/views/main/c-views/credit-data/combined-rewards-and-punishments/HousingAndConstructionAreaStatics.vue

@@ -0,0 +1,199 @@
+<template>
+  <div class="department-data">
+    <diy-el-form ref="formRef"  v-bind="{'span-attrs':{span:4}}"   v-model:model-form="forms" :forms="formConfig">
+      <template #searchBtn>
+        <el-button  type="primary" :icon="Search" @click="getTableData()">查询</el-button>
+      </template>
+    </diy-el-form>
+    <div class="department-content">
+      <div class="left-echarts" ref="leftEcharts">
+
+      </div>
+      <div class="right-table">
+        <my-table border
+                  :has-operation="false"
+                  :table-data="tableData"
+                  :headers="HousingAndConstructionAreaStaticsHeader">
+        </my-table>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import MyTable from "@/components/common/MyTable.vue";
+import DiyElForm from "@/components/common/DiyElForm.vue";
+import {Close, Delete, Document, Search, SuccessFilled} from "@element-plus/icons-vue";
+import {nextTick, onMounted, ref} from "vue";
+import {HousingAndConstructionAreaStatics} from "@/data/all-form";
+import {departmentDataImputationEcharts, housingAndConstructionAreaStaticsEcharts} from "@/echarts/option";
+import {getFullYear} from "@/units/use-method/veritification-tools";
+import {HousingAndConstructionAreaStaticsHeader} from "@/data/all-table-header";
+import {
+  proSelectXyxxJctj
+} from "@/service/credit-data/combined-rewards-and-punishments/combined-rewards-and-punishments";
+
+export default {
+  name: "HousingAndConstructionAreaStatics",
+  components:{MyTable, DiyElForm},
+  computed: {
+    Delete() {
+      return Delete
+    },
+    Search() {
+      return Search
+    },
+    Document() {
+      return Document
+    },
+    SuccessFilled() {
+      return SuccessFilled
+    },
+    Close() {
+      return Close
+    }
+  },
+  setup(){
+    const forms = ref({});
+    const formRef = ref(null);
+    const formConfig = ref({...HousingAndConstructionAreaStatics});
+    const tableData = ref([]);
+    const leftEcharts = ref(null);
+    function getTableData(){
+      let startTime =  forms.value.START_DATE + "-01";
+      let endTime =  forms.value.END_DATE;
+      if(endTime == "2"){
+        endTime = forms.value.END_DATE + "-28"
+      }else{
+        endTime = forms.value.END_DATE + "-30"
+      }
+      proSelectXyxxJctj({
+        start_time:startTime,
+        //startC:"2019-01",
+        end_time:endTime,
+        pageSize:10000,
+        pageIndex:1
+      }).then(res =>{
+        getEchartsAndTable(res);
+      })
+    }
+    function getEchartsAndTable(data){
+      tableData.value = [];
+      let date = data.msg[0]
+      //数据内容
+      let dataTitle = [];
+      let dataTitleT = [];
+      //数据内容
+      let dataLeft_bin = [];
+      let dataRight_bin = [];
+      let dataMiddle_bin = [];
+      if(date.Rows != null && date.Rows != "null"){
+        let totalLeft=0;
+        let totalRight = 0;
+        let totalMiddle = 0;
+        for (let i = 0; i < date.Rows.length; i++) {
+          date.Rows[i].比较次数 = date.Rows[i].比较次数 * 1;
+          date.Rows[i].限制惩戒 = date.Rows[i].限制惩戒 * 1;
+          totalLeft += date.Rows[i].比较次数 * 1;
+          totalRight += date.Rows[i].限制惩戒 * 1;
+          totalMiddle += date.Rows[i].单位数 * 1;
+          if (date.Rows[i].限制惩戒 == "") {
+            date.Rows[i].限制惩戒 = 0;
+          }
+          if (date.Rows[i].单位数 == "") {
+            date.Rows[i].单位数 = 0;
+          }
+        }
+        let sortTwoCate = function (a, b) {
+          let srcDataNew = ["对建筑工程施工的许可", "对建筑施工企业安全生产的许可", "建设工程企业资质许可", "建设工程注册从业人员资格许可", "投标企业基本情况表", "联动奖惩黑名单查询"];
+          if (srcDataNew.indexOf(a.SXMC) === srcDataNew.indexOf(b.SXMC)) {
+            return 0;
+          } else {
+            if (srcDataNew.indexOf(a.SXMC) > srcDataNew.indexOf(b.SXMC)) {
+              return 1;
+            } else {
+              return -1;
+            }
+          }
+
+        }
+        date.Rows.sort(sortTwoCate);
+
+        for (let i = 0; i < date.Rows.length; i++) {
+          if (date.Rows[i].SXMC == "联动奖惩黑名单查询") {
+            dataTitle.push("公积金贷款");
+            tableData.value
+            let obj = {
+              XXLY:"公积金贷款",
+              JCDBCS:date.Rows[i].比较次数.toLocaleString(),
+              XZCJCS:date.Rows[i].限制惩戒.toLocaleString(),
+              JZCJDXS:date.Rows[i].单位数.toLocaleString()
+            }
+            tableData.value.push(obj)
+            dataLeft_bin.push(date.Rows[i].比较次数);
+            dataRight_bin.push(date.Rows[i].限制惩戒);
+            dataMiddle_bin.push(date.Rows[i].单位数);
+          } else {
+            let obj = {
+              XXLY:date.Rows[i].SXMC,
+              JCDBCS:date.Rows[i].比较次数.toLocaleString(),
+              XZCJCS:date.Rows[i].限制惩戒.toLocaleString(),
+              JZCJDXS:date.Rows[i].单位数.toLocaleString()
+            }
+            tableData.value.push(obj)
+            dataTitle.push(date.Rows[i].SXMC);
+            dataLeft_bin.push(date.Rows[i].比较次数);
+            dataRight_bin.push(date.Rows[i].限制惩戒);
+            dataMiddle_bin.push(date.Rows[i].单位数);
+          }
+        }
+      }else{
+        dataTitle = ['投标企业基本情况表', '建设工程企业资质许可', '建设工程注册从业人员资格许可', '对建筑工程施工的许可', '对建筑施工企业安全生产的许可', '公积金贷款', '总计']
+        dataLeft_bin = [0,0,0,0,0,0,0];
+        dataRight_bin = [0, 0, 0, 0, 0, 0, 0];
+        dataMiddle_bin = [0, 0, 0, 0, 0, 0, 0];
+      }
+      debugger
+      nextTick(() => {
+        debugger
+        housingAndConstructionAreaStaticsEcharts(leftEcharts.value,dataTitle,dataLeft_bin,dataMiddle_bin,dataRight_bin);
+      })
+    }
+    onMounted(()=>{
+      forms.value.START_DATE = getFullYear("year") + "-01";
+      forms.value.END_DATE = getFullYear("month");
+      getTableData()
+    })
+    return {
+      forms,
+      formRef,
+      formConfig,
+      getTableData,
+      tableData,
+      HousingAndConstructionAreaStaticsHeader,
+      leftEcharts
+    }
+  }
+}
+</script>
+
+<style scoped>
+.department-data{
+  padding: 20px;
+}
+.department-content{
+  display: flex;
+  justify-content: space-between;
+}
+.left-echarts{
+  height: 600px;
+  width: 55%;
+  padding-right: 50px;
+  margin-right: 50px;
+  border-right: 1px #DCDCDC solid;
+}
+.right-table{
+  height: 100%;
+  width: 40%;
+}
+</style>