// subPage/chat/index.js var plugin = requirePlugin("WechatSI") let manager = plugin.getRecordRecognitionManager() Page({ /** * 页面的初始数据 */ data: { eventType:'input',// 底部事件类型 input 键盘输入,voice 语音输入 sendText:'',// 发送的输入框内容 voiceBtnText:'按住 说话', screenHeight:'0', list:[ { id:-1, type:'text', isUp:false, isDown:false, }, ], /* 录音状态 * -1 未录音, * 0 按下 * 1 长按事件 * 2 同意授权, * 3 拒绝授权, * 4 没有进行授权操作 * 5 开始录音 * 6 抬起并结束录音 * 7 超出操作范围,提示取消录音 * 8 录音异常 * 9 抬起 */ voiceSpeed:-1, }, /** * 生命周期函数--监听页面显示 */ onShow() { const res = wx.getSystemInfoSync(); console.log('设备数据',res); this.setData({ screenHeight: res.screenHeight + 'px', }); }, handleEvent(e) { let that = this; that.animate(); that.setData({ eventType: e.currentTarget.dataset.type == 'input' ? 'voice' : 'input', voiceSpeed:-1 }); if (that.data.eventType == 'voice') { // 检查是否有录音权限 wx.getSetting({ success(res) { if (!res.authSetting['scope.record']) { that.setData({ voiceSpeed:4 }); wx.authorize({ scope: 'scope.record', success() { console.log('录音权限已授权'); // 继续执行其他逻辑 that.setData({ voiceSpeed:2 }); }, fail() { console.log('录音权限未授权'); that.setData({ voiceSpeed:4 }); wx.showModal({ title: '提示', content: '需要录音权限才能使用语音输入功能,请在设置中授权。', confirmText: '去设置', cancelText: '取消', success(res) { if (res.confirm) { wx.openSetting({ success(res) { console.log('用户打开设置', res.authSetting); if (res.authSetting['scope.record']) { console.log('用户已授权录音权限'); // 用户授权后可以继续执行其他逻辑 that.setData({ voiceSpeed:2 }); } else { console.log('用户未授权录音权限'); // 用户未授权录音权限后的逻辑 that.setData({ voiceSpeed:3 }); } } }); } else if (res.cancel) { console.log('用户取消授权'); // 用户取消授权后的逻辑 that.setData({ voiceSpeed:3 }); } } }); } }); } else { console.log('录音权限已授权'); // 继续执行其他逻辑 that.setData({ voiceSpeed:2 }); } } }); } }, handleUp(e){ let that = this; that.animate(); const list = [...that.data.list]; const index = e.currentTarget.dataset.index; list[index].isUp = !list[index].isUp; that.setData({ list: list }); }, handleDown(e){ let that = this; that.animate(); const list = [...that.data.list]; const index = e.currentTarget.dataset.index; list[index].isDown = !list[index].isDown; that.setData({ list: list }); }, handleCopy(e){ let that = this; that.animate(); const index = e.currentTarget.dataset.index; let content = that.data.list[index].content; // 获取要复制的内容 if(index == 0){ content = "Hi,我是大鹏,你的智能工作助理。以后找工作不用跟老板谈了,直接来跟大鹏谈。来说说你的要求,我们开始吧…" } wx.setClipboardData({ data: content, success: function (res) { wx.showToast({ title: '复制成功', icon: 'success', duration: 2000 }); }, fail: function (res) { wx.showToast({ title: '复制失败', icon: 'none', duration: 2000 }); } }); }, handleShare(){ let that = this; that.animate(); }, handleInput(e){ let that = this; that.setData({ sendText:e.detail.value }); }, animate($type='light') { wx.vibrateShort({ type:$type }); }, // 文本消息发送 handleSend(){ let that = this; if(that.data.sendText == ''){ wx.showToast({ title: '请输入内容', icon: 'none', }); return false; } that.animate(); that.setData({ list:[ ...that.data.list, { id:that.data.list.length, type:'text', isUp:false, isDown:false, content:that.data.sendText }, { id:that.data.list.length + 1, type:'html', isUp:false, isDown:false, content:`【北京奔驰连接器日结工】

🚻 男女 18-48, 18-48周岁, 男女不限, 要求26个英文字母, 纹身烟疤拍照确认, 黑户,明显纹身,临时身份证不予接收,两班倒,站班

💰 员工250元/天,支付60天;60天以后员工220元/天;每月10号发薪。培训工资100元/天,员工 16 元/时以上部分含税6个点的,打卡不满七天无工资;60天以后员工缴纳社保` }, ], sendText:'' }); }, /** * 语音消息发送 */ handleTouchStart: function(event) { console.log('手指按下事件触发'); let that = this; that.setData({ voiceSpeed: 0 // 假设 0 表示按下 }); }, handleLongPress: function(event) { let that = this; console.log('长按事件触发'); that.setData({ voiceSpeed:1 }); manager.start({duration:30000, lang: "zh_CN"}) // 处理长按事件的逻辑 manager.onStart = function(res) { that.setData({ voiceSpeed:5 }); console.log("成功开始录音识别", res) } }, handleTouchEnd: function(event) { console.log('手指抬起事件触发',this.data.voiceSpeed); let that = this; if(that.data.voiceSpeed >= 1){ that.animate(); that.data.sendText = '模拟语音转文本'; that.setData({ list:[ ...that.data.list, { id:that.data.list.length, type:'text', isUp:false, isDown:false, content:that.data.sendText }, { id:that.data.list.length + 1, type:'html', isUp:false, isDown:false, content:`【北京奔驰连接器日结工】

🚻 男女 18-48, 18-48周岁, 男女不限, 要求26个英文字母, 纹身烟疤拍照确认, 黑户,明显纹身,临时身份证不予接收,两班倒,站班

💰 员工250元/天,支付60天;60天以后员工220元/天;每月10号发薪。培训工资100元/天,员工 16 元/时以上部分含税6个点的,打卡不满七天无工资;60天以后员工缴纳社保` }, ], sendText:'' }); } that.setData({ voiceSpeed:9 }); // 处理手指抬起事件的逻辑 manager.stop(); manager.onStop = function(res) { that.setData({ voiceSpeed:6 }); console.log("监听录音结束 ;临时路径record file path", res.tempFilePath) console.log("监听录音结束 结果result", res.result) } // manager.onError = function(res) { // that.setData({ // voiceSpeed:8 // }); // console.error("监听录音异常 error msg", res.msg) // } }, })