Browse Source

Merge branch 'master' of http://192.168.1.220:10080/raolu/PC-application

zyz 7 years ago
parent
commit
e8e77bb70e

+ 7 - 0
api/statistics-api.js

@ -35,6 +35,13 @@
        },
        articleLowlevelTotal: function(data){
            return httpRequest.get("/statistics/article_lowlevel_total", {data: data});
        },
        lowlevelData: function(url, data){
            return httpRequest.get(url, {data: data});
        },
        //获得团队的详情
        getTeamInfo: function(data){
            return httpRequest.get("doctor/admin-teams/teams/info", {data: data});
        }
    }

+ 115 - 0
app/statistics/area-data-panel.html

@ -0,0 +1,115 @@
<!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/common.css"/>
    </head>
    <body>
        <div id="main">
            <area-data-panel v-on:getnewdata="getAreaData" :headers="headers" :rows="rows"></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="../../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="../../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="../../component/common/event-bus.js"></script>
        <script src="../../component/common/vuedals.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/area-data-panel.js" type="text/javascript" charset="utf-8"></script>
        <script src="js/common.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            (function(){
                Vue.use(Vuedals.default);
                new Vue({
                    el: "#main",
                    data: {
                        headers: [],
                        rows: [],
                        level: 4,
                        lowLevel: '',
                        index: '3,22',
                        area: '350200',
                        sort: 1,
                        year: 2017,
                        endDate: '2018-03-12',
                        reqUrl: 'statistics/lowlevel_total_mesh'
                    },
                    components: {
                        vuedals: Vuedals.Component
                    },
                    methods: {
                        changeLevel: function(arg){
                            var level = arg.level;
                            if(this.level > 2 && this.lowLevel != 1){
                                console.log("next");
                                //跳转去下一级数据
                                this.level = level --;
                            }
                        },
                        changeLowlevel: function(arg){
                            //点击tab时,获取下一级的数据
                            this.lowLevel = arg.lowLevel;
                        },
                        getAreaData: function(arg){
                            this.level = arg.level;
                            this.lowLevel = arg.lowLevel;
                            this.area = arg.area;
                            getAreaData(this);
                        }
                    },
                    mounted: function(){
                        var vm = this;
                        getAreaData(vm);
                    }
                })
                
                function getAreaData(vm){
                    var params = {
                        index: vm.index,
                        level: vm.level,
                        area: vm.area,
                        sort: vm.sort,
                        year: vm.year,
                        endDate: vm.endDate,
                        lowLevel: vm.lowLevel
                    };
                    statisticAPI.lowlevelData(vm.reqUrl, params).then(function(res){
                        if(res.status == 200){
                            for(i in res.data){
                                var list = res.data[i];
                                var topArr = soreRank(getKeyValueArr(list, 'amount'));
                                var arr = _.map(list, function(o, index){
                                    var amount = o.amount.split(","); // 咨询量, 未回复咨询量
                                    return {
                                        rank: topArr[index],
                                        code: o.code,
                                        name: o.name,
                                        cols: [o.name, amount[0], amount[1]]
                                    }
                                });
                                vm.headers = ["排名", "咨询量", "未回复"];
                                vm.rows = arr;
                            }
                        }else{
                            console.log(res.msg);
                        }
                    })
                }
            })()
        </script>
    </body>
</html>

+ 11 - 258
app/statistics/comprehensive-analysis.html

