Compare commits

..

No commits in common. "d7c813977d156cde492b2175c03e2b743cae9ea2" and "ba52f9a576786699b2afadfbdcc5e774fccf938b" have entirely different histories.

15 changed files with 342 additions and 849 deletions

View File

@ -45,12 +45,3 @@ export const ServeTalkDate = (data) => {
data, data,
}) })
} }
//获取会话Id
export const ServeGetSessionId = (data) => {
return request({
url: '/api/v1/talk/session/getId',
method: 'POST',
data,
})
}

View File

@ -21,20 +21,9 @@
<script setup> <script setup>
import { defineProps, defineEmits, reactive, watch } from 'vue' import { defineProps, defineEmits, reactive, watch } from 'vue'
const props = defineProps({ const props = defineProps({
searchText: { searchText: String,
type: String, first_talk_record_infos: Object,
default: '' disabled: Boolean,
},
first_talk_record_infos: {
type: Object,
default(){
return {}
}
},
disabled: {
type: Boolean,
default: false
},
}) })
const state = reactive({ const state = reactive({
searchText: '', // searchText: '', //

View File

@ -25,33 +25,33 @@ const getFileTypeIMG = computed(() => {
let objT = { let objT = {
finishedImg: '', finishedImg: '',
blankImg: '', blankImg: '',
progressColor: '', progressColor: ''
} };
switch (suffix) { switch (suffix) {
case 'pdf': case 'pdf':
objT.finishedImg = filePaperPDF objT.finishedImg = filePaperPDF
objT.blankImg = filePaperPDFBlank objT.blankImg = filePaperPDFBlank
objT.progressColor = '#DE4E4E' objT.progressColor = '#DE4E4E'
break break;
case 'doc': case 'doc':
case 'docx': case 'docx':
objT.finishedImg = filePaperWord objT.finishedImg = filePaperWord
objT.blankImg = filePaperWordBlank objT.blankImg = filePaperWordBlank
objT.progressColor = '#2750B2' objT.progressColor = '#2750B2'
break break;
case 'xls': case 'xls':
case 'xlsx': case 'xlsx':
objT.finishedImg = filePaperExcel objT.finishedImg = filePaperExcel
objT.blankImg = filePaperExcelBlank objT.blankImg = filePaperExcelBlank
objT.progressColor = '#3C7F4B' objT.progressColor = '#3C7F4B'
break break;
case 'ppt': case 'ppt':
case 'pptx': case 'pptx':
objT.finishedImg = filePaperPPT objT.finishedImg = filePaperPPT
objT.blankImg = filePaperPPTBlank objT.blankImg = filePaperPPTBlank
objT.progressColor = '#B74B2B' objT.progressColor = '#B74B2B'
break break;
default: default:
objT.finishedImg = filePaperOther objT.finishedImg = filePaperOther
objT.blankImg = filePaperOtherBlank objT.blankImg = filePaperOtherBlank
@ -60,92 +60,34 @@ const getFileTypeIMG = computed(() => {
return objT return objT
}) })
const previewPDF = () => {
if (typeof plus !== 'undefined') {
downloadAndOpenFile()
} else {
document.addEventListener('plusready', () => {
downloadAndOpenFile()
})
}
}
const downloadAndOpenFile = () => {
uni.showLoading({ title: '加载中...', mask: true })
const downloadUrl = props?.extra?.path
if (!downloadUrl) {
uni.hideLoading()
uni.showToast({ title: '文件路径无效', icon: 'none' })
return
}
const options = {
filename: '_doc/downloads/', //
}
const dtask = plus.downloader.createDownload(downloadUrl, options, function (
d,
status,
) {
if (status === 200) {
uni.hideLoading()
const filePath = d.filename
if (filePath) {
plus.runtime.openFile(filePath, {}, function () {})
} else {
uni.showToast({ title: '文件路径无效', icon: 'none' })
}
} else {
uni.hideLoading()
}
})
dtask.start()
}
</script> </script>
<template> <template>
<section <section
class="file-message" class="file-message"
@click="previewPDF"
:class="{ left: data.float === 'left', right: data.float === 'right' }" :class="{ left: data.float === 'left', right: data.float === 'right' }"
> >
<div class="flex justify-between"> <div class="flex justify-between">
<div <div class="w-[228rpx] text-[32rpx] text-[#1A1A1A] h-[88rpx] leading-[44rpx] textEllipsis file_name">
class="w-[228rpx] text-[32rpx] text-[#1A1A1A] h-[88rpx] leading-[44rpx] textEllipsis file_name"
>
{{ extra.name }} {{ extra.name }}
</div> </div>
<div <div v-if="data.uploadStatus === 2 || !data.uploadStatus" class="w-[95rpx]">
v-if="data.uploadStatus === 2 || !data.uploadStatus" <tm-image :width="95" :height="95" :src="getFileTypeIMG.finishedImg"></tm-image>
class="w-[95rpx]"
>
<tm-image
:width="95"
:height="95"
:src="getFileTypeIMG.finishedImg"
></tm-image>
</div> </div>
<div <div v-if="data.uploadStatus === 1 || data.uploadStatus === 3" class="w-[95rpx]">
v-if="data.uploadStatus === 1 || data.uploadStatus === 3" <tm-image :width="95" :height="95" :src="getFileTypeIMG.blankImg"></tm-image>
class="w-[95rpx]" <wd-circle
> customClass="circleProgress"
<tm-image :modelValue="data.uploadCurrent"
:width="95" layerColor="#E3E3E3"
:height="95" :color="getFileTypeIMG.progressColor"
:src="getFileTypeIMG.blankImg" :strokeWidth="3"
></tm-image> :size="20"
<wd-circle ></wd-circle>
customClass="circleProgress"
:modelValue="data.uploadCurrent"
layerColor="#E3E3E3"
:color="getFileTypeIMG.progressColor"
:strokeWidth="3"
:size="20"
></wd-circle>
</div> </div>
</div> </div>
<div class="divider mt-[28rpx]"></div> <div class="divider mt-[28rpx]"></div>
<div class="text-[24rpx] text-[#747474] mt-[10rpx]"> <div class="text-[24rpx] text-[#747474] mt-[10rpx]">{{ fileFormatSize(extra.size) }}</div>
{{ fileFormatSize(extra.size) }}
</div>
<!-- <div class="main"> <!-- <div class="main">
<div class="ext">{{ getFileNameSuffix(extra.name) }}</div> <div class="ext">{{ getFileNameSuffix(extra.name) }}</div>
<div class="file-box"> <div class="file-box">
@ -182,11 +124,11 @@ const downloadAndOpenFile = () => {
border-radius: 16rpx 0 16rpx 16rpx; border-radius: 16rpx 0 16rpx 16rpx;
} }
.file_name { .file_name{
word-break: break-all; /* 在任意字符间断行 */ word-break: break-all; /* 在任意字符间断行 */
word-wrap: break-word; /* 允许长单词换行到下一行 */ word-wrap: break-word; /* 允许长单词换行到下一行 */
} }
.main { .main {
height: 45px; height: 45px;
display: flex; display: flex;
@ -275,7 +217,7 @@ const downloadAndOpenFile = () => {
} }
.divider { .divider {
background-color: #e7e7e7; background-color: #E7E7E7;
height: 1rpx; height: 1rpx;
} }

View File

@ -379,12 +379,6 @@ const handleClickItem = (item) => {
} }
return return
} }
if(props?.manageType === 'searchRecord'){
uni.navigateTo({
url: '/pages/search/searchByCondition/index?condition=member'
})
return
}
let itemList = dialogueParams.memberList let itemList = dialogueParams.memberList
if ( if (
props?.manageType === 'admin' && props?.manageType === 'admin' &&

View File

@ -96,9 +96,7 @@
</div> </div>
</div> </div>
<div class="chat-records-search chat-settings-card"> <div class="chat-records-search chat-settings-card">
<div @click="toSearchPage"> <customInput :disabled="true"></customInput>
<customInput :disabled="true"></customInput>
</div>
<div class="record-search-types"> <div class="record-search-types">
<div <div
class="record-search-types-each" class="record-search-types-each"
@ -153,10 +151,8 @@
@click="showConfirmPrompt(2)" @click="showConfirmPrompt(2)"
class="clear-chat-record-btn-each" class="clear-chat-record-btn-each"
v-if=" v-if="
groupParams?.groupInfo?.is_manager && groupParams?.groupInfo?.is_manager && dialogueParams.type === 2
dialogueParams.type === 2 && && (groupParams?.groupInfo?.group_type === 1 || groupParams?.groupInfo?.group_type === 3)
(groupParams?.groupInfo?.group_type === 1 ||
groupParams?.groupInfo?.group_type === 3)
" "
> >
<span class="text-[32rpx] font-regular"> <span class="text-[32rpx] font-regular">
@ -167,10 +163,8 @@
@click="showConfirmPrompt(3)" @click="showConfirmPrompt(3)"
class="clear-chat-record-btn-each" class="clear-chat-record-btn-each"
v-if=" v-if="
groupParams?.groupInfo?.is_manager && groupParams?.groupInfo?.is_manager && dialogueParams.type === 2
dialogueParams.type === 2 && && (groupParams?.groupInfo?.group_type === 1 || groupParams?.groupInfo?.group_type === 3)
(groupParams?.groupInfo?.group_type === 1 ||
groupParams?.groupInfo?.group_type === 3)
" "
> >
<span class="text-[32rpx] font-regular"> <span class="text-[32rpx] font-regular">
@ -505,7 +499,10 @@ const toSearchByConditionPage = (flag) => {
} }
uni.navigateTo({ uni.navigateTo({
url: url:
'/pages/search/searchByCondition/index?condition=' + condition '/pages/search/searchByCondition/index?condition=' +
condition +
'&receiver_id=' +
state.groupId,
}) })
} }
} }
@ -632,21 +629,6 @@ const inviteMembersInGroup = async (memberList) => {
} }
} }
} }
//
const toSearchPage = () => {
// uni.navigateTo({
// url:
// '/pages/search/searchByCondition/index?condition=text'
// })
uni.navigateTo({
url:
'/pages/search/moreResult/moreResultDetail?talk_type=' +
dialogueParams.type +
'&receiver_id=' +
dialogueParams.receiver_id,
})
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.outer-layer { .outer-layer {

View File

@ -1,39 +1,25 @@
<template> <template>
<div class="emojiRoot"> <div class="emojiRoot">
<div <div @click="()=>photoActionsSelect(0)" class="flex flex-col items-center">
@click="() => photoActionsSelect(0)" <div class="w-[106rpx] h-[106rpx] bg-[#F9F9F9] rounded-[60rpx] flex-center">
class="flex flex-col items-center"
>
<div
class="w-[106rpx] h-[106rpx] bg-[#F9F9F9] rounded-[60rpx] flex-center"
>
<tm-image :width="53" :height="44" :src="photoAlbum"></tm-image> <tm-image :width="53" :height="44" :src="photoAlbum"></tm-image>
</div> </div>
<div class="mt-[6rpx] text-[#666666] text-[24rpx]">照片</div> <div class="mt-[6rpx] text-[#666666] text-[24rpx]">照片</div>
</div> </div>
<div <div @click="()=>photoActionsSelect(1)" class="flex flex-col items-center">
@click="() => photoActionsSelect(1)" <div class="w-[106rpx] h-[106rpx] bg-[#F9F9F9] rounded-[60rpx] flex-center">
class="flex flex-col items-center"
>
<div
class="w-[106rpx] h-[106rpx] bg-[#F9F9F9] rounded-[60rpx] flex-center"
>
<tm-image :width="53" :height="44" :src="videoImg"></tm-image> <tm-image :width="53" :height="44" :src="videoImg"></tm-image>
</div> </div>
<div class="mt-[6rpx] text-[#666666] text-[24rpx]">视频</div> <div class="mt-[6rpx] text-[#666666] text-[24rpx]">视频</div>
</div> </div>
<div @click="takePhoto" class="flex flex-col items-center"> <div @click="takePhoto" class="flex flex-col items-center">
<div <div class="w-[106rpx] h-[106rpx] bg-[#F9F9F9] rounded-[60rpx] flex-center">
class="w-[106rpx] h-[106rpx] bg-[#F9F9F9] rounded-[60rpx] flex-center"
>
<tm-image :width="53" :height="44" :src="photoGraph"></tm-image> <tm-image :width="53" :height="44" :src="photoGraph"></tm-image>
</div> </div>
<div class="mt-[6rpx] text-[#666666] text-[24rpx]">拍摄</div> <div class="mt-[6rpx] text-[#666666] text-[24rpx]">拍摄</div>
</div> </div>
<div @click="chooseFile" class="flex flex-col items-center"> <div @click="chooseFile" class="flex flex-col items-center">
<div <div class="w-[106rpx] h-[106rpx] bg-[#F9F9F9] rounded-[60rpx] flex-center">
class="w-[106rpx] h-[106rpx] bg-[#F9F9F9] rounded-[60rpx] flex-center"
>
<tm-image :width="53" :height="44" :src="folder"></tm-image> <tm-image :width="53" :height="44" :src="folder"></tm-image>
</div> </div>
<div class="mt-[6rpx] text-[#666666] text-[24rpx]">文件</div> <div class="mt-[6rpx] text-[#666666] text-[24rpx]">文件</div>
@ -41,15 +27,10 @@
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref, reactive, defineProps, defineEmits } from 'vue' import { ref, reactive, defineProps, defineEmits } from "vue"
import dayjs from 'dayjs' import dayjs from "dayjs";
import { beautifyTime } from '@/utils/datetime' import { beautifyTime } from '@/utils/datetime'
import { import { useDialogueListStore, useDialogueStore, useUserStore,useUploadsStore } from '@/store'
useDialogueListStore,
useDialogueStore,
useUserStore,
useUploadsStore,
} from '@/store'
import { useSessionMenu } from '@/hooks' import { useSessionMenu } from '@/hooks'
import photoAlbum from '@/static/image/chatList/photoAlbum.png' import photoAlbum from '@/static/image/chatList/photoAlbum.png'
import photoGraph from '@/static/image/chatList/photoGraph.png' import photoGraph from '@/static/image/chatList/photoGraph.png'
@ -62,34 +43,26 @@ const props = defineProps({
sendUserInfo: { sendUserInfo: {
type: Object, type: Object,
default: {}, default: {},
required: true, required: true
}, },
talkParams: { talkParams: {
type: Object, type: Object,
default: {}, default: {},
required: true, required: true
}, }
}) });
const state = reactive({
base64Url: ''
})
const uploadsStore = useUploadsStore() const uploadsStore = useUploadsStore()
const { const { addDialogueRecord, virtualList, updateUploadProgress } = useDialogueListStore()
addDialogueRecord,
virtualList,
updateUploadProgress,
} = useDialogueListStore()
const dialogueStore = useDialogueStore() const dialogueStore = useDialogueStore()
const userStore = useUserStore() const userStore = useUserStore()
const emit = defineEmits(['selectImg']) const emit = defineEmits(['selectImg'])
const onProgressFn = (progress, id) => { const onProgressFn = (progress, id) => {
console.log((progress.loaded / progress.total) * 100, 'progress') console.log(progress.loaded / progress.total * 100, 'progress');
updateUploadProgress(id, (progress.loaded / progress.total) * 100) updateUploadProgress(id, progress.loaded / progress.total * 100)
} }
const photoActionsSelect = (index) => { const photoActionsSelect = (index) => {
@ -98,31 +71,28 @@ const photoActionsSelect = (index) => {
sourceType: ['album'], sourceType: ['album'],
count: 9, count: 9,
success: async (res) => { success: async (res) => {
console.log(res, 'res') console.log(res,'res');
res.tempFiles.forEach(async (file) => { res.tempFiles.forEach(async (file) => {
let data = await onUploadImageVideo(file, 'image') let data = await onUploadImageVideo(file, 'image')
emit('selectImg', data, data.file_num) emit('selectImg', data, data.file_num)
}) })
}, }
}) })
} else { }else{
uni.chooseVideo({ uni.chooseVideo({
sourceType: ['album'], sourceType: ['album'],
success: async (res) => { success: async (res) => {
console.log(res, 'res') console.log(res,'res');
let data = await onUploadImageVideo( let data = await onUploadImageVideo(res.tempFile, 'video',res.tempFilePath)
res.tempFile,
'video',
res.tempFilePath,
)
emit('selectImg', data, data.file_num) emit('selectImg', data, data.file_num)
}, }
}) })
} }
} }
const onUploadImageVideo = async (file, type = 'image', fileUrl) => { const onUploadImageVideo = async (file, type = 'image',fileUrl) => {
console.log(file, 'file') console.log(file, 'file');
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
if (type === 'image') { if (type === 'image') {
let image = new Image() let image = new Image()
@ -130,20 +100,20 @@ const onUploadImageVideo = async (file, type = 'image', fileUrl) => {
image.onload = () => { image.onload = () => {
const form = new FormData() const form = new FormData()
form.append('file', file) form.append('file', file)
form.append('source', 'fonchain-chat') form.append("source", "fonchain-chat");
form.append('urlParam', `width=${image.width}&height=${image.height}`) form.append("urlParam", `width=${image.width}&height=${image.height}`);
let randomId = uniqueId() let randomId = uniqueId()
let newItem = { let newItem = {
avatar: userStore.avatar, avatar: userStore.avatar,
created_at: dayjs().format('YYYY-MM-DD HH:mm:ss'), created_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
extra: { extra: {
height: image.height, height: image.height,
name: '', name: "",
size: 0, size: 0,
url: image.src, url: image.src,
width: image.width, width: image.width
}, },
float: 'right', float: "right",
isCheck: false, isCheck: false,
is_mark: 0, is_mark: 0,
is_read: 0, is_read: 0,
@ -157,84 +127,80 @@ const onUploadImageVideo = async (file, type = 'image', fileUrl) => {
talk_type: dialogueStore.talk.talk_type, talk_type: dialogueStore.talk.talk_type,
user_id: userStore.uid, user_id: userStore.uid,
uploadCurrent: 0, uploadCurrent: 0,
uploadStatus: 1, // 1 2 3 uploadStatus: 1, // 1 2 3
} }
virtualList.value.unshift(newItem) virtualList.value.unshift(newItem)
uploadImg(form, (e) => onProgressFn(e, randomId)).then( uploadImg(form, (e) => onProgressFn(e, randomId)).then(({ status, data, msg }) => {
({ status, data, msg }) => { if (status == 0) {
if (status == 0) { resolve({
resolve({ type: 'image',
type: 'image', url: data.ori_url,
url: data.ori_url, size: file.size,
size: file.size, width: image.width,
width: image.width, height: image.height,
height: image.height, file_num: randomId,
file_num: randomId, })
}) } else {
} else { resolve('')
resolve('') message.error(msg)
message.error(msg) }
} })
},
)
} }
} else { } else {
uni.getVideoInfo({ uni.getVideoInfo({
src: fileUrl, src:fileUrl,
success: (resp) => { success:(resp)=>{
console.log(resp) console.log(resp);
form.append('file', file) form.append('file', file)
form.append('source', 'fonchain-chat') form.append("source", "fonchain-chat");
form.append('type', 'video') form.append("type", "video");
form.append('urlParam', `width=${resp.width}&height=${resp.height}`) form.append("urlParam", `width=${resp.width}&height=${resp.height}`);
let randomId = uniqueId() let randomId = uniqueId()
let newItem = { let newItem = {
avatar: userStore.avatar, avatar: userStore.avatar,
created_at: dayjs().format('YYYY-MM-DD HH:mm:ss'), created_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
extra: { extra: {
duration: parseInt(resp.duration),
height: resp.height,
name: "",
url: fileUrl,
width: resp.width
},
float: "right",
isCheck: false,
is_mark: 0,
is_read: 0,
is_revoke: 0,
msg_id: randomId,
file_num: randomId,
msg_type: 5,
nickname: userStore.nickname,
receiver_id: dialogueStore.talk.receiver_id,
sequence: -1,
talk_type: dialogueStore.talk.talk_type,
user_id: userStore.uid,
uploadCurrent: 0,
uploadStatus: 1, // 1 2 3
}
virtualList.value.unshift(newItem)
uploadImg(form, (e) => onProgressFn(e, randomId)).then(({ status, data, msg }) => {
if (status == 0) {
console.log(data);
resolve({
type: 'video',
url: data.ori_url,
cover: data.cover_url,
duration: parseInt(resp.duration), duration: parseInt(resp.duration),
height: resp.height, size: file.size,
name: '', file_num: randomId,
url: fileUrl, })
width: resp.width, } else {
}, // resolve('')
float: 'right', // message.error(msg)
isCheck: false,
is_mark: 0,
is_read: 0,
is_revoke: 0,
msg_id: randomId,
file_num: randomId,
msg_type: 5,
nickname: userStore.nickname,
receiver_id: dialogueStore.talk.receiver_id,
sequence: -1,
talk_type: dialogueStore.talk.talk_type,
user_id: userStore.uid,
uploadCurrent: 0,
uploadStatus: 1, // 1 2 3
} }
virtualList.value.unshift(newItem) })
uploadImg(form, (e) => onProgressFn(e, randomId)).then( }
({ status, data, msg }) => {
if (status == 0) {
console.log(data)
resolve({
type: 'video',
url: data.ori_url,
cover: data.cover_url,
duration: parseInt(resp.duration),
size: file.size,
file_num: randomId,
})
} else {
// resolve('')
// message.error(msg)
}
},
)
},
}) })
const form = new FormData() const form = new FormData()
} }
@ -243,181 +209,132 @@ const onUploadImageVideo = async (file, type = 'image', fileUrl) => {
const base64ToFile = (base64) => { const base64ToFile = (base64) => {
// base64file // base64file
const [header, base64String] = base64.split(';base64,') const [header, base64String] = base64.split(";base64,");
const imageType = header.split(':')[1] const imageType = header.split(":")[1];
const byteCharacters = atob(base64String) const byteCharacters = atob(base64String);
const byteArray = new Uint8Array( const byteArray = new Uint8Array(
Array.from(byteCharacters, (char) => char.charCodeAt(0)), Array.from(byteCharacters, (char) => char.charCodeAt(0))
) );
return new File([new Blob([byteArray], { type: imageType })], 'example.png', { return new File(
type: imageType, [new Blob([byteArray], { type: imageType })],
}) "example.png",
{ type: imageType }
);
} }
const choosePhoto = (filter = 'none', maximum = 9, multiple = true) => { const choosePhoto = (filter = 'none', maximum = 9, multiple = true) => {
window.plus?.gallery.pick( window.plus?.gallery.pick((res) => {
(res) => { console.log(res);
console.log(res) res.files.reverse()
res.files.reverse() res.files.forEach(async (filePath) => {
res.files.forEach(async (filePath) => { const suffix = filePath.split('.').pop()?.toLowerCase() || ''
const suffix = filePath.split('.').pop()?.toLowerCase() || '' if (['jpg', 'png'].includes(suffix)) {
if (['jpg', 'png'].includes(suffix)) { console.log("进入图片")
console.log('进入图片') window.plus?.io?.resolveLocalFileSystemURL(filePath, async (entry) => {
window.plus?.io?.resolveLocalFileSystemURL( entry.file((file) => {
filePath, const fileReader = new plus.io.FileReader();
async (entry) => { fileReader.readAsDataURL(file);
entry.file((file) => { fileReader.onloadend = async (e) => {
const fileReader = new plus.io.FileReader() const base64Url = e.target.result;
fileReader.readAsDataURL(file) const fileObj = base64ToFile(base64Url);
fileReader.onloadend = async (e) => { let data = await onUploadImageVideo(fileObj, 'image')
const base64Url = e.target.result emit('selectImg', data)
const fileObj = base64ToFile(base64Url) };
let data = await onUploadImageVideo(fileObj, 'image')
emit('selectImg', data)
}
})
},
(err) => {
console.log(err)
},
)
}
if (['mp4', 'flv'].includes(suffix)) {
console.log(filePath, '进入视频')
// const localUrl = plus.io.convertLocalFileSystemURL(filePath)
// console.log(localUrl);
plus.io.getVideoInfo({
filePath: filePath,
success: (event) => {
console.log(event)
},
fail: (err) => {
console.log(err)
},
}) })
// window.plus?.io?.resolveLocalFileSystemURL(localUrl, async (entry) => { },
// entry.file((file) => { (err) => {
// console.log(file,'file'); console.log(err);
// const fileReader = new plus.io.FileReader(); }
// fileReader.readAsDataURL(file); )
// fileReader.onloadend = async (e) => { }
// const base64Url = e.target.result; if (['mp4', 'flv'].includes(suffix)) {
// const fileObj = base64ToFile(base64Url); console.log(filePath,"进入视频")
// let data = await onUploadImageVideo(fileObj, 'video') // const localUrl = plus.io.convertLocalFileSystemURL(filePath)
// emit('selectImg', data) // console.log(localUrl);
// };
// }) plus.io.getVideoInfo({
// }, filePath:filePath,
// (err) => { success:(event)=>{
// console.log(err); console.log(event);
// } },
// ) fail:(err)=>{
console.log(err);
} }
}) });
}, // window.plus?.io?.resolveLocalFileSystemURL(localUrl, async (entry) => {
(err) => { // entry.file((file) => {
console.log(err) // console.log(file,'file');
}, // const fileReader = new plus.io.FileReader();
// fileReader.readAsDataURL(file);
// fileReader.onloadend = async (e) => {
// const base64Url = e.target.result;
// const fileObj = base64ToFile(base64Url);
// let data = await onUploadImageVideo(fileObj, 'video')
// emit('selectImg', data)
// };
// })
// },
// (err) => {
// console.log(err);
// }
// )
}
})
}, (err) => {
console.log(err);
},
{ {
filter: filter, filter: filter,
maximum: maximum, maximum: maximum,
multiple: multiple, multiple: multiple,
}, }
) )
} }
const takePhoto = () => { const takePhoto = () => {
if (typeof plus !== 'undefined') {
getCamera()
} else {
document.addEventListener('plusready', () => {
getCamera()
})
}
}
const getCamera = () => {
const cmr = plus.camera.getCamera()
cmr.captureImage(
(p) => {
plus.io.resolveLocalFileSystemURL(
p,
(entry) => {
compressAndShowImage(entry.toLocalURL(), entry.name)
},
(err) => {
console.log(err)
},
)
},
() => {},
{ index: '2' },
)
} }
const compressAndShowImage = (url, filename) => {
const dst = `_doc/upload/${filename}`
plus.zip.compressImage(
{ src: url, dst, quality: 10, overwrite: true },
(zip) => displayImage(zip.target),
(err) => {
console.log(err)
},
)
}
const displayImage = (url) => {
plus.io.resolveLocalFileSystemURL(url, (entry) => {
entry.file((file) => {
const fileReader = new plus.io.FileReader()
fileReader.readAsDataURL(file)
fileReader.onloadend = async (e) => {
state.base64Url = e.target.result
const imageFile = base64ToFile(state.base64Url)
let data = await onUploadImageVideo(imageFile, 'image')
emit('selectImg', data, data.file_num)
}
})
})
}
const chooseFile = () => { const chooseFile = () => {
uni.chooseFile({ uni.chooseFile({
count: 1, count: 1,
extension: [''], extension:[''],
success: (res) => { success: (res) => {
let randomId = uniqueId() let randomId = uniqueId()
let newItem = { let newItem = {
avatar: userStore.avatar, avatar: userStore.avatar,
created_at: dayjs().format('YYYY-MM-DD HH:mm:ss'), created_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
extra: { extra: {
drive: 3, drive: 3,
name: res.tempFiles[0].name, name: res.tempFiles[0].name,
size: res.tempFiles[0].size, size: res.tempFiles[0].size,
path: res.tempFilePaths[0], path: res.tempFilePaths[0],
}, },
float: 'right', float: "right",
isCheck: false, isCheck: false,
is_mark: 0, is_mark: 0,
is_read: 0, is_read: 0,
is_revoke: 0, is_revoke: 0,
msg_id: randomId, msg_id: randomId,
file_num: randomId, file_num: randomId,
msg_type: 6, msg_type: 6,
nickname: userStore.nickname, nickname: userStore.nickname,
receiver_id: dialogueStore.talk.receiver_id, receiver_id: dialogueStore.talk.receiver_id,
sequence: -1, sequence: -1,
talk_type: dialogueStore.talk.talk_type, talk_type: dialogueStore.talk.talk_type,
user_id: userStore.uid, user_id: userStore.uid,
uploadCurrent: 0, uploadCurrent: 0,
uploadStatus: 1, // 1 2 3 uploadStatus: 1, // 1 2 3
} }
virtualList.value.unshift(newItem) virtualList.value.unshift(newItem)
uploadsStore.initUploadFile(res.tempFiles[0], props.talkParams, randomId) uploadsStore.initUploadFile(res.tempFiles[0], props.talkParams,randomId)
}, }
}) })
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.emojiRoot { .emojiRoot {

View File

@ -493,12 +493,7 @@ import useZPaging from '@/uni_modules/z-paging/components/z-paging/js/hooks/useZ
import emojiPanel from './components/emojiPanel.vue' import emojiPanel from './components/emojiPanel.vue'
import filePanel from './components/filePanel.vue' import filePanel from './components/filePanel.vue'
import lodash from 'lodash' import lodash from 'lodash'
import { import { ServePublishMessage,detailGetRecordsContext,ServeClearTalkUnreadNum } from '@/api/chat'
ServePublishMessage,
detailGetRecordsContext,
ServeClearTalkUnreadNum,
ServeTalkRecords,
} from '@/api/chat'
import copy07 from '@/static/image/chatList/copy07@2x.png' import copy07 from '@/static/image/chatList/copy07@2x.png'
import multipleChoices from '@/static/image/chatList/multipleChoices@2x.png' import multipleChoices from '@/static/image/chatList/multipleChoices@2x.png'
import cite from '@/static/image/chatList/cite@2x.png' import cite from '@/static/image/chatList/cite@2x.png'
@ -550,7 +545,10 @@ const state = ref({
isOpenFilePanel: false, isOpenFilePanel: false,
showWin: false, showWin: false,
onfocusItem: null, onfocusItem: null,
sessionId: '', //Id sessionId: '',
talkType: '',
receiverId: '',
indexName: '',
localPageLoadDone: true, // localPageLoadDone: true, //
quoteInfo: null, // quoteInfo: null, //
mentionIsMulSelect: false, // mentionIsMulSelect: false, //
@ -559,14 +557,15 @@ const state = ref({
selectAreaHeight: 0, // selectAreaHeight: 0, //
isShowMentionSelect: false, // isShowMentionSelect: false, //
useCustomLoadMore: false, //使 useCustomLoadMore: false, //使
recordDate: '', //
serveFindRecord: [], //
}) })
uniOnload(async (options) => { uniOnload((options) => {
console.log('onLoad' + options) console.log('onLoad'+ options)
if (options.sessionId) { if (options.sessionId) {
state.value.sessionId = options.sessionId state.value.sessionId = options.sessionId
state.value.talkType = options.talkType
state.value.receiverId = options.receiverId
state.value.indexName = options.indexName
} }
if (options.msgInfo) { if (options.msgInfo) {
const msgInfo = JSON.parse(decodeURIComponent(options.msgInfo)) const msgInfo = JSON.parse(decodeURIComponent(options.msgInfo))
@ -574,23 +573,18 @@ uniOnload(async (options) => {
state.value.useCustomLoadMore = true state.value.useCustomLoadMore = true
return return
} }
if (options.recordDate) {
state.value.recordDate = options.recordDate
const msgInfo = await findTalkRecords(options.recordDate, true)
queryRecordsByMsgInfo(msgInfo)
state.value.useCustomLoadMore = true
return
}
initData() initData()
}) })
uniOnUnload(() => { uniOnUnload(() => {
console.log('onUnload') console.log('onUnload')
console.log(state.value.talkType)
console.log(state.value.receiverId)
ServeClearTalkUnreadNum({ ServeClearTalkUnreadNum({
talk_type: Number(talkParams.type), talk_type: Number(state.value.talkType),
receiver_id: Number(talkParams.receiver_id), receiver_id: Number(state.value.receiverId)
}).then(() => { }).then(() => {
talkStore.updateItem({ talkStore.updateItem({
index_name: talkParams.index_name, index_name: state.value.indexNamee,
unread_num: 0, unread_num: 0,
}) })
}) })
@ -810,7 +804,7 @@ const onEditorChange = () => {
// emit('editor-event', emitCall('input_event', text)) // emit('editor-event', emitCall('input_event', text))
// 5 // 5
const now = new Date().getTime() const now = new Date().getTime()
Object.keys(state.value.revokedMessages || {}).forEach((msgId) => { Object.keys(state.value.revokedMessages).forEach((msgId) => {
if (now - state.value.revokedMessages[msgId].revokeTime > 5 * 60 * 1000) { if (now - state.value.revokedMessages[msgId].revokeTime > 5 * 60 * 1000) {
delete state.value.revokedMessages[msgId] delete state.value.revokedMessages[msgId]
} }
@ -1095,13 +1089,9 @@ watch(
if (newValue) { if (newValue) {
const dialogueList = getDialogueList(talkParams.index_name) const dialogueList = getDialogueList(talkParams.index_name)
// console.log(newValue[newValue.length - 1]?.sequence, dialogueList?.records?.[0]?.sequence) // console.log(newValue[newValue.length - 1]?.sequence, dialogueList?.records?.[0]?.sequence)
if (!dialogueList || dialogueList?.length === 0) {
state.value.localPageLoadDone = true
return
}
if ( if (
newValue[newValue.length - 1]?.sequence === newValue[newValue.length - 1]?.sequence ===
dialogueList?.records?.[0]?.sequence dialogueList.records?.[0]?.sequence
) { ) {
// //
state.value.localPageLoadDone = true state.value.localPageLoadDone = true
@ -1115,28 +1105,14 @@ watch(
}, },
) )
const onScrollToLower = async () => { const onScrollToLower = () => {
if (state.value.useCustomLoadMore) { if (state.value.useCustomLoadMore) {
const tempVirtualList = lodash.cloneDeep(virtualList.value).reverse() const tempVirtualList = lodash.cloneDeep(virtualList.value).reverse()
const dialogueList = getDialogueList(talkParams.index_name) const dialogueList = getDialogueList(talkParams.index_name)
const recordIndex = dialogueList?.records?.findIndex( const recordIndex = dialogueList.records.findIndex(
(record) => record.msg_id === tempVirtualList[0].msg_id, (record) => record.msg_id === tempVirtualList[0].msg_id,
) )
if (!recordIndex || recordIndex === -1) { if (recordIndex === -1) {
const moreRecords = await findTalkRecords(
'',
false,
tempVirtualList[0].sequence,
{
direction: 'up',
sort_sequence: '',
},
)
console.log(moreRecords)
virtualList.value = moreRecords.concat(tempVirtualList).reverse()
console.log(virtualList.value)
} else { } else {
if (tempVirtualList[0].sequence > dialogueList.records[0].sequence) { if (tempVirtualList[0].sequence > dialogueList.records[0].sequence) {
virtualList.value = dialogueList.records virtualList.value = dialogueList.records
@ -1163,32 +1139,15 @@ const onScrollToLower = async () => {
} }
// //
const onScrollToUpper = async () => { const onScrollToUpper = () => {
if (state.value.useCustomLoadMore) { if (state.value.useCustomLoadMore) {
const tempVirtualList = lodash.cloneDeep(virtualList.value).reverse() const tempVirtualList = lodash.cloneDeep(virtualList.value).reverse()
const dialogueList = getDialogueList(talkParams.index_name) const dialogueList = getDialogueList(talkParams.index_name)
const recordIndex = dialogueList?.records?.findIndex( const recordIndex = dialogueList.records.findIndex(
(record) => (record) =>
record.msg_id === tempVirtualList[tempVirtualList.length - 1].msg_id, record.msg_id === tempVirtualList[tempVirtualList.length - 1].msg_id,
) )
console.log(recordIndex) if (recordIndex === -1) {
if (!recordIndex || recordIndex === -1) {
// ID
const currentMsgId = tempVirtualList[tempVirtualList.length - 1].msg_id
const moreRecords = await findTalkRecords(
'',
false,
tempVirtualList[tempVirtualList.length - 1].sequence,
)
console.log(moreRecords)
virtualList.value = tempVirtualList.concat(moreRecords.reverse()).reverse()
console.log(virtualList.value)
//
nextTick(() => {
zpagingRef.value?.scrollIntoViewById('zp-id-' + currentMsgId)
})
} else { } else {
if ( if (
tempVirtualList[tempVirtualList.length - 1].sequence < tempVirtualList[tempVirtualList.length - 1].sequence <
@ -1307,122 +1266,57 @@ const getMentionSelectLists = (mentionSelectList) => {
} }
//msgsequence //msgsequence
const queryRecordsByMsgInfo = async (msgInfo) => { const queryRecordsByMsgInfo = (msgInfo) => {
console.log(msgInfo) console.log(msgInfo)
const dialogueList = getDialogueList(talkParams.index_name) const dialogueList = getDialogueList(talkParams.index_name)
const recordIndex = dialogueList?.records?.findIndex( const recordIndex = dialogueList.records.findIndex(
(record) => record.msg_id === msgInfo.msg_id, (record) => record.msg_id === msgInfo.msg_id,
) )
let recordsList = [] if (recordIndex === -1) {
console.log(recordIndex)
if (!recordIndex || recordIndex === -1) {
recordsList = await findTalkRecords('', true, msgInfo.sequence)
} else { } else {
// console.log(recordIndex) // console.log(recordIndex)
const startRecordIndex = Math.max(0, recordIndex - 10) const startRecordIndex = Math.max(0, recordIndex - 10)
const endRecordIndex = Math.max(0, recordIndex + 10) const endRecordIndex = Math.max(0, recordIndex + 10)
// console.log(dialogueList.records.slice(startRecordIndex, endRecordIndex)) // console.log(dialogueList.records.slice(startRecordIndex, endRecordIndex))
// console.log(recordIndex-startRecordIndex) // console.log(recordIndex-startRecordIndex)
recordsList = dialogueList.records.slice(startRecordIndex, endRecordIndex) const recordsList = dialogueList.records.slice(
} startRecordIndex,
nextTick(() => { endRecordIndex,
zpagingRef.value.complete(recordsList.reverse()) )
loadConfig.status = dialogueList?.records?.[0]?.sequence > 1 ? 1 : 2
nextTick(() => { nextTick(() => {
let offset = uni.getSystemInfoSync().windowHeight zpagingRef.value.complete(recordsList.reverse())
const navBarAreaQuery = uni.createSelectorQuery() loadConfig.status = dialogueList.records?.[0]?.sequence > 1 ? 1 : 2
navBarAreaQuery nextTick(() => {
.select('#navBarArea') let offset = uni.getSystemInfoSync().windowHeight
.boundingClientRect((res) => { const navBarAreaQuery = uni.createSelectorQuery()
if (res) { navBarAreaQuery
// console.log(':', res.height) .select('#navBarArea')
offset = offset - res.height .boundingClientRect((res) => {
} if (res) {
}) // console.log(':', res.height)
.exec() offset = offset - res.height
const footBoxAreaQuery = uni.createSelectorQuery() }
footBoxAreaQuery })
.select('#footBoxArea') .exec()
.boundingClientRect((res) => { const footBoxAreaQuery = uni.createSelectorQuery()
if (res) { footBoxAreaQuery
// console.log(':', res.height) .select('#footBoxArea')
offset = offset - res.height .boundingClientRect((res) => {
} if (res) {
}) // console.log(':', res.height)
.exec() offset = offset - res.height
setTimeout(() => { }
zpagingRef.value.scrollIntoViewById( })
'zp-id-' + msgInfo.msg_id, .exec()
offset - 60, setTimeout(() => {
) zpagingRef.value.scrollIntoViewById(
}, 1000) 'zp-id-' + msgInfo.msg_id,
}) offset - 60,
}) )
} }, 1000)
//
const findTalkRecords = (record, isMiddle, sequence, appointParams) => {
return new Promise((resolve, reject) => {
let params = {
talk_type: talkParams.type, //12
receiver_id: talkParams.receiver_id, //idid
no_limit: '', //1
file_name: '',
msg_type: 0, //0:;2:;3:;4:;5:;6:;7:;9:;11;12
cursor: sequence || 0, //
limit: 10, //
direction: 'down', //downup
start_time: '',
end_time: '',
group_member_user_id: 0, //id
sort_sequence: 'asc',
}
if (record) {
params = Object.assign({}, params, {
start_time: record,
end_time: record,
limit: 1,
direction: '',
}) })
}
if (appointParams) {
params = Object.assign({}, params, appointParams)
}
console.log(params)
const resp = ServeTalkRecords(params)
console.log(resp)
resp.then(({ code, data }) => {
console.log(data)
if (code == 200) {
if (data?.items.length > 0) {
if (record) {
resolve(data?.items[0])
return
}
if (isMiddle) {
state.value.serveFindRecord = JSON.parse(
JSON.stringify(data?.items),
)
return findTalkRecords('', false, sequence + 1, {
direction: 'up',
sort_sequence: '',
}).then((finalResult) => {
console.log(finalResult)
resolve(finalResult)
})
} else {
state.value.serveFindRecord = data?.items
.reverse()
.concat(state.value.serveFindRecord)
resolve(JSON.parse(JSON.stringify(state.value.serveFindRecord)))
state.value.serveFindRecord = []
}
}
} else {
}
}) })
resp.catch(() => {}) }
})
} }
// //
@ -1474,9 +1368,7 @@ const rpxToPx = (rpx) => {
} }
onUnmounted(() => { onUnmounted(() => {
if (!state.value.recordDate) { dialogueStore.setDialogue({})
dialogueStore.setDialogue({})
}
clearMultiSelect() clearMultiSelect()
}) })
</script> </script>

View File

@ -136,7 +136,7 @@ const cellClick = () => {
}); });
} }
uni.navigateTo({ uni.navigateTo({
url: `/pages/dialog/index?sessionId=${props.data.id}`, url: `/pages/dialog/index?sessionId=${props.data.id}&talkType=${props.data.talk_type}&receiverId=${props.data.receiver_id}&indexName=${props.data.index_name}`,
}); });
}; };

View File

@ -250,7 +250,7 @@ onLoad((options) => {
}) })
} }
uni.navigateTo({ uni.navigateTo({
url: `/pages/dialog/index?sessionId=${openSession.id}`, url: `/pages/dialog/index?sessionId=${openSession.id}&talkType=${openSession.talk_type}&receiverId=${openSession.receiver_id}&indexName=${openSession.index_name}`,
}) })
} }
}) })

View File

@ -99,26 +99,11 @@ import { beautifyTime } from '@/utils/datetime'
const { t } = useI18n() const { t } = useI18n()
const props = defineProps({ const props = defineProps({
searchItem: Object | Number, searchItem: Object | Number,
searchResultKey: { searchResultKey: String,
type: String, searchText: String, //
default: '', searchRecordDetail: Boolean, //
}, pointerIconSrc: String, //
searchText: { conditionType: Number, //
type: String,
default: '',
}, //
searchRecordDetail: {
type: Boolean,
default: false,
}, //
pointerIconSrc: {
type: String,
default: '',
}, //
conditionType: {
type: Number,
default: 0,
}, //
}) })
// - // -
const keyMapping = { const keyMapping = {
@ -208,8 +193,10 @@ const imgText = computed(() => {
}) })
// -groupType // -groupType
const groupTypeMapping = { const groupTypeMapping = {
0: {}, 0: {
1: {}, },
1: {
},
2: { 2: {
result_type: t('index.mine.department'), result_type: t('index.mine.department'),
result_type_color: '#377EC6', result_type_color: '#377EC6',

View File

@ -19,7 +19,6 @@
'font-size': '28rpx', 'font-size': '28rpx',
'font-weight': 400, 'font-weight': 400,
}" }"
:refresher-enabled="false"
> >
<template #top> <template #top>
<div class="searchRoot"> <div class="searchRoot">
@ -140,37 +139,14 @@ const state = reactive({
}) })
const props = defineProps({ const props = defineProps({
searchResultPageSize: { searchResultPageSize: Number, //
type: Number, listLimit: Boolean, //
default: 0, apiParams: String, //
}, //
listLimit: {
type: Boolean,
default: false,
}, //
apiParams: {
type: String,
default: '',
}, //
apiRequest: Function, // apiRequest: Function, //
searchText: { searchText: String, //
type: String, isPagination: Boolean, //
default: '', searchRecordDetail: Boolean, //
}, // first_talk_record_infos: Object, //
isPagination: {
type: Boolean,
default: false,
}, //
searchRecordDetail: {
type: Boolean,
default: false,
}, //
first_talk_record_infos: {
type: Object,
default() {
return {}
},
}, //
}) })
const { t } = useI18n() const { t } = useI18n()
@ -300,11 +276,7 @@ const queryAllSearch = (pageNum, searchResultPageSize) => {
) )
let total = data.count let total = data.count
if (props.searchRecordDetail) { if (props.searchRecordDetail) {
if(state?.first_talk_record_infos?.talk_type === 1){ total = data.group_record_count
total = data.user_record_count
} else if (state?.first_talk_record_infos?.talk_type === 2){
total = data.group_record_count
}
} }
zPaging.value?.completeByTotal([data], total) zPaging.value?.completeByTotal([data], total)
} else { } else {
@ -394,12 +366,6 @@ const getHasMoreResult = (searchResultKey) => {
} }
break break
case 'general_infos': case 'general_infos':
if (
state.searchResult['record_count'] &&
state.searchResult['record_count'] > 3
) {
has_more_result = t('has_more') + t('chat.type.record')
}
break break
default: default:
} }
@ -413,40 +379,12 @@ const toMoreResultPage = (searchResultKey) => {
// //
const clickSearchItem = (searchResultKey, searchItem) => { const clickSearchItem = (searchResultKey, searchItem) => {
console.log(searchResultKey, searchItem)
let talk_type = searchItem.talk_type
let receiver_id = searchItem.receiver_id
if (searchResultKey === 'user_infos') {
talk_type = 1
receiver_id = searchItem.id
} else if (searchResultKey === 'combinedGroup') {
talk_type = searchItem.type || 2
receiver_id = searchItem.group_id || searchItem.id
} else if (searchResultKey === 'general_infos') {
if (searchItem.talk_type === 1) {
if (searchItem.user_id === state.uid) {
//
}
if (searchItem.receiver_id === state.uid) {
//
let temp_id = searchItem.receiver_id
let temp_name = searchItem.receiver_name
let temp_avatar = searchItem.receiver_avatar
searchItem.receiver_id = searchItem.user_id
searchItem.receiver_name = searchItem.user_name
searchItem.receiver_avatar = searchItem.user_avatar
searchItem.user_id = temp_id
searchItem.user_name = temp_name
searchItem.user_avatar = temp_avatar
}
}
}
emits( emits(
'clickSearchItem', 'clickSearchItem',
state.searchText, state.searchText,
searchResultKey, searchResultKey,
talk_type, searchItem.talk_type,
receiver_id, searchItem.receiver_id,
encodeURIComponent(JSON.stringify(searchItem)), encodeURIComponent(JSON.stringify(searchItem)),
) )
} }

View File

@ -13,7 +13,7 @@
</template> </template>
<script setup> <script setup>
import searchList from './components/searchList.vue' import searchList from './components/searchList.vue'
import { ServeSeachQueryAll, ServeGetSessionId } from '@/api/search/index' import { ServeSeachQueryAll } from '@/api/search/index'
import { onMounted } from 'vue' import { onMounted } from 'vue'
import { handleSetWebviewStyle } from '@/utils/common' import { handleSetWebviewStyle } from '@/utils/common'
@ -37,7 +37,7 @@ const toMoreResultPage = (searchResultKey, searchText) => {
} }
// //
const clickSearchItem = async ( const clickSearchItem = (
searchText, searchText,
searchResultKey, searchResultKey,
talk_type, talk_type,
@ -47,25 +47,17 @@ const clickSearchItem = async (
console.log(searchResultKey) console.log(searchResultKey)
const result = JSON.parse(decodeURIComponent(res)) const result = JSON.parse(decodeURIComponent(res))
console.log(result) console.log(result)
console.log(talk_type, receiver_id)
const sessionId = await getSessionId(talk_type, receiver_id)
if (searchResultKey === 'user_infos') { if (searchResultKey === 'user_infos') {
dialogueStore.setDialogue({
name: result.nickname,
talk_type: 1,
receiver_id: receiver_id,
})
uni.navigateTo({
url: '/pages/dialog/index?sessionId=' + sessionId,
})
} else if (searchResultKey === 'combinedGroup') { } else if (searchResultKey === 'combinedGroup') {
dialogueStore.setDialogue({ dialogueStore.setDialogue({
name: result.name || result.group_name, name: result.name || result.group_name,
talk_type: result.type || 2, talk_type: result.type || 2,
receiver_id: result.group_id || result.id, receiver_id: result.id || result.group_id,
}) })
uni.navigateTo({ uni.navigateTo({
url: '/pages/dialog/index?sessionId=' + sessionId url: '/pages/dialog/index',
}) })
} else if (searchResultKey === 'general_infos') { } else if (searchResultKey === 'general_infos') {
uni.navigateTo({ uni.navigateTo({
@ -79,25 +71,5 @@ const clickSearchItem = async (
}) })
} }
} }
//Id
const getSessionId = (talk_type, receiver_id) => {
return new Promise((resolve, reject) => {
let params = {
talkType: talk_type,
receiverId: receiver_id,
}
const resp = ServeGetSessionId(params)
console.log(resp)
resp.then(({ code, data }) => {
console.log(data)
if (code == 200) {
resolve(data?.sessionId)
} else {
}
})
resp.catch(() => {})
})
}
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -21,7 +21,6 @@ import {
ServeQueryUser, ServeQueryUser,
ServeQueryGroup, ServeQueryGroup,
ServeTalkRecord, ServeTalkRecord,
ServeGetSessionId,
} from '@/api/search/index' } from '@/api/search/index'
import { reactive } from 'vue' import { reactive } from 'vue'
@ -31,9 +30,9 @@ const dialogueStore = useDialogueStore()
const state = reactive({ const state = reactive({
apiRequest: Function, apiRequest: Function,
apiParams: '', apiParams: String,
searchText: '', searchText: String,
searchResultKey: '', searchResultKey: String,
}) })
onLoad((options) => { onLoad((options) => {
@ -91,7 +90,7 @@ const lastIdChange = (last_id, last_group_id, last_member_id) => {
} }
// //
const clickSearchItem = async ( const clickSearchItem = (
searchText, searchText,
searchResultKey, searchResultKey,
talk_type, talk_type,
@ -101,57 +100,21 @@ const clickSearchItem = async (
console.log(state.searchResultKey) console.log(state.searchResultKey)
const result = JSON.parse(decodeURIComponent(res)) const result = JSON.parse(decodeURIComponent(res))
console.log(result) console.log(result)
console.log(talk_type, receiver_id)
const sessionId = await getSessionId(talk_type, receiver_id)
if (state.searchResultKey === 'user_infos') { if (state.searchResultKey === 'user_infos') {
dialogueStore.setDialogue({
name: result.nickname,
talk_type: 1,
receiver_id: receiver_id,
})
uni.navigateTo({
url: '/pages/dialog/index?sessionId=' + sessionId,
})
} else if (state.searchResultKey === 'combinedGroup') { } else if (state.searchResultKey === 'combinedGroup') {
dialogueStore.setDialogue({ dialogueStore.setDialogue({
name: result.name || result.group_name, name: result.name || result.group_name,
talk_type: result.type || 2, talk_type: result.type || 2,
receiver_id: result.group_id || result.id, receiver_id: result.id || result.group_id,
}) })
uni.navigateTo({ uni.navigateTo({
url: '/pages/dialog/index?sessionId=' + sessionId, url: '/pages/dialog/index',
}) })
} else if (state.searchResultKey === 'general_infos') { } else if (state.searchResultKey === 'general_infos') {
uni.navigateTo({ uni.navigateTo({
url: url: '/pages/search/moreResult/moreResultDetail?searchText=' + searchText,
'/pages/search/moreResult/moreResultDetail?searchText=' +
searchText +
'&talk_type=' +
talk_type +
'&receiver_id=' +
receiver_id,
}) })
} }
} }
//Id
const getSessionId = (talk_type, receiver_id) => {
return new Promise((resolve, reject) => {
let params = {
talkType: talk_type,
receiverId: receiver_id,
}
const resp = ServeGetSessionId(params)
console.log(resp)
resp.then(({ code, data }) => {
console.log(data)
if (code == 200) {
resolve(data?.sessionId)
} else {
}
})
resp.catch(() => {})
})
}
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -27,8 +27,8 @@ const dialogueStore = useDialogueStore()
const userStore = useUserStore() const userStore = useUserStore()
const state = reactive({ const state = reactive({
apiParams: '', apiParams: String,
searchText: '', searchText: String,
uid: computed(() => userStore.uid), //id uid: computed(() => userStore.uid), //id
}) })

View File

@ -64,8 +64,7 @@
v-if=" v-if="
state.condition === 'imgAndVideo' || state.condition === 'imgAndVideo' ||
state.condition === 'file' || state.condition === 'file' ||
state.condition === 'link' || state.condition === 'link'
state.condition === 'member'
" "
:style="{ :style="{
padding: state.condition === 'imgAndVideo' ? '0 27rpx' : '', padding: state.condition === 'imgAndVideo' ? '0 27rpx' : '',
@ -73,11 +72,7 @@
> >
<div <div
class="search-by-condition-input" class="search-by-condition-input"
v-if=" v-if="state.condition === 'file' || state.condition === 'link'"
state.condition === 'file' ||
state.condition === 'link' ||
state.condition === 'member'
"
> >
<customInput <customInput
:searchText="state.searchText" :searchText="state.searchText"
@ -178,7 +173,6 @@
</div> </div>
<div <div
class="condition-each-result-attachments" class="condition-each-result-attachments"
@click="previewPDF(item)"
v-if=" v-if="
state.condition === 'file' || state.condition === 'link' state.condition === 'file' || state.condition === 'link'
" "
@ -261,7 +255,7 @@ import useZPaging from '@/uni_modules/z-paging/components/z-paging/js/hooks/useZ
import { parseTime } from '@/utils/datetime' import { parseTime } from '@/utils/datetime'
import { onMounted, reactive, computed, ref } from 'vue' import { onMounted, reactive, computed, ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import { ServeTalkDate, ServeGetSessionId } from '@/api/search/index' import { ServeTalkDate } from '@/api/search/index'
import { ServeFindTalkRecords } from '@/api/chat/index' import { ServeFindTalkRecords } from '@/api/chat/index'
import { useDialogueStore } from '@/store' import { useDialogueStore } from '@/store'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
@ -279,6 +273,7 @@ const dialogueParams = reactive({
let nowDay = new Date().setHours(0, 0, 0, 0) let nowDay = new Date().setHours(0, 0, 0, 0)
const state = reactive({ const state = reactive({
receiver_id: '', //id
pageTitle: '', // pageTitle: '', //
dateStyle: [], // dateStyle: [], //
nowDate: new Date(nowDay), // nowDate: new Date(nowDay), //
@ -294,16 +289,16 @@ const state = reactive({
searchResultList: [], // searchResultList: [], //
cursor: 0, // cursor: 0, //
msg_type: 0, // msg_type: 0, //
group_member_id: 0, //id
}) })
onLoad((options) => { onLoad((options) => {
console.log(options) console.log(options)
if (options.receiver_id) {
state.receiver_id = Number(options.receiver_id)
}
if (options.condition) { if (options.condition) {
state.condition = options.condition state.condition = options.condition
if (options.condition === 'member') { if (options.condition === 'date') {
// queryAllSearch()
} else if (options.condition === 'date') {
state.showPageTitle = true state.showPageTitle = true
state.pageTitle = t('search.condition.date') state.pageTitle = t('search.condition.date')
ServeQueryTalkDate(parseTime(state.nowDate, '{y}{m}')) ServeQueryTalkDate(parseTime(state.nowDate, '{y}{m}'))
@ -357,7 +352,7 @@ const ServeQueryTalkDate = (month) => {
let params = { let params = {
month: month, month: month,
talk_type: dialogueParams.talk_type, //12 talk_type: dialogueParams.talk_type, //12
receiver_id: dialogueParams.receiver_id, //id receiver_id: state.receiver_id, //id
} }
const resp = ServeTalkDate(params) const resp = ServeTalkDate(params)
console.log(resp) console.log(resp)
@ -392,7 +387,7 @@ const ServeQueryTalkDate = (month) => {
} }
// //
const selectDate = async (e) => { const selectDate = (e) => {
if (e == parseTime(state.nowDate, '{y}/{m}/{d}')) { if (e == parseTime(state.nowDate, '{y}/{m}/{d}')) {
console.log('==今日') console.log('==今日')
state.dateStyle = [ state.dateStyle = [
@ -418,37 +413,6 @@ const selectDate = async (e) => {
}, },
] ]
} }
const sessionId = await getSessionId(
dialogueParams.talk_type,
dialogueParams.receiver_id,
)
uni.navigateTo({
url:
'/pages/dialog/index?sessionId=' +
sessionId +
'&recordDate=' +
parseTime(e, '{y}-{m}-{d}'),
})
}
//Id
const getSessionId = (talk_type, receiver_id) => {
return new Promise((resolve, reject) => {
let params = {
talkType: talk_type,
receiverId: receiver_id,
}
const resp = ServeGetSessionId(params)
console.log(resp)
resp.then(({ code, data }) => {
console.log(data)
if (code == 200) {
resolve(data?.sessionId)
} else {
}
})
resp.catch(() => {})
})
} }
// //
@ -502,7 +466,7 @@ const queryAllSearch = () => {
direction: 'up', //downup direction: 'up', //downup
start_time: '', start_time: '',
end_time: '', end_time: '',
group_member_user_id: state.group_member_id, //id group_member_user_id: 0, //id
file_name: state.msg_type === 6 ? state.searchText : '', file_name: state.msg_type === 6 ? state.searchText : '',
} }
console.log(params) console.log(params)
@ -600,43 +564,6 @@ const fileTypeAvatar = (fileType) => {
} }
return file_type_avatar return file_type_avatar
} }
const previewPDF = (item) => {
console.log(item)
if (typeof plus !== 'undefined') {
downloadAndOpenFile(item)
} else {
document.addEventListener('plusready', () => {
downloadAndOpenFile(item)
})
}
}
const downloadAndOpenFile = (item) => {
uni.showLoading({ title: '加载中...', mask: true })
const downloadUrl = item?.extra?.path
const options = {
filename: '_doc/downloads/', //
}
const dtask = plus.downloader.createDownload(downloadUrl, options, function (
d,
status,
) {
if (status === 200) {
uni.hideLoading()
const filePath = d.filename
plus.runtime.openFile(
filePath,
{},
function () {},
function (error) {},
)
} else {
uni.hideLoading()
}
})
dtask.start()
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.search-by-date { .search-by-date {
@ -743,7 +670,6 @@ body::v-deep .round-3 {
span { span {
line-height: 40rpx; line-height: 40rpx;
color: $theme-text; color: $theme-text;
word-break: break-all;
} }
} }
.attachment-sub-info { .attachment-sub-info {