// 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,
loading: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,
loading:false,
},
{
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天以后员工缴纳社保`,
loading:true,
},
],
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,
loading:false,
},
{
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天以后员工缴纳社保`,
loading:true,
},
],
sendText:''
});
setTimeout(()=>{
that.data.list.forEach(item => {
item.loading = false;
})
that.setData({
list:[
...that.data.list,
],
sendText:''
});
},300)
}
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)
// }
},
})