<template>
	<view class="">
		<view v-if="ready" class="contentBox">
			<view class="rules">
				<view class="">
					<view class="">
						上课 {{info.StartTime}}
					</view>
					<view class="">
						{{info.UserWorkTime?info.UserWorkTime.split(' ')[1]+' 打卡':'未打卡'}}
					</view>
				</view>
				<view class="">
					<view class="">
						下课 {{info.EndTime}}
					</view>
					<view class="">
						{{info.UserCloseTime?info.UserCloseTime.split(' ')[1]+' 打卡':'--'}}
					</view>
				</view>
			</view>
			<view class="content" id="attendContent">
				<view id="show">{{now}}</view>
				<view class="pen" @click="action('dk')">
					<img :class="{gray:info.AttendanceType != 1}" id="attimg" :src="imgsrc" alt="" width="100%">
				</view>
				<view class="title">
					<text>{{resInfo.AttendanceTypeString}}</text>
					<text>{{postData.AIsOut == 1 ? ' | ' + info.AttendanceTypeString:''}}</text>
					<view style="color: #666;">
						<view>
							{{info.Classroom?'教室:'+info.Classroom:''}}
						</view>
						<view>
							{{info.LessonName}} {{info.LessonSortNo == 1?'必修':info.LessonSortNo == 2?'选修':''}}
						</view>
						<view>
							{{info.EmpName?'教师:'+info.EmpName:''}}
						</view>
						<view>
							{{postData.ClockPlace}}
						</view>
					</view>
				</view>
			</view>
			<view class="footer">
				<img src="../../common/images/2.png" alt="" width="100%">
			</view>
		</view>
		<view id='container'></view>
	</view>

</template>


