ZhangXianQiang
2024-06-25 a02473e11943579fa3ef4c2392624609d1475c0e
feat:对接登录、会议接口
12个文件已修改
1个文件已添加
140 ■■■■■ 已修改文件
dist-electron/background.js 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/modules/exam.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/modules/meet.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/modules/user.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/background.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam-list/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/index.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/meet/index.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/train/data-list/index.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/train/index.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dist-electron/background.js
@@ -27,7 +27,8 @@
    if (BrowserWindow.getAllWindows().length === 0)
      createWindow();
  });
  ipcMain.on("open-new-window", () => {
  ipcMain.on("open-new-window", (event, meet) => {
    const { meetName, id } = JSON.parse(meet);
    const childWin = new BrowserWindow({
      width,
      height,
@@ -39,10 +40,14 @@
    });
    childWin.maximize();
    if (process.env.VITE_DEV_SERVER_URL) {
      childWin.loadURL(process.env.VITE_DEV_SERVER_URL + "#/meet");
      childWin.loadURL(process.env.VITE_DEV_SERVER_URL + `#/meet?meetName=${meetName}&id=${id}`);
    } else {
      childWin.loadFile(join(__dirname, "../dist/index.html"), {
        hash: "/meet"
        hash: "/meet",
        query: {
          meetName,
          id
        }
      });
    }
  });
package.json
@@ -4,7 +4,7 @@
  "version": "0.0.0",
  "main": "./src/background.js",
  "scripts": {
    "dev": "vite",
    "dev": "chcp 65001 && vite",
    "build": "vite build",
    "preview": "vite preview",
    "electron:dev": "vite && electron"
src/api/index.js
@@ -65,7 +65,7 @@
// response拦截器
service.interceptors.response.use(
  (response) => {
    if (response.status === 200 && response.data.code === 200) return Promise.resolve(response.data);
    if (response.status === 200 && response.data.code === 1) return Promise.resolve(response.data);
    else return Promise.reject(response.data);
  },
  (error) => {
src/api/modules/exam.js
@@ -7,4 +7,8 @@
export const getExamInfo = () => {
  return service.get('/api/v1/getExamInfo');
}
export const getExamListV2 = (postData = {examName: ''}) => {
  return service.post('/api/student/exam/page',postData);
}
src/api/modules/meet.js
New file
@@ -0,0 +1,6 @@
import service from "@/api";
export const getMeetList = (getData = {meetName: '', status: ''}) => {
  return service.get('/api/student/meet/page', {params: getData});
};
src/api/modules/user.js
@@ -2,5 +2,6 @@
export const login = (postData = {}) => {
  console.log(postData);
  return service.post('/api/user/login', postData);
}
src/background.js
@@ -1,4 +1,3 @@
// src-electron/main.js
const { app, BrowserWindow, screen, globalShortcut, ipcMain } = require('electron');
const { join } = require('path');
@@ -38,7 +37,8 @@
    });
    // 监听打开新窗口
    ipcMain.on('open-new-window', () => {
    ipcMain.on('open-new-window', (event, meet) => {
        const { meetName, id } = JSON.parse(meet);
        const childWin = new BrowserWindow({
            width: width,
            height: height,
@@ -51,10 +51,14 @@
        childWin.maximize();
        // development模式
        if (process.env.VITE_DEV_SERVER_URL) {
            childWin.loadURL(process.env.VITE_DEV_SERVER_URL + '#/meet');
            childWin.loadURL(process.env.VITE_DEV_SERVER_URL + '#/meet?' + `meetName=${meetName}&id=${id}`);
        } else {
            childWin.loadFile(join(__dirname, '../dist/index.html'), {
                hash: '/meet'
                hash: '/meet',
                query: {
                    meetName,
                    id
                }
            });
        }
    });
src/views/exam-list/index.vue
@@ -48,7 +48,7 @@
import { Search } from '@element-plus/icons-vue';
import { getExamList } from '@/api/modules/exam.js';
import { getExamList,getExamListV2 } from '@/api/modules/exam.js';
const activeName = ref('1');
@@ -60,8 +60,8 @@
const getData = () => {
  loading.value = true;
  getExamList().then(res => {
    dataList.value = res.data;
  getExamListV2().then(res => {
    // dataList.value = res.data;
    loading.value = false;
  }).catch(err => {
    loading.value = false;
src/views/login/index.vue
@@ -107,12 +107,10 @@
const handleLogin = () => {
  loginFormRef.value.validate((valid) => {
    if (valid) {
      router.push('/index');
      return;
      loading.value = true;
      login({}).then(res => {
        console.log(res);
      login(loginForm).then(res => {
        loading.value = false;
        router.push('/index');
      }).catch(err => {
        console.log(err);
        loading.value = false;
src/views/meet/index.vue
@@ -1,19 +1,25 @@
<template>
  <div class="meet-container w-screen h-screen">
    <div>{{ JSON.stringify(route) }}</div>
    <div id="meet" ref="meet"></div>
  </div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
import {useRoute} from 'vue-router';
const route = useRoute();
const meet = ref(null);
const {meetName, id} = route.query;
let jitsiApi = null;
onMounted(() => {
  const width = window.innerWidth;
  const height = window.innerHeight;
  const domain = 'ycl.easyblog.vip:8443';
  const domain = 'ycl.easyblog.vip:8443/' + id;
  const options = {
    roomName: 'test',
    roomName: meetName,
    width: width,
    height: height,
    parentNode: meet.value,
@@ -26,7 +32,9 @@
        enabled: true
      }
    },
    toolbarButtons: ['whiteboard']
    userInfo: {
      displayName: '测试测试'
    }
  };
  jitsiApi = new JitsiMeetExternalAPI(domain, options);
  jitsiInit();
src/views/train/data-list/index.vue
@@ -3,17 +3,17 @@
    <el-scrollbar>
      <div class="list-content w-full overflow-x-hidden">
        <el-row :gutter="20">
          <el-col :span="6" v-for="item in dataList" class="mb-5">
          <el-col :span="6" v-for="item in props.dataList" class="mb-5">
            <el-card shadow="hover" class="list-card cursor-pointer" :body-style="{ padding: 0 }"
              @click="itemClick(item)">
              <div class="img-container w-full">
                <img src="@/assets/image/list-card-bg.jpg" class="w-full">
              </div>
              <div class="item-info p-3">
                <div class="info-title font-bold">{{ item.title }}</div>
                <div class="info-title font-bold">{{ item.meetName }}</div>
                <div class="info-teacher flex text-sm text-gray-500">
                  <div class="info-label">主讲:</div>
                  <div class="info-text">{{ item.teacher }}</div>
                  <div class="info-text">{{ item.teacherName }}</div>
                </div>
                <div class="info-time flex text-sm text-gray-500">
                  <div class="info-label">开始时间:</div>
@@ -38,49 +38,17 @@
import { Timer } from '@element-plus/icons-vue';
import { useRouter } from 'vue-router';
const router = useRouter();
const dataList = ref([
  {
    title: '测试1',
    startTime: '2024-6-13 8:00',
    endTime: '2024-6-13 8:00',
    teacher: '测试测试',
    roomName: 'test'
  },
  {
    title: '测试1',
    startTime: '2024-6-13 8:00',
    endTime: '2024-6-13 8:00',
    teacher: '测试测试',
    roomName: 'test'
  },
  {
    title: '测试1',
    startTime: '2024-6-13 8:00',
    endTime: '2024-6-13 8:00',
    teacher: '测试测试',
    roomName: 'test'
  },
  {
    title: '测试1',
    startTime: '2024-6-13 8:00',
    endTime: '2024-6-13 8:00',
    teacher: '测试测试',
    roomName: 'test'
  },
  {
    title: '测试1',
    startTime: '2024-6-13 8:00',
    endTime: '2024-6-13 8:00',
    teacher: '测试测试',
    roomName: 'test'
const props = defineProps({
  dataList: {
    type: Array,
    default: () => []
  }
]);
});
const itemClick = (item) => {
  if (window.electron) {
    window.electron.openNewWindow();
    window.electron.openNewWindow(JSON.stringify(item));
  }
}
src/views/train/index.vue
@@ -24,7 +24,7 @@
              <div class="card-main flex-1 my-5 relative">
                <div class="main-content absolute top-0 bottom-0 left-0 right-0">
                  <DataList></DataList>
                  <DataList :dataList="dataList"></DataList>
                </div>
              </div>
@@ -44,8 +44,24 @@
import NormalHeader from '@/components/NormalHeader/index.vue';
import DataList from './data-list/index.vue';
import { Search } from '@element-plus/icons-vue';
import {getMeetList} from '@/api/modules/meet.js';
const activeName = ref('1');
const searchText = ref('');
const dataList = ref([]);
const loading = ref(false);
const getData = () => {
  loading.value = true;
  getMeetList().then(res => {
    dataList.value = res.data;
    loading.value = false;
  }).catch(err => {
    loading.value = false;
  });
};
getData();
const handleClick = (tab, event) => {
};
vite.config.js
@@ -32,7 +32,15 @@
    server: {
        // 端口
        port: 3000,
        proxy: {
            '/api': {
                // target: 'http://192.168.3.88:8000',
                target: 'http://192.168.3.64:8000',
                changeOrigin: true,
            }
        }
    },
    resolve: {
        alias: {
            '@': resolve(__dirname, './src')