@ -14,264 +14,17 @@
        <link rel="stylesheet" type="text/css" href="css/common.css"/>
    </head>
    <body>
        <div class="h45">
            <div class="demo-comtop">
                <a class="mui-action-back"></a>
                <h1>总体分析
                    <img src="../images/yiwen_icon.png" class="info-icon" width="20">
                </h1>
                <a class="header-link">
                    <img src="../images/hanbaobao_icon.png" width="25" class="mt10">
                </a>
            </div>
        </div>
        <div class="mui-scroll-wrapper" style="top: 46px">
            <div class="mui-scroll">
                <div class="ui-grid ui-grid-middle information">
                    <div class="ui-col-1 plr10 ptb5" id="infoText"></div>
                    <div class="ui-col-0" id="closeBtn"><img src="../images/guanbi_01_btn.png" width="20"></div>
                </div>
                
                <!-- 位置信息 start -->
                <div class="ui-grid ui-grid-middle location-div">
                    <div class="ui-col-0 text-box c-f13 c-nowrap" style="max-width:60%;">
                        <img src="../images/dizhi_icon.png" width="12">
                        <span id="areaTitle" class="title c-666 c-f13 ml5"></span>
                    </div>
                    <div class="ui-col-0">
                        <span class="jiezhi-time c-f13"></span>
                    </div>
                    <div class="ui-col-1 c-t-right"><span class="choose-label"></span></div>
                </div>
                <!-- 位置信息 end -->
                <div id='textTj' style="" class="clearfix ">
                    <ul class="l-banner">
                        <li class="active" data-index='3'>
                            <div id="index_3" class="c-f18">0</div>
                            <div class="mt5 c-f14 l-name">咨询量</div>
                        </li>
                        <li data-index='4'>
                            <div id="index_4" class="c-f18">0</div>
                            <div class="mt5 c-f14 l-name">随访量</div>
                        </li>
                        <li data-index='5'>
                            <div id="index_5" class="c-f18">0</div>
                            <div class="mt5 c-f14 l-name">健康教育</div>
                        </li>
                    </ul>
                    <ul class="l-banner">
                        <li data-index='27'>
                            <div id="index_27" class="c-f18">0</div>
                            <div class="mt5 c-f14 l-name">代预约量</div>
                        </li>
                        <li data-index='21'>
                            <div id="index_21" class="c-f18">0</div>
                            <div class="mt5 c-f14 l-name">绑定微信</div>
                        </li>
                        <li data-index='20'>
                            <div id="index_20" class="c-f18">0</div>
                            <div class="mt5 c-f14 l-name">绑定设备</div>
                        </li>
                    </ul>
                </div>
                <div class="mb10 c-border-tb bgc-fff c-hide" id="pieChartsPanel">
                    <div class="plr10 ptb10 c-border-b">
                        <img src="../images/tuisongqingkuang_icon.png" width="22">
                        <span class="c-f16 c-333 ml5">推送情况</span>
                    </div>
                    <div class="ui-grid ui-grid-middle ptb10">
                        <div class="ui-col-0 c-t-center c-ffc800 plr10 c-w-33">
                            <div class="c-f20 wz-num">0</div>
                            <!--<div class="c-f14">39%</div>-->
                            <div class="c-f12">健康文章推送量</div>
                        </div>
                        <div class="ui-col-1 c-position-r c-t-center">
                            <div class="position-center-text c-f14">推送情况</div>
                            <div id="pieChart" style="width: 100%; height:100px;"></div>
                        </div>
                        <div class="ui-col-0 c-t-center c-17b3ec plr10 c-w-33">
                            <div class="c-f20 zd-num">0</div>
                            <!--<div class="c-f14">61%</div>-->
                            <div class="c-f12">健康指导推送量</div>
                        </div>
                    </div>
                </div>
                <div class="mtb10 bgc-fff c-border-tb pb10">
                    <div class="ui-grid ui-grid-middle plr10 c-border-b">
                        <div class="ui-col-0">
                            <img src="../images/jiaofeiqushi_icon.png" width="22">
                            <span class="c-323232 c-f16 ml5"><span id="tagName">咨询量</span>新增趋势</span>
                        </div>
                        <div class="ui-col-1 c-t-right ptb5">
                            <span class="date-tag active" data-type="1">日</span><!--
                            --><span class="date-tag" data-type="2">周</span><!--
                            --><span class="date-tag" data-type="3">月</span>
                        </div>
                    </div>
                    <div class="clearfix mt5 plr10">
                        <div class="fl c-f12 c-909090"><span id="startValue"></span> ~ <span id="endValue"></span>数据</div>
                        <div class="fr c-f12 c-909090">单位:人</div>
                    </div>
                    <div class="line-chart" id="lineChart" style="height: 200px; width: 100%;"></div>
                </div>
                <!--微信绑定再显示统计数据-->
                <div class="c-border-t bgc-fff c-hide" id="pieChartsPanel2">
                    <div class="plr10 ptb10 c-border-b">
                        <span class="blue-column mr5"></span>
                        <span class="c-f14 c-333 ml5 title"></span>
                    </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 jf-num"></div>
                            <div class="c-f12">已缴费人数</div>
                        </div>
                        <div class="ui-col-1 c-position-r">
                            <div class="blur-cycle-box">
                                <div class="c-f16 c-fff num mt10"></div>
                                <div class="c-f12 c-fff mt5">绑定率</div>
                            </div>
                            <div id="pieChart2" style="width: 100%; height:110px;"></div>
                        </div>
                        <div class="ui-col-0 c-t-center c-909090 plr10 c-w-33">
                            <div class="c-f20 wjf-num"></div>
                            <div class="c-f12">未缴费人数</div>
                        </div>
                    </div>
                </div>
                <div class="area-panel">
                    <div class="area-tab-panel">
                        <div class="area-tab active" data-val="4"><span>各区</span><i class="border-line-right"></i></div>
                        <div class="area-tab" data-val="3"><span>社区</span><i class="border-line-right"></i></div>
                        <div class="area-tab c-hide" data-val="2"><span>团队</span></div>
                    </div>
                    <table class="bottom-list-table mb20" id="listTable">
                    </table>
                </div>
            </div>
        </div>
        <!-- 团队信息模块 -->
        <div class="modal-overlay"></div>
        <div class="modal-content">
            <div class="div-header-title">
                <div class="div-close"></div>
                <div class="div-overlay-img"></div>
                <div class="div-overlay-title">团队详情</div>
            </div>
            <div class="div-overlay-content">
                <div class="pt15" id="teamInfoBox">
                    
                </div>
            </div>
        </div>
        <div id="main"></div>
        
        <script type="text/html" id="data-list">
            <thead>
                <tr>
                    <th>排名</th>
                    {{if index == '3'}}
                    <th>咨询量</th>
                    <th>未回复</th>
                    {{/if}}
                    {{if index == '4'}}
                    <th>随访量</th>
                    {{/if}}
                    {{if index == '5'}}
                    <th>总推送量</th>
                    <th>阅读量</th>
                    <th>阅读率</th>
                    {{/if}}
                    {{if index == '27'}}
                    <th>代预约量</th>
                    {{/if}}
                    {{if index == '21'}}
                    <th>绑定率</th>
                    <th>已缴费</th>
                    <th>未缴费</th>
                    {{/if}}
                    {{if index == '20'}}
                    <th>绑定设备</th>
                    {{/if}}
                    {{if level>2 && lowLevel != 1}}
                    <th width="20"></th>
                    {{/if}}
                </tr>
            </thead>
            <tbody>
                {{each list as v i}}
                <tr class="data-row" data-name="{{v.name}}" data-code="{{v.code}}" data-type="">
                    <td class="area-name">
                        {{if v.top == 1}}
                        <div class="ranking ranking1">{{v.top}}</div>
                        {{else if v.top == 2}}
                        <div class="ranking ranking2">{{v.top}}</div>
                        {{else if v.top == 3}}
                        <div class="ranking ranking3">{{v.top}}</div>
                        {{else}}
                        <div class="ranking">{{v.top}}</div>
                        {{/if}}
                        <div class="ui-col-1 c-nowrap-multi">{{v.name}}</div>
                    </td>
                    {{if index == '21'}}
                        <td>{{v.bindRate || 0}}%</td>
                        <td>{{v.weChatAmount1}}</td>
                        <td>{{v.weChatAmount0}}</td> 
                    {{else}}
                        <td>{{v.amount}}</td>
                        {{if index == '3'}}
                        <td>{{v.noAmount}}</td>
                        {{/if}}
                        {{if index == '5'}}
                        <td>{{v.readNum}}</td>
                        <td>{{v.readRate}}</td>
                        {{/if}}
                    {{/if}}
                    {{if level>2 && lowLevel != 1}}
                    <td><i class="fa fa-angle-right"></i></td>
                    {{/if}}
                </tr>
                {{/each}}
            </tbody>
        </script>
        
        <!-- 团队信息模板 -->
        <script type="text/html" id="teamInfo">
            <div class="plr15 pb20">
                <span class="c-f14 c-bold c-333">团队名称:</span>
                <span class="c-f14 c-333">{{team.name}}</span>
            </div>
            <div class="plr15 pb20">
                <span class="c-f14 c-bold c-333">所在社区:</span>
                <span class="c-f14 c-333">{{team.hospitalName}}</span>
            </div>
            <div class="plr15 pb20">
                <span class="c-f14 c-bold c-333">团队长:</span>
                <span class="c-f14 c-333">{{team.leaderName}}</span>
            </div>
            <div class="plr15 pb20">
                <span class="c-f14 c-bold c-333">团队成员(<span class="span-team-count">{{memberLength}}</span>人):</span>
                <p class="c-f14 c-333 mt10">
                    {{each members as member index}}
                    {{if index == 0}}
                        {{member.name}}
                    {{else if index < 20}}
                        、{{member.name}}
                    {{else if index == 20}}
                    、{{member.name}}等
                    {{/if}}
                    {{/each}}
                </p>
            </div>
        </script>
        
        <script src="../../../js/jquery/2.1.3/jquery.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../js/mui.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../js/common_http.js" type="text/javascript" charset="utf-8"></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/app.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../js/template.js" type="text/javascript" charset="utf-8"></script>
        <!--<script src="../../../widget/echarts/3.0/js/echarts.min.js" type="text/javascript" charset="utf-8"></script>-->
        <script src="../js/echarts.common.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../js/comprehensive-analysis.js" type="text/javascript" charset="utf-8"></script>
        <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/es6-promise.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/underscore.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="../../component/common/event-bus.js"></script>
        <script src="../../component/statistics/line-chart.js" type="text/javascript" charset="utf-8"></script>
        <script src="js/comprehensive-analysis.js" type="text/javascript" charset="utf-8"></script>
    </body>