<script>
	/* 
	 * 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架(http://www.learun.cn) 
	 * Copyright (c) 2013-2020 上海力软信息技术有限公司 
	 * 创建人：超级管理员 
	 * 日  期：2022-03-10 15:30 
	 * 描  述：考勤打卡 
	 */

	/** 
	 * 本段代码由移动端代码生成器输出，移动端须 2.2.0 版本及以上可以使用
	 * 请在移动端 /pages.json 中的 pages 字段中添加一条记录： 
	 * { "path": "pages/AttendanceCard/list", "style": { "navigationBarTitleText": "考勤打卡" } } 
	 *  
	 * （navigationBarTitleText 字段为本页面的标题文本，可以修改） 
	 * （必须自行操作该步骤，力软代码生成器不会自动帮您修改 /pages.json 文件） 
	 */

	import get from 'lodash/get'
	import set from 'lodash/set'
	import moment from 'moment'
	import customPageMixins from '@/common/custompage.js'
	import wxFn from '@/common/wxFn.js'
	//导入图片
	import dk from '../../common/images/dk.png'
	import dkred from '../../common/images/dkred.png'
	import dkyellow from '../../common/images/dkyellow.png'

	export default {
		mixins: [customPageMixins, wxFn],

		data() {
			return {
				// 页面相关参数 
				info: {},
				resInfo:{},
				now: null,
				imgsrc: dk,
				ready: false,
				timer: '',
				timer1:'',
				map: null,
				postData: {},
				isGetingLocal:false,
			}
		},

		async onLoad() {
			await this.init()
		},

		methods: {
			// 页面初始化 
			async init() {
				this.LOADING('加载数据中...')

				this.now = this.getCurrentTime()
				this.timer = setInterval(this.getCurrentTime, 1000)
				let res = await this.judgeIsDK()

				this.ready = res ? true : false
				this.HIDE_LOADING()
			},

			// 点击 「打卡」按钮 
			async action(type) {
				switch (type) {
					case 'dk':
						if (this.info.UserWorkTime) {
							this.TOAST('已打卡，不可再次打卡')
							return
						}
						if ([5].includes(this.info.AttendanceType)) {
							return
						}
						if(!this.postData.ClockPlace){
							this.TOAST('获取定位失败，无法打卡')
							return
						}
						if ([4].includes(this.info.AttendanceType)) {
							this.NAV_TO(`./single`, this.postData,true)
							return
						}
						this.LOADING()
						this.HTTP_POST('learun/adms/attendance/clockinStudent', {}, '打卡失败').then(success => {
							this.HIDE_LOADING()
							if (!success) {
								this.TOAST('打卡失败')
								return
							}
							this.TOAST('打卡成功', 'success')
							setTimeout(this.back, 500)

						})
						return

					default:
						break
				}
			},
			//获取打卡信息
			async judgeIsDK() {
				let success = await this.HTTP_GET('learun/adms/attendance/IsAttendanceStudent', {}, '判断当前时间是否可以打卡失败')
				if (!success) {
					return false
				}
				this.info = success.data
				this.imgsrc = dk;
				this.postData = {
					LessonSortNo:this.info.LessonSortNo,
					ALTId:this.info.ALTId||undefined,
					ALTOEId:this.info.ALTOEId||undefined
				}
				// if ([1].includes(this.info.AttendanceType)) {
				// 	this.imgsrc=dk;
				// } else if ([2,3].includes(this.info.AttendanceType)) {
				// 	this.imgsrc=dkyellow;
				// }else {
				// 	this.imgsrc=dkred;
				// }
				// 保存原打卡状态
				this.resInfo = {
					AttendanceType:this.info.AttendanceType,
					AttendanceTypeString:this.info.AttendanceTypeString,
				}
				if (![5].includes(this.info.AttendanceType)) {
					this.$set(this.info, 'AttendanceType', 4)
					this.$set(this.info, 'AttendanceTypeString', '外勤打卡')
					this.$set(this.postData, 'AIsOut', 1)
					// 获取定位，不是外勤时候改变状态
					if (!window.BMapGL) await this.loadJScript()
					this.map = new BMapGL.Map('container');
					
					await this.isFieldPersonnel()
					if(!this.postData.ClockPlace){
						return true
					}
					this.timer1 = setInterval(async ()=>{
						if(this.isGetingLocal)return
						if(!this.postData.ClockPlace){
							clearInterval(this.timer1)
						}
						this.isGetingLocal = true
						await this.isFieldPersonnel()
						// console.log(this.postData)
						this.isGetingLocal = false
					},3000)
				}
				return true
			},
			//返回
			back() {
				this.NAV_BACK()
			},
			//获取当前时间
			getCurrentTime() {
				let nowDate = new Date();
				let hh = nowDate.getHours();
				let mf = nowDate.getMinutes() < 10 ? '0' + nowDate.getMinutes() : nowDate.getMinutes();
				let ss = nowDate.getSeconds() < 10 ? '0' + nowDate.getSeconds() : nowDate.getSeconds();
				this.now = hh + ':' + mf + ':' + ss;
			},
			// 判断是否外勤打卡
			async isFieldPersonnel() {
				let point = new BMapGL.Point(this.info.GPSLon, this.info.GPSLat)
				await this.getDistance(point)
			},
			//异步加载地图
			loadJScript() {
				return new Promise((resolve, reject) => {
					window.initMap = function() {
						resolve(BMapGL)
					}
					var script = document.createElement('script');
					script.type = 'text/javascript';
					script.src =
						'https://api.map.baidu.com/api?v=1.0&type=webgl&ak=78iR1wqm8cER7Gjt4tT26HrGGtGuk9LI' +
						'&callback=' + 'initMap';
					script.onerror = reject
					document.head.appendChild(script);
				})
			},
			// 计算距离打卡点的距离
			// 签到状态(1正常打卡，2迟到打卡，3早退打卡，4外勤打卡，5不在考勤时间范围)
			async getDistance(myP1) {
				// new BMapGL.Point(116.404, 39.915)
				let myP2 = await this.local();
				if (!myP2) {
					// this.TOAST('获取定位失败！')
					this.$set(this.info, 'AttendanceType', 4)
					this.$set(this.info, 'AttendanceTypeString', '外勤打卡')
					this.$set(this.postData, 'AIsOut', 1)
					return
				}
				let distance = this.map.getDistance(myP1, myP2).toFixed(2)
				// alert('距离'+ distance)
				// console.log('距离', distance, '打卡坐标：', myP1, '当前坐标：', myP2)
				if (Number(distance) > Number(this.info.GPSRange)) {
					this.$set(this.info, 'AttendanceType', 4)
					this.$set(this.info, 'AttendanceTypeString', '外勤打卡')
					this.$set(this.postData, 'AIsOut', 1)
				} else {
					this.$set(this.info, 'AttendanceType', this.resInfo.AttendanceType)
					this.$set(this.info, 'AttendanceTypeString', this.resInfo.AttendanceTypeString)
					this.$set(this.postData, 'AIsOut', 0)
				}
			},
			// 获取当前位置
			local() {
				return new Promise(async (resolve) => {
					let res = await this.getLocation()
					// let res = {
					// 	lng: 112.57205562051,
					// 	lat: 37.742374280962
					// }
					// let res = {
					// 	lng: 112.55981419,
					// 	lat: 37.80890166
					// }
					if (!res) {
						this.$set(this.postData, 'ALon', '')
						this.$set(this.postData, 'ALat', '')
						this.$set(this.postData, 'ClockPlace', '')
						resolve(false)
					}
					new BMapGL.Convertor().translate([res], 3, 5, data => {
						if (data.status == 0) {
							// alert(data.points[0].lng + '' + data.points[0].lat)
							this.$set(this.postData, 'ALon', data.points[0].lng)
							this.$set(this.postData, 'ALat', data.points[0].lat)
							let geoc = new BMapGL.Geocoder();
							geoc.getLocation(data.points[0], (rs) => {
								let addComp = rs.addressComponents;
								let address =
									addComp.province +
									addComp.city +
									addComp.district +
									addComp.street +
									addComp.streetNumber
								this.$set(this.postData, 'ClockPlace', address)
								resolve(data.points[0])
							});
						} else {
							this.$set(this.postData, 'ALon', '')
							this.$set(this.postData, 'ALat', '')
							this.$set(this.postData, 'ClockPlace', '')
							this.TOAST('获取定位失败！')
							resolve(false)
						}

					})
				});
			}
		},
		destroyed() {
			clearInterval(this.timer)
			clearInterval(this.timer1)
		}
	}
