ソースを参照

签约消息处理

linehang 6 年 前
コミット
9ed139aa3e

+ 32 - 0
api/sign_api.js

@ -23,6 +23,38 @@
		// 提醒缴费
		remainMoney: function(data) {
			return httpRequest.post("doctor/family_contract/expenses_remind", {data: data})
		},
		// 获取申请签约信息
		signing: function(data) {
			return httpRequest.post("doctor/family_contract/patient_signing", {data: data})
		},
		// 获取续签信息
		signOuttime: function(data) {
			return httpRequest.post("doctor/family_contract/patient_signing_outtime", {data: data})
		},
		// 医生下的团队
		teamLimit: function(data) {
			return httpRequest.get("doctor/admin-teams/team/" + data.doctorId + "/teamsLimit", {data: data})
		},
		// 公共字典
		getDictByDictName: function(data) {
			return httpRequest.get("common/getDictByDictName", {data:data})
		},
		// 居民标签
		patientLabel: function(data) {
			return httpRequest.post("doctor/patient_label_info/patient_label", {data: data})
		},
		// 服务标签
		getSigndict: function(data) {
			return httpRequest.get("doctor/sign/getSigndict")
		},
		// 团队成员
		teamMember: function(data) {
			return httpRequest.get("doctor/admin-teams/" + data.teamId + "/members", {data: data})
		},
		// 签约消息处理
		sign: function(data) {
			return httpRequest.post("doctor/family_contract/sign", {data: data})
		}
	}
    exports.signAPI = signAPI;

+ 22 - 1
app/sign/css/sign_handle.css

