<template>
	<view>
		  <view class="container book-main">
		    <view class="form-box">
		      <view class="form-box-label">选择科室</view>
		      <view class="form-box-content" @click="selectDep">
		        <view class="form-box-content-text" v-if="!dep.title">请选择</view>
				<view class="form-box-content-text" v-if="dep.title">{{dep.title}}</view>
		        <image src="../../images/xiangyou-xiao.png"></image>
		      </view>
		    </view>
		    <view class="form-box">
		      <view class="form-box-label">联系人 <text class="text-red">*</text></view>
		      <view class="form-box-content">
		        <input type="text" v-model="contact" placeholder="请填写" />
		      </view>
		    </view>
			<view class="form-box">
			  <view class="form-box-label">联系手机号 <text class="text-red">*</text></view>
			  <view class="form-box-content">
			    <input type="tel" v-model="phone" placeholder="请填写" />
			  </view>
			</view>
			
			<view class="form-box">
			  <view class="form-box-label">选择服务 <text class="text-red">*</text></view>
			  <view class="form-box-content" @click="selectCate">
			    <view class="form-box-content-text" v-if="!cate.title">请选择</view>
				<view class="form-box-content-text" v-if="cate.title">{{cate.title}}</view>
			    <image src="../../images/xiangyou-xiao.png"></image>
			  </view>
			</view>
		    
		    <view class="form-box form-box2">
		      <view class="form-box-label">被陪护人信息</view>
			  <view class="form-box-sub">
			    <view class="form-box-label">姓名<text class="text-red">*</text></view>
			    <view class="form-box-content">
			      <input type="text" placeholder="请填写" v-model="name" />
			    </view>
			  </view>
			  <view class="form-box-sub">
			    <view class="form-box-label">性别<text class="text-red">*</text></view>
			    <view class="form-box-content" @click="selectGender">
			      <view class="form-box-content-text">{{gender.title}}</view>
				  <image src="../../images/xiangyou-xiao.png"></image>
			    </view>
			  </view>
			  <view class="form-box-sub">
			    <view class="form-box-label">年龄<text class="text-red">*</text></view>
			    <view class="form-box-content">
			      <input type="number" placeholder="请填写"  v-model="age" />
			    </view>
			  </view>
			  <view class="form-box-sub">
			    <view class="form-box-label">床号<text class="text-red">*</text></view>
			    <view class="form-box-content">
			      <input type="text" placeholder="请填写" v-model="bed" />
			    </view>
			  </view>
		      <view class="form-box-sub">
		        <view class="form-box-label">所患疾病<text class="text-red">*</text></view>
		        <view class="form-box-content">
		          <input type="text" placeholder="请填写" v-model="ill" />
		        </view>
		      </view>
		    </view>
			
			<view class="form-box">
			  <view class="form-box-label">预约时间<text class="text-red">*</text></view>
			  <view class="form-box-content">
				<view class="form-box-content" @click="selectStart">
				  <view class="form-box-content-text" v-if="!start">请选择</view>
				  <view class="form-box-content-text" v-if="start">{{start}}</view>
				  <image src="../../images/xiangyou-xiao.png"></image>
				</view>
			  </view>
			</view>
			
			<view class="form-box">
			  <view class="form-box-label">是否首次下单</view>
			  <view class="form-box-content">
				   <radio-group @change="radioChange">
					  <label class="radio" style="margin-right: 20rpx;">
						 <radio value="1" :checked="isFirst ==1" />是  
					   </label>
					   <label class="radio">
						  <radio value="2" :checked="isFirst ==2"/>否
						</label>
					 </radio-group>
			  </view>
			</view>
			
			<view class="form-box form-box2">
			  <view class="form-box-label">备注</view>
			  <view class="form-box-textarea">
			    <textarea style="height:120rpx;" v-model="remark" placeholder="请填写" />
			  </view>
			</view>
		
		    <view class="book-btn" @click="saveBtn()">提交</view>
		  </view>
		  
		  <view class="protocol-box" v-if="showProtocol">
			  <view v-html="protocol"></view>
			  <view class="protocol-btn" @click="qrProtocolBtn()">同 意</view>
		  </view>
		  
			<view class="sign-box" v-if="showSign">
				<spsignboard
				  ref="signBoardRef"
				  sid="sign-board"
				  bgColor="#ffffff"
				  :showMark="false"
				  :mark-text="markText"
				  :horizontal="false"
				  :penStyle="{ lineWidth: 4, color: '#000000' }"
				  :expFile="{ fileType: 'jpg', quality: 0.7 }"
				  @cancel="onCancel()"
				  @confirm="onConfirmBoard()"
				  @reset="reset"
				  @firstTouchStart="firstTouchStart"
				></spsignboard>
		      
			  <!-- <view class="sign-up-btn">上传签名</view> -->
			</view>
		  
		  <cpicker v-if="genders.length > 0" :list="genders" :show.sync="genderShow" :did="gender.id" @confirm="selectedGenderVal"></cpicker>
		  <cpicker v-if="deps.length > 0" :list="deps" :show.sync="depShow" :did="dep.id" @confirm="selectedDepVal"></cpicker>
			<w-picker
				:visible.sync="startVisible"
				mode="date" 
				startYear="2021" 
				endYear="5000"
				themeColor="#006489"
				:current="true"
				fields="minute"
				@confirm="onConfirm($event,'date')"
				:disabled-after="false"
				ref="date" 
			></w-picker>
			<cpicker v-if="filterCates.length > 0" :list="filterCates" :show.sync="cateShow" :did="cate.id" @confirm="selectedCateVal"></cpicker>
	</view>
