Browse Source

筛查后续模块

zyz 6 years ago
parent
commit
66fc5f325a

+ 46 - 3
api/jbsc-api.js

@ -2,15 +2,58 @@
    var jbscAPI = {
    	//统计模型
		screenStatics: function(data) {
			return httpRequest.post("/doctor/screen/screenStatics")
			return httpRequest.post("doctor/screen/screenStatics")
		},
		//专科疾病列表
		getSpecialDisease: function(data) {
			return httpRequest.get("/doctor/screen/getSpecialDisease")
			return httpRequest.get("doctor/screen/getSpecialDisease")
		},
		//疾病筛查列表
		getResultList: function(data) {
			return httpRequest.get("/doctor/screen/getResultList", {data: data})
			return httpRequest.get("doctor/screen/getResultList", {data: data})
		},
//		获取筛查问卷列表
		getScreenList: function(data){
			return httpRequest.post('doctor/screen/getScreenList',{data:data})
		},
		//获取医生团队下的居民
		patientsByTeam: function(data){
			return httpRequest.get('doctor/patient_label_info/patients_by_team',{data:data})
		},
		//获取医生团队信息
		getDoctorTeam: function(uid){
			return httpRequest.get('doctor/admin-teams/team/'+uid+'/teams')
		},
		//获取建议模板消息
		getTemplateAdvice: function(data){
			return httpRequest.get('doctor/screen/getTemplateAdvice',{data:data})
		},
		//跟踪建议保存
		updateAfterFollwoing: function(data){
			return httpRequest.post('doctor/screen/updateAfterFollwoing',{data:data})
		},
//		获取筛查结果
		getScreenResultDetail: function(data){
			return httpRequest.get('doctor/screen/getScreenResultDetail',{data:data})
		},
//		获取居民健康
		getHealth: function(data){
			return httpRequest.get('/patient/health_index/last',{data:data})
		},
//		获取医生基础信息
		baseinfo: function(data){
			return httpRequest.get('doctor/baseinfo',{data:data})
		},
//		获取模板下所有问卷问题
		getAllQuestions: function(data){
			return httpRequest.get('doctor/questionnaire/getAllQuestions',{data:data})
		},
		//保存筛查消息
		saveAnswer: function(data){
			return httpRequest.post('doctor/questionnaire/saveAnswer',{data:data})
		},
		searchDenizen: function(data){
			return httpRequest.post('doctor/patient_label_info/patient_search_all_exitdoc',{data:data})
		},
		
    }

+ 87 - 0
app/jbsc/component/canvas-progress.js

@ -0,0 +1,87 @@
Vue.component('canvas-progress', {
	template: '<canvas id="time-graph-canvas" width="100%" height="100%"></canvas>',
	props: ["progress"],
	data: function() {
		return {
			canvas:null,
			speed:0
		}
	},
	mounted: function () {
		this.canvas=document.getElementById("time-graph-canvas")
        this.drawMain(this.canvas, this.progress, "#12b7f5", "#bec8d2");
	},
	methods: {
		drawMain(drawing_elem, percent, forecolor, bgcolor) {
		    /*
		        @drawing_elem: 绘制对象
		        @percent:绘制圆环百分比, 范围[0, 100]
		        @forecolor: 绘制圆环的前景色,颜色代码
		        @bgcolor: 绘制圆环的背景色,颜色代码
		    */
		    var context = drawing_elem.getContext("2d");
		    var center_x = drawing_elem.width / 2;
		    var center_y = drawing_elem.height / 2;
		    var rad = Math.PI*2/100; 
		    var speed = this.speed;
		    
		    // 绘制背景圆圈
		    function backgroundCircle(){
		        context.save();
		        context.beginPath();
		        context.lineWidth = 8; //设置线宽
		        var radius = center_x - context.lineWidth;
		        context.lineCap = "round";
                context.strokeStyle = bgcolor;
                context.arc(center_x, center_y, radius, 0, Math.PI*2, false);
                context.stroke();
                context.closePath();
                context.restore();
		    }
		 
		            //绘制运动圆环
		    function foregroundCircle(n){
		        context.save();
		        context.strokeStyle = forecolor;
		        context.lineWidth = 8;
		        context.lineCap = "round";
		        var radius = center_x - context.lineWidth;
		        context.beginPath();
		        context.arc(center_x, center_y, radius , -Math.PI/2, -Math.PI/2 +n*rad, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针)
                context.stroke();
                context.closePath();
                context.restore();
            }
		 
		            //绘制文字
		    function text(n){
		        context.save(); //save和restore可以保证样式属性只运用于该段canvas元素
		        context.fillStyle = forecolor;
		        var font_size = 20;
		        context.font = font_size + "px Helvetica";
		        var number=n.toFixed(0);
		        number=number>=100?100:number;
		        var text_width = context.measureText(number+"%").width;
		        context.fillText(number+"%", center_x-text_width/2, center_y + font_size/2);
                context.restore();
            }
		 
		            //执行动画
		    (function drawFrame(){
		        window.requestAnimationFrame(drawFrame);
		        context.clearRect(0, 0, drawing_elem.width, drawing_elem.height);
		        backgroundCircle();
		        text(speed);
		        foregroundCircle(speed);
		        if(speed >= percent) return;
		        speed += 1;
		    }());
		} 	
		
	},watch:{
		progress:function(nval,oval){
			this.speed=oval;
			this.drawMain(this.canvas, nval, "#12b7f5", "#bec8d2");
		}
	}
})

+ 19 - 0
app/jbsc/css/advice.css