@ -1,7 +1,28 @@
.w40 {width: 40px;}
.h40 {height: 40px;}
.lh40 {line-height: 40px;}
.lh80 {line-height: 81px;}
.b-r-50 {border-radius: 50%;}
ul {list-style: none;}
.w-20-1 {width: calc(20% - 1px);}
.w-30-1 {width: calc(30% - 1px);}
.w-30-1 {width: calc(30% - 1px);}
.w-40 {width: 40%;}
.w-40-1 {width: calc(40% - 1px);}
.w-50-1 {width: calc(50% - 1px);}
.w-60-1 {width: calc(60% - 1px);}
.h60 {height: 60px;}
.btn-red, .btn-red:hover, .btn-red:focus {background-color: red; color: #fff;}
.w-100 {width: 100%;}
.pull-list {top: 41px;width: 100%;}
.pull-list li {padding-left: 20px;}
.set-bg {background: url(../../../images/tiaozhuan_xia_icon.png) no-repeat no-repeat calc(100% - 10px) center;}
.right-arrow {background: url(../../../images/tiaozhuan_icon.png) no-repeat no-repeat calc(100% - 10px) center; background-size: 8px 15px;}
.reason_list span {height: 24px; padding: 0 10px; background-color: #fff; line-height: 24px; border-radius: 12px; border: 1px solid #12b7f5; color: #12B7F5;}
.reason_list span.active {background-color: #12b7f5; color: #fff;}
#reason {
	height: 120px;
	width: 100%;
	padding: 10px 20px;
	outline: none;
	resize:none;
}

+ 78 - 30
app/sign/html/sign_handle.html

@ -6,65 +6,113 @@
		<link rel="stylesheet" type="text/css" href="../../../css/bootstrap.min.css" />
		<link rel="stylesheet" type="text/css" href="../../../css/cross.css"/>
		<link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
		<link rel="stylesheet" href="../css/sign_manage.css" />
		<link rel="stylesheet" href="../css/sign_handle.css" />
	</head>
	<body>
		<div id="app" class="p20">
		<div id="app" class="p20 mb10">
			<dl class="clearfix">
				<dt class="fl">
					<img class="fl w40 h40 b-r-50" src="../../../images/d-default.png" alt="居民头像" />
					<img class="fl w40 h40 b-r-50" :src="patientInfo.photo" alt="居民头像" />
				</dt>
				<dd class="fl ml10 c-999">
					<p class="m0"><span class="c-333 c-f16">王国维</span><span class="ml10 c-f14">(男 27岁 已缴费)</span></p>
					<p class="c-f12 m0">申请时间: 2018-07-13 14:36:00</p>
					<p class="m0"><span class="c-333 c-f16">{{patientInfo.name}}</span><span class="ml10 c-f14">({{patientInfo.sex == 1 ? "男" : "女"}}&emsp;{{patientInfo.age && patientInfo.age > 0 ? patientInfo.age : "未知"}}岁)</span></p>
					<p class="c-f12 m0">申请时间: {{patientInfo.jtSign.applyDate || patientInfo.applyDate}}</p>
				</dd>
			</dl>
			<h3>居民信息</h3>
			<ul class="m0 p0 lh40 c-border-t c-border-r c-border-l c-t-left c-333">
			<ul class="m0 p0 mb20 lh40 c-border-t c-border-r c-border-l c-t-left c-333">
				<li class="c-border-b clearfix">
					<span class="fl w-20-1 c-border-r pl20 c-999">身份证号</span>
					<span class="fl w-30-1 c-border-r pl20">xxx</span>
					<span class="fl w-30-1 c-border-r pl20">{{patientInfo.idCard}}</span>
					<span class="fl w-20-1 c-border-r pl20 c-999">手机号</span>
					<span class="fl w-30-1 pl20">xxx</span>
					<span class="fl w-30-1 pl20">{{patientInfo.mobile}}</span>
				</li>
				<li class="c-border-b clearfix">
					<span class="fl w-20-1 c-border-r pl20 c-999">医保卡号</span>
					<span class="fl w-30-1 c-border-r pl20">xxx</span>
					<span class="fl w-30-1 c-border-r pl20">{{patientInfo.jtSign.ssc}}</span>
					<span class="fl w-20-1 c-border-r pl20 c-999">医疗保险号</span>
					<span class="fl w-30-1 pl20">xxx</span>
					<span class="fl w-30-1 pl20">{{patientInfo.medicareNumber}}</span>
				</li>
				<li class="c-border-b clearfix">
					<span class="fl w-20-1 c-border-r pl20 c-999">所属居委会</span>
					<span class="fl w-80-1 pl20">xxx</span>
					<span class="fl w-80-1 pl20">{{patientInfo.countryName}}</span>
				</li>
				<li class="c-border-b clearfix">
					<span class="fl w-20-1 c-border-r pl20 c-999">详细地址</span>
					<span class="fl w-80-1 pl20">xxx</span>
					<span class="fl w-80-1 pl20">{{patientInfo.address ? patientInfo.address : ""}}</span>
				</li>
			</ul>
			<h3>签约信息</h3>
			<ul class="m0 p0 lh40 c-border-t c-border-r c-border-l c-t-left c-333">
			<ul class="m0 p0 mb20 lh40 c-border-t c-border-r c-border-l c-t-left c-333">
				<li class="c-border-b clearfix">
					<span class="fl w-20-1 c-border-r pl20 c-999">签约团队</span>
					<span class="fl w-30-1 c-border-r pl20">xxx</span>
					<span class="fl w-20-1 c-border-r pl20 c-999">服务类型</span>
					<span class="fl w-30-1 pl20">xxx</span>
				</li>
				<li class="c-border-b clearfix">
					<span class="fl w-20-1 c-border-r pl20 c-999">全科医生</span>
					<span class="fl w-30-1 c-border-r pl20">xxx</span>
					<span class="fl w-20-1 c-border-r pl20 c-999">居民标签</span>
					<span class="fl w-30-1 pl20">xxx</span>
				</li>
				<li class="c-border-b clearfix">
					<span class="fl w-20-1 c-border-r pl20 c-999">所属居委会</span>
					<span class="fl w-80-1 pl20">xxx</span>
				</li>
				<li class="c-border-b clearfix">
					<span class="fl w-20-1 c-border-r pl20 c-999">详细地址</span>
					<span class="fl w-80-1 pl20">xxx</span>
					<div class="fl w-50-1">
						<div class="m0 c-border-b clearfix">
							<span class="fl w-40 c-border-r pl20 c-999">签约团队</span>
							<div class="c-position-r fl w-60-1 c-border-r">
								<p class="pl20 w-100 set-bg" @click="selectStatus(1)">{{signInfo.adminTeamCode ? showTeamName(signInfo.adminTeamCode) : "请选择签约团队"}}</p>
								<ul class="pull-list m0 p0 c-border-l c-border-r c-border-b" v-if="isShowList1">
			                        <li class="cur-pit c-999" v-for="(team, index) in teamList" :key="index" @click="selectLi(1, team)">{{team.name}}(已签约{{team.signCount}}人)</li>
			                    </ul>
							</div>
						</div>
						<p class="m0 c-border-b clearfix">
							<span class="fl w-40 c-border-r pl20 c-999">全科医生</span>
							<span class="fl w-60-1 c-border-r pl20">{{patientInfo.jtSign.doctorName}}</span>
						</p>
						<div class="m0 c-border-b clearfix">
							<span class="fl w-40 c-border-r pl20 c-999">健康管理师</span>
							<div class="c-position-r fl w-60-1 c-border-r">
								<p class="pl20 w-100 set-bg" @click="selectStatus(2)">{{signInfo.healthDoctorName ? signInfo.healthDoctorName : "请选择健康管理师"}}</p>
								<ul class="pull-list m0 p0 c-border-l c-border-r c-border-b" v-if="isShowList2">
			                        <li class="cur-pit c-999" v-for="(member, index) in memberList" :key="index" @click="selectLi(2, member)">{{member.name}}</li>
			                    </ul>
							</div>
						</div>
						<div class="m0 clearfix">
							<span class="fl w-40 c-border-r pl20 c-999">政府补贴</span>
							<div class="c-position-r fl w-60-1 c-border-r">
								<p class="pl20 w-100 set-bg" @click="selectStatus(3)">{{signInfo.expenses ? showExpensesName(signInfo.expenses) : "请选择健康管理师"}}</p>
								<ul class="pull-list m0 p0 c-border-l c-border-r c-border-b" v-if="isShowList3">
			                        <li class="cur-pit c-999" v-for="(dict, index) in dictList" :key="index" @click="selectLi(3, dict)">{{dict.value}}</li>
			                    </ul>
							</div>
						</div>
					</div>
					<div class="fl w-50-1">
						<div class="clearfix c-border-b">
							<div class="fl w-40 c-border-r c-999">
								<p class="m0 pl20 c-border-b">服务类型</p>
								<p class="m0 pl20">居民标签</p>
							</div>
							<div class="fl w-60-1 right-arrow">
								<p class="m0 pl20">{{showTit4}}</p>
								<p class="m0 pl20">{{showTit5}}</p>
							</div>
						</div>
						<div class="lh80 clearfix">
							<span class="fl w-40 c-border-r pl20 c-999">已上传凭证</span>
							<div class="fl w-60-1 ptb10 pl20">
								<img class="fl h60" src="../../../images/d-default.png" alt="凭证" />
							</div>
						</div>
					</div>
				</li>
			</ul>
			<div class="c-t-center pt20">
				<span class="btn btn-red plr20" @click="refuse()">拒绝签约</span>
				<span class="btn btn-blue plr20 ml30" @click="sign(1)">同意签约</span>
			</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="../../../plugins/layer/layer.min.js"></script>
        <script src="../../../js/bootstrap.min.js"></script>
        <script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../../api/http-request.js" type="text/javascript"></script>
		<script src="../../../api/sign_api.js" type="text/javascript"></script>
		<script src="../js/sign_handle.js" type="text/javascript"></script>
	</body>
</html>

+ 4 - 3
app/sign/html/sign_manage.html

@ -186,7 +186,7 @@
							status: vm.statusCode, //处理方式(1待签约 5待缴费 3已签约)
							page: vm.page,
							pageSize: 10,
							keyword: vm.keyword
							patientInfo: vm.keyword
						}
						var loadding = layer.load(0, {shade: false});
						signAPI.signList(params).then(function(res) {
@ -224,6 +224,7 @@
			        	this.signList();
			        },
			        handle: function(list) {
			        	var status = list.renewFlag == 1 || list.renewFlag == 2 ? 1 : 0;
			        	layer.open({
							type: 2,
							//				  offset: ['100px'], //右下角弹出
@ -231,11 +232,11 @@
							shade: 0.5,
							title: '签约申请处理',
							fixed: true, //不固定
							maxmin: true,
							maxmin: false,
							closeBtn: 1,
							shift: 5,
							shadeClose: false, //点击遮罩关闭层
							content: "sign_handle.html?patientCode="+list.patientCode+'&signCode='+list.code
							content: "sign_handle.html?patientCode="+list.patientCode+'&signCode='+list.code + '&msgId=' + list.id + '&status=' + status
						});
			        },
			        looking: function(list) {},

+ 276 - 0
app/sign/js/sign_handle.js

@ -0,0 +1,276 @@
var httpData=GetRequest(),
	doctorInfo = JSON.parse(window.localStorage.getItem('wlyyAgent'));
var refuseReason = null;
function showSuccessMessage(msg) {
	layer.msg(msg, {
		icon: 1
	})
}
function showErrorMessage(msg) {
	layer.msg(msg, {
		icon: 5
	})
}
function showWarningMessage(msg) {
	layer.msg(msg, {
		icon: 2
	})
}
function showInfoMessage(msg) {
	layer.msg(msg, {
		icon: 6
	})
}
function getReason(ele) {
	if(ele.hasClass("active")) {
		ele.removeClass("active")
		refuseReason = null
		return false;
	}
	ele.addClass("active").siblings().removeClass("active");
	refuseReason = ele.html();
}
new Vue({
    el: "#app",
    data: {
    	isShowList1: false,
    	isShowList2: false,
    	isShowList3: false,
    	showTit3: "请选择补贴类型",
    	showTit4: "请选择服务类型",
    	showTit5: "请选择居民标签",
    	patientInfo: null,
    	teamList: null,
    	memberList: null,
    	dictList: null,
    	signInfo: {
            signType: 1,
            majorDoctor: null,
            majorDoctorName: null,
            healthLabel: null,
            customLabel: null,
            disease: null,
            patientIDcard: null, // 必填
            adminTeamCode: null,
            msgid: httpData.msgId, // 消息id(必填)
            patient: httpData.patientCode,
            healthDoctor: null,
            healthDoctorName: null,
            type: 1,
            expenses: null,
            group: null,
            //添加服务类型数据
            sevId: null,
            // 拒绝参数
//		                adminTeamCode:0,
//		                type: 2,
       		refuseReason: null
        },
    },
    mounted: function() {
    	if (httpData.status == 0) {
    		this.signing()
    	} else {
    		this.signOuttime();
    	}
    	this.getDictByDictName();
    	this.teamLimit();
    },
    methods: {
    	signing: function() {
    		var vm = this,
    			loadding = layer.load(0, {shade: false}),
    			params = {
    				patient: httpData.patientCode
    			}
			signAPI.signing(params).then(function(res) {
				layer.close(loadding)
				if(res.status == 200) {
					vm.patientInfo = res.data
				} else {
					showErrorMessage(res.msg);
				}
			})
    	},
    	signOuttime: function() {
    		var vm = this,
    			loadding = layer.load(0, {shade: false}),
    			params = {
    				patient: httpData.patientCode
    			}
			signAPI.signOuttime(params).then(function(res) {
				layer.close(loadding)
				if(res.status == 200) {
					vm.patientInfo = res.data
					vm.signInfo.adminTeamCode = vm.patientInfo.jtSign.adminTeamId
					vm.signInfo.healthDoctorName = vm.patientInfo.jtSign.doctorHealthName
					vm.signInfo.healthDoctor = vm.patientInfo.jtSign.doctorHealth
					vm.signInfo.expenses = vm.patientInfo.jtSign.expensesType
					vm.teamMember()
				} else {
					showErrorMessage(res.msg);
				}
			})
    	},
    	getDictByDictName: function() {
    		var vm =this,
    			loadding = layer.load(0, {shade: false}),
    			params = {
    				name: "SIGN_EXPENSES"
    			}
			signAPI.getDictByDictName(params).then(function(res) {
				layer.close(loadding)
				if(res.status == 200) {
					vm.dictList = res.list
				} else {
					showErrorMessage(res.msg);
				}
			})
    	},
    	teamLimit: function() {
    		var vm = this,
    			loadding = layer.load(0, {shade: false}),
    			params = {
    				doctorId: doctorInfo.uid
    			}
			signAPI.teamLimit(params).then(function(res) {
				layer.close(loadding)
				if(res.status == 200) {
					vm.teamList = res.data
				} else {
					showErrorMessage(res.msg);
				}
			})
    	},
    	teamMember: function() {
    		var vm = this,
    			loadding = layer.load(0, {shade: false}),
    			params = {
    				teamId: vm.signInfo.adminTeamCode
    			}
			signAPI.teamMember(params).then(function(res) {
				layer.close(loadding)
				vm.memberList = []
				if(res.status == 200) {
					$.each(res.data, function(i, v) {
		                if(v.level == 3 || v.level == 2)
		                    vm.memberList.push(v);
		            });
				} else {
					showErrorMessage(res.msg);
				}
			})
   		},
    	selectStatus: function(num) {
    		if(num == 1) {
    			this.isShowList2 = false;
    			this.isShowList3 = false;
    			this.isShowList1 = !this.isShowList1;
    		} else if (num == 2) {
    			if(!this.signInfo.adminTeamCode) {
    				showWarningMessage("请先选择签约团队")
    			}
    			this.isShowList1 = false;
    			this.isShowList3 = false;
    			this.isShowList2 = !this.isShowList2;
    		} else {
    			this.isShowList1 = false;
    			this.isShowList2 = false;
    			this.isShowList3 = !this.isShowList3;
    		}
            
        },
        selectLi: function(num, data) {
        	if(num == 1) {
        		this.isShowList1 = false;
	            this.signInfo.adminTeamCode = data.id;
	            if(!this.memberList) {
	            	this.teamMember()
	            }
        	}
        	if(num == 2) {
        		this.isShowList2 = false;
	            this.signInfo.healthDoctorName = data.name
	            this.signInfo.healthDoctor = data.code
        	}
			if(num == 3) {
				this.isShowList3 = false;
				this.signInfo.expenses = data.code;
			}
        },
        showTeamName: function(teamCode) {
        	var teamName;
        	if(!this.teamList) {
        		return "请选择签约团队";
        	}
        	for(var i = 0, len = this.teamList.length; i < len; i++) {
        		if(teamCode == this.teamList[i].id) {
        			teamName = this.teamList[i].name;
        		}
        	}
        	return teamName
        },
        showExpensesName: function(code) {
        	var expensesName;
        	if(!this.dictList) {
        		return "请选择补贴类型";
        	}
        	for(var i = 0, len = this.dictList.length; i < len; i++) {
        		if(code == this.dictList[i].code) {
        			expensesName = this.dictList[i].value;
        		}
        	}
        	return expensesName
        },
        refuse: function() {
        	var vm = this;
        	layer.open({
				type: 1,
				area: ['400px', '300px'],
				shade: 0.5,
				title: '拒绝签约原因',
				shift: 2,
				shadeClose: false, //点击遮罩关闭层
				content: '<div class="p20 pb0"><div class="reason_list clearfix"><span class="fl mr10 mb20" onclick="getReason($(this))">居民信息填写不详</span><span class="fl mr10 mb20" onclick="getReason($(this))">签约人数已满</span><span class="fl mb20" onclick="getReason($(this))">家庭医生变更</span></div><textarea id="reason" maxLength="200" placeholder="可选择填写其他拒签原因(限200字以内)"></textarea></div>',
				btn: ['提 交', '取 消'],
				yes:function(index, layero) {
					if(!refuseReason) {
						if(!$("#reason").val()) {
							showWarningMessage("请选择或输入拒绝理由!");
							layer.close(index);
							return false
						}
						vm.signInfo.refuseReason = $("#reason").val()
						vm.signInfo.adminTeamCode = 0
						vm.signInfo.type = 2
						vm.sign()
					}
					layer.close(index);
				},
				success: function(layero){
					layero.find('.layui-layer-btn').css('text-align', 'center')
				}
			});
        },
        sign: function() {// type:1签约 2拒签
        	var vm = this,
    			loadding = layer.load(0, {shade: false});
			signAPI.sign(vm.signInfo).then(function(res) {
				layer.close(loadding)
				if(res.status == 200) {
					
				} else {
					showErrorMessage(res.msg);
				}
			})
        }
    }
})

BIN
images/tiaozhuan_icon.png


BIN
images/xiazhan_icon.png