diff --git a/yanzhu-ui-app/miniprogram/app.wxss b/yanzhu-ui-app/miniprogram/app.wxss
index a321bb8b..90405f0b 100644
--- a/yanzhu-ui-app/miniprogram/app.wxss
+++ b/yanzhu-ui-app/miniprogram/app.wxss
@@ -2058,4 +2058,10 @@ swiper-item video {
.txtb {
font-weight: 600;
+}
+.txt-blue{
+ color: #728ce3;
+}
+.inline-block{
+ display: inline-block;
}
\ No newline at end of file
diff --git a/yanzhu-ui-app/miniprogram/images/svg/select.svg b/yanzhu-ui-app/miniprogram/images/svg/select.svg
new file mode 100644
index 00000000..3357f227
--- /dev/null
+++ b/yanzhu-ui-app/miniprogram/images/svg/select.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/yanzhu-ui-app/miniprogram/images/svg/switch.svg b/yanzhu-ui-app/miniprogram/images/svg/switch.svg
new file mode 100644
index 00000000..a1340663
--- /dev/null
+++ b/yanzhu-ui-app/miniprogram/images/svg/switch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.js b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.js
index 3c227a58..8156faf5 100644
--- a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.js
+++ b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.js
@@ -14,6 +14,7 @@ Page({
initData: {},
type: "",
cfgData: null,
+ arrSel: "in",
},
/**
@@ -26,6 +27,11 @@ Page({
});
}
const proUserInfo = getUserInfo();
+
+ // 根据当前时间设置arrSel的值:14点前为in,14点后为out
+ const now = new Date();
+ const arrSel = now.getHours() < 14 ? "in" : "out";
+
this.setData({
projectUserInfo: proUserInfo.projectUserInfo,
projectId: app.globalData.useProjectId,
@@ -35,6 +41,7 @@ Page({
text: app.globalData.useProjectName,
},
type: options.type,
+ arrSel: arrSel,
});
if (options.id) {
this.loadData(options.id);
@@ -42,53 +49,25 @@ Page({
app.toast("参数错误!");
this.returnToPage();
}
+ //todo 14点前 arrSel=in,之后arrSel=out
},
loadData(id) {
- getMobileAttendanceConfigById(id).then((res) => {
- if (res.code == 200) {
+ try {
+ let cfgData = wx.getStorageSync("editAttCfg");
+ if (cfgData) {
this.setData({
- cfgData: res.data,
+ cfgData: cfgData,
});
} else {
app.toast("参数错误!");
this.returnToPage();
}
- });
+ } catch (e) {
+ app.toast("参数错误!");
+ this.returnToPage();
+ }
},
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady() {},
- /**
- * 生命周期函数--监听页面显示
- */
- onShow() {},
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide() {},
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload() {},
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh() {},
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom() {},
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage() {},
onProjectSelect(e) {
let projectId = e.detail.id;
let projectName = e.detail.text;
diff --git a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.json b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.json
index 92ba48c4..d865d890 100644
--- a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.json
+++ b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.json
@@ -1,5 +1,7 @@
{
- "usingComponents": {},
+ "usingComponents": {
+ "svg-icon": "/pageage/components/svg-icon/index"
+ },
"navigationStyle": "custom",
"styleIsolation": "apply-shared",
"backgroundColor": "#191d28"
diff --git a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.wxml b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.wxml
index 629e3d7d..d0f32eec 100644
--- a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.wxml
+++ b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.wxml
@@ -9,11 +9,28 @@
-
+
+
+
+
+
+ 请选择考勤方向
+
+
+
+
+ 上班考勤打卡
+
+
+
+ 下班考勤打卡
+
+
+
\ No newline at end of file
diff --git a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.wxss b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.wxss
index 3b61e270..90c858bf 100644
--- a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.wxss
+++ b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/add/index.wxss
@@ -1 +1,31 @@
-/* pageage/mobile_attendance/attendance_config/info/index.wxss */
\ No newline at end of file
+.content_box{
+ padding:20rpx 40rpx;
+}
+.content_box_title{
+ display: flex;
+ align-items: center;
+}
+
+.arrow_content{
+ display: flex;
+}
+
+.arrow_box{
+ background-color: #ccc;
+ width:45%;
+ margin:0 5%;
+ position: relative;
+ display: flex;
+ align-items: center;
+}
+.arrow_box .img-sel{
+ position: absolute;
+ left: 50%;
+ margin-left:-20rpx;
+ top: 20rpx;
+}
+
+.arrow_box view{
+ height: 120rpx;
+ line-height: 120rpx;
+}
\ No newline at end of file
diff --git a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.js b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.js
index 618e4b87..646fb50a 100644
--- a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.js
+++ b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.js
@@ -1,5 +1,6 @@
import { getToken, getUserInfo } from "../../../../utils/auth.js";
import { getMobileAttendanceConfig } from "../../../../api/project.js";
+import { calculateDistance } from "../../../../utils/location.js";
const app = getApp();
@@ -8,13 +9,16 @@ Page({
* 页面的初始数据
*/
data: {
- projectUserInfo: {},
projectUserInfo: {},
projectId: "",
projectName: "",
initData: {},
total: 0,
listData: [],
+ userLongitude: undefined,
+ userLatitude: undefined,
+ pageNum: 1,
+ pageSize: 10,
},
/**
@@ -36,8 +40,31 @@ Page({
text: app.globalData.useProjectName,
},
});
- this.getListData();
+ // 先获取用户位置,再获取列表数据
+ this.getUserLocation();
},
+
+ /**
+ * 获取用户当前位置
+ */
+ getUserLocation() {
+ wx.getLocation({
+ type: "gcj02", // 使用国测局坐标
+ success: (res) => {
+ this.setData({
+ userLongitude: res.longitude,
+ userLatitude: res.latitude,
+ });
+ this.getListData();
+ },
+ fail: (err) => {
+ console.error("获取位置失败", err);
+ // 即使获取位置失败,也继续加载列表数据
+ this.getListData();
+ },
+ });
+ },
+
getListData() {
let postData = {
pageNum: this.data.pageNum,
@@ -47,30 +74,63 @@ Page({
};
getMobileAttendanceConfig(postData).then((res) => {
if (res.code == 200) {
+ let tmps = (res.rows || []).map((it) => {
+ // 如果有用户位置信息,则计算距离,否则设置为-1
+ if (
+ this.data.userLongitude !== undefined &&
+ this.data.userLatitude !== undefined
+ ) {
+ it.distance = calculateDistance(
+ this.data.userLongitude,
+ this.data.userLatitude,
+ it.longitude,
+ it.latitude
+ );
+ } else {
+ it.distance = -1; // 无法计算距离
+ }
+ return it;
+ });
this.setData({
total: res.total,
- listData: this.data.listData.concat(res.rows),
+ listData: this.data.listData.concat(tmps),
});
}
});
},
+ getInfo(e) {
+ let cfgData = e.currentTarget.dataset.set;
+ wx.setStorageSync("editAttCfg", cfgData);
+ wx.redirectTo({
+ url: `../add/index?type=att&id=${cfgData.id}`,
+ });
+ },
+ getDistance(longitude, latitude) {
+ // 现在这个方法不再需要,因为距离计算已经在getListData中完成
+ // 但为了保持接口兼容性,如果需要可以返回已计算的距离
+ const item = this.data.listData.find(
+ (it) => it.longitude === longitude && it.latitude === latitude
+ );
+ return item ? item.distance : -1;
+ },
//项目切换 返回值
onProjectSelect(e) {
let projectId = e.detail.id;
let projectName = e.detail.text;
app.globalData.useProjectId = projectId;
app.globalData.useProjectName = projectName;
- this.onLoad();
+ // 项目切换后重新获取用户位置和列表数据
+ this.getUserLocation();
},
returnToPage: function () {
/*关闭当前页面,跳转到其它页面。*/
if (wx.getStorageSync("nav-menu") == "xmgl") {
wx.redirectTo({
- url: "../../project_more/index",
+ url: "../../../project_more/index",
});
} else {
wx.redirectTo({
- url: "../../project_quality/index",
+ url: "../../../project_quality/index",
});
}
},
diff --git a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.wxml b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.wxml
index 86b973ed..11f12876 100644
--- a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.wxml
+++ b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.wxml
@@ -1,4 +1,5 @@
+
-
+
@@ -39,12 +40,16 @@
{{
index < 10 ? "0" + (index + 1) : index + 1 }}
-
+
+ 距离:
+
+
+
-
+
考勤标题:
@@ -62,6 +67,11 @@
考勤位置:
{{item.address}}
+
+ 距离:
+
+
+
diff --git a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.wxss b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.wxss
index 3cf4beb7..c1842a31 100644
--- a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.wxss
+++ b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance/list/index.wxss
@@ -25,4 +25,8 @@
.left-img{
position: relative;
top:36rpx;
+}
+.module_title{
+ flex-grow: 1;
+ text-align: right;
}
\ No newline at end of file
diff --git a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance_config/add/index.js b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance_config/add/index.js
index 7425313c..479f9e54 100644
--- a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance_config/add/index.js
+++ b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance_config/add/index.js
@@ -108,6 +108,9 @@ Page({
cfgData: cfgData,
form: form,
});
+ } else {
+ app.toast("参数错误!");
+ this.returnToPage();
}
} catch (e) {
app.toast("参数错误!");
@@ -560,6 +563,8 @@ Page({
ajax.then((res) => {
if (res.code == 200) {
app.toast("保存成功!");
+ // 清除editAttCfg
+ wx.removeStorageSync("editAttCfg");
this.doBack(true);
} else {
app.toast("保存失败,请重试");
@@ -665,4 +670,12 @@ Page({
});
}
},
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+ // 页面卸载时清除editAttCfg
+ wx.removeStorageSync("editAttCfg");
+ },
});
diff --git a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance_config/add/index.wxml b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance_config/add/index.wxml
index 755fbad6..9697cfc1 100644
--- a/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance_config/add/index.wxml
+++ b/yanzhu-ui-app/miniprogram/pageage/mobile_attendance/attendance_config/add/index.wxml
@@ -64,7 +64,7 @@
指定考勤班组
+ index="3" title="{{form.groupNames?form.groupNames:'请选择考勤班组'}}" choose="{{form.groupNames}}">
diff --git a/yanzhu-ui-app/miniprogram/utils/distance.wxs b/yanzhu-ui-app/miniprogram/utils/distance.wxs
new file mode 100644
index 00000000..f8e6ce93
--- /dev/null
+++ b/yanzhu-ui-app/miniprogram/utils/distance.wxs
@@ -0,0 +1,24 @@
+var formatDistance = function (distance) {
+ if (distance < 0) {
+ return "无法计算";
+ }
+
+ if (distance > 1000) {
+ // 保留两位小数
+ var km = (distance / 1000).toString();
+ var dotIndex = km.indexOf(".");
+ if (dotIndex !== -1) {
+ var decimalPart = km.substring(dotIndex + 1);
+ if (decimalPart.length > 2) {
+ km = km.substring(0, dotIndex + 3);
+ }
+ }
+ return km + ' km';
+ } else {
+ return distance + ' m';
+ }
+};
+
+module.exports = {
+ formatDistance: formatDistance,
+};
diff --git a/yanzhu-ui-app/miniprogram/utils/location.js b/yanzhu-ui-app/miniprogram/utils/location.js
new file mode 100644
index 00000000..e74b058b
--- /dev/null
+++ b/yanzhu-ui-app/miniprogram/utils/location.js
@@ -0,0 +1,34 @@
+/**
+ * 计算两点间距离(单位:米)
+ * @param {number} lon1 - 第一个点的经度
+ * @param {number} lat1 - 第一个点的纬度
+ * @param {number} lon2 - 第二个点的经度
+ * @param {number} lat2 - 第二个点的纬度
+ * @returns {number} 两点间距离(米)
+ */
+function calculateDistance(lon1, lat1, lon2, lat2) {
+ // 将角度转换为弧度
+ const radLat1 = (lat1 * Math.PI) / 180.0;
+ const radLat2 = (lat2 * Math.PI) / 180.0;
+ const deltaRadLat = radLat1 - radLat2;
+ const deltaRadLon = ((lon1 - lon2) * Math.PI) / 180.0;
+
+ // Haversine公式计算距离
+ const a =
+ Math.sin(deltaRadLat / 2) * Math.sin(deltaRadLat / 2) +
+ Math.cos(radLat1) *
+ Math.cos(radLat2) *
+ Math.sin(deltaRadLon / 2) *
+ Math.sin(deltaRadLon / 2);
+ const b = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+
+ // 地球半径(米)
+ const earthRadius = 6371000;
+ const distance = earthRadius * b;
+
+ return Math.round(distance);
+}
+
+module.exports = {
+ calculateDistance: calculateDistance,
+};