2025.03.15 工作代码提交

This commit is contained in:
sx 2025-03-15 18:11:53 +08:00
parent fdee18b7f8
commit cc9578f3eb
10 changed files with 594 additions and 581 deletions

View File

@ -130,6 +130,7 @@ export const news = {
method: 'POST',
data: param.data,
query: param.query,
load: true,
})
},
@ -139,7 +140,7 @@ export const news = {
url: `/user/getRedPacketInfo`,
method: 'GET',
query: param.query,
load: 1,
load: true,
})
},
@ -150,6 +151,7 @@ export const news = {
method: 'POST',
data: param.data,
query: param.query,
load: true,
})
},
@ -219,7 +221,7 @@ export const news = {
})
},
// 客服发消息
sendCusomterService(param) {
return util.request({

View File

@ -7,7 +7,6 @@ const config = {
// #endif
// #ifndef H5
host: 'http://91f.xyz:8080',
// host: 'http://762c9b48.r24.cpolar.top',
// #endif
// 是否vivo显示
showVivo: true,

View File

@ -134,7 +134,7 @@ const util = {
reject(res)
},
complete(rs) {
console.log('upload complete', rs)
// console.log('upload complete', rs)
}
})
})
@ -213,7 +213,7 @@ const util = {
responseType: params.responseType || 'text',
// 请求成功返回
success: res => {
// console.log('request success', url, res, params.data ? params.data : '')
console.log('request success', url, res, params.data ? params.data : '')
// 关闭加载效果
if (params.load) {
uni.hideLoading()
@ -602,6 +602,7 @@ const util = {
count: obj.type == 1 ? 1 : count - obj.value.length,
sourceType: obj.sourceType || ['album', 'camera'],
success: (rs) => {
console.log('rs', rs)
// 遍历图片返回列表
rs.tempFiles.forEach(item => {
// 限制大小
@ -615,6 +616,7 @@ const util = {
file: item.path,
mode: 'img',
success(res) {
console.log('upload res', res)
if (res.code === 200) {
uni.getImageInfo({
src: item.path,
@ -625,6 +627,7 @@ const util = {
width: imageInfo.width,
height: imageInfo
.height,
size: item.size,
});
},
})

View File

@ -114,8 +114,11 @@
res.forEach(item => {
let obj = {}
obj.type = item.type;
obj.chatText = item.lastMessage.messageForShow;
//
obj.chatText = item.lastMessage.messageForShow
if (obj.chatText == "[自定义消息]") obj.chatText = item.lastMessage.payload.description || '[自定义消息]'
obj.MsgTime = handleDate(item.lastMessage.lastTime);
//
obj.unreadCount = item.unreadCount;
if (item.type == 'C2C') {

View File

@ -149,24 +149,28 @@
uni.offKeyboardHeightChange(() => {})
// #endif
videoContext.value.stop()
//
removeListener()
})
//
function addListener() {
let onMessageReceived = function(event) {
console.log('TencentCloudChat.EVENT.MESSAGE_RECEIVED', event)
setTimeout(() => {
//
getHistory({
msgId: '',
limit: 1,
})
}, 200)
//
list.messageList.push(...event.data)
}
uni.$chat.on(TencentCloudChat.EVENT.MESSAGE_RECEIVED, onMessageReceived);
}
//
function removeListener() {
let onMessageReceived = function(event) {}
uni.$chat.off(TencentCloudChat.EVENT.MESSAGE_RECEIVED, onMessageReceived);
}
//
function onContentScroll(ev) {
if (ev.scrollTop == 50) getMoreHistroy()
@ -177,18 +181,26 @@
//
function handleSend() {
//
if (!content.value) {
util.alert('消息不能为空')
return
}
//
inputFocus.value = false
//
let message = uni.$chat.createTextMessage({
to: msg.id,
conversationType: msg.type,
payload: {
text: content.value
},
})
//
sendMsg({
query: {
formId: userinfo.value.id,
toUserId: msg.id,
msgType: TencentCloudChat.TYPES.MSG_TEXT,
},
data: {
text: content.value
},
message,
success: () => {
//
content.value = ''
@ -202,7 +214,9 @@
* @param {Object} message 消息对象
*/
function handlePlusSend(message) {
sendMsg(message)
sendMsg({
message
})
}
/**
@ -210,22 +224,13 @@
* @param {Object} param
*/
function sendMsg(param) {
//
let request = api.news.sendUserMsg
//
if (msg.type == 'GROUP') request = api.news.sendGroupMsg
// if (msg.isCustomer) request = api.news.sendCusomterService
console.log('sendMsg', param.message)
//
request({
query: param.query,
data: param.data,
}).then((rs) => {
if (rs.code == 200) {
// getHistory({
// msgId: '',
// limit: 1,
// })
uni.$chat.sendMessage(param.message).then((rs) => {
console.log('send success', rs)
if (rs.code == 0) {
//
list.messageList.push(rs.data.message)
param.success ? param.success() : ''
return
}
@ -240,14 +245,14 @@
/**
* 打开红包详情
* @param {Object} ev
* @param {Object} event 默认事件
*/
function handleRedPacket(ev) {
messageItem.value = ev
function handleRedPacket(event) {
console.log('event', event)
api.news.getRedPacketInfo({
query: {
// id
redPacketId: ev.callbackData.callback_json[0].businessId
redPacketId: event.formatData.id,
}
}).then(rs => {
if (rs.code == 200) {
@ -310,10 +315,9 @@
//
function getMoreHistroy() {
//
if (list.total <= list.data.length) return
// if(list.isCompleted) return
getHistory({
msgId: list.data[0].id
msgId: list.messageList[0].ID
})
}
@ -558,15 +562,15 @@
<view class="tool bfff" id="tool">
<view class="tool-group">
<!-- 摁住说话 -->
<!-- 语音 -->
<image src="/static/news-voice.png" mode="widthFix" class="thumb" @click="handleTool('voice')"></image>
<!-- 摁住说话 -->
<template v-if="toolStatus == 'voice'">
<JyVoice @send="voiceSend" :msg="msg" />
</template>
<!-- 输入框 -->
<template v-if="toolStatus != 'voice'">
<uni-easyinput @focus="onFocus" type="text" v-model="content" :clearable="false" class="input"
<uni-easyinput @focus="onFocus" type="text" v-model.trim="content" :clearable="false" class="input"
:adjust-position="false" @keyboardheightchange="keyboardheightchange" placeholder="请输入你的问题"
confirmType="发送" :focus="inputFocus" />
</template>

View File

@ -11,6 +11,9 @@
computed,
defineEmits,
} from 'vue'
//
import util from '@/common/js/util';
import NewsAudio from '@/static/audio.png'
import JyCommodityInformation from '@/components/public/jy-commodity-information'
const props = defineProps({
@ -30,7 +33,11 @@
const store = useStore()
const emit = defineEmits(['openRedBag', 'viewVideo'])
//
const formatData = computed(() => props.item)
const formatData = computed(() => {
let result = props.item.payload.data || ''
if (result) result = JSON.parse(result)
return result
})
//
const innerAudioContext = uni.createInnerAudioContext();
//
@ -41,10 +48,7 @@
})
}
//
const userinfo = computed(() => {
let result = store.state.userinfo
return result
})
const userinfo = computed(() => store.state.userinfo)
//
function handleCall() {
@ -58,20 +62,34 @@
//
function handleOpenRedBag() {
emit('openRedBag', props.item)
emit('openRedBag', {
item: props.item,
formatData: formatData.value,
})
}
//
function handleViewVideo(item) {
emit('viewVideo', item)
}
/**
* 看图片
* @param {Object} urls 图片路径数组
*/
function handleViewImage(urls) {
uni.previewImage({
urls,
})
}
</script>
<template>
<view class="content pr">
<!-- 图片 -->
<template v-if="item.type === TencentCloudChat.TYPES.MSG_IMAGE">
<image class="br10" :src="formatData.MsgContent.ImageInfoArray[0].URL" mode="widthFix" />
<image class="br10" :src="item.payload.imageInfoArray[0].imageUrl" mode="widthFix"
@click="util.view_imgs([item.payload.imageInfoArray[0].imageUrl],0)" />
</template>
<!-- 文字 -->
<template v-else-if="item.type === TencentCloudChat.TYPES.MSG_TEXT">
@ -140,12 +158,12 @@
<!-- 红包 -->
<view class="redPacket br10" :class="{'disabled': 0}" @click="handleOpenRedBag">
<view class="df aic">
<image class="img fs0 mr10" src="/static/image/pages/news/group/create.png" />
<view class="red-packet-text cfff">{{ formatData.data.blessing }}</view>
<image class="img fs0 mr10" src="/static/image/red-envelope.png" />
<view class="red-packet-text cfff">{{ formatData.blessing }}</view>
</view>
<!-- 分割线 -->
<view class="line"></view>
<view class="f20" style="color:#FBD3A4">{{ formatData.data.payType == 1 ? '余额红包' : '积分红包' }}
<view class="f20" style="color:#FBD3A4">{{ formatData.redPacketType == 1 ? '余额红包' : '积分红包' }}
</view>
</view>
</template>

View File

@ -18,7 +18,7 @@ export const getHistoryMsg = async (option) => {
nextReqMessageID: option.nextReqMessageID,
}
console.log('options', options);
console.log('getHistoryMsg', options);
return new Promise((resolve, reject) => {
uni.$chat.getMessageList(options).then((res) => {
resolve(res)

View File

@ -1,37 +1,40 @@
<script setup>
// +
//
import TencentCloudChat from '@tencentcloud/chat';
import {
ref,
reactive,
nextTick,
computed,
} from 'vue'
import {
screenHeight
} from '@/components/public/Mixins'
import JyCommodityInformation from '@/components/public/jy-commodity-information'
// api
import api from '@/api/index.js'
//
import util from '@/common/js/util.js'
import { inject } from 'vue'
// +
//
import TencentCloudChat from '@tencentcloud/chat';
import {
ref,
reactive,
nextTick,
computed,
} from 'vue'
import {
screenHeight
} from '@/components/public/Mixins'
import JyCommodityInformation from '@/components/public/jy-commodity-information'
// api
import api from '@/api/index.js'
//
import util from '@/common/js/util.js'
import {
inject
} from 'vue'
const { checkLink } = inject('util');
//
const props = defineProps({
msg: {
type: Object,
},
})
const {
checkLink
} = inject('util');
//
const props = defineProps({
msg: {
type: Object,
},
})
//
const emit = defineEmits(['plusClick', 'send'])
//
const plusList = computed(() => {
let result = [
{
//
const emit = defineEmits(['plusClick', 'send'])
//
const plusList = computed(() => {
let result = [{
type: 'picture.png',
label: '照片',
value: 'chooseImage',
@ -43,202 +46,184 @@ const plusList = computed(() => {
type: 'pages/news/group/create.png',
label: '红包',
value: 'redEnvelope',
}
]
}]
const isCustomer = props.msg.isCustomer;
const isCustomer = props.msg.isCustomer;
//
if (props.msg.type == 'C2C' && !isCustomer) result.push({
type: 'news-voice.png',
label: '音视频',
value: 'voice'
//
if (props.msg.type == 'C2C' && !isCustomer) result.push({
type: 'news-voice.png',
label: '音视频',
value: 'voice'
})
//
if (isCustomer) result.unshift({
type: 'order.png',
label: '订单',
value: 'chooseOrder',
}, {
type: 'shop.png',
label: '商品',
value: 'chooseShop',
})
return result
})
//
if (isCustomer) result.unshift({
type: 'order.png',
label: '订单',
value: 'chooseOrder',
}, {
type: 'shop.png',
label: '商品',
value: 'chooseShop',
const popupRef = ref(null)
const popupRE = ref(null)
const formData = reactive({
name: ''
})
return result
})
const popupRef = ref(null)
const popupRE = ref(null)
const formData = reactive({
name: ''
})
const popupData = reactive({
show: false,
title: '选择订单'
})
//
const list = reactive([])
//
const plusClickObj = {
voice: () => {
//
const menu = [{
name: '语音通话',
type: 1,
},
{
nanme: '视频通话',
type: 2,
}
]
uni.showActionSheet({
itemList: ['语音通话', '视频通话'],
success: rs => {
uni.$TUICallKit.call({
userID: props.msg.id,
callMediaType: menu[rs.tapIndex].type,
// callParams: {
// roomID: 234,
// strRoomID: '2323423',
// timeout: 30
// },
}, res => {
console.log('[TUICallKit] call params: ', JSON.stringify(res));
});
}
})
},
//
chooseOrder: () => {
let param = {
pageSize: 10,
pageNum: 1,
merId: props.msg.id,
}
api.shop.getShopOrderList(param).then(rs => {
if (rs.code == 200) {
list.length = 0
list.push(...rs.rows.map(item => {
//
item.status = Number(item.status)
//
item.status_text = {
'0': '待支付',
'1': '待发货',
'4': '待收货',
'5': '已收货',
'6': '已完成',
'9': '已取消',
}[item.status]
return item
}))
nextTick().then(() => {
popupRef.value.open()
});
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
},
//
chooseShop: () => {
uni.navigateTo({
url: `/pages/news/goodsList/index?merId=${props.msg.id}`
});
},
//
redEnvelope() {
uni.navigateTo({
url: util.setUrl('/pages/news/redPacket', {
//
msgId: props.msg.id,
//
sendType: {
'C2C': 1,
'GROUP': 2,
}[props.msg.type],
num: props.msg.num,
})
})
// popupRE.value.open()
},
//
takePhoto: () => {
console.log('takePhoto')
sendMsgImg({
sourceType: ['album'],
})
},
//
chooseImage: () => {
console.log('chooseImage')
sendMsgImg({
sourceType: ['album'],
})
}
}
//
function sendMsgImg(option) {
util.upload_image({
count: 1,
type: 1,
success: rs => {
emit('send', {
query: {
toUserId: props.msg.id,
msgType: TencentCloudChat.TYPES.MSG_IMAGE,
},
data: {
imgUrl: rs.value
},
})
}
const popupData = reactive({
show: false,
title: '选择订单'
})
return
//
uni.chooseImage({
count: 1,
sourceType: option.sourceType, //
success: (res) => {
let message = uni.$chat.createImageMessage({
to: props.msg.id,
conversationType: props.msg.type,
payload: {
file: res
//
const list = reactive([])
//
const plusClickObj = {
voice: () => {
//
const menu = [{
name: '语音通话',
type: 1,
},
onProgress: function (event) {
console.log('file uploading:', event)
{
nanme: '视频通话',
type: 2,
}
]
uni.showActionSheet({
itemList: ['语音通话', '视频通话'],
success: rs => {
uni.$TUICallKit.call({
userID: props.msg.id,
callMediaType: menu[rs.tapIndex].type,
// callParams: {
// roomID: 234,
// strRoomID: '2323423',
// timeout: 30
// },
}, res => {
console.log('[TUICallKit] call params: ', JSON.stringify(res));
});
}
})
return
}
});
}
},
//
const consult = (content) => {
let obj = {
content,
type: 'order'
//
chooseOrder: () => {
let param = {
pageSize: 10,
pageNum: 1,
merId: props.msg.id,
}
api.shop.getShopOrderList(param).then(rs => {
if (rs.code == 200) {
list.length = 0
list.push(...rs.rows.map(item => {
//
item.status = Number(item.status)
//
item.status_text = {
'0': '待支付',
'1': '待发货',
'4': '待收货',
'5': '已收货',
'6': '已完成',
'9': '已取消',
} [item.status]
return item
}))
nextTick().then(() => {
popupRef.value.open()
});
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
},
//
chooseShop: () => {
uni.navigateTo({
url: `/pages/news/goodsList/index?merId=${props.msg.id}`
});
},
//
redEnvelope() {
uni.navigateTo({
url: util.setUrl('/pages/news/redPacket', {
//
msgId: props.msg.id,
//
sendType: {
'C2C': 1,
'GROUP': 2,
} [props.msg.type],
num: props.msg.num,
})
})
// popupRE.value.open()
},
//
takePhoto: () => {
console.log('takePhoto')
sendMsgImg({
sourceType: ['camera'],
})
},
//
chooseImage: () => {
console.log('chooseImage')
sendMsgImg({
sourceType: ['album'],
})
}
}
//
function sendMsgImg(option) {
uni.chooseImage({
count: 8,
sourceType: option.sourceType,
success: res => {
console.log('res', res)
//
let message = uni.$chat.createImageMessage({
to: props.msg.id,
conversationType: props.msg.type,
payload: {
file: res,
},
})
emit('send', message)
return
}
})
}
//
const consult = (content) => {
let obj = {
content,
type: 'order'
}
popupRef.value.close()
}
popupRef.value.close()
}
</script>
<template>
@ -280,65 +265,65 @@ const consult = (content) => {
</template>
<style scoped lang="scss">
.NewsPlus {
//
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 20rpx;
.NewsPlus {
//
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 20rpx;
.imageBox {
background-color: #fff;
border-radius: 20rpx;
.imageBox {
background-color: #fff;
border-radius: 20rpx;
}
}
}
.jy-popup {
width: 100%;
border-radius: 20px 20px 0px 0px;
.title {
.jy-popup {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
padding: 20rpx 0;
//
color: #3D3D3D;
font-size: 32rpx;
}
border-radius: 20px 20px 0px 0px;
.close-btn {
position: absolute;
top: 40rpx;
right: 40rpx;
height: 52rpx;
line-height: 52rpx;
width: 52rpx;
background: #D8D8D8;
color: #999999;
font-size: 30rpx;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
transform: translate(50%, -50%);
}
.title {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
padding: 20rpx 0;
//
color: #3D3D3D;
font-size: 32rpx;
}
.input-view {
//
border-top: 1px solid #E5E5E5;
border-bottom: 1px solid #E5E5E5;
padding: 20rpx;
}
.close-btn {
position: absolute;
top: 40rpx;
right: 40rpx;
height: 52rpx;
line-height: 52rpx;
width: 52rpx;
background: #D8D8D8;
color: #999999;
font-size: 30rpx;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
transform: translate(50%, -50%);
}
.easyinput {
flex: 1;
}
.input-view {
//
border-top: 1px solid #E5E5E5;
border-bottom: 1px solid #E5E5E5;
padding: 20rpx;
}
.time {
padding: 24rpx 20rpx 0 20rpx;
font-size: 22rpx;
color: #3D3D3D;
.easyinput {
flex: 1;
}
.time {
padding: 24rpx 20rpx 0 20rpx;
font-size: 22rpx;
color: #3D3D3D;
}
}
}
</style>

View File

@ -16,274 +16,274 @@
</template>
<script setup>
import {
ref,
defineEmits
} from 'vue'
//
import TencentCloudChat from '@tencentcloud/chat';
const props = defineProps({
msg: {
type: Object
},
})
const emit = defineEmits(['send'])
//
// #ifdef APP-PLUS
const recorderManager = uni.getRecorderManager();
// #endif
//
const voiceLength = ref(0);
//
const voiceTimer = ref(null);
//
const voiceText = ref('按住 说话');
//
const voiceTis = ref('手指上滑 取消发送');
//
const voiceFlg = ref(false);
// Y
const voicePageY = ref(0);
//
const voiceStop = ref(false);
const str = '';
//
const sv = {
//
touchstartVoice: (e) => {
voicePageY.value = (e.changedTouches[0].pageY).toFixed(2);
recorderManager.start({
duration: 60000, // ms 60000010
sampleRate: 44100, //
numberOfChannels: 1, //
encodeBitRate: 192000, //
format: "mp3"
});
voiceLength.value = 0;
voiceFlg.value = true
console.log('recorder start success');
//,
voiceTimer.value = setInterval(() => {
voiceLength.value += 0.1;
}, 100);
import {
ref,
defineEmits
} from 'vue'
//
import TencentCloudChat from '@tencentcloud/chat';
const props = defineProps({
msg: {
type: Object
},
})
const emit = defineEmits(['send'])
//
// #ifdef APP-PLUS
const recorderManager = uni.getRecorderManager();
// #endif
//
const voiceLength = ref(0);
//
const voiceTimer = ref(null);
//
const voiceText = ref('按住 说话');
//
const voiceTis = ref('手指上滑 取消发送');
//
const voiceFlg = ref(false);
// Y
const voicePageY = ref(0);
//
const voiceStop = ref(false);
const str = '';
//
const sv = {
//
touchstartVoice: (e) => {
voicePageY.value = (e.changedTouches[0].pageY).toFixed(2);
recorderManager.start({
duration: 60000, // ms 60000010
sampleRate: 44100, //
numberOfChannels: 1, //
encodeBitRate: 192000, //
format: "mp3"
});
voiceLength.value = 0;
voiceFlg.value = true
console.log('recorder start success');
//,
voiceTimer.value = setInterval(() => {
voiceLength.value += 0.1;
}, 100);
console.log('touchstartVoice', voicePageY.value);
},
//
touchmoveVoice: (e) => {
// UI
if (!voiceFlg.value) {
return;
}
let numTemp = voicePageY.value - ((e.changedTouches[0].pageY).toFixed(2));
if (numTemp >= 60) {
console.log('取消发送');
voiceStop.value = true
voiceTis.value = '松开手指 取消发送'
} else {
console.log('继续发送');
voiceStop.value = false
voiceTis.value = '手指上滑 取消发送'
}
},
//
touchendVoice: () => {
// UI
if (!voiceFlg.value) {
return;
}
clearInterval(voiceTimer.value);
voiceText.value = '按住 说话'
voiceTis.value = "手指上滑 取消发送"
console.log('touchendVoice');
sv.stop();
},
//
touchcancelVoice: () => {
clearInterval(voiceTimer.value);
// UI
voiceText.value = '按住 说话'
voiceTis.value = "手指上滑 取消发送"
//
voiceStop.value = true
console.log('touchcancelVoice');
sv.stop();
},
stop: () => {
voiceTimer.value = null;
voiceFlg.value = false
recorderManager.stop(); //
console.log('录音结束');
}
};
// #ifdef APP-PLUS
//
recorderManager.onStop((res) => {
//
if (voiceStop.value) {
return
}
//
if (voiceStop.value) {
uni.showToast({
icon: "none",
title: "取消发送",
duration: 2000
})
return
}
if (voiceLength.value < 1) {
uni.showToast({
icon: "none",
title: "语音时长过短",
duration: 2000
})
return
}
if (voiceLength.value > 60) {
uni.showToast({
icon: "none",
title: "语音时长过长",
duration: 2000
})
return
}
console.log('file', res)
try {
let message = uni.$chat.createAudioMessage({
to: props.msg.id,
conversationType: props.msg.type,
payload: {
file: res
},
//
onProgress: function (event) {
console.log('file uploading:', event)
console.log('touchstartVoice', voicePageY.value);
},
//
touchmoveVoice: (e) => {
// UI
if (!voiceFlg.value) {
return;
}
})
let obj = {
query: {
toUserId: message.to,
formId: message.from,
msgType: message.type,
},
data: message
let numTemp = voicePageY.value - ((e.changedTouches[0].pageY).toFixed(2));
if (numTemp >= 60) {
console.log('取消发送');
voiceStop.value = true
voiceTis.value = '松开手指 取消发送'
} else {
console.log('继续发送');
voiceStop.value = false
voiceTis.value = '手指上滑 取消发送'
}
},
//
touchendVoice: () => {
// UI
if (!voiceFlg.value) {
return;
}
clearInterval(voiceTimer.value);
voiceText.value = '按住 说话'
voiceTis.value = "手指上滑 取消发送"
console.log('touchendVoice');
sv.stop();
},
//
touchcancelVoice: () => {
clearInterval(voiceTimer.value);
// UI
voiceText.value = '按住 说话'
voiceTis.value = "手指上滑 取消发送"
//
voiceStop.value = true
console.log('touchcancelVoice');
sv.stop();
},
stop: () => {
voiceTimer.value = null;
voiceFlg.value = false
recorderManager.stop(); //
console.log('录音结束');
}
emit('send', obj)
} catch (e) {
console.log('message catch', e)
}
//
};
// #ifdef APP-PLUS
//
recorderManager.onStop((res) => {
//
if (voiceStop.value) {
return
}
//
if (voiceStop.value) {
uni.showToast({
icon: "none",
title: "取消发送",
duration: 2000
})
return
}
if (voiceLength.value < 1) {
uni.showToast({
icon: "none",
title: "语音时长过短",
duration: 2000
})
return
}
if (voiceLength.value > 60) {
uni.showToast({
icon: "none",
title: "语音时长过长",
duration: 2000
})
return
}
console.log('file', res)
})
// #endif
try {
let message = uni.$chat.createAudioMessage({
to: props.msg.id,
conversationType: props.msg.type,
payload: {
file: res
},
//
onProgress: function(event) {
console.log('file uploading:', event)
}
})
let obj = {
query: {
toUserId: message.to,
formId: message.from,
msgType: message.type,
},
data: message
}
emit('send', obj)
} catch (e) {
console.log('message catch', e)
}
//
})
// #endif
</script>
<style scoped lang="scss">
.voice_box {
padding: 20rpx 0;
margin: 0 20rpx;
border-radius: 50rpx;
background: #fff;
flex: 1;
display: flex;
align-items: center;
justify-content: center;
}
.hidden {
display: none !important;
}
.record {
width: 40vw;
height: 40vw;
position: fixed;
top: 55%;
left: 30%;
background-color: rgba(0, 0, 0, .6);
border-radius: 20rpx;
.ing {
width: 100%;
height: 30vw;
.voice_box {
padding: 20rpx 0;
margin: 0 20rpx;
border-radius: 50rpx;
background: #fff;
flex: 1;
display: flex;
justify-content: center;
align-items: center;
//
@keyframes volatility {
0% {
background-position: 0% 130%;
}
20% {
background-position: 0% 150%;
}
30% {
background-position: 0% 155%;
}
40% {
background-position: 0% 150%;
}
50% {
background-position: 0% 145%;
}
70% {
background-position: 0% 150%;
}
80% {
background-position: 0% 155%;
}
90% {
background-position: 0% 140%;
}
100% {
background-position: 0% 135%;
}
}
background-image: linear-gradient(to bottom, #f09b37, #fff 50%);
background-size: 100% 200%;
animation: volatility 1.5s ease-in-out -1.5s infinite alternate;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 150rpx;
color: #f09b37;
justify-content: center;
}
.cancel {
width: 100%;
height: 30vw;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-size: 150rpx;
.hidden {
display: none !important;
}
.tis {
width: 100%;
height: 10vw;
display: flex;
justify-content: center;
font-size: 28rpx;
color: #fff;
.record {
width: 40vw;
height: 40vw;
position: fixed;
top: 55%;
left: 30%;
background-color: rgba(0, 0, 0, .6);
border-radius: 20rpx;
&.change {
.ing {
width: 100%;
height: 30vw;
display: flex;
justify-content: center;
align-items: center;
//
@keyframes volatility {
0% {
background-position: 0% 130%;
}
20% {
background-position: 0% 150%;
}
30% {
background-position: 0% 155%;
}
40% {
background-position: 0% 150%;
}
50% {
background-position: 0% 145%;
}
70% {
background-position: 0% 150%;
}
80% {
background-position: 0% 155%;
}
90% {
background-position: 0% 140%;
}
100% {
background-position: 0% 135%;
}
}
background-image: linear-gradient(to bottom, #f09b37, #fff 50%);
background-size: 100% 200%;
animation: volatility 1.5s ease-in-out -1.5s infinite alternate;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 150rpx;
color: #f09b37;
}
.cancel {
width: 100%;
height: 30vw;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-size: 150rpx;
}
.tis {
width: 100%;
height: 10vw;
display: flex;
justify-content: center;
font-size: 28rpx;
color: #fff;
&.change {
color: #f09b37;
}
}
}
}
</style>

View File

@ -4,7 +4,6 @@ import {
import uni from '@dcloudio/vite-plugin-uni';
let target = 'http://91f.xyz:8080'
// let target = 'http://762c9b48.r24.cpolar.top'
export default defineConfig({
plugins: [uni()],