</html>

+ 158 - 6
app/statistics/css/common.css

@ -84,7 +84,7 @@
    display: -webkit-box;
    height: 45px;
    line-height: 45px;
    margin: 0 10px;
    margin: 0 50px;
    background-color: #fff;
    border: 1px solid #e1e1e1;
    border-bottom: 0;
@ -97,6 +97,19 @@
    text-align: center;
    position: relative;
}
.area-tab:after{
    content: '';
    position: absolute;
    width: 1px;
    height: 20px;
    right: 0;
    top: 50%;
    margin-top: -10px;
    background-color: #e1e1e1;
}
.area-tab:last-child:after{
    width: 0;
}
.area-tab .border-line-right{
    display: inline-block;
    position: absolute;
@ -121,10 +134,13 @@
}
.bottom-list-table{
    border-top: 1px solid #e1e1e1;
    border-left: 1px solid #e1e1e1;
    border-right: 1px solid #e1e1e1;
    background-color: #fff;
    width: 100%;
    text-align: center;
    font-size: 14px;
    border-spacing: 0;
}
.bottom-list-table thead{
    height: 40px;
@ -142,10 +158,14 @@
}
.bottom-list-table td{
    padding: 10px 0;
    border-bottom: 1px solid #e1e1e1;
}
.bottom-list-table tbody>tr{
    border-bottom: 1px solid #e1e1e1;
}
.bottom-list-table tbody>tr:hover{
    background-color: #f2f4f6;
}
/*.bottom-list-table tbody>tr:first-child{
    border-top: 0;
}*/
@ -178,24 +198,25 @@
    color: #909090;
}
.ranking{
    background-image: url(../images/paiming_4_icon.png);
    background-image: url(../../../images/paiming_4_icon.png);
    background-size: 18px 24px;
    width: 18px;
    height: 24px;
    font-size: 12px;
    line-height: 20px;
    color: #fff;
    text-align: center;
    margin-right: 5px;
    margin-right: 10px;
    -webkit-box-flex: 0;
}
.ranking1{
    background-image: url(../images/paiming_1_icon.png);
    background-image: url(../../../images/paiming_1_icon.png);
}
.ranking2{
    background-image: url(../images/paiming_2_icon.png);
    background-image: url(../../../images/paiming_2_icon.png);
}
.ranking3{
    background-image: url(../images/paiming_3_icon.png);
    background-image: url(../../../images/paiming_3_icon.png);
}
.modal-overlay{
    position: absolute;
@ -341,3 +362,134 @@
    text-align: center;
    margin-top: -10px;
}
.div-header {
	padding: 0px 10px 0px 20px;
	height: 40px;
	border-bottom: 1px solid #DCDCDC;
}
.div-header img {
	cursor: pointer;
}
.fl {
	float: left;
}
.fr {
	float: right
}
.mt10 {
	margin-top: 10px;
}
.mr10 {
	margin-right: 10px;
}
.vam {
	vertical-align: middle;
}
.vertical-line {
	border-right: 1px solid #ccc;
	height: 25px;
	width: 1px;
	display: inline-block;
	margin-right: 10px;
	vertical-align: middle;
}
.application-name {
	font-size: 14px;
	color: #333;
	font-weight: bold;
	margin-right: 10px;
	display: inline-block;
	height: 40px;
	line-height: 40px;
}
.c-666 {
	color: #666;
}
.c-12b7f5 {
	color: #12B7F5;
}
.cb-ebebf5 {
	background: #EBEBF5;
}
.c-f12 {
	font-size: 12px;
}
.height-30 {
	height: 30px;
}
.lheight-30 {
	line-height: 30px;
}
.pl20 {
	padding-left: 20px;
}
.ml20 {
	margin-left: 20px;
}
.mr20 {
	margin-right: 20px;
}
.tac {
	text-align: center;
}
.role-select{
    height: 30px;
    min-width: 100px;
    display: inline-block;
}
.role-select select{
    width: 100%;
    height: 30px;
    appearance:none;
    -moz-appearance:none;
    -webkit-appearance:none;
    background: url(../../../images/zhankai_jiantou_icon.png) no-repeat scroll right center transparent;
    background-position-x: 95%;
    background-size: 11px 11px;
    padding-right: 30px;
    padding-left: 10px;
    border: none;
    color: #909090;
}
.section-header{
    position: relative;
}
.section-label{
    display: inline-block;
    padding: 3px 15px;
    background-color: #ebebf5;
    border-radius: 12px;
    font-size: 14px;
    position: relative;
}
.section-header .grey-line{
    display: inline-block;
    position: absolute;
    top: 50%;
    left: 10px;
    right: 10px;
    width: calc(100% - 20px);
    height: 1px;
    background-color: #ebebf5;
    z-index: -1;
}