</script>

<style lang="less">
	uni-page-body {
		height: 100%;
		width: 100%;
		background-color: #fff;
	}

	.content {
		width: 100%;
		height: 50%;
		position: absolute;
		top: 15%;
		left: 50%;
		transform: translate(-50%, 10%);
		text-align: center;
	}

	.title {
		font-size: 14px;
		text-align: center;
		color: #333;
		margin-top: 8px;
	}

	.rules {
		display: flex;
		justify-content: space-between;
		color: #666;
		padding: 15px;
		line-height: 24px;
	}

	.rules>* {
		width: 49%;
		background-color: #BDE4FF;
		padding: 8px;
		border-radius: 8px 12px;
	}

	.rules>*>*:first-child {
		color: #333;
	}

	#show {
		text-align: center;
		height: 200rpx;
		font-size: 56rpx;
	}

	.pen {
		width: 48%;
		display: inline-block;
		border-radius: 50%;
		// background-color: #e7f5ff;
	}

	.pen2 {
		width: 91%;
		height: 91%;
		border-radius: 50%;
		background-color: #bde4ff;
		display: flex;
		align-items: center;
		justify-content: center;
	}

	.pen3 {
		width: 84%;
		height: 84%;
		border-radius: 50%;
		background-color: #0c86d8;
		text-align: center;
		font-size: 68rpx;
		display: flex;
		align-items: center;
		justify-content: center;
		color: #ffff;
	}

	.footer {
		width: 100%;
		position: fixed;
		left: 0;
		bottom: 0;
		overflow: hidden;
	}

	.gray {
		-webkit-filter: grayscale(100%);
		-moz-filter: grayscale(100%);
		-ms-filter: grayscale(100%);
		-o-filter: grayscale(100%);
		filter: grayscale(100%);
		filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
		filter: gray;
	}
</style>