You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bocai_supplyChain/subPage/chat/index.js

302 lines
8.6 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 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,
},
],
voiceSpeed:-1,
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
const res = wx.getSystemInfoSync();
console.log('设备数据',res);
this.setData({
screenHeight: (res.screenHeight - 92) + '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:`【北京奔驰连接器日结工】<br /><br />🚻 男女 18-48 18-48周岁 男女不限, 要求26个英文字母 纹身烟疤拍照确认, 黑户,明显纹身,临时身份证不予接收,两班倒,站班<br /><br />💰 员工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,
],
});
},300)
},
/**
* 语音消息发送
*/
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:`【北京奔驰连接器日结工】<br /><br />🚻 男女 18-48 18-48周岁 男女不限, 要求26个英文字母 纹身烟疤拍照确认, 黑户,明显纹身,临时身份证不予接收,两班倒,站班<br /><br />💰 员工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)
// }
},
})