From 7b8ee3dc751b9e3bfcb37ad86fae5c2dc64c704f Mon Sep 17 00:00:00 2001 From: "lj7788@126.com" Date: Tue, 2 Sep 2025 17:55:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E7=AB=AF=E8=80=83=E5=8B=A4?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yanzhu-ui-app/miniprogram/app.wxss | 6 ++ .../miniprogram/images/svg/select.svg | 1 + .../miniprogram/images/svg/switch.svg | 1 + .../mobile_attendance/attendance/add/index.js | 53 +++++--------- .../attendance/add/index.json | 4 +- .../attendance/add/index.wxml | 19 ++++- .../attendance/add/index.wxss | 32 ++++++++- .../attendance/list/index.js | 72 +++++++++++++++++-- .../attendance/list/index.wxml | 16 ++++- .../attendance/list/index.wxss | 4 ++ .../attendance_config/add/index.js | 13 ++++ .../attendance_config/add/index.wxml | 2 +- yanzhu-ui-app/miniprogram/utils/distance.wxs | 24 +++++++ yanzhu-ui-app/miniprogram/utils/location.js | 34 +++++++++ 14 files changed, 231 insertions(+), 50 deletions(-) create mode 100644 yanzhu-ui-app/miniprogram/images/svg/select.svg create mode 100644 yanzhu-ui-app/miniprogram/images/svg/switch.svg create mode 100644 yanzhu-ui-app/miniprogram/utils/distance.wxs create mode 100644 yanzhu-ui-app/miniprogram/utils/location.js 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 @@ + @@ -15,7 +16,7 @@ - + @@ -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, +};