同步小程序与管理端更新,完善抽烟记录和解绑冷静期

This commit is contained in:
2026-10-09 22:15:51 +08:00
parent a68a4ef411
commit b10fc3c4ac
149 changed files with 3794 additions and 589 deletions
+35
View File
@@ -0,0 +1,35 @@
const { api } = require('./request');
let pending = null;
let cached = null;
let cachedAt = 0;
let user = null;
function address(value) {
const text = String(value || '').trim();
return /^-?\d+(\.\d+)?,\s*-?\d+(\.\d+)?$/.test(text) ? '' : text;
}
async function currentUserLocation() {
const uid = wx.getStorageSync('userId');
if (user !== uid) { user = uid; pending = null; cached = null; cachedAt = 0; }
if (cached && Date.now() - cachedAt < 45000) return { ...cached };
if (pending) return pending;
const task = (async () => {
let coords = { lat: 0, lng: 0 };
try {
if (wx.getFuzzyLocation) coords = await new Promise(resolve => wx.getFuzzyLocation({ type: 'gcj02', success: res => resolve({lat: res.latitude, lng: res.longitude}), fail: () => resolve(coords) }));
const result = await api.updateIpLocation(coords);
if (address(result && result.location)) return { ...coords, location: address(result.location) };
} catch (error) {}
try {
const info = await api.coupleInfo();
const me = [info.partner1, info.partner2].find(partner => partner && String(partner.id) === String(uid));
return { ...coords, location: address(me && me.location) };
} catch (error) { return { ...coords, location: '' }; }
})();
pending = task;
try {
const result = await task;
if (user === uid && pending === task && result.location) { cached = result; cachedAt = Date.now(); }
return result;
} finally { if (pending === task) pending = null; }
}
module.exports = { currentUserLocation };