Browse Source

订阅推送微信修改、组件修改

TANGSHIZHE 4 years ago
parent
commit
e6e935c50a

File diff suppressed because it is too large
+ 1 - 1
src/jfw/modules/app/src/web/staticres/jyapp/css/subscribe.css


+ 52 - 13
src/jfw/modules/app/src/web/staticres/jyapp/js/historypush.js

@@ -10,10 +10,11 @@ var vm = new Vue({
     noticeComponent: noticeComponent,
     rootComponent: rootComponent
   },
-  data () {
+  data: function() {
     return {
       // 时间参数
       time:'',
+      timeText: '时间',
       // 地区参数
       area: '',
       // 行业参数
@@ -39,7 +40,7 @@ var vm = new Vue({
         type: 'POST',
         success: function(res) {
           console.log(res)
-          if(res.data) {
+          if(res.data.entniche || res.data.member || res.data.vip > 0) {
             _this.screenShow = true
           } else {
             _this.screenShow = false
@@ -48,33 +49,71 @@ var vm = new Vue({
       })
     },
     confirm: function(data){
-      this.setToggle()
+      console.log(data)
       if(data.name === 'dateItem'){
-        if ((data.data.start / 1000).toFixed(0) == 0 && (data.data.end / 1000).toFixed(0) == 0) {
+        const timeRange = {
+          start: (data.data.start / 1000).toFixed(0),
+          end: (data.data.end / 1000).toFixed(0)
+        }
+        if (timeRange.start == 0 && timeRange.end == 0) {
           this.time = ''
-        } else if((data.data.start / 1000).toFixed(0) == 0 && (data.data.end / 1000).toFixed(0) != 0) {
-          this.time = '_' + (data.data.end / 1000).toFixed(0)
-        } else if((data.data.start / 1000).toFixed(0) != 0 && (data.data.end / 1000).toFixed(0) == 0) {
-          this.time = (data.data.start / 1000).toFixed(0) + '_'
+          this.timeText = '不限'
+        } else if(timeRange.start == 0 && timeRange.end != 0) {
+          this.time = '_' + timeRange.end
+        } else if(timeRange.start != 0 && timeRange.end == 0) {
+          this.time = timeRange.start + '_'
         } else {
-          this.time = (data.data.start / 1000).toFixed(0) + '_' + (data.data.end / 1000).toFixed(0)
+          this.time = timeRange.start + '_' + timeRange.end
+        }
+        switch (data.data.exact) {
+          case 'all': {
+            this.timeText = '不限'
+            break
+          }
+          case 'lately7': {
+            this.timeText = '最近7天'
+            break
+          }
+          case 'lately30': {
+            this.timeText = '最近30天'
+            break
+          }
+          case 'lastYear': {
+            this.timeText = '去年'
+            break
+          }
+          case 'exact': {
+            this.timeText = new Date(timeRange.start*1000).pattern('yyyy.MM.dd') + '~' + new Date(timeRange.end*1000).pattern('yyyy.MM.dd')
+            break
+          }
         }
-        FTAGData(this.time)
+        this.setToggle()
+        setTimeout(() => {
+          FTAGData(this.time)
+        }, 500)
         return
       } else if(data.name === 'areaItem'){
+        $('.areaText').html(data.t)
         this.area = data.data.join('、')
       } else if(data.name === 'industryItem'){
+        $('.industryText').html(data.t)
         this.subscopeclass = data.data.join(',')
       } else if(data.name === 'cateItem'){
+        $('.cateText').html(data.t)
         this.buyerclass = data.data.join(',')
       } else if(data.name === 'keywordItem'){
-        this.$refs.keywordItem.toggle()
+        $('.keywordText').html(data.t)
+        this.key = data.data.join(',')
       } else if(data.name === 'noticeItem'){
+        $('.noticeText').html(data.t)
         this.subtype = data.data.join(',')
       } else if(data.name === 'rootItem'){
-        location.href = '/jyapp/vipsubscribe/introducePage'
+        tointroducepage()
       }
-      this.getAjaXParams()
+      this.setToggle()
+      setTimeout(()=>{
+        this.getAjaXParams()
+      }, 500)
     },
     cancel: function(data){
       console.log(data)

+ 1 - 1
src/jfw/modules/app/src/web/templates/frontRouter/collection/sess/index.html

@@ -70,7 +70,7 @@
                   <div class="collec_title ellipsis-2">
                     ${item.title}
                   </div>
-                  <div class="collec_star" @click="collecClick(item._id)">
+                  <div class="collec_star" @click="collecClick(event,item._id)">
                     <span class="shoucang" v-if="condition"></span>
                     <!-- <span class="weishoucang" v-if="!condition"></span> -->
                   </div>

+ 39 - 12
src/jfw/modules/app/src/web/templates/weixin/historypush.html

@@ -16,7 +16,6 @@
     <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/vant@2.8.2/lib/index.css />
     <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/vant@2.8.2/lib/icon/local.css />
     <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/css/index.css?v={{Msg "seo" "version"}}'/>
-    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/css/page_big_subscribe.css?v={{Msg "seo" "mod_version"}}' />
 
     <style>
         .merge-dialog,
@@ -118,12 +117,12 @@
                         </p>
                     </div> -->
                     <van-dropdown-menu style="width: auto;overflow-x: auto;">
-                        <van-dropdown-item title="时间"  ref="dateItem">
+                        <van-dropdown-item :title="timeText"  ref="dateItem">
                             <date-component @cancel="cancel" @confirm="confirm" />
                         </van-dropdown-item>
                         <van-dropdown-item ref="areaItem">
                             <template #title>
-                                <span v-if="screenShow">地区</span>
+                                <span v-if="screenShow" class="areaText">地区</span>
                                 <span v-if="!screenShow" class="rootstyletitle">
                                     <span>地区</span>
                                     <span class="root_open">开通</span>
@@ -134,7 +133,7 @@
                         </van-dropdown-item>
                         <van-dropdown-item ref="industryItem">
                             <template #title>
-                                <span v-if="screenShow">行业</span>
+                                <span v-if="screenShow" class="industryText">行业</span>
                                 <span v-if="!screenShow" class="rootstyletitle">
                                     <span>行业</span>
                                     <span class="root_open">开通</span>
@@ -145,7 +144,7 @@
                         </van-dropdown-item>
                         <van-dropdown-item  ref="cateItem">
                             <template #title>
-                                <span v-if="screenShow">采购单位</span>
+                                <span v-if="screenShow" class="cateText">采购单位</span>
                                 <span v-if="!screenShow" class="rootstyletitle">
                                     <span>采购单位</span>
                                     <span class="root_open">开通</span>
@@ -156,7 +155,7 @@
                         </van-dropdown-item>
                         <van-dropdown-item title="关键词" ref="keywordItem">
                             <template #title>
-                                <span v-if="screenShow">关键词</span>
+                                <span v-if="screenShow" class="keywordText">关键词</span>
                                 <span v-if="!screenShow" class="rootstyletitle">
                                     <span>关键词</span>
                                     <span class="root_open">开通</span>
@@ -167,7 +166,7 @@
                         </van-dropdown-item>
                         <van-dropdown-item title="公告类型" ref="noticeItem">
                             <template #title>
-                                <span v-if="screenShow">公告类型</span>
+                                <span v-if="screenShow" class="noticeText">公告类型</span>
                                 <span v-if="!screenShow" class="rootstyletitle">
                                     <span>公告类型</span>
                                     <span class="root_open">开通</span>
@@ -512,8 +511,14 @@
         isinitpage = true;
       }
   });
-
-  var firstTime = {{.T.selectTime}}+'-'+{{.T.selectTime}};
+  var firstTime
+  console.log(vm.time)
+  if({{.T.selectTime}} == '') {
+    firstTime = vm.time
+  }else {
+    firstTime = {{.T.selectTime}}+'-'+{{.T.selectTime}};
+  }
+  
   var userId = "";
   var selectCity = "";
 
@@ -779,7 +784,7 @@
         }
       });
   }
-  //
+  // 是否有未读的周报月报
   function reportHtml(r){
     if (r.unread > 0) {
       $(".vip_report>a").show();
@@ -1042,6 +1047,12 @@ function hasNoData() {
           if (obj.ca_isvisit == 1) {
               visited = "visited"
           }
+          var collecnum = 0
+          if(obj.collection == 1) {
+            collecnum = 1
+          } else {
+            collecnum = 1
+          }
           if (showAd && index == 3 && !closeAdvert) {//广告位
               var ad = $("#advertscript").html()
               if (ad != "") {
@@ -1052,6 +1063,10 @@ function hasNoData() {
                       + '</div>'
                       + '<div class="two bt-parent" style="padding-left:' + paddingLeft + 'px;">'
                       + '<a class="bt ' + visited + '" eid="' + obj["_id"] + '"  push_date="' + obj["ca_date"] + '" list_index="' + obj["ca_index"] + '" projectM="' + obj["ca_type"] + '">' + title + '</a>'
+                      + '<div class="collec_star" data-id="' + obj["_id"] + '">'
+                      + '<span class="shoucang" style="display:none"></span>'
+                      + '<span class="weishoucang"></span>'
+                      + '</div>'
                       + '</div>'
                       + '</div>'
                       + '<div style="clear:both;">'
@@ -1070,8 +1085,8 @@ function hasNoData() {
               + '</div>'
               + '<div class="two bt-parent" style="display: flex;justify-content: space-between;padding-left:' + paddingLeft + 'px;">'
               + '<a class="bt ' + visited + '" eid="' + obj["_id"] + '"  push_date="' + obj["ca_date"] + '" list_index="' + obj["ca_index"] + '" projectM="' + obj["ca_type"] + '">' + title + '</a>'
-              + '<div class="collec_star" data-id="' + obj["_id"] + '">'
-              + '<span class="shoucang" style="display:none"></span>'
+              + '<div class="collec_star" collecnum="'+obj["collection"]+'" data-id="' + obj["_id"] + '">'
+              + '<span class="shoucang"></span>'
               + '<span class="weishoucang"></span>'
               + '</div>'
               + '</div>'
@@ -1094,6 +1109,18 @@ function hasNoData() {
           $(".closeadv").css("display", "");
           $(".closeadv-bg").css("display", "");
       }
+    //   控制收藏五角星显示隐藏
+      $('.collec_star').each(function(item, index) {
+        // console.log($('.collec_star').eq(item)[0])
+        let collecnum = $('.collec_star').eq(item).attr('collecnum')
+        if(collecnum == 1) {
+            $('.collec_star').eq(item).find('.shoucang').show()
+            $('.collec_star').eq(item).find('.weishoucang').hide()
+        }else{
+            $('.collec_star').eq(item).find('.shoucang').hide()
+            $('.collec_star').eq(item).find('.weishoucang').show()
+        }
+      })
   }
 
   // 收藏或取消收藏

+ 824 - 0
src/web/staticres/big-member/js/chart_options.js

@@ -0,0 +1,824 @@
+function rectGroup(left, color){
+    return {
+        type: 'rect',
+        z: 90,
+        left: left + 50,
+        bottom: 24,
+        shape: {
+            width: 14,
+            height: 14
+        },
+        style: {
+            fill: color
+        }
+    }
+}
+// 配置项
+var chartOptions = {
+    // 热力图
+    hotChart: {
+        tooltip: {
+            backgroundColor:'#fff',
+            confine:true,
+            axisPointer: {        
+                type: 'shadow', 
+                shadowStyle:{
+                    color:'rgba(5,166,243,0.1)'
+                }
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[7,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            borderWidth:2,
+            borderColor: '#F5F6F7',
+            formatter: function(params){
+                return params;
+            }
+        },
+        axisPointer:{
+            lineStyle:{
+                color:'#f00',
+                shadowColor: '#f00'
+            }
+        },
+        animation: false,
+        grid: {
+            top:30,
+            right:50,
+            left:50,
+        },
+        xAxis: {
+            show: false,
+            type: 'category',
+            data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+            splitArea: {
+                show: true
+            }
+        },
+        yAxis: [{
+            name: '单位(元)',
+            nameTextStyle:{
+                fontSize: 10,
+                color: '#9B9CA3',
+                padding:[ 0, 0, 0, -30 ]
+            },
+            nameGap: 10,
+            type: 'category',
+            data: ['0', '1万', '10万','50万', '100万', '500万', '1000万', '5000万', '1亿', '10亿以上'].reverse(),
+            splitArea: {
+                show: false
+            },
+            axisTick: {
+                show: false,
+                lineStyle:{
+                    color: '#5F5E64'
+                }
+            },
+            axisLine: {
+                show: false
+            },
+            splitLine: {
+                show: false
+            },
+            axisLabel:{
+                fontSize:10,
+                margin:4
+            }
+        }, {
+            type: 'category',
+            data: ['1万', '10万','50万', '100万', '500万', '1000万', '5000万', '1亿', '10亿', ''].reverse(),
+            splitArea: {
+                show: false
+            },
+            axisTick: {
+                show: false,
+                lineStyle:{
+                    color: '#5F5E64'
+                }
+            },
+            axisLine: {
+                show: false
+            },
+            splitLine: {
+                show: false
+            },
+            axisLabel:{
+                fontSize:10,
+                margin:4
+            }
+        }],
+        graphic: [{
+                type: 'group',
+                bottom: 42,
+                children: [{
+                    type: 'text',
+                    z: 100,
+                    left: 50,
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        text: '类似项目数量(个)',
+                        font: '10px Microsoft YaHei'
+                    }
+                }]
+            },
+            {
+                type: 'rect',
+                z: 101,
+                left: 50,
+                bottom: 24,
+                shape: {
+                    width: 84,
+                    height: 14
+                },
+                style: {
+                    stroke: '#FB483D',
+                    fill: 'transparent',
+                    lineWidth: 0.5
+                }
+            },
+            rectGroup(0, '#F06326'),
+            rectGroup(14, '#F48A5D'),
+            rectGroup(28, '#FFB366'),
+            rectGroup(42, '#FFCF9F'),
+            rectGroup(56, '#FFE7CF'),
+            rectGroup(70, '#FFF4EB'),
+            {
+                type: 'group',
+                width: 84,
+                bottom: 10,
+                left:50,
+                children: [{
+                        type: 'text',
+                        z: 100,
+                        left: 'left',
+                        top: 'middle',
+                        style: {
+                            fill: '#333',
+                            // text: '100',
+                            font: '10px Microsoft YaHei'
+                        }
+                    },
+                    {
+                        type: 'text',
+                        z: 100,
+                        left: 'right',
+                        top: 'middle',
+                        style: {
+                            fill: '#333',
+                            text: '0',
+                            font: '10px Microsoft YaHei'
+                        }
+                    }
+                ]
+            },
+            {
+                type: 'group',
+                bottom: 24,
+                right: 50,
+                children: [{
+                        type: 'circle',
+                        z: 100,
+                        top: 'middle',
+                        style: {
+                            fill: '#2ABED1'
+                        },
+                        shape: {
+                            cx: 0,
+                            cy: 0,
+                            r: 4
+                        }
+                    },
+                    {
+                        type: 'text',
+                        z: 100,
+                        top: 'middle',
+                        style: {
+                            fill: '#333',
+                            text: '当前项目预算所在区间',
+                            font: '11px Microsoft YaHei',
+                            x: 12
+                        }
+                    }
+                ]
+            }
+        ],
+        visualMap: [{
+            show:false,
+            type: 'piecewise',
+            splitNumber: 5,
+            showLabel: false,
+            itemWidth: 16,
+            itemHeight: 12,
+            itemGap: 0,
+            inverse: true,
+            min: 0,
+            dimension:3,
+            seriesIndex: [0],
+            orient: 'horizontal',
+            left: '5%',
+            bottom: '5%',
+            inRange:{                             //定义 在选中范围中 的视觉元素
+                color: ['#FFE7CF', '#FFCF9F','#FFB366','#F48A5D', '#F06326'],
+            },
+            outOfRange:{
+                color: ['#FFF4EB'],
+            },
+        }],
+        legend: {
+            show: false,
+            data: [{
+                name: '当前项目预算',
+                icon: 'circle',
+            }],
+            orient: 'horizontal',
+            seriesIndex: [1],
+            right: '30%',
+            bottom: '5%',
+            itemWidth: 15,
+            itemHeight: 15,
+            itemGap: 30,
+        },
+        series: [{
+            name: '类似项目数量',
+            type: 'heatmap',
+            label: {
+                show: false
+            },
+            itemStyle: {
+                normal:{
+                    color:'#fff',
+                    borderWidth: 1,
+                    borderColor: '#fff'
+                },
+                emphasis:{
+                    borderWidth: 1,
+                    borderColor: '#f75441'
+                }
+            },
+            zlevel: 2,
+            tooltip: {
+                confine:true,
+                formatter: function(params){
+                    return params;
+                }
+            }
+            
+        }, {
+            name: '当前项目预算所在区间',
+            type: 'effectScatter',
+            showEffectOn: 'render',
+            rippleEffect: {
+                brushType: 'stroke',
+                color: '#2CB7CA',
+            },
+            emphasis:{
+                itemStyle:{
+                    color: '#2ABED1',
+                }
+            },
+            effectType:'ripple',
+            coordinateSystem: 'cartesian2d',
+            hoverAnimation: true,
+            itemStyle: {
+                color: '#2ABED1',
+                shadowBlur: 8,
+                shadowColor: '#2ABED1'
+            },
+            zlevel: 3,
+            symbol: 'circle',
+            symbolSize: 8,
+            // data:[],
+            tooltip: {
+                confine:true,
+                formatter: function(params){
+                    return params;
+                }
+            }
+        }]
+    },
+    // 柱状图
+    barChart:{
+        color:['#05A6F3'],
+        grid:{
+            left:12,
+            right:12,
+            bottom:50
+        },
+        yAxis:{
+            axisLabel:{
+                fontSize:10,
+                margin:4
+            },
+            splitLine: {
+                lineStyle:{
+                    type: 'dashed',  // y轴背景虚线
+                    width: 0.5
+                }
+            },
+            nameGap:20,
+            nameTextStyle:{
+                fontSize: 10,
+                align:'left',
+                padding:[0,0,0,-20],
+            }
+        },
+        xAxis:{
+            min:0,
+            axisLabel:{
+                showMinLabel: true,
+                showMaxLabel: true,
+                textStyle: {
+                    color: '#626262',
+                    fontSize: 10,
+                    padding:[15,4,0,0]
+                },
+                formatter:function(val, index) {
+                    if(val == '0-2' || val == '0-2天') {
+                        val = '0天'
+                    } else if (val == '58-60' || val == '58-60天') {
+                        val = '60天  '
+                    } else {
+                        val = ''
+                    }
+                    return val;
+                },
+                
+            },
+            axisTick: {
+                interval: 0
+            },
+            nameGap:20,
+            nameLocation: 'end',
+            nameTextStyle:{
+                fontSize: 10,
+                align: 'right',
+                padding:[80,20,0,0],
+                color: '#9B9CA3'
+            }
+        },
+        series: [
+            {
+                type:'bar',
+                name:'类似项目标书编制周期',
+                barWidth: 10,
+                barMaxWidth: 10,
+                itemStyle:{
+                    color: '#05A6F3'
+                }
+            }
+        ],
+        graphic: [
+            {
+                type: 'group',
+                bottom: 10,
+                left: 32,
+                children: [{
+                        type: 'circle',
+                        z: 100,
+                        top: 'middle',
+                        style: {
+                            fill: '#FB483D'
+                        },
+                        shape: {
+                            cx: 0,
+                            cy: 0,
+                            r: 4
+                        }
+                    },
+                    {
+                        type: 'text',
+                        z: 100,
+                        top: 'middle',
+                        style: {
+                            fill: '#333',
+                            text: '当前项目标书编制周期',
+                            font: '11px Microsoft YaHei',
+                            x: 8
+                        }
+                    }
+                ]
+            },
+            {
+                type: 'group',
+                bottom: 10,
+                right: 20,
+                children: [{
+                        type: 'circle',
+                        z: 100,
+                        top: 'middle',
+                        style: {
+                            fill: '#3399FF'
+                        },
+                        shape: {
+                            cx: 0,
+                            cy: 0,
+                            r: 4
+                        }
+                    },
+                    {
+                        type: 'text',
+                        z: 100,
+                        top: 'middle',
+                        style: {
+                            fill: '#333',
+                            text: '类似项目标书编制周期',
+                            font: '11px Microsoft YaHei',
+                            x: 8
+                        }
+                    }
+                ]
+            }
+        ],
+        legend:{
+            show: false,
+        },
+        tooltip:{
+            backgroundColor:'#fff',
+            confine:true,
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[7,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            borderWidth:2,
+            borderColor: '#F5F6F7',
+            formatter: function(params){
+                // console.log(params)
+                var tip = '';
+                for (var i = 0; i < params.length; i++) {
+                    params[i].value == undefined ? params[i].value = 0 : params[i].value;
+                    tip 
+                    if( params[i].seriesName === '项目数量') {
+                        tip = tip +  '编制周期:' + params[i].name + '<br/>' + params[i].seriesName + ':' + params[i].value + '个' + '<br/>';
+                    }
+                }
+                return tip;
+            }
+        }
+    },
+    // 饼图
+    pieChart:{
+        color:['#05A6F3','#0BD991', '#8E6DF2', '#5B6E96', '#F06326','#FF8040',  '#FF9F40', '#FFCF9F','#67E5B9', '#67C7F5', '#CEC2F2','#C3CAD9'].reverse(),
+        grid:{
+            left: 12,
+            right: 12
+        },
+        legend:{
+            left:'center',
+            bottom: 10,
+            icon: 'circle',
+            itemWidth:8,
+            itemHeight:8,
+            textStyle:{
+                fontSize: 11
+            },
+            // formatter: function (name) { 
+            //     var len = name.length
+            //     switch (len) {
+            //         case 2:
+            //             return name + '\v\v\v\v\v\v\v'
+            //             break;
+            //         case 3:
+            //             return name + '\v\v\v\v'
+            //             break;
+            //         default:
+            //             return  name
+            //             break;
+            //     }
+            // }
+        },
+        series:{
+            label:{
+                show: true,
+                position: 'inside',
+                fontSize: 11,
+                rotate: true,
+                formatter: function(params){
+                    if(params.percent < 10) {
+                        return ''
+                    } else {
+                        return params.percent + '%'
+                    }
+                }
+            },
+            labelLine: {
+                show:false
+            },
+            itemStyle:{
+                borderWidth:2,
+                borderColor:'#fff'
+            },
+            center: ['50%', '50%'],
+            bottom: 40,
+            avoidLabelOverlap: true,
+            // minShowLabelAngle: 20,
+            radius:[2, '80%'],
+            minAngle: 20,
+        },
+        tooltip:{
+            backgroundColor:'#fff',
+            confine:true,
+            axisPointer: {        
+                type: 'shadow', 
+                shadowStyle:{
+                    color:'rgba(5,166,243,0.1)'
+                }
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[7,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            borderWidth:2,
+            borderColor: '#F5F6F7',
+            formatter:function(params){
+                return params;
+            }
+        }
+    },
+    // 折线图
+    lineChart:{
+        color:['#05A6F3','#0BD991','#FF9F40'],
+        xAxis:{
+            axisLabel:{
+                textStyle: {
+                    color: '#626262',
+                    fontSize: 10,
+                },
+                interval: 0
+            },
+        },
+        grid:{
+            top: 30,
+            left:12,
+            right:12
+        },
+        yAxis:{
+            splitLine: {
+                lineStyle:{
+                    type: 'dashed',
+                    width: 0.5
+                }
+            },
+            nameGap: 15,
+            nameTextStyle:{
+                fontSize: 10,
+                align: 'left',
+                color: '#9B9CA3',
+                padding: [0,0,0,-30]
+            },
+            axisLabel: {
+                margin:2,
+                fontSize:10,
+                color: '#5F5E64',
+                interval: 'auto',
+                formatter: function(value, index){
+                    return value.toString().replace(/,/,'');
+                }
+            }
+        },
+        legend:{
+            orient: 'horizontal',
+            icon:'circle',
+            bottom: 20,
+            itemWidth: 8,
+            itemHeight: 8,
+            textStyle: {
+                color: '#5F5E64',
+                fontSize: 11
+            }
+        },
+        series:{
+            showSymbol:false,
+            smooth: false,
+            symbol:'circle',
+            symbolSize: 3,
+            itemStyle:{
+                borderColor: "#fff",
+                borderWidth: 1
+            }
+        },
+        tooltip:{
+            backgroundColor:'#fff',
+            confine:true,
+            axisPointer: {        
+                type: 'line', 
+                lineStyle:{
+                    width:2,
+                    color:'#2ABED1'
+                },
+                z: 3
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[7,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            borderWidth:2,
+            borderColor: '#F5F6F7'
+        },
+        lineStyle:{
+            width: 0.5
+        }
+        
+    },
+    // 柱状折线图(双Y轴)
+    barLineChart:{
+        chartExtend:{
+            grid:{
+                top:30,
+                left: 10,
+                right: 10
+            },
+            xAxis: {
+                axisLabel:{
+                    textStyle: {
+                        color: '#626262',
+                        fontSize: 10,
+                    }
+                },
+                nameLocation: 'start',
+                nameTextStyle:{
+                    fontSize: 10,
+                    align: 'left',
+                    padding:[55,0,0,30],
+                    color: '#9B9CA3'
+                }
+            },
+            yAxis(item) {
+                item[0].splitLine = {
+                    lineStyle:{
+                        type: 'dashed',
+                        width: 0.5
+                    }
+                }
+                item[1].splitLine = {
+                    show:false,
+                    lineStyle:{
+                        type: 'dashed',
+                        width: 0.5
+                    }
+                },
+                item[1].axisLabel = {
+                    show: true,
+                    margin: 2,
+                    fontSize: 10,
+                    color: '#5F5E64',
+                    formatter: function(value, index){
+                        return value.toString().replace(/,/,'');
+                    }
+                },
+                item[0].axisLabel = {
+                    margin: 2,
+                    fontSize: 10,
+                    color: '#5F5E64',
+                    formatter: function(value, index){
+                        return value.toString().replace(/,/,'');
+                    }
+                }
+                return item;
+            },
+            tooltip: {
+                confine:true,
+                backgroundColor:'#fff',
+                axisPointer: {
+                    type: 'shadow',
+                    shadowStyle:{
+                        color:'rgba(5,166,243,0.1)'
+                    }
+                },
+                textStyle:{
+                    color:'#171826',
+                    fontSize:12
+                },
+                padding:[7,12],
+                extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+                borderWidth:2,
+                borderColor: '#F5F6F7'
+            },
+            legend: {
+                show: true,
+                orient: 'horizontal',
+                icon:'circle',
+                bottom:20,
+                align:'left',
+                itemWidth: 8,
+                itemHeight: 8,
+                itemGap:20,
+                textStyle:{
+                    fontSize:11
+                },
+                formatter: function (name) {
+                    if(name == '企业数量') {
+                        name = name + '(个)'
+                    }
+                    return name;
+                }
+            },
+            series: {
+                smooth:false
+            },
+            color:['#05A6F3', '#FF9F40']
+        },
+    },
+    deformPieChart:{
+        dataset: {
+            source: []
+        },
+        legend: {
+            bottom: 10,
+            align: 'left', 
+            orient: 'horizontal', 
+            icon: "circle",
+            itemWidth:8,
+            itemHeight: 8,
+            itemGap:15,
+            textStyle: {
+                color: '#909399',
+                fontSize: 10,
+                rich: {
+                    x: {
+                        width: 48,
+                        color: '#909399',
+                        fontSize: 10,
+                    }
+                },
+            },
+        },
+        calculable: false,
+        tooltip:{
+            backgroundColor:'#fff',
+            confine:true,
+            axisPointer: {        
+                type: 'shadow', 
+                shadowStyle:{
+                    color:'rgba(5,166,243,0.1)'
+                }
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[7,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            borderWidth:2,
+            borderColor: '#F5F6F7',
+            formatter:function(params){
+                return params;
+            }
+        },
+        series: {
+            name: '半径模式',
+            type: 'pie',
+            bottom:20,
+            avoidLabelOverlap: true,
+            stillShowZeroSum: false,
+            radius:[2, '85%'],
+            clockWise: false,
+            startAngle: 60,
+            center: ['50%', '50%'],
+            roseType: 'area',
+            encode: {
+                x:0,
+                y:1,
+                itemName: '行业',
+                value: "类似项目规模", 
+            },
+            labelLine: {
+                show:false
+            },
+            itemStyle: {
+                normal: {
+                    color: function(params) {
+                        var colorList = ['#05A6F3','#0BD991', '#8E6DF2', '#5B6E96', '#F06326','#FF8040',  '#FF9F40', '#FFCF9F','#67E5B9', '#67C7F5', '#CEC2F2','#C3CAD9'];
+                        return colorList[params.dataIndex]
+                    },
+                    borderWidth:1,
+                    borderColor:'#fff',
+                    label: {
+                        position: 'inside',
+                        rotate: true,
+                        textStyle: {
+                            fontSize: 11
+                        },
+                        formatter: function(params){
+                            // console.log(params)
+                            if(params.percent < 10) {
+                                return ''
+                            } else {
+                                return params.percent + '%'
+                            }
+                        }
+                    },
+                },
+            },
+        }
+    }
+}

+ 981 - 0
src/web/staticres/big-member/js/echarts_option.js

@@ -0,0 +1,981 @@
+// 中国地图配置项
+var mapSettings = {
+    chartSettings:{
+        positionJsonLink: "/jyapp/big-member/js/china.json",
+        beforeRegisterMapOnce (map) {
+            return map
+        },
+        beforeRegisterMap (map) {
+            return map
+        },
+        label:{
+            show:true,
+            fontSize:9
+        },
+        selectedMode:false, // 去掉省份小圆点
+        itemStyle:{
+            normal:{
+                borderColor:'#F06326',
+                areaColor: '#FFFFFF'
+            }
+        },
+        // zoom:0.95, // 缩放比例
+    },
+    chartExtend: {
+        tooltip: {
+            confine: true,
+            backgroundColor:'#fff',
+            axisPointer: {            // 坐标轴指示器,坐标轴触发有效
+                type: 'shadow',        // 默认为直线,可选为:'line' | 'shadow'
+                shadowStyle:{
+                    color:'rgba(5,166,243,0.1)'
+                },
+                z: 3
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[8,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            formatter:function(params,ticket, callback){
+                if(params.data == null){
+                    return params.name+':0'
+                }else{
+                    return params.name+':'+ params.value
+                }
+            }
+        },
+        grid:{
+            height: '280px',
+            containLabel: true
+        },
+        legend:{ // 隐藏图标上方小方块及文字
+            selectedMode: false,
+            textStyle:{
+                color:'transparent'
+            },
+            itemWidth:0,
+            itemHeight:0,
+        },
+        silent:false, // 禁用鼠标点击、滑过事件
+        series: {
+            showLegendSymbol:false,
+            selectedMode:false,
+        },
+        graphic:[
+            {
+                type:'group',
+                bottom: 54,
+                children:[
+                {
+                    type: 'text',
+                    z: 100,
+                    left: 'left',
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        text:'市场分布数量',
+                        font: '10px Microsoft YaHei'
+                    }
+                }]
+            },
+            {
+                type: 'rect',
+                z: 101,
+                left: 0,
+                bottom: 34,
+                shape: {
+                    width: 84,
+                    height: 14
+                },
+                style: {
+                    stroke: '#FB483D',
+                    fill: 'transparent',
+                    lineWidth: 0.5
+                }
+            },
+            rectGroup(0,'#F06326'),
+            rectGroup(14,'#F48A5D'),
+            rectGroup(28,'#FFB366'),
+            rectGroup(42,'#FFCF9F'),
+            rectGroup(56,'#FFE7CF'),
+            rectGroup(70,'#FFF4EB'),
+            {
+                type:'group',
+                width: 84,
+                bottom: 20,
+                children:[
+                {
+                    type: 'text',
+                    z: 100,
+                    left: 'left',
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        text:'100',
+                        font: '10px Microsoft YaHei'
+                    }
+                },
+                {
+                    type: 'text',
+                    z: 100,
+                    left: 'right',
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        text:'0',
+                        font: '10px Microsoft YaHei'
+                    }
+                }]
+            }
+        ],
+        visualMap: {
+            show:false,
+            inRange:{                             //定义 在选中范围中 的视觉元素
+                color: ['#FFF4EB','#FFE7CF', '#FFCF9F','#FFB366','#F48A5D', '#F06326'],
+            },
+            outOfRange:{
+                color: ['#F06326'],
+            },
+        },
+    },
+    chart: null
+}
+// 月报本月项目规模分布
+var mapSettings2 = {
+    chartSettings:{
+        positionJsonLink: "/jyapp/big-member/js/china.json",
+        beforeRegisterMapOnce (map) {
+            return map
+        },
+        beforeRegisterMap (map) {
+            return map
+        },
+        label:{
+            show:true,
+            fontSize:9
+        },
+        selectedMode:false,
+        itemStyle:{
+            normal:{
+                borderColor:'#F06326',
+                areaColor: '#FFFFFF'
+            }
+        },
+    },
+    chartExtend: {
+        tooltip: {
+            confine: true,
+            backgroundColor:'#fff',
+            axisPointer: {
+                type: 'shadow', 
+                shadowStyle:{
+                    color:'rgba(5,166,243,0.1)'
+                },
+                z: 3
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[8,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            formatter:function(params,ticket, callback){
+                if(params.data == null){
+                    return params.name + ':0'
+                }else{
+                    return params.name + ':'+ params.value
+                }
+            }
+        },
+        grid:{
+            height: '280px',
+            containLabel: true
+        },
+        legend:{
+            selectedMode: false,
+            textStyle:{
+                color:'transparent'
+            },
+            itemWidth:0,
+            itemHeight:0,
+        },
+        silent:false,
+        series: {
+            showLegendSymbol:false,
+            selectedMode:false,
+        },
+        graphic:[
+            {
+                type:'group',
+                bottom: 54,
+                children:[
+                {
+                    type: 'text',
+                    z: 100,
+                    left: 'left',
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        text:'单位:万元',
+                        font: '10px Microsoft YaHei'
+                    }
+                }]
+            },
+            {
+                type: 'rect',
+                z: 101,
+                left: 0,
+                bottom: 34,
+                shape: {
+                    width: 84,
+                    height: 14
+                },
+                style: {
+                    stroke: '#FB483D',
+                    fill: 'transparent',
+                    lineWidth: 0.5
+                }
+            },
+            rectGroup(0,'#F06326'),
+            rectGroup(14,'#F48A5D'),
+            rectGroup(28,'#FFB366'),
+            rectGroup(42,'#FFCF9F'),
+            rectGroup(56,'#FFE7CF'),
+            rectGroup(70,'#FFF4EB'),
+            {
+                type:'group',
+                width: 84,
+                bottom: 20,
+                children:[
+                {
+                    type: 'text',
+                    z: 100,
+                    left: 'left',
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        text:'100',
+                        font: '10px Microsoft YaHei'
+                    }
+                },
+                {
+                    type: 'text',
+                    z: 100,
+                    left: 'right',
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        text:'0',
+                        font: '10px Microsoft YaHei'
+                    }
+                }]
+            }
+        ],
+        visualMap: {
+            show:false,
+            inRange:{
+                color: ['#FFF4EB','#FFE7CF', '#FFCF9F','#FFB366','#F48A5D', '#F06326'],
+            },
+            outOfRange:{
+                color: ['#F06326'],
+            },
+        },
+    },
+    chart: null
+}
+// 月报本月中标企业注册地分布
+var mapSettings3 = {
+    chartSettings:{
+        positionJsonLink: "/jyapp/big-member/js/china.json",
+        beforeRegisterMapOnce (map) {
+            return map
+        },
+        beforeRegisterMap (map) {
+            return map
+        },
+        label:{
+            show:true,
+            fontSize:9
+        },
+        selectedMode:false,
+        itemStyle:{
+            normal:{
+                borderColor:'#F06326',
+                areaColor: '#FFFFFF'
+            }
+        },
+    },
+    chartExtend: {
+        tooltip: {
+            confine: true,
+            backgroundColor:'#fff',
+            axisPointer: {
+                type: 'shadow', 
+                shadowStyle:{
+                    color:'rgba(5,166,243,0.1)'
+                },
+                z: 3
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[8,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            formatter:function(params,ticket, callback){
+                if(params.data == null){
+                    return params.name + ':0'
+                }else{
+                    return params.name + ':'+ params.value
+                }
+            }
+        },
+        grid:{
+            height: '280px',
+            containLabel: true
+        },
+        legend:{
+            selectedMode: false,
+            textStyle:{
+                color:'transparent'
+            },
+            itemWidth:0,
+            itemHeight:0,
+        },
+        silent:false,
+        series: {
+            showLegendSymbol:false,
+            selectedMode:false,
+        },
+        graphic:[
+            {
+                type:'group',
+                bottom: 54,
+                children:[
+                {
+                    type: 'text',
+                    z: 100,
+                    left: 'left',
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        text:'单位:个',
+                        font: '10px Microsoft YaHei'
+                    }
+                }]
+            },
+            {
+                type: 'rect',
+                z: 101,
+                left: 0,
+                bottom: 34,
+                shape: {
+                    width: 84,
+                    height: 14
+                },
+                style: {
+                    stroke: '#FB483D',
+                    fill: 'transparent',
+                    lineWidth: 0.5
+                }
+            },
+            rectGroup(0,'#F06326'),
+            rectGroup(14,'#F48A5D'),
+            rectGroup(28,'#FFB366'),
+            rectGroup(42,'#FFCF9F'),
+            rectGroup(56,'#FFE7CF'),
+            rectGroup(70,'#FFF4EB'),
+            {
+                type:'group',
+                width: 84,
+                bottom: 20,
+                children:[
+                {
+                    type: 'text',
+                    z: 100,
+                    left: 'left',
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        text:'100',
+                        font: '10px Microsoft YaHei'
+                    }
+                },
+                {
+                    type: 'text',
+                    z: 100,
+                    left: 'right',
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        text:'0',
+                        font: '10px Microsoft YaHei'
+                    }
+                }]
+            }
+        ],
+        visualMap: {
+            show:false,
+            inRange:{
+                color: ['#FFF4EB','#FFE7CF', '#FFCF9F','#FFB366','#F48A5D', '#F06326'],
+            },
+            outOfRange:{
+                color: ['#F06326'],
+            },
+        },
+    },
+    chart: null
+}
+// 中国地图例graphic配置函数
+function rectGroup(left,color) { 
+    return {
+        type: 'rect',
+        z: 100,
+        left: left,
+        bottom: 34,
+        shape: {
+            width: 14,
+            height: 14
+        },
+        style: {
+            fill: color
+        }
+    }
+}
+//  投标决策分析页面:预算分布、中标金额、折扣率分布三个图表配置项(只配置相同部分,不同部分在页面里单独配置)
+var barChart = {
+    chartSettings: {},
+    chartExtend:{
+        grid:{
+            left:4,
+            x:0,
+            y:20,
+            x2:0,
+            bottom:20
+        },
+        xAxis:{
+            axisLabel:{
+                interval: 0, // 强制显示x轴所有刻度
+                fontSize: 10
+            }
+        },
+        yAxis(item){
+            item[0].splitLine = {
+                lineStyle:{
+                    type: 'dashed',  // y轴背景虚线
+                    width: 0.5
+                }
+            }
+            item[0].axisLabel = {
+                margin:2,
+                fontSize: 10
+            }
+            item[1].splitLine = {
+                show:false
+            }
+            item[1].axisLabel = {
+                show:false,
+                fontSize: 10
+            }
+            return item;
+        },
+        tooltip: {
+            trigger: 'axis',
+            confine: true,
+            backgroundColor:'#fff',
+            axisPointer: {
+                type: 'shadow',
+                shadowStyle: {},
+                z: 3
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[7,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08);transform: translate3d(0,0,0)',
+            formatter:function(params){
+                //移除重复的数据
+                for (var i = 0; i < params.length; i++) {
+                    for (var j = params.length - 1; j > i; j--) {
+                        if (params[j].data == params[i].data) {
+                            params.splice(j, 1);
+                            break;
+                        }
+                    }
+                }
+                var tip = '';
+                for (var i = 0; i < params.length; i++) {
+                    if( i == 0) {
+                        tip = params[i].value == 0 ? '' : tip + params[i].seriesName + ':' + params[i].value + '个' + '<br/>';
+                    }else if(i == 1){
+                        if (params[i].value != 0 || params[i].value != '0.00') {
+                            if (params[i].seriesName === '平均折扣率') {
+                                tip = tip + params[i].seriesName + ':' + params[i].value + '%' + '<br/>';
+                            } else {
+                                tip = tip + params[i].seriesName + ':' + params[i].value + '万元' + '<br/>';
+                            }
+                        } else {
+                            tip = tip
+                        }
+                        
+                    }
+                }
+                return tip;
+            }
+        },
+        legend: {
+            show:false,
+            orient: 'horizontal',
+            icon:'circle',
+            bottom:20,
+            align:'left',
+            itemWidth: 8,
+            itemHeight: 8,
+            itemGap:20,
+            textStyle:{
+                fontSize:11,
+                rich:{
+                    a:{
+                        fontSize:16,
+                        verticalAlign:'top',
+                        align:'center',
+                        padding:[0,15,28,0]
+                    },
+                    b:{
+                        fontSize:14,
+                        align:'center',
+                        padding:[0,15,0,0],
+                        lineHeight:25
+                    }
+                }
+            },
+            formatter: function (name) {
+                var wnYuan = ['金额', '项目金额', '项目规划', '项目总预算', '项目总规模']
+                var ge = ['数量', '项目数量']
+                if (wnYuan.indexOf(name) !== -1) {
+                    name += '(万元)'
+                } else if (ge.indexOf(name) !== -1) {
+                    name += '(个)'
+                }
+                return name;
+            },
+        },
+        series: {
+            barWidth: 20,
+            smooth:false,
+            symbol:'none',
+            lineStyle: {
+                width: 0,
+                color: 'rgba(0, 0, 0, 0)' // 线的颜色是透明的
+            },
+        },
+        
+    },
+}
+
+// 平均折扣率配置
+var multiBarChart = {
+    chartSettings: {
+        showLine: ['平均折扣率'],
+    },
+    chartExtend:{
+        grid:{
+            x:12,
+            y:20,
+            x2:12,
+        },
+        yAxis: {
+            splitLine: {
+                show: true,
+                lineStyle: {
+                    type: 'dashed',  // y轴背景虚线
+                    width: 0.5
+                }
+            },
+            axisLabel:{
+                fontSize:10
+            },
+        },
+        xAxis: {
+            axisLabel:{
+                fontSize:10
+            }
+        },
+        tooltip: {
+            trigger: 'axis',
+            confine: true,
+            backgroundColor:'#fff',
+            axisPointer: {
+                type: 'shadow',
+                shadowStyle:{
+                    color:'rgba(5,166,243,0.1)'
+                }
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding: [8,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            formatter: function(params){
+                var tip = '';
+                for (var i = 0; i < params.length; i++) {
+                    if( i< 4) {
+                        tip = tip + params[i].marker + params[i].seriesName + ':' + params[i].value + '<br/>';
+                    }else {
+                        tip = tip + params[i].marker + params[i].seriesName + ':' + params[i].value + '%' + '<br/>';
+                    }
+                }
+                tip += '<div style="padding-top:2px;text-align:center;color:#9B9CA3;">' + ' - ' + params[0].name.substring(0,params[0].name.lastIndexOf('年')) + ' - ' + '</div>'
+                return tip;
+            },
+        },
+        legend: {
+            orient: 'horizontal',
+            bottom:20,
+            icon:'circle',
+            itemWidth: 8,
+            itemHeight: 8,
+            padding:[0,6],
+            data:['日期', '0~5%', '5~10%','10~30%','30~100%','平均折扣率'],
+            textStyle:{
+                fontSize:11
+            }
+        },
+        series: {
+            smooth:false,
+        },
+        color:['#05A6F3','#0BD991','#FF9F40','#8E6DF2','#F1D090']
+    },
+}
+
+var mBarChart = {
+    dataEmpty: true,
+    chartSettings: {},
+    chartExtend:{
+        grid:{
+            x:14,
+            y:20,
+            x2:14
+        },
+        tooltip: {
+            trigger: 'axis',
+            confine: true,
+            backgroundColor:'#fff',
+            axisPointer: {
+                type: 'shadow',
+                shadowStyle:{
+                    color:'rgba(5,166,243,0.1)'
+                }
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[8,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            z: 3
+        },
+        legend: {
+            orient: 'horizontal',
+            icon:'circle',
+            bottom:10,
+            left: 'center',
+            itemWidth: 8,
+            itemHeight: 8,
+            itemGap:10,
+            textStyle:{
+                fontSize:11
+            }
+        },
+        yAxis: {
+            splitLine: {
+                show: true,
+                lineStyle: {
+                    type: 'dashed',
+                    width: 0.5,
+                    color:'rgba(0, 0, 0, 0.08)'
+                }
+            },
+            axisLabel:{
+                fontSize:10
+            },
+        },
+        xAxis: {
+            axisLabel:{
+                fontSize:10
+            }
+        },
+        series: {
+            barWidth: 20,
+            type:'bar'
+        },
+        color:['#9C72F4','#6B78E8','#05A6F3','#2ABED1','#0BD991','#C0C4CC','#B8D4F9','#444A7A','#F1D090','#B8D4F9','#C09BFC','#104EA3','#21CED2','#FFB901','#7BBFE5','#82E9D6','#62B8FF','#7E56EE','#B3E3E7','#8591FF','#96C3D8','#3774E8','#CDCEFE','#6BBEF4','#6E55B4','#2B82FE','#FF9A01','#01C290','#BAE1A8','#EB97D8']
+    },
+}
+
+
+// 月报 (本月项目规模)
+var barChart2 = {
+    chartExtend:{
+        grid:{
+            left:4,
+            x:0,
+            y:20,
+            x2:12,
+        },
+        xAxis: {
+            axisLabel:{
+                fontSize:10
+            }
+        },
+        yAxis(item){
+            var maxCountList = vNode.data.curMonthScaleData.rows.map(v =>{
+                return v['项目规模']
+            })
+            var maxPriceList = vNode.data.curMonthScaleData.rows.map(v =>{
+                return v['环比增长率(%)-右纵轴']
+            })
+            var maxCount = Math.ceil(Math.max.apply(null,maxCountList)).toString();
+            var maxPrice = Math.ceil(Math.max.apply(null,maxPriceList)).toString();
+            var minRight = Math.ceil(Math.min.apply(null,maxPriceList)).toString();
+            maxCount = Math.ceil(maxCount / (Math.pow(10,maxCount.length -1))) * Math.pow(10,maxCount.length -1);
+            maxPrice = Math.ceil(maxPrice / (Math.pow(10,maxPrice.length -1))) * Math.pow(10,maxPrice.length -1);
+            if(minRight.indexOf('-') > -1) {
+                minRight = '-'  + Math.ceil(minRight.replace('-','') / (Math.pow(10,minRight.replace('-','').length -1))) * Math.pow(10,minRight.replace('-','').length -1)
+            } else {
+                minRight = 0;
+            }
+            item[0].min = 0;
+            item[1].min = minRight;
+            item[0].max = maxCount;
+            item[0].interval = Math.ceil(maxCount / 5);
+            item[1].max = maxPrice;
+            item[1].interval = Math.ceil((maxPrice - minRight) / 5);
+            item[0].splitLine = {
+                lineStyle:{
+                    type: 'dashed',
+                    width: 0.5
+                }
+            }
+            item[1].splitLine = {
+                show:false,
+                lineStyle:{
+                    type: 'dashed',
+                    width: 0.5
+                }
+            },
+            item[1].axisLabel = {
+                show: true,
+                fontSize: 10
+            },
+            item[0].axisLabel = {
+                margin:2,
+                fontSize: 10,
+                formatter: function(value, index){
+                    return value.toString().replace(/,/,'');
+                }
+            }
+            return item;
+        },
+        tooltip: {
+            trigger: 'axis',
+            confine: true,
+            backgroundColor:'#fff',
+            axisPointer: {        
+                type: 'shadow', 
+                shadowStyle:{
+                    color:'rgba(5,166,243,0.1)'
+                }
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[7,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            formatter:function(params){
+                return formatterTip(params)
+            }
+        },
+        legend: {
+            show: true,
+            orient: 'horizontal',
+            icon:'circle',
+            bottom:20,
+            align:'left',
+            itemWidth: 8,
+            itemHeight: 8,
+            itemGap:20,
+            textStyle:{
+                fontSize:11,
+                rich:{
+                    a:{
+                        fontSize:16,
+                        verticalAlign:'top',
+                        align:'center',
+                        padding:[0,15,28,0]
+                    },
+                    b:{
+                        fontSize:14,
+                        align:'center',
+                        padding:[0,15,0,0],
+                        lineHeight:25
+                    }
+                }
+            },
+            formatter: function (name) {
+                if(name == '项目规模') {
+                    name = name + '(万元)'
+                }
+                return name;
+            },
+            data:["项目规模","环比增长率(%)-右纵轴"],
+        },
+        series: {
+            barWidth: 20,
+            smooth:false,
+        },
+        color:['#05A6F3', '#FF9F40']
+    },
+}
+// 月报 (本月中标企业中标项目数量分布)
+var barChart3 = {
+    chartExtend:{
+        grid:{
+            x:8,
+            y:20,
+            x2:12,
+        },
+        xAxis: {
+            axisLabel: {
+                fontSize: 10,
+                formatter: function (val) {
+                    return val + '个';
+                }
+            }
+        },
+        yAxis(item){
+            var maxCountList = vNode.data.curWinEntCountData.rows.map(v =>{
+                return v['企业数量']
+            })
+            var maxPriceList = vNode.data.curWinEntCountData.rows.map(v =>{
+                return v['累计占比(%)-右纵轴']
+            })
+            var maxCount = Math.ceil(Math.max.apply(null,maxCountList)).toString();
+            var maxPrice = Math.ceil(Math.max.apply(null,maxPriceList)).toString();
+            maxCount = Math.ceil(maxCount / (Math.pow(10,maxCount.length -1))) * Math.pow(10,maxCount.length -1);
+            maxPrice = Math.ceil(maxPrice / (Math.pow(10,maxPrice.length -1))) * Math.pow(10,maxPrice.length -1);
+            item[0].min = 0;
+            item[1].min = 0;
+            item[0].max = maxCount;
+            item[0].interval = Math.ceil(maxCount / 5);
+            item[1].max = maxPrice;
+            item[1].interval = Math.ceil((maxPrice - 0) / 5);
+            item[0].splitLine = {
+                lineStyle:{
+                    type: 'dashed',
+                    width: 0.5
+                }
+            }
+            item[1].splitLine = {
+                show:false,
+                lineStyle:{
+                    type: 'dashed',
+                    width: 0.5
+                }
+            },
+            item[1].axisLabel = {
+                show: true,
+                fontSize: 10
+            },
+            item[0].axisLabel = {
+                margin:2,
+                fontSize: 10,
+                formatter: function(value, index){
+                    return value.toString().replace(/,/,'');
+                }
+            }
+            return item;
+        },
+        tooltip: {
+            trigger: 'axis',
+            confine: true,
+            backgroundColor:'#fff',
+            axisPointer: {
+                type: 'shadow',
+                shadowStyle:{
+                    color:'rgba(5,166,243,0.1)'
+                }
+            },
+            textStyle:{
+                color:'#171826',
+                fontSize:12
+            },
+            padding:[7,12],
+            extraCssText:'box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.08)',
+            formatter:function(params){
+                return formatterTip(params)
+            }
+        },
+        legend: {
+            show: true,
+            orient: 'horizontal',
+            icon:'circle',
+            bottom:20,
+            align:'left',
+            itemWidth: 8,
+            itemHeight: 8,
+            itemGap:20,
+            textStyle:{
+                fontSize:11,
+                rich:{
+                    a:{
+                        fontSize:16,
+                        verticalAlign:'top',
+                        align:'center',
+                        padding:[0,15,28,0]
+                    },
+                    b:{
+                        fontSize:14,
+                        align:'center',
+                        padding:[0,15,0,0],
+                        lineHeight:25
+                    }
+                }
+            },
+            formatter: function (name) {
+                if(name == '企业数量') {
+                    name = name + '(个)'
+                }
+                return name;
+            },
+            data:["企业数量","累计占比(%)-右纵轴"],
+        },
+        series: {
+            barWidth: 20,
+            smooth:false
+        },
+        color:['#05A6F3', '#FF9F40']
+    },
+}
+// 修改tooltip展示效果函数
+function formatterTip(params) {
+    var tip = '';
+    for (var i = 0; i < params.length; i++) {//这里是自己定义样式, params[i].marker 表示是否显示左边的那个小圆圈
+        params[i].value == undefined ? params[i].value = 0 : params[i].value;
+        params[i].marker = '<span style="display:inline-block;margin-right:5px;border-radius:8px;width:8px;height:8px;background-color:' +  params[i].color + '"></span>';
+        if( params[i].seriesName === '项目数量' || params[i].seriesName === '企业数量') {
+            tip = tip + params[i].marker + params[i].seriesName + ':' + params[i].value + '个' + '<br/>';
+        }else if(params[i].seriesName === '环比增长率(%)-右纵轴' || params[i].seriesName === '累计占比(%)-右纵轴'){
+            tip = tip + params[i].marker + params[i].seriesName + ':' + params[i].value + '%' + '<br/>';
+        } else {
+            tip = tip + params[i].marker + params[i].seriesName + ':' + params[i].value + '万元' + '<br/>';
+        }
+    }
+    tip += '<div style="padding-top:2px;text-align:center;color:#9B9CA3;">' + ' - ' + params[0].name + ' - ' + '</div>'
+    return tip;
+}

+ 931 - 0
src/web/staticres/big-member/js/ent_portrait.js

@@ -0,0 +1,931 @@
+var vNode = {
+    delimiters: ['${', '}'],
+    el: '#ent-portrait',
+    data () {
+        // 修改柱状条颜色为渐变色
+        this.colorGreen = [new echarts.graphic.LinearGradient(
+            0, 0, 0, 1,
+            [
+                {offset: 1, color: '#2ABED1'},
+                {offset: 0.5, color: '#2ABED1'},
+                {offset: 0, color: '#8DE0EB'}
+            ], false
+        ), '#FF9F40']
+
+        return {
+            sessKey: '$data-ent_portrait',
+            conf: {
+                // 权限查询是否完成
+                powerLoaded: false,
+                // 是否只显示完整的企业画像
+                showPortraitAll: true,
+                // 是否显示,企业全景分析
+                _4: false,
+                // 是否显示中标企业动态
+                _13: false
+            },
+            powerInfo: {},
+            tabActiveName: '1',
+            // 企业信息
+            entInfo: {
+                name: '',
+                follow: 0,
+                followSearchFinish: false,
+                entExist: true
+            },
+            // tab1中的企业基础信息
+            entBaseInfo: {
+                type: null,
+                status: null,
+                creditNo: '',
+                capital: '',
+                employeeNo: '',
+                address: '',
+                scope: '',
+                operStart: -1,
+                operEnd: -1,
+                establish: '',
+                showEntChange: false,
+                org_code: '',
+                company_code: '',
+                legal: '',
+                phone: '',
+                taxCode: ''
+            },
+            // tab2中的项目动态
+            topProject: {
+                list: [],
+                count: '',
+                pageSign: '',
+                showGetNextButton: true
+            },
+            entPortraitInfo: {},
+            stickyTop: 80,
+            singleTab: true,
+            // 年度项目统计设置
+            annualSetting:{
+                showLine: ['项目金额'],
+                axisSite: { right: ['项目金额'] }
+            },
+            // 地图配置项
+            mapSettings: mapSettings,
+            // 年度项目统计数据
+            annualData: {
+                columns: ["日期","项目数量","项目金额"],
+                rows: []
+            },
+            // 地图数据
+            mapChartData: {
+                columns: ['name', 'value'],
+                rows: []
+            },
+            // 月度中标金额
+            monthZbData: {
+                columns: [],
+                rows: []
+            },
+            // 平均折扣率
+            rateData: {
+                columns: [],
+                rows: []
+            },
+            pieChartSettings: {
+                roseType: 'radius'
+            },
+            importantCustomers: [],
+            scrollTop: 0,
+            getEntPortraitInfoTimes: 0,
+            initEchartsOptions: {
+                renderer: 'svg'
+            },
+            gotTab2: false, // 是否已经获取到tab2的数据了
+            svip: false, // 判断是否是超级订阅的企业画像
+            digshow: false, // 判断是否是超级订阅会员
+            overlayShow: true // 弹窗遮罩是否显示
+        }
+    },
+    created: function () {
+        // svip是超级订阅企业查询, 如果是超级订阅不能查看企业情报历史记录
+        var svip = utils.getParam('svip')
+        if (svip) {
+            this.svip = true
+        }
+        // 企业名称恢复
+        var eId = utils.getParam('eId')
+        if (eId) {
+          eId = decodeURIComponent(eId)
+        }
+        this.entInfo.id = eId
+        this.entInfo.name = ''
+        this.restore = this.reStoreState()
+        if (!this.restore) {
+            this.getPowerInfo()
+            // 获取企业基本信息
+            this.getEntBaseInfo()
+        }
+    },
+    mounted: function () {
+        var _this = this
+        // 动态调整sticky距离顶部的高度
+        this.getStickyTop()
+        if (this.scrollTop) {
+            setTimeout(function () {
+                $('#ent-portrait').scrollTop(_this.scrollTop)
+            }, 0)
+        }
+
+        window.addEventListener('resize', function() {
+            _this.getStickyTop()
+        })
+    },
+    watch: {
+        tabActiveName: function (newVal, oldVal) {
+            var _this = this
+            if (newVal == '2') {
+                this.$nextTick(function () {
+                    if (_this.gotTab2) {
+                        // 初始化图表
+                        if (_this.entPortraitInfo && _this.conf.showPortraitAll && !_this.singleTab) {
+                            _this.initChartsData();
+                        }
+                    } else {
+                        if (_this.conf._4) {
+                            // 获取企业画像信息-4
+                            _this.getEntPortrait(function () {
+                                _this.initChartsData()
+                            })
+                            _this.gotTab2 = true
+                            console.log('获取企业全景分析...')
+                        }
+                        // 获取企业中标动态-13
+                        if (_this.conf._13) {
+                            _this.getProjectNews()
+                            _this.gotTab2 = true
+                            console.log('获取企业中标动态...')
+                        }
+                    }
+                });
+            }
+        },
+    },
+    methods: {
+        showToast: function (message) {
+            this.$toast({
+                duration: 1500,
+                forbidClick: true,
+                message: message,
+            })
+        },
+        showLoading: function() {
+            var loading = this.$toast.loading({
+                duration: 0,
+                forbidClick: true,
+                message: '',
+            })
+            return loading
+        },
+        // 超级订阅提示弹窗取消按钮事件
+        beforeClose: function (e, done) {
+            console.log(e)
+            if (e === 'cancel') {
+                this.tabActiveName = '1'
+                done(false)
+                this.digshow = true
+                this.overlayShow = true
+            } else if (e === 'confirm') {
+                // 去开通
+                location.href = '/jyapp/vipsubscribe/introducePage'
+            }
+            this.overlayShow = true
+        },
+        // 获取画像信息
+        getEntPortrait: function (callback) {
+            var _this = this
+            var data = {
+                entId: _this.entInfo.id
+            }
+            let urls = ''
+            if (_this.svip) {
+                urls = '/bigmember/portrait/subVipPortrait/winner'
+
+            } else {
+                urls = '/bigmember/portrait/winner/getData'
+            }
+            _this.getEntPortraitInfoTimes++
+            $.ajax({
+                type: 'POST',
+                url: urls,
+                data: data,
+                success: function (res) {
+                    if (res.error_code == 0) {
+                        _this.loading.clear()
+                        if (res.data && Object.keys(res.data).length !== 0) {
+                            _this.singleTab = false
+                            // 将数据保存到data中
+                            for (var key in res.data) {
+                                _this.entPortraitInfo[key] = res.data[key]
+                            }
+
+                            if (res.data.timeRange && res.data.timeRange.start) {
+                                _this.entPortraitInfo.timeRangeStart = res.data.timeRange.start
+                            }
+                            if (res.data.timeRange && res.data.timeRange.end) {
+                                _this.entPortraitInfo.timeRangeEnd = res.data.timeRange.end
+                            }
+
+                            callback && callback()
+                        } else {
+                            if (_this.getEntPortraitInfoTimes < 5) {
+                                _this.getEntPortrait()
+                            }
+                        }
+                    }
+                },
+                error: function (error) {
+                    _this.$toast('请求失败')
+                }
+            })
+        },
+        // 获取项目动态
+        getProjectNews: function () {
+            var _this = this
+            var data = {
+                entId: _this.entInfo.id,
+                count: _this.topProject.count,
+                pageSign: _this.topProject.pageSign
+            }
+
+            if (data.pageSign) {
+                this.loading = this.showLoading()
+            }
+
+            $.ajax({
+                type: 'POST',
+                url: '/bigmember/portrait/winner/getNewMsg',
+                data: data,
+                success: function (res) {
+                    if (res.error_code == 0) {
+                        _this.loading.clear()
+                        _this.topProject.count = res.data.count
+                        if (res.data.list && $.isArray(res.data.list)) {
+                            if (!_this.topProject.pageSign) {
+                                _this.singleTab = false
+                            }
+
+                            // 修改当前pageSign值
+                            if (!_this.topProject.pageSign) {
+                                _this.topProject.list = []
+                                _this.topProject.pageSign = 'more'
+                                if(res.data.count <= 3) {
+                                    _this.topProject.showGetNextButton = false
+                                }
+                            } else if (_this.topProject.pageSign === 'more') {
+                                _this.topProject.pageSign = 'max'
+                                if(res.data.count <= 23) {
+                                    _this.topProject.showGetNextButton = false
+                                }
+                            } else if (_this.topProject.pageSign === 'max') {
+                                _this.topProject.showGetNextButton = false
+                            }
+
+                            _this.topProject.list = _this.topProject.list.concat(res.data.list)
+                        }
+                    } else {
+                        _this.$toast(res.error_msg)
+                    }
+                },
+                error: function (error) {
+                    _this.$toast('请求失败')
+                }
+            })
+        },
+        // 查询企业基础信息
+        getEntBaseInfo: function () {
+            var _this = this
+            let urls = ''
+            if (_this.svip) {
+                urls = '/bigmember/portrait/subVipPortrait/entDetail'
+            } else {
+                urls = '/bigmember/portrait/ent/detail'
+            }
+            $.ajax({
+                type: 'POST',
+                url: urls,
+                data: {
+                    entId: _this.entInfo.id
+                },
+                success: function (res) {
+                    if (res.error_code == 0) {
+                        _this.loading.clear()
+                        if (res.data && Object.keys(res.data).length !== 0) {
+                            _this.entInfo.name = res.data.entName
+                            for (var key in res.data) {
+                                _this.entBaseInfo[key] = res.data[key]
+                            }
+                        }
+                    } else {
+                        // 不显示提示信息
+                        // _this.$toast(res.error_msg)
+                    }
+                },
+                error: function (error) {
+                    console.log(error)
+                }
+            })
+        },
+        // 查询企业是否存在和企业关注状态
+        getEntFollowState: function () {
+            var _this = this
+            _this.entInfo.followSearchFinish = false
+            $.ajax({
+                type: 'POST',
+                url: '/bigmember/follow/ent/followCheck',
+                data: {
+                  entId: _this.entInfo.id
+                },
+                success: function (res) {
+                    if (res.error_code == 0) {
+                        _this.entInfo.followSearchFinish = true
+                        if (res.data) {
+                            _this.entInfo.follow = !!res.data.followed
+                            _this.entInfo.entExist = !!res.data.isShow
+                        } else {
+                            _this.entInfo.entExist = false
+                        }
+                    } else {
+                        _this.$toast(res.error_msg)
+                    }
+                },
+                error: function (error) {
+                    console.log(error)
+                }
+            })
+        },
+        changeFollowState: function () {
+            var _this = this
+            if (this.entInfo.follow) {
+                this.$dialog.confirm({
+                    title: '提示信息',
+                    message: '取消对“' + _this.entInfo.name + '”的关注?',
+                    confirmButtonColor: '#2cb7ca'
+                }).then(function () {
+                    _this.changeFollowStateRequest()
+                })
+                .catch(function () {
+                    console.log('取消操作')
+                })
+            } else {
+                this.changeFollowStateRequest()
+            }
+        },
+        // 获取权限信息
+        getPowerInfo: function () {
+            var _this = this
+            this.loading = this.showLoading()
+            $.ajax({
+                type: 'GET',
+                url: '/bigmember/use/isAdd',
+                success: function (res) {
+                    if (res.error_code == 0) {
+                        _this.conf.powerLoaded = true
+                        if (res.data) {
+                            _this.powerInfo = res.data
+                        }
+                        if (res.data && $.isArray(res.data.power)) {
+                            // 显示完整企业画像(不完整的企业画像只有中标动态)
+                            // _this.conf.showPortraitAll = true
+                            // 根据power判断权限,企业画像包含权限(4,12,13)
+                            var power = res.data.power
+                            if (power.indexOf(4) != -1 || _this.svip || res.data.viper) {
+                                // 获取企业画像信息-4
+                                _this.conf._4 = true
+                            }
+                            if (power.indexOf(13) != -1) {
+                                // 获取企业中标动态-13
+                                _this.conf._13 = true
+                            }
+                            if (_this.conf._4 || _this.conf._13) {
+                                _this.singleTab = false
+                            } else {
+                                // 如果不是超级订阅会员,点击中标信息显示提示弹窗
+                                if (!res.data.viper) {
+                                    _this.digshow = true
+                                } else {
+                                    _this.digshow = false
+                                }
+                            }
+                        }
+                        // 如果不是大会员。判断是否是超级订阅会员,不是显示弹窗
+                        if (res.data.memberStatus <= 0) {
+                            if (!res.data.viper) {
+                                _this.digshow = true
+                            } else {
+                                _this.digshow = false
+                            }
+                        }
+                        if (_this.svip || res.data.viper) {
+                            _this.entInfo.followSearchFinish = true
+                            _this.entInfo.entExist = false
+                        }
+                        if(res.data.memberStatus > 0&&(power.indexOf(4) != -1||power.indexOf(12) != -1||power.indexOf(13) != -1)) {
+                            _this.entInfo.followSearchFinish = false
+                            _this.entInfo.entExist = true
+                            _this.getEntFollowState()
+                        }
+                    } else {
+                        _this.$toast(res.error_msg)
+                    }
+                },
+                complete: function () {
+                    if (_this.loading) {
+                        _this.loading.clear()
+                    }
+                },
+                error: function (error) {
+                    console.log(error)
+                }
+            })
+        },
+        // 修改企业关注状态
+        changeFollowStateRequest: function () {
+            var _this = this
+            var loading = this.showLoading()
+            var urls = {
+                addFollow: '/bigmember/follow/ent/addFollow',
+                delFollow: '/bigmember/follow/ent/delFollow'
+            }
+            var url = !!this.entInfo.follow ? urls.delFollow : urls.addFollow
+            $.ajax({
+                type: 'POST',
+                url: url,
+                data: {
+                  entId: _this.entInfo.id
+                },
+                success: function (res) {
+                    if (res.error_code == 0) {
+                        // 清除上个页面缓存
+                     sessionStorage.removeItem('$data-ent_follow')
+                        loading.clear()
+                        if (res.data && res.data == 'success') {
+                            _this.entInfo.follow = !_this.entInfo.follow
+                        }
+
+                        if (!_this.entInfo.follow) {
+                            history.back()
+                        }
+                    } else {
+                        _this.showToast(res.error_msg)
+                    }
+                },
+                error: function (error) {
+                    console.log(error)
+                }
+            })
+        },
+        // 初始化图标数据
+        initChartsData: function () {
+            var dataSet = this.entPortraitInfo
+            // 初始化 年度项目统计数据
+            this.arrangeAnnualData(dataSet.yearData)
+            // 初始化 月度统计数据
+            this.arrangeMonthZbData(dataSet.monthData)
+            // 初始化 地图数据
+            this.arrangeMapData(dataSet.areaData)
+            // 初始化 平局折扣率数据
+            this.arrangeRateData(dataSet.rate)
+            // 初始化 饼图 客户类型分布
+            this.initPieChartData(dataSet.top10)
+            // 初始化 重要客户数据
+            this.arrangeImportantData(dataSet.topShow)
+        },
+        getStickyTop: function () {
+            this.stickyTop = $('.jy-app-header').height() - 1
+        },
+        goToEntHistory: function () {
+            // if (this.powerInfo.isSubCount) {
+            //     return this.showToast('子账号无法使用企业情报监控')
+            // }
+
+            this.savePageState()
+            var info = {
+                anchor: '企业情报监控'
+            }
+            sessionStorage.setItem('landinfo',JSON.stringify(info))
+            location.href = './ent_portrait_change?eId=' + encodeURIComponent(this.entInfo.id)
+        },
+        // 修改年度项目统计里点击浮窗显示效果
+        formatter: function (params) {
+            //移除重复的数据
+            for (var i = 0; i < params.length; i++) {
+                for (var j = params.length - 1; j > i; j--) {
+                    if (params[j].data == params[i].data) {
+                        params.splice(j, 1);
+                        break;
+                    }
+                }
+            }
+            var tip = '';
+            for (var i = 0; i < params.length; i++) {
+                // 因柱状图颜色为渐变色,此处获取到的柱状图颜色,css不能识别,需单独设置小圆点的颜色
+                params[0].marker = '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:#2ABED1"></span>'
+                if( i=== 0) {
+                    tip = tip + params[i].marker + params[i].seriesName + ':' + params[i].value + '个' + '<br/>';
+                }else if(i == 1){
+                    tip = tip + params[i].marker + params[i].seriesName + ':' + params[i].value + '万元' + '<br/>';
+                }
+            }
+            tip += '<div style="padding-top:2px;text-align:center;color:#9B9CA3;">' + ' - ' + params[0].name + ' - ' + '</div>'
+            return tip;
+        },
+        // 1. 年度项目统计图表单独配置
+        annualConfig: function (options) {
+            var that = this;
+            options.grid.bottom = 60
+            options.tooltip.axisPointer.shadowStyle.color = 'rgba(42, 190, 209,0.1)' // 修改点击柱条后背景颜色
+            options.legend.show = true // 显示底部数量、金额、圆点
+            options.yAxis[1].axisLabel.show = true; // 显示右侧y轴刻度
+            options.yAxis[1].axisLabel.formatter = function(value, index) {
+                return value.toString().replace(/,/, '')
+            }  // 去掉右轴逗号分割
+            options.series[1].lineStyle.width = 2 // 折线
+            options.series[1].lineStyle.color = '#FF9F40'
+            // 以下代码为:处理左侧y轴与右侧y轴刻度保持在同一X轴水平线上
+            var maxCountList = this.annualData.rows.map(function(v){
+                return v['项目数量']
+            })
+            var maxPriceList = this.annualData.rows.map(function(v){
+                return v['项目金额']
+            })
+
+            var maxCount = Math.ceil(Math.max.apply(null,maxCountList)).toString();// 取出数量中最大值
+            var maxPrice = Math.ceil(Math.max.apply(null,maxPriceList)).toString();// 取出金额中最大值
+            // var minPrice = Math.min.apply(null,maxPriceList);// 去除金额最小值
+            maxPrice = Math.ceil(maxPrice / (Math.pow(10,maxPrice.length -1))) * Math.pow(10,maxPrice.length -1)
+            maxCount = Math.ceil(maxCount / (Math.pow(10,maxCount.length -1))) * Math.pow(10,maxCount.length -1)
+            var item = options.yAxis
+            item[0].min = 0;
+            item[1].min = 0;
+            item[0].max = maxCount;
+            item[0].interval = Math.ceil(maxCount / 5);
+            item[1].max = maxPrice;
+            item[1].interval = Math.ceil((maxPrice - 0) / 5);
+
+            // 处理点击浮窗显示效果
+            options.tooltip.formatter = function(params) {
+                return that.formatter(params)
+            }
+            options.legend.formatter = function (name) {
+                var wnYuan = ['金额', '项目金额']
+                var ge = ['数量', '项目数量']
+                if (wnYuan.indexOf(name) !== -1) {
+                    name += '(万元)-右轴'
+                } else if (ge.indexOf(name) !== -1) {
+                    name += '(个)'
+                }
+                return name;
+            }
+            return options
+        },
+        // 2. 月度中标金额(折线图)
+        lineChartConfig: function (options) {
+            options.yAxis[0].name = '中标金额(万元)';
+            options.legend.itemGap = 20;
+            options.tooltip.formatter = function(params) {
+                var tip = '';
+                for (var i = 0; i < params.length; i++) {
+                    params[i].marker = '<span style="display:inline-block;margin-right:5px;border-radius:8px;width:8px;height:8px;background-color:' + params[i].color + ';"></span>'
+                    if(params[i].value[1] !== undefined && params[i].value[1] !== null && !isNaN(params[i].value[1])) {
+                        tip = tip + params[i].marker + params[i].seriesName + params[i].name + '中标金额:' + params[i].value[1].toString().replace(/,/,'') + '万元' +'<br/>';
+                    }
+                }
+                tip += '<div style="padding-top:2px;text-align:center;color:#9B9CA3;">' + ' - ' + params[0].name + ' - ' + '</div>'
+                return tip;
+            }
+            return options;
+        },
+        // 3. 地图配置项
+        mapConfig: function (options) {
+            var _this = this
+            var arr = this.mapChartData.rows
+            // 最大值、最小值
+            var maxNum = Math.max.apply(Math, arr.map(function(o) {return o.value}))
+            var minNum = Math.min.apply(Math, arr.map(function(o) {return o.value}))
+
+            options.visualMap.min = minNum;
+            options.visualMap.max = maxNum < 100 ? 100 : maxNum;
+
+            // 设置最大值
+            options.graphic[options.graphic.length - 1].children[0].style.text = maxNum > 100 ? maxNum : 100
+            options.graphic[options.graphic.length - 1].children[1].style.text = 1;
+            options.visualMap.min = 1;
+            options.visualMap.max = maxNum < 100 ? 100 : maxNum;
+            options.graphic[0].children[0].style.text = '项目数量(个)'
+            options.tooltip.formatter = function (params) {
+                var index = params.dataIndex
+                var item = _this.mapChartData.rows[index]
+                var string = ''
+                if (item) {
+                    if (item.value && item.amount) {
+                        string = item.name + '<br/>项目数量:' + item.value + '个<br/>中标金额:' + item.amount + '万元'
+                    } else if (item.value) {
+                        string = item.name + '<br/>项目数量:' + item.value + '个'
+                    } else if (item.amount) {
+                        string = item.name + '<br/>中标金额:' + item.amount + '万元'
+                    }
+                }
+                return string
+            }
+            return options
+        },
+        // 4. 客户平均折扣率配置
+        rateConfig: function (options) {
+            options.color = ['#FB483D', '#05A6F3', '#0BD991', '#FF9F40','#8E6DF2','#C0C4CC'];
+            options.xAxis[0].axisLabel.margin = 12
+            options.yAxis[0].axisLabel.formatter = '{value}%'
+            options.grid = {
+                top: 20,
+                right: 16,
+                bottom: 70,
+                left: 10
+            }
+            options.legend.textStyle.padding = [0, 18, 0,0];
+            options.legend.left = 16;
+            options.legend.bottom = 10;
+            options.tooltip.formatter = function(params) {
+                var tip = '';
+                for (var i = 0; i < params.length; i++) {
+                    params[i].marker = '<span style="display:inline-block;margin-right:5px;border-radius:8px;width:8px;height:8px;background-color:' + params[i].color + ';"></span>'
+                    if(params[i].value[1] === undefined || params[i].value[1] == null) {
+                        tip = tip + params[i].marker + params[i].seriesName + ':--<br/>';
+                    } else {
+                        tip = tip + params[i].marker + params[i].seriesName + ':' + params[i].value[1] + '%<br/>';
+                    }
+                }
+                tip += '<div style="padding-top:2px;text-align:center;color:#9B9CA3;">' + ' - ' + params[0].name + ' - ' + '</div>'
+                return tip;
+            }
+            return options;
+        },
+        // 整理年度项目统计数据
+        arrangeAnnualData: function (data) {
+            if (!data) return
+
+            var rows = [];
+            var count = 0;
+            for (var key in data) {
+                var item = data[key]
+                // 统计数据总数是否为0
+                count += item.Count
+                count += item.Money
+                rows.push({
+                    '日期': parseInt(key),
+                    '项目数量': item.Count,
+                    '项目金额': Math.round(item.Money / 10000)
+                })
+            }
+
+            // rows = utils.bSort(rows, '日期').reverse()
+            rows = utils.bSort(rows, '日期')
+
+            // 数据总量为0,不赋值
+            if (count != 0) {
+                this.annualData.rows = rows;
+            }
+        },
+        // 整理月度项目统计数据
+        arrangeMonthZbData: function (data) {
+            if (!data) return
+            var rows = []
+            var columns = ['月份']
+            var count = 0
+
+            // 1. 先将月份提取出来, 并排序
+            var yearArr = []
+            for (var key in data) {
+                yearArr.push(parseInt(key))
+            }
+            yearArr.sort(function (a, b) { return a - b })
+
+            // 2. 循环12个月份,并进行处理
+            yearArr.forEach(function (item) {
+                columns.push(item + '年')
+            })
+            for (var i = 1; i <= 12; i++) {
+                var columnsItem = {}
+                columns.forEach(function (item) {
+                    var value = ''
+                    if (item == '月份') {
+                        value = i + '月'
+                    } else if (/年/g.test(item)) {
+                        if (data[item.slice(0, -1)]) {
+                            value = data[item.slice(0, -1)][i]
+                            value = (value / 10000).fixed(2)
+                            count += parseInt(value)
+                        }
+                    }
+                    columnsItem[item] = value
+                })
+                rows.push(columnsItem)
+            }
+
+            // 数据总量为0,不赋值
+            if (count != 0) {
+                this.monthZbData.columns = columns;
+                this.monthZbData.rows = rows;
+            }
+        },
+        // 整理主要市场分布(中国地图)数据
+        arrangeMapData: function(data) {
+            if (!data) return
+
+            var mapRows = []
+            var count = 0
+            if (data && $.isArray(data)) {
+                data.forEach(function (n) {
+                    count += n.projectCount
+
+                    mapRows.push({
+                        name: n.areaName,
+                        value: n.projectCount,
+                        amount: (n.bidamountCount / 10000).fixed(2)
+                    })
+                })
+            }
+
+            // 数据总量为0,不赋值
+            if (count != 0) {
+                this.mapChartData.rows = mapRows;
+            }
+        },
+        // 整理平均折扣率数据
+        arrangeRateData: function (data) {
+            if (!data) return
+            var rows = []
+            var columns = ['日期', '全部客户']
+            var count = 0
+
+            for (var c in data) {
+                if (c !== '全部客户') {
+                    columns.push(c)
+                }
+            }
+            // 获取年份数组
+            var yearArr = []
+            for (var key in data['全部客户']) {
+                yearArr.push(key)
+            }
+            yearArr.sort(function (a, b) { return a - b })
+
+            yearArr.forEach(function (item) {
+                var rowsItem = {
+                    '日期': item + '年'
+                }
+                for (var k in data) {
+                    count += (data[k][item] * 100)
+                    rowsItem[k] = data[k][item] == null  ? null : (data[k][item] * 100).fixed(2)
+                }
+                rows.push(rowsItem)
+            })
+
+            // 数据总量为0,不赋值
+            if (count != 0) {
+                this.rateData.columns = columns;
+                this.rateData.rows = rows;
+            }
+        },
+        // 初始化饼图
+        initPieChartData: function (d) {
+            if (!d) return
+            var that = this
+            var arr = []
+            var data = JSON.parse(JSON.stringify(d))
+            // 降序排列
+            data.sort(function (a, b) {
+                return b.bidamount_share - a.bidamount_share
+            })
+            data.forEach(function (item){
+              arr.push(item.buyerClass,item.bidamount_share,item.bidamount_count,item.project_count,item.rate_avg)
+            })
+            var normal =['行业','中标金额占比','中标金额','项目数量','平均折扣率'];
+            var newArr = that.arrTrans(5,arr);
+            newArr.unshift(normal)
+            chartOptions.deformPieChart.dataset.source = newArr;
+            chartOptions.deformPieChart.tooltip.formatter = function(params){
+                var tip = '';
+                var data = params.data;
+                params.marker = '<span style="display:inline-block;margin-right:5px;border-radius:8px;width:8px;height:8px;background-color:' + params.color +'"></span>';
+                var percent = '<span style="padding-left:13px;">中标金额占比:' + (data[1]*100).fixed(2) + '%</span></br>';
+                var scale = '<span style="padding-left:13px;">中标金额:' + utils.moneyUnit(data[2].fixed(2)) + '</span></br>';
+                var count = '<span style="padding-left:13px;">项目数量:' + data[3] + '个</span></br>';
+                var rate = (typeof data[4] === 'number' && !isNaN(data[4])) ? '<span style="padding-left:13px;">平均折扣率:' + (data[4]*100).fixed(2) + '%</span></br>' : '';
+                tip = params.marker + params.name +'<br/>' + percent + scale + count + rate
+                return tip;
+            }
+            chartOptions.deformPieChart.legend.formatter = null
+            that.$nextTick(function(){
+                var ref = that.$refs.pieChart;
+                var pieChart = echarts.init(ref, null, that.initEchartsOptions);
+                pieChart.setOption(chartOptions.deformPieChart);
+                pieChart.resize();
+            })
+        },
+        arrTrans: function(num, arr) { // 一维数组转换为二维数组
+            var iconsArr = [];
+            arr.forEach(function(item, index) {
+                var page = Math.floor(index / num); // 计算该元素为第几个素组内
+                if (!iconsArr[page]) { // 判断是否存在
+                    iconsArr[page] = [];
+                }
+                iconsArr[page].push(item);
+            });
+            return iconsArr;
+        },
+        // 整理重要客户数据
+        arrangeImportantData: function (data) {
+            if (!data) return
+            var arr = []
+            if ($.isArray(data)) {
+                data.forEach(function (list) {
+                    var i1 = {
+                        title: list.buyerclass,
+                        list: []
+                    }
+                    if (list.topData && $.isArray(list.topData)) {
+                        list.topData.forEach(function (item) {
+                            i1.list.push({
+                                name: item.BuyerName,
+                                money: item.CountMoney,
+                                count: item.CountProject,
+                                rate: item.AvgRate ? (item.AvgRate*100).fixed(2) : item.AvgRate,
+                                time: new Date(item.lastTime * 1000).pattern('yyyy/MM/dd'),
+                                percent: item.CountMoney / list.topData[0].CountMoney*100 + '%'
+                            })
+                        })
+                    }
+
+                    if (!list.buyerclass || ($.isArray(list.topData) && list.topData.length === 0)) {
+                        // console.log('此数据为空')
+                    } else {
+                        arr.push(i1)
+                    }
+                })
+            }
+            this.importantCustomers = arr
+        },
+        // 去公告详情页
+        toProjectDetail: function (item) {
+            this.savePageState()
+            if (item.id) {
+                var href = '/jyapp/article/content/' + item.id + '.html'
+                location.href = href
+            }
+        },
+        // 去中标单位画像
+        toUnitPortrayal: function (item) {
+            this.savePageState()
+            if (item.name) {
+                location.href = 'unit_portrayal?entName=' + item.name
+            }
+        },
+        savePageState: function () {
+            this.scrollTop = $('#ent-portrait').scrollTop()
+            var data = {
+                conf: this.conf,
+                tabActiveName: this.tabActiveName,
+                entInfo: this.entInfo,
+                entBaseInfo: this.entBaseInfo,
+                topProject: this.topProject,
+                entPortraitInfo: this.entPortraitInfo,
+                powerInfo: this.powerInfo,
+                singleTab: this.singleTab,
+                scrollTop: this.scrollTop,
+                gotTab2: this.gotTab2
+            }
+            sessionStorage.setItem(this.sessKey, JSON.stringify(data))
+        },
+        reStoreState: function () {
+            var $data = sessionStorage.getItem(this.sessKey)
+            if ($data) {
+                $data = JSON.parse($data)
+                // 如果恢复的企业名称和当前url企业名称不同,则清除缓存,重新请求
+                if (this.entInfo.id !== $data.entInfo.id) {
+                    sessionStorage.removeItem(this.sessKey)
+                    return false
+                }
+                this.tabActiveName = $data.tabActiveName
+                Object.assign(this.conf, $data.conf || {})
+                Object.assign(this.entInfo, $data.entInfo || {})
+                Object.assign(this.entBaseInfo, $data.entBaseInfo || {})
+                Object.assign(this.topProject, $data.topProject || {})
+                Object.assign(this.entPortraitInfo, $data.entPortraitInfo || {})
+                Object.assign(this.powerInfo, $data.powerInfo || {})
+                this.singleTab = $data.singleTab
+                this.scrollTop = $data.scrollTop
+                this.gotTab2 = $data.gotTab2
+                sessionStorage.removeItem(this.sessKey)
+            }
+            return !!$data
+        }
+    }
+}
+var vueComponent = new Vue(vNode)

+ 372 - 0
src/web/staticres/big-member/weixin/css/ent_portrait.css

@@ -0,0 +1,372 @@
+/* 企业情报详情 + 企业情报历史记录 css */
+.j-main [class$=-label] {
+    font-size: .24rem;
+    line-height: .36rem;
+    color: #9B9CA3;
+}
+.j-main [class$=-text] {
+    font-size: .26rem;
+    line-height: .4rem;
+    color: #171826;
+    word-break: break-all;
+}
+.tags {
+    display: flex;
+}
+.tag {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    padding: .02rem .16rem;
+    font-size: .24rem;
+    font-weight: 700;
+    line-height: .36rem;
+    border-radius: .08rem;
+}
+.tags .tag:not(:last-of-type) {
+    margin-right: .08rem;
+}
+.tag-success {
+    color: #2ABED1;
+    background-color: rgba(42, 190, 209, 0.08);
+}
+
+/* 企业情报详情 */
+.ent-header {
+    min-height: 1.08rem;
+    margin-bottom: .2rem;
+    padding: .28rem .36rem;
+    background-color: #fff;
+}
+.ent-title {
+    flex: 1;
+    margin: 0 .2rem;
+    font-size: .28rem;
+    line-height: .4rem;
+    color: #171826;
+    word-break: break-all;
+}
+.ent-tabs-container {
+    flex: 1;
+}
+.ent-tabs-container .van-tabs__content {
+    /* @extends  .j-main */
+    flex: 1;
+    overflow-y: scroll;
+    overflow-x: hidden;
+    -webkit-overflow-scrolling: touch;
+}
+
+.van-tab {
+    font-size: .28rem;
+    line-height: .4rem;
+}
+.van-tabs--line .van-tabs__wrap {
+    height: .96rem;
+}
+.van-tabs__line {
+    margin-bottom: .08rem;
+}
+.single-tab .van-tabs__line {
+    display: none;
+}
+.single-tab .van-tab {
+    padding: 0 .32rem;
+    justify-content: flex-start;
+    font-weight: 700;
+    font-size: .36rem;
+    line-height: .52rem;
+    color: #171826!important;
+}
+.single-tab .van-tab__text {
+    margin-top: .08rem;
+}
+
+.tab-card:not(:first-of-type) {
+    margin-top: .16rem;
+}
+.tab-card:last-of-type {
+    margin-bottom: .44rem;
+}
+.tab-card {
+    display: flex;
+    align-items: center;
+    flex-direction: column;
+    padding: .16rem 0;
+}
+.tab-card.charts {
+    padding: 0 .32rem;
+    align-items: flex-start;
+}
+/* 降低echarts层级,确保不遮挡固定定位头部 */
+.tab-card.charts .tab-card-content {
+    z-index: 1;
+}
+.tab-card.customers {
+    padding: 0 .32rem;
+}
+
+.tab-card-title {
+    padding: .32rem 0 .12rem;
+    width: 100%;
+    font-size: .36rem;
+    font-weight: 700;
+    line-height: .52rem;
+    color: #171826;
+}
+.tab-card-content {
+    width: 100%;
+}
+.tab-card-tip {
+    margin-bottom: .32rem;
+    font-size: .2rem;
+    line-height: .3rem;
+    color: #9B9CA3;
+}
+
+.card-row {
+    display: flex;
+    padding: .24rem 0;
+    width: 100%;
+}
+.card-column {
+    display: flex;
+    flex-direction: column;
+    width: 100%;
+    flex: 1;
+    padding: 0 .32rem;
+}
+.card-column [class^=ent-]:not(:first-of-type) {
+    margin-top: .08rem;
+}
+
+.tab-card.cell-list {
+    padding: 0;
+}
+.tab-card.cell-list .tab-card-title,
+.tab-card.cell-list .project-info-item {
+    padding-left: .32rem;
+    padding-right: .32rem;
+}
+
+.ent-change-history {
+    flex-direction: row;
+    justify-content: space-between;
+    padding: .3rem .32rem;
+}
+.ent-change-history .j-icon {
+    width: .32rem;
+    height: .32rem;
+    transform: rotateZ(180deg);
+}
+.ent-change-l {
+    font-size: .32rem;
+    line-height: .48rem;
+    color: #171826;
+}
+
+.zb-info .ent-info-label {
+    font-size: .2rem;
+    line-height: .28rem;
+    color: #5F5E64;
+}
+
+.zb-info .ent-info-text {
+    font-weight: 400;
+}
+
+.zb-info .card-column {
+    align-items: center;
+    padding: 0;
+}
+
+.zb-time-frame {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    padding-top: .16rem;
+    width: calc(100% - .64rem);
+    font-size: .2rem;
+    line-height: .28rem;
+    color: #C0C4CC;
+}
+
+.project-info-item {
+    padding: .24rem 0;
+}
+.project-name {
+    margin-bottom: .16rem;
+    font-size: .28rem;
+    line-height: .4rem;
+    color: #171826;
+}
+.project-info {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+}
+.project-time {
+    font-size: .2rem;
+    line-height: .36rem;
+    color: #9B9CA3;
+}
+.show-more {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    height: .96rem;
+    font-size: .28rem;
+    line-height: .4rem;
+    color: #2ABED1;
+}
+
+.project-tab-container .cell-list {
+    margin: 0;
+}
+
+
+.client-list{
+    margin-bottom: .16rem;
+}
+.client .c-thead{
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding-top: .2rem;
+}
+.client .c-name,.client .item-name{
+    width: 2.84rem;
+    margin-right: .24rem;
+}
+.client .c-count,.client .item-count{
+    width: .9rem;
+    font-size: .22rem;
+    text-align: center;
+    margin-right: .24rem;
+}
+.client .c-rate,.client .item-rate{
+    width: 1.1rem;
+    font-size: .22rem;
+    text-align: center;
+    margin-right: .24rem;
+}
+.client .c-time,.client .item-time{
+    flex: 1;
+    font-size: .22rem;
+    text-align: center;
+}
+.client .c-name{
+    font-weight: bold;
+    font-size: .3rem;
+    color: #171826;
+}
+.client .c-count,.client .c-rate,.client .c-time{
+    color: #9B9CA3;
+    white-space: nowrap;
+}
+
+.client .progress-bar-container {
+    background-color: #fff;
+}
+
+.client .progress-bar-item {
+    display: flex;
+    flex-direction: column;
+    justify-content: space-around;
+    padding-bottom: .2rem;
+}
+
+.client .progress-bar-item .item-label {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 0.16rem 0 0.04rem;
+}
+
+.client .item-name {
+    font-size: .22rem;
+    line-height:.36rem;
+    color: #171826;
+    text-decoration: underline;
+}
+
+.client .item-count {
+    font-size: .22rem;
+    color: #171826;
+    line-height:.36rem;
+}
+
+.client .item-progress {
+    position: relative;
+    height: .4rem;
+    line-height: .4rem;
+    background-color: #EDEFF2;
+    border-radius: 0 .28rem .28rem 0;
+    overflow: hidden;
+}
+.client .item-money{
+    position: absolute;
+    left: .16rem;
+    top: 50%;
+    transform: translateY(-50%);
+    color: #8F5828;
+    font-size: .22rem;
+    z-index: 10;
+}
+.client .item-progress-count {
+    position: absolute;
+    top: 0;
+    left: 0;
+    height: 100%;
+    border-radius: 0 .28rem .28rem 0;
+    z-index: 9;
+}
+.client .active-progress{
+    background: #FAE7CA;
+}
+
+
+/* 企业情报历史记录 css */
+.ent-change-list .header-time {
+    display: flex;
+    align-items: center;
+    padding: 0 .32rem;
+    width: 100%;
+    height: .64rem;
+    font-size: .24rem;
+    line-height: .36rem;
+    color: #9B9CA3;
+}
+
+.change-type-list {
+    padding: 0 .32rem;
+}
+.change-type-item {
+    padding: .32rem 0;
+}
+.change-type-header {
+    margin-bottom: .16rem;
+    font-size: .32rem;
+    line-height: .48rem;
+    color: #171826;
+}
+.change-type {
+    display: flex;
+}
+.change-type .change-type-label {
+    margin-right: .32rem;
+    font-size: .28rem;
+    line-height: .4rem;
+    color: #5F5E64;
+}
+.change-type .change-type-text {
+    flex: 1;
+    font-size: .28rem;
+    line-height: .4rem;
+    color: #9B9CA3;
+    word-break: break-all;
+}
+
+#ent-portrait-change .border-line-b:after {
+    width: calc(100% + 0.32rem);
+}

+ 67 - 1
src/web/staticres/common-module/collection/css/index.css

@@ -380,6 +380,7 @@
   line-height: .44rem;
 }
 .unitType .van-tab__text.van-tab__text--ellipsis .tabtitle{
+  max-width: 1.32rem;
   flex: 1;
 }
 .unitType .van-tab__text.van-tab__text--ellipsis .optionnum{
@@ -409,7 +410,7 @@
   display: flex;
   width: .48rem;
   height: .48rem;
-  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF4AAABQCAMAAACnBjIsAAAAk1BMVEXOzs7Ozs7Pz8/Ozs7Ozs4AAADOzs7Ozs729vvOzs4st8rz9fo5vM7f7/aX2eRJwNHk8fei3Oc0uczv9Pnr8/nZ7fTS6/K95e5mydhfx9ZQwtM+vc8xuMvo8vjK6PDE5u+r3+nk5OeC0t9wzdtXxdVDvtCy4euN1eF3z9xbxtXM6fG14uuN1eKJ1ODV7PN80N1ty9q7gJB9AAAACHRSTlOt8/DDJwAoJUOi5sAAAAF6SURBVFjD7dlrb4IwFAZgdLodW7moqFwVkKuXbf//1y20WU4yJksK54Oz5yMNzxde8rap8bKgmqnxNjcWQDU8nc6QJ5jUIOX5hJSHheY1r3nNa17zT8FvfYeQNwtmm2S8YzPGCpOIjwPWTkPDu7nQwy0Jv/GFvtwBBc89qR9IksNPQl8faXJfCz3aAwmfMTElKPH8D72SegJK/MF+79Utqa9Aid8tWbjreXEldQuU+G3YBu58971E6hWo8U1/oC9Sz0CRN+2+SO8jsVqDIo/+b6E+rsXaiavz4AT3/PNSrHhcva3Qjy7dTLXjbwaWYZxLv+xmirHcHdy1btP9Mc1CPAriEarc9X/+mo784rYzyk5h46GP1YfVOoxH3+qrPnUe+Cf6WH0j8VhJ7NqpvkE8+rX0b1h9Y/DofzCcaD/+HjNDvqTYwt6+9YRmh3zF/FPwYGH6CXjhV5THh1X2Lw8/mte85jWvec0/Ms8nj3upx9PpK+GF6sSYzb8A2b742RBkpdEAAAAASUVORK5CYII=) no-repeat;
+  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAcCAYAAAAEN20fAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTI4MkNFMEU3NTlCMTFFNzgzMUFFMzA2NTJBNTJDQTAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTI4MkNFMEY3NTlCMTFFNzgzMUFFMzA2NTJBNTJDQTAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MjgyQ0UwQzc1OUIxMUU3ODMxQUUzMDY1MkE1MkNBMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MjgyQ0UwRDc1OUIxMUU3ODMxQUUzMDY1MkE1MkNBMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ps2Yfq0AAAIUSURBVHjaxJdZK0RhGMePIV/AkiRbIiG58gl8ALusoYgiLojImpQkLsgSubAUl4qyXomEklxYSpLdzZR1sv2feqbeTu8cZ2bOzPnXr87zznvO+Z93ed5nfBJX9hQT5Q9mwLSfySbmQQYItJhkggZglk3cggIzjPiCOZAFbCAH3FlMMEFrIpvjerBNFxYvm5gGeRzT9Yj9R4sXTUyCQo4PQLXYwRtG6B0ToITjJ5AJ3mVGPLWNfcA4KOX4G+SDK5nbVHAGUjxgYhSUC23NYN3RsA2BKLAGkg00MQwqhLZF0K81f5XgAwSwmSQDTNDHVQltJ6AM/GoZOQINHAeBDZDghpEBUCPEVpAOXv5b0QoP45JgZhPEu2iiTohpBIrAuZ6tZb+hjPM+KZjNxDlhoo8zpagu4QN1GSE9s/tvjkPYTKyO5/QK02vXMhtRnDWi8Iv7hDiU10yMxjO6QZOq7YLzxY+rRkhtYFeIw8AWiJb07QCtqrY3Pt6tzqZftb74a6wSM1Eqw+2S+ymLHrtyDsh0qcoDpHCeugjQAjod7JoFVyslR6IyLk04J0iRYJ9KO0l/GrFGd05GLVFiOlW1yUxcg1xhxxlu5JXXi02jzycvzid3a4X/dCjZnqKqeboUTxshDXKCUmsMTBlVPenRLy/ae6FtB9QaWcbp1SMoZlMPXInbjPyj44yoXukBq+DGyHLuT4ABAFb/aZSnxxGmAAAAAElFTkSuQmCC) no-repeat;
   background-size: contain;
 }
 
@@ -432,4 +433,69 @@
   text-align: CENTER;
   color: #5f5e64;
   line-height: .44rem;
+}
+
+.select-area-box {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+}
+
+.select-area-box .select-area-pop {
+  flex: 1;
+  overflow-x: hidden;
+  overflow-y: scroll;
+}
+
+.select-area-box .van-index-bar__sidebar {
+  top: 40%;
+}
+
+.select-area-box .fix-bottom {
+  box-sizing: border-box;
+  height: 66px;
+  width: 100%;
+}
+
+.select-area-box .area-card-box {
+  background: #fff;
+  padding: 12px 8px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  flex-wrap: wrap;
+}
+
+.select-area-box .area-card-box .area-card-item {
+  background: #F5F6F7;
+  border-radius: 4px;
+  color: #5F5E64;
+  font-size: 14px;
+  line-height: 30px;
+  padding: 0 20px;
+  margin: 8px;
+}
+
+.select-area-box .area-card-box .area-card-item.active {
+  position: relative;
+  background: #E8FAFD;
+  color: #2ABED1;
+}
+
+.select-area-box .area-card-box .area-card-item.active::after {
+  content: "";
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  background: url(/jyapp/big-member/image/icon-check.png);
+  width: 14px;
+  height: 14px;
+  background-size: 100% 100%;
+}
+
+.select-area-box .area-index .van-index-anchor {
+  height: 24px;
+  line-height: 24px;
+  background: #F5F6F7;
+  color: #5F5E64;
 }

+ 1 - 0
src/web/staticres/common-module/collection/js/area-mobile.js

@@ -229,6 +229,7 @@ var areaComponent = {
       console.log(value.join(','))
       let params = {
         name: 'areaItem',
+        t:t,
         data: value
       }
       this.$emit('confirm', params)

+ 17 - 3
src/web/staticres/common-module/collection/js/cate-mobile.js

@@ -22,7 +22,7 @@ var cateComponentTemplate = `<div class="j-container">
         <div class="tabtitle">
           {{Object.keys(item)[0]}}
         </div>
-        <div class="optionnum">36/{{item[Object.keys(item)[0]].length}}</div>
+        <div class="optionnum" v-if="selectNum(item)!=0">{{selectNum(item)}}/{{item[Object.keys(item)[0]].length}}</div>
       </template>
       <van-cell
           clickable
@@ -68,7 +68,7 @@ var cateComponent = {
     return {
       tablist: [
         {
-          "党政机关事业单位": ['人大', '政协', '党委办','组织', '宣传', '统战', '纪委', '政府办', '发改委','财政','教育','科技','工信','民政', '民宗', '人社', '公安', '检察院','法院', '司法', '应急管理', '军队', '自然资源', '生态环境','住建', '市政',  '城管', '交通', '水利','农业','气象','文旅', '卫健委','医疗','学校','档案', '体育', '政务中心', '机关事务', '国资委','海关','税务', '市场监管', '商务','人行', '银保监', '证监', '审计', '出版广电','统计', '公共资源交易', '社会团体','气象'],
+          '党政机关事业单位': ['人大', '政协', '党委办','组织', '宣传', '统战', '纪委', '政府办', '发改委','财政','教育','科技','工信','民政', '民宗', '人社', '公安', '检察院','法院', '司法', '应急管理', '军队', '自然资源', '生态环境','住建', '市政',  '城管', '交通', '水利','农业','气象','文旅', '卫健委','医疗','学校','档案', '体育', '政务中心', '机关事务', '国资委','海关','税务', '市场监管', '商务','人行', '银保监', '证监', '审计', '出版广电','统计', '公共资源交易', '社会团体','气象'],
         },
         {
           "企业": ['传媒','采矿业', '电信行业', '金融业', '建筑业', '能源化工', '农林牧渔','批发零售', '信息技术', '运输物流', '制造业', '住宿餐饮']  
@@ -146,6 +146,7 @@ var cateComponent = {
         data.type = false
       }else{
         data.type = true
+        this.selectNum(item)
       }
 
       // 模块全部选中,全选自动勾选
@@ -164,6 +165,16 @@ var cateComponent = {
       })
       this.checkedAll = !industryAll
     },
+    // 选择的数量
+    selectNum: function(item) {
+      let numArr = []
+      item[Object.keys(item)[0]].forEach(function(data) {
+        if(data.type) {
+          numArr.push(data.type)
+        }
+      })
+      return numArr.length
+    },
     resetAll:function() {
       let params = {
         name: 'cateItem',
@@ -174,6 +185,7 @@ var cateComponent = {
     // 确定按钮
     onConfirm:function() {
       let cateArr = []
+      let t = ''
       this.tablist.forEach(function(item, index){
         item[Object.keys(item)[0]].forEach(function(data, i) {
           if(data.type){
@@ -181,9 +193,11 @@ var cateComponent = {
           }
         })
       })
+      t = '采购单位' + cateArr.length
       let params = {
         name: 'cateItem',
-        data: cateArr
+        data: cateArr,
+        t: t
       }
       this.$emit('confirm', params)
     }

+ 4 - 3
src/web/staticres/common-module/collection/js/index-wx.js

@@ -68,15 +68,16 @@ var vNode = {
   methods: {
     // 判断是否是有筛选条件
     getUserRoot: function() {
+      let _this = this
       $.ajax({
         url: '/publicapply/bidcoll/power',
         type: 'POST',
         success: function(res) {
           console.log(res)
-          if(res.data) {
-            this.screenShow = true
+          if(res.data.entniche || res.data.member || res.data.vip > 0) {
+            _this.screenShow = true
           } else {
-            this.screenShow = false
+            _this.screenShow = false
           }
         }
       })

+ 6 - 4
src/web/staticres/common-module/collection/js/index.js

@@ -68,15 +68,16 @@ var vNode = {
   methods: {
     // 判断是否是有筛选条件
     getUserRoot: function() {
+      let _this = this
       $.ajax({
         url: '/publicapply/bidcoll/power',
         type: 'POST',
         success: function(res) {
           console.log(res)
-          if(res.data) {
-            this.screenShow = true
+          if(res.data.entniche || res.data.member || res.data.vip > 0) {
+            _this.screenShow = true
           } else {
-            this.screenShow = false
+            _this.screenShow = false
           }
         }
       })
@@ -155,7 +156,8 @@ var vNode = {
       })
     },
     // 取消收藏
-    collecClick: function(id) {
+    collecClick: function(e,id) {
+      e.stopPropagation()
       let _this = this
       let params = {
         baction: 'R',

+ 16 - 2
src/web/staticres/common-module/collection/js/industry-mobile.js

@@ -21,7 +21,7 @@ var industryComponentTemplate = `<div class="j-container">
         <div class="tabtitle">
           {{Object.keys(item)[0]}}
         </div>
-        <div class="optionnum">36/{{item[Object.keys(item)[0]].length}}</div>
+        <div class="optionnum" v-if="selectNum(item)!=0">{{selectNum(item)}}/{{item[Object.keys(item)[0]].length}}</div>
       </template>
       <van-cell
           clickable
@@ -259,6 +259,7 @@ var industryComponent = {
         data.type = false
       }else{
         data.type = true
+        this.selectNum(item)
       }
 
       // 模块全部选中,全选自动勾选
@@ -277,6 +278,16 @@ var industryComponent = {
       })
       this.checkedAll = !industryAll
     },
+    // 选择的数量
+    selectNum: function(item) {
+      let numArr = []
+      item[Object.keys(item)[0]].forEach(function(data) {
+        if(data.type) {
+          numArr.push(data.type)
+        }
+      })
+      return numArr.length
+    },
     resetAll:function() {
       let params = {
         name: 'industryItem',
@@ -287,6 +298,7 @@ var industryComponent = {
     // 确定按钮
     onConfirm:function() {
       let industryArr = []
+      let t = ''
       this.tablist.forEach(function(item, index){
         item[Object.keys(item)[0]].forEach(function(data, i) {
           if(data.type){
@@ -296,9 +308,11 @@ var industryComponent = {
           }
         })
       })
+      t = '行业' + industryArr.length
       let params = {
         name: 'industryItem',
-        data: industryArr
+        data: industryArr,
+        t: t
       }
       this.$emit('confirm', params)
     }

+ 17 - 5
src/web/staticres/common-module/collection/js/keyword-mobile.js

@@ -21,7 +21,7 @@ var keywordComponentTemplate = `<div class="j-container">
         <div class="tabtitle">
           {{Object.keys(item)[0]}}
         </div>
-        <div class="optionnum">36/{{item[Object.keys(item)[0]].length}}</div>
+        <div class="optionnum" v-if="selectNum(item)!=0">{{selectNum(item)}}/{{item[Object.keys(item)[0]].length}}</div>
       </template>
       <van-cell
           clickable
@@ -152,6 +152,7 @@ var keywordComponent = {
         data.type = false
       }else{
         data.type = true
+        this.selectNum(item)
       }
 
       // 模块全部选中,全选自动勾选
@@ -170,6 +171,16 @@ var keywordComponent = {
       })
       this.checkedAll = !industryAll
     },
+    // 选择的数量
+    selectNum: function(item) {
+      let numArr = []
+      item[Object.keys(item)[0]].forEach(function(data) {
+        if(data.type) {
+          numArr.push(data.type)
+        }
+      })
+      return numArr.length
+    },
     resetAll:function() {
       let params = {
         name: 'keywordItem',
@@ -180,18 +191,19 @@ var keywordComponent = {
     // 确定按钮
     onConfirm:function() {
       let keywordArr = []
+      let t = ''
       this.tablist.forEach(function(item, index){
         item[Object.keys(item)[0]].forEach(function(data, i) {
           if(data.type){
-            console.log(data)
-            let str = Object.keys(item)[0] +'_'+data.name
-            keywordArr.push(str)
+            keywordArr.push(data.name)
           }
         })
       })
+      t = '关键词' + keywordArr.length
       let params = {
         name: 'keywordItem',
-        data: keywordArr
+        data: keywordArr,
+        t: t
       }
       this.$emit('confirm', params)
     }

+ 56 - 4
src/web/staticres/common-module/collection/js/notice-mobile.js

@@ -22,7 +22,7 @@ var noticeComponentTemplate = `<div class="j-container">
         <div class="tabtitle">
           {{Object.keys(item)[0]}}
         </div>
-        <div class="optionnum">36/{{item[Object.keys(item)[0]].length}}</div>
+        <div class="optionnum" v-if="selectNum(item)!=0">{{selectNum(item)}}/{{item[Object.keys(item)[0]].length}}</div>
       </template>
       <van-cell
           :class="{checkActive:item[Object.keys(item)[1]]==true}"
@@ -72,6 +72,7 @@ var noticeComponent = {
   },
   created () {
     this.getIndustryData()
+    this.setStates()
   },
   methods: {
     // 获取行业数据
@@ -136,6 +137,32 @@ var noticeComponent = {
       })
       _this.tablist = maxarr
     },
+    // 回显数据
+    setStates: function() {
+      let arr1 = ['拟建','预告','合同','中标']
+      this.tablist.forEach(function(item) {
+        console.log(item)
+        item[Object.keys(item)[0]].forEach(function(sum) {
+          arr1.forEach(data => {
+            if (data == sum.name) {
+              sum.type = true
+            } else if(data == '拟建') {
+              if(Object.keys(item)[0] == '拟建项目') {
+                item[Object.keys(item)[0]].forEach(function(d) {
+                  d.type = true
+                })
+              }
+            } else if(data == '预告') {
+              if(Object.keys(item)[0] == '招标预告') {
+                item[Object.keys(item)[0]].forEach(function(d) {
+                  d.type = true
+                })
+              }
+            }
+          });
+        })
+      })
+    },
     // 总全选
     checkBoxAll:function() {
       if(this.checkedAll){
@@ -178,8 +205,10 @@ var noticeComponent = {
         data.type = false
       }else{
         data.type = true
+        this.selectNum(item)
       }
 
+
       // 模块全部选中,全选自动勾选
       const allselect = item[Object.keys(item)[0]].some(function(sum, index){
         if(sum.type == false){
@@ -196,6 +225,16 @@ var noticeComponent = {
       })
       this.checkedAll = !industryAll
     },
+    // 选择的数量
+    selectNum: function(item) {
+      let numArr = []
+      item[Object.keys(item)[0]].forEach(function(data) {
+        if(data.type) {
+          numArr.push(data.type)
+        }
+      })
+      return numArr.length
+    },
     resetAll:function() {
       let params = {
         name: 'noticeItem',
@@ -206,18 +245,31 @@ var noticeComponent = {
     // 确定按钮
     onConfirm:function() {
       let noticeArr = []
+      let t = ''
       this.tablist.forEach(function(item, index){
         item[Object.keys(item)[0]].forEach(function(data, i) {
           if(data.type){
             console.log(data)
-            let str = Object.keys(item)[0] +'_'+data.name
-            noticeArr.push(str)
+            let str = ''
+            // 选择拟建项目传拟建,选择招标预告传预告
+            if (data.name === '拟建项目') {
+              str = '拟建'
+              noticeArr.push(str)
+            } else if(data.name === '招标预告') {
+              str = '预告'
+              noticeArr.push(str)
+            } else {
+              str = data.name
+              noticeArr.push(str)
+            }
           }
         })
       })
+      t = '公告类型' + noticeArr.length
       let params = {
         name: 'noticeItem',
-        data: noticeArr
+        data: noticeArr,
+        t: t
       }
       this.$emit('confirm', params)
     }

+ 17 - 1
src/web/staticres/vipsubscribe/css/subscribe_list.css

@@ -158,10 +158,26 @@ font-weight: bold;
 
 .filter_tab {
   position: relative;
-  padding: 10px .32rem;
+  /* padding: 10px .32rem; */
   background: #fff;
   font-size: 15px;
 }
+.filter_tab .van-dropdown-menu__title{
+  padding: 0 8px 0 0;
+}
+.filter_tab .van-dropdown-menu__title .rootstyletitle{
+  font-size: .28rem;
+  font-weight: 500;
+  color: #c0c4cc;
+}
+.filter_tab .van-dropdown-menu__title .rootstyletitle .root_open{
+  padding: .04rem .12rem;
+  border: 1px solid #fb483d;
+  border-radius: 9px;
+  font-size: .2rem;
+  color: #fb483d;
+}
+
 
 /*.filter_tab:after {
   position: absolute;

+ 109 - 0
src/web/staticres/vipsubscribe/js/historypush.js

@@ -0,0 +1,109 @@
+
+var vm = new Vue({
+  el: '#select-meau',
+  components: {
+    dateComponent: dateComponent,
+    areaComponent: areaComponent,
+    industryComponent: industryComponent,
+    cateComponent: cateComponent,
+    keywordComponent: keywordComponent,
+    noticeComponent: noticeComponent,
+    rootComponent: rootComponent
+  },
+  data () {
+    return {
+      // 时间参数
+      time:'',
+      // 地区参数
+      area: '',
+      // 行业参数
+      subscopeclass: '',
+      // 采购单位
+      buyerclass: '',
+      // 关键词
+      key: '',
+      // 公告类型
+      subtype: '',
+      screenShow: false
+    }
+  },
+  created () {
+    this.getUserRoot()
+  },
+  methods: {
+    // 判断是否是有筛选条件
+    getUserRoot: function() {
+      let _this = this
+      $.ajax({
+        url: '/publicapply/bidcoll/power',
+        type: 'POST',
+        success: function(res) {
+          console.log(res)
+          if(res.data.entniche || res.data.member || res.data.vip > 0) {
+            _this.screenShow = true
+          } else {
+            _this.screenShow = false
+          }
+        }
+      })
+    },
+    confirm: function(data){
+      this.setToggle()
+      if(data.name === 'dateItem'){
+        if ((data.data.start / 1000).toFixed(0) == 0 && (data.data.end / 1000).toFixed(0) == 0) {
+          this.time = ''
+        } else if((data.data.start / 1000).toFixed(0) == 0 && (data.data.end / 1000).toFixed(0) != 0) {
+          this.time = '_' + (data.data.end / 1000).toFixed(0)
+        } else if((data.data.start / 1000).toFixed(0) != 0 && (data.data.end / 1000).toFixed(0) == 0) {
+          this.time = (data.data.start / 1000).toFixed(0) + '_'
+        } else {
+          this.time = (data.data.start / 1000).toFixed(0) + '_' + (data.data.end / 1000).toFixed(0)
+        }
+        FTAGData(this.time)
+        return
+      } else if(data.name === 'areaItem'){
+        this.area = data.data.join('、')
+      } else if(data.name === 'industryItem'){
+        this.subscopeclass = data.data.join(',')
+      } else if(data.name === 'cateItem'){
+        this.buyerclass = data.data.join(',')
+      } else if(data.name === 'keywordItem'){
+        this.$refs.keywordItem.toggle()
+      } else if(data.name === 'noticeItem'){
+        this.subtype = data.data.join(',')
+      } else if(data.name === 'rootItem'){
+        tointroducepage()
+      }
+      this.getAjaXParams()
+    },
+    cancel: function(data){
+      console.log(data)
+      if(data.name === 'dateItem'){
+        firstTime = (data.data.start / 1000).toFixed(0) + '_' + (data.data.end / 1000).toFixed(0)
+        initpage()
+      } else if(data.name === 'areaItem'){
+        // this.area = data.data.join('、')
+      } else if(data.name === 'industryItem'){
+        // this.subscopeclass = data.data.join(',')
+      } else if(data.name === 'cateItem'){
+        // this.subscopeclass = data.data.join(',')
+      } else if(data.name === 'keywordItem'){
+        // this.subscopeclass = data.data.join(',')
+      } else if(data.name === 'noticeItem'){
+        // this.subscopeclass = data.data.join(',')
+      }
+      this.setToggle()
+    },
+    getAjaXParams: function() {
+      ajaxFun(this.time, this.area, this.subscopeclass, this.buyerclass, this.key, this.subtype)
+    },
+    setToggle: function() {
+      this.$refs.dateItem.toggle(false)
+      this.$refs.areaItem.toggle(false)
+      this.$refs.industryItem.toggle(false)
+      this.$refs.cateItem.toggle(false)
+      this.$refs.keywordItem.toggle(false)
+      this.$refs.noticeItem.toggle(false)
+    }
+  }
+})

+ 454 - 0
src/web/templates/big-member/wx/page_ent_portrait.html

@@ -0,0 +1,454 @@
+<!DOCTYPE html>
+<html lang="zh-CN" style="font-size: 50px;">
+<head>
+    <!--S-meta-->
+    <meta charset="UTF-8">
+        <meta name="viewport"
+            content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+        <meta name="apple-mobile-web-app-capable" content="yes">
+        <meta name="format-detection" content="telephone=yes"/>
+        <meta name="apple-mobile-web-app-status-bar-style" content="black">
+        <meta http-equiv="X-UA-Compatible" content="ie=edge">
+        <meta http-equiv="X-UA-Compatible" content="ie=edge">
+        <title>企业画像</title>
+        <script src="/big-member/js/rem.js"></script>
+        <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/reset-css@4.0.1/reset.min.css />
+        <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/vant@2.8.2/lib/index.css />
+        <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/vant@2.8.2/lib/icon/local.css />
+        <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/weixin/css/public.css?v={{Msg "seo" "version"}}'>
+        <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/weixin/css/j-icons.css?v={{Msg "seo" "version"}}'>
+        <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/weixin/css/buy_commit.css?v={{Msg "seo" "version"}}'>
+        <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/weixin/css/vant-reset.css?v={{Msg "seo" "version"}}' />
+        <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/weixin/css/ent_portrait.css?v={{Msg "seo" "version"}}' />
+</head>
+<style>
+    .bidinfo{
+        font-size: 0.28rem;
+        font-weight: 500;
+        text-align: CENTER;
+        color: #c0c4cc;
+        line-height: 20px;
+    }
+    .bid_upgrade{
+        padding: 0.04rem 0.12rem;
+        border: 1px solid #fb483d;
+        border-radius: 0.18rem;
+        font-size: 0.2rem;
+        font-weight: 500;
+        color: #fb483d;
+        line-height: 0.4rem;
+    }
+    .vip_openDialog{
+        padding: 0.56rem 0 0.64rem;
+        height: 7.4rem;
+        background: url('{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/image/openVip.png') no-repeat;
+        background-size: contain;
+        top: 53%;
+    }
+    .vip_openDialog .van-dialog__content{
+        /* height: 6.04rem; */
+        padding: 0;
+    }
+    .vip_openDialog .van-dialog__content .vip_head{
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        width: 100%;
+        font-size: 0.32rem;
+        font-weight: 400;
+        text-align: CENTER;
+        color: #ffffff;
+        line-height: 0.48rem;
+    }
+    .vip_openDialog .van-dialog__content .vip_content{
+        display: flex;
+        flex-direction: column;
+        margin-top: 0.88rem;
+        width: 100%;
+        font-size: 0.28rem;
+        font-weight: 400;
+        text-align: CENTER;
+        color: #686868;
+        line-height: 0.44rem;
+        text-shadow: 0px 0px 28px 0px rgba(0,0,0,0.08); 
+    }
+    .vip_openDialog .van-dialog__content .vip_head .vip_extend{
+        font-size: 0.26rem;
+    }
+    .van-tabs__content .van-overlay{
+        height: 85%;
+        background-color: rgba(255,255,255,0);
+        backdrop-filter: blur(5px);
+        top: 4.4rem;
+    }
+    .vip_openDialog .van-dialog__footer{
+        margin-top: 0.48rem;
+        padding: 0 0.62rem;
+        display: flex;
+        justify-content: space-between;
+    }
+    .vip_openDialog .van-button.van-button--default{
+        flex: none;
+        width: 2.16rem;
+        height: 0.72rem;
+        font-size: 0.32rem;
+        font-weight: 400;
+        text-align: CENTER;
+        color: #fff;
+        background: #2cb7ca;
+        border-radius: 0.12rem;
+        box-shadow: 0px 0px 0.56rem 0px rgba(0,0,0,0.08);
+    }
+    .vip_openDialog .van-button.van-button--default.van-dialog__cancel{
+        font-size: 0.32rem;
+        font-weight: 400;
+        text-align: CENTER;
+        color: #5f5e64;
+        background: #ffffff;
+        border: 1px solid rgba(0,0,0,0.10);
+        border-radius: 0.14rem;
+    }
+</style>
+<body>
+<div class="j-container">
+    {{include "/big-member/header.html"}}
+    <div id="ent-portrait" class="j-main" v-cloak>
+        <div class="j-header ent-header">
+            <span class="j-icon icon-company"></span>
+            <span class="ent-title">${ entInfo.name }</span>
+            <span
+                class="j-icon"
+                :class="!!entInfo.follow ? 'icon-favorite' : 'icon-add-favorite'"
+                @click="changeFollowState"
+                v-if="entInfo.followSearchFinish && entInfo.entExist"
+            ></span>
+            <van-loading v-if="!entInfo.followSearchFinish" size="24px"></van-loading>
+        </div>
+        <van-tabs
+            class="ent-tabs-container"
+            :class="singleTab ? 'single-tab' : ''"
+            v-model="tabActiveName"
+            sticky
+            color="#2cb7ca"
+            title-active-color="#2cb7ca"
+            title-inactive-color="#5F5E64"
+            line-width="0.48rem"
+            v-if="conf.powerLoaded && conf.showPortraitAll"
+            :offset-top="stickyTop">
+            <van-tab name="1" title="企业信息">
+                <div class="bg-white tab-card">
+                    <div class="card-row">
+                        <div class="card-column ent-type">
+                            <div class="ent-type-label">公司类型</div>
+                            <div class="ent-type-text">${entBaseInfo.type ? entBaseInfo.type : '-'}</div>
+                        </div>
+                    </div>
+                    <div class="card-row">
+                        <div class="card-column ent-business-term">
+                            <div class="ent-business-term-label">营业期限</div>
+                            <div class="ent-business-term-text">
+                                <span>${entBaseInfo.operStart == -1 ? '-' : new Date(entBaseInfo.operStart*1000).pattern('yyyy/MM/dd')}</span>
+                                <span> 至 </span>
+                                <span>${entBaseInfo.operEnd == -1 ? '-' : new Date(entBaseInfo.operEnd*1000).pattern('yyyy/MM/dd')}</span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="card-row">
+                        <div class="card-column social-credit-code">
+                            <div class="ent-registration-label">统一社会信用代码</div>
+                            <div class="ent-registration-text">${entBaseInfo.creditNo ? entBaseInfo.creditNo : '-'}</div>
+                        </div>
+                    </div>
+                    <div class="card-row">
+                        <div class="card-column tax-identification-number">
+                            <div class="ent-registration-label">纳税人识别号</div>
+                            <div class="ent-registration-text">${entBaseInfo.taxCode ? entBaseInfo.taxCode : '-'}</div>
+                        </div>
+                    </div>
+                    <div class="card-row">
+                        <div class="card-column business-registration-number">
+                            <div class="ent-registration-label">工商注册号</div>
+                            <div class="ent-registration-text">${entBaseInfo.company_code ? entBaseInfo.company_code : '-'}</div>
+                        </div>
+                    </div>
+                    <div class="card-row">
+                        <div class="card-column organization-code">
+                            <div class="ent-info-label">组织机构代码</div>
+                            <div class="ent-info-text">${entBaseInfo.org_code ? entBaseInfo.org_code : '-'}</div>
+                        </div>
+                        <div class="card-column organization-code">
+                            <div class="ent-info-label">联系方式</div>
+                            <div class="ent-info-text">${entBaseInfo.phone ? entBaseInfo.phone : '-'}</div>
+                        </div>
+                    </div>
+                    <div class="card-row">
+                        <div class="card-column registered-capital">
+                            <div class="ent-info-label">注册资本</div>
+                            <div class="ent-info-text">${entBaseInfo.capital ? entBaseInfo.capital+'万元' : '-'}</div>
+                        </div>
+                        <div class="card-column registered-capital">
+                            <div class="ent-info-label">法人姓名</div>
+                            <div class="ent-info-text">${entBaseInfo.legal ? entBaseInfo.legal : '-'}</div>
+                        </div>
+                    </div>
+                    <div class="card-row">
+                        <div class="card-column ent-establish">
+                            <div class="ent-info-label">成立日期</div>
+                            <div class="ent-info-text">
+                                ${(!entBaseInfo.establish || entBaseInfo.establish == -1) ? '-' : new Date(entBaseInfo.establish*1000).pattern('yyyy/MM/dd')}
+                            </div>
+                        </div>
+                        <div class="card-column ent-status">
+                            <div class="ent-info-label">经营状态</div>
+                            <div class="ent-info-text">${entBaseInfo.status ? entBaseInfo.status : '-'}</div>
+                        </div>
+                    </div>
+                    <div class="card-row">
+                        <div class="card-column ent-employee">
+                            <div class="ent-info-label">人员规模(工商年报-参保人数,仅供参考)</div>
+                            <div class="ent-info-text">${entBaseInfo.employeeNo ? entBaseInfo.employeeNo : '-'}</div>
+                        </div>
+                    </div>
+                    <div class="card-row">
+                        <div class="card-column registered-capital">
+                            <div class="ent-info-label">注册地址</div>
+                            <div class="ent-info-text">${entBaseInfo.address ? entBaseInfo.address : '-'}</div>
+                        </div>
+                    </div>
+                    <div class="card-row">
+                        <div class="card-column registered-capital">
+                            <div class="ent-info-label">经营范围</div>
+                            <div class="ent-info-text">${entBaseInfo.scope ? entBaseInfo.scope : '-'}</div>
+                        </div>
+                    </div>
+                </div>
+                <div class="bg-white tab-card ent-change-history" @click="goToEntHistory" v-if="!svip">
+                    <div class="ent-change-l">企业情报历史记录</div>
+                    <div class="j-icon icon-back base-icon"></div>
+                </div>
+            </van-tab>
+            <van-tab name="2" v-if="!singleTab">
+                <template #title>
+                    <span class="bidinfo">中标信息</span>
+                    <span class="bid_upgrade">升级</span>
+                </template>
+                <van-dialog
+                v-model="digshow"
+                show-cancel-button
+                width="6.06rem"
+                :before-close="beforeClose"
+                class="vip_openDialog"
+                :overlay="overlayShow"
+                confirm-button-text="去开通"
+                cancel-button-text="再想一想"
+                >
+                    <div class="vip_head">
+                        <span>您暂无使用权限</span>
+                        <span class="vip_extend">开通超级订阅,查看企业画像,<br/>竞争对手实力尽展示。</span>
+                    </div>
+                    <div class="vip_content">
+                        <span>中标信息统计</span>
+                        <span>重点客户分析</span>
+                        <span>客户类型分布</span>
+                        <span>年度项目统计</span>
+                        <span>市场区域分布</span>
+                        <span>...</span>
+                    </div>
+                </van-dialog>
+                <div class="bg-white tab-card" v-if="conf._4">
+                    <div class="card-row zb-info">
+                        <div class="card-column">
+                            <div class="ent-info-label">项目数量</div>
+                            <div class="ent-info-text">${entPortraitInfo.project_count ? entPortraitInfo.project_count + '个' : '0'}</div>
+                        </div>
+                        <div class="card-column">
+                            <div class="ent-info-label">项目金额</div>
+                            <div class="ent-info-text">${entPortraitInfo.bidamount_count ? utils.moneyUnit(entPortraitInfo.bidamount_count) : '0'}</div>
+                        </div>
+                        <div class="card-column">
+                            <div class="ent-info-label">项目省份</div>
+                            <div class="ent-info-text">${entPortraitInfo.area_count ? entPortraitInfo.area_count + '个' : '-'}</div>
+                        </div>
+                        <div class="card-column">
+                            <div class="ent-info-label">项目客户</div>
+                            <div class="ent-info-text">${entPortraitInfo.buyer_count ? entPortraitInfo.buyer_count + '个' : '-'}</div>
+                        </div>
+                    </div>
+                    <div class="zb-time-frame border-line-t">
+                        <span>数据统计范围:</span>
+                        <span>${entPortraitInfo.timeRangeStart ? new Date(entPortraitInfo.timeRangeStart * 1000).pattern('yyyy/MM/dd') : '2016'}</span>
+                        <span>-</span>
+                        <span>${entPortraitInfo.timeRangeEnd ? new Date(entPortraitInfo.timeRangeEnd * 1000).pattern('yyyy/MM/dd') : '至今'}</span>
+                    </div>
+                </div>
+                <div class="j-container empty" v-if="conf._13 && !conf._4 && topProject.list.length === 0">
+                    <div class="j-img img-empty empty-img"></div>
+                    <p class="empty-text">暂无项目动态</p>
+                </div>
+                <div class="bg-white tab-card cell-list" v-show="conf._13 && topProject.list.length !== 0">
+                    <div class="tab-card-title">项目动态</div>
+                    <div class="tab-card-content">
+                        <ul class="project-info-list">
+                            <li
+                                class="project-info-item border-line-b clickable"
+                                v-for="(item,index) in topProject.list"
+                                @click="toProjectDetail(item)"
+                            >
+                                <div class="project-name">${item.title}</div>
+                                <div class="project-info">
+                                    <span class="tags">
+                                        <span class="tag tag-success" v-if="item.area">${item.area}</span>
+                                        <span class="tag tag-success" v-if="item.bidstatus">${item.bidstatus}</span>
+                                        <span class="tag tag-success" v-if="item.bidamount">${utils.moneyUnit(item.bidamount)}</span>
+                                    </span>
+                                    <span class="project-time">${item.firsttime ? new Date(item.firsttime * 1000).pattern('yyyy-MM-dd') : '-'}</span>
+                                </div>
+                            </li>
+                            <li
+                                class="show-more"
+                                v-if="topProject.showGetNextButton"
+                                @click="getProjectNews">查看更多</li>
+                        </ul>
+                    </div>
+                </div>
+                <div class="bg-white tab-card charts" v-if="conf._4 && tabActiveName == '2' && annualData.rows.length !== 0">
+                    <div class="tab-card-title">年度项目统计</div>
+                    <!-- e-charts和sticky同时使用时候,需要手动降低css层级(z-index: 1),确保tooltip不遮挡固定定位头部 -->
+                    <div class="tab-card-content">
+                        <ve-histogram
+                            height="284px"
+                            :colors="colorGreen"
+                            :data="annualData"
+                            :init-options="initEchartsOptions"
+                            :after-config="annualConfig"
+                            :settings="annualSetting"
+                            :extend="barChart.chartExtend">
+                        </ve-histogram>
+                    </div>
+                    <div class="tab-card-tip">注:项目金额指所有项目的中标金额之和,少数缺失的中标金额,用项目预算补充。</div>
+                </div>
+                <div class="bg-white tab-card charts"  v-if="conf._4 && tabActiveName == '2' && monthZbData.rows.length !== 0">
+                    <div class="tab-card-title">月度中标金额统计</div>
+                    <div class="tab-card-content">
+                        <ve-line
+                            height="284px"
+                            :data="monthZbData"
+                            :init-options="initEchartsOptions"
+                            :after-config="lineChartConfig"
+                            :extend="chartOptions.lineChart">
+                        </ve-line>
+                    </div>
+                    <div class="tab-card-tip">注:少数缺失的中标金额,用项目预算补充。</div>
+                </div>
+                <div class="bg-white tab-card charts" v-if="conf._4 && tabActiveName == '2' && mapChartData.rows.length !== 0">
+                    <div class="tab-card-title">市场区域分布</div>
+                    <div class="tab-card-content">
+                        <ve-map
+                            height="300px"
+                            :data="mapChartData"
+                            :init-options="initEchartsOptions"
+                            :after-config="mapConfig"
+                            :settings="mapSettings.chartSettings"
+                            :extend="mapSettings.chartExtend">
+                        </ve-map>
+                    </div>
+                </div>
+                <div class="bg-white tab-card charts"  v-if="conf._4 && tabActiveName == '2' && rateData.rows.length !== 0">
+                    <div class="tab-card-title">各类客户平均折扣率</div>
+                    <div class="tab-card-content">
+                        <ve-line
+                            height="314px"
+                            :data="rateData"
+                            :init-options="initEchartsOptions"
+                            :after-config="rateConfig"
+                            :extend="chartOptions.lineChart">
+                        </ve-line>
+                    </div>
+                    <div class="tab-card-tip">注:平均折扣率=(全部项目预算-全部中标金额)/全部项目预算,是指价格减让部分与原价的比率,仅统计预算和中标金额同时存在的项目。</div>
+                </div>
+                <div class="bg-white tab-card charts"  v-show="conf._4 && tabActiveName == '2' && entPortraitInfo.top10 && entPortraitInfo.top10.length != 0">
+                    <div class="tab-card-title">客户类型分布</div>
+                    <div class="tab-card-content">
+                        <div ref="pieChart" style="height: 360px;"></div>
+                    </div>
+                    <div class="tab-card-tip">注:各客户类型占比以中标金额计算,最多展示占比排名前十的客户类型。</div>
+                </div>
+                <div class="bg-white tab-card customers client"  v-show="conf._4 && tabActiveName == '2' && importantCustomers.length !== 0">
+                    <div class="tab-card-title">重点客户</div>
+                    <div class="tab-card-content">
+                        <div class="client-list" v-for="c in importantCustomers">
+                            <div class="c-thead">
+                                <strong class="c-name">${c.title}</strong>
+                                <span class="c-count">中标数量</span>
+                                <span class="c-rate">平均折扣率</span>
+                                <span class="c-time">最近合作日期</span>
+                            </div>
+                            <div class="progress-bar-container">
+                                <div class="progress-bar-item" v-for="(item,index) in c.list" :key="index">
+                                    <div class="item-label">
+                                        <span class="ellipsis-2 item-name" @click="toUnitPortrayal(item)">${item.name}</span>
+                                        <span class="item-count">${item.count ? item.count + '个' : item.count}</span>
+                                        <span class="item-rate">${(item.rate != null) ? item.rate + '%' : '--'}</span>
+                                        <span class="item-time">${item.time}</span>
+                                    </div>
+                                    <div class="item-progress">
+                                        <span class="item-money" v-if="item.money > 0">${utils.moneyUnit(item.money)}</span>
+                                        <span class="item-progress-count active-progress" :style="{width: item.percent}"></span>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </van-tab>
+        </van-tabs>
+        <div class="j-main project-tab-container" v-if="conf.powerLoaded && !conf.showPortraitAll">
+            <div class="j-container empty" v-show="topProject.list.length === 0">
+                <div class="j-img img-empty empty-img"></div>
+                <p class="empty-text">暂无项目动态</p>
+            </div>
+            <div class="j-container bg-white tab-card cell-list" v-show="topProject.list.length !== 0">
+                <div class="j-header tab-card-title">项目动态</div>
+                <div class="j-main tab-card-content">
+                    <ul class="project-info-list">
+                        <li
+                            class="project-info-item border-line-b clickable"
+                            v-for="(item,index) in topProject.list"
+                            @click="toProjectDetail(item)"
+                        >
+                            <div class="project-name">${item.title}</div>
+                            <div class="project-info">
+                                <span class="tags">
+                                    <span class="tag tag-success" v-if="item.area">${item.area}</span>
+                                    <span class="tag tag-success" v-if="item.bidstatus">${item.bidstatus}</span>
+                                    <span class="tag tag-success" v-if="item.bidamount">${utils.moneyUnit(item.bidamount)}</span>
+                                </span>
+                                <span class="project-time">${item.firsttime ? new Date(item.firsttime * 1000).pattern('yyyy-MM-dd') : '-'}</span>
+                            </div>
+                        </li>
+                        <li
+                            class="show-more"
+                            v-if="topProject.showGetNextButton"
+                            @click="getProjectNews">查看更多</li>
+                    </ul>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!--S-当前页面的资源-->
+<script src=//cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js></script>
+<script src=//cdn.jsdelivr.net/npm/vant@2.8.2/lib/vant.min.js></script>
+<script src=//cdn.jsdelivr.net/npm/echarts@4.8.0/dist/echarts.min.js></script>
+<script src=//cdn.jsdelivr.net/npm/v-charts@1.19.0/lib/index.min.js></script>
+<script src=//cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js></script>
+<script src='{{Msg "seo" "cdn"}}/big-member/js/utils.js?v={{Msg "seo" "version"}}'></script>
+
+<!-- <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/antiRes/js/mainHook.js?v={{Msg "seo" "version"}}'></script> -->
+<script src='{{Msg "seo" "cdn"}}/big-member/js/echarts_option.js?v={{Msg "seo" "version"}}'></script>
+<script src='{{Msg "seo" "cdn"}}/big-member/js/chart_options.js?v={{Msg "seo" "version"}}'></script>
+<script src='{{Msg "seo" "cdn"}}/big-member/js/ent_portrait.js?v={{Msg "seo" "version"}}'></script>
+{{include "/common/baiducc.html"}}
+</body>
+</html>

File diff suppressed because it is too large
+ 30 - 4
src/web/templates/weixin/historypush.html


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