Merge branch 'cyl/develop' into develop

cyl/develop
jscyl13849007907 12 months ago
commit d9a9973cfc

@ -85,7 +85,8 @@
"pages/creatorSelectPage/index", "pages/creatorSelectPage/index",
"components/chat/text", "components/chat/text",
"components/chat/hello", "components/chat/hello",
"components/chat/html" "components/chat/html",
"components/chat/loading"
], ],
"permission": { "permission": {
"scope.userLocation": { "scope.userLocation": {
@ -120,7 +121,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",

@ -0,0 +1,66 @@
// components/chat/loading.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,3 @@
{
"usingComponents": {}
}

@ -0,0 +1,6 @@
<!--components/chat/loading.wxml-->
<view class="loader">
<view class="dot"></view>
<view class="dot"></view>
<view class="dot"></view>
</view>

@ -0,0 +1 @@
/* components/chat/loading.wxss */

@ -1,4 +1,6 @@
// subPage/chat/index.js // subPage/chat/index.js
var plugin = requirePlugin("WechatSI")
let manager = plugin.getRecordRecognitionManager()
Page({ Page({
/** /**
@ -7,80 +9,117 @@ Page({
data: { data: {
eventType:'input',// 底部事件类型 input 键盘输入voice 语音输入 eventType:'input',// 底部事件类型 input 键盘输入voice 语音输入
sendText:'',// 发送的输入框内容 sendText:'',// 发送的输入框内容
voiceBtnText:'按住 说话',
screenHeight:'0',
list:[ list:[
{ {
id:-1, id:-1,
type:'text', type:'text',
isUp:false, isUp:false,
isDown:false, isDown:false,
loading: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 +177,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 +184,6 @@ Page({
}, },
// 文本消息发送 // 文本消息发送
handleSend(){ handleSend(){
let that = this; let that = this;
@ -167,17 +203,103 @@ Page({
type:'text', type:'text',
isUp:false, isUp:false,
isDown:false, isDown:false,
content:that.data.sendText content:that.data.sendText,
loading:false,
}, },
{ {
id:that.data.list.length + 1, id:that.data.list.length + 1,
type:'html', type:'html',
isUp:false, isUp:false,
isDown:false, isDown:false,
content:`【北京奔驰连接器日结工】<br /><br />🚻 男女 18-48 18-48周岁 男女不限, 要求26个英文字母 纹身烟疤拍照确认, 黑户,明显纹身,临时身份证不予接收,两班倒,站班<br /><br />💰 员工250元/天支付60天60天以后员工220元/天每月10号发薪。培训工资100元/天,员工 16 元/时以上部分含税6个点的打卡不满七天无工资60天以后员工缴纳社保` content:`【北京奔驰连接器日结工】<br /><br />🚻 男女 18-48 18-48周岁 男女不限, 要求26个英文字母 纹身烟疤拍照确认, 黑户,明显纹身,临时身份证不予接收,两班倒,站班<br /><br />💰 员工250元/天支付60天60天以后员工220元/天每月10号发薪。培训工资100元/天,员工 16 元/时以上部分含税6个点的打卡不满七天无工资60天以后员工缴纳社保`,
loading:true,
}, },
], ],
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,
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)
// }
},
}) })

@ -2,6 +2,7 @@
"usingComponents": { "usingComponents": {
"hello-panel": "../../components/chat/hello", "hello-panel": "../../components/chat/hello",
"text-panel": "../../components/chat/text", "text-panel": "../../components/chat/text",
"html-panel": "../../components/chat/html" "html-panel": "../../components/chat/html",
"loading-panel": "../../components/chat/loading"
} }
} }

@ -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}}"
@ -19,10 +19,11 @@
<hello-panel /> <hello-panel />
</view> </view>
<view wx:if="{{index % 2 == 0 && index != 0}}" <view wx:if="{{index % 2 == 0 && index != 0}}"
class="bg-obj g_flex_row_start min80" class="{{!item.loading ? 'bg-obj' : ''}} g_flex_row_start min80"
> >
<text-panel message="{{item.content}}" color="cblack" wx:if="{{item.type == 'text'}}" /> <text-panel message="{{item.content}}" color="cblack" wx:if="{{item.type == 'text' && !item.loading}}" />
<html-panel message="{{item.content}}" color="cblack" wx:if="{{item.type == 'html'}}" /> <html-panel message="{{item.content}}" color="cblack" wx:if="{{item.type == 'html' && !item.loading}}" />
<loading-panel wx:if="{{item.loading}}" />
</view> </view>
<view wx:if="{{index % 2 == 1}}" <view wx:if="{{index % 2 == 1}}"
class="main-obj g_flex_row_end max80" class="main-obj g_flex_row_end max80"
@ -30,7 +31,7 @@
<text-panel message="{{item.content}}" color="cwhite" /> <text-panel message="{{item.content}}" color="cwhite" />
</view> </view>
</view> </view>
<view class="item-opera g_flex_row_between" wx:if="{{index % 2 == 0}}"> <view class="item-opera g_flex_row_between" wx:if="{{index % 2 == 0 && !item.loading}}">
<view class="g_flex_row_start"> <view class="g_flex_row_start">
<i class="iconfont icon-useful era-icon g_mr_12 {{item.isUp ? 'icon-active' : ''}}" <i class="iconfont icon-useful era-icon g_mr_12 {{item.isUp ? 'icon-active' : ''}}"
data-up="{{item.isUp}}" data-up="{{item.isUp}}"
@ -60,9 +61,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 +88,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>

@ -63,7 +63,6 @@
} }
.p-home-chat .chat-operate .m-input .voice-box{ .p-home-chat .chat-operate .m-input .voice-box{
padding: 0 12px; padding: 0 12px;
width: 100%;
text-align: center; text-align: center;
font-size: 17px; font-size: 17px;
font-weight: 700; font-weight: 700;
@ -251,3 +250,11 @@ 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