|
@@ -7,7 +7,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
import user from '~/store/user';
|
|
|
import { createSocket, socketSend } from '~/utils/ws';
|
|
|
import type { TSocketRes } from '~/utils/ws';
|
|
|
-import { formatTimestamp } from '~/utils/time';
|
|
|
+import { formatTimestamp2Date } from '~/utils/time';
|
|
|
import { CHAT_STATUS, CHAT_OPERATION } from '~/types';
|
|
|
let dyaw_xlfw_zxhd = $ref<type_dyaw_xlfw_zxhd | undefined>()
|
|
|
let dyaw_xlfw_zxhd_list = $ref<type_dyaw_xlfw_zxhd[] | undefined>()
|
|
@@ -23,9 +23,9 @@ let timer: NodeJS.Timeout;
|
|
|
last_msg: 1
|
|
|
}
|
|
|
})).data.page_data
|
|
|
- if(dyaw_xlfw_zxhd!==undefined){
|
|
|
+ if (dyaw_xlfw_zxhd !== undefined) {
|
|
|
const temp = dyaw_xlfw_zxhd_list!.find(item => item.dxz_stu_user_id === dyaw_xlfw_zxhd!.dxz_stu_user_id)
|
|
|
- if(temp?.dxz_id!==dyaw_xlfw_zxhd?.dxz_id){
|
|
|
+ if (temp?.dxz_id !== dyaw_xlfw_zxhd?.dxz_id) {
|
|
|
dyaw_xlfw_zxhd = temp
|
|
|
}
|
|
|
}
|
|
@@ -100,9 +100,33 @@ async function handleClickSend() {
|
|
|
let ws = $ref<WebSocket>()
|
|
|
|
|
|
let cardLoading = $ref(false)
|
|
|
+let unreadNum = $ref(0)
|
|
|
+
|
|
|
+// function getAllUnreadMsg() {
|
|
|
+// request({
|
|
|
+// url: '/dyaw/xlfw_zxhd_log/index',
|
|
|
+// data: {
|
|
|
+// dxzl_stu_user_id: dyaw_xlfw_zxhd?.dxz_stu_user_id,
|
|
|
+// dxzl_tea_user_id: dyaw_xlfw_zxhd!.dxz_tea_user_id,
|
|
|
+// limit: 1
|
|
|
+// }
|
|
|
+// }).then(res => {
|
|
|
+// if (res.code === '1') {
|
|
|
+// ifScroll = false
|
|
|
+// infoList = (res.data.page_data.reverse())
|
|
|
+// unreadNum = 0
|
|
|
+// }
|
|
|
+// nextTick(() => {
|
|
|
+// ifScroll = true
|
|
|
+// // scrollbarRef!.scrollTo(0, 0);
|
|
|
+// })
|
|
|
+// })
|
|
|
+// }
|
|
|
+
|
|
|
function handleClickStuCard(stu: type_dyaw_xlfw_zxhd) {
|
|
|
cardLoading = true
|
|
|
dyaw_xlfw_zxhd = stu
|
|
|
+ unreadNum = parseInt(stu.dxz_unread_msg_num)
|
|
|
stu.dxz_unread_msg_num = "0"
|
|
|
archivesList = []
|
|
|
|
|
@@ -120,8 +144,14 @@ function handleClickStuCard(stu: type_dyaw_xlfw_zxhd) {
|
|
|
ws = createSocket(
|
|
|
{ teacher: user.user_id, student: stu.dxz_stu_user_id },
|
|
|
{
|
|
|
- message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log>) {
|
|
|
+ message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log & { $?: boolean, dxz_stu_user_id?: string, dyaw_xlfw_zxhd: type_dyaw_xlfw_zxhd }>) {
|
|
|
if (socketRes.from_client_name.endsWith('student')) {
|
|
|
+ if (socketRes.content.$) {
|
|
|
+ if (socketRes.content?.dxz_stu_user_id === dyaw_xlfw_zxhd?.dxz_stu_user_id) {
|
|
|
+ dyaw_xlfw_zxhd = socketRes.content.dyaw_xlfw_zxhd
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
infoList.push(socketRes.content)
|
|
|
request({
|
|
|
url: '/dyaw/xlfw_zxhd_log/index',
|
|
@@ -271,30 +301,39 @@ function emitUpdateInfo(info: type_dyaw_xlfw_zxhd_log, isUpdate?: boolean) {
|
|
|
<template>
|
|
|
<div class="h-590px bg-hex-f2f2f295 flex justify-center divide-x">
|
|
|
<div class="w-320px p-10px h-full flex flex-col justify-start bg-white space-y-4">
|
|
|
- <el-input v-model="searchValue" size="large" :prefix-icon="Search" clearable></el-input>
|
|
|
+ <el-input autocomplete="off" name="searchValue" v-model="searchValue" size="large" :prefix-icon="Search"
|
|
|
+ clearable></el-input>
|
|
|
<div
|
|
|
class="max-h-520px flex flex-col flex-none divide-y scrollbar scrollbar-thin scrollbar-thumb-rounded-md scrollbar-thumb-gray-200 scrollbar-track-transparent">
|
|
|
<chat-stu-card v-for="item in dyaw_xlfw_zxhd_list" :d="item" @click="handleClickStuCard(item)"
|
|
|
class="h-68px"></chat-stu-card>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="w-680px h-full divide-y flex flex-col">
|
|
|
+ <div class="w-680px h-full divide-y flex flex-col relative">
|
|
|
<template v-if="dyaw_xlfw_zxhd">
|
|
|
<div class="bg-pink-300 flex justify-between h-48px items-center px-18px">
|
|
|
<span class="text-lg px-1 tracking-wider">{{ dyaw_xlfw_zxhd.dxz_stu_user_realname }}
|
|
|
{{ dyaw_xlfw_zxhd.dxz_stu_school_name }} {{ dyaw_xlfw_zxhd.dxz_class_name }}</span>
|
|
|
</div>
|
|
|
<div ref="scrollbarRef"
|
|
|
- class="bg-hex-fff8fb space-y-2 h-410px py-2 px-6 scrollbar scrollbar-thin scrollbar-thumb-rounded-md scrollbar-thumb-gray-200 scrollbar-track-transparent">
|
|
|
+ class="bg-hex-fff8fb space-y-2 h-410px py-2 px-6 scrollbar scrollbar-thin scrollbar-thumb-rounded-md scrollbar-thumb-gray-200 scrollbar-track-transparent relative">
|
|
|
<div v-show="!cardLoading" @click="handleLoadMoreInfo"
|
|
|
class="w-full text-center text-sm text-blue-400 hover:underline underline-blue-400 cursor-pointer">查看更多
|
|
|
</div>
|
|
|
- <info-item v-for="item in infoList" :key="item.dxzl_id" :left="item.create_user_id === user.user_id"
|
|
|
- :d="item"></info-item>
|
|
|
+ <info-item v-for="item in infoList" :key="item.dxzl_id" :left="item.create_user_id !== user.user_id" :d="item"
|
|
|
+ :w="500"></info-item>
|
|
|
+
|
|
|
</div>
|
|
|
+ <!-- -->
|
|
|
+ <!-- <div v-show="unreadNum > 10"
|
|
|
+ class="absolute bg-white right-2 bottom-200px text-blue-400 rounded-l-full cursor-pointer z-100 flex items-center space-x-1 p-2 text-sm"
|
|
|
+ @click="getAllUnreadMsg">
|
|
|
+ <i:material-symbols:keyboard-double-arrow-up />
|
|
|
+ <span>{{ unreadNum }}条消息</span>
|
|
|
+ </div> -->
|
|
|
<div class="bg-white h-180px p-5px flex flex-col justify-between">
|
|
|
<tinymce-area v-model="inputValue" ref="TinyRef" @click:audio="handleAudioChatStart"
|
|
|
- @click:video="handleVideoChatStart"></tinymce-area>
|
|
|
+ @click:video="handleVideoChatStart" @click:submit="handleClickSend"></tinymce-area>
|
|
|
<div class="flex justify-end">
|
|
|
<div class="bg-pink-300 text-sm text-white w-80px h-32px flex_center rounded-2xl cursor-pointer"
|
|
|
@click="handleClickSend">发送</div>
|
|
@@ -315,15 +354,15 @@ function emitUpdateInfo(info: type_dyaw_xlfw_zxhd_log, isUpdate?: boolean) {
|
|
|
<div class="w-full"
|
|
|
v-if="archivesList && (archivesList.length === 0 || dyaw_xlfw_zxhd.dxz_id !== archivesList[0].dxz_id)">
|
|
|
<archives-card storage ref="ArchivesCardRef"
|
|
|
- :d="{ dxz_id: dyaw_xlfw_zxhd.dxz_id, user_id: dyaw_xlfw_zxhd.dxz_stu_user_id, dxxd_lfzxm: dyaw_xlfw_zxhd.dxz_stu_user_realname, dxxd_jfls: dyaw_xlfw_zxhd.dxz_tea_user_realname, dxxd_school_name: dyaw_xlfw_zxhd.dxz_stu_school_name, dxxd_class_name: dyaw_xlfw_zxhd.dxz_class_name, dxxd_date: formatTimestamp(dyaw_xlfw_zxhd.create_dateline) }"></archives-card>
|
|
|
+ :d="{ dxz_id: dyaw_xlfw_zxhd.dxz_id, user_id: dyaw_xlfw_zxhd.dxz_stu_user_id, dxxd_lfzxm: dyaw_xlfw_zxhd.dxz_stu_user_realname, dxxd_jfls: dyaw_xlfw_zxhd.dxz_tea_user_realname, dxxd_school_name: dyaw_xlfw_zxhd.dxz_stu_school_name, dxxd_class_name: dyaw_xlfw_zxhd.dxz_class_name, dxxd_date: formatTimestamp2Date(dyaw_xlfw_zxhd.create_dateline) }"></archives-card>
|
|
|
<div class="flex_center py-2">
|
|
|
<el-button @click="handleSubmitArchives" type="primary" size="small">提交</el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="bg-hex-FFF7FA py-2">
|
|
|
+ <div class="bg-hex-FFF7FA py-2 space-y-1">
|
|
|
<div class="flex_center text-lg">历史档案</div>
|
|
|
<el-empty v-show="archivesList.length === 0" :image-size="60" description="暂无历史档案"></el-empty>
|
|
|
- <archives-card disabled v-for="item in archivesList" :d="item" :key="item.dxz_id"></archives-card>
|
|
|
+ <archives-card disabled v-for="item in archivesList" :d="item" :key="item.dxxd_id"></archives-card>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
@@ -333,9 +372,7 @@ function emitUpdateInfo(info: type_dyaw_xlfw_zxhd_log, isUpdate?: boolean) {
|
|
|
|
|
|
|
|
|
<rtc-dialog ref="RtcDialogRef" @update-info="emitUpdateInfo"></rtc-dialog>
|
|
|
-
|
|
|
</template>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
-
|
|
|
</style>
|