diff --git a/app.json b/app.json
index 1709046..f5a114d 100644
--- a/app.json
+++ b/app.json
@@ -120,7 +120,12 @@
"navigationBarTitleText": "Weixin",
"navigationBarTextStyle": "black"
},
- "plugins": {},
+ "plugins": {
+ "WechatSI": {
+ "version": "0.3.1",
+ "provider": "wx069ba97219f66d99"
+ }
+ },
"tabBar": {
"custom": true,
"color": "#444",
diff --git a/project.config.json b/project.config.json
index 858bc26..577cad2 100644
--- a/project.config.json
+++ b/project.config.json
@@ -44,7 +44,7 @@
"tabIndent": "insertSpaces",
"tabSize": 2
},
- "appid": "wxb0dea4d11428c6a5",
+ "appid": "wxe431e0b3abd9ae0b",
"packOptions": {
"ignore": [],
"include": []
diff --git a/subPage/chat/index.js b/subPage/chat/index.js
index 22eb28f..e72611a 100644
--- a/subPage/chat/index.js
+++ b/subPage/chat/index.js
@@ -1,4 +1,6 @@
// subPage/chat/index.js
+var plugin = requirePlugin("WechatSI")
+let manager = plugin.getRecordRecognitionManager()
Page({
/**
@@ -7,6 +9,8 @@ Page({
data: {
eventType:'input',// 底部事件类型 input 键盘输入,voice 语音输入
sendText:'',// 发送的输入框内容
+ voiceBtnText:'按住 说话',
+ screenHeight:'0',
list:[
{
id:-1,
@@ -14,73 +18,107 @@ Page({
isUp: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() {
-
- },
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide() {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload() {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh() {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom() {
-
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage() {
-
+ const res = wx.getSystemInfoSync();
+ console.log('设备数据',res);
+ this.setData({
+ screenHeight: res.screenHeight + 'px',
+ });
},
-
- handleEvent(e){
+ handleEvent(e) {
let that = this;
that.animate();
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){
let that = this;
@@ -138,7 +176,6 @@ Page({
sendText:e.detail.value
});
},
-
animate($type='light') {
wx.vibrateShort({
type:$type
@@ -146,8 +183,6 @@ Page({
},
-
-
// 文本消息发送
handleSend(){
let that = this;
@@ -179,5 +214,76 @@ Page({
],
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)
+ // }
+ },
})
\ No newline at end of file
diff --git a/subPage/chat/index.wxml b/subPage/chat/index.wxml
index 7e5b73e..4c16ed8 100644
--- a/subPage/chat/index.wxml
+++ b/subPage/chat/index.wxml
@@ -1,7 +1,7 @@
-
-
+
-
@@ -85,12 +87,17 @@
value="{{sendText}}"
/>
-
- 按住 说话
+
+ {{ voiceBtnText }}
-
diff --git a/subPage/chat/index.wxss b/subPage/chat/index.wxss
index 09e3c42..cade518 100644
--- a/subPage/chat/index.wxss
+++ b/subPage/chat/index.wxss
@@ -250,4 +250,12 @@ textarea {
}
.max80{
max-width: 80vw;
+}
+
+
+.voice-click{
+ background-color: #1677ff !important;
+}
+.voice-click .event-icon,.voice-click .send-icon{
+ opacity: 0;
}
\ No newline at end of file