Page({ /** * 页面的初始数据 */ data: { noticeDetail: { content: '' }, phoneNumbers: [] // 存储提取出的电话号码 }, // 处理电话号码,将电话号码转换为可点击的链接 processPhoneNumbers: function(content) { if (!content) return ''; // 匹配带区号的固定电话号码(如:0516-87030707)和手机号码 const phoneRegex = /(?:0\d{2,3}-\d{7,8}|1[3-9]\d{9})/g; const phoneNumbers = []; // 将内容中的电话号码替换为蓝色文本 let processedContent = content; // 找到所有匹配的电话号码,从后向前替换,避免位置变化 const matches = []; let match; while ((match = phoneRegex.exec(content)) !== null) { matches.push({ text: match[0], index: match.index, length: match[0].length }); } // 从后向前替换,避免索引变化 for (let i = matches.length - 1; i >= 0; i--) { const matchInfo = matches[i]; const phoneText = matchInfo.text; const cleanNumber = phoneText.replace(/-/g, ''); // 保存电话号码信息 phoneNumbers.unshift({ phoneText: phoneText, cleanNumber: cleanNumber }); // 替换为带颜色的HTML const before = processedContent.substring(0, matchInfo.index); const after = processedContent.substring(matchInfo.index + matchInfo.length); processedContent = before + `${phoneText}` + after; } this.setData({ phoneNumbers: phoneNumbers }); return processedContent; }, // 处理电话号码点击事件 handlePhoneTap: function(e) { // 获取点击的位置 const touchX = e.detail.x; const touchY = e.detail.y; // 获取保存的电话号码 const phoneNumbers = this.data.phoneNumbers; if (phoneNumbers && phoneNumbers.length > 0) { // 弹出操作菜单让用户选择 wx.showActionSheet({ itemList: phoneNumbers.map(item => `拨打: ${item.phoneText}`), success: (res) => { if (res.tapIndex >= 0) { const selectedPhone = phoneNumbers[res.tapIndex].cleanNumber; wx.makePhoneCall({ phoneNumber: selectedPhone, fail: (err) => { } }); } } }); } }, onLoad: function (options) { const app = getApp(); // 从全局数据中获取用户须知信息 const userNotices = app.globalData.currentAccountInfo?.userNotices || ''; // 处理电话号码 const processedContent = this.processPhoneNumbers(userNotices); this.setData({ 'noticeDetail.content': processedContent }); }, /** * 返回上一页 */ goBack: function() { wx.navigateBack(); }, })