</template>

<script>
	var app = getApp();
	import cpicker from "../../components/cpicker/cpicker.vue";
	import wpicker from "../../components/w-picker/w-picker.vue";
	import spsignboard from "../../components/sp-sign-board/components/sp-sign-board/sp-sign-board.vue";
	export default {
		components: {
			cpicker,
			wpicker,
			spsignboard
		},
		data() {
			return {
				info:"",
				signBase64: "",
				signTempimg: "",
				markText: "陪护",
				showProtocol: false,
				isProtocol: false,
				protocol: "", // 协议内容
				showSign: false,
				isSign: false,
				signPath: "", // 签名上传路径
				flag: false,
				start:'',
				startVisible:false,
				contact: '',
				name: '',
				phone: '',
				ill: '',
				age: '',
				bed: '',
				gender: {
					id: 1,
					title: '男'
				},
				genderShow: false,
				genders:[{"id":1,"title":"男"},{"id":2,"title":"女"}],
				dep: {
					id: 0,
					title: ''
				},
				depShow: false,
				deps:[],
				remark: '',
				cate: {
					id: 0,
					title: ''
				},
				cates:[],
				cateShow: false,
				filterCates:[],
				wx: null,
				isFirst:1
			}
		},
		onLoad(option) {
			var that = this;
			that.info = JSON.parse(option.data);
			var orgId = this.getUrlCode('orgId');
			if(orgId){
				uni.setStorageSync(app.globalData.storagePre+'orgId',orgId);
				app.globalData.userinfo.orgId = orgId;
			}else{
				orgId = uni.getStorageSync(app.globalData.storagePre+'orgId');
				if(orgId){
					app.globalData.userinfo.orgId = orgId;
				}else{
					uni.showToast({
						title: '参数错误',
						icon: 'none',
						duration: 2000
					})
				}
			}
			
			if (this.$wechat && this.$wechat.isWechat()) {//获取定位经纬度
				this.$wechat.getWx(function (res) {
					that.wx = res;
				});
			}
			
			// 生成水印内容
			this.refreshMark()
			this.setData()
		},
		onShow() {
			var that = this;
			app.ajaxReadyCallback = res => {  //各个接口统一回调方法
				var apiname = res.data.apiname;
				if(apiname == 'dep'){
					that.deps = res.data.data;
				}else if(apiname == 'cates'){
					that.cates = res.data.data;
					var filterCates =  res.data.data.filter(item => {
						return (item.deps || []).includes(this.info.depId.toString());
					});
					var filterCates2 = this.cates.filter(item => {
					  return (item.deps.length == 0);
					});
				that.filterCates = filterCates.length > 0 ? filterCates : filterCates2
				}else if(apiname == 'protocol'){
					that.protocol = res.data.data.content;
				} else if(apiname == 'order'){
					var payId = res.data.data.payId;
					if(payId <= 0 || that.isFirst == 2){
						uni.navigateTo({
						    url: '/pages/index/success'
						});
					}else{
						that.getPayParam(payId);
					}
				}else if(apiname == 'pay'){
					if(that.wx){
						that.wx.chooseWXPay({
							timestamp: res.data.data.timestamp,
							nonceStr: res.data.data.nonceStr,
							package: res.data.data.package,
							signType: res.data.data.signType,
							paySign: res.data.data.paySign,
							success: function (r) {
								// 支付成功后的回调函数
								if (r.errMsg == "chooseWXPay:ok") {
									uni.navigateTo({
									    url: '/pages/index/success'
									});
								} else {
									uni.navigateTo({
									    url: '/pages/index/fail'
									});
								}
							},
							cancel: function(r) {},
							fail:function(r){
								// uni.showToast({
								// 	title: '支付失败',
								// 	icon: 'none',
								// 	duration: 2000
								// })
								uni.navigateTo({
								    url: '/pages/index/fail'
								});
							}
						});
					}else{
						// uni.showToast({
						// 	title: '支付调用失败，请刷新重试',
						// 	icon: 'none',
						// 	duration: 2000
						// })
						uni.navigateTo({
						    url: '/pages/index/fail'
						});
					}
				}
			}
			
			this.getDep();
			this.getCate();
			this.getProtocol();
			
			// 监听一次
			uni.$on('getSignImg', (e) => {
			  // 多签名场景下可根据 sid 区分不同签名
			  if (e.sid == 'sign-board') {
			    that.signBase64 = e.base64
			    that.signTempimg = e.path
				that.isSign = true;
				this.showSign = false;
				this.saveBtn();
				
			  }
			  // 一定注意不能确认签字完成后立马关闭弹窗，否则签字板会销毁，无法获取签名。需要等签名正确获取到之后再关闭弹窗
			  // this.close()
			})
		
		},
		methods: {
			getUrlCode (name) {
				return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ''])[1].replace(/\+/g, '%20')) || null
			},
			selectGender(){
				this.genderShow = true;
			},
			selectedGenderVal(obj){
				this.gender = obj;
			},
			selectDep(){
				this.depShow = true;
			},
			selectedDepVal(obj){
				this.dep = obj;
				this.cate = {
					id: 0,
					title: ''
				}
			    this.filterCates = this.cates.filter(item => {
				  return (item.deps || []).includes(obj.id.toString());
				});
				if(this.filterCates.length <= 0){
					 this.filterCates = this.cates.filter(item => {
					   return (item.deps.length == 0);
					 });
				}
			},
			selectCate(){
				if(this.dep.id == 0){
					uni.showToast({
						title: '请先选择科室',
						icon: 'none',
						duration: 2000
					})
					return
				}
				this.cateShow = true;
			},
			selectedCateVal(obj){
				this.cate = obj;
			},
			getProtocol(){
				app.ajax({
					url: app.globalData.serverUrl + 'common/phprotocol',
					type: 'POST',
					apiname: 'protocol',
				});
			},
			getDep(){
				app.ajax({
					url: app.globalData.serverUrl + 'common/dep',
					type: 'POST',
					apiname: 'dep',
				});
			},
			getCate(){
				app.ajax({
					url: app.globalData.serverUrl + 'Worker/cates',
					type: 'POST',
					apiname: 'cates',
				});
			},
			getPayParam(payId){
				app.ajax({
					url: app.globalData.serverUrl + 'PhOrders/pay',
					type: 'POST',
					apiname: 'pay',
					data: {
						payId: payId
					}
				});
			},
			onConfirm(e,type){
				this.start = e.result;
			},
			onCancel(){
				this.showSign = false;
			},
			onConfirmBoard(){
				this.showSign = false;
				this.saveBtn();
			},
			selectStart(){
				this.startVisible = true;
			},
			
			qrProtocolBtn(){
				this.showProtocol = false;
				this.isProtocol = true;
				this.saveBtn();
			},
			
			refreshMark() {
			  // const currentDate = new Date()
			  // const year = currentDate.getFullYear()
			  // const month = String(currentDate.getMonth() + 1).padStart(2, '0')
			  // const day = String(currentDate.getDate()).padStart(2, '0')
			  // const hours = String(currentDate.getHours()).padStart(2, '0')
			  // const minutes = String(currentDate.getMinutes()).padStart(2, '0')
			  // const seconds = String(currentDate.getSeconds()).padStart(2, '0')
			
			  this.markText = ["陪护"];
			},
			firstTouchStart() {
			  // 在第一次开始触碰时，更新一下时间水印，防止滞留时间太长造成时间误差（非必要）
			  this.refreshMark()
			  // 手动调用组件内绘制水印方法重新绘制
			  this.$refs.signBoardRef.drawMark(this.markText)
			},
			reset() {
			  this.refreshMark()
			},
			radioChange(e) {
				this.isFirst = e.detail.value;
			},
			setData(){
				if(this.info.gender == 1){
					var gender = {
						id: 1,
						title: '男'
					};
				}else{
					var gender = {
						id: 2,
						title: '女'
					};
				};
				const originalTime = this.info.start;
				const start = originalTime.slice(0, -3);
				this.contact = this.info.contact,
				this.phone = this.info.phone,
				this.name = this.info.name,
				this.gender = gender,
				this.age = this.info.age,
				this.bed = this.info.bed,
				this.ill = this.info.ill,
				this.start = start,
				this.remark = this.info.remark
				this.dep = {
					id:this.info.depId,
					title:this.info.depName
				}
				this.cate = {
					id:this.info.cateId,
					title:this.info.cateName2
				}
				this.isFirst = this.info.serviceMoney > 0 ? 1 : 2
			},
			saveBtn(){
				if(!this.contact){
					uni.showToast({
						title: '请输入联系人',
						icon: 'none',
						duration: 2000
					})
					return;
				}
				if(!this.phone){
					uni.showToast({
						title: '请输入手机号',
						icon: 'none',
						duration: 2000
					})
					return;
				}
				if(!this.cate || this.cate.id <= 0){
					uni.showToast({
						title: '请输入选择服务',
						icon: 'none',
						duration: 2000
					})
					return;
				}
				if(!this.name){
					uni.showToast({
						title: '请输入姓名',
						icon: 'none',
						duration: 2000
					})
					return;
				}
				if(!this.age){
					uni.showToast({
						title: '请输入年龄',
						icon: 'none',
						duration: 2000
					})
					return;
				}
				if(!this.bed){
					uni.showToast({
						title: '请输入床号',
						icon: 'none',
						duration: 2000
					})
					return;
				}
				if(!this.ill){
					uni.showToast({
						title: '请输入所患疾病',
						icon: 'none',
						duration: 2000
					})
					return;
				}
				if(!this.start){
					uni.showToast({
						title: '请选择预约时间',
						icon: 'none',
						duration: 2000
					})
					return;
				}
				if(!this.isProtocol){
					this.showProtocol = true;
					return false;
				}
				if(!this.isSign || !this.signBase64){
					this.showSign = true;
					return false;
				}
				let param = {
					contact: this.contact,
					phone: this.phone,
					name: this.name,
					gender: this.gender.id,
					age: this.age,
					bed: this.bed,
					ill: this.ill,
					start: this.start,
					remark: this.remark,
					depId: this.dep.id,
					cateId: this.cate.id,
					sign: this.signBase64,
					isFirst: this.isFirst
				}
				app.ajax({
					url: app.globalData.serverUrl + 'worker/order',
					type: 'POST',
					apiname: 'order',
					data: param
				});
			}
		}
	}
</script>

<style lang="scss" scoped>
	.navbg{
	    width: 100%;
	    height: 300rpx;
	}
	.book-main{
	    width: 710rpx;
	    // position: absolute;
	    // z-index: 10;
	    // top: 300rpx;
	    // left: 0;
	    // bottom: 0;
	    // overflow: auto;
		overflow-y: auto;
		overflow-x: hidden;
	}
	
	
	.book-btn{
	    width: 710rpx;
	    height: 90rpx;
	    line-height: 90rpx;
	    background-color: var(--themeColor);
	    color: #ffffff;
	    font-size: 34rpx;
	    font-weight: bold;
	    text-align: center;
	    border-radius: 10rpx;
	}
	.protocol-box{
		position: fixed;
		z-index: 10000;
		top: 0;
		left: 0;
		right: 0;
		bottom: 0;
		background-color: #ffffff;
		padding: 20rpx;
		overflow: auto;
	}
	
	.protocol-btn{
		position: fixed;
		z-index: 10001;
		left: 20rpx;
		right: 20rpx;
		bottom: 10rpx;
		background-color: var(--themeColor);
		height: 90rpx;
		line-height: 90rpx;
		color: #ffffff;
		font-size: 34rpx;
		font-weight: bold;
		text-align: center;
		border-radius: 10rpx;
	}
	
	.sign-box{
		position: fixed;
		z-index: 100000;
		top: 0;
		left: 0;
		right: 0;
		bottom: 0;
		background-color: #ffffff;
		padding: 20rpx;
	}
	.sign-canvas{
		width: 750rpx;
		height: 400rpx;
	}
	.sign-up-btn{
		position: fixed;
		z-index: 100001;
		left: 20rpx;
		right: 20rpx;
		bottom: 10rpx;
		background-color: var(--themeColor);
		height: 90rpx;
		line-height: 90rpx;
		color: #ffffff;
		font-size: 34rpx;
		font-weight: bold;
		text-align: center;
		border-radius: 10rpx;
	}
	
	.protocol-box image{
		max-width: 100%;
	}
	
</style>
