Browse Source

Merge branch 'master' of http://192.168.1.220:10080/EHR/app-big-data

zhanghaoyu 6 years ago
parent
commit
5b53a9893e

+ 6 - 1
component/common/event-bus.js

@ -1,2 +1,7 @@
var EventBus = new Vue()
var GlobalEventBus = new Vue()
var GlobalEventBus = new Vue()
if(!top.GlobalEventBus) {
	top.GlobalEventBus = GlobalEventBus
}
GlobalEventBus = top.GlobalEventBus

+ 21 - 0
component/common/nodata.js

@ -0,0 +1,21 @@
(function() {
	
	Vue.component('nodata', {
        template: '	<div class="nodata flex_coloumn f_xy_c" style="margin-top:150px">\
                            <img style="width:50%;max-width:200px" src="../../../page/bigDataOut/images/nodeData.png">\
                            <div class="mt10" style="font-size:16px;color:#909090">暂无数据</div>\
                    </div>',
		props: ["arr",'needShow'], //可以传数组 可以传显隐
		data: function() {
			return {
			}
		},
        computed: {
            hasData:function(){
                return  (arr && arr.length>0) || needShow
            }
        }
	})
})()

File diff suppressed because it is too large
+ 1 - 0
css/element.css


BIN
css/fonts/element-icons.woff


+ 20 - 0
js/api/bigDataOut-api.js

@ -0,0 +1,20 @@
(function(exports) {
	var bigDataOutApi = {
        // 获取热搜
		hot_words: function() {
            var params ={
                reCount:5,
                type:1
            }
            return httpRequest.get("/api/v1.0/resource/text_search/hot_words",{data: params,getServer:true})
        },
        //全文检索
		text_search: function(data) {
            return httpRequest.get("/api/v1.0/resource/text_search",{data: data,getServer:true})
        },
	}
	
	exports.bigDataOutApi = bigDataOutApi;
})(window)

+ 17 - 1
js/api/http-request.js