+ 74 - 6
app/statistics/home.html

@ -1,9 +1,77 @@
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
	</body>
    <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="../../fonts/font-awesome/css/font-awesome.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../css/bootstrap.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/common.css"/>
    </head>
    <body>
        <div id="main">
            <div class="div-header">
                <div class="fl">
                    <div class="application-name">统计分析</div>
                    <div class="vertical-line"></div>
                    <div class="role-select">
                        <select class="select" v-model="selectedRole">
                            <option v-for="role in roles" :value="role.code">{{role.name}}</option>
                        </select>
                    </div>
                </div>
                <div class="fr mt10">
                    <img v-show="isopen" @click="open" src="../../images/zhankai_icon.png" width="18" height="18" />
                </div>
            </div>
            <!-- -->
            
            <!--签约分析-->
            <div class="mt10">
                <div class="section-header plr10">
                    <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">
                            <img :src="item.photo">
                            <div class="c-f12 c-999 mt10">{{item.label}}</div>
                        </div>
                    </div>
                </div>
            </div>
            <!--服务分析-->
            <div class="mt10">
                <div class="section-header plr10">
                    <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 serviceAnalysis" @click="showDetail(item.url)" class="c-20 c-t-center">
                            <img :src="item.photo">
                            <div class="c-f12 c-999 mt10">{{item.label}}</div>
                        </div>
                    </div>
                </div>
            </div>
        </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/es6-promise.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../js/underscore.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="../../component/common/event-bus.js"></script>
        <script src="js/common.js" type="text/javascript" charset="utf-8"></script>
        <script src="js/home.js" type="text/javascript" charset="utf-8"></script>
    </body>