@ -0,0 +1,19 @@
.advice-title,.qtjy{font-size: 16px;margin: 0;padding-bottom: 20px;}
.qtjy{padding-bottom: 0;margin-bottom: 10px;}
.advice-box{padding: 20px;overflow: hidden;}
.advice-content{padding-left: 20px;list-style: none;margin: 0;overflow: auto;height: 205px;}
.advice-content li{margin-bottom: 20px;position: relative;font-size: 14px;}
.advice-content li span{vertical-align: middle;}
.advice-content input{position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: 0;width: 100%;height: 100%;opacity: 0;}
.advice-content input[type="radio"],.daan-list input[type="checkbox"]{width: 100%;height: 100%;opacity: 0;position: absolute;cursor: pointer;margin: 0;left: 0;right: 0;top: 0;bottom: 0;}
.advice-content i{width: 14px;height: 14px;display: inline-block;vertical-align: middle;margin-right: 10px;}
.advice-content input[type="radio"]~i{background: url(../images/dianxuan_btn.png) center center / 100% 100% no-repeat;}
.advice-content input[type="checkbox"]~i{background: url(../images/gouxuan_btn.png) center center / 100% 100% no-repeat;}
.advice-content input[type="radio"]:checked ~ i{background-image: url(../images/dianxuan_pre.png);}
.advice-content input[type="checkbox"]:checked ~ i{background-image: url(../images/gouxuan_pre.png);}
.advice-textarea{height: 90px;width: 100%;resize: none;}
::-webkit-input-placeholder { color:#999; }
::-moz-placeholder { color:#999; } /* firefox 19+ */
:-ms-input-placeholder { color:#999; } /* ie */
input:-moz-placeholder { color:#999; }
.save{margin-top: 40px;}

+ 63 - 0
app/jbsc/css/filter_result.css

@ -0,0 +1,63 @@
.flex-box{
			  display: -webkit-box;
			  display: -ms-flexbox;
			  display: flex;
			  -webkit-box-pack: center;
			      -ms-flex-pack: center;
			          justify-content: center;
			  -webkit-box-align: center;
			      -ms-flex-align: center;
			          align-items: center;
			}
			.flex-box-item{
			  -webkit-box-flex: 1;
			      -ms-flex: 1;
			          flex: 1;
			}
			.prompt-text{background-color: #ffa39e;color: #fff;font-size: 12px;text-align: center;line-height: 26px;}
			.single-choice-question{margin: 20px;padding: 0 20px;max-height: 540px;overflow-y: auto;border: 1px solid #d7dce6;border-radius: 10px;}
			.question-title{font-size: 16px;line-height: 40px;}
			.question-list,.daan-list{margin: 0;padding: 0;list-style: none;font-size: 14px;line-height: 1;}
			.question-list>li{border-top: 1px solid #d7dce6;padding: 10px 0;}
			.question-name{margin-bottom: 10px;}
			.daan-list>*{padding-left: 20px;}
			.daan-list input{opacity: 0;}
			.daan-list input[type="radio"]{width: 100%;height: 100%;opacity: 0;position: absolute;cursor: pointer;margin: 0;left: 0;right: 0;top: 0;bottom: 0;}
.daan-list i{width: 20px;height: 20px;display: inline-block;vertical-align: middle;margin-right: 10px;background: url(../images/dianxuan_btn.png) center center / 100% 100% no-repeat;}
.daan-list input[type="radio"]:checked ~ i{background-image: url(../images/dianxuan_pre.png);}
.label-block{display: block;position: relative;cursor: pointer;}
.label-block+.label-block{margin-top: 16px;}
.calculation-score{border-top: 1px solid #d7dce6;border-bottom: 1px solid #D7DCE6;}
.label-block span,.calculation-score .pull-right{color: #ff9630;}
.w-250{width: 250px;border: 1px solid #d7dce6;position: relative;border-top: 0;overflow: hidden;height: 605px;overflow: auto;}
.f-16{font-size: 16px;}
.mb20{margin-bottom: 20px!important;}
.m20{margin: 20px;}
.f16{font-size: 16px;}
.base-info,.calculation-score,.btn-group-bottom,.assessment-report{padding: 17px;font-size: 14px;}
.calculation-score p{margin-bottom: 5px;}
.assessment-report p{margin-bottom: 0;}
.canvas-box canvas{width: 100%;height: 100%;}
.w-70{width: 70px;}
.base-info .flex-box{margin-top: 20px;}
.right-triangle{position: relative;background: url(../images/right-triangle.png) right center / auto 15px no-repeat;}
.base-info .w-70{padding-right: 10px;text-align: justify;position: relative;text-align-last: justify;}
.base-info .w-70:after{content: ':';position: absolute;right: 2px;top: 0;font-weight: bold;}
.base-info input{height: 20px;padding: 0;text-align: center;width: 60px;margin: 0 5px;border-radius: 10px;border: 1px solid #d7dce6;}
.progress-number{position: absolute;top: 50%;margin-top: -30px;text-align: center;left: 0;right: 0;}
.progress-number>span{font-size: 14px;color: #12b7f5;}
.clear-bottom{height: 140px;}
.btn-group-bottom {position: fixed;right: 0;width: 250px;bottom: 0;border-left: 1px solid #D7DCE6;background: #fff;border-top: 1px solid #D7DCE6;}
.btn-group-bottom .btn{width: 100%;height: 40px;padding: 8px 12px;}
.btn-group-bottom .btn+.btn{margin-top: 10px;}
.warning-text .screen_result{color: #ff3b30;font-size: 12px;}
.success-text .screen_result{color: #74bf00;font-size: 12px;}
.score-box{height: 51px;padding-left: 115px;padding-top: 8px;background-size: 69px 51px;background-repeat: no-repeat;background-position: 35px center;}
.warning-text .score-box{color: #FF9630;background-image: url(../images/jiaofeishibai_icon.png);}
.success-text .score-box{color: #74bf00;background-image: url(../images/jiaofeichengong_icon.png)}
.score{font-size: 30px;}
.score>small{font-size: 12px;}
.jkgz-ljyy{padding-right: 17px;overflow: hidden;margin-bottom: 17px;}
.jkgz-ljyy .btn{width: 50%;float: left;}
.jkgz-ljyy .btn:nth-of-type(2n){float: right;margin-right: -20px;margin-top: 0;}
.wenjuan-textarea{padding: 8px 12px;width: 100%;border-radius: 4px;}

+ 60 - 0
app/jbsc/css/filter_type.css

@ -0,0 +1,60 @@
.layer-mask{width: 280px;overflow: hidden;}
.c-container{width: 560px;transition: all .3s ease-in-out;}
.select-type,.select-denuzen{float: left;}
.filter-list{background: #fff;text-align: center;padding: 0;width: 280px;list-style: none;margin-bottom: 0;}
.filter-list li{height: 40px;line-height: 40px;cursor: pointer;color: #333;font-size: 14px;border-bottom: 1px solid #ccc;}
.filter-list-list.active{color: #12B7F5;background-color: #f5f5f5;}
.pl20{padding-left: 20px;}
.select-list{background: #fff;text-align: center;width: 280px;list-style: none;padding: 0;}
.select-list>li{height: 40px;line-height: 40px;cursor: pointer;overflow: hidden;color: #333;font-size: 14px;border-bottom: 1px solid #ccc;}
.go-back{color: #12B7F5!important;}
.select-list p{margin-bottom: 0;}
.denizen-list{padding: 0;list-style: none;overflow: hidden;}
.search-box{position: relative;}
.search-icon{width: 50px;height: 40px;position: absolute;right: 0;top: 0;display: block;background: url(../../../images/sousuo_icon.png) center center / 15px 15px no-repeat;}
.search-box input{height: 28px;padding: 2px 10px;background-color: #f5f5fa;}
.select-box select{border: 0;border: none;box-shadow: none;padding-left: 0;padding-right: 0;margin-top: 2px;}
.select-box select:focus{outline: none;box-shadow: none;}
.pt6{padding-top: 6px;}
.flex-box{
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.flex-box-item{
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
}
.select-list .denizen-group{height: auto;}
.denizen-title{position: relative;}
.denizen-title:after{content: '';position: absolute;width: 20px;top: 10px;right: 10px;height: 20px;background: url(../images/arrow-down.png) center center / 100% 100% no-repeat;}
.active>.denizen-title:after{transform: rotateZ(180deg);}
.denizen-list li{height: 60px;padding-left: 10px;background-color: #fff;line-height: 23px;border-bottom: 1px solid #ccc;margin-bottom: -1px;}
.denizen-list li:hover{background: #cbcbd2;}
.gouxuan{position: relative;margin-right: 5px;}
.gouxuan i{width: 14px;height: 14px;transition: all .3s ease-in-out;display: inline-block;background: url(../images/gouxuan_btn.png) center center / 100% 100% no-repeat;}
.active>.gouxuan i{background-image: url(../images/gouxuan_pre.png);}
.icon{width: 21px;height: 21px;vertical-align:middle;display: inline-block;background-size: auto 100%;background-position: center center;background-repeat: no-repeat;}
.icon-wx{background-image: url(../images/weixing_icon.png);}
.icon-wx-gray{background-image: url(../images/weixing_zihui_icon.png);}
.icon-xueyaji{background-image: url(../images/icon_xueyaji2.png);}
.icon-xueyaji-gray{background-image: url(../images/icon_xueyaji_zhihui.png);}
.icon-xuetangyi{background-image: url(../images/icon_xuetangyi.png);}
.icon-xuetangyi-gray{background-image: url(../images/icon_xuetangyi_zhihui.png);}
.den-avatar{width: 40px;height: 40px;border-radius: 100%;margin-right: 10px;overflow: hidden;border-radius: 100%;}
.den-avatar img{width: 100%;height: 100%;display: block;}
.mb-icon-round{width: 50px;height: 21px;border-radius: 10px;text-align: center;line-height: 21px;font-size: 15px;}
.mb-icon-round.red{border: solid 1px #FF4c4c;color: #FF4c4c;}
.mb-icon-round.orange{border: solid 1px #FFc691;color: #FFc691;}
.mb-icon-round.green{border: solid 1px #06bf04;color: #06bf04;}
.start-screening{height: 40px;width: 200px;margin: 20px auto;display: block;}
.clear-fixed-bottom{height: 80px;}
.btn-fixed-bottom{background: #fff;position: fixed;left: 0;right: 0;bottom: 0;max-width: 280px;}

+ 54 - 0
app/jbsc/css/questionnaire.css

@ -0,0 +1,54 @@
.flex-box{
			  display: -webkit-box;
			  display: -ms-flexbox;
			  display: flex;
			  -webkit-box-pack: center;
			      -ms-flex-pack: center;
			          justify-content: center;
			  -webkit-box-align: center;
			      -ms-flex-align: center;
			          align-items: center;
			}
			.flex-box-item{
			  -webkit-box-flex: 1;
			      -ms-flex: 1;
			          flex: 1;
			}
			.prompt-text{background-color: #ffa39e;color: #fff;font-size: 12px;text-align: center;line-height: 26px;}
			.single-choice-question{margin: 20px;padding: 0 20px;max-height: 540px;overflow-y: auto;border: 1px solid #d7dce6;border-radius: 10px;}
			.question-title{font-size: 16px;line-height: 40px;}
			.question-list,.daan-list{margin: 0;padding: 0;list-style: none;font-size: 14px;line-height: 1;}
			.question-list>li{border-top: 1px solid #d7dce6;padding: 10px 0;}
			.question-name{margin-bottom: 10px;}
			.daan-list{padding-left: 20px;}
			.daan-list input{opacity: 0;}
			.daan-list input[type="radio"],.daan-list input[type="checkbox"]{width: 100%;height: 100%;opacity: 0;position: absolute;cursor: pointer;margin: 0;left: 0;right: 0;top: 0;bottom: 0;}
.daan-list i{width: 20px;height: 20px;display: inline-block;vertical-align: middle;margin-right: 10px;}
.daan-list input[type="radio"]~i{background: url(../images/dianxuan_btn.png) center center / 100% 100% no-repeat;}
.daan-list input[type="checkbox"]~i{background: url(../images/gouxuan_btn.png) center center / 100% 100% no-repeat;}
.daan-list input[type="radio"]:checked ~ i{background-image: url(../images/dianxuan_pre.png);}
.daan-list input[type="checkbox"]:checked ~ i{background-image: url(../images/gouxuan_pre.png);}
.label-block{display: block;position: relative;cursor: pointer;}
.label-block+.label-block{margin-top: 10px;}
.label-block span{color: #ff9630;}
.w-250{width: 250px;border: 1px solid #d7dce6;border-top: 0;overflow: hidden;height: 605px;overflow: auto;}
.f-16{font-size: 16px;}
.m20{margin: 20px;}
.base-info,.completion-of-progress,.btn-group-bottom{padding: 17px;font-size: 14px;}
.completion-of-progress{border-top: 1px solid #d7dce6;border-bottom: 1px solid #d7dce6;}
.completion-of-progress .canvas-box{position:relative;width: 120px;height: 120px;display: block;margin: 20px auto;}
.completion-of-progress p{margin-bottom: 0;}
.canvas-box canvas{width: 100%;height: 100%;}
.w-70{width: 70px;}
.base-info .flex-box{margin-top: 20px;}
.right-triangle{position: relative;background: url(../images/right-triangle.png) right center / auto 15px no-repeat;}
.base-info .w-70{padding-right: 10px;text-align: justify;position: relative;text-align-last: justify;}
.base-info .w-70:after{content: ':';position: absolute;right: 2px;top: 0;font-weight: bold;}
.base-info input{height: 20px;padding: 0;text-align: center;width: 60px;margin: 0 5px;border-radius: 10px;border: 1px solid #d7dce6;}
.base-info .flex-box-item{padding-right: 15px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
.progress-number{position: absolute;top: 50%;margin-top: -30px;text-align: center;left: 0;right: 0;}
.progress-number>span{font-size: 14px;color: #12b7f5;}
.btn-group-bottom .btn{width: 100%;height: 40px;padding: 8px 12px;}
.btn-group-bottom .btn+.btn{margin-top: 10px;}
.disabled{pointer-events: none;}
.wenjuan-textarea{padding: 8px 12px;width: 100%;border-radius: 4px;}

+ 103 - 0
app/jbsc/html/advice.html

@ -0,0 +1,103 @@
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="../../../css/bootstrap.min.css"/>
		<link rel="stylesheet" href="../css/advice.css" />
	</head>
	<body>
		<div class="c-container" id="advice">
			<div class="advice-box">
				<p class="advice-title">选择健康指导建议(可多选):</p>
				<ul class="advice-content">
					<li v-for="advice in adviceList">
						<input type="checkbox" :value="advice.adviceCode" v-model="advicCcodes"/><i></i><span v-text="advice.advice"></span>
					</li>
					<li v-if="!adviceList.length">
						<span>无建议模板</span>
					</li>
				</ul>
				<p class="qtjy">您还有其他补充建议:</p>
				<textarea class="advice-textarea form-control" v-model="otherAdvice" rows="4"></textarea>
				<div class="text-center">
					<button class="btn btn-primary save" @click="save">保存</button>
				</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="../../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript" src="../../../api/jbsc-api.js" ></script>
		<script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			var httpData=GetRequest();
			new Vue({
				el: "#advice",
				data: {
					screeningType:httpData['filter_code'],
					adviceList:[],
					resultCode:httpData['resultCode'],
					advicCcodes:[],
					otherAdvice:"",
					parentIframe:httpData['parentIframe'],//父级窗口 用户保存后关闭
				},
				mounted: function(){
					if(!this.screeningType){
						top.layer.msg("模板code丢失", {icon: 5});
						return 
					}
					this.getAdvice();
				},
				methods: {
					getAdvice:function(){
						var vm=this;
						var data = {templateCode: vm.screeningType};
						var loadding = top.layer.load(0, {shade: false}); //0代表加载的风格,支持0-2
						jbscAPI.getTemplateAdvice(data).then(function(res){
							top.layer.close(loadding);
							if(res.status==200){
								vm.adviceList=res.data
							}else{
								top.layer.msg(res.msg, {icon: 5});
							}
						})
					},
					save:function(){
						var vm=this;
						var data={
							code: vm.resultCode.toString(),
							adviceCodes: vm.advicCcodes.toString(),
							otherAdvice: vm.otherAdvice.toString()
						}
						var loadding = top.layer.load(0, {shade: false}); //0代表加载的风格,支持0-2
						jbscAPI.updateAfterFollwoing(data).then(function(res){
							top.layer.close(loadding);
							if(res.status==200){
					    		top.layer.open({
								  type: 2,
				//				  offset: ['100px'], //右下角弹出
								  area: ['568px', '100%'],
								  shade: 0.5,
								  title: '查看筛选结果',
								  fixed: true, //不固定
								  maxmin: true,
								  closeBtn:1,
								  shift: 5,
								  shadeClose: false, //点击遮罩关闭层
								  content: 'view_screening_results.html?resultCode='+vm.resultCode
								});
								var index = top.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
								vm.parentIframe && top.layer.close(vm.parentIframe); //再执行关闭
								top.layer.close(index); //再执行关闭
							}else{
								top.layer.msg(res.msg, {icon: 5});
							}
						})
					}
				}
			})
		</script>
	</body>
</html>

+ 165 - 0
app/jbsc/html/filter_result.html

@ -0,0 +1,165 @@
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
	    <title>筛选类型</title>
	    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	    <meta name="renderer" content="webkit">
	    <meta http-equiv="Cache-Control" content="no-siteapp" />
	    <meta name="keywords" content="筛选类型">
	    <meta name="description" content="筛选类型">
	    <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/cross.css"/>
		<link rel="stylesheet" href="../css/filter_result.css" />
	</head>
	<body>
		<div class="flex-box" id="app" style="align-items: flex-start;" v-block>
			<div class="flex-box-item">
				<div class="m20 mb0" style="line-height: 1;">
					<div class="flex-box mb20">
						<div class="flex-box-item">类型:<span v-text="userInfo.template_title"></span></div>
						<div class="flex-box-item">人员:王转转全科医生</div>
					</div>
					<div class="flex-box">
						<div class="flex-box-item">对象:<span v-text="userInfo.patient_name+'('+(userInfo.sex==1?'男':'女')+userInfo.age+'岁)'"></span></div>
						<div class="flex-box-item">体征记录:<span v-if="!noTiZhong"><span v-text="tizhongRecord.recordDate+tizhongRecord.recordType"></span>&nbsp;&nbsp;身高<span v-text="tizhongRecord.value2+tizhongRecord.value1"></span></span><span v-else>暂无记录</span></div>
					</div>
				</div>
				<div class="single-choice-question">
					<div class="question-title">单选题</div>
					<div class="question-content">
						<ul class="question-list" v-for="(qst,key,index) in answer">
							<li>
								<p class="question-name" v-text="key+'、'+qst.question.title"></p>
								<div class="daan-list" v-if="qst.question.questionType==0">
									<lable class="label-block">
										<span class="pull-right" v-text="qst.option.score+'分'"></span>
										<input :type="qst.questionType==1?'checked':'radio'" readonly="readonly" :name="'ques'+index+(qst.questionType==1?'[]':'')" checked="checked" value="1" /><i></i><span v-text="qst.option.content"></span>											
									</lable>
								</div>
								<div class="daan-list" v-else-if="qst.question.questionType==1">
									<lable class="label-block" v-for="opt in qst.option">
										<span class="pull-right" v-text="opt.score+'分'"></span>
										<input :type="qst.questionType==1?'checked':'radio'" readonly="readonly" :name="'ques'+index+(qst.questionType==1?'[]':'')" checked="checked" value="1" /><i></i><span v-text="opt.content"></span>											
									</lable>
								</div>
								<div class="daan-list" v-else>
									<textarea class="wenjuan-textarea" rows="2" v-model="qst.question.content"></textarea>
								</div>
							</li>
						</ul>
					</div>
				</div>
			</div>
			<div class="w-250">
				<div class="base-info">
					<p class="f-16 mb0">评分</p>
					<div :class="userInfo.is_danger?'warning-text':'success-text'">
						<p class="screen_result" v-text="result.screen_result"></p>
						<div class="score-box">
							<span class="score"><span v-text="result.screen_result_score"></span><small> 分</small></span>
						</div>
					</div>
				</div>
				<div class="calculation-score">
					<p class="f16 mb20">计算分值</p>
					<p v-for="(qst,key,index) in answer">
						<span class="pull-right" v-text="qst.option.score+'分'">10分</span>
						<span v-text="qst.question.title"></span>
					</p>
					
				</div>
				<div class="assessment-report">
					<p class="f16 mb20">评估报告</p>
					<p v-text="result.advice"></p>
				</div>
				<div class="clear-bottom">
					<div class="btn-group-bottom">
						<button class="btn btn-primary" @click="referral">转诊</button>
						<button class="btn btn-warning" @click="heathTrack">健康跟踪</button>			
					</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="../../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript" src="../../../api/jbsc-api.js" ></script>
		<script src="../../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			var httpData=GetRequest();
			new Vue({
				el: "#app",
				data: {
					answer:[],//问卷
					userInfo:[],//用户信息
					result:[],//结果
					tizhongRecord:[],
					noTiZhong:true,
					resultCode:httpData['code'],
					screeningType:httpData['filter_type']
				},
				mounted: function(){
					this.getScreenResultDetail()
				},
				methods: {
					getScreenResultDetail:function(){
						var vm=this;
						var loadding = top.layer.load(0, {shade: false}); //0代表加载的风格,支持0-2
						var data={
							code: vm.resultCode
						}
						jbscAPI.getScreenResultDetail(data).then(function(res){
							top.layer.close(loadding);
							if(res.status==200){
								var data=res.data;
								data && (vm.answer=data.answer,vm.userInfo=data.info,vm.result=data.result);
								data && data.info && data.info.code && vm.getHealth(data.info.code)
							}else{
								top.layer.msg(res.msg, {icon: 5});
							}
						})
					},
					getHealth:function(code){
						var vm=this;
						var data={
							patient: code
						}
						jbscAPI.getHealth(data).then(function(res){
							if(res.status == 200) {
								vm.tizhongRecord = _.find(res.data,function(o) {
									return o.type =="3";
								}) || {};
							} else {
								top.layer.msg(res.msg, {icon: 5});
							}
		    				(JSON.stringify(vm.tizhongRecord)!=='{}') && (vm.noTiZhong=false);
		    				console.log(vm.noTiZhong)
					    })
					},
					referral:function(){
						top.layer.msg("PC上暂不支持,请打开手机端疑似高危记录进行转诊预约",{icon:5});
					},
					heathTrack:function(){
						var vm=this
						var index = top.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
						top.layer.open({
						  type: 2,
						  area: ['500px', '550px'],
						  shade: 0.5,
						  title: '家医建议',
						  fixed: true, //不固定
						  maxmin: false,
						  closeBtn:1,
						  shift: 5,
						  shadeClose: false, //点击遮罩关闭层
						  content: 'advice.html?parentIframe='+index+'&resultCode='+vm.resultCode+'&filter_code='+vm.screeningType
						});
					},
				},
			})
		</script>
	</body>
</html>

+ 265 - 0
app/jbsc/html/filter_type.html

@ -0,0 +1,265 @@
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
	    <title>筛选类型</title>
	    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	    <meta name="renderer" content="webkit">
	    <meta http-equiv="Cache-Control" content="no-siteapp" />
	    <meta name="keywords" content="筛选类型">
	    <meta name="description" content="筛选类型">
	    <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/cross.css"/>
		<link rel="stylesheet" href="../css/filter_type.css" />
	</head>
	<body>
		<div class="layer-mask" id="app">
			<div class="c-container" :style="{marginLeft:currentType==1?'-280px':'0'}">
				<div class="select-type">
					<ul class="filter-list">
						<li class="text-left pl20">筛选类型:</li>
						<li class="filter-list-list" v-for="item in screenList" :class="{'active':screeningType==item}" v-text="item.title" @click="goDenizen(item)"></li>
					</ul>
					<div class="text-center ptb10" v-if="screenList.length && !noScreen" @click="getScreenList('more')">						
						<button class="btn btn-default">更多问卷</button>
					</div>
				</div>
				<div class="select-denuzen">
					<ul class="select-list">
						<li class="text-left pl10 active go-back" @click="goType">〈返回上一步</li>
						<li class="text-left plr10 select-box">
							<select class="form-control" v-model="teamCode">
								<option disabled="disabled">选择医生团队</option>
								<option v-for="item in doctorList" :value="item.id">{{item.name}}</option>
							</select>
						</li>
						<li class="plr10 pt6 search-box">
							<input type="text" placeholder="搜索居民名" v-model="denizenName" class="form-control" />
							<span class="search-icon" @click="searchDenizen"></span>
						</li>
						<li class="text-left denizen-group">
							<ul class="denizen-list">
								<li class="flex-box denizen-item" v-for="item in denizenList" :class="{'active':(screeningResidents==item)}" @click="selectDenizen(item)">
									<div class="gouxuan">
										<i></i>
									</div>
									<div class="den-avatar">
										<img src="../../../images/changcufangfenxi_icon.png"/>
									</div>
									<div class="flex-box-item">
										<p class="denizen-info"><span>{{item.name}}</span><span class="c-909090">({{item.sex==1?'男':'女'}} {{item.age}}岁 {{item.expensesStatus==1?"已缴费":(item.expensesStatus==2?"已退费":(item.expensesStatus==0?"未缴费":""))}})</span></p>
										<p>
											<span class="pull-right mr15 mb-icon-round green" v-if="item.disease==1 && item.diseaseCondition==0">
											</span>
											<span class="pull-right mr15 mb-icon-round green" v-if="item.disease==2 && item.diseaseCondition==0">
											</span>
											<span class="pull-right mr15 mb-icon-round green" v-if="(item.disease=='1,2' || item.disease=='2,1') && item.diseaseCondition==0">
												高糖
											</span>
											<span class="pull-right mr15 mb-icon-round orange" v-if="item.disease==1 && item.diseaseCondition==1">
											</span>
											<span class="pull-right mr15 mb-icon-round orange" v-if="item.disease==2 && item.diseaseCondition==1">
											</span>
											<span class="pull-right mr15 mb-icon-round orange" v-if="(item.disease=='1,2' || item.disease=='2,1') && item.diseaseCondition==1">
												高糖
											</span>
											<span class="pull-right mr15 mb-icon-round red" v-if="item.disease==1 && item.diseaseCondition==2">
											</span>
											<span class="pull-right mr15 mb-icon-round red" v-if="item.disease==1 && item.disease==2 && item.diseaseCondition==2">
											</span>
											<span class="pull-right mr15 mb-icon-round red" v-if="(item.disease=='1,2' || item.disease=='2,1') && item.diseaseCondition==2">
												高糖
											</span>
											</span>
											<span class="icon icon-wx" v-if="item.openid"></span>
											<span class="icon icon-wx-gray" v-else></span>
											<span class="icon icon-xueyaji" v-if='item.deviceType && item.deviceType.indexOf("2") > -1'></span>
											<span class="icon icon-xueyaji-gray" v-else></span>
											<span class="icon icon-xuetangyi"v-if='item.deviceType && item.deviceType.indexOf("1") > -1'></span>
											<span class="icon icon-xuetangyi-gray" v-else></span>
										</p>
									</div>
								</li>
							</ul>
							<div class="text-center ptb10" v-if="denizenList.length && !noDenizen" @click="getScreenList('more')">						
								<button class="btn btn-default">更多居民</button>
							</div>
						</li>
					</ul>
					<div class="clear-fixed-bottom" v-if="(currentType==1)">
						<div class="btn-fixed-bottom">
							<button class="btn btn-primary start-screening" @click="startScreening">开始筛查</button>
						</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"></script>
	     <script src="../../../js/es6-promise.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 type="text/javascript" src="../../../api/jbsc-api.js" ></script>
		<!--<script src="../../../plugins/layer/layer.min.js"></script>-->
	    <script>
	    	var httpData=GetRequest();
	    	new Vue({
				el: "#app",
				data: {
					//数据结果
					pageSize:10,//每页显示数量
					page:1,//类型页码
					sPage:1,//居民页码
					labelType:5,//问卷筛查labelType=5
					screenList:[],//问卷列表
					noScreen:false,
					noDenizen:false,
					denizenList:[],//居民列表
					doctorList:[],//医生团队列表
					currentType:(httpData['goDenizen'] || 0),// 当前是在选择类型还是选择居民
					screeningType:{},//当前问卷类型
					screeningResidents:{},//选中居民
					keyWord:'',//关键字
					teamCode:'',
					denizenName:'',
					isSearch:false,
				},
				mounted: function(){
					this.getScreenList();
				},
				methods: {
//					获取筛查类型
					getScreenList:function(flag){
			    		var vm=this;
			   			(flag=='more' && ++vm.page)
			    		var data={
			    			pageNo: vm.page,
			    			pageSize: vm.pageSize,
			    			labelType: vm.type || 5
			    		}
			    		jbscAPI.getScreenList(data).then(function(res){
			    			if(res.status==200){
			    				var list=vm.screenList;
			    				var _length=res.data && res.data.length || 0;
			    				_length && (list=list.concat(res.data));
			    				vm.screenList=list;
			    				if(_length<vm.pageSize){
			    					vm.noScreen=true;
			    				}
			    			}
			    		})
			   		},
			   		searchDenizen: function(){
			   			var vm=this;
			   			!vm.isSearch && (vm.sPage=1);
			   			vm.isSearch && (++vm.sPage);
			   			vm.isSearch=true;
			   			var data={
			   				filter: vm.denizenName,
			   				teamCode: vm.teamCode,
			   				page: vm.sPage,
			   				pagesize: vm.pageSize,
			   			}
			   			jbscAPI.searchDenizen(data).then(function(res){
			   				if(res.status==200){
			   					if(res.data){			   						
			   						vm.denizenList=res.data;
			   					}else{
			   						top.layer.msg('无相关居民信息', {icon: 5});
			   					}
			   				}else{
			   					top.layer.msg(res.msg, {icon: 5});
			   				}
			   			})
			   		},
			   		getPatientSignByDoctor:function(flag){
			   			var vm=this;
			   			flag=='more' && ++vm.sPage
			    		var vm=this;
			    		var data={
			    			teamCode: vm.teamCode,
			    			page: vm.sPage,
			    			pagesize: vm.pageSize
			    		}
			    		jbscAPI.patientsByTeam(data).then(function(res){
			    			if(res.status==200){
			    				var list=vm.denizenList;
			    				var _length=res.data && res.data.length || 0;
			    				_length && (list=list.concat(res.data));
			    				vm.denizenList=list;
			    				if(_length<vm.pageSize){
			    					vm.noDenizen=true;
			    				}
			    				
			    			}
			    		})
			   		},
			   		getDoctorTeam:function(){
			   			var vm=this
			   			console.log("A")
			   			var wlyyAgentForDoc=JSON.parse(window.localStorage.getItem('wlyyAgentForDoc'));
			   			var uid=wlyyAgentForDoc && wlyyAgentForDoc.uid;
			   			jbscAPI.getDoctorTeam(uid).then(function(res){
			    			if(res.status==200){
			    				vm.doctorList=res.data;
			    				vm.teamCode=vm.doctorList[0].id
			    			}
			    		})
			   		},
//			   		选择好类型自动下一步
					goDenizen:function(item){
						var vm=this;
						vm.currentType=1;
						vm.screeningType=item;
				    },
//				    开始筛查
					startScreening:function(){
						var vm=this
			    		top.layer.open({
						  type: 2,
		//				  offset: ['100px'], //右下角弹出
						  area: ['820px', '648px'],
						  shade: 0.5,
						  title: '筛选统计',
						  fixed: true, //不固定
						  maxmin: true,
						  closeBtn:1,
						  shift: 5,
						  shadeClose: false, //点击遮罩关闭层
						  content: 'questionnaire.html?fliter_code='+vm.screeningType.code+'&fliter_title='+vm.screeningType.title+'&resident_code='+vm.screeningResidents.code+'&resident_name='+vm.screeningResidents.name
						});
						var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
						parent.layer.close(index); //再执行关闭
		    		},
//				    返回上一步
			    	goType:function(){
			    		var vm=this;
						vm.currentType=0;
			    	},
			    	selectDenizen:function(item){
			    		var vm=this;
			    		vm.screeningResidents=item
			    	}
				},
				watch:{
					teamCode:function(){
						this.getPatientSignByDoctor()
					},
					currentType:function(val){
						val &&  this.getDoctorTeam();
					},
					denizenName:function(){
						this.sPage=0
					}
				}
	    	})
	    </script>
	</body>
</html>

+ 283 - 0
app/jbsc/html/questionnaire.html

@ -0,0 +1,283 @@
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
	    <title>筛选类型</title>
	    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	    <meta name="renderer" content="webkit">
	    <meta http-equiv="Cache-Control" content="no-siteapp" />
	    <meta name="keywords" content="筛选类型">
	    <meta name="description" content="筛选类型">
	    <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/cross.css"/>
		<link rel="stylesheet" href="../css/questionnaire.css" />
	</head>
	<body>
		<div class="flex-box" id="app" style="align-items: flex-start;" v-cloak>
			<div class="flex-box-item">
				<div class="prompt-text">请认真填写本页面,方便医生进行综合评估【厦门i健康】</div>
				<div class="single-choice-question">
					<div class="question-title">单选题</div>
					<div class="question-content">
						<ul class="question-list">
							<li v-for="(qst,key,index) in questions">
								<p class="question-name" v-text="key+'、'+qst.question.title"></p>
								<div class="daan-list" v-if="qst.question.questionType!=2">
									<lable class="label-block" v-for="opt in qst.option" @click="selectItem(qst.question,opt)">
										<span class="pull-right" v-text="opt.score+'分'"></span>
										<input :type="qst.questionType==1?'checked':'radio'" :name="'ques'+index+(qst.questionType==1?'[]':'')" value="1" /><i></i><span v-text="opt.content"></span>									
									</lable>	
								</div>
								<div class="daan-list" v-else>
									<textarea class="wenjuan-textarea" @keyup="changeContent(qst.question,qst.question.content)" rows="2" v-model="qst.question.content"></textarea>
								</div>
							</li>
						</ul>
					</div>
				</div>
			</div>
			<div class="w-250">
				<div class="base-info">
					<p class="f-16 mb0">基本信息</p>
					<div class="flex-box right-triangle">
						<span class="w-70">
							类型
						</span>
						<div class="flex-box-item" v-text="screeningTitle" @click="goBack">
							--
						</div>
					</div>
					<div class="flex-box right-triangle">
						<span class="w-70">
							对象
						</span>
						<div class="flex-box-item" v-text="screeningResidentsName" @click="goBack(1)">
							--
						</div>
					</div>
					<div class="flex-box">
						<span class="w-70">
							筛查人员
						</span>
						<div class="flex-box-item c-999" v-text="doctorInfo.name"></div>
					</div>
					<div class="flex-box" style="align-items: flex-start;">
						<span class="w-70">
							体重记录
						</span>
						<div class="flex-box-item">
							<p>体重<input type="number" step="0.1" readonly="readonly" :value="tizhongRecord.recordDate" /><span v-text="tizhongRecord.recordType"></span></p>
							<p class="mb0">身高<input type="number" step="0.1" readonly="readonly" :value="tizhongRecord.value2" /><span v-text="tizhongRecord.value1"></span></p>
						</div>
					</div>
				</div>
				
				<div class="completion-of-progress">
					<p class="f16 mb0">完成情况</p>
					<div class="canvas-box">
						<canvas-progress :progress="progress"></canvas-progress>
						<p class="progress-number">
							<span>已完成</span>
						</p>
					</div>
				</div>
				
				<div class="btn-group-bottom">
					<button class="btn btn-primary" @click="save" :class="{'disabled':progress!=100}">提交</button>
					<button class="btn btn-default" @click="signOut">退出</button>
				</div>
			</div>
		</div>
		<script type="text/javascript" src="../../../plugins/echarts/3.8.5/echarts.min.js" ></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/underscore.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/util.js" type="text/javascript" charset="utf-8"></script>
	    <script src="../../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
	    <script type="text/javascript" src="../../../api/jbsc-api.js" ></script>
		<script type="text/javascript" src="../component/canvas-progress.js" ></script>
		<script type="text/javascript">
			var httpData=GetRequest();
			var wlyyAgentForDoc=JSON.parse(window.localStorage.getItem('wlyyAgentForDoc'));
			new Vue({
				el: "#app",
				data: {
					//数据结果
					progress:0,
					selectArr:[],
					screeningTitle:decodeURI(httpData['fliter_title']),
					screeningType:httpData['fliter_code'],
					screeningResidents:httpData['resident_code'],
					screeningResidentsName:decodeURI(httpData['resident_name']),
					doctorInfo:{code:wlyyAgentForDoc.uid},
					questions:[],
					tizhongRecord:{},
					labelType:5,//问卷筛查labelType=5
					isAgain:(httpData['isAgain'] || 0),
				},
				mounted: function(){
					this.getQuestion();
					this.getHealth();
					this.getDoctorInfo()
				},
				methods: {
					getDoctorInfo:function(){
						var vm=this;
						var data={
							code:vm.doctorInfo.code
						}
						jbscAPI.baseinfo(data).then(function(res){
							if(res.status==200){
								vm.doctorInfo=res.data
							}else{
								top.layer.msg(res.msg, {icon: 5});
							}
						})
					},
					//计算选中个数,组装成后台接收格式
					selectItem:function(qst,select){
						var data={
								qstCode:qst.code,
								type:qst.questionType,
								content:qst.content,
						}
						var options=[];
						if(select){
							options=[{
								optionCode:select.code,
								comment:select.content,
								score:select.score
							}]
						}
						data.options=options;
						var oldLen = this.selectArr.length;
						this.selectArr = _.filter(this.selectArr,function(o) {
								return o.qstCode !=data.qstCode;
						}) || [];
						console.log(this.selectArr)
						this.selectArr.push(data);
						var len=this.selectArr.length;
						var questions=Object.values(this.questions)
						var allLen=questions.length;
						var progress=len===allLen?100:((len/allLen)*100);
						this.progress=progress;
					},
					signOut:function(){
						var index = top.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
						var current=top.layer.confirm('问卷还未提交,确定要关闭?', {
						  btn: ['关闭','取消'] //按钮
						}, function(){
							top.layer.closeAll(); //再执行关闭
						}, function(){
							top.layer.close(current); //再执行关闭
						});
					},
					changeContent:function(qst,content){
						if(!content) return ;
						this.selectItem(qst)
					},
					getQuestion:function(){
						var vm=this
						var data={
			    			surveyTemplateCode: vm.screeningType
			    		}
			    		jbscAPI.getAllQuestions(data).then(function(res){
			    			if(res.status==200){
								var questions = res.data;
								vm.questions = questions
							}
			    		})
					},
					getHealth:function(){
						var vm=this;
						var data={
							patient: vm.screeningResidents
						}
						jbscAPI.getHealth(data).then(function(res){
							if(res.status == 200) {
								vm.tizhongRecord = _.find(res.data,function(o) {
									return o.type =="3";
								}) || {};
							} else {
								top.layer.msg(res.msg, {icon: 5});
							}
			    			
					    })
					},
					save:function(){
						var vm=this;
						var loadding = top.layer.load(0, {shade: false}); //0代表加载的风格,支持0-2
						var data={
							patientCode:vm.screeningResidents,
							labelType:vm.labelType,
							isAgain:vm.isAgain,
							source:1,
							jsonData:JSON.stringify({
								surveyCode:vm.screeningType,
								questions:vm.selectArr
							})
						}
						jbscAPI.saveAnswer(data).then(function(res){
							top.layer.close(loadding);
							if(res.status == 200) {
								top.layer.open({
								  type: 2,
								  area: ['820px', '648px'],
								  shade: 0.5,
								  title: '筛选统计',
								  fixed: true, //不固定
								  maxmin: true,
								  closeBtn:1,
								  shift: 5,
								  shadeClose: true, //点击遮罩关闭层
								  content: 'filter_result.html?code='+res.data+'&filter_type='+vm.screeningType
								});
								var index = top.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
								top.layer.close(index); //再执行关闭
							} else {
								top.layer.msg(res.msg, {icon: 5});
							}
			    			
					   })
					},
//					返回选择居民或者问卷类型
					goBack:function(number){
						var vm=this
						if(vm.isAgain){
							var content;
							if(number==1){
								content='再次筛查无法选择居民'
							}else{
								content='再次筛查无法选择问卷类型'
							}
							top.layer.msg(content, {icon: 5});
							return ;
						}
						var content='filter_type.html';
						if(number===1){//选择居民
							content+='?goDenizen=1';
						}
						top.layer.open({
						  type: 2,
						  offset: 'rb', //右下角弹出
						  id:"filter_type",
						  background:"transparent",
						  area: ['280px', '100%'],
						  shade: 0.5,
						  title: false,
						  fixed: true, //不固定
						  maxmin: false,
						  closeBtn:0,
						  shift: 5,
						  shadeClose: false, //点击遮罩关闭层
						  content: content
						});
					}
				}
			})
		</script>
	</body>
</html>

+ 2 - 1
app/jbsc/html/statistics.html

@ -196,7 +196,7 @@
									</div>
									<div v-else-if="data.following==1">
										<span class="btn bgc-2DBE55 fl ml10" @click="jkjy(data)">健康教育</span>
										<span class="btn bgc-12B7F5 fl ml10" @click="shaicha(1)">再次筛查</span>
										<span class="btn bgc-12B7F5 fl ml10" @click="shaicha(data,1)">再次筛查</span>
									</div>
									<div v-else-if="data.isOrder==2" class="c-12B7F5">
										已接诊
@ -224,6 +224,7 @@
		<script src="../../../api/http-request.js"></script>
		<script src="../../../component/common/pagination.js"></script>
		<script src="../../../api/jbsc-api.js"></script>
	    <script src="../../../plugins/layer/layer.min.js"></script>
		<script src="../js/statistics.js"></script>
	</body>

+ 266 - 0
app/jbsc/html/view_screening_results.html

@ -0,0 +1,266 @@
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
	    <title>筛选类型</title>
	    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	    <meta name="renderer" content="webkit">
	    <meta http-equiv="Cache-Control" content="no-siteapp" />
	    <meta name="keywords" content="筛选类型">
	    <meta name="description" content="筛选类型">
	    <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/cross.css"/>
		<style type="text/css">
			.flex-box{
			  display: -webkit-box;
			  display: -ms-flexbox;
			  display: flex;
			  -webkit-box-pack: center;
			      -ms-flex-pack: center;
			          justify-content: center;
			  -webkit-box-align: center;
			      -ms-flex-align: center;
			          align-items: center;
			}
			.flex-box-item{
			  -webkit-box-flex: 1;
			      -ms-flex: 1;
			          flex: 1;
			}
			.question-content{max-height: 195px;overflow: auto;}
			.prompt-text{background-color: #ffa39e;color: #fff;font-size: 12px;text-align: center;line-height: 26px;}
			.single-choice-question{margin: 20px;padding: 0 20px;max-height: 540px;overflow-y: auto;border: 1px solid #d7dce6;border-radius: 10px;}
			.question-title{font-size: 16px;line-height: 40px;}
			.question-list,.daan-list{margin: 0;padding-left: 0;list-style: none;font-size: 14px;line-height: 1;}
			.question-list>li{border-top: 1px solid #d7dce6;padding: 10px 0;}
			.question-name{margin-bottom: 10px;}
			.daan-list>*{padding-left: 20px;}
			.daan-list input{opacity: 0;}
			.daan-list input[type="radio"]{width: 100%;height: 100%;opacity: 0;position: absolute;cursor: pointer;margin: 0;left: 0;right: 0;top: 0;bottom: 0;}
			.daan-list i{width: 20px;height: 20px;display: inline-block;vertical-align: middle;margin-right: 10px;background: url(../images/dianxuan_btn.png) center center / 100% 100% no-repeat;}
			.daan-list input[type="radio"]:checked ~ i{background-image: url(../images/dianxuan_pre.png);}
			.label-block{display: block;position: relative;cursor: pointer;}
			.label-block+.label-block{margin-top: 16px;}
			.label-block span,.calculation-score .pull-right{color: #ff9630;}
			.w-250{width: 250px;border: 1px solid #d7dce6;position: relative;border-top: 0;overflow: hidden;height: 605px;overflow: auto;}
			.f-16{font-size: 16px;}
			.mb20{margin-bottom: 20px!important;}
			.m20{margin: 20px;}
			.f16{font-size: 16px;}
			.base-info,.calculation-score,.btn-group-bottom,.assessment-report{padding: 17px;font-size: 14px;}
			.calculation-score p{margin-bottom: 5px;}
			.assessment-report p{margin-bottom: 0;}
			.canvas-box canvas{width: 100%;height: 100%;}
			.w-70{width: 70px;}
			.base-info .flex-box{margin-top: 20px;}
			.right-triangle{position: relative;background: url(../images/right-triangle.png) right center / auto 15px no-repeat;}
			.base-info .w-70{padding-right: 10px;text-align: justify;position: relative;text-align-last: justify;}
			.base-info .w-70:after{content: ':';position: absolute;right: 2px;top: 0;font-weight: bold;}
			.base-info input{height: 20px;padding: 0;text-align: center;width: 60px;margin: 0 5px;border-radius: 10px;border: 1px solid #d7dce6;}
			.progress-number{position: absolute;top: 50%;margin-top: -30px;text-align: center;left: 0;right: 0;}
			.progress-number>span{font-size: 14px;color: #12b7f5;}
			.clear-bottom{height: 91px;}
			.btn-group-bottom{padding: 40px 0 10px;position: fixed;right: 0;left: 0;bottom: 0;border-left: 1px solid #D7DCE6;background: #fff;border-top: 1px solid #D7DCE6;}
			.btn-group-bottom .btn{width: 100%;height: 40px;padding: 8px 12px;border-radius: 0;width: 90px;margin: 0 10px;}
			.warning-text .screen_result{color: #ff3b30;font-size: 12px;}
			.success-text .screen_result{color: #74bf00;font-size: 12px;}
			.score-box{height: 80px;padding-left: 120px;padding-top: 8px;background-size: auto 100%;background-repeat: no-repeat;background-position: 0 center;}
			.warning-text .score-box{color: #FF9630;background-image: url(../images/jiaofeishibai_icon.png);}
			.success-text .score-box{color: #74bf00;background-image: url(../images/jiaofeichengong_icon.png)}
			.score{font-size: 30px;}
			.score>small{font-size: 12px;}
			.orange-text{color: #ffa65b;}
			.answer-content,.advice-content{border: 1px solid #ececec;border-radius: 10px;padding: 10px 20px 5px;}
			.advice-content{padding: 0;}
			.advice-list{padding: 20px 20px 0;overflow: hidden;}
			.advice-list li{padding-left: 20px;line-height: 1;position: relative;list-style: none;margin-bottom: 20px;}
			.advice-list li:before{position: absolute;left: 0;top: 50%;margin-top: -6px;width: 12px;height: 12px;border-radius: 100%;background-color: #02cfb9;content: '';}
			.other-advice{border-top: 1px solid #ececec;line-height: 2;height: 90px;padding: 5px 20px;}
			.bgc-02cfb9{background-color: #02cfb9;color: #fff;}
			.bgc-12b7f5{background-color: #12b7f5;color: #fff;}
			.bgc-12b7f5.focus, .bgc-12b7f5:focus, .bgc-12b7f5:hover{color: #fff;background-color: #01a9bd;}
			.bgc-02cfb9.focus, .bgc-02cfb9:focus, .bgc-02cfb9:hover{color: #fff;background-color: #00bda8;}
		</style>
	</head>
	<body>
		<div id="app" v-block>
			<div class="m20 mb0" style="line-height: 1;">
				<div class="flex-box mb20">
					<div class="flex-box-item">筛查类型:<span v-text="userInfo.template_title"></span></div>
					<div class="flex-box-item">筛查人员:<span v-text="doctorInfo.name"></span></div>
				</div>
				<div class="flex-box mb20">
					<div class="flex-box-item">筛查对象:<span v-text="userInfo.patient_name+'('+(userInfo.sex==1?'男':'女')+userInfo.age+'岁)'"></span></div>
					<div class="flex-box-item">体征记录:<span v-if="!noTiZhong"><span v-text="tizhongRecord.recordDate+tizhongRecord.recordType"></span>&nbsp;&nbsp;身高<span v-text="tizhongRecord.value2+tizhongRecord.value1"></span></span><span v-else>暂无记录</span></div>
				</div>
				<div class="flex-box">
					<div class="flex-box-item">处理情况:<span>健康跟踪</span></div>
					<div class="flex-box-item">筛查机构:<span v-text="doctorInfo.hospitalName"></span></div>
				</div>
			</div>
			<div class="single-choice-question">
				<div class="question-title">单选题</div>
				<div class="question-content">
					<ul class="question-list" v-for="(qst,key,index) in answer">
						<li>
							<p class="question-name" v-text="key+'、'+qst.question.title"></p>
							<div class="daan-list" v-if="qst.question.questionType==0">
								<lable class="label-block">
									<span class="pull-right" v-text="qst.option.score+'分'"></span>
									<input :type="qst.questionType==1?'checked':'radio'" readonly="readonly" :name="'ques'+index+(qst.questionType==1?'[]':'')" checked="checked" value="1" /><i></i><span v-text="qst.option.content"></span>											
								</lable>
							</div>
							<div class="daan-list" v-else-if="qst.question.questionType==1">
								<lable class="label-block" v-for="opt in qst.option">
									<span class="pull-right" v-text="opt.score+'分'"></span>
									<input :type="qst.questionType==1?'checked':'radio'" readonly="readonly" :name="'ques'+index+(qst.questionType==1?'[]':'')" checked="checked" value="1" /><i></i><span v-text="opt.content"></span>											
								</lable>
							</div>
							<div class="daan-list" v-else>
								<textarea class="wenjuan-textarea" rows="2" v-model="qst.question.content"></textarea>
							</div>
						</li>
					</ul>
				</div>
			</div>
		
			<div class="base-info">
				<div :class="userInfo.is_danger?'warning-text':'success-text'">
					<div class="score-box">
						<p class="f-16 mb0"><span class="c-333">评分 </span><span class="score"><span v-text="result.screen_result_score"></span><small> 分</small></span></p>
						<p class="screen_result" v-text="result.screen_result"></p>
					</div>
				</div>
			</div>
			<div class="calculation-score">
				<p class="f16 mb10">评估报告</p>
				<div class="answer-content">
					<p v-text="result.advice"></p>
				</div>
				
			</div>
			<div class="calculation-score">
				<p class="f16 mb10">家庭医生的建议</p>
				<div class="advice-content">
					<div class="option-advice">
						<ul class="advice-list">
							<li v-for="advice in result.doctorAdvice" v-text="advice.advice"></li>
						</ul>
					</div>
					<div class="other-advice">
						<span class="orange-text">补充建议:</span><span v-text="result.doctorOtherAdvice || '无'"></span>
					</div>
				</div>
				
			</div>
			<div class="clear-bottom">
				<div class="btn-group-bottom flex-box">
					<button class="btn btn-success" @click="jkjy">健康教育</button>
					<button class="btn bgc-12b7f5" v-if="userInfo.is_again" @click="reScreening">再次筛查</button>
					<button class="btn bgc-02cfb9" @click="referral">转诊</button>			
				</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="../../../api/http-request.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 type="text/javascript">
			var httpData=GetRequest();
			var wlyyAgentForDoc=JSON.parse(window.localStorage.getItem('wlyyAgentForDoc'));
			new Vue({
				el: "#app",
				data: {
					answer:[],//问卷
					userInfo:{is_again:0},//用户信息
					result:[],//结果
					tizhongRecord:[],
					noTiZhong:true,
					doctorInfo:{code:wlyyAgentForDoc.uid},
					resultCode:httpData['resultCode'],
				},
				mounted: function(){
					this.getScreenResultDetail()
					this.getDoctorInfo()
				},
				methods: {
					getDoctorInfo:function(){
						var vm=this;
						var data={
							code:vm.doctorInfo.code
						}
						httpRequest.get('doctor/baseinfo',{data:data}).then(function(res){
							if(res.status==200){
								vm.doctorInfo=res.data
							}else{
								top.layer.msg(res.msg, {icon: 5});
							}
						})
					},
					jkjy:function(){
						var vm=this
				  		var receiver={"code":vm.userInfo.patient_code,name:vm.userInfo.patient_name}
				  		sessionStorage.setItem("jbsc-jkwzreceiver",JSON.stringify(receiver))
				  		location.href="../../../../health-education/index.html?origin=jbsc"
				  	},
					getScreenResultDetail:function(){
						var vm=this;
						var loadding = top.layer.load(0, {shade: false}); //0代表加载的风格,支持0-2
						var data={
							code: vm.resultCode
						}
						httpRequest.get('doctor/screen/getScreenResultDetail',{data:data}).then(function(res){
							top.layer.close(loadding);
							if(res.status==200){
								var data=res.data;
								data && (vm.answer=data.answer,vm.userInfo=data.info,vm.result=data.result);
								data && data.info && data.info.code && vm.getHealth(data.info.code)
							}else{
								top.layer.msg(res.msg, {icon: 5});
							}
						})
					},
					getHealth:function(code){
						var vm=this;
						var data={
							patient: code
						}
						httpRequest.get('/patient/health_index/last',{data:data}).then(function(res){
							if(res.status == 200) {
								vm.tizhongRecord = _.find(res.data,function(o) {
									return o.type =="3";
								}) || {};
							} else {
								top.layer.msg(res.msg, {icon: 5});
							}
		    				(JSON.stringify(vm.tizhongRecord)!=='{}') && (vm.noTiZhong=false);
					    })
					},
					referral:function(){
						top.layer.msg("PC上暂不支持,请打开手机端疑似高危记录进行转诊预约",{icon:5});
					},
					reScreening:function(){//再次筛查
						var vm=this
			    		top.layer.open({
						  type: 2,
		//				  offset: ['100px'], //右下角弹出
						  area: ['820px', '648px'],
						  shade: 0.5,
						  title: '筛选统计',
						  fixed: true, //不固定
						  maxmin: true,
						  closeBtn:1,
						  shift: 5,
						  shadeClose: false, //点击遮罩关闭层
						  content: 'questionnaire.html?isAgain=1&fliter_title='+vm.userInfo.template_title+'&fliter_code='+vm.userInfo.template_code+'&resident_code='+vm.userInfo.patient_code+'&resident_name='+vm.userInfo.patient_name
						});
						var index = top.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
						top.layer.close(index); //再执行关闭
		    		},
				},
			})
		</script>
	</body>
</html>

BIN
app/jbsc/images/arrow-down.png


BIN
app/jbsc/images/dianxuan_btn.png


BIN
app/jbsc/images/dianxuan_pre.png


BIN
app/jbsc/images/gouxuan_btn.png


BIN
app/jbsc/images/gouxuan_pre.png


BIN
app/jbsc/images/icon_xuetangyi.png


BIN
app/jbsc/images/icon_xuetangyi_zhihui.png


BIN
app/jbsc/images/icon_xueyaji2.png


BIN
app/jbsc/images/icon_xueyaji_zhihui.png


BIN
app/jbsc/images/jiantou_img.png


BIN
app/jbsc/images/jiaofeichengong_icon.png


BIN
app/jbsc/images/jiaofeishibai_icon.png


BIN
app/jbsc/images/right-triangle.png


BIN
app/jbsc/images/weixing_icon.png


BIN
app/jbsc/images/weixing_zihui_icon.png


+ 31 - 4
app/jbsc/js/statistics.js

@ -111,15 +111,42 @@ new Vue({
  		location.href="../../../../health-education/index.html?origin=jbsc"
  	},
  	//筛查
  	shaicha:function(isNew){
  	shaicha:function(data,isNew){
  		var vm=this
  		if(isNew){
  			console.log(data)
  			//再次筛查数+1
  			vm.Statics.againCount++
  			showInfoMessage("再次筛查数+1")
			var vm=this
    		top.layer.open({
			  type: 2,
			  area: ['820px', '648px'],
			  shade: 0.5,
			  id:"questionnaire",
			  title: '筛选统计',
			  fixed: true, //不固定
			  maxmin: true,
			  closeBtn:1,
			  shift: 5,
			  shadeClose: false, //点击遮罩关闭层
			  content: 'questionnaire.html?fliter_code='+data.templateCode+'&fliter_title='+data.templateTitle+'&resident_code='+data.patientCode+'&resident_name='+data.patientName
			});
  			return ;
  		}
		//跳转到筛查流程页面
		showInfoMessage("开始筛查")
		layer.open({
		  type: 2,
		  offset: 'rb', //右下角弹出
		  id:"filter_type",
		  area: ['280px', '100%'],
		  shade: 0.5,
		  title: false,
		  fixed: true, //不固定
		  maxmin: false,
		  closeBtn:0,
		  shift: 5,
		  shadeClose: true, //点击遮罩关闭层
		  content: 'filter_type.html'
		});
  	},
  	//健康跟踪
  	jkgz:function(id){