Просмотр исходного кода

css(login): 登录按钮边框样式
chore(mine、work): $modal confirm加上catch忽略点击取消的error

wangpx 1 год назад
Родитель
Сommit
93e825e4bf
4 измененных файлов с 543 добавлено и 543 удалено
  1. 10 6
      pages/login.vue
  2. 480 483
      pages/mine/clockIn/clockIn.vue
  3. 51 49
      pages/mine/setting/setting.vue
  4. 2 5
      pages/work/edit/index.vue

+ 10 - 6
pages/login.vue

@@ -32,15 +32,15 @@ import { getLoginInfo } from '@/utils/auth'
 const userStore = useUserStore()
 
 const loginForm = ref({
-	username: getLoginInfo().username,
-	password: getLoginInfo().password
+	username: getLoginInfo().username || '',
+	password: getLoginInfo().password || ''
 })
 function handleLogin() {
 	const username = loginForm.value.username
 	const password = loginForm.value.password
-	if (username === "") {
+	if (username == '') {
 		$modal.msgError("请输入您的账号")
-	} else if (password === "") {
+	} else if (password == '') {
 		$modal.msgError("请输入您的密码")
 	} else {
 		$modal.loading("登录中,请耐心等待...")
@@ -177,6 +177,11 @@ image {
 				border-radius: 20px;
 			}
 
+			.login-btn::after {
+				border: 0px;
+				border-radius: 20px;
+			}
+
 			.cu-btn.block {
 				display: flex;
 			}
@@ -202,8 +207,7 @@ image {
 				text-align: center;
 				text-decoration: none;
 				overflow: visible;
-				margin-left: initial;
-				transform: translate(0rpx, 0rpx);
+				margin-left: initial;		transform: translate(0rpx, 0rpx);
 				margin-right: initial;
 			}
 		}

+ 480 - 483
pages/mine/clockIn/clockIn.vue

@@ -12,14 +12,14 @@
 				<text class="ygoa-icon icon-goToWork"></text>
 				<text class="title">上班</text>
 				<text class="time">{{ signInTime || '未打卡' }}</text>
-				<text class="signStatus" v-if="!isSignInStatusDisabled">({{signInStatusName}})</text>
+				<text class="signStatus" v-if="!isSignInStatusDisabled">({{ signInStatusName }})</text>
 			</view>
 			<view class="record-item">
 				<text class="ygoa-icon icon-afterWork"></text>
 				<text class="title">下班</text>
 				<text class="time">{{ signOutTime || '未打卡' }}</text>
 				<text class="signStatus" v-if="!isSignOutStatusDisabled"
-					style="color: #e64340;">({{signOutStatusName}})</text>
+					style="color: #e64340;">({{ signOutStatusName }})</text>
 			</view>
 			<view class="record-item" @click="getAddress">
 				<text class="ygoa-icon icon-location"></text>
@@ -35,529 +35,526 @@
 		<!-- 打卡按钮 -->
 		<view class="footer">
 			<button type="default" @click="signInOrOut" style="background-color: #3c9cff; color: #fcfcfc;"
-				v-if="signName=='上班签到'">上班签到</button>
+				v-if="signName == '上班签到'">上班签到</button>
 			<button type="default" @click="signInOrOut" style="background-color: #1aad19; color: #fcfcfc;"
-				v-else-if="signName=='下班签退'">下班签退</button>
+				v-else-if="signName == '下班签退'">下班签退</button>
 		</view>
 	</view>
 </template>
 
 
 <script setup lang="ts">
-	import {
-		onBeforeUnmount,
-		onMounted,
-		reactive,
-		ref
-	} from 'vue';
-	// 导入地理位置相关函数
-	import booleanPointInPolygon from "@turf/boolean-point-in-polygon";
-	import {
-		point,
-		polygon
-	} from "@turf/helpers";
-	import {
-		useUserStore
-	} from '@/store/user';
-	import $modal from '@/plugins/modal.js'
-	import $tab from '@/plugins/tab.js';
-	import config from '@/config.js';
-	import {
-		createAttendance,
-		tranAddress,
-		checkAttendance
-	} from '@/api/mine.js'
-	const userStore = useUserStore();
-	const thisUser = userStore.user;
-	const intervalId = ref(null); // 定时器ID
-	onBeforeUnmount(() => {
-		clearInterval(intervalId.value);
-	})
-	// 组件挂载后初始化当前日期与位置
-	onMounted(() => {
-		dateInit();
-		// getlocation();
-	});
-
-
-	function showNowTime() {
-		// let nowMilliseconds=Date.now();
-		// intervalId.value = setInterval(() => {
-		// 	nowMilliseconds+=1000;
-		// 	 nowTime.value = new Date(nowMilliseconds).toLocaleString('zh-CN', {
-		// 	        year: 'numeric',
-		// 	        month: '2-digit',
-		// 	        day: '2-digit',
-		// 	        hour: '2-digit',
-		// 	        minute: '2-digit',
-		// 	        second: '2-digit',
-		// 	        hour12: false // 24小时制
-		// 	    });
-		// 	}, 1000); // 每1秒更新一次
-
-		intervalId.value = setInterval(() => {
-			nowTime.value = getNowTime()
-		}, 1000); // 每1秒更新一次
-
-	}
-	// 当前日期和时间相关信息
-	const currentDate = ref('2023-04-01');
-	const currentDay = ref('星期三');
-	const nowTime = ref(''); // 当前时间
-	const weekArr = reactive(['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']); // 星期数组
-
-
-	// 初始化日期
-	function dateInit() {
-		const nowDate = new Date();
-		const year = nowDate.getFullYear(); // 获取年份
-		const month = nowDate.getMonth() + 1; // 获取月份
-		const day = nowDate.getDate(); // 获取日期
-		// 格式化月份和日期为两位数
-		const formattedMonth = month < 10 ? '0' + month : month;
-		const formattedDay = day < 10 ? '0' + day : day;
-		currentDate.value = `${year}-${formattedMonth}-${formattedDay}`; // 设置当前日期
-		const dayOfWeek = nowDate.getDay(); // 获取当前星期
-		currentDay.value = weekArr[dayOfWeek]; // 设置当前星期
-		showNowTime();
-		getTodayAtt();
+import {
+	onBeforeUnmount,
+	onMounted,
+	reactive,
+	ref
+} from 'vue';
+// 导入地理位置相关函数
+import booleanPointInPolygon from "@turf/boolean-point-in-polygon";
+import {
+	point,
+	polygon
+} from "@turf/helpers";
+import {
+	useUserStore
+} from '@/store/user';
+import $modal from '@/plugins/modal.js'
+import $tab from '@/plugins/tab.js';
+import config from '@/config.js';
+import {
+	createAttendance,
+	tranAddress,
+	checkAttendance
+} from '@/api/mine.js'
+const userStore = useUserStore();
+const thisUser = userStore.user;
+const intervalId = ref(null); // 定时器ID
+onBeforeUnmount(() => {
+	clearInterval(intervalId.value);
+})
+// 组件挂载后初始化当前日期与位置
+onMounted(() => {
+	dateInit();
+	// getlocation();
+});
+
+
+function showNowTime() {
+	// let nowMilliseconds=Date.now();
+	// intervalId.value = setInterval(() => {
+	// 	nowMilliseconds+=1000;
+	// 	 nowTime.value = new Date(nowMilliseconds).toLocaleString('zh-CN', {
+	// 	        year: 'numeric',
+	// 	        month: '2-digit',
+	// 	        day: '2-digit',
+	// 	        hour: '2-digit',
+	// 	        minute: '2-digit',
+	// 	        second: '2-digit',
+	// 	        hour12: false // 24小时制
+	// 	    });
+	// 	}, 1000); // 每1秒更新一次
+
+	intervalId.value = setInterval(() => {
+		nowTime.value = getNowTime()
+	}, 1000); // 每1秒更新一次
+
+}
+// 当前日期和时间相关信息
+const currentDate = ref('2023-04-01');
+const currentDay = ref('星期三');
+const nowTime = ref(''); // 当前时间
+const weekArr = reactive(['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']); // 星期数组
+
+
+// 初始化日期
+function dateInit() {
+	const nowDate = new Date();
+	const year = nowDate.getFullYear(); // 获取年份
+	const month = nowDate.getMonth() + 1; // 获取月份
+	const day = nowDate.getDate(); // 获取日期
+	// 格式化月份和日期为两位数
+	const formattedMonth = month < 10 ? '0' + month : month;
+	const formattedDay = day < 10 ? '0' + day : day;
+	currentDate.value = `${year}-${formattedMonth}-${formattedDay}`; // 设置当前日期
+	const dayOfWeek = nowDate.getDay(); // 获取当前星期
+	currentDay.value = weekArr[dayOfWeek]; // 设置当前星期
+	showNowTime();
+	getTodayAtt();
+}
+
+
+const signInTime = ref(''); // 上班签到时间
+const signOutTime = ref(''); // 下班签到时间
+//打卡按钮文字显示
+const signName = ref('')
+
+//迟到早退状态,默认隐藏
+const signInStatusName = ref('迟到')
+const signOutStatusName = ref('早退')
+const isSignInStatusDisabled = ref(true)
+const isSignOutStatusDisabled = ref(true)
+//获取今天考勤状态
+function getTodayAtt() {
+	const params = {
+		universalid: thisUser.useId,
+		rizi: currentDate.value
 	}
-
-
-	const signInTime = ref(''); // 上班签到时间
-	const signOutTime = ref(''); // 下班签到时间
-	//打卡按钮文字显示
-	const signName = ref('')
-
-	//迟到早退状态,默认隐藏
-	const signInStatusName = ref('迟到')
-	const signOutStatusName = ref('早退')
-	const isSignInStatusDisabled = ref(true)
-	const isSignOutStatusDisabled = ref(true)
-	//获取今天考勤状态
-	function getTodayAtt() {
-		const params = {
-			universalid: thisUser.useId,
-			rizi: currentDate.value
-		}
-		checkAttendance(params).then(res => {
-
-			if ("success" == res.returnMsg) {
-				// console.log("kaoqin",res);
-				const attList = res.returnParams.list;
-				const time1 = attList.find(item => item.att_type_id === '1');
-				//拿到所有签退数据后,用pop取最后一个
-				const time2 = attList.filter(item => item.att_type_id === '2').pop();
-				console.log('time2', time2);
-				if (time1 !== undefined) {
-					// console.log('getTime1',time1);
-					signInTime.value = time1.att_time.split(' ')[1];
-					signName.value = '下班签退';
-					if (Array.isArray(config.lateTimeRange) && isTimeInRange(signInTime.value, config
-							.lateTimeRange[0], '23:59:59')) {
-						isSignInStatusDisabled.value = false; //迟到
-					}
-				} else {
-					signName.value = '上班签到';
+	checkAttendance(params).then(res => {
+
+		if ("success" == res.returnMsg) {
+			// console.log("kaoqin",res);
+			const attList = res.returnParams.list;
+			const time1 = attList.find(item => item.att_type_id === '1');
+			//拿到所有签退数据后,用pop取最后一个
+			const time2 = attList.filter(item => item.att_type_id === '2').pop();
+			console.log('time2', time2);
+			if (time1 !== undefined) {
+				// console.log('getTime1',time1);
+				signInTime.value = time1.att_time.split(' ')[1];
+				signName.value = '下班签退';
+				if (Array.isArray(config.lateTimeRange) && isTimeInRange(signInTime.value, config
+					.lateTimeRange[0], '23:59:59')) {
+					isSignInStatusDisabled.value = false; //迟到
 				}
-				if (time2 !== undefined) {
-					signOutTime.value = time2.att_time.split(' ')[1];
-					if (Array.isArray(config.signOutTimeRange) && isTimeInRange(signOutTime.value, "00:00:00",
-							config.signOutTimeRange[0])) {
-						isSignOutStatusDisabled.value = false; //早退
-					} else {
-						isSignOutStatusDisabled.value = true; //隐藏早退状态
-					}
+			} else {
+				signName.value = '上班签到';
+			}
+			if (time2 !== undefined) {
+				signOutTime.value = time2.att_time.split(' ')[1];
+				if (Array.isArray(config.signOutTimeRange) && isTimeInRange(signOutTime.value, "00:00:00",
+					config.signOutTimeRange[0])) {
+					isSignOutStatusDisabled.value = false; //早退
+				} else {
+					isSignOutStatusDisabled.value = true; //隐藏早退状态
 				}
 			}
-		})
-	}
+		}
+	})
+}
 
 
 
-	//上班卡或下班卡
-	function signInOrOut() {
-		if ('上班签到' == signName.value) {
-			signIn();
-		} else {
-			signOut();
-		}
+//上班卡或下班卡
+function signInOrOut() {
+	if ('上班签到' == signName.value) {
+		signIn();
+	} else {
+		signOut();
 	}
+}
 
 
 
-	function signIn() {
-		const now = getNowTime();
-		//判断打卡时间是否符合
-		if (!isTimeInRange(now, ...config.signInTimeRange)) {
-			$modal.msg('不在签到时间8:30--9:30内,请前往补卡')
-			return;
-		}
-		// attType.value=1;
-		const signIn = 1;
+function signIn() {
+	const now = getNowTime();
+	//判断打卡时间是否符合
+	if (!isTimeInRange(now, ...config.signInTimeRange)) {
+		$modal.msg('不在签到时间8:30--9:30内,请前往补卡')
+		return;
+	}
+	// attType.value=1;
+	const signIn = 1;
+	getAddress().then(() => {
+		clockIn(signIn);
+	});
+};
+
+// 下班签退
+function signOut() {
+	const now = getNowTime();
+	const signOut = 2;
+	//判断打卡时间是否符合
+	console.log('now', now);
+	if (!isTimeInRange(now, ...config.signOutTimeRange)) {
+		$modal.confirm('当前非正常签退时间,是否继续?').then(res => {
+			if (res) {
+				getAddress().then(() => {
+					clockIn(signOut); // 执行打卡并获取结果
+				});
+			}
+		}).catch(() => { })
+	} else {
 		getAddress().then(() => {
-			clockIn(signIn); 
+			clockIn(signOut);
 		});
-	};
-
-	// 下班签退
-	function signOut() {
-		const now = getNowTime();
-		const signOut = 2;
-		//判断打卡时间是否符合
-		console.log('now', now);
-		if (!isTimeInRange(now, ...config.signOutTimeRange)) {
-			$modal.confirm('当前非正常签退时间,是否继续?').then(res => {
-				if (res) {
-					getAddress().then(() => {
-						clockIn(signOut); // 执行打卡并获取结果
-					});
-				}
-			})
-		} else {
-			getAddress().then(() => {
-				clockIn(signOut); 
-			});
-		}
-
-
-	};
-
-	//获取当前时间
-	function getNowTime() {
-		return new Date().toLocaleTimeString('en-US', {
-			hour12: false
-		}).substring(0, 8)
 	}
 
-	//判断时间是否在区间内
-	function isTimeInRange(time, startTime, endTime) {
-		// 将时间字符串转换为Date对象
-		const timeObj = new Date('1970-01-01T' + time + 'Z');
-		const startObj = new Date('1970-01-01T' + startTime + 'Z');
-		const endObj = new Date('1970-01-01T' + endTime + 'Z');
-		// 比较时间
-		return timeObj >= startObj && timeObj <= endObj;
-	}
-
-
-	// 地图配置信息
-	// const mapKey = config.mapKey; // 地图API密钥
-	const mapType = ref('tmap'); // 地图类型
-	const address = ref(''); // 初始化地址
-
-	// 打卡定位信息
-	const longitude = ref(0); // 经度
-	const latitude = ref(0); // 纬度
 
-	// 标记信息
-	const marker = reactive({
-		id: 1,
-		latitude: 25.958812,
-		longitude: 119.213036,
-		width: 50, // 标记宽度
-		height: 50, // 标记高度
-		title: '宇光同行' // 标记标题
-	});
-
-	// 获取当前定位经纬度
-	function getlocation() {
-		return new Promise((resolve, reject) => {
-			//判断用户是否打开位置权限
-			uni.getSetting({
-				success(res) {
-					// 如果用户未授权
-					if (!res.authSetting['scope.userLocation']) {
-						$modal.confirm('需要您授权获取地理位置信息').then(res => {
-								if (res) {
-									// 打开权限设置页面
-									uni.openSetting({
-										success: (settingData) => {
-											if (settingData.authSetting[
-													'scope.userLocation']) {
-												$modal.msg('授权后请重新打开此页面')
-												// reject("用户未授权");
-											}
-										}
-									});
+};
+
+//获取当前时间
+function getNowTime() {
+	return new Date().toLocaleTimeString('en-US', {
+		hour12: false
+	}).substring(0, 8)
+}
+
+//判断时间是否在区间内
+function isTimeInRange(time, startTime, endTime) {
+	// 将时间字符串转换为Date对象
+	const timeObj = new Date('1970-01-01T' + time + 'Z');
+	const startObj = new Date('1970-01-01T' + startTime + 'Z');
+	const endObj = new Date('1970-01-01T' + endTime + 'Z');
+	// 比较时间
+	return timeObj >= startObj && timeObj <= endObj;
+}
+
+
+// 地图配置信息
+// const mapKey = config.mapKey; // 地图API密钥
+const mapType = ref('tmap'); // 地图类型
+const address = ref(''); // 初始化地址
+
+// 打卡定位信息
+const longitude = ref(0); // 经度
+const latitude = ref(0); // 纬度
+
+// 标记信息
+const marker = reactive({
+	id: 1,
+	latitude: 25.958812,
+	longitude: 119.213036,
+	width: 50, // 标记宽度
+	height: 50, // 标记高度
+	title: '宇光同行' // 标记标题
+});
+
+// 获取当前定位经纬度
+function getlocation() {
+	return new Promise((resolve, reject) => {
+		//判断用户是否打开位置权限
+		uni.getSetting({
+			success(res) {
+				// 如果用户未授权
+				if (!res.authSetting['scope.userLocation']) {
+					$modal.confirm('需要您授权获取地理位置信息').then(res => {
+						if (res) {
+							// 打开权限设置页面
+							uni.openSetting({
+								success: (settingData) => {
+									if (settingData.authSetting[
+										'scope.userLocation']) {
+										$modal.msg('授权后请重新打开此页面')
+										// reject("用户未授权");
+									}
 								}
-							})
-							.catch(err => {
-								//用户点击取消
-								if (!err) {
-									uni.showToast({
-										title: '获取地理位置授权失败',
-										icon: 'none',
-										success: () => {
-											// 返回上一页
-											setTimeout(() => {
-												$tab.navigateBack()
-											}, 1000);
-										}
-									});
-									// reject("用户未授权");
-								}
-							})
-					} else {
-						// 已授权,获取位置
-						fetchLocation(resolve, reject);
-					}
-				},
-				fail(err) {
-					reject(err); // 拒绝 Promise
+							});
+						}
+					})
+						.catch(err => {
+							//用户点击取消
+							if (!err) {
+								uni.showToast({
+									title: '获取地理位置授权失败',
+									icon: 'none',
+									success: () => {
+										// 返回上一页
+										setTimeout(() => {
+											$tab.navigateBack()
+										}, 1000);
+									}
+								});
+								// reject("用户未授权");
+							}
+						})
+				} else {
+					// 已授权,获取位置
+					fetchLocation(resolve, reject);
 				}
-			});
-		});
-	}
-
-	// 封装获取位置的函数
-	function fetchLocation(resolve, reject) {
-		wx.getLocation({
-			success: (res) => {
-				longitude.value = res.longitude; // 保存经度
-				latitude.value = res.latitude; // 保存纬度
-				resolve(); // 解析 Promise
 			},
-			fail: (err) => {
-				if (err.errMsg.includes("频繁调用")) {
-					$modal.msg('请勿频繁调用');
-					// reject("频繁调用错误");
-					return;
-				}
-				console.log('getLocationErr', err);
+			fail(err) {
 				reject(err); // 拒绝 Promise
-			},
-		});
-	}
-
-
-	// 获取当前位置地址
-	function getAddress() {
-		// getlocation()
-		// 	.then(() => {
-		// 		tranLocationToAddress(); // 执行地址转换
-		// 	})
-		// 	.catch(err => {
-		// 		console.error('获取地址失败', err);
-		// 	});
-		return new Promise((resolve, reject) => {
-			getlocation()
-				.then(() => {
-					tranLocationToAddress(); // 执行地址转换
-					resolve(); // 地址获取成功
-				})
-				.catch(err => {
-					// console.error('获取地址失败', err);
-					reject(err); // 地址获取失败
-				});
+			}
 		});
-	}
-
-	// 经纬度转地址
-	function tranLocationToAddress() {
-		let locationStr = latitude.value + ',' + longitude.value; // 组合经纬度
-		tranAddress(locationStr).then(res => {
-				// console.log('地址转换请求成功', res);
-				address.value = res.result.address; // 保存地址
+	});
+}
+
+// 封装获取位置的函数
+function fetchLocation(resolve, reject) {
+	wx.getLocation({
+		success: (res) => {
+			longitude.value = res.longitude; // 保存经度
+			latitude.value = res.latitude; // 保存纬度
+			resolve(); // 解析 Promise
+		},
+		fail: (err) => {
+			if (err.errMsg.includes("频繁调用")) {
+				$modal.msg('请勿频繁调用');
+				// reject("频繁调用错误");
+				return;
+			}
+			console.log('getLocationErr', err);
+			reject(err); // 拒绝 Promise
+		},
+	});
+}
+
+
+// 获取当前位置地址
+function getAddress() {
+	// getlocation()
+	// 	.then(() => {
+	// 		tranLocationToAddress(); // 执行地址转换
+	// 	})
+	// 	.catch(err => {
+	// 		console.error('获取地址失败', err);
+	// 	});
+	return new Promise((resolve, reject) => {
+		getlocation()
+			.then(() => {
+				tranLocationToAddress(); // 执行地址转换
+				resolve(); // 地址获取成功
 			})
 			.catch(err => {
-				console('地址转换请求失败', err); // 请求错误处理
-			})
-	}
-
-
-	// 多边形区域设置
-	const polygons = reactive([{
-		points: [{
-				latitude: 25.9591401,
-				longitude: 119.21292356
-			},
-			{
-				latitude: 25.95828592,
-				longitude: 119.21261955
-			},
-			{
-				latitude: 25.9576709,
-				longitude: 119.21458294
-			},
-			{
-				latitude: 25.95845106,
-				longitude: 119.21486162
-			},
-			{
-				latitude: 25.9591401,
-				longitude: 119.21292356
-			}
-		],
-		strokeWidth: 1, // 边框宽度
-		strokeColor: "#ff000066", // 边框颜色
-		fillColor: "#ff000016", // 填充颜色
-	}]);
-
-	// 打卡
-	function clockIn(attType) {
-		// 发起打卡请求相关业务逻辑
-		//判断是否已经打过卡
-		if (isClockIn(attType)) {
-			return;
-		}
-		var now = new Date();
-		// 使用toISOString()获取一个ISO格式的字符串,然后替换T为空格,并去除最后的Z(表示UTC时间)
-		var formatted = now.toISOString().replace('T', ' ').replace('Z', '');
-		var localString = new Date(formatted + '-08:00').toISOString().replace('T', ' ').replace('Z', '');
-		// console.log('nowtime',formatted,localString);
-		const params = {
-			user_name: thisUser.userName,
-			user_id: thisUser.useId,
-			kaoqin_type: attType,
-			now_date: localString,
-			longitude: longitude.value,
-			latitude: latitude.value,
-			address: address.value,
-			unitId: thisUser.unitId
-		};
-		createAttendance(params).then(res => {
-			// console.log('createAttendance',res);
-			if ("success" == res.returnMsg) {
-				uni.showToast({
-					title: "打卡成功",
-					icon: 'none'
-				});
-				getTodayAtt(); //更新今日考勤数据
-				return true;
-			} else {
-				uni.showToast({
-					title: "未在指定范围,打卡失败",
-					icon: 'none'
-				});
-				return false;
-			}
+				// console.error('获取地址失败', err);
+				reject(err); // 地址获取失败
+			});
+	});
+}
+
+// 经纬度转地址
+function tranLocationToAddress() {
+	let locationStr = latitude.value + ',' + longitude.value; // 组合经纬度
+	tranAddress(locationStr).then(res => {
+		// console.log('地址转换请求成功', res);
+		address.value = res.result.address; // 保存地址
+	})
+		.catch(err => {
+			console('地址转换请求失败', err); // 请求错误处理
 		})
-		// const _polygons = polygons.map((polygon) => {
-		// 	return polygon.points.map((i) => [
-		// 		Number(i.longitude),
-		// 		Number(i.latitude),
-		// 	]);
-		// });
-		// const _point = point([longitude.value, latitude.value]); // 用当前坐标创建点
-		// const _polygon = polygon(_polygons); // 创建多边形
-		// const f = booleanPointInPolygon(_point, _polygon); // 判断点是否在多边形内	
+}
+
+
+// 多边形区域设置
+const polygons = reactive([{
+	points: [{
+		latitude: 25.9591401,
+		longitude: 119.21292356
+	},
+	{
+		latitude: 25.95828592,
+		longitude: 119.21261955
+	},
+	{
+		latitude: 25.9576709,
+		longitude: 119.21458294
+	},
+	{
+		latitude: 25.95845106,
+		longitude: 119.21486162
+	},
+	{
+		latitude: 25.9591401,
+		longitude: 119.21292356
 	}
-
-	//判断是否已经打卡
-	function isClockIn(attType) {
-		var attTypeData = '';
-		switch (attType) {
-			case 1:
-				attTypeData = signInTime.value;
-				break;
-			case 2:
-				break;
-		}
-		console.log('attTypeData', attTypeData);
-		if ('' !== attTypeData) {
+	],
+	strokeWidth: 1, // 边框宽度
+	strokeColor: "#ff000066", // 边框颜色
+	fillColor: "#ff000016", // 填充颜色
+}]);
+
+// 打卡
+function clockIn(attType) {
+	// 发起打卡请求相关业务逻辑
+	//判断是否已经打过卡
+	if (isClockIn(attType)) {
+		return;
+	}
+	var now = new Date();
+	// 使用toISOString()获取一个ISO格式的字符串,然后替换T为空格,并去除最后的Z(表示UTC时间)
+	var formatted = now.toISOString().replace('T', ' ').replace('Z', '');
+	var localString = new Date(formatted + '-08:00').toISOString().replace('T', ' ').replace('Z', '');
+	// console.log('nowtime',formatted,localString);
+	const params = {
+		user_name: thisUser.userName,
+		user_id: thisUser.useId,
+		kaoqin_type: attType,
+		now_date: localString,
+		longitude: longitude.value,
+		latitude: latitude.value,
+		address: address.value,
+		unitId: thisUser.unitId
+	};
+	createAttendance(params).then(res => {
+		// console.log('createAttendance',res);
+		if ("success" == res.returnMsg) {
 			uni.showToast({
-				title: "请勿重复打卡",
+				title: "打卡成功",
 				icon: 'none'
 			});
+			getTodayAtt(); //更新今日考勤数据
 			return true;
+		} else {
+			uni.showToast({
+				title: "未在指定范围,打卡失败",
+				icon: 'none'
+			});
+			return false;
 		}
+	})
+	// const _polygons = polygons.map((polygon) => {
+	// 	return polygon.points.map((i) => [
+	// 		Number(i.longitude),
+	// 		Number(i.latitude),
+	// 	]);
+	// });
+	// const _point = point([longitude.value, latitude.value]); // 用当前坐标创建点
+	// const _polygon = polygon(_polygons); // 创建多边形
+	// const f = booleanPointInPolygon(_point, _polygon); // 判断点是否在多边形内	
+}
+
+//判断是否已经打卡
+function isClockIn(attType) {
+	var attTypeData = '';
+	switch (attType) {
+		case 1:
+			attTypeData = signInTime.value;
+			break;
+		case 2:
+			break;
+	}
+	console.log('attTypeData', attTypeData);
+	if ('' !== attTypeData) {
+		uni.showToast({
+			title: "请勿重复打卡",
+			icon: 'none'
+		});
+		return true;
+	}
 		return false;
 	}
 </script>
 
 <style>
-	@import "@/static/font/ygoa/iconfont.css";
-
-	.ygoa-icon {
-		margin-right: 20rpx;
-		font-size: 50rpx;
-	}
-
-	.container {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		padding: 20rpx;
-	}
-
-	.header {
-		width: 100%;
-		height: 200rpx;
-		background-color: #f8f8f8;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.day {
-		font-size: 24px;
-		color: #333;
-		/* font-weight: bold; */
-	}
-
-	.date {
-		font-size: 16px;
-		color: #666;
-	}
-
-	.nowTime {
-		font-size: 16px;
-		color: #666;
-	}
-
-	.record {
-		width: 100%;
-		margin-top: 20rpx;
-		border-top: 1px solid #ddd;
-		border-bottom: 1px solid #ddd;
-		padding: 0 15rpx;
-	}
-
-	.record-item {
-		display: flex;
-		align-items: center;
-		height: 100rpx;
-		border-bottom: 1px solid #eee;
-	}
-
-	.icon {
-		width: 50rpx;
-		height: 50rpx;
-		margin-right: 10rpx;
-	}
-
-	.title {
-		font-size: 28rpx;
-	}
-
-	.time {
-		font-size: 24rpx;
-		color: #999;
-		margin-left: auto;
-	}
-
-	.signStatus {
-		font-size: 24rpx;
-		color: orange;
-		/* margin-left: auto; */
-	}
-
-	.map {
-		width: 100%;
-		height: 500rpx;
-		margin-top: 20rpx;
-	}
-
-	.footer {
-		width: 100%;
-		margin-top: 20rpx;
-		display: flex;
-		justify-content: space-around;
-
-
-	}
+@import "@/static/font/ygoa/iconfont.css";
+
+.ygoa-icon {
+	margin-right: 20rpx;
+	font-size: 50rpx;
+}
+
+.container {
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	padding: 20rpx;
+}
+
+.header {
+	width: 100%;
+	height: 200rpx;
+	background-color: #f8f8f8;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+}
+
+.day {
+	font-size: 24px;
+	color: #333;
+	/* font-weight: bold; */
+}
+
+.date {
+	font-size: 16px;
+	color: #666;
+}
+
+.nowTime {
+	font-size: 16px;
+	color: #666;
+}
+
+.record {
+	width: 100%;
+	margin-top: 20rpx;
+	border-top: 1px solid #ddd;
+	border-bottom: 1px solid #ddd;
+	padding: 0 15rpx;
+}
+
+.record-item {
+	display: flex;
+	align-items: center;
+	height: 100rpx;
+	border-bottom: 1px solid #eee;
+}
+
+.icon {
+	width: 50rpx;
+	height: 50rpx;
+	margin-right: 10rpx;
+}
+
+.title {
+	font-size: 28rpx;
+}
+
+.time {
+	font-size: 24rpx;
+	color: #999;
+	margin-left: auto;
+}
+
+.signStatus {
+	font-size: 24rpx;
+	color: orange;
+	/* margin-left: auto; */
+}
+
+.map {
+	width: 100%;
+	height: 500rpx;
+	margin-top: 20rpx;
+}
+
+.footer {
+	width: 100%;
+	margin-top: 20rpx;
+	display: flex;
+	justify-content: space-around;	}
 
 	.footer button {
 		width: 100%;

+ 51 - 49
pages/mine/setting/setting.vue

@@ -35,62 +35,64 @@
 </template>
 
 <script setup lang="ts">
-	import $tab from "@/plugins/tab.js"
-	import $modal from '@/plugins/modal.js'
-	import { useUserStore } from '@/store/user.js'
-	import {clearCache} from '@/utils/ygoa.js'
-	const userStore = useUserStore()
-	// 退出登录
-	function logOut() {
-		$modal.confirm('确定注销并退出系统吗?')
-			.then(res=>{
-				userStore.LogOut()
-				$tab.reLaunch('/pages/login')
-			})
-	};
-	// 修改密码
-	function pwdEdit() {
-		$tab.navigateTo('/pages/mine/setting/pwdEdit/pwdEdit');
-	};
-	// 检查更新
-	function checkUpdate() {
-		const updateManager = uni.getUpdateManager();
-		updateManager.onCheckForUpdate(function(res) {
-			// 请求完新版本信息的回调
-			if (res.hasUpdate) {
-				updateManager.onUpdateReady(function(res) {
-					$modal.confirm('新版本已经准备好,是否重启应用?','更新提示').then(res=>{
-						// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
-						updateManager.applyUpdate();
-					})
-				});
-			} else {
-				$modal.showToast('暂无版本更新')
+import $tab from "@/plugins/tab.js"
+import $modal from '@/plugins/modal.js'
+import { useUserStore } from '@/store/user.js'
+import { clearCache } from '@/utils/ygoa.js'
+const userStore = useUserStore()
+// 退出登录
+function logOut() {
+	$modal.confirm('确定注销并退出系统吗?')
+		.then(res => {
+			userStore.LogOut()
+			$tab.reLaunch('/pages/login')
+		}).catch(() => { })
+};
+// 修改密码
+function pwdEdit() {
+	$tab.navigateTo('/pages/mine/setting/pwdEdit/pwdEdit');
+};
+// 检查更新
+function checkUpdate() {
+	const updateManager = uni.getUpdateManager();
+	updateManager.onCheckForUpdate(function (res) {
+		// 请求完新版本信息的回调
+		if (res.hasUpdate) {
+			updateManager.onUpdateReady(function (res) {
+				$modal.confirm('新版本已经准备好,是否重启应用?', '更新提示').then(res => {
+					// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
+					updateManager.applyUpdate();
+				}).catch(() => { })
+			});
+		} else {
+			$modal.showToast('暂无版本更新')
 			}
 		});
 	}
 </script>
 
 <style lang="scss" scoped>
-	.container {
-		padding: 20px;
-	}
+.container {
+	padding: 20px;
+}
+
+.list-item {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	font-size: 1rem;
+	padding: 0.75rem;
+	background-color: #ffffff;
+	border-radius: 10rpx;
+	margin-bottom: 0.75rem;
+	border-bottom: 1px solid gainsboro;
 
-	.list-item {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		font-size: 1rem;
-		padding: 0.75rem;
-		background-color: #ffffff;
-		border-radius: 10rpx;
-		margin-bottom: 0.75rem;
-		border-bottom: 1px solid gainsboro;
-		uni-icons{
-			margin-right: 6px;
-		}
+	uni-icons {
+		margin-right: 6px;
 	}
-	.logOut{
-		margin-top: 2rem;
+}
+
+.logOut {
+	margin-top: 2rem;
 	}
 </style>

+ 2 - 5
pages/work/edit/index.vue

@@ -180,10 +180,7 @@ function delrepeatingFormItem(index) {
 	$modal.confirm('', '确认删除该重复表数据')
 		.then(() => {
 			repeatingForm.value.elements.splice(index, 1)
-		})
-		.catch(err => {
-
-		})
+		}).catch(() => { })
 }
 function computedrepeatingFormItemValue(item, table) {
 	let res = 1
@@ -304,7 +301,7 @@ function submitProcess() { // 提交表单
 		} else {
 			$modal.msgSuccess(res.returnMsg)
 			// 通知列表刷新数据
-			uni.$emit('ReloadProcessData', '测试$emit');
+			uni.$emit('ReloadProcessData');
 			setTimeout(() => {
 				// 返回上一页
 				$tab.navigateBack();