Browse Source

统计 健康管理、上门入户访视

chenyue 4 years ago
parent
commit
7d7589a663

+ 9 - 1
api/home-api.js

@ -6,7 +6,15 @@
	    //获取省市区  type:省1,市2,区3  
		getDistrict:function(data) {
            return httpRequest.post("common/district", {data: data})
    },		
    	},	
	    //获取社区医院  
		getCommunityHospital:function(data) {
            return httpRequest.get("hospitals/"+data.code+"/community_hospitals", {data: {}})
    	},	
	    //获取专科医院 
		getSpecialistHospital:function(data) {
            return httpRequest.get("hospitals/specialist_hospitals", {data: data})
    	},		
    }
    exports.homeAPI = homeAPI;

+ 10 - 0
app/statistics/css/common.css

@ -932,3 +932,13 @@ body .el-table th.gutter{
	color:#12B7F5;
	cursor: pointer;
}
.el-button--ff9526{
	background: #ff9526;
    border: 1px solid #ff9526;
    color: #ffffff;
}
.el-button--ff9526:focus, .el-button--ff9526:hover {
    color: #ffffff;
    border-color: #FFAA00;
    background-color: #FFAA00;
}

+ 2 - 2
app/statistics/html/comprehensive-analysis.html

@ -104,12 +104,12 @@
                            <div class="mt5 c-f16 l-name">代预约量</div>
                        </div>
                    </li>
                    <li>
                    <!--<li>
                        <div class="tag" :class="{'active': index==21}" @click="changeTag(21)">
                            <div id="index_21" class="c-f18">{{topDatas['index_21']}}</div>
                            <div class="mt5 c-f16 l-name">绑定微信</div>
                        </div>
                    </li>
                    </li>-->
                    <li>
                        <div class="tag" :class="{'active': index==20}" @click="changeTag(20)">
                            <div id="index_20" class="c-f18">{{topDatas['index_20']}}</div>

+ 137 - 0
app/statistics/html/comprehensive-query.html

@ -0,0 +1,137 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>综合查询</title>
    <meta name="author" content="yihu.com" />
    <meta name="format-detection" content="telephone=no" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"
    />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
    <link rel="stylesheet" type="text/css" href="../../../css/font-awesome.min.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/cross.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/flex.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/element-ui.css" />
    <link href="../../../plugins/toastr/toastr.min.css" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="../css/common.css" />
