Ver código fonte

双师作业 app 30%

bzkf3 2 anos atrás
pai
commit
7ae0b53fb4
3 arquivos alterados com 105 adições e 12 exclusões
  1. 25 0
      pnpm-lock.yaml
  2. 1 1
      src/components/FilePreview/index.vue
  3. 79 11
      src/pages/zbkt/ssys/content.vue

+ 25 - 0
pnpm-lock.yaml

@@ -12,6 +12,7 @@ specifiers:
   element-plus: ^2.2.14
   qrcode.vue: ^3.3.3
   sass: ^1.54.4
+  swiper: 5.2.0
   unplugin-auto-import: ^0.11.1
   unplugin-icons: ^0.14.8
   unplugin-vue-components: ^0.22.4
@@ -29,6 +30,7 @@ dependencies:
   axios: 0.27.2
   element-plus: 2.2.14_vue@3.2.37
   qrcode.vue: 3.3.3_vue@3.2.37
+  swiper: 5.2.0
   vue: 3.2.37
   vue-router: 4.1.3_vue@3.2.37
 
@@ -447,6 +449,12 @@ packages:
     engines: {node: '>=0.4.0'}
     dev: false
 
+  /dom7/2.1.5:
+    resolution: {integrity: sha512-xnhwVgyOh3eD++/XGtH+5qBwYTgCm0aW91GFgPJ3XG+jlsRLyJivnbP0QmUBFhI+Oaz9FV0s7cxgXHezwOEBYA==}
+    dependencies:
+      ssr-window: 2.0.0
+    dev: false
+
   /element-plus/2.2.14_vue@3.2.37:
     resolution: {integrity: sha512-V5Pis0OHhePg1RgVogZrcefaVl8vjVn4Pn9Qsh/t2CbFgjg9kKOYFqf/tuP3ObSXGm3X89hpe0W+nLVAsaFnpw==}
     peerDependencies:
@@ -1125,6 +1133,14 @@ packages:
   /sourcemap-codec/1.4.8:
     resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
 
+  /ssr-window/1.0.1:
+    resolution: {integrity: sha512-dgFqB+f00LJTEgb6UXhx0h+SrG50LJvti2yMKMqAgzfUmUXZrLSv2fjULF7AWGwK25EXu8+smLR3jYsJQChPsg==}
+    dev: false
+
+  /ssr-window/2.0.0:
+    resolution: {integrity: sha512-NXzN+/HPObKAx191H3zKlYomE5WrVIkoCB5IaSdvKokxTpjBdWfr0RaP+1Z5KOfDT0ZVz+2tdtiBkhsEQ9p+0A==}
+    dev: false
+
   /strip-final-newline/2.0.0:
     resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
     engines: {node: '>=6'}
@@ -1141,6 +1157,15 @@ packages:
     engines: {node: '>= 0.4'}
     dev: true
 
+  /swiper/5.2.0:
+    resolution: {integrity: sha512-pGyQ7+X7ndp6r6L0Wb+vjX5xaORdKws5mLucjen3yJrZYv9M18dd13xmSjPB8isgWVbwaFL7UxXvu8ojcfjajg==}
+    engines: {node: '>= 4.7.0'}
+    requiresBuild: true
+    dependencies:
+      dom7: 2.1.5
+      ssr-window: 1.0.1
+    dev: false
+
   /to-fast-properties/2.0.0:
     resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
     engines: {node: '>=4'}

+ 1 - 1
src/components/FilePreview/index.vue

@@ -42,7 +42,7 @@ const type = getFileType(props.url)
   <template v-else-if="type === 'audio'">
     <audio class="w-full h-full" :src="getFullUrl(url)"></audio>
   </template>
-  <template v-else-if="type === 'audio'">
+  <template v-else-if="type === 'image'">
     <img class="w-full h-full" :src="getFullUrl(url)" />
   </template>
   <el-result v-else icon="error" title="错误信息" sub-title="文件格式不支持">

