From d37dc9cb6a611ac03d70b65f6e91e85824ede289 Mon Sep 17 00:00:00 2001
From: ZhangXianQiang <1135831638@qq.com>
Date: 星期四, 04 七月 2024 18:49:23 +0800
Subject: [PATCH] fix:修改简答题计算题
---
src/views/folder/index.vue | 142 ++++++++++++++++++++++++++++++++--------------
1 files changed, 98 insertions(+), 44 deletions(-)
diff --git a/src/views/folder/index.vue b/src/views/folder/index.vue
index 5e40f10..8af363c 100644
--- a/src/views/folder/index.vue
+++ b/src/views/folder/index.vue
@@ -9,27 +9,27 @@
<div class="card-wrapper w-full h-full flex flex-col px-8 box-border">
<div class="card-header flex justify-between items-center shrink-0">
<div class="header-search flex items-center">
- <el-input v-model="searchText" placeholder="璇疯緭鍏ユ悳绱㈠唴瀹�" :prefix-icon="Search" />
- <el-button type="primary" class="ml-4">鎼滅储</el-button>
+ <el-input v-model="searchText" placeholder="璇疯緭鍏ユ悳绱㈠唴瀹�" :prefix-icon="Search" maxlength="20" />
+ <el-button type="primary" class="ml-4" @click="searchFile">鎼滅储</el-button>
</div>
</div>
<div class="card-main flex-1 my-5 relative">
<div class="main-content absolute top-0 bottom-0 left-0 right-0">
- <el-table :data="fileList" height="100%">
+ <el-table :data="fileList" height="100%" v-loading="loading">
<el-table-column label="鏂囦欢鍚嶇О">
<template #default="scope">
<div class="row-info">
<div class="icon">
- <img :src="fileType[scope.row.type].iconPath" class="width-img" />
+ <img :src="getIcon(scope.row.contentType)" class="width-img" />
</div>
- <div class="label">{{ scope.row.name }}</div>
+ <div class="label">{{ scope.row.introduction }}</div>
</div>
</template>
</el-table-column>
- <el-table-column prop="class" label="鐝骇" align="center" />
- <el-table-column prop="subject" label="绉戠洰" align="center" />
- <el-table-column prop="date" label="涓婁紶鏃堕棿" align="center" />
+ <el-table-column prop="className" label="鐝骇" align="center" />
+ <el-table-column prop="typeName" label="绉戠洰" align="center" />
+ <el-table-column prop="updateTime" label="涓婁紶鏃堕棿" align="center" />
<el-table-column>
<template #default="scope">
<el-button link type="primary" @click.prevent="checkRow(scope.row)">
@@ -42,7 +42,11 @@
</div>
<div class="card-footer flex justify-center mb-7 shrink-0">
- <el-pagination background layout="prev, pager, next" :total="1000" />
+ <el-pagination background layout="prev, pager, next" :total="fileList.length"
+ :default-page-size="20"
+ :currentPage="currentIndex"
+ :hide-on-single-page="true"
+ @current-change="handleCurrentChange" />
</div>
</div>
</el-card>
@@ -50,8 +54,9 @@
</div>
</div>
+ <!-- pdf鏌ョ湅 -->
<div class="pdf-container" v-show="pdfViewer">
- <PDFViewer :pdfUrl="'/helloworld.pdf'"></PDFViewer>
+ <PDFViewer :pdfUrl="pdfFile"></PDFViewer>
<div class="close-btn">
<el-button type="danger" size="large" circle @click="closeViewer">
<template #icon>
@@ -62,29 +67,57 @@
</el-button>
</div>
</div>
+
+ <!-- image鏌ョ湅 -->
+ <div class="image-container" v-show="imageViewer">
+ <el-image-viewer :url-list="imageList" @close="closeViewer"></el-image-viewer>
+ </div>
+
+ <!-- 瑙嗛鏌ョ湅 -->
+ <div class="video-container">
+
+ </div>
+
</div>
</template>
<script setup>
-import { ref } from 'vue';
+import { ref, onMounted, onBeforeUnmount } from 'vue';
+import { storeToRefs } from 'pinia';
import { Close } from '@element-plus/icons-vue';
import NormalHeader from '@/components/NormalHeader/index.vue';
import { Search } from '@element-plus/icons-vue';
import { getFileList } from '@/api/modules/file.js';
import PDFViewer from '@/components/PDFViewer/index.vue';
+import { useUserStore } from '@/store/index.js';
+import useWebScoket from '@/hooks/useWebScoket.js';
+
+const userStore = useUserStore();
+const { userInfo } = storeToRefs(userStore);
+const { status, message, error, connect, disconnect, sendMessage } = useWebScoket({
+ url: 'ws://192.168.3.64:8000/websocket/' + userInfo.value.id,
+ heartBeatData: 'ping'
+});
+
+const time = ref(null);
+
const fileType = {
'img': {
iconPath: '/static/icons/file_type_image.png',
handle: (item) => {
console.log(item);
+ imageViewer.value = true;
+ imageList.value = [item.contentUrl.url];
+ resendMessage();
}
},
'video': {
iconPath: '/static/icons/file_type_video.png',
handle: (item) => {
console.log(item);
+ resendMessage();
}
},
'pdf': {
@@ -92,64 +125,83 @@
handle: (item) => {
console.log(item);
pdfViewer.value = true;
+ pdfFile.value = item.contentUrl.url;
+ resendMessage();
}
},
};
+const searchText = ref('');
const loading = ref(false);
-const searchText = ref('');
+
const pdfViewer = ref(false);
const imageViewer = ref(false);
const videoViewer = ref(false);
-const fileList = ref([
- {
- id: 1,
- name: '娴嬭瘯娴嬭瘯娴嬭瘯',
- url: '',
- date: '2024-12-12',
- class: 'test',
- subject: '娴嬭瘯',
- type: 'img'
- },
- {
- id: 2,
- name: '娴嬭瘯娴嬭瘯娴嬭瘯',
- url: '',
- date: '2024-12-12',
- class: 'test',
- subject: '娴嬭瘯',
- type: 'video'
- },
- {
- id: 3,
- name: '娴嬭瘯娴嬭瘯娴嬭瘯',
- url: '',
- date: '2024-12-12',
- class: 'test',
- subject: '娴嬭瘯',
- type: 'pdf'
- }
-]);
+const imageList = ref([]);
+const pdfFile = ref('');
+
+const fileList = ref([]);
+
+const currentIndex = ref(1);
const checkRow = (item) => {
- fileType[item.type] && fileType[item.type].handle(item);
+ fileType[item.contentType] && fileType[item.contentType].handle(item);
};
const closeViewer = () => {
pdfViewer.value = false;
imageViewer.value = false;
videoViewer.value = false;
-}
+ clearInterval(time.value);
+};
const getData = () => {
+ loading.value = true;
getFileList().then(res => {
-
+ loading.value = false;
+ fileList.value = res.data;
+ }).catch(() => {
+ loading.value = false;
});
};
getData();
+const resendMessage = () => {
+ if (time.value) {
+ clearInterval(time.value);
+ }
+ sendMessage({ id: userInfo.value.id, command: 'recordStudyTime' });
+ time.value = setInterval(() => {
+ sendMessage({ id: userInfo.value.id, command: 'recordStudyTime' });
+ }, 5000);
+};
+
+const getIcon = (type) => {
+ if (fileType[type]) {
+ return fileType[type].iconPath;
+ }
+};
+
+const handleCurrentChange = (val) => {
+ getData();
+}
+
+
+const searchFile = () => {
+ getData();
+}
+
+// -----------------------------------鐢熷懡鍛ㄦ湡
+onMounted(() => {
+ // 杩炴帴webscoket
+ connect();
+});
+
+onBeforeUnmount(() => {
+ clearInterval(time.value);
+});
</script>
<style lang="scss" scoped>
@@ -175,11 +227,13 @@
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
+
.close-btn {
position: absolute;
top: 2px;
right: 30px;
z-index: 9999999;
+
:deep(.el-button) {
width: fit-content;
height: fit-content;
--
Gitblit v1.8.0