</html>

+ 49 - 0
app/statistics/js/common.js

@ -0,0 +1,49 @@
function getStartDate(chooseYear){
    // 按年度来计算的时候,开始时间是该年度7月1号还是到下一个年的6月30号结束
    if(chooseYear == 2016){
        return chooseYear + "-08-01";
    }else{
        return chooseYear+'-07-01';
    }
}
//获取结束时间
function getEndDate(chooseYear){
    chooseYear = parseInt(chooseYear);
    var endDate = new Date((chooseYear+1) + '-06-30'),
        now = new Date();
    if(now <= endDate){
        return now.format("yyyy-MM-dd");
    }else{
        return (chooseYear+1) + '-06-30';
    }
}
/*
 * 获取用来排序的字段值,返回数组
 * 参数: list - 列表, key - 字段的名称 
 */
function getKeyValueArr(list, key){
    var arr = [];
    for(var k in list){
        arr.push(list[k][key]);
    }
    
    return arr;
}
/*
 * 排名
 */
function soreRank(arr){
    var temp = [];
    var lis = [];
    for(var i=0;i<arr.length;i++){
        lis.push(arr[i]);
    }
    lis = _.uniq(lis);
    for(var i=0;i<arr.length;i++){
        temp[i] = lis.indexOf(arr[i])+1;
    }
    
    return temp;
}

+ 6 - 0
app/statistics/js/comprehensive-analysis.js

@ -0,0 +1,6 @@
new Vue({
    el: "#main",
    data: {
        
    }
})

+ 66 - 0
app/statistics/js/home.js

@ -0,0 +1,66 @@
new Vue({
    el: '#main',
    data: {
        roles: [{"high":"0","code":"3502050100","level":"4","name":"海沧区嵩屿街道社区卫生服务中心","isManage":"1","authOperate":"0","areas":"3502050100"},
            {"high":"1","code":"350200","level":"2","name":"厦门市卫生与计划生育委员会","isManage":"1","authOperate":"0","areas":"350200"}],
        selectedRole: "",
        isopen: true,
        signAnalysis: [{
            photo: '../../images/qianyujingzhan_icon.png',
            label: '签约进展',
            url: ''
        },{
            photo: '../../images/xuqianjingzhan_icon.png',
            label: '续签进展',
            url: ''
        },{
            photo: '../../images/jumingfenxi_icon.png',
            label: '居民分析',
            url: 'resident-analysis.html'
        },{
            photo: '../../images/tuigaiqian_icon.png',
            label: '退改签',
            url: ''
        },{
            photo: '../../images/lianglvfenxi_icon.png',
            label: '两率分析',
            url: ''
        }],
        serviceAnalysis: [{
            photo: '../../images/zongtifenxi_icon.png',
            label: '总体分析',
            url: ''
        },{
            photo: '../../images/zixunfenxi_icon.png',
            label: '咨询分析',
            url: ''
        },{
            photo: '../../images/pijianfenxi_icon.png',
            label: '评价分析',
            url: ''
        },{
            photo: '../../images/changcufangfenxi_icon.png',
            label: '长处方分析',
            url: ''
        }]
    },
    methods: {
        open: function(){
            EventBus.$emit('open-click', {});
        },
        showDetail: function(url){
            window.location.href = url;
        }
    },
    mounted: function(){
        this.selectedRole = this.roles[0].code;
        var selected = this.roles[0];
        window.localStorage.setItem("selectedRole", JSON.stringify(selected));
    },
    watch: {
        selectedRole: function(val){
            var selected = _.findWhere(this.roles, {code: val});
            window.localStorage.setItem("selectedRole", JSON.stringify(selected));
        }
    }
})

