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
jiuyi2
api
common/js
components/news
pages/news/chat
vite.config.js

View File

@ -130,6 +130,7 @@ export const news = {
method: 'POST', method: 'POST',
data: param.data, data: param.data,
query: param.query, query: param.query,
load: true,
}) })
}, },
@ -139,7 +140,7 @@ export const news = {
url: `/user/getRedPacketInfo`, url: `/user/getRedPacketInfo`,
method: 'GET', method: 'GET',
query: param.query, query: param.query,
load: 1, load: true,
}) })
}, },
@ -150,6 +151,7 @@ export const news = {
method: 'POST', method: 'POST',
data: param.data, data: param.data,
query: param.query, query: param.query,
load: true,
}) })
}, },

View File

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

View File

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

View File

@ -114,8 +114,11 @@
res.forEach(item => { res.forEach(item => {
let obj = {} let obj = {}
obj.type = item.type; 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.MsgTime = handleDate(item.lastMessage.lastTime);
//
obj.unreadCount = item.unreadCount; obj.unreadCount = item.unreadCount;
if (item.type == 'C2C') { if (item.type == 'C2C') {

View File

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

View File

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

View File

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

View File

@ -16,9 +16,13 @@ import JyCommodityInformation from '@/components/public/jy-commodity-information
import api from '@/api/index.js' import api from '@/api/index.js'
// //
import util from '@/common/js/util.js' import util from '@/common/js/util.js'
import { inject } from 'vue' import {
inject
} from 'vue'
const { checkLink } = inject('util'); const {
checkLink
} = inject('util');
// //
const props = defineProps({ const props = defineProps({
msg: { msg: {
@ -30,8 +34,7 @@ const props = defineProps({
const emit = defineEmits(['plusClick', 'send']) const emit = defineEmits(['plusClick', 'send'])
// //
const plusList = computed(() => { const plusList = computed(() => {
let result = [ let result = [{
{
type: 'picture.png', type: 'picture.png',
label: '照片', label: '照片',
value: 'chooseImage', value: 'chooseImage',
@ -43,8 +46,7 @@ const plusList = computed(() => {
type: 'pages/news/group/create.png', type: 'pages/news/group/create.png',
label: '红包', label: '红包',
value: 'redEnvelope', value: 'redEnvelope',
} }]
]
const isCustomer = props.msg.isCustomer; const isCustomer = props.msg.isCustomer;
@ -180,7 +182,7 @@ const plusClickObj = {
takePhoto: () => { takePhoto: () => {
console.log('takePhoto') console.log('takePhoto')
sendMsgImg({ sendMsgImg({
sourceType: ['album'], sourceType: ['camera'],
}) })
}, },
@ -195,40 +197,23 @@ const plusClickObj = {
// //
function sendMsgImg(option) { 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
},
})
}
})
return
//
uni.chooseImage({ uni.chooseImage({
count: 1, count: 8,
sourceType: option.sourceType, // sourceType: option.sourceType,
success: (res) => { success: res => {
console.log('res', res)
//
let message = uni.$chat.createImageMessage({ let message = uni.$chat.createImageMessage({
to: props.msg.id, to: props.msg.id,
conversationType: props.msg.type, conversationType: props.msg.type,
payload: { payload: {
file: res file: res,
}, },
onProgress: function (event) {
console.log('file uploading:', event)
}
}) })
emit('send', message)
return return
} }
}); })
} }
// //

View File

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