cyl/develop
jscyl13849007907 12 months ago
parent 5db162ff3d
commit 9578268c1a

@ -120,7 +120,12 @@
"navigationBarTitleText": "Weixin", "navigationBarTitleText": "Weixin",
"navigationBarTextStyle": "black" "navigationBarTextStyle": "black"
}, },
"plugins": {}, "plugins": {
"WechatSI": {
"version": "0.3.1",
"provider": "wx069ba97219f66d99"
}
},
"tabBar": { "tabBar": {
"custom": true, "custom": true,
"color": "#444", "color": "#444",

@ -44,7 +44,7 @@
"tabIndent": "insertSpaces", "tabIndent": "insertSpaces",
"tabSize": 2 "tabSize": 2
}, },
"appid": "wxb0dea4d11428c6a5", "appid": "wxe431e0b3abd9ae0b",
"packOptions": { "packOptions": {
"ignore": [], "ignore": [],
"include": [] "include": []

@ -1,4 +1,6 @@
// subPage/chat/index.js // subPage/chat/index.js
var plugin = requirePlugin("WechatSI")
let manager = plugin.getRecordRecognitionManager()
Page({ Page({
/** /**
@ -7,6 +9,8 @@ Page({
data: { data: {
eventType:'input',// 底部事件类型 input 键盘输入voice 语音输入 eventType:'input',// 底部事件类型 input 键盘输入voice 语音输入
sendText:'',// 发送的输入框内容 sendText:'',// 发送的输入框内容
voiceBtnText:'按住 说话',
screenHeight:'0',
list:[ list:[
{ {
id:-1, id:-1,
@ -14,73 +18,107 @@ Page({
isUp:false, isUp:false,
isDown:false, isDown:false,
}, },
] ],
/*
* -1 未录音
* 0 按下
* 1 长按事件
* 2 同意授权
* 3 拒绝授权
* 4 没有进行授权操作
* 5 开始录音
* 6 抬起并结束录音
* 7 超出操作范围提示取消录音
* 8 录音异常
* 9 抬起
*/
voiceSpeed:-1,
}, },
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
wx.setNavigationBarTitle({
title: options.title,
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/** /**
* 生命周期函数--监听页面显示 * 生命周期函数--监听页面显示
*/ */
onShow() { onShow() {
const res = wx.getSystemInfoSync();
}, console.log('设备数据',res);
this.setData({
/** screenHeight: res.screenHeight + 'px',
* 生命周期函数--监听页面隐藏 });
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}, },
handleEvent(e) {
handleEvent(e){
let that = this; let that = this;
that.animate(); that.animate();
that.setData({ that.setData({
eventType:e.currentTarget.dataset.type == 'input' ? 'voice':'input' 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){ handleUp(e){
let that = this; let that = this;
@ -138,7 +176,6 @@ Page({
sendText:e.detail.value sendText:e.detail.value
}); });
}, },
animate($type='light') { animate($type='light') {
wx.vibrateShort({ wx.vibrateShort({
type:$type type:$type
@ -146,8 +183,6 @@ Page({
}, },
// 文本消息发送 // 文本消息发送
handleSend(){ handleSend(){
let that = this; let that = this;
@ -179,5 +214,76 @@ Page({
], ],
sendText:'' 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:`【北京奔驰连接器日结工】<br /><br />🚻 男女 18-48 18-48周岁 男女不限, 要求26个英文字母 纹身烟疤拍照确认, 黑户,明显纹身,临时身份证不予接收,两班倒,站班<br /><br />💰 员工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)
// }
},
}) })

@ -1,7 +1,7 @@
<view class="p-home-chat g_h_all g_flex_column_between"> <view class="p-home-chat g_h_all g_flex_column_between">
<scroll-view scroll-y="{{true}}" <scroll-view scroll-y
class="chat-content g_flex_column_end g_flex_1" class="chat-content g_flex_column_end g_flex_1"
style="height:calc(100vh - 92px);overflow:auto;" style="height:{{screenHeight}}"
> >
<view class="chat-card" <view class="chat-card"
wx:for="{{list}}" wx:for="{{list}}"
@ -60,9 +60,11 @@
</view> </view>
</scroll-view> </scroll-view>
<view class="chat-operate g_flex_none"> <view class="chat-operate g_flex_none">
<view class="m-input g_flex_row_between"> <view class="m-input g_flex_row_between {{voiceSpeed == 0 || voiceSpeed == 1 || voiceSpeed == 5 ? 'voice-click' : ''}}"
data-speed="{{voiceSpeed}}"
>
<!-- 左 --> <!-- 左 -->
<view class="g_flex_none g_flex_column_center" <view class="g_flex_none g_flex_column_center event-icon"
data-type="{{eventType}}" data-type="{{eventType}}"
bindtap="handleEvent" bindtap="handleEvent"
> >
@ -85,12 +87,17 @@
value="{{sendText}}" value="{{sendText}}"
/> />
</view> </view>
<view class="voice-box" wx:if="{{eventType == 'voice'}}"> <view class="voice-box" wx:if="{{eventType == 'voice'}}"
按住 说话 bindtouchstart="handleTouchStart"
bindtouchmove="handleTouchMove"
bindtouchend="handleTouchEnd"
bindlongpress="handleLongPress"
>
{{ voiceBtnText }}
</view> </view>
</view> </view>
<!-- 右 --> <!-- 右 -->
<view class="g_flex_none g_flex_column_center right-box g_text_l" <view class="g_flex_none g_flex_column_center right-box send-icon g_text_l"
bindtap="handleSend" bindtap="handleSend"
> >
<i class="iconfont icon-fasong1 icon {{sendText ? 'icon-active' : ''}} "></i> <i class="iconfont icon-fasong1 icon {{sendText ? 'icon-active' : ''}} "></i>

@ -250,4 +250,12 @@ textarea {
} }
.max80{ .max80{
max-width: 80vw; max-width: 80vw;
}
.voice-click{
background-color: #1677ff !important;
}
.voice-click .event-icon,.voice-click .send-icon{
opacity: 0;
} }
Loading…
Cancel
Save