</head>
<style>
.mainBlocktop {
    height: 170px;
	background: -webkit-linear-gradient(top, #5a83ff , #3b6cfe); /* Safari 5.1 - 6.0 */
	background: -o-linear-gradient(bottom, #5a83ff, #3b6cfe); /* Opera 11.1 - 12.0 */
	background: -moz-linear-gradient(bottom, #5a83ff, #3b6cfe); /* Firefox 3.6 - 15 */
	background: linear-gradient(to bottom, #5a83ff , #3b6cfe); /* 标准的语法(必须放在最后) */
	border-radius: 6px;
    color: #fff;
    font-size: 16px;
}
.mainBlockbottom {
    height: 170px;
    font-size: 16px;
	background: -webkit-linear-gradient(top, #396cfe ,#1954fd); /* Safari 5.1 - 6.0 */
	background: -o-linear-gradient(bottom, #396cfe, #1954fd); /* Opera 11.1 - 12.0 */
	background: -moz-linear-gradient(bottom, #396cfe, #1954fd); /* Firefox 3.6 - 15 */
	background: linear-gradient(to bottom, #396cfe , #1954fd); /* 标准的语法(必须放在最后) */
    border-radius: 6px;
    color: #fff;
}
.el-radio-button:first-child .el-radio-button__inner{
	border-radius: 15px 0 0 15px;
}
.el-radio-button:last-child .el-radio-button__inner{
	border-radius:  0 15px 15px 0;
}
</style>
<body style="margin: 0;overflow-x: auto;">
    <div id="main" class="c-hide "  v-loading.fullscreen.lock="isloading">
        <header-tab appname="综合查询" isback="true" isrefresh="true"></header-tab>
        <div class="p20 bgc-f2f3f5">  
        	<div  style="border:1px solid #d7dce6">
		        <div class="ui-grid  bgc-f2f3f5">
		        	<div class="ui-col-0 pr15" style="width: 320px;border-right:1px solid #d7dce6;overflow-y:auto;" :style="{ height: height + 'px' }">
		        		<el-tree class="bgc-f2f3f5" ref="tree"  :data="treedata" show-checkbox node-key="id" :props="defaultProps">
						</el-tree>
		        	</div>
		        	<div class="ui-col-1 bgc-fff p20">
		        		<div class="searchDiv">
		        			<el-radio v-model="radio" label="1">按签约年度:</el-radio>
		        			<el-select v-model="chooseYear" style="width:120px;" class="pr20">
				                <el-option v-for="(item , index) in years" :key="index" :label="item" :value="item"></el-option>
				            </el-select>
				            <el-radio v-model="radio" label="2">创建时间:</el-radio>
				            <el-date-picker v-model="start" type="date" unlink-panels placeholder="开始日期" value-format="yyyy-MM-dd" class="w160" :clearable="false" :picker-options="pickerOptions">
							</el-date-picker>
							<span class="c-999">-</span>
							<el-date-picker v-model="end" type="date" unlink-panels placeholder="结束日期" value-format="yyyy-MM-dd"  class="w160" :clearable="false" :picker-options="pickerOptions">
							</el-date-picker>
		        		</div>
		        		<div class="searchDiv mt20">
		        			<label class="pl20 c-333 c-f14" for="" v-if="initlevel == 4||initlevel == 3">地区:</label>
		        			<el-select v-model="areaCode" style="width:120px;" class="pr20" v-if="initlevel == 4||initlevel == 3" @change="selChange(3)">
				                <el-option v-for="(item , index) in areaList" :key="index" :label="item.name" :value="item.code"></el-option>
				            </el-select>
		        			<label class="pl20 c-333 c-f14" for="">社区:</label>
		        			<el-select v-model="communityCode" style="width:200px;" class="pr20"  @change="selChange(4)">
				                <el-option v-for="(item , index) in communityList" :key="index" :label="item.name" :value="item.code"></el-option>
				            </el-select>
		        			<label class="pl20 c-333 c-f14" for="">团队:</label>
		        			<el-select v-model="teamCode" style="width:150px;" class="pr20">
				                <el-option v-for="(item , index) in teamList" :key="index" :label="item.name" :value="item.code"></el-option>
				            </el-select>
				            <el-button type="primary" size="mini" @click="searchHandle">查询</el-button>
				            <el-button type="ff9526" size="mini">导出</el-button>
		        		</div>
			        	<div>
			        		<el-table border :data="tabledata" style="width: 100%" class="mt20" v-loading="isloading">
			        			<el-table-column  type="index" label="序号" width="50" align="center"></el-table-column>
								<el-table-column  prop="name" label="地区" align="center"></el-table-column>
								<el-table-column  prop="name" label="社区" align="center"></el-table-column>
								<el-table-column  prop="name" label="团队" align="center"></el-table-column>
								<el-table-column :prop="item.prop" :label="item.label"  align="right" header-align="center" v-for="(item,index) in tableHeader" :key="index">
			                    </el-table-column>
							</el-table>
							<div class="c-t-right mt20">
								<el-pagination 
							      @size-change="handleSizeChange"
							      @current-change="handleCurrentChange"
							      :current-page.sync="currentPage"
							      :page-size="currentSize"
							      layout="total, prev, pager, next, jumper"
							      :total="datatotal">
							    </el-pagination>
							</div>
			        	</div>
		        	</div>
		        </div>
	        </div>
        </div>
        <!--模态框组件-->
        <vuedals></vuedals>
    </div>
    <script src="../../../js/vue.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/element-ui.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../plugins/toastr/toastr.min.js"></script>
    <script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../api/home-api.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../api/statistics-api.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/common/event-bus.js"></script>
    <script src="../../../component/common/vuedals.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/header-tab.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/header-prompt.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/common.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/comprehensive-query.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>

+ 147 - 0
app/statistics/html/health-management-analysis.html

@ -0,0 +1,147 @@
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>总体分析</title>
        <meta name="author" content="yihu.com" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <link rel="shortcut icon" href="../../../favicon.ico">
		<link rel="stylesheet" type="text/css" href="../../../css/bootstrap.min.css" />
        <link rel="stylesheet" type="text/css" href="../../../css/font-awesome.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../../css/style.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../../css/cross.css"/>
        <link href="../../../plugins/toastr/toastr.min.css" rel="stylesheet">
        <link rel="stylesheet" type="text/css" href="../../../css/element-ui.css"/>
        <link rel="stylesheet" type="text/css" href="../css/common.css"/>
        <style>
            .tip{
                vertical-align: inherit;
                margin-left: 5px;
            }
            .health-count{
                margin-left: 26.156px;
            }
            .black{
                color: #323232;
            }
            .health-title{
                margin-left: 14px;
            }
            .visible-xs-inline-block{
                display: inline-block;
            }
            .flex-box {
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -webkit-box-pack: center;
        -ms-flex-pack: center;
        justify-content: space-between;
        -webkit-box-align: center;
        -ms-flex-align: center;
        align-items: baseline;
    }
    .c-w-33{
        /*height: 191.6px;*/
    }
    .shadow{
        position: absolute;
        left: 50%;
    	top: 85px;
       background-color: rgba(50, 50, 50, 0.701961);
       border-color: rgb(51, 51, 51);
       color: rgb(255, 255, 255);
       font-size: 14px;
       font-family: sans-serif;
	    border-radius: 4px;
	    padding: 5px;
	    visibility: hidden;
	    min-width: 242px;
	    z-index: 99999;
	    text-align: left;
    }
    .shadowr{
        left: 0%;
    }
    .article-bar, .send-bar{height:15px;width:0%;}
    .article-bar{background: #7a97e0;}
    .send-bar{background: #17b3ec;}
    .c-f36 {font-size: 36px;}
        </style>
    </head>
    <body>
        <div id="main" class="plr20 c-hide" v-loading.fullscreen.lock="isloading">
            <header-tab :appname="appname" :isback="isback" :isrefresh="isrefresh" :isfilter="isfilter" :isopen="false" ></header-tab>
            <header-prompt></header-prompt>
            <div class="clearfix ">
                <ul class="l-banner">
                    <li>
                        <div class="tag" :class="{'active': index==21}" @click="changeTag(21)">
                            <div id="index_21" class="c-f18">{{topDatas['index_21']}}</div>
                            <div class="mt5 c-f16 l-name">绑定微信</div>
                        </div>
                    </li>
                    <li>
                        <div class="tag" :class="{'active': index==149}" @click="changeTag(149)">
                            <div id="index_20" class="c-f18">{{topDatas['index_149']}}</div>
                            <div class="mt5 c-f16 l-name">管理人数</div>
                        </div>
                    </li>
                </ul>
            </div>
            <!-- 折线图 -->
            <line-chart v-on:getlinedata="getNewLineData" lineid="lineChart"></line-chart>
            <!-- 微信绑定统计 -->
            <div v-show="index=='21'" class="mt20 c-border bgc-fff">
                <div class="c-border-b plr10 ptb20 c-f16 c-333">{{wxTotal.label}}</div>
                <div class="ui-grid ui-grid-middle ptb10">
                    <div class="ui-col-0 c-t-center c-17b3ec plr10 c-w-33">
                        <div class="c-f20 wz-num">{{wxTotal.amount1}}</div>
                        <div class="c-f12">已缴费人数</div>
                    </div>
                    <div class="ui-col-1 c-position-r c-t-center">
                        <div class="blur-cycle-box">
                            <div class="c-f16 c-fff num mt15">{{wxTotal.rate}}</div>
                            <div class="c-f12 c-fff mt5">绑定率</div>
                        </div>
                        <div id="pieChart2" style="width: 100%; height:100px;"></div>
                    </div>
                    <div class="ui-col-0 c-t-center c-909090 plr10 c-w-33">
                        <div class="c-f20 zd-num">{{wxTotal.amount2}}</div>
                        <div class="c-f12">未缴费人数</div>
                    </div>
                </div>
            </div>
            <!-- 底部区域图 -->
            <area-data-panel class="mt20" v-on:getnewdata="getAreaData"></area-data-panel>
            <!--模态框组件-->
            <vuedals></vuedals>
        </div>
        
        <script src="../../../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../plugins/toastr/toastr.min.js"></script>
        <script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../plugins/echarts/3.8.5/echarts.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../api/statistics-api.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../js/element-ui.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/common/event-bus.js"></script>
        <script src="../../../component/common/vuedals.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/statistics/header-tab.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/statistics/header-prompt.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/statistics/year-filter.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/statistics/line-chart.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/statistics/area-data-panel.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/statistics/team-info.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../component/statistics/team-info-dyy.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../../component/common/pagination.js"></script>
        <script src="../js/common.js" type="text/javascript" charset="utf-8"></script>
        <script src="../js/health-management-analysis.js" type="text/javascript" charset="utf-8"></script>
    </body>
</html>

+ 7 - 3
app/statistics/html/home.html

@ -32,6 +32,10 @@
                <div class="fr mt10">
                    <img v-show="false" @click="open" src="../../../images/zhankai_icon.png" width="18" height="18" />
                </div>
                <div class="fr mt10 c-cursor-p" @click="goToPage(3)">
                    <img @click="open" src="../../../images/download.png" width="18" height="18" />
                    <span class="pl5 c-333">数据导出</span>
                </div>
            </div>
            <!-- 饼图 -->
            <div class="mt10 mb30">
@ -77,9 +81,9 @@
                    <span class="section-label c-f14">签约分析</span>
                    <div class="grey-line"></div>
                </div>
                <div class="section-body mtb30">
                    <div class="c-row">
                        <div v-for="item in signAnalysis" @click="showDetail(item.url)" class="c-20 c-t-center">
                <div class="section-body mb30 mt10">
                    <div class="c-row n-row">
                        <div v-for="item in signAnalysis" @click="showDetail(item.url)" class="c-20 c-t-center mt20 clearfix">
                            <img :src="item.photo">
                            <div class="c-f12 c-999 mt10">{{item.label}}</div>
                        </div>

+ 5 - 0
app/statistics/html/smfw-analysis.html

@ -33,6 +33,11 @@
			        	<div  class="ui-col-0 c-f16 c-333 pl20">总体分析</div>
			            <div class="c-arrow-r"></div>
			        </div>
			        <div class="c-position-r ui-grid c-border-b pt15 pb10 plr30 c-cursor-p" @click="goPage('smfw-ruhufangshi-analysis.html')">
			        	<img src="../../../images/bingtu_icon.png" style="width: 30px;" class="ui-col-0"/>
			        	<div  class="ui-col-0 c-f16 c-333 pl20">入户访视分析</div>
			            <div class="c-arrow-r"></div>
			        </div>
			        <div class="c-position-r ui-grid c-border-b pt15 pb10 plr30 c-cursor-p" @click="goPage('qualifications-analysis.html')">
			        	<img src="../../../images/erweibiao_icon.png" style="width: 30px;" class="ui-col-0"/>
			        	<div  class="ui-col-0 c-f16 c-333 pl20">资质分析</div>

+ 127 - 0
app/statistics/html/smfw-ruhufangshi-analysis.html

@ -0,0 +1,127 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>上门服务-入户访视</title>
    <meta name="author" content="yihu.com" />
    <meta name="format-detection" content="telephone=no" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"
    />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
    <link rel="stylesheet" type="text/css" href="../../../css/font-awesome.min.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/cross.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/flex.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/element-ui.css" />
    <link href="../../../plugins/toastr/toastr.min.css" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="../css/common.css" />
</head>
<style>
.mainBlocktop {
    height: 170px;
	background: -webkit-linear-gradient(top, #5a83ff , #3b6cfe); /* Safari 5.1 - 6.0 */
	background: -o-linear-gradient(bottom, #5a83ff, #3b6cfe); /* Opera 11.1 - 12.0 */
	background: -moz-linear-gradient(bottom, #5a83ff, #3b6cfe); /* Firefox 3.6 - 15 */
	background: linear-gradient(to bottom, #5a83ff , #3b6cfe); /* 标准的语法(必须放在最后) */
	border-radius: 6px;
    color: #fff;
    font-size: 16px;
}
.mainBlockbottom {
    height: 170px;
    font-size: 16px;
	background: -webkit-linear-gradient(top, #396cfe ,#1954fd); /* Safari 5.1 - 6.0 */
	background: -o-linear-gradient(bottom, #396cfe, #1954fd); /* Opera 11.1 - 12.0 */
	background: -moz-linear-gradient(bottom, #396cfe, #1954fd); /* Firefox 3.6 - 15 */
	background: linear-gradient(to bottom, #396cfe , #1954fd); /* 标准的语法(必须放在最后) */
    border-radius: 6px;
    color: #fff;
}
.el-radio-button:first-child .el-radio-button__inner{
	border-radius: 15px 0 0 15px;
}
.el-radio-button:last-child .el-radio-button__inner{
	border-radius:  0 15px 15px 0;
}
</style>
<body style="margin: 0;overflow-x: auto;">
    <div id="main" class="c-hide"  v-loading.fullscreen.lock="isloading">
        <header-tab appname="上门服务-入户访视分析" isback="true" isrefresh="true"></header-tab>
        <datefilter ref="datefilter" v-on:initsearch = "initSearchHandle"></datefilter>
        <div class="ptb10 plr10 bgc-f2f3f5">
	        <div class="flex">
	        	<div class="f_s_0 pr10" style="width: 300px;">
	        		<div class="mainBlocktop">
	        			<div class="c-f16 pt20 pl25 c-position-r">已访视居民人数</div>
	            		<div class="c-t-center" style="line-height: 100px;"> 
	            			<span class="c-f28">{{topData.numTotal}}</span>人
	            		</div>
	        		</div>
            		<div class="mainBlockbottom mt10">
            			<div class="c-f16  pt20  pl25">已访视居民人次 </div>
	            		<div class="c-t-center" style="line-height: 100px;"> 
	            			<span class="c-f28">{{topData.timesTotal}}</span>人次
	            		</div>
            		</div>
	        	</div>
	        	<div  class="c-border bgc-fff c-border-r-4 f_g_1 mr10" style="min-width: 400px;">
	            	<div class="c-border-b plr10 ptb10 c-f16 c-333">访视对象分析
	            	</div>
            		<!-- 饼图-->
	            	<div class="pie-chart" id="pieChart" style="height: 300px; width: 100%;" v-show="pieShow"></div>
	            	<div  v-show="!pieShow" class="c-t-center pt50"  style="height: 187px; width: 100%;">
	            		<img src="../../../images/wushuju_img.png" alt="" style="width: 187px;"/>    
	            		<div class="pt5 c-f16 c-666">无数据</div>
	            	</div>
            	</div>
	        	<div  class="c-border bgc-fff c-border-r-4 f_g_1" style="min-width: 400px;">
	            	<div class="c-border-b plr10 ptb10 c-f16 c-333">访视完成情况分析
	            	</div>
            		<!-- 饼图-->
	            	<div class="pie-chart" id="pieChart1" style="height:300px; width: 100%;" v-show="pieShow1"></div>
	            	<div  v-show="!pieShow1" class="c-t-center pt50"  style="height: 187px; width: 100%;">
	            		<img src="../../../images/wushuju_img.png" alt="" style="width: 187px;"/>    
	            		<div class="pt5 c-f16 c-666">无数据</div>
	            	</div>
            	</div>
            </div>
	        <div  class="mtb10 c-border bgc-fff c-border-r-4">
            	<!--<div class="c-border-b plr10 ptb10 c-f16 c-333 c-position-r">服务工单排行</div>-->
		    	<table-panel ref="tableRef0" :tabledata="tabledata0" @getnewdata="getnewdata" @backtobefore="backClick" :reqlength="reqListLength"></table-panel>
        	</div>
        </div>
        <!--模态框组件-->
        <vuedals></vuedals>
    </div>
    <script src="../../../js/vue.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/element-ui.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../plugins/toastr/toastr.min.js"></script>
    <script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
    <!--<script src="../../../plugins/echarts/3.8.5/echarts.min.js" type="text/javascript" charset="utf-8"></script>-->
    <script src="../js/echarts.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../api/jbsc-api.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../api/statistics-api.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/common/event-bus.js"></script>
    <script src="../../../component/common/vuedals.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/header-tab.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/header-prompt.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/line-chart.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/table-panel.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/team-info.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/sign-progress-filter.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/date-filter.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/common.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/smfw-ruhufangshi-analysis.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>

+ 10 - 4
app/statistics/js/common.js

@ -89,9 +89,15 @@ function handlePieData(arg){
   	var colorList=[]
    legendNames = [];
    var arr1 = _.map(arg.arry, function(o,i){
    	var count =  0
    	if(arg.param){
    		count = parseFloat(o[arg.param])
    	}else{
    		count = parseFloat(o.amount)
    	}
        var obj = {
            name: o.name,
            count: parseInt(o.amount||o[arg.param])
            name: o[arg.nameparam]||o.name,
            count: count
        };
        legendNames.push(obj);
        if(o.code){
@ -100,8 +106,8 @@ function handlePieData(arg){
        	colorList.push(arg.colors[i])
        }
        return {
            value: parseInt(o.amount||o[arg.param]),
            name: o.name
            value: count,
            name: o[arg.nameparam]||o.name
        }
    });
    legend.formatter = function(name){

+ 369 - 0
app/statistics/js/comprehensive-query.js

@ -0,0 +1,369 @@
Vue.use(Vuedals.default);
new Vue({
	el: "#main",
	data: {
		height:"",
        isloading:false,  //加载中
        start:"",
        end:"",
		tabledata:[],   //表格数据	
		levelList:[{level:"4",areaLevel:"2"},{level:"3",areaLevel:"3"},{level:"2",areaLevel:"4"}],  //两种搜索,地区等级对比
		areaLevel:"",  // 2、市,3、区,4、社区,5、团队
		initareaLevel:"",
		initlevel: '',
		initarea: '',
		level: '',
		area: '',
		areaTitle: '',
		index: '121',
		lowLevel: '',
		initlowLevel:"",
		years:[],
		chooseYear: '',
		userRole: '',
		treedata:  [{
          id: 1,
              prop:"aaa10",
          label: '一级 1',
          children: [{
            id: 4,
              prop:"aaa9",
            label: '二级 1-1',
            children: [{
              id: 9,
              prop:"aaa1",
              label: '三级 1-1-1'
            }, {
              id: 10,
              prop:"aaa2",
              label: '三级 1-1-2'
            }]
          }]
        }, {
          id: 2,
              prop:"aaa8",
          label: '一级 2',
          children: [{
            id: 5,
              prop:"aaa3",
            label: '二级 2-1'
          }, {
            id: 6,
              prop:"aaa4",
            label: '二级 2-2'
          }]
        }, {
          id: 3,
              prop:"aaa7",
          label: '一级 3',
          children: [{
            id: 7,
              prop:"aaa5",
            label: '二级 3-1'
          }, {
            id: 8,
              prop:"aaa6",
            label: '二级 3-2'
          }]
        }],
		tableHeader:[],
		defaultProps: {
          children: 'children',
          label: 'label'
       	},
		pickerOptions:{
			disabledDate(time) {
                return time.getTime() > Date.now()
        	},
		},
       	radio:'1',
       	currentPage:1,
       	currentSize:100,
       	datatotal:1000,
       	areaList:[],
       	areaCode:"",
       	communityList:[{code:"",name:"全部"}],
       	communityCode:"",
       	teamList:[{code:"",name:"全部"}],
       	teamCode:"",
	},
	components: {
		vuedals: Vuedals.Component
	},
	mounted: function () {
		var vm=this
		//初始化数据
		initData(vm);
		vm.height = document.body.offsetHeight - 85
		window.onresize = function () {
			vm.height = document.body.offsetHeight - 85
			console.log(vm.height)
		}
	},
	methods: {
		beforeReq:function(){
			var vm=this,startDate="",endDate="",checked=[]
			if(vm.radio=="1"){
				startDate = getStartDate(vm.chooseYear)
				endDate = getEndDate(vm.chooseYear)
			}else{
				if(!vm.start&&!vm.end){
					this.$message({
			          message: '请选择创建时间',
			          type: 'warning'
			        });
			        return false
				}else{
					if(vm.start>vm.end){
						this.$message({
				          message: '开始时间应早于结束时间',
				          type: 'warning'
				        });
				        return false
					}else{
						startDate = vm.start
						endDate = vm.end
					}
				}
			}
			var checkTree = vm.$refs.tree.getCheckedNodes(true);
			if(checkTree.length){
				vm.tableHeader = []
				_.each(checkTree,function(item,index){
					vm.tableHeader.push({prop:item.prop,label:item.label})
					checked.push(item.id)
				})
				console.log(JSON.stringify(vm.tableHeader))
				console.log(JSON.stringify(checked))
			}else{
				this.$message({
		          message: '请选择查询项',
		          type: 'warning'
		        });
		        return false
			}
			return {start:startDate,end:endDate}
		},
		searchHandle:function(){
			var vm = this,DateJson=undefined
			console.log("before-pass")
			DateJson = vm.beforeReq()
			if(DateJson){
				console.log("pass")
			}
		},
		backClick:function(){
			history.go(-1);
		},
		bindEvent:function(){
			var vm=this
			//监听后退按钮的操作
			EventBus.$on("back-click", function (arg) {
				EventBus.$emit('update-statistics-time', {}); //更新统计时间
				vm.backClick()
			});
			//监听页面刷新
			EventBus.$on("refresh-click", function (arg) {
				EventBus.$emit('update-statistics-time', {}); //更新统计时间
				initData(vm)
			});
			$("#main").removeClass("c-hide");
		},
      	handleSizeChange:function(val) {
        	console.log(`每页 ${val} 条`);
      	},
      	handleCurrentChange:function(val) {
        	console.log(`当前页: ${val}`);
      	},
      	initTableHeader:function() {
      		var vm=this
      		
      	},
      	//获取省市区  type:省1,市2,区3 ,社区 4   flag:是否有下级搜索
        getDistrict: function(type,code,name) {
            var vm=this,list = [],param=""
            if(type == 3){
            	list = [{code:code,name:name}]
            	param = "area"
            }else  if(type == 4){
            	list = [{code:"",name:"全部"}]
            	param = "community"
            }else  if(type == 5){
            	list = [{code:"",name:"全部"}]
            	param = "team"
            }
            var params={
                type:type,code:code
            }
            homeAPI.getDistrict(params).then(function(res) {
                if(res.status == 200) {
                    vm[param+"List"]=list.concat(res.list)
                    vm[param+"Code"]=vm[param+"List"][0].code
                } else {
                    vm.$message.error(res.msg)
                }
            })
        },
        selChange:function(type){
        	var vm=this,name=""
        	if(type == 3){
        		name = _.find(vm.areaList,{code:vm.areaCode}).name
        		vm.initSelOption("community")
        		vm.initSelOption("team")
        		if(vm.areaCode != "350200"){
        			vm.getDistrict(4,vm.areaCode,name)
        		}
        	}else if(type == 4){
        		name = _.find(vm.communityList,{code:vm.communityCode}).name
        		vm.initSelOption("team")
        		if(vm.areaCode){
        			vm.getDistrict(5,vm.areaCode,name)
        		}
        	}
        },
        initSelOption:function(param){
        	var vm=this
        	vm[param+"List"]=[{code:"",name:"全部"}]
            vm[param+"Code"]=vm[param+"List"][0].code
        }
    },
})
function initData(vm) {
	//获得缓存中缓存的角色权限
	var userRole = window.sessionStorage.getItem("selectedRole");
	if (!userRole) {
		return false;
	}
	vm.userRole = JSON.parse(userRole);
	//level:2、市,3、区,4、社区,5、团队
	vm.initareaLevel = vm.areaLevel = vm.userRole.code == '350200' ? 2 : vm.userRole.code.length == 6 ? 3 : 4;
	vm.initlevel = vm.level = vm.userRole.code == '350200' ? 4 : vm.userRole.code.length == 6 ? 3 : 2;
//	vm.lowLevel = vm.initlowLevel = vm.userRole.code == '350200' ? 3 : vm.userRole.code.length == 6 ? 2 : 1;
				
	vm.initarea =vm.area  = vm.userRole.code;
	vm.areaTitle = vm.userRole.name;
	
	if(vm.initlevel == 4){   //市获取区
		vm.getDistrict(3,vm.initarea,vm.areaTitle.substr(0,3))
	}else if(vm.initlevel == 3){   //区获取社区
		vm.areaList = [{code:vm.initarea,name:vm.areaTitle}]
		vm.areaCode = vm.initarea
		vm.getDistrict(4,vm.initarea,vm.areaTitle)
	}else if(vm.initlevel == 2){   //社区获取团队
		vm.communityList = [{code:vm.initarea,name:vm.areaTitle}]
		vm.communityCode = vm.initarea
		vm.getDistrict(5,vm.initarea,vm.areaTitle)
	}
		
	//初始化时间
	var now = new Date();
	vm.end = now.format("yyyy-MM-dd")
	var start = now.getTime() - 30*24*60*60*1000
	vm.start = new Date(start).format("yyyy-MM-dd")
	
	vm.nowyear = vm.chooseYear = now.getFullYear()
	vm.nowmonth = now.getMonth()+1
	vm.years = []
	for(i=vm.nowyear; i>=2016; i--){
		vm.years.push(i)
	}
	
	vm.bindEvent()
}
function initReqParams(vm) {
	var reqParam = [{
		url: "doctor/statisticAnalyze/doorAggregateAnalysis",   //头中部数据
		reqType: 'get',
		data:{
			startDate: vm.start,
			endDate: vm.end,
			area: vm.area,
		    level: vm.areaLevel, //2、市,3、区,4、社区,5、团队
		},
	},{
		url: "doctor/statisticAnalyze/order_lowlevel_all",  //工单列表--表格
		reqType: 'get',
		data:{
			startDate: vm.start,
			endDate: vm.end,
			area: vm.area,
		    level: vm.level, //2、市,3、区,4、社区,5、团队
		    sort: 1,
		    lowLevel:vm.lowLevel||"",  //等级 1:团队 2社区机构 3区级 4市级
		},
	},]
	return reqParam;
}
function loadData(loadArr, vm) {
	//获取其他请求的参数
	var reqParams = initReqParams(vm),
		reqPromise = [],
		newArr = []; //记录非顶部请求的请求数组
	for (i = 0; i < loadArr.length; i++) {
		var j = loadArr[i];
		var param = reqParams[j];
		reqPromise.push(httpRequest.get(param.url, {
			data: param.data
		}));
		newArr.push(loadArr[i]);
	}
	vm.isloading=true    
	if (reqPromise.length > 0) {
		Promise.all(reqPromise).then(function (ress) {
			var res1, res2, res3, res4, res5;
			for (var i = 0; i < loadArr.length; i++) {
				var j = loadArr[i] + 1;
				if (j == 1) { res1 = ress[i]; }
				if (j == 2) { res2 = ress[i]; }
				if (j == 3) { res3 = ress[i]; }
				if (j == 4) { res4 = ress[i]; }
				if (j == 5) { res5 = ress[i]; }
			}
			if (res1 && res1.status == 200) {
				vm.topData=res1.data
//				vm.topData.evaluateSplit=parseFloat(vm.topData.evaluateSplit).toFixed(2)
				var voucherList=_.map(vm.topData.voucherList,function(item,index){
					return {
						code:item.slaveKey1,
						amount:item.result1,
						name:item.slaveKey1Name,
					}
				})
				if(voucherList.length==0||(voucherList.length==1&&!voucherList.name)){
					vm.pieShow=false
				}else{
					vm.pieShow=true
				}
				setTimeout(function(){						
					//服务人群分析-饼图
					handlePieData({elId:"pieChart",arry: voucherList, title:{},colors: colors,param:"total",position:['30%', '51%'],radius:['75%', '90%']})
					handlePieData({elId:"pieChart1",arry: voucherList, title:{},colors: colors,param:"total",position:['30%', '51%'],radius:['75%', '90%']})
				},10)
			}
			if (res2 && res2.status == 200) {
				vm.tabledata0=listHandle(res2.data["index_121"],"all", vm);
			}
			vm.isloading=false
		})
	}
}
function listHandle(list,param, vm){
    var topArr = [];
    if(list.length==1&&!list[0].name){
    	list=[]
    }
    topArr = soreRank(getKeyValueArr(list, param||"amount"));
    var newlist = _.map(list, function(o, index){
    	o.rank=topArr[index]
    	return o
    });
    EventBus.$emit("render-area-data",{
    });
    return newlist
}

+ 487 - 0
app/statistics/js/health-management-analysis.js

@ -0,0 +1,487 @@
var reqList = []; //记录请求的参数和url,用于后退时使用
var pieChart1,
    pieChart2; //全局设置饼图的对象,window.resize时,触发chart的resize方法
Vue.use(Vuedals.default);
new Vue({
    el: "#main",
    data: {
        appname: "健康管理分析",
        isback: true,
        isrefresh: true,
        isfilter: true,
        isopen: true,
        //请求页面所需参数
        level: '',
        area: '',
        areaTitle: '',
        index: '21',
        selectedDateType: 1,
        endDate: '',
        startDate: '',
        lowLevel: '',
        chooseYear: '',
        userRole: '',
        //数据结果
        topDatas: {
            index_149: 0,
            index_21: 0,
        },
        //微信绑定统计数据
        wxTotal:{
            label: '',
            amount1: '', //已缴费人数
            amount2: '', //未缴费人数
            rate: ''//绑定率
        },
        isloading:false,  //加载中
    },
    components: {
        vuedals: Vuedals.Component
    },
    methods: {
        changeTag: function(val){
            this.index = val;
            loadData([1,2], this);
            //存储请求所带的参数
            reqList.push({
                level: this.level,
                area: this.area,
                areaTitle: this.areaTitle,
                index: this.index,
                endDate: this.endDate,
                startDate: this.startDate,
                lowLevel: this.lowLevel
            })
        },
        getNewLineData: function(arg){
            this.selectedDateType = arg.dateType;
            loadData([1], this);
        },
        getAreaData: function(arg){
            //如果level改变,则需要重新加载整个页面的数据,否则只需加载底部区域数据
            if(arg.level == this.level){
                this.lowLevel = arg.lowLevel;
                loadData([2], this);
            }else{
                this.level = arg.level;
                this.lowLevel = arg.lowLevel;
                this.area = arg.area;
                this.areaTitle = arg.areaTitle;
                loadData([0,1,2], this);
            }
            EventBus.$emit('update-area-name', {areaName: this.areaTitle});
            //存储请求所带的参数
            reqList.push({
                level: this.level,
                area: this.area,
                areaTitle: this.areaTitle,
                index: this.index,
                endDate: this.endDate,
                startDate: this.startDate,
                lowLevel: this.lowLevel,
                selectedDateType: this.selectedDateType
            })
        }
    },
    mounted: function(){      
    	//初始化数据
        initData(this);
        
        //获得顶部各tab的值
        loadData([0,1,2], this); //参数组数表示请求的区域为上中下
        
        //存储请求所带的参数
        reqList.push({
            level: this.level,
            area: this.area,
            areaTitle: this.areaTitle,
            index: this.index,
            endDate: this.endDate,
            startDate: this.startDate,
            lowLevel: this.lowLevel,
            selectedDateType: this.selectedDateType
        });
        
        //设置监听器, 监听折线图日期变化
        var vm = this;
        //监听后退按钮的操作
        EventBus.$on("back-click", function(arg){
            EventBus.$emit('update-statistics-time', {}); //更新统计时间
            if(reqList.length == 1){
                history.go(-1);
            } 
            else{
                var preInfo = reqList.pop();
                var info = reqList[reqList.length - 1];
                vm.level = info.level;
                vm.area = info.area;
                vm.areaTitle = info.areaTitle;
                vm.lowLevel = info.lowLevel;
                vm.index = info.index;
                
                loadData([0,1,2], vm);
                EventBus.$emit('update-area-name', {areaName: vm.areaTitle});
            }
        });
        //监听页面刷新
        EventBus.$on("refresh-click", function(arg){
            loadData([0,1,2], vm);
        });
        //弹出筛选框
        EventBus.$on('filter-click', function(arg) {
            //弹框显示筛选条件
            Vuedals.Bus.$emit('new', {
                title: '条件筛选',
                onClose:function(data){
                    vm.chooseYear = data.chooseYear;
                    vm.startDate = getStartDate(vm.chooseYear);
                    vm.endDate = getEndDate(vm.chooseYear);
                    
                    //请求参数重置,页面类型重新开始
                    vm.level = vm.userRole.code == '350200' ? 4 : vm.userRole.code.length == 6 ? 3 : 2;
                    vm.area = vm.userRole.code;
                    vm.areaTitle = vm.userRole.name;
                    EventBus.$emit('update-area-name', {areaName: vm.areaTitle});
                    vm.selectedDateType = 1;
                    
                    //然后清空请求列表数组
                    reqList.splice(0, reqList.length);
                    
                    loadData([0, 1, 2], vm);//刷新数据
                    
                    //存储请求所带的参数
                    reqList.push({
                        level: vm.level,
                        area: vm.area,
                        areaTitle: vm.areaTitle,
                        index: vm.index,
                        endDate: vm.endDate,
                        startDate: vm.startDate,
                        lowLevel: vm.lowLevel,
                        selectedDateType: vm.selectedDateType
                    });
                    
                    EventBus.$emit('update-statistics-year', {selectDate: vm.chooseYear + "年"});//更新年份
                    EventBus.$emit('update-statistics-time', {});//更新统计时间
                },
                component: 'year-filter',
                props: {
                    selectedYear: vm.chooseYear
                }
            });
        });
        $("#main").removeClass("c-hide");
        window.onresize = function() {
            if(pieChart1){
                pieChart1.resize();
            }
            if(pieChart2){
                pieChart2.resize();
            }
            window.lineCharts.resize(); //日周月折线图
        }
    }
})
function initData(vm){
    //获得缓存中缓存的角色权限
    var userRole = window.sessionStorage.getItem("selectedRole");
    if(!userRole){
        return false;
    }
    vm.userRole = JSON.parse(userRole);
    vm.level = vm.userRole.code == '350200' ? 4 : vm.userRole.code.length == 6 ? 3 : 2;
    vm.area = vm.userRole.code;
    vm.areaTitle = vm.userRole.name;
    EventBus.$emit('update-area-name', {areaName: vm.areaTitle});
    
    var now = new Date();
    if(now.getMonth() >= 6){
        vm.chooseYear = now.getFullYear();
    }else{
        vm.chooseYear = now.getFullYear() - 1;
    }
    
    vm.startDate = getStartDate(vm.chooseYear);
    vm.endDate = getEndDate(vm.chooseYear);
    EventBus.$emit('update-statistics-year', {selectDate: vm.chooseYear + "年"});
}
function initReqParams(vm){
    //增量(咨询量3、随访量4、健康教育5、代预约量27),到达量(绑定微信21、绑定设备20)
    if(vm.index == '149' || vm.index == '21'){
        url2 = "statistics/interval_total";
        url3 = "statistics/lowlevel_all";
    }
    reqParam = [{
        url: url2,
        data:{
            index: vm.index,
            level: vm.level, 
            area: vm.area, 
            startDate: vm.startDate, 
            endDate: vm.endDate,
            interval: vm.selectedDateType
        }
    },{
        url: url3,
        data: {
            index: vm.index,
            level: vm.level,
            area: vm.area, 
            sort: 1, 
            year: vm.chooseYear
        }
    },{
        //如果是微信绑定,则增加置顶展示当面层级的总绑定率及已缴费 未缴费居民数.只针对微信绑定时使用
        url: '/statistics/getLevelTotalSingle',
        data: {
            date: vm.endDate, 
            level: vm.level, 
            area: vm.area
        }
    }];
    
    if(vm.index == '149' || vm.index == '21' ){
        reqParam[1].data.date = vm.endDate;
    }else{
        reqParam[1].data.endDate = vm.endDate;
    }
    
    if(vm.lowLevel){
        reqParam[1].data.lowLevel = vm.lowLevel;
    }
    return reqParam;
}
function getTopReqParams(index1, vm){
    var url = "statistics/total",
        data = {
            index:  index1,
            level: vm.level, 
            area: vm.area, 
            year: vm.chooseYear,
            endDate: vm.endDate, 
            startDate: vm.startDate
        };
    if(index1 == '149' || index1 == '21'){
        url = "statistics/index_all";
    }
    return {
        url: url,
        data: data
    };
}
function getTopTagDatas(vm){
    var reqs = [],
        indexs = ['21', '149'];
    for(i=0; i<indexs.length; i++){
        var item = getTopReqParams(indexs[i], vm);
        reqs.push(httpRequest.get(item.url, {data: item.data}));
    }
    Promise.all(reqs).then(function(ress){
        for(i=0; i<ress.length; i++){
            var res = ress[i];
            if(res.status == 200){
                for(key in res.data){
                    vm.topDatas[key] = res.data[key];
                }
            }else{
                console.log(res.msg);
            }
        }
    })
}
function loadData(loadArr, vm){
    if(loadArr.indexOf(0) > -1){
        getTopTagDatas(vm);
    }
    
    vm.isloading=true
    //获取其他请求的参数
    var reqParams = initReqParams(vm),
        reqPromise = [],
        newArr = []; //记录非顶部请求的请求数组
    for(i=0; i<loadArr.length; i++){
        if(loadArr[i] == 0){
            // do nothing
        }else{
            var j = loadArr[i] - 1;
            var param = reqParams[j];
            reqPromise.push(httpRequest.get(param.url, {data: param.data}));
            newArr.push(loadArr[i]);
        }
    }
    
    if(vm.index == 21){ //微信绑定的数据需要再请求一个数据
        reqPromise.push(httpRequest.get(reqParams[2].url, {data: reqParams[2].data}))
        newArr.push(3);
    }
    if(reqPromise.length > 0){
        Promise.all(reqPromise).then(function(ress){        	
       		vm.isloading=false
            var res2, res3, res4;
            for(var i=0; i<newArr.length; i++){
                var j = newArr[i] + 1;
                if(j == 2){
                    res2 = ress[i];
                }
                if(j == 3){
                    res3 = ress[i];
                }
                //微信绑定时,多获取一个请求数据
                if(j == 4){
                    res4 = ress[i];
                }
            }
            if(res2){
                if(res2.status == 200){
                    handleSecondPanelData(res2.data, vm);
                }else{
                   console.log(res2.msg);
                }
                
            }
            if(res3){
                if(res3.status == 200){
                    listHandle(res3.data, vm);
                }else{
                    console.log(res3.msg);
                }
            }
            if(res4){
                if(res4.status == 200){
                    handleWXBindData(res4.data, vm);
                }else{
                    console.log(res4.msg);
                }
            }
        })
    }
}
function handleSecondPanelData(data, vm){
    var xDatas = [],
        yDatas = [],
        names = [],
        colors = ['#12b7f5', '#cd67fd','#FF9526'],
        labels =  {'149': '健康管理人数新增趋势', '21': '绑定微信新增趋势'},
        index_names = {'index_21': '绑定微信','index_149': '管理人数'};
    for(var p in data){
        names.push(index_names[p]);
        if(p == 'index_21' || p == 'index_149' ){
            xData = _.map(data[p].data, function(o){
                return o.range;
            });
            yData = _.map(data[p].data, function(o){
                return o.amount;
            });
        }else{
        	if(data[p][0].range){
	            xData = _.map(data[p], function(o){
	                return o.range;
	            });
	            yData = _.map(data[p], function(o){
	                return o.amount;
	            });
        	}
        }
        xDatas.push(xData);
        yDatas.push(yData);
    }
    EventBus.$emit("draw-line-chart", {
        panelName : labels[vm.index],
        quotaNames : names,
        xData : xDatas[0],
        yDatas : yDatas,
        colors : colors,
        selectedDateType: vm.selectedDateType,
        nowlineid : "lineChart"
    });
}
function listHandle(data, vm){
    for(i in data){
        var list = data[i];
        var topArr = [];
        if(vm.index == "21"){
            topArr = soreRank(getKeyValueArr(list, 'bindRate'));
        }else if(vm.index == "149"){
            topArr = soreRank(getKeyValueArr(list, 'manageRate'));
        }else{
            topArr = soreRank(getKeyValueArr(list, 'amount'));
        }
        var arr = _.map(list, function(o, index){
            var cols = [o.name];
            if(vm.index == '21'){
                cols.push(o.bindRate + '%');
                cols.push(o.weChatAmount1);
                cols.push(o.weChatAmount0);
            }else if(vm.index == '149'){
                cols.push(o.manageTotal1Amount);
                cols.push(o.manageRate + '%');
            }
            return {
                rank: topArr[index],
                code: o.code,
                name: o.name,
                cols: cols
            }
        });
        var headers = {
            '149': ["排名", "管理人数","管理率"],
            '21': ["排名", "绑定率", "已缴费", "未缴费"],
        };
        
        EventBus.$emit("render-area-data",{
        	index: vm.index,
            level: vm.level,
            area: vm.area,
            lowLevel: vm.lowLevel,
            headers: headers[vm.index],
            year:vm.chooseYear,
            rows: arr
        });
    }
}
function handleWXBindData(data, vm){
    switch(vm.level){
        case 4:
            vm.wxTotal.label = "全市概况";
            break;
        case 3: 
            vm.wxTotal.label = "全区概况";
            break;
        case 2: 
            vm.wxTotal.label = "全社区概况";
            break;
    }
    vm.wxTotal.rate = (data.bindRate || 0) + "%";
    vm.wxTotal.amount1 = data.weChatAmount1;
    vm.wxTotal.amount2 = data.weChatAmount0;
    var arr = [{
        name: '已缴费人数',
        value: data.weChatAmount1
    },{
        name: '未缴费人数',
        value: data.weChatAmount0
    }];
    pieChart1 = drawPieChart('pieChart2', arr, ['#17b3ec', '#909090']);
}
/*
 * 获取用来排序的字段值,返回数组
 * 参数: list - 列表, key - 字段的名称 
 */
function getKeyValueArr2(list, key){
    var arr = [];
    for(var k in list){
        var item = list[k][key].split(",");
        arr.push(item[0]);
    }
    
    return arr;
}

+ 8 - 1
app/statistics/js/home.js

@ -20,6 +20,11 @@ new Vue({
			url: 'resident-analysis.html',
            allowArea:"",
		}, {
			photo: '../../../images/jiankangguanli_icon.png',
			label: '健康管理',
			url: 'health-management-analysis.html',
            allowArea:"",
		},{
			photo: '../../../images/tuigaiqian_icon.png',
			label: '退改签',
			url: 'change-back.html',
@ -60,7 +65,7 @@ new Vue({
			photo: '../../../images/shangmenfuwu_icon.png',
			label: '上门服务',
			url: 'smfw-analysis.html',
			allowArea:"350200,350203",
			allowArea:"",
		},
		 {
			photo: '../../../images/shaichafenxin_icon.png',
@ -101,6 +106,8 @@ new Vue({
		    var url = "sign-progress.html";
		    if(val == 2){
		        url = "renew-progress.html";
		    }else if(val == 3){
		        url = "comprehensive-query.html";
		    }
		    window.location.href = url;
		}

+ 1 - 1
app/statistics/js/jbsc-analysis.js

@ -142,7 +142,7 @@ new Vue({
		//切换饼图
		changePie:function(){
			var vm=this
			if(vm['pieData'+vm.ptab].length==0||(vm['pieData'+vm.ptab].length==1&&!vm['pieData'+vm.ptab].name)){
			if(vm['pieData'+vm.ptab].length==0||(vm['pieData'+vm.ptab].length==1&&!vm['pieData'+vm.ptab][0].name)){
				vm["pieShow"+vm.ptab]=false
			}else{
				vm["pieShow"+vm.ptab]=true

+ 1 - 1
app/statistics/js/smfw-comprehensive-analysis.js

@ -313,7 +313,7 @@ function loadData(loadArr, vm) {
						name:item.slaveKey1Name,
					}
				})
				if(voucherList.length==0||(voucherList.length==1&&!voucherList.name)){
				if(voucherList.length==0||(voucherList.length==1&&!voucherList[0].name)){
					vm.pieShow=false
				}else{
					vm.pieShow=true

+ 280 - 0
app/statistics/js/smfw-ruhufangshi-analysis.js

@ -0,0 +1,280 @@
var reqList = [{}]; //记录请求的参数和url,用于后退时使用
var colors={"0":"#5b9db5","1":"#ed7d31","2":"#a5a5a5",
	"3":"#ffc000","4":"#44c274","5":"#70ad47",
	"6":"#255e91","7":"#9e480e","8":"#7e7e7e","9":"#997300","10":"#264478","11":"#43682b","12":"#5b9db5"}
Vue.use(Vuedals.default);
new Vue({
	el: "#main",
	data: {
        isloading:false,  //加载中
        start:"",
        end:"",
		pieData:[],    //饼图数据
		tabnumber:0,
		tabledata0:[],   //表格数据	
		topData:{},
		//请求页面所需参数
		levelList:[{level:"4",areaLevel:"2"},{level:"3",areaLevel:"3"},{level:"2",areaLevel:"4"}],  //两种搜索,地区等级对比
		areaLevel:"",  // 2、市,3、区,4、社区,5、团队
		initareaLevel:"",
		initlevel: '',
		initarea: '',
		level: '',
		area: '',
		areaTitle: '',
		lowLevel: '',
		initlowLevel:"",
		lowCode: '',
		chooseYear: '',
		userRole: '',
		pieShow:true,
		pieShow1:true,
		reqListLength:1,
	},
	components: {
		vuedals: Vuedals.Component
	},
	mounted: function () {
		var vm=this
		//初始化数据
		initData(vm);
	},
	methods: {
		getData:function(isNext,type){  //是否下转
			var vm = this
			var params={
				areaLevel: vm.areaLevel,
				level: vm.level,
				area: vm.area,
				endDate: vm.end,
				startDate: vm.start,
				lowLevel: vm.lowLevel,
				areaTitle:vm.areaTitle
			}
			loadData([0,1,2,3], vm); //刷新数据
			if(isNext){
				//存储请求所带的参数
				reqList.push(params);
				vm.reqListLength=reqList.length
			}else{
				reqList[reqList.length-1]=params
				vm.reqListLength=reqList.length
			}
		},
		//表格tab切换/下转
		getnewdata:function(arg){
			var vm = this
			vm.lowLevel=arg.lowLevel||""
			if(arg.level){
				vm.level = arg.level
				vm.areaLevel = _.find(vm.levelList,{level:vm.level}).areaLevel
			}
			if(arg.area){
				vm.area = arg.area
			}
			if(arg.areaTitle){
				vm.areaTitle = arg.areaTitle
			}
			vm.getData(arg.level)   //有传level,说明是下转
		},
		//重新搜索
		initSearchHandle: function (arg) {
			var vm=this
			vm.start = arg.start
			vm.end = arg.end
			//搜索时,取消下转记录
			vm.area=vm.initarea
			vm.areaLevel=vm.initareaLevel
			vm.level=vm.initlevel
			vm.lowLevel = vm.initlowLevel
			reqList=[{}]; //搜索时清空历史记录,重新搜索
			vm.getData()
			vm.initTable()
		},
		showTab:function(){
		},
		backClick:function(){
			var vm=this
			if (reqList.length == 1) {
				history.go(-1);
			} else {
				var preInfo = reqList.pop();
				var info = reqList[reqList.length - 1];
				vm.areaLevel = info.areaLevel;
				vm.level = info.level;
				vm.area = info.area;
				vm.lowLevel = info.lowLevel;
				vm.getData()
				
				vm.$refs.tableRef0.changeTab({level:vm.level,lowlevel:vm.lowLevel})   //表格tab
			}
		},
		bindEvent:function(){
			var vm=this
			//监听后退按钮的操作
			EventBus.$on("back-click", function (arg) {
				EventBus.$emit('update-statistics-time', {}); //更新统计时间
				vm.backClick()
			});
			//监听页面刷新
			EventBus.$on("refresh-click", function (arg) {
				EventBus.$emit('update-statistics-time', {}); //更新统计时间
				initData(vm)
			});
			$("#main").removeClass("c-hide");
		},
		initTable:function(){
			var vm=this
			vm.$refs.tableRef0.initTable({
    			tabList:[{name:"各区",level:"4",lowlevel:"3",isShow:true},{name:"社区",level:"3",lowlevel:"4",isShow:true},{name:"团队",level:"2",lowlevel:"5",isShow:true}],
				//表格表头
				headers:[{thead:"排名",param:"name",canclick:true},{thead:"访视人数",param:"rehabilitationTotalAmount0"}],
				tabnumber:vm.tabnumber
			})
		},
    },
})
function initData(vm) {
	//获得缓存中缓存的角色权限
	var userRole = window.sessionStorage.getItem("selectedRole");
	if (!userRole) {
		return false;
	}
	vm.userRole = JSON.parse(userRole);
	//level:2、市,3、区,4、社区,5、团队
	vm.initareaLevel = vm.areaLevel = vm.userRole.code == '350200' ? 2 : vm.userRole.code.length == 6 ? 3 : 4;
	vm.initlevel = vm.level = vm.userRole.code == '350200' ? 4 : vm.userRole.code.length == 6 ? 3 : 2;
//	vm.lowLevel = vm.initlowLevel = vm.userRole.code == '350200' ? 3 : vm.userRole.code.length == 6 ? 2 : 1;
				
	vm.initarea =vm.area = vm.userRole.code;
	vm.areaTitle = vm.userRole.name;
	
	vm.tabnumber=vm.areaLevel==4?1:vm.areaLevel==3?2:3   //表格显示的tab数
	
	//初始化时间
	EventBus.$emit("init-FilterDate")
	vm.bindEvent()
}
function initReqParams(vm) {
	var reqParam = [{
		url: "statistics/getHomeVisitTotalHead",   //头部
		reqType: 'get',
		data:{
			startDate: vm.start,
			endDate: vm.end,
			area: vm.area,
		    level: vm.areaLevel, //2、市,3、区,4、社区,5、团队
		    index:150,
		},
	},{
		url: "statistics/getSpecialistTypeCircle",   //访视对象分析150
		reqType: 'get',
		data:{
			startDate: vm.start,
			endDate: vm.end,
			area: vm.area,
		    level: vm.areaLevel, //等级,4 市 3区 2社区 1团队
		    index:150,
		},
	},{
		url: "statistics/getSpecialistTypeCircle",   //访视完成情况分析152
		reqType: 'get',
		data:{
			startDate: vm.start,
			endDate: vm.end,
			area: vm.area,
		    level: vm.areaLevel, //等级,4 市 3区 2社区 1团队
		    index:152,
		},
	},{
		url: "statistics/rehabilitationLowLevel",   //列表151
		reqType: 'get',
		data:{
			startDate: vm.start,
			endDate: vm.end,
			area: vm.area,
		    level: vm.areaLevel, //等级,4 市 3区 2社区 1团队
		    sort: 1,
		    lowLevel:vm.lowLevel||"",  //等级 5:团队 4社区机构 3区级 2市级,
		    index:151,
		},
	}];
	return reqParam;
}
function loadData(loadArr, vm) {
	//获取其他请求的参数
	var reqParams = initReqParams(vm),
		reqPromise = [],
		newArr = []; //记录非顶部请求的请求数组
	for (i = 0; i < loadArr.length; i++) {
		var j = loadArr[i];
		var param = reqParams[j];
		reqPromise.push(httpRequest.get(param.url, {
			data: param.data
		}));
		newArr.push(loadArr[i]);
	}
	vm.isloading=true    
	if (reqPromise.length > 0) {
		Promise.all(reqPromise).then(function (ress) {
			var res1, res2, res3, res4, res5;
			for (var i = 0; i < loadArr.length; i++) {
				var j = loadArr[i] + 1;
				if (j == 1) { res1 = ress[i]; }
				if (j == 2) { res2 = ress[i]; }
				if (j == 3) { res3 = ress[i]; }
				if (j == 4) { res4 = ress[i]; }
				if (j == 5) { res5 = ress[i]; }
			}
			if(res1&& res1.status == 200){
				vm.topData=res1.data
			}
			if(res2&& res2.status == 200){
				if(res2.data.length==0||(res2.data.length==1&&!res2.data[0].slaveKey1Name)){
					vm.pieShow=false
				}else{
					vm.pieShow=true
					vm.$nextTick(function(){
						handlePieData({elId:"pieChart", arry:res2.data, title:{}, colors:colors,position:['30%', '51%'], radius:['70%', '90%'],nameparam:"slaveKey1Name",param:"total"})
					})
				}
			}
			if(res3&& res3.status == 200){
				if(res3.data.length==0||(res3.data.length==1&&!res3.data[0].slaveKey1Name)){
					vm.pieShow1=false
				}else{
					vm.pieShow1=true
					vm.$nextTick(function(){
						handlePieData({elId:"pieChart1", arry:res3.data, title:{}, colors:colors,position:['30%', '51%'], radius:['70%', '90%'],nameparam:"slaveKey1Name",param:"total"})
					})
				}
			}
			if(res4&& res4.status == 200){
				vm.tabledata0=listHandle(res4.data,"rehabilitationTotalAmount0", vm);
			}
			vm.isloading=false
		})
	}
}
function listHandle(list,param, vm){
    var topArr = [];
    if(list.length==1&&!list[0].name){
    	list=[]
    }
    topArr = soreRank(getKeyValueArr(list, param||"amount"));
    var newlist = _.map(list, function(o, index){
    	o.rank=topArr[index]
    	return o
    });
    EventBus.$emit("render-area-data",{
    });
    return newlist
}

+ 126 - 0
component/statistics/date-filter.js

@ -0,0 +1,126 @@
(function(){
    Vue.component('datefilter', {
        template: '<div class="bgc-f2f3f5 pt20 pb10 plr15 flex">\
        	<div v-if="showDiv.indexOf(\'year\')>-1">\
	            <label class="c-333 c-f14" for="">年份:</label>\
	            <el-select v-model="chooseYear" @change="selectChange" style="width:120px;" class="pr20">\
	                <el-option v-for="(item , index) in years"  :key="index" :label="item" :value="item"></el-option>\
	            </el-select>\
            </div>\
            <div v-if="showDiv.indexOf(\'month\')>-1">\
	            <label class="c-333 c-f14" for="">月份:</label>\
	            <el-select v-model="chooseMonth" @change="selectChange" style="width:120px;" class="pr20">\
	                <el-option v-for="(item , index) in months" :key="index" :label="item.name" :value="item.code" v-show="!(nowyear==chooseYear&&item.value>nowmonth)"></el-option>\
	            </el-select>\
            </div>\
            <div v-if="showDiv.indexOf(\'custom\')>-1">\
	            <label class="pl20 c-333 c-f14" for="">自定义:</label>\
	            <el-date-picker v-model="start" type="date" unlink-panels placeholder="开始日期" value-format="yyyy-MM-dd" @change="changeDate" class="w160" :clearable="false" :picker-options="pickerOptions">\
				</el-date-picker>\
				<span class="c-999">-</span>\
				<el-date-picker v-model="end" type="date" unlink-panels placeholder="结束日期" value-format="yyyy-MM-dd" @change="changeDate" class="w160" :clearable="false" :picker-options="pickerOptions">\
				</el-date-picker>\
			</div>\
        </div>',
        props:["show"],
        data: function(){
            return {
               	showDiv:["custom","year","month"],
               	start:"",
               	end:"",
               	months:[],
				years:[],
				chooseMonth:"",
				chooseYear:"",
				nowyear:'',
				nowmonth:'',
				pickerOptions:{
					disabledDate(time) {
		                return time.getTime() > Date.now()
		        	},
				}
            }
        },
        mounted: function(){
		    var vm=this
        	EventBus.$on("init-FilterDate", function(arg){
        		vm.initData(arg)
        	})
        },
        methods: {
        	initData:function(showDiv){
		        var vm=this
		        
		        if(showDiv){
		        	vm.showDiv = showDiv
		        }
		        
	            //初始化时间
				var now = new Date();
					
				vm.nowyear = vm.chooseYear = now.getFullYear()
				vm.nowmonth = now.getMonth()+1
				vm.years = []
				for(i=vm.nowyear; i>=2019; i--){
					vm.years.push(i)
				}
				vm.months = [{code:"00",name:"全部",value:0}]
				for(i=1; i<=12; i++){
					var month1= i<=9 ? "0"+i : i
					vm.months.push({code:month1,name:i+"月",value:i})
				}
				vm.selectChange()
        	},
	        changeDate:function(){
	        	var vm=this
	        	vm.chooseMonth = ''
	        	vm.chooseYear = ''
	        	console.log("changeDate")
	        	if(vm.start>vm.end){
	        		vm.$message({
			          message: '开始时间应小于结束时间',
			          type: 'warning'
			        });
	        	}else{
	        		vm.initSearch()
	        	}
	        },
	        selectChange:function(){
	        	var vm=this
	        	if(vm.nowyear==vm.chooseYear&&vm.chooseMonth>vm.nowmonth){
	        		vm.chooseMonth = "00"
	        	}
	        	if(vm.chooseYear){
	        		if(!vm.chooseMonth) vm.chooseMonth ="00"
	        		if(vm.chooseMonth){
	        			if(vm.chooseMonth == "00"){
		        			if(vm.chooseYear == vm.nowyear){
								vm.start = vm.chooseYear+"-01-01"
								vm.end = new Date().format("yyyy-MM-dd")
		        			}else{
								vm.start = vm.chooseYear+"-01-01"
								vm.end = vm.chooseYear+"-12-31"
		        			}
	        			}else{
		        			if(vm.chooseMonth == vm.nowmonth){
								vm.start = vm.chooseYear+"-"+vm.chooseMonth+"-01"
								vm.end = new Date().format("yyyy-MM-dd")
		        			}else{
		        				var endDate = new Date(vm.chooseYear+"-"+vm.chooseMonth+"-01");
								endDate.setMonth(endDate.getMonth()+1);
								endDate.setDate(0);
								vm.start = vm.chooseYear+"-"+vm.chooseMonth+"-01"
								vm.end = new Date(endDate).format("yyyy-MM-dd")
		        			}
	        			}
	        		}
	        		vm.initSearch()
	        	}
	        },
        	initSearch:function(){
        		var vm=this
        		vm.$emit("initsearch",{year:vm.chooseYear,month:vm.chooseMonth,start:vm.start,end:vm.end})
        	}
        },
    })
})()

+ 5 - 2
component/statistics/renew-progress-filter.js

@ -11,14 +11,17 @@
						<div class="div-btn c-33" :class="{\'active\': lowCode==\'\'}" @click="contentClick(\'\', \'所有居民\')">\
							<a href="#" class="f-fs14">所有居民</a>\
						</div>\
						<div class="div-btn c-33" :class="{\'active\': lowCode==4}" @click="contentClick(4, \'十大人群签约\')">\
							<a href="#" class="f-fs14">十大人群签约</a>\
						</div>\
					</div>\
					<div class="mt20 div-group-btn c-row ml40 mr10">\
						<div class="div-btn c-33" :class="{\'active\': lowCode==3}" @click="contentClick(3, \'65岁以上签约\')">\
							<a href="#" class="f-fs14">65岁以上签约</a>\
						</div>\
						<div class="div-btn c-33" :class="{\'active\': lowCode==1}" @click="contentClick(1, \'高血压\')">\
							<a href="#" class="f-fs14">高血压</a>\
						</div>\
					</div>\
					<div class="mt20 div-group-btn c-row ml40 mr10">\
						<div class="div-btn c-33" :class="{\'active\': lowCode==2}" @click="contentClick(2, \'糖尿病\')">\
							<a href="#" class="f-fs14">糖尿病</a>\
						</div>\

+ 5 - 2
component/statistics/sign-progress-filter.js

@ -14,11 +14,14 @@
						<div class="div-btn c-33" :class="{\'active\': analysisType==2}" @click="contentClick(2, \'\', \'按人口\')">\
							<a href="#" class="f-fs14">按人口</a>\
						</div>\
						<div class="div-btn c-33" :class="{\'active\': analysisType==5}" @click="contentClick(5, 3, \'65岁以上签约\')">\
							<a href="#" class="f-fs14">65岁以上签约</a>\
						<div class="div-btn c-33" :class="{\'active\': analysisType==6}" @click="contentClick(6, 4, \'十大人群签约\')">\
							<a href="#" class="f-fs14">十大人群签约</a>\
						</div>\
					</div>\
					<div class="mt20 div-group-btn c-row ml40">\
						<div class="div-btn c-33" :class="{\'active\': analysisType==5}" @click="contentClick(5, 3, \'65岁以上签约\')">\
							<a href="#" class="f-fs14">65岁以上签约</a>\
						</div>\
						<div class="div-btn c-33" :class="{\'active\': analysisType==3}" @click="contentClick(3, 1, \'高血压\')">\
							<a href="#" class="f-fs14">高血压</a>\
						</div>\

BIN
images/jiankangguanli_icon.png