+ 13 - 0
app/statistics/js/resident-analysis.js

@ -0,0 +1,13 @@
new Vue({
  el: '#main',
  data: {
		isback: false,
  		isrefresh: true,
  		isfilter:true,
  		isopen:true
	},
	mounted: function() {
	
		
	},
})

+ 13 - 0
app/statistics/js/test.js

@ -0,0 +1,13 @@
new Vue({
  el: '#main',
  data: {
		isback: false,
  		isrefresh: true,
  		isfilter:true,
  		isopen:true
	},
	mounted: function() {
	
		
	},
})

+ 197 - 0
app/statistics/resident-analysis.html

@ -0,0 +1,197 @@
<!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/common.css" />
		<style>
			.c-12b7f5{color:#12B7F5;}
			.c-fb5dab{color: #fb5dab;}
			.c-cd67fd{color:#cd67fd}
		</style>
	</head>
	<body style="margin: 0;">
		<div id="main">
			<header-tab :isback="isback" :isrefresh="isrefresh" :isfilter="isfilter" :isopen="isopen"></header-tab>
			<header-prompt></header-prompt>
			<div>
				<div style="margin: 20px 18px 0px 10px;width: calc(50% - 32px);;height: 180px;border: 1px solid rgb(220, 220, 220);border-radius: 10px;float: left;">
					<div style="height: 40px; line-height: 40px; border-bottom: 1px solid rgb(220, 220, 220);">
						<div style="font-size: 14px; margin-left: 20px; color: rgb(51, 51, 51);font-weight: bold;">缴费情况</div>
					</div>
					<div style="height: 140px;position: relative;">
						<div class="div-yijiaofei" style="position: absolute;right: 10px;color:#12B7F5;text-align: center;top: 50%;margin-top: -25px;">
							<div class="y-amount c-f16">975</div>
							<div class="y-rate c-f14">82.42%</div>
							<div class="y-title c-f12">已缴费人数</div>
						</div>
						<div class="div-weijiaofei" style="position: absolute;left: 10px;color:#FFC800;text-align: center;top: 50%;margin-top: -25px;">
							<div class="y-amount c-f16">208</div>
							<div class="y-rate c-f14">17.58%</div>
							<div class="y-title c-f12">未缴费人数</div>
						</div>
						<div id="jiaoFeiChart" style="height: 140px;"></div>
					</div>
				</div>
				<div style="margin: 20px 10px 0px 18px;width: calc(50% - 32px);height: 180px;border: 1px solid rgb(220, 220, 220);border-radius: 10px;float: right;">
					<div style="height: 40px; line-height: 40px; border-bottom: 1px solid rgb(220, 220, 220);">
						<div style="font-size: 14px; margin-left: 20px; color: rgb(51, 51, 51);font-weight: bold;">健康分布</div>
					</div>
					<div style="height: 140px;position: relative;">
						<div id="healthChart" style="width: 100%;height: 140px;"></div>
						<div class="ui-col-1 ui-grid ui-grid-vertical" style="position: absolute;top: 50%;margin-top: -45px;right: 10px;">
							<div id="jkCatalogs">
								<div class="ui-col-1">
									<span style="height: 15px;background: #42C7FF;width: 15px;display: inline-block;"></span>
									<span class="div-gwrq c-f14" style="color: #42C7FF;">93.85%</span>
									<span class="c-f12 c-909090">(未标注)</span>
								</div>
								<div class="ui-col-1">
									<span style="height: 15px;background: #FFC84C;width: 15px;display: inline-block"></span>
									<span class="div-gwrq c-f14" style="color: #FFC84C;">2.67%</span>
									<span class="c-f12 c-909090">(健康人群)</span>
								</div>
								<div class="ui-col-1">
									<span style="height: 15px;background: #FB5DAB;width: 15px;display: inline-block"></span>
									<span class="div-gwrq c-f14" style="color: #FB5DAB;">3.08%</span>
									<span class="c-f12 c-666">(患病人群)</span>
								</div>
								<div class="ui-col-1">
									<span style="height: 15px;background: #CD67FD;width: 15px;display: inline-block"></span>
									<span class="div-gwrq c-f14" style="color: #CD67FD;">0.41%</span>
									<span class="c-f12 c-666">(高危人群)</span>
								</div>
								<div class="ui-col-1">
									<span style="height: 15px;background: #795548;width: 15px;display: inline-block"></span>
									<span class="div-gwrq c-f14" style="color: #795548;">0.00%</span>
									<span class="c-f12 c-666">(恢复期人群)</span>
								</div>
							</div>
						</div>
					</div>
				</div>
			</div>
		</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/es6-promise.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../js/underscore.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="../../component/common/event-bus.js"></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="../../component/statistics/header-tab.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript" src="../../component/statistics/header-prompt.js"></script>
		<script src="js/resident-analysis.js" type="text/javascript" charset="UTF-8"></script>
		<script>
			var jiaoFeiChart = echarts.init(document.getElementById('jiaoFeiChart'));
			var jiaoFeiOptions = {
				color: ['#FFC800', '#12b7f5'],
				series: [{
					type: 'pie',
					radius: ['50%', '70%'],
					center: ['50%', '50%'], //饼图的位置 
					data: [{
							name: '已缴费人数',
							value: 30,
							itemStyle: {
								normal: {
									label: {
										show: false,
									},
									labelLine: {
										show: false
									}
								}
							}
						},
						{
							name: '未缴费人数',
							value: 70,
							itemStyle: {
								normal: {
									label: {
										show: true,
										position: 'center',
										color: '#666',
										formatter: function(params) {
											return '缴费情况\n分析';
										}
									},
									labelLine: {
										show: false
									}
								}
							}
						}
					]
				}]
			};
			jiaoFeiChart.setOption(jiaoFeiOptions);
			window.onresize = jiaoFeiChart.resize;
			var healthChart = echarts.init(document.getElementById('healthChart'));
			var healthOptions = {
				color: ['#FFC800', '#12b7f5'],
				series: [{
					type: 'pie',
					radius: ['50%', '70%'],
					center: ['25%', '50%'], //饼图的位置 
					data: [{
							name: '已缴费人数',
							value: 30,
							itemStyle: {
								normal: {
									label: {
										show: false,
									},
									labelLine: {
										show: false
									}
								}
							}
						},
						{
							name: '未缴费人数',
							value: 70,
							itemStyle: {
								normal: {
									label: {
										show: true,
										position: 'center',
										color: '#666',
										formatter: function(params) {
											return '缴费情况\n分析';
										}
									},
									labelLine: {
										show: false
									}
								}
							}
						}
					]
				}]
			};
			healthChart.setOption(healthOptions);
			window.onresize = healthChart.resize;
		</script>
	</body>
</html>

+ 34 - 0
app/statistics/test.html

@ -0,0 +1,34 @@
<!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="common.css" />
		<link rel="stylesheet" type="text/css" href="css/common.css" />
	</head>
	<body>
		<div id="main">
			<header-tab :isback="isback" :isrefresh="isrefresh" :isfilter="isfilter" :isopen="isopen" ></header-tab>
			<header-prompt></header-prompt>
		</div>
		
		
		<script type="text/javascript" src="../../js/vue.js"></script>
		<script src="../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../component/statistics/header-tab.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript" src="../../component/statistics/header-prompt.js"></script>
		<script src="js/test.js"></script>
	</body> 
</html>

File diff suppressed because it is too large
+ 265 - 0
component/common/vuedals.js


+ 77 - 0
component/statistics/area-data-panel.js

@ -0,0 +1,77 @@
(function(){
//  Vue.component('vuedals', Vuedals.Component);
    Vue.component('area-data-panel',{
        template: '<div class="area-panel">\
                <div class="area-tab-panel">\
                    <div v-show="level==4" class="area-tab" :class="{\'active\': level==4 && !lowLevel}" @click="getLowCodeData(3)"><span>各区</span></div>\
                    <div v-show="level >= 3" class="area-tab" :class="{\'active\': level==3 || lowLevel==2}" @click="getLowCodeData(2)"><span>社区</span></div>\
                    <div class="area-tab" :class="{\'active\': level==2 || lowLevel==1}" @click="getLowCodeData(1)"><span>团队</span></div>\
                </div>\
                <table class="bottom-list-table mb20" id="listTable">\
                    <thead><tr>\
                        <th v-for="th in headers">{{th}}</th>\
                        <th v-show="level>2 && lowLevel != 1" width="20"></th>\
                    </tr></thead>\
                    <tbody>\
                        <tr v-for="row in rows" class="data-row" @click="getLowLeverData(row)">\
                            <td v-for="(col, index) in row.cols" :class="{\'area-name\': index == 0}">\
                                <div v-if="index==0" class="ranking" :class="{\'ranking1\': row.rank==1, \'ranking2\': row.rank==2, \'ranking3\': row.rank==3}">{{row.rank}}</div>\
                                <div v-if="index==0" class="ui-col-1 c-nowrap-multi">{{col}}</div>\
                                <span v-else>{{col}}</span>\
                            </td>\
                            <td v-show="level>2 && lowLevel != 1"><i class="fa fa-angle-right"></i></td>\
                        </tr>\
                    </tbody>\
                </table>\
            </div>',
        props:['headers','rows'],
        data: function(){
            return {
//              headers: ["排名", "咨询量", "未回复"],
//              rows: [{rank: 1, cols: ["思明区", "100", "2"]}, 
//                  {rank: 2, cols: ["海沧区", "98", "1"]}],
                level: 4,
                lowLevel: '',
                area: '350200'
            }
        },
        methods: {
            getLowLeverData: function(row){
                if(this.level > 2 && this.lowLevel != 1){
                    //跳转去下一级数据
                    this.level --;
                    this.area = row.code;
                    //触发组件监听事件,去父页面请求新的数据
                    this.$emit("getnewdata", {
                        level: this.level,
                        area: this.area,
                        lowLevel: this.lowLevel
                    });
                }else{
                    //弹框显示团队信息
                    Vuedals.Bus.$emit('new', {
                        title: '团队信息',
                        component: 'team-info',
                        props: {
                            teamId: 644
                        }
                    });
                }
            },
            getLowCodeData: function(code){
                if(code == 3){
                    this.lowLevel = '';
                }else{
                    this.lowLevel = code;
                }
                
                //触发组件监听事件,去父页面请求新的数据
                this.$emit("getnewdata", {
                    level: this.level,
                    area: this.area,
                    lowLevel: this.lowLevel
                });
            }
        }
    });
})()

+ 20 - 0
component/statistics/header-prompt.js

@ -0,0 +1,20 @@
Vue.component('header-prompt', {
	template: '<div class="cb-ebebf5 height-30 lheight-30 pl20 c-f12">\
					<span id="area_title" class="c-666">厦门市卫生与计划生育委员会</span> (\
					<span id="jiezhi_time" class="c-666">09:13</span>)\
					<span id="select_date" class="c-12b7f5 ml20 mr20">2017年</span>\
					<span id="dimension_val" class="c-12b7f5">按任务</span>\
			</div>',
	props: [],
	data: function() {
		return {
			
		}
	},
	mounted: function() {
		
	},
	methods: {
		
	}
})

+ 41 - 0
component/statistics/header-tab.js

@ -0,0 +1,41 @@
Vue.component('header-tab', {
	template: '<div class="div-header">\
			<div class="fl">\
				<div class="application-name">签约进展</div>\
				<div class="vertical-line"></div>\
				<img v-show="isback" @click="back" src="../../images/fanhui_icon.png" width="18" height="18" class="mr10 vam" />\
				<img v-show="isrefresh" @click="refresh" src="../../images/shuaxin_icon.png" width="18" height="18" class="vam" />\
			</div>\
			<div class="fr mt10">\
				<img v-show="isfilter" @click="filter" src="../../images/xuanzhe_icon.png" width="18" height="18" class="mr10" />\
				<img v-show="isopen" @click="open" src="../../images/zhankai_icon.png" width="18" height="18" />\
			</div>\
		</div>',
	props: ["code","isback", "isrefresh","isfilter","isopen"],
	data: function() {
		return {
			
		}
	},
	mounted: function() {
		
	},
	methods: {
		//返回事件
		back:function(){
			EventBus.$emit('back-click', {});
		},
		//刷新事件
		refresh:function(){
			EventBus.$emit('refresh-click', {});
		},
		//筛选事件
		filter:function(){
			EventBus.$emit('filter-click', {});
		},
		//展开事件
		open:function(){
			EventBus.$emit('open-click', {});
		}
	}
})

+ 53 - 0
component/statistics/team-info.js

@ -0,0 +1,53 @@
(function(){
    Vue.component('team-info',{
        template: '<div>\
            <div class="pt15" id="teamInfoBox">\
                <div class="plr15 pb20">\
                <span class="c-f14 c-bold c-333">团队名称:</span>\
                <span class="c-f14 c-333">{{team.name}}</span>\
            </div>\
            <div class="plr15 pb20">\
                <span class="c-f14 c-bold c-333">所在社区:</span>\
                <span class="c-f14 c-333">{{team.hospitalName}}</span>\
            </div>\
            <div class="plr15 pb20">\
                <span class="c-f14 c-bold c-333">团队长:</span>\
                <span class="c-f14 c-333">{{team.leaderName}}</span>\
            </div>\
            <div class="plr15 pb20">\
                <span class="c-f14 c-bold c-333">团队成员(<span class="span-team-count">{{memberLength}}</span>人):</span>\
                <p class="c-f14 c-333 mt10">\
                    <span v-for="member in members">{{member.name}}</span>\
                </p>\
            </div>\
        </div>',
        props:['teamId'],
        data: function(){
            return {
                team: {},
                members: [],
                memberLength: 0
            }
        },
        mounted: function(){
            console.log(this.teamId);
            var vm = this;
            getTeamInfo(vm);
        }
    });
    
    function getTeamInfo(vm){
        var params = {
            teamId: vm.teamId
        };
        statisticAPI.getTeamInfo(params).then(function(res){
            if(res.status == 200){
                vm.team = res.data.team;
                vm.members = res.data.members;
                vm.memberLength = res.data.members.length;
            }else{
                console.log(res.msg);
            }
        })
    }
})()

BIN
images/lianglvfenxi_icon.png


BIN
images/zhankai_jiantou_icon.png