@ -1,20 +1,26 @@
(function(exports) {
	var publish_version = true;
	var server;
	var getServer;
	var agentName = "useragent"
	var userInfo = "userInfoForPay"
	var isNeedLogin = false
	var openServer,alertUrl;
	var asstoken = sessionStorage.getItem("asstoken") 
	if(publish_version) { // 生产环境配置
		server = "http://jksr.srswjw.gov.cn:1235";
		alertUrl="http://jksr.srswjw.gov.cn:1235/bigScreenShow";
		 getServer=server +'/gateway/pack-analyzer'
	} else { // 测试环境配置
		server = "http://172.19.103.70:1235"; // 测试环境
		server = "http://192.168.131.121:10220/"; // 测试环境
		getServer=server // 如果是测试环境的话也需要加网关
		alertUrl="http://172.19.103.70:1235/bigScreenShow";
//		server = "http://192.168.131.104:9088"; // 测试环境 周杰
//		 server = "http://192.168.131.105:9088"; // 测试环境 兴旺
	}
	//保存userAgent
	function saveUserAgent(obj) {
	    if(window.localStorage.getItem(agentName)){
@ -30,7 +36,8 @@
	}
	function httpGet(url, options, judge) {
		var setService = judge ? openServer : server
		var setService = judge ? openServer : server;
		setService =options.getServer?getServer:setService;
		//发送ajax请求
		return new Promise(function(resolve, reject) {
			$.ajax(setService + url,
@ -40,8 +47,14 @@
					beforeSend: function(request) {
						var userAgent = window.localStorage.getItem(agentName);
						request.setRequestHeader(agentName, userAgent);
						if(asstoken) {
                            request.setRequestHeader("token", asstoken);
                        }
					},
					error: function(res) {
						debugger
						top.toastr.error("网络错误无法请求")
						reject(res)
					},
@ -74,6 +87,9 @@
					beforeSend: function(request) {
						var userAgent = window.localStorage.getItem(agentName);
						request.setRequestHeader(agentName, userAgent);
						if(asstoken) {
                            request.setRequestHeader("token", asstoken);
                        }
					},
					error: function(res) {
						reject(res)

File diff suppressed because it is too large
+ 1 - 0
js/element.js


+ 16 - 0
js/head.js

@ -0,0 +1,16 @@
(function() {
	var version = "1.0"
	headcss([
		"../page/bigDataOut/css/flex.css",
		"../css/element.css",
		"../css/plugins/toastr/toastr.min.css",
	])
	
	function headcss(links) {
		var arr = []
		for(var i=0,len=links.length; i<len; i++) {
			arr.push('<link rel="stylesheet" type="text/css" href="'+links[i].replace('../','../../../')+'?v='+version+'" />')
		}
		document.write(arr.join(''))
	}
})()

+ 24 - 0
js/post.js

@ -0,0 +1,24 @@
(function() {
	var version = "1.0"
	headjs([
		"../js/vue.js",
		"../js/jquery.min.js?v=2.1.4",
		"../js/plugins/toastr/toastr.min.js",
		"../js/plugins/layer/layer.min.js",
		"../component/common/event-bus.js",
		"../component/common/nodata.js",
		"../js/element.js",
		"../js/es6-promise.js",
		"../js/api/http-request.js",
		"../js/util.js",
	])
	
	function headjs(srcipts) {
		var arr = [];
		for(var i=0,len=srcipts.length; i<len; i++) {
			arr.push('<script src="'+srcipts[i].replace('../','../../../')+'?v='+version+'"></script>')
		}
		document.write(arr.join(''))
	}
})()

+ 1 - 1
js/util.js

@ -34,7 +34,7 @@ function resetClientWidth() {
	}
}
resetClientWidth()
if(!window.noUse)resetClientWidth()
function isMobilePhone(n) {
	var reg = /^1[34578]\d{9}$/

File diff suppressed because it is too large
+ 10944 - 3
js/vue.js


+ 3 - 1
page/bigData/css/medical.css

@ -17,7 +17,9 @@ p {
	margin: 0;
	padding: 0
}
th{
	font-weight: normal
}
.div-header {
	background: url(../images/biaoti_bg_img.png) no-repeat;
	width: 10rem;

+ 109 - 0
page/bigDataOut/component/resultList.js

@ -0,0 +1,109 @@
(function () {
    Vue.component('resultlist', {
        template: '<div >\
                        <div v-if="data && data.length>0">\
                        <div  v-for="item in data" style="margin-bottom:15px">\
                            <div class="result_list flex f_wrap" @click="go(item)">\
                                <div class="flex"><span class="des">就诊日期</span>:<span class="result">{{forMatterDate(item.event_date)}}</span></div>\
                                <div class="flex"><span class="des">就诊类型</span>:<span class="result">{{(item.event_type==0 && \'门诊\') || (item.event_type==1 && \'住院\')}}</span></div>\
                                <div class="flex"><span class="des text_s ">性别</span>:<span class="result">{{(item.patient_sex==1 && \'男\') || (item.patient_sex==2 && \'女\') || "" }}</span></div>\
                                <div class="flex"><span class="des">出生日期</span>:<span class="result">{{forMatterDate(item.patient_birthday)}}</span></div>\
                                <div class="flex"><span class="des text_s">姓名</span>:<span class="result">{{item.patient_name}}</span></div>\
                                <div class="flex"><span class="des text_s">医生</span>:<span class="result">{{item.doctor}}</span></div>\
                                <div class="flex"><span class="des text_s ">就诊医院</span>:<span class="result two_width">{{item.org_name}}</span></div>\
                                <div class="flex"><span class="des text_s  " >就诊科室</span>:<span class="result two_width">{{item.dept_name}}</span></div>\
                            </div>\
                            <div v-if="item.hl" class="zhaiyao" v-html="item.hl"></div>\
                        </div>\
                        <div class="block flex f_xy_c">\
                                <el-pagination\
                                @size-change="handleSizeChange"\
                                @current-change="handleCurrentChange"\
                                :current-page="currentPage"\
                                :page-sizes="pageSizeArr"\
                                :page-size="pageSize"\
                                layout="total, sizes, prev, pager, next, jumper"\
                                :total="total">\
                            </el-pagination>\
                        </div>\
                        </div>\
                        <nodata v-else ></nodata>\
                    </div>',
        props: ['keyword','filters'],
        data: function () {
            return {
                currentPage:1,
                pageSizeArr:[15,30,50,100],
                pageSize:15,
                total:0,
                data:[],
                searchKey:''
            }
        },
        mounted: function () {
            
        },
        methods: {
            forMatterDate:function(date){
                return 	new Date(date).format('yyyy-MM-dd')
            },
            handleCurrentChange:function(val){ //page
                this.currentPage = val;
                this.getList()
            },
            handleSizeChange:function(val){// size
                this.pageSize=val;
                this.initData()
            },
            getList:function(){
                var vm=this;
                var params={
                    page:this.currentPage,
                    size:this.pageSize,
                    keyword:this.keyword,
                    filters:this.filters
                }
                
                GlobalEventBus.$emit('setLoading',{
                    loading:true
                });
        
                bigDataOutApi.text_search(params).then(function(res){
                    GlobalEventBus.$emit('setLoading');
                    vm.data=res.detailModelList;
                    vm.total=res.totalCount;
                }).catch(function(err){
                    
                    console.erroe(err)
                    
                    GlobalEventBus.$emit('setLoading');
                })
            },
            initData:function(){  //初始化数据
                this.currentPage = 1;
                this.getList()
            },
            go:function(item){
                var date = this.forMatterDate(item.event_date),
                   orgName = item.org_name,
                   profileId=item.rowkey,
                   eventType=item.event_type,
                   searchWord=this.keyword
                    var url =  httpRequest.server+'/profile/app/templateDetails/html/hospitalIndex.html?'+
                    'date='+date+'&orgName='+orgName+'&profileId='+profileId+'&eventType='+eventType+
                    '&searchWord='+searchWord
                   
                   window.open(url)
            }
        },
        watch: {
            resultList(val){
              
            }
        }
    })
})()

+ 93 - 0
page/bigDataOut/component/table-page.js

@ -0,0 +1,93 @@
(function () {
    Vue.component('resultlist', {
        template: '<div >\
                        <div v-if="data && data.length>0">\
                         <div class="result_list flex f_wrap" v-for="item in data" >\
                            <div class="flex"><span class="des">就诊日期</span>:<span class="result">{{forMatterDate(item.event_date)}}</span></div>\
                            <div class="flex"><span class="des">就诊类型</span>:<span class="result">{{(item.event_type==0 && \'门诊\') || (item.event_type==1 && \'住院\')}}</span></div>\
                            <div class="flex"><span class="des text_s ">性别</span>:<span class="result">{{(item.patient_sex==1 && \'男\') || (item.patient_sex==2 && \'女\') || "" }}</span></div>\
                            <div class="flex"><span class="des">出生日期</span>:<span class="result">{{forMatterDate(item.patient_birthday)}}</span></div>\
                            <div class="flex"><span class="des text_s">姓名</span>:<span class="result">{{item.patient_name}}</span></div>\
                            <div class="flex"><span class="des text_s">医生</span>:<span class="result">{{item.doctor}}</span></div>\
                            <div class="flex"><span class="des text_s ">就诊医院</span>:<span class="result two_width">{{item.org_name}}</span></div>\
                            <div class="flex"><span class="des text_s  " >就诊科室</span>:<span class="result two_width">{{item.dept_name}}</span></div>\
                            <div class="f_16" v-html="item.hl"></div>\
                        </div>\
                        <div class="block flex f_xy_c">\
                                <el-pagination\
                                @size-change="handleSizeChange"\
                                @current-change="handleCurrentChange"\
                                :current-page="currentPage"\
                                :page-sizes="pageSizeArr"\
                                :page-size="pageSize"\
                                layout="total, sizes, prev, pager, next, jumper"\
                                :total="total">\
                            </el-pagination>\
                        </div>\
                        </div>\
                        <nodata v-else ></nodata>\
                    </div>',
        props: ['keyword','filters'],
        data: function () {
            return {
                currentPage:1,
                pageSizeArr:[15,30,50,100],
                pageSize:15,
                total:0,
                data:[],
                searchKey:''
            }
        },
        mounted: function () {
            
        },
        methods: {
            forMatterDate:function(date){
                return 	new Date(date).format('yyyy-MM-dd')
            },
            handleCurrentChange:function(val){ //page
                this.currentPage = val;
                this.getList()
            },
            handleSizeChange:function(val){// size
                this.pageSize=val;
                this.initData()
            },
            getList:function(){
                var vm=this;
                var params={
                    page:this.currentPage,
                    size:this.pageSize,
                    keyword:this.keyword,
                    filters:this.filters
                }
                
                GlobalEventBus.$emit('setLoading',{
                    loading:true
                });
        
                bigDataOutApi.text_search(params).then(function(res){
                    GlobalEventBus.$emit('setLoading');
                    vm.data=res.detailModelList;
                    vm.total=res.totalCount;
                }).catch(function(err){
                    
                    console.erroe(err)
                    
                    GlobalEventBus.$emit('setLoading');
                })
            },
            initData:function(){  //初始化数据
                this.currentPage = 1;
                this.getList()
            }
        },
        watch: {
            resultList(val){
                
            }
        }
    })
})()

+ 80 - 0
page/bigDataOut/css/flex.css

@ -0,0 +1,80 @@
/* ljj-flex通用类名   */
.flex{
    display:-webkit-box;
    display:-webkit-flex;
    display:flex;
}
.flex_coloumn{
    display:-webkit-box;
    display:-webkit-flex;
    display:flex;
    flex-direction: column
}
.f_xy_c{    
    -webkit-justify-content: center;
    justify-content: center;
    -webkit-align-items: center;
    align-items: center;
}
.f_y_c{
    -webkit-align-items: center;
    align-items: center;
}
.f_x_c{
    -webkit-justify-content: center;
    justify-content: center;
}
.f_x_e{
    -webkit-justify-content: flex-end;
    justify-content: flex-end;
}
.f_g_1{
    -webkit-flex-grow:1;
    flex-grow:1;
}
.f_s_0{
    -webkit-flex-shrink:0;
    flex-shrink:0;
}
.f_x_s{
    -webkit-justify-content: space-between;
    justify-content: space-between;
}
.f_wrap{
    -webkit-flex-wrap: wrap;
    flex-wrap: wrap;
}
.ellipsis{
    white-space:nowrap;/*强制文本在一行内显示*/
    text-overflow:ellipsis; /*溢出省略号,支持ie、safari(webkit)*/
    -o-text-overflow:ellipsis; /*溢出省略号,支持opera*/
    overflow:hidden;/*溢出隐藏*/
}
/* 文本两端对齐 */
.text_s{  
    text-align:justify;
    text-justify:distribute-all-lines;/*ie6-8*/
    text-align-last:justify;/* ie9*/
    -moz-text-align-last:justify;/*ff*/
    -webkit-text-align-last:justify;/*chrome 20+*/
}
@media screen and (-webkit-min-device-pixel-ratio:0){/* chrome*/
    .text_s:after{
        content:".";
        display: inline-block;
        width:100%;
        overflow:hidden;
        height:0;
    }
}
[v-cloak] {
    display: none;
}
.el-input--suffix .el-input__inner{
    font-size: 16px
}

+ 50 - 0
page/bigDataOut/css/home.css

@ -0,0 +1,50 @@
.search_box {
   padding-top: 100px;
   padding-bottom: 150px
}
.search_box  button{
    background-color: #009dfe;
    border-radius: 2px;
    letter-spacing: 7px;
    margin-left: 21px
}
.search_list span{
    color: #909090;
    font-size: 14px;
    margin: 17px 40px 0 12px;
    cursor: pointer;
}
.search_list span:hover{
    color: #33b1fe;
 }
.el-input{
    /* width: 780px */
}
.enter_list{
    /* padding-left: 275px;
    padding-right: 413px */
}
.enter_list >div{
    padding: 9px 9px 16px 9px;
    cursor: pointer;
    color: #323232;
    background-color: #f9f8fe;
	border: solid 1px #e7e7e7;
    font-size: 16px;
    width: 287px;
	height: 204px;
    /* width: 33%; */
    box-sizing: border-box;
    /* min-width: 200px */
}
.enter_list >div>img{
    width: 100%
}
.enter_list >div:hover{
    border: solid 1px #33b1fe;
    color: #33b1fe;
}
.enter_list >div>img{
    margin-bottom: 10px;
}

+ 270 - 0
page/bigDataOut/css/index.css

@ -0,0 +1,270 @@
.el-main{
    padding: 0
}
.opactiy0{
    opacity: 0;
}
.el-submenu .el-menu-item{
    padding: 0 45px;
    min-width: 200px;
    padding-left: 57px!important;
}
.el-submenu [class^=el-icon-]{
    color: #2d9bd2!important;
}
.activeColor{
    color: #2d9bd2!important; 
}
.history_tabList{
    height: 47px;
    border-bottom: solid 1px #e8edec;
}
.history_tabList ul{
    height: 100%;
    overflow: auto;
}
.history_tabList li{
    cursor: pointer;
    height: 100%;
    padding: 0px 20px;
    border-right: 1px solid #dcdcdc;
    font-size: 14px
}
.history_tabList li i{
    cursor: pointer;
    margin-left: 10px;
    font-weight: bold;
  
}
.history_tabList li i:hover{
    color: red
}
.history_tabList li:hover {
    color: #777;
    background-color: #f6f8f8;
    border-color: #f6f8f8;
 }
 .history_tabList li.active{
    color: #777;
    background-color: #f6f8f8;
    border-color: #f6f8f8;
 }  
 .close_all_route {
    transform: rotate(90deg);
    cursor: pointer;
    font-size: 22px;
    margin-right: 20px
  }
  #app {
    font-family: Helvetica, sans-serif;
  }
  /* .main{
    background: url('../static/img/bg.png');background-size: cover
  } */
  .tabHead {
    position: fixed;
    top: 0;
    height: 51px;
    left: 220px;
    right: 0px;
    background: #fff;
    z-index: 5;
  }
  .tabTool {
    position: absolute;
    right: 0;
    background: #fff;
    z-index: 6;
    top: 0;
    height: 51px;
    border-left: solid 1px #e8edec;
  }
  .tabTool [class*=" el-icon-"],
  [class^=el-icon-] {
    min-width: 19.5px;
    text-align: center;
  }
  #tabDiv {
    width: 100000px;
    border-bottom: 1px solid #ccc;
    background: #fff;
    height: 100%;
  }
  html,
  body {
    height: 100%;
    overflow: hidden;
  }
  aside {
    background-color: #23344a;
  }
  * {
    margin: 0;
    padding: 0
  }
  .el-menu-vertical-demo:not(.el-menu--collapse) {
    width: 200px;
    min-height: 400px;
  }
  .el-menu {
    border-right: 0
  }
  
  .cursor {
    cursor: pointer;
  }
  .relative {
    position: relative;
  }
  li {
    list-style-type: none
  }
  .cwhite {
    color: #fff
  }
  .router_history {
    padding-left: 62px;
    padding-right: 62px;
    position: relative;
  }
  .histouryTab,
  .home-absolute {
    background-color: #fff;
    color: #323232;
    border-right: solid 1px #e8edec;
    cursor: pointer;
    padding: 15px;
    transition: all .5s ease-in-out;
    box-sizing: border-box;
    position: relative;
    padding-right: 31px;
  }
  .home-absolute {
    padding: 15px;
    position: absolute;
    left: 0;
    top: 0;
    width: 63px;
    color: #323232;
    font-size: 16px;
    z-index: 6;
  }
  .activeHistory,
  .histouryTab:hover,
  .home-absolute:hover {
    color: #777;
    background-color: #f6f8f8;
    border-color: #f6f8f8;
  }
  .router_history i {
    display: none;
    margin-top: 3px;
  }
  .histouryTab:hover i {
    display: block;
  }
  .router_history i:hover {
    color: red
  }
  .hoverRed {
    cursor: pointer;
  }
  .hoverRed:hover {
    color: #c6d9ec
  }
  a {
    color: #333;
    text-decoration: none;
  }
  .header-logo {
    /* background-color: #259ee7; */
    background: url('./assets/LOGO11.png') center no-repeat;
    width: 270px;
    height: 31px;
    margin-top: 18px;
    background-size: contain;
  }
  .ml15 {
    margin-left: 15px
  }
  .close_all_route {
    transform: rotate(90deg);
    cursor: pointer;
    font-size: 22px
  }
  .close_all_route .el-dropdown {
    font-size: 22px;
  }
  .router_history li span {
    position: absolute;
    right: 8px;
    top: 15px;
  }
  .home-icon {
    width: 31px;
    height: auto;
    display: block;
  }
  .el-menu--inline .el-menu-item {
    background: #263e56!important;
}
.el-table th, .el-table tr{
  background-color: #f0f9ff;
}
.el-table .cell{
  color: #323232;
}.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
  opacity: 0;
}
.unit{
  color: #fff;font-size: 14px;font-weight: normal;
}
.el-menu--inline .el-menu-item {
    background: #263e56!important;
}
.el-menu-item:focus, .el-menu-item:hover{
  color: #ffffff!important
}

+ 66 - 0
page/bigDataOut/css/search.css

@ -0,0 +1,66 @@
.search_box {
    padding-top: 30px;
    padding-bottom: 50px
 }
 .search_box  button{
     background-color: #009dfe;
     border-radius: 2px;
     letter-spacing: 7px;
     margin-left: 21px
 }
 .search_list span{
     color: #909090;
     font-size: 16px;
     margin: 17px 40px 0 12px;
     cursor: pointer;
 }
 .search_list span:hover{
    color: #33b1fe;
 }
 .search_box  .el-input{
 /* width: 780px */
}
 
 
 .result_list{
     padding: 23px  37px 21px 19px;
     border: solid 1px #e7e7e7;
     font-size: 16px;
     margin: 0 24px 0 30px;
 }
 .result_list >div{
    margin-right: 44px;
    margin-bottom:15px
 }
 .result_list .des{
     width: 64px;
     color: #323232;
     height: 20px;
 }
 .result_list .result{
     width: 144px;
     color: #909090;
     border-bottom: solid 1px #e7e7e7;
     padding-bottom: 5px
 }
 .two_width{
     width:412px!important
 }
 em{
     color: red;
     font-style: normal
 }
 .zhaiyao{
    padding: 30px 20px 15px;
    margin: 0 24px 0 30px;
    background: #f9f9f9;
    border: solid 1px #e7e7e7;
    border-top: none;
    font-size: 16px;
 }
 .el-pagination{
     font-size: 16px;
     margin: 0 24px 15px 30px;
 }

+ 0 - 0
page/bigDataOut/css/yibiaofenxi.css


+ 53 - 0
page/bigDataOut/html/home.html

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>质控管理</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
    <script src="../../../js/head.js"></script>
    <link rel="stylesheet" href="../css/home.css"/>
</head>
<body>
    <div id="app" style="height: 100%;" v-cloak>
        <div class="flex f_x_c">
            <div class="search_box"  style="width:900px">
                <div class="flex f_xy_c ">
                        <el-input placeholder="请输入内容"  v-model="searchKey" style="" clearable>
                            </el-input>
                            <el-button type="primary" @click="goSearch(searchKey)">搜索</el-button>
                </div>
                <div class="search_list flex">
                    <span class="f_s_0" v-for="item in hotList" @click="goSearch(item)">{{item}}</span>
                </div>
            </div>
        </div>
        
      
        <div class="flex f_xy_c enter_list ">
            <div style="margin-right:37px" @click="setIndexPage('2-1')">
                <img src="../images/smallSee.jpg" >
                <div>医疗大数据分析</div>
            </div>
            <div style="margin-right:37px" @click="setIndexPage('2-3')">
                <img src="../images/juminjiankang.jpg" >
                <div>居民健康管理大数据分析</div>
            </div>
            <div>
                <img src="../images/smallSee.jpg"  @click="setIndexPage('2-2')">
                <div>医保费用支出分析</div>
            </div>
        </div>
    </div>
    <script>
       window.noUse =true
    </script>
    <script src="../../../js/post.js"></script>
    <script src="../../../js/api/bigDataOut-api.js"></script>
    <script src="../js/home.js"></script>
</body>
</html>

+ 63 - 0
page/bigDataOut/html/index.html

@ -0,0 +1,63 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>呵呵</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
    <script src="../../../js/head.js"></script>
    <link rel="stylesheet" href="../css/index.css"/>
</head>
<body>
    <div id="app" style="height: 100%;" v-cloak>
        <el-container style="height: 100%;">
            <el-aside :width="navWidth" style="z-index: 7;">
                <el-menu background-color="#23344a" text-color="rgb(164, 177, 196)" active-text-color="#ffffff" :collapse="isCollapse" @select="handleSelect"
                  :default-openeds="['2']" :default-active="leftTabActive">
                  <el-menu-item index="1" :title="titleTip" style="padding-left: 20px">
                    <i class="el-icon-caret-left" v-show="!isCollapse"></i>
                    <i class="el-icon-caret-right" v-show="isCollapse"></i>
                    <span slot="title" style="color:#ffd04b">{{titleTip}}</span>
                  </el-menu-item>
                  <el-menu-item class="ellipsis" title="全文病历检索" index="2-0" style="padding-left: 52px"> 
                    全文病历检索</el-menu-item>
                  <el-menu-item class="ellipsis" title="医疗服务大数据分析"  index="2-1" style="padding-left: 52px"> 
                    医疗服务大数据分析</el-menu-item>
                  <el-menu-item class="ellipsis" title="医保费用支出分析"   index="2-2" style="padding-left: 52px">
                      医保费用支出分析</el-menu-item>
                  <el-menu-item class="ellipsis" title="居民健康管理大数据分析" index="2-3" style="padding-left: 52px">
                      居民健康管理大数据分析</el-menu-item>
                  <el-menu-item index="2-4" style="padding-left: 52px" title="医保控费分析" >
                      医保控费分析</el-menu-item>
                    </el-menu>
              </el-aside>
            <el-main style="height: 100%;overflow: hidden;"  v-loading="loading">
                <div class="history_tabList flex f_x_sb" >
                    <ul class="flex f_g_1">
                       <li class="flex f_y_c f_s_0" v-for="(item,index) in historyArr" :class="{active:activeIndex == index}" @click='setHistory(item)'>{{item.text}}<i v-if="index>0" class="el-icon-close" @click.stop="deleteHistory(index)"></i></li> 
                    </ul>
                    <el-dropdown class="close_all_route f_s_0"   @command="controlRouter">
                            <span class="el-dropdown-link">
                              <i class="el-icon-more hoverRed"></i>
                            </span>
                            <el-dropdown-menu slot="dropdown">
                              <!-- <el-dropdown-item command="1">关闭全部选项卡</el-dropdown-item> -->
                              <el-dropdown-item command="2">关闭其他选项卡</el-dropdown-item>
                            </el-dropdown-menu>
                          </el-dropdown>
                </div>
                <iframe v-for="(item,index) in historyArr"  v-show="activeIndex == index" :src="item.url" style="height:calc(100% - 48px);width: 100%; border: none;"></iframe>
            </el-main>
        </el-container>
    </div>
    <script>
        window.noUse =true
     </script>
    <script src="../../../js/post.js"></script>
    <script src="../js/index.js"></script>
</body>
</html>

+ 51 - 0
page/bigDataOut/html/search.html

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>质控管理</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
    <script src="../../../js/head.js"></script>
    <link rel="stylesheet" href="../css/search.css"/>
</head>
<body>
    <div id="app" style="height: 100%;" v-cloak>
        <div class="flex f_x_c">
                <div class="search_box" style="width:900px">
                        <div class="flex f_xy_c " >
                                <el-input placeholder="请输入内容"  v-model="searchKey" style="" clearable>
                                    </el-input>
                                    <el-button type="primary" @click="search(searchKey)">搜索</el-button>
                        </div>
                        <div class="search_list flex">
                            <span class="f_s_0" v-for="item in hotList" @click="search(item)">{{item}}</span>
                        </div>
                    </div>
        </div>
        
      
        <div class="flex f_x_e">
                <el-radio-group v-model="type" style="margin-right:24px;margin-bottom: 10px" size="medium">
                        <el-radio-button label="全部"></el-radio-button>
                        <el-radio-button label="门诊"></el-radio-button>
                        <el-radio-button label="住院"></el-radio-button>
                      </el-radio-group>
        </div>
        <resultlist :keyword="searchword" v-show="type=='全部'" ref="allEvent" ></resultlist>
        <resultlist :keyword="searchword"  :filters="'event_type=0'"  v-show="type=='门诊'" ref="outpatient" ></resultlist>
        <resultlist  :keyword="searchword"  :filters="'event_type=1'"  v-show="type=='住院'" ref="hospitalization"></resultlist>
    </div>
    <script>
     window.noUse =true
    </script>
    <script src="../../../js/post.js"></script>
    <script src="../component/resultList.js"></script>
    <script src="../../../js/api/bigDataOut-api.js"></script>
    <script src="../js/search.js"></script>
</body>
</html>

+ 68 - 0
page/bigDataOut/html/yibiaofenxi.html

@ -0,0 +1,68 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>医保费用分析</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
    <script src="../../../js/head.js"></script>
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <link rel="stylesheet" href="../css/search.css" />
</head>
<body>
    <div id="app" style="height: 100%;padding:0 24px" v-cloak>
        <div class="flex f_xy_c" style="margin-bottom:76px">
            <el-radio-group v-model="type" size="medium">
                <el-radio-button label="频繁就医"></el-radio-button>
                <el-radio-button label="超高费用"></el-radio-button>
                <el-radio-button label="重复检查检验"></el-radio-button>
                <el-radio-button label="用药分析"></el-radio-button>
            </el-radio-group>
        </div>
        <el-table :data="tableData" border style="width: 100%">
            <el-table-column fixed prop="date" label="日期" >
            </el-table-column>
            <el-table-column prop="name" label="姓名" >
            </el-table-column>
            <el-table-column prop="province" label="省份" >
            </el-table-column>
            <el-table-column prop="city" label="市区" >
            </el-table-column>
            <el-table-column prop="address" label="地址" >
            </el-table-column>
            <el-table-column prop="zip" label="邮编" >
            </el-table-column>
            <el-table-column label="操作"  fixed="right">
                    <template slot-scope="scope">
                        <el-button  type="text" size="small">查看</el-button>
                    </template>
            </el-table-column>
        </el-table>
        <div class="block flex f_x_c" style="margin-top:25px">
                <span class="demonstration"></span>
                <el-pagination
                  @size-change="handleSizeChange"
                  @current-change="handleCurrentChange"
                  :current-page="currentPage4"
                  :page-sizes="[100, 200, 300, 400]"
                  :page-size="100"
                  layout="total, sizes, prev, pager, next, jumper"
                  :total="400">
                </el-pagination>
              </div>
    </div>
    <script>
        window.noUse = true
    </script>
    <script src="../../../js/post.js"></script>
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <script src="../../../js/api/bigDataOut-api.js"></script>
    <script src="../js/yibiaofenxi.js"></script>
</body>
</html>

BIN
page/bigDataOut/images/juminjiankang.jpg


BIN
page/bigDataOut/images/nodeData.png


BIN
page/bigDataOut/images/smallSee.jpg


+ 42 - 0
page/bigDataOut/js/home.js

@ -0,0 +1,42 @@
new Vue({
	el: '#app',
	data: function () {
		return {
            searchKey:'',
            hotList:[]
		}
	},
	computed: {
	},
	mounted:function() {
		this.getHot()
	},
	methods: {
		getHot:function(){
			var vm=this;
			bigDataOutApi.hot_words().then(function(res){
				vm.hotList=res
			}).catch(function(err){
				console.err(err)
			})
		},
        setIndexPage:function(key){
            
            GlobalEventBus.$emit('setleftTabUrl', {
					key: key
			});
        },
        goSearch:function(value){
			if(!value)value=''
			url = '../html/search.html?search='+value;
			GlobalEventBus.$emit('setIframeUrl', {
				history: {url:url,text:'全文病历检索'}
			});
        }
	},
	watch: {
	}
})

+ 178 - 0
page/bigDataOut/js/index.js

@ -0,0 +1,178 @@
new Vue({
	el: '#app',
	data: function () {
		return {
			// iframeSrc: "../../new-quailty-manager/html/new-quailty-manager.html", 
			loading: false,
			historyArr:[{url:'../html/home.html',text:'首页'},],  //历史记录
			activeIndex:'0' , //当前历史记录选中的下标
			leftTabActive:'2-0',//左边菜单中当前高亮下标
			isCollapse: false, //导航栏是否隐藏
			screenWidth: document.body.clientWidth,//屏幕宽度
		}
	},
	computed: {
	   	navWidth:function() {  //左边菜单的的宽度 
			return this.isCollapse ? '51px' : '200px'
		  },
		  titleTip:function() {
			return this.isCollapse ? '显示导航栏' : '隐藏导航栏'
		  },
	},
	mounted:function() {
		this.resize()
		this.bidnEvent()
	},
	methods: {
		bidnEvent:function(){  //供子页面调用的事件 (子页面是iframe)
			var vm =this;
			GlobalEventBus.$on("setLoading", function(arg) {  //控制整个界面加载
		
				if(arg && arg.loading){
					vm.loading = true
				}			
				else{
					vm.loading = false
				}
			});
			GlobalEventBus.$on("setIframeUrl", function(arg) { //新打开窗口并且记录历史记录
			
				vm.setHistory(arg.history)
			});
			GlobalEventBus.$on("setleftTabUrl", function(arg) { //打开左边菜单中的页面 可直接传对应  
				
				vm.handleSelect(arg.key)
			});
		},
		resize:function() { //监听页面改变大小
			const that = this
			this.isCollapse = this.screenWidth >= 786 ? false : true;
			window.onresize = function()  {
			  return (function(){
				window.screenWidth = document.body.clientWidth;
				that.screenWidth = window.screenWidth;
			  })()
			}
		  },
		handleSelect: function (key) {
			console.log(key)
			var vm = this;
			var activeObj =null;
			switch (key) {
				case '1':
				this.isCollapse = !this.isCollapse;
				  break;
				case '2-0':
				activeObj = 	{url:'../html/search.html',text:'全文病历检索'};
				  break;
				case '2-1':
				window.open('../../bigData/html/medical.html')
				  break;
				case '2-2':
				window.open('../../bigData/html/medical.html')
				  break;
				case '2-3':
				window.open('../../bigData/html/home.html')
				break;
				case '2-4':
				activeObj = 	{url:'../html/yibiaofenxi.html',text:'医保控费分析'};
				break;
				}
				if(!activeObj)return 
			 this.leftTabActive=key
			 activeObj.fromLeft=true
			// key=key.toString()
			// this.isActive = key.substring(0, 1)
			// var childrenIndex= key.split('-')[1]-1;
			// var activeObj = 	this.tabList[(this.isActive-1)].children[childrenIndex];
			vm.setHistory(activeObj)
		},
		deleteHistory:function(index){
			this.historyArr.splice(index,1);
			if(!this.historyArr[this.activeIndex] &&  this.activeIndex-1>=0){
				this.activeIndex-=1
			}
		},
		setHistory:function(obj){  
				
			var vm = this;
			var exist = false;
			var index = null;
		
			// if(typeof(obj)=='string'){ //如果左边菜单换成数组的话  现在暂时没空
			
			// 	vm.tabList.forEach(function(v){
			// 		v.children.forEach(function(value){
			// 			if(typeof(obj)=='string' && obj.indexOf(value.url) != -1){  
			// 				var	obj1 =newObj(value);
			// 				obj1.url=obj;
			// 				obj=obj1;
			// 			}
			// 		})
			// 	})
			// }	
			vm.historyArr=	vm.historyArr.map(function(v,i){   //检测要跳转的url是否在历史记录中
				if(obj.url.indexOf(v.url.split('?')[0]) != -1 ){  
					switch (obj.url){                                   //已经存在并且在左边的菜单的话则需要高亮左边菜单
						case "../html/home.html":obj.index='2-0';break;
						case "../html/search.html":obj.index='2-0';break; 
						case "../html/yibiaofenxi.html":obj.index='2-4';break; 
					}
					exist=true;
					index = i;
					if(v.url!=obj.url && !obj.fromLeft) v.url=obj.url     //如果参数不同则重新赋值  按左边的则不需要比较
					
				}
				return v
			})
			if(!exist){  					  //不存在则添加进历史记录  
				vm.historyArr.push(obj);
				this.activeIndex =vm.historyArr.length-1
			} 		
			else{						//存在则直接跳转
				this.activeIndex =index
			}
			if(obj.index)	
	    this.leftTabActive=obj.index    //控制左边菜单选中
		},
		controlRouter:function(key) {
            
			switch (key) {
			  case '1':
				this.closeAllHistory();
				break;
			  case '2':
				this.closeAllHistory(true);
				break;
			}
		  },
		  closeAllHistory:function(is) { //不传参则全部关闭   传参则关闭除了自己之外的
			var that =this;
			if (is && this.activeIndex !=0) {
			  this.historyArr = this.historyArr.filter(function(v,i) {
				return i == that.activeIndex  || i==0
			  })
			  this.activeIndex=1
			} 
			else{
				this.historyArr = this.historyArr.filter(function(v,i) {
					return  i ==0
				  })
				  this.activeIndex=0
			}
			},
	},
	watch: {
		screenWidth:function(value) {
			
			this.isCollapse = value >= 786 ? false : true;
		},
	}
})

+ 73 - 0
page/bigDataOut/js/search.js

@ -0,0 +1,73 @@
new Vue({
	el: '#app',
	data: function () {
		return {
			searchKey:'',//input的值
			searchword:'',//搜索时传给子组件的值(可能input改变了未按搜索 所以分成两个)
            hotList:[],
			type:'全部', 
			allEventInit:false,  //判断是否需要重新加载数据
			outpatientInit:false,
			hospitalizationInit:false
		}
	},
	computed: {
	
	},
	mounted:function() {
		this.getHot();
	
		this.searchKey =(GetRequest().search && decodeURIComponent(GetRequest().search)) || ''
	
			this.initData(this.searchKey);
	
	},
	methods: {
		getHot:function(){
			var vm=this;
			bigDataOutApi.hot_words().then(function(res){
				vm.hotList=res
			}).catch(function(err){
				console.err(err)
			})
		},
		initData:function(keyword){
			this.searchword=keyword
			
			this.allEventInit =false;
			this.outpatientInit =false;
			this.hospitalizationInit =false;
			var vm=this
			this.$nextTick(function () {
				switch (vm.type){
					case '全部':vm.$refs.allEvent.initData();vm.allEventInit =true;break;
					case '门诊':vm.$refs.outpatient.initData();vm.outpatientInit =true;break;
					case '住院':vm.$refs.hospitalization.initData();vm.hospitalizationInit =true;break
				}
			})
			
		},
        setIndexPage:function(key){ //前往左边菜单页面
            
            GlobalEventBus.$emit('setleftTabUrl', {
					key: key
			});
        },
        search:function(value){
			this.searchKey=value
			this.initData(value);
		}
	},
	watch: {
		type:function(value){
			switch (value){
				case '全部':if(!this.allEventInit){this.$refs.allEvent.initData();this.allEventInit =true};break;
				case '门诊':if(!this.outpatientInit){this.$refs.outpatient.initData();this.outpatientInit =true;}break;
				case '住院':if(!this.hospitalizationInit){this.$refs.hospitalization.initData();this.hospitalizationInit =true;}break
			}
		}
	}
})

+ 64 - 0
page/bigDataOut/js/yibiaofenxi.js

@ -0,0 +1,64 @@
new Vue({
	el: '#app',
	data: function () {
		return {
			type:'频繁就医', 
			table1Init:false,  //判断是否需要重新加载数据
			table1Init2:false,
			table1Ini3:false,
            table1Ini4:false,
            tableData: [{
                date: '2016-05-03',
                name: '王小虎',
                province: '上海',
                city: '普陀区',
                address: '上海市普陀区金沙江路 1518 弄',
                zip: 200333
              }, {
                date: '2016-05-02',
                name: '王小虎',
                province: '上海',
                city: '普陀区',
                address: '上海市普陀区金沙江路 1518 弄',
                zip: 200333
              }, {
                date: '2016-05-04',
                name: '王小虎',
                province: '上海',
                city: '普陀区',
                address: '上海市普陀区金沙江路 1518 弄',
                zip: 200333
              }, {
                date: '2016-05-01',
                name: '王小虎',
                province: '上海',
                city: '普陀区',
                address: '上海市普陀区金沙江路 1518 弄',
                zip: 200333
              }],
              currentPage4:1
		}
	},
	computed: {
	
	},
	mounted:function() {
		
	},
	methods: {
        handleSizeChange(val) {
            console.log(`每页 ${val} 条`);
          },
          handleCurrentChange(val) {
            console.log(`当前页: ${val}`);
          },
          handleClick(row) {
            console.log(row);
          }
	},
	watch: {
	
	}
})