Pārlūkot izejas kodu

更新统计页面

306132416@qq.com 4 gadi atpakaļ
vecāks
revīzija
fe3b5fafdd

+ 2 - 1
code/src/router/index.js

@@ -33,7 +33,8 @@ const routes = [
   {
     path: '/consult',
     name: 'consult',
-    component: () => import(/* webpackChunkName: "about" */ '../views/consult/consult.vue')
+    component: () => import(/* webpackChunkName: "about" */ '../views/consult/consult.vue'),
+    meta: {title: "诉求统计"},
   },
   {
     path: '/park',

+ 3 - 8
code/src/views/company/detail.vue

@@ -8,14 +8,9 @@
                 {{ info.name || "-" }}
             </div>
         </div>
+
         <div class="enterprise-item-box">
-            <div
-                    v-for="(item, idx) in titleList"
-                    :key="idx"
-                    :class="{ active: active === idx }"
-                    class="enterprise-item-name"
-                    @click="change(idx)"
-            >
+            <div v-for="(item, idx) in titleList" :key="idx" :class="{ active: active === idx }" class="enterprise-item-name" @click="change(idx)">
                 {{ item || "-" }}
             </div>
         </div>
@@ -295,7 +290,7 @@
     }
     .img {
         width: 90px;
-        /*height: 100px;*/
+        height: 100px;
     }
     .img img {
         width: 100%;

+ 420 - 2
code/src/views/consult/consult.vue

@@ -1,5 +1,423 @@
 <template>
-  <div class="about">
-    <h1>This is consult page</h1>
+  <div class="consult">
+
+    <div class="enterprise-item-box">
+      <div v-for="(item, idx) in titleList" :key="idx" :class="{ active: activeTop === idx }" class="enterprise-item-name" @click="change(idx,'top')">
+        {{ item}}
+      </div>
+    </div>
+
+    <div class="top-chart" v-if="activeTop === 0">
+      <div class="chart-box" >
+        <div class="chart-title">最新诉求数据排行月报</div>
+        <annular :list="annularList"></annular>
+      </div>
+    </div>
+
+    <div class="baseInfo" v-else-if="activeTop === 1">
+       <div class="data-title-box">
+           <div class="title-line"></div>
+           <div class="title-font">
+              <div style="text-align: left">政府部门</div>
+              <div style="display: flex">
+                <div style="margin-right: 25px">总量:{{dataInfo.total}}条</div>
+                <div>已回复量:{{dataInfo.reply}}条</div>
+              </div>
+           </div>
+       </div>
+       <div class="data-place-box">
+          <div class="place-box" v-for="(item,index) in dataPlaceList" :key="index">
+              <div class="place-title">{{item.name}}</div>
+              <div class="margin-bottom-10">总受理量:{{item.total}}条</div>
+              <div>总回复量:{{item.reply}}条</div>
+          </div>
+       </div>
+    </div>
+
+
+    <div class="enterprise-item-box" v-show="activeTop!== 1">
+      <div v-for="(item, idx) in footerList" :key="idx" :class="{ active: activeFooter === idx }" class="enterprise-item-name" @click="change(idx,'footer')">
+        {{ item}}
+      </div>
+    </div>
+
+    <div class="baseInfo" v-if="activeFooter === 0 && activeTop!== 1">
+       <div class="level-title">部门排行</div>
+       <div class="level-box">
+          <div class="level-content" v-for="(item,index) in replyTopList" :key="index" :class="{isBorder: index === replyTopList.length -1}">
+              <div :class="{ isTop: index < 3 }" class="index-class">{{index + 1}}</div>
+              <div>{{item.name}}</div>
+              <div>{{item.rate}}</div>
+          </div>
+       </div>
+       <div class="bottom-border"></div>
+    </div>
+
+    <div class="baseInfo" v-else-if="activeFooter === 1 && activeTop!== 1">
+      <div class="level-box">
+        <div class="level-content" v-for="(item,index) in replyTopList" :key="index" :class="{isBorder: index === replyTopList.length -1}">
+          <div :class="{ isTop: index < 3 }" class="index-class">{{index + 1}}</div>
+          <div>{{item.name}}</div>
+          <div>{{item.rate}}</div>
+        </div>
+      </div>
+      <div class="bottom-border"></div>
+    </div>
+
+
+    <div v-show="activeTop!== 1">
+      <div class="level-title appeal-title">热门诉求排行</div>
+      <div class="level-box">
+        <div class="level-content" v-for="(item,index) in replyTopList" :key="index" :class="{isBorder: index === replyTopList.length -1}">
+          <div :class="{ isTop: index < 3}" class="index-class">{{index + 1}}</div>
+          <div>{{item.name}}</div>
+          <div>{{item.rate}}</div>
+        </div>
+      </div>
+    </div>
+
   </div>
 </template>
+
+
+<script>
+  import annular from '../../components/annularChart'
+  export default {
+    components: {
+      annular,
+    },
+    data() {
+      return {
+        titleList: ["诉求月报", "数据统计"],
+        footerList: ["回复率前十", "受理量前十"],
+        activeTop: 0,
+        activeFooter:0,
+        shareBaseUrl:"https://kiq.xazhima.com/",
+        annularList:[
+          { value: 1048, name: '公共安全' },
+          { value: 735, name: '民生保障' },
+          { value: 580, name: '市政配套' },
+          { value: 484, name: '城市建设' },
+          { value: 300, name: '政务服务' },
+          { value: 623, name: '其他' }
+        ],
+        dataInfo:{
+          total:4785,
+          reply:4671
+        },
+        dataPlaceList:[
+          {
+            name:'热线受理中心',
+            total:2957,
+            reply:2956
+          },
+          {
+            name:'人社民政局',
+            total:2957,
+            reply:2956
+          },
+          {
+            name:'教育卫体局',
+            total:2957,
+            reply:2956
+          },
+          {
+            name:'太平镇街办',
+            total:2957,
+            reply:2956
+          },
+          {
+            name:'北杜街办',
+            total:2957,
+            reply:2956
+          },
+          {
+            name:'规划与住房城乡建设局',
+            total:2957,
+            reply:2956
+          }
+        ],
+        replyTopList:[
+          {
+            name:'空港市政公司',
+            rate:'100.00%',
+          },
+          {
+            name:'党委、管委会办公室',
+            rate:'100.00%'
+          },
+          {
+            name:'党委组织部(编办、统战部)',
+            rate:'100.00%'
+          },
+          {
+            name:'综保办',
+            rate:'100.00%'
+          },
+          {
+            name:'空港城发公司',
+            rate:'100.00%'
+          },
+          {
+            name:'党委宣传部',
+            rate:'100.00%'
+          },
+          {
+            name:'空港置业公司',
+            rate:'100.00%'
+          },
+          {
+            name:'党委、管委会办公室',
+            rate:'100.00%'
+          },
+          {
+            name:'党委组织部(编办、统战部)',
+            rate:'100.00%'
+          },
+          {
+            name:'党委组织部(编办、统战部)',
+            rate:'100.00%'
+          },
+        ]
+      };
+    },
+    computed: {},
+    watch: {},
+    methods: {
+      change(idx,pos) {
+        if(pos === 'top'){
+          this.activeTop = idx;
+        }else {
+          this.activeFooter = idx
+        }
+      },
+      getCompanyInfo(id) {
+        let that = this;
+        that.$api.totalApi.byIdApi(id,'common','company','info_by_id',0).then(res=>{
+          if (res.data.code === 200) {
+            this.infoObj = res.data.data;
+            let {
+              name,
+              pic_url,
+              representative,
+              found_date,
+              capital,
+              code,
+              industry_name,
+              park_name,
+              work_address,
+              rigiser_address,
+              web_url,
+              phone,
+              work_range,
+            } = res.data.data;
+            this.info = {
+              name,
+              pic_url,
+              representative,
+              found_date,
+              capital,
+              code,
+              industry_name,
+              park_name,
+              work_address,
+              rigiser_address,
+              web_url,
+              phone,
+              work_range,
+            };
+            this.info.capital = this.info.capital + '万元'
+            this.model = {
+              title: "",
+              item: [
+                {
+                  name: "法定代表人",
+                  value: [this.info.representative],
+                },
+                {
+                  name: "成立日期",
+                  value: [this.info.found_date],
+                },
+                {
+                  name: "注册资本",
+                  value: [this.info.capital],
+                },
+                {
+                  name: "统一社会信用代码",
+                  value: [this.info.code],
+                },
+                {
+                  name: "所属行业",
+                  value: [this.info.industry_name],
+                },
+                {
+                  name: "所属园区",
+                  value: [this.info.park_name],
+                },
+                {
+                  name: "经营范围",
+                  value: [this.info.work_range],
+                },
+                {
+                  name: "地址",
+                  value: [this.info.rigiser_address],
+                },
+                {
+                  name: "网址",
+                  value: [this.info.web_url],
+                },
+                {
+                  name: "电话",
+                  value: [this.info.phone],
+                },
+              ],
+            };
+            this.companyLogo = this.info.pic_url ? this.shareBaseUrl + this.info.pic_url : require('../../assets/default.png');
+            this.companyName = this.info.name;
+            this.isShow = true;
+          }
+        })
+      },
+      getProductInfo(id) {
+        let that = this;
+        that.$api.totalApi.byIdApi(id,'common','company_product','list',1).then(res=>{
+          if (res.data.code === 200) {
+            let list = res.data.data.list;
+            list.forEach((e, i) => {
+              e.pic_url = e.pic_url ? this.shareBaseUrl + e.pic_url : require('../../assets/default.png')
+            });
+            this.productList = list;
+            console.log(this.productList);
+          }
+        })
+      },
+    },
+//生命周期 - 创建完成(可以访问当前this实例)
+    created() {
+
+    },
+//生命周期 - 挂载完成(可以访问DOM元素)
+    mounted() {
+    },
+  }
+</script>
+
+
+
+
+<style>
+
+   .consult {
+     height: 100%;
+   }
+   .top-chart {
+     height: 45%;
+     border-bottom: 8px solid #e7e7e7;
+     margin-bottom: 20px ;
+   }
+  .enterprise-item-box {
+    display: flex;
+    justify-content: space-evenly;
+    margin: 10px 0 20px 0;
+    align-items: center;
+  }
+  .enterprise-item-name {
+    padding-bottom: 5px;
+    font-size: 20px;
+    font-weight: 600;
+  }
+  .active {
+    font-weight: 600;
+    border-bottom: 3px solid #02a7f0;
+    font-size: 20px;
+    color: #02a7f0;
+  }
+
+  .chart-title {
+    text-align: left;
+    padding-left: 20px;
+  }
+  .chart-box {
+    width: 100%;
+    height:90%;
+    margin-top: 20px;
+  }
+  .data-title-box {
+    display: flex;
+    padding: 20px;
+    align-items: center;
+  }
+  .title-line {
+    border-left: 5px solid cornflowerblue;
+    height: 65px;
+    margin-right: 20px;
+  }
+  .title-font {
+    font-size: 19px;
+    height: 65px;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+  }
+  .data-place-box {
+    display: flex;
+    flex-wrap: wrap;
+    align-items: center;
+    justify-content: space-around;
+    margin-top: 10px;
+  }
+  .place-box {
+    width: 42%;
+    padding: 30px 10px 30px 10px;
+    display: flex;
+    flex-wrap: wrap;
+    flex-direction: column;
+    align-items: center;
+    box-shadow: rgba(0, 0, 0, 0.3) 0 3px 6px;
+  }
+  .place-title {
+    color: #53BFEC;
+    font-size: 18px;
+    height: 50px;
+  }
+  .margin-bottom-10 {
+    margin-bottom: 10px;
+  }
+  .level-title {
+    border-left: 3px solid #02A7F0;
+    text-align: left;
+    margin-left: 10px;
+    padding-left: 10px;
+    margin-bottom: 10px;
+  }
+  .level-content {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 15px 20px 15px 20px;
+    border-bottom: 1px dashed #e7e7e7;
+  }
+  .index-class {
+    border-radius: 50%;
+    background-color: #d7d7d7;
+    color: #fff;
+    width: 25px;
+    height: 25px;
+    line-height: 25px;
+  }
+  .isTop {
+    background-color: #02A7F0;
+  }
+  .isBorder {
+    border: none;
+  }
+  .appeal-title {
+    margin-top: 20px;
+  }
+  .bottom-border {
+    width: 100%;
+    height: 8px;
+    background-color: #e7e7e7;
+    margin-top: 5px;
+  }
+</style>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/index.html


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
dist/static/css/about.4f69a01c.css


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1
dist/static/css/about.66f50997.css


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
dist/static/js/about.05456d70.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1
dist/static/js/about.9c47ab2a.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
dist/static/js/app.96bf0319.js