+ 79 - 11
src/pages/zbkt/ssys/content.vue

@@ -3,7 +3,9 @@ import request from '~/utils/request';
 // import { getFullUrl } from '~/utils/helper';
 // import CommonHeader from "@/components/CommonHeader/index.vue";;
 import { ElMessage } from 'element-plus';
-
+import { ArrowLeft, ArrowRight } from '@element-plus/icons-vue';
+import { user } from '~/store/user';
+// import socket from 'socket.io';
 const props = defineProps({
   id: String
 })
@@ -29,6 +31,7 @@ request({
 
 let data_zy = $ref([])
 let page = $ref(1)
+let tPage = 0
 function queryZy() {
   request({
     url: '/yzy/zy_ssys_dtjl/index',
@@ -39,9 +42,66 @@ function queryZy() {
   }).then(res => {
     if (res.code === '1') {
       data_zy = res.data.page_data
+      tPage = res.data.total_page
     }
   })
 }
+queryZy()
+
+function prevPage() {
+  if (page > 1) {
+    page--;
+    queryZy()
+  }
+}
+function nextPage() {
+  if (page < tPage) {
+    page++;
+    queryZy()
+  }
+}
+
+let dialogVisible = $ref(false)
+
+const ws = new WebSocket("wss://socket.bozedu.net/")
+
+ws.addEventListener('message', (e) => {
+  console.log('message :>> ', e);
+  if (e.message) {
+    try {
+      const data = JSON.parse(e.message)
+      if (data.type === 'say' && data.content === 'refresh_work') {
+        console.log('refresh_work :>> ');
+        queryZy()
+      }
+    } catch (error) {
+      console.error(error);
+    }
+  }
+
+})
+
+ws.addEventListener('error', (err) => {
+  console.error('ws error :>> ', err);
+})
+
+ws.addEventListener('open', (e) => {
+  ws.send(JSON.stringify({
+    "type": "login",
+    "client_id": user.user_id,
+    "client_name": user.user_id,
+    "room_id": props.id
+  }))
+
+})
+
+
+
+
+
+onBeforeUnmount(() => {
+  ws.close()
+})
 
 </script>
 
@@ -76,22 +136,30 @@ function queryZy() {
       </div>
 
       <div class="w-full flex justify-between items-center">
-        <el-button type="primary" :icon="ArrowLeft" circle size="large" />
+        <el-button type="primary" :icon="ArrowLeft" circle size="large" @click="prevPage" />
 
-        <div class="flex-auto flex justify-start items-center">
-          <div class="w-19/100 mx-4 flex flex-col cursor-pointer" v-for="i in data_zy">
-            <div class="w-full flex-none overflow-hidden  rounded-xl">
-              <file-preview :url="i.yzsd_file" alt="" class="w-full h-full" />
+        <div class="flex-auto flex justify-start items-center h-200px">
+          <template v-if="data_zy.length">
+            <div class="w-19/100 h-full mx-4 flex flex-col cursor-pointer" v-for="i in data_zy">
+              <div class="w-full flex-none overflow-hidden  rounded-xl">
+                <file-preview :url="i.yzsd_file" alt="" class="w-full h-full" @click="dialogVisible=true" />
+              </div>
+              <div class="p-2">
+                {{ i.yzsd_xsxm }}
+              </div>
             </div>
-            <div class="p-2">
-              {{ i.yzsd_xsxm }}
-            </div>
-          </div>
+          </template>
+          <el-empty class="w-full" v-else></el-empty>
         </div>
 
-        <el-button type="primary" :icon="ArrowRight" circle size="large" />
+        <el-button type="primary" :icon="ArrowRight" circle size="large" @click="nextPage" />
       </div>
 
+      <el-dialog v-model="dialogVisible">
+        <file-preview :url="dialogData.yzsd_file" alt="" class="w-full h-full" @click="dialogVisible=true" />
+
+      </el-dialog>
+
     </div>
   </div>
 </template>