<template>
	<view class="content">
		<view class="team" v-if="!is_over">
			<image class="top-image" :src="list.img"></image>
			<view class="box">
				<jyf-parser :html="description" ref="article"></jyf-parser>
			</view>
			<view class="top-title canten">报名</view>
			<view class="sign-tip">完成信息填写,即可参加红十字会救护员培训</view>
			<view class="form-box" v-if="type == 0">
				<view class="label">姓名<text>*</text></view>
				<input type="text" v-model="name" placeholder="请填写姓名" />
				<view class="label">联系方式<text>*</text></view>
				<input type="number" v-model="phone" placeholder="请输入联系方式" />
				<view class="label">工作单位(选填)</view>
				<input type="text" v-model="work" placeholder="请输入工作单位" />
				<view class="label">地址<text>*</text></view>
				<input type="text" v-model="addr" placeholder="请输入联系地址" />
			</view>
			<view class="form-box" v-if="type == 1">
				<view class="label">企业名称<text>*</text></view>
				<input type="text" v-model="company" placeholder="请填写企业名称" />
				<view class="label">企业地址<text>*</text></view>
				<input type="text" v-model="address" placeholder="请填写企业地址" />
				<view class="label">负责人姓名<text>*</text></view>
				<input type="text" v-model="companyName" placeholder="请填写负责人姓名" />
				<view class="label">联系方式<text>*</text></view>
				<input type="number" v-model="companyphone" placeholder="请输入联系方式" />
				<view class="label">参加培训人数<text>*</text></view>
				<input type="number" v-model="num" placeholder="请输入参加培训人数" />
			</view>
			<view class="top-title">报名</view>
			<view class="text-box">
				<view class="text">请参训学员在培训当天携带身份证复印件1张,一寸证件照2张。</view>
				<view class="text"> 报名咨询电话:027-87012677</view>
			</view>
			<view class="submit" @click="submit">立即报名</view>
		</view>
		<view class="certificates" v-if='is_over'>
			<canvas v-if="showcanvas" id="qrShareBox" canvas-id="qrShareBox" class="tki-qrcode-canvas" />
			<image class="imgbox" v-else :src="img" mode=" aspectFill"></image>
		</view>

	</view>
</template>
<script>
import { get_training, sign_training, detail_training} from '@/api/train.js';
import jyfParser from "@/components/jyf-parser/jyf-parser";
import {
		weixindata,
		weixinlocation
	} from '@/utils/wxAuthorized.js';
	import {
		userinfo
	} from '@/api/user.js';
	import {
		mapState,
		mapMutations
	} from 'vuex';
export default {
	components: {
	   jyfParser
	 },
	data() {
		return {
			is_over:1,
			type:'',//0是个人报名,1是团体报名
			id:'',
			description:'',
			list:'',
			//个人
			name:'',
			phone:'',
			addr:'',
			work:'',
			//团队
			company:'',
			address:'',
			companyName:'',
			companyphone:'',
			num:'',
			people:'武汉市江夏区红十字会',
			signDate:'',
			loading: true, //是否载入图片中
			size: 180,
			ratio: 1, //页面比例用于计算
			canHeight: '',
			canWeidth: '',
			url:'',
			img:'',
			showcanvas:true,
			uid:''
		};
	},
	onLoad(option) {
		this.type = option.type;
		this.id = option.id;
		if(option.uid){
			this.uid = option.uid;
		}else{
				this.uid = this.userInfo.uid;
		}
		this.IndexShare();
		this.loadData();
		detail_training({
			id:this.id,
			uid:this.uid
		}).then(({data}) => {
			console.log(999,data)
			this.name = data.name
			this.signDate = data.add_time
			this.is_over = data.is_over
		console.log(3,data.add_time)
		let obj = this;
		let name = obj.name
		let signDate = obj.signDate
			
		function getRecTime(timestamp, fmt) {
			let d = new Date(timestamp * 1000)
				// f = fmt || 'yyyy/MM/dd', 
			let	f = fmt || 'yyyy.MM.dd'
			let	o = {
					'M+': d.getMonth() + 1, //月份 
					'd+': d.getDate(), //日 
					'h+': d.getHours(), //小时 
					'm+': d.getMinutes(), //分 
					's+': d.getSeconds(), //秒 
					'q+': Math.floor((d.getMonth() + 3) / 3), //季度 
					'S': d.getMilliseconds() //毫秒 
				};
			if (/(y+)/.test(f)) {
				f = f.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));
			}
			for (let k in o) {
				if (new RegExp('(' + k + ')').test(f)) {
					f = f.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
				}
			}
			return f;
			console.log(f)
		}
		let m = getRecTime(signDate)
		let query = uni.createSelectorQuery();
		console.log("---query---",query)
		// this.loadData();
		// 获取页面比例
		query
			.select('.certificates')
			.fields({
					size: true
				},
				e => {
					console.log('获取页面比例',e)
					// 保存比例
					this.ratio = e.width / 750;
				}
			)
			.exec();
		// 获取画布宽高信息
		query.select('#qrShareBox').fields(
			{size: true},e => {
				console.log('获取画布宽高信息',e)
				obj.canHeight = e.height;
				obj.canWeidth = e.width;
			}).exec();
			console.log('obj.canHeight',obj.canHeight)
			console.log('obj.canWeidth',obj.canWeidth)
		let ctxBg = '/index/static/img/graduation.png'; //画布背景
		let src = '/index/static/icon/erweima.png' // 二维码
		let context = uni.createCanvasContext('qrShareBox');
		// 插入背景图片
		context.drawImage(ctxBg, 0, 0, obj.canWeidth, obj.canHeight);
		console.log('123',obj.ratio)
		const codeSize = obj.size * obj.ratio; //计算二维码大小
		const codeX = ((750 - obj.size) * obj.ratio) / 2; //二维码所在x轴位置
		const codeY = 999 * obj.ratio; //二维码所在y轴位置
		// console.log('二维码大小',codeSize)
		// console.log('二维码所在x轴位置',codeX)
		// console.log('二维码所在y轴位置',codeY)
		const codeBoxColor = '#FFFFFF'; //包裹框颜色
		const codeBoxWidht = 0; //包裹边框宽度
		const codeBoxSize = (codeBoxWidht / 2) * obj.ratio; //计算二维码白色包裹框大小
		const codeBoxX = codeX - codeBoxSize; //包裹框初始X轴
		const codeBoxY = codeY - codeBoxSize; //包裹框初始Y轴
		const codeBoxEnd = codeSize + codeBoxWidht * obj.ratio; //计算包裹框大小
		const fontTop = codeY + codeBoxEnd + (codeBoxWidht + 20) * obj.ratio; //文字距离上边距高度
		const fontSize = 24 * obj.ratio; //文字大小
		const fontText = ''; //文字内容
		const fontLeft = (codeSize - fontSize * fontText.length) / 2 + codeX; //文字左侧距离
		// // 插入文字
		context.setFontSize(32 * obj.ratio)
		// 画横线
		context.moveTo(90 * obj.ratio, 586 * obj.ratio)
		context.lineTo(250 * obj.ratio, 586 * obj.ratio)
		context.stroke();
		
		context.fillText(name, 110 * obj.ratio, 574 * obj.ratio)
		context.fillText('先生/女士', 260 * obj.ratio, 580 * obj.ratio)
		
		context.setFontSize(31 * obj.ratio)
		
		context.fillText('您已完成武汉市江夏区红十字会普及培训', 105 * obj.ratio, 670 * obj.ratio)
		context.fillText('的全部课程,特发此证。', 105 * obj.ratio, 720 * obj.ratio)
		context.setFontSize(22 * obj.ratio)
		context.fillText('签发人:', 100 * obj.ratio, 800 * obj.ratio)
		context.fillText('Siger:', 100 * obj.ratio, 830 * obj.ratio)
		// 画横线
		context.moveTo(180 * obj.ratio, 830 * obj.ratio)
		context.lineTo(460 * obj.ratio, 830 * obj.ratio)
		context.stroke()
		context.fillText('签发日期:', 100 * obj.ratio, 880 * obj.ratio)
		context.fillText('Issuer Date:', 100 * obj.ratio, 910 * obj.ratio)
		context.setFontSize(26 * obj.ratio)
		context.fillText(m, 275 * obj.ratio, 908 * obj.ratio)
		context.fillText('武汉市江夏区红十字会', 200 * obj.ratio, 820 * obj.ratio)
		// 画横线
		context.moveTo(230 * obj.ratio, 915 * obj.ratio)
		context.lineTo(460 * obj.ratio, 915 * obj.ratio)
		context.stroke()
		// context.setFontSize(fontSize);
		// context.fillText(fontText, fontLeft, fontTop);
		
		// 插入边框
		context.beginPath();
		context.setLineJoin('round'); //边框类型
		context.setLineWidth(codeBoxWidht * obj.ratio);
		context.setStrokeStyle(codeBoxColor); //设置包裹框颜色
		context.strokeRect(codeBoxX, codeBoxY, codeBoxEnd, codeBoxEnd);
		context.stroke();
		// 插入二维码
		console.log('插入二维码src',src)
		context.drawImage(src, codeX, codeY, codeSize, codeSize);
		context.draw(false,(e) => {
			uni.canvasToTempFilePath({
			  x: 0,
			  y: 0,
			  width: obj.canWeidth,
			  height: obj.canHeight,
			  destWidth: obj.canWeidth,
			  destHeight: obj.canHeight,
			  canvasId: 'qrShareBox',
			  success: function(res) {
					// uni.showModal({
					// 	title:'zhi1'
					// })
			    // 在H5平台下,tempFilePath 为 base64
					// console.log(res.tempFilePath)
					obj.showcanvas = false;
					obj.img = res.tempFilePath
			  } 
			})
		})
			})
	},
	onReady() {
	
	
	},
	computed: {
		...mapState('user', ['hasLogin', 'userInfo'])
	},
	methods: {
		...mapMutations('user', ['setUserInfo']),
		// 分享
		IndexShare() {
			let obj = this;
			let item = {
				link:  'http://jxred.igxys.com/index/#/pages/train/sign?type=' + obj.type + '&id=' + obj.id + '&uid=' + obj.userInfo.uid,// 分享链接
				imgUrl: '/index/static/img/002.png',
				desc: '结业证书',
				title: '江夏红十字会',
			};
			console.log('分享加',item)
			weixindata(item);
		},
		async loadData() {
			let obj = this;
			console.log('当前is_over',obj.is_over)
			if( obj.is_over == 1 ) {
				let uid = obj.userInfo.uid
				console.log(9090,uid)
			}
			get_training({
				id:obj.id,
				// uid:uid
			}).then(({ data }) => {
				obj.list = data;
				console.log(9988,data)
				if(obj.list.content != null){
					obj.description = obj.list.content.replace(/<img/g,"<img style='max-width:100%;height:auto;'");
				}
			});
		
		},		
		submit(){
			let obj = this;
			let data = {};
			if(obj.type==0){
				if(!obj.name){
					obj.$api.msg('请填写姓名!');
					return;
				}
				if(!obj.phone){
					obj.$api.msg('请输入联系方式!');
					return;
				}
				if(!obj.addr){
					obj.$api.msg('请输入联系方式!');
					return;
				}
				data={
					name:obj.name,
					work:obj.addr,
					phone:obj.phone,
					tid:obj.id,
					type:0
				}
			}
			if(obj.type==1){
				if(!obj.company){
					obj.$api.msg('请填写企业名称!');
					return;
				}
				if(!obj.address){
					obj.$api.msg('请填写企业地址!');
					return;
				}
				if(!obj.companyName){
					obj.$api.msg('请填写负责人姓名!');
					return;
				}
				if(!obj.companyphone){
					obj.$api.msg('请输入联系方式!');
					return;
				}
				if(!obj.num){
					obj.$api.msg('请输入参加培训人数!');
					return;
				}
				data={
					company:obj.company,
					address:obj.address,
					name:obj.companyName,
					phone:obj.companyphone,
					num:obj.num,
					tid:obj.id,
					type:1
				}
			}
			sign_training(data).then(function(e) {
				console.log(data.type)
				let type = data.type
				uni.setStorageSync('type', type)
				obj.$api.msg(e.msg);
				setTimeout(function(){ 
					uni.navigateTo({
						url:'/pages/train/index'
					})
				}, 1000);
			}).catch(e => {
				obj.$api.msg(e.message);
				setTimeout(function(){
					uni.navigateTo({
						url:'/pages/train/index'
					})
				}, 1000);
			});;
			
		},
		getRecTime(timestamp, fmt) {
			let d = new Date(timestamp * 1000),
				// f = fmt || 'yyyy/MM/dd', 
				f = fmt || 'yyyy.MM.dd hh:mm:ss',
				o = {
					'M+': d.getMonth() + 1, //月份 
					'd+': d.getDate(), //日 
					'h+': d.getHours(), //小时 
					'm+': d.getMinutes(), //分 
					's+': d.getSeconds(), //秒 
					'q+': Math.floor((d.getMonth() + 3) / 3), //季度 
					'S': d.getMilliseconds() //毫秒 
				};
			if (/(y+)/.test(f)) {
				f = f.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));
			}
			for (let k in o) {
				if (new RegExp('(' + k + ')').test(f)) {
					f = f.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
				}
			}
			return f;
			console.log(f)
		},
	}
};
</script>

<style lang="scss">
page {
	background: #FFFFFF;
	width: 100%;
	height: 100%;
	.content {
		height: 100%;
	}
}
.box{
	padding: (0vw/7.5) (25vw/7.5);
	width: 100%;
	font-size: (24vw/7.5);
}
.top-image{
	width: 100%;
	height: (300vw/7.5);
}
.top-title{
	width: 100%;
	text-align: center;
	padding: (25vw/7.5) (0vw/7.5);
	font-size: (34vw/7.5);
	border-bottom:(1vw/7.5) dashed #B5B5B5;
}
.canten{
	text-align: center !important;
}
.addr{
	color: #222222;
	font-size: (28vw/7.5);
	padding: (25vw/7.5) (35vw/7.5);
}
.text-box{
	padding: (25vw/7.5) (25vw/7.5);
	padding-bottom: (0vw/7.5) !important;
}
.text{
	color: #222222;
	font-size: (28vw/7.5);
	padding-bottom: (15vw/7.5);
}
.weixin-icon{
	width: 100%;
	text-align: center;
	padding-top: (45vw/7.5);
	image{
		width: (248vw/7.5);
		height: (248vw/7.5);
	}
}
.tip{
	color: #222222;
	font-size: (28vw/7.5);
	width: 100%;
	text-align: center;
	padding-bottom: (50vw/7.5);
}
.sign-tip{
	padding: (25vw/7.5) (0vw/7.5);
	text-align: center;
	color: #222222;
	font-size: (28vw/7.5);
}
.form-box{
	padding: (0vw/7.5) (35vw/7.5);
	.label{
		font-size: (34vw/7.5);
		padding: (25vw/7.5) (0vw/7.5);
		text{
			color: #E62129;
			padding-left: (5vw/7.5);
		}
	}
	input{
		font-size: (28vw/7.5);
		color: #222222;
		border: (2vw/7.5) solid #979797;
		padding: (0vw/7.5) (15vw/7.5);
		border-radius: (15vw/7.5);
		height: (80vw/7.5);
	}
}
.submit{
	width: 70%;
	margin: (0vw/7.5) auto;
	margin-top: (80vw/7.5);
	margin-bottom: (80vw/7.5);
	padding: (25vw/7.5) 0;
	text-align: center;
	background-color: #E62129;
	color: #FFFFFF;
	font-size: (32vw/7.5);
	border-radius: (10vw/7.5);
}
.grey{
	background-color: #9B9B9B !important;
}
.certificates{
	// padding: 24vw/7.5);
	width: 100%;
	height: 100vh;
}
		.tki-qrcode-canvas {
			// width: 700vw/7.5);
			// height: 1245vw/7.5);
			width: (750vw/7.5);
			// padding: 32vw/7.5);
			height: (1350vw/7.5);
			margin: 0 auto;
		}
	.bgimg{
		width: 100%;
		height: 100%;
		image{
			width: 100%;
			height: 100%;
		}
	}
	.box-mian{
		
			width: 100%;
			height: 100%;
			position: absolute;
			padding:(380vw/7.5) (94vw/7.5) (200vw/7.5) (94vw/7.5);
			color: #333;
			left: 0;
			top: 0;
			display: flex;
			flex-direction: column;
			justify-content: center;
			// align-items: center;
			.name{
				display: flex;
				font-size: (32vw/7.5);
				.name-left{
					text-align: center;
					// padding: 0 24vw/7.5);
					width: (150vw/7.5);
					border-bottom: (2vw/7.5) solid #333;
				}
			}
			.info{
				margin-top: (68vw/7.5);
				text-indent: (64vw/7.5);
				line-height: (58vw/7.5);
			}
			.signName{
				margin-top: (32vw/7.5);
				display: flex;
				.signName-left{
					line-height: (34vw/7.5);
					.signName-1{
						
					}
					.signName-2{
						font-size: (28vw/7.5);
					}
				}
				.signName-right{
					text-align: left;
					// width: 100%;
					padding: 0 (12vw/7.5);
					margin-left: (12vw/7.5);
					
					// width: 288vw/7.5);
					border-bottom: (2vw/7.5) solid #333;
					// margin-bottom: 12vw/7.5);
					.list-input {
						width: 100%;
						padding: 0 (12vw/7.5);
						height: (70vw/7.5);
						font-size: (32vw/7.5);
						text-align: left;
						
					}
					.signDate{
						display: flex;
						align-items: center;
					}
				}
			}
			.signDate{
				margin-top: (22vw/7.5);
				display: flex;
				.signName-left{
					line-height: (34vw/7.5);
					.signName-1{
						
					}
					.signName-2{
						font-size: (28vw/7.5);
					}
				}
				.signName-right{
					text-align: left;
					padding-left: (12vw/7.5);
					margin-left: (12vw/7.5);
					width: (288vw/7.5);
					border-bottom: (2vw/7.5) solid #333;
					.list-input {
						height: (70vw/7.5);
						font-size: (32vw/7.5);
						text-align: left;
						
					}
					// margin-bottom: 12vw/7.5);
				}
			}
			// background-color: pink;
		
	}
	.imgbox{
		height: (1350vw/7.5);
		width:(750vw/7.5);
	}
</style>