| | |
| | | mounted() { |
| | | const width = window.innerWidth; |
| | | const height = window.innerHeight; |
| | | const domain = 'ycl.easyblog.vip:8443'; |
| | | const domain = this.$route.query.domain; |
| | | const roomName = this.$route.query.roomName; |
| | | const userInfoStr = this.$route.query.userInfoStr; |
| | | const userInfo = userInfoStr ? JSON.parse(userInfoStr) : null; |
| | | const options = { |
| | | roomName: 'test', |
| | | roomName: roomName, |
| | | width: width, |
| | | height: height, |
| | | parentNode: this.$refs.meet, |
| | | lang: 'zh_CN', |
| | | userInfo: userInfo, |
| | | configOverwrite: { |
| | | prejoinConfig: { |
| | | enabled: false |
| | |
| | | <div class="list-container w-full h-full"> |
| | | <div class="list-content w-full overflow-x-hidden"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="6" v-for="item in dataList" class="margin-col"> |
| | | <el-col :span="6" v-for="item in tableData" class="margin-col"> |
| | | <el-card shadow="hover" class="list-card cursor-pointer" :body-style="{ padding: 0 }"> |
| | | <div class="img-container w-full"> |
| | | <img src="@/assets/list-card-bg.jpg" class="width-img"> |
| | | </div> |
| | | <div class="item-info p-3"> |
| | | <div class="info-title">{{ item.title }}</div> |
| | | <div class="info-teacher"> |
| | | <div class="info-title">{{ item.meetName }}</div> |
| | | <div class="info-teacherName"> |
| | | <div class="info-label">主讲:</div> |
| | | <div class="info-text">{{ item.teacher }}</div> |
| | | <div class="info-text">{{ item.teacherName }}</div> |
| | | </div> |
| | | <div class="info-time"> |
| | | <div class="info-label">开始时间:</div> |
| | |
| | | <div class="info-text">{{ item.endTime }}</div> |
| | | </div> |
| | | <div class="button-container"> |
| | | <el-button @click="start">开始上课</el-button> |
| | | <el-button @click="start(item)">开始上课</el-button> |
| | | <el-button @click="handleUpdate(item)">编辑</el-button> |
| | | <el-button @click="remove(item)">删除</el-button> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | dataList: [ |
| | | props: { |
| | | tableData: [ |
| | | { |
| | | title: '测试1', |
| | | id: 1, |
| | | meetName: '英语', |
| | | startTime: '2024-6-13 8:00', |
| | | endTime: '2024-6-13 8:00', |
| | | teacher: '测试测试', |
| | | roomName: 'test' |
| | | teacherName: '关老师' |
| | | }, |
| | | { |
| | | title: '测试1', |
| | | id: 2, |
| | | meetName: '语文', |
| | | startTime: '2024-6-13 8:00', |
| | | endTime: '2024-6-13 8:00', |
| | | teacher: '测试测试', |
| | | roomName: 'test' |
| | | teacherName: '测试测试' |
| | | }, |
| | | { |
| | | title: '测试1', |
| | | id: 3, |
| | | meetName: '数学', |
| | | startTime: '2024-6-13 8:00', |
| | | endTime: '2024-6-13 8:00', |
| | | teacher: '测试测试', |
| | | roomName: 'test' |
| | | teacherName: '测试测试' |
| | | }, |
| | | { |
| | | title: '测试1', |
| | | id: 4, |
| | | meetName: '机场航空', |
| | | startTime: '2024-6-13 8:00', |
| | | endTime: '2024-6-13 8:00', |
| | | teacher: '测试测试', |
| | | roomName: 'test' |
| | | teacherName: '测试测试' |
| | | }, |
| | | { |
| | | title: '测试1', |
| | | id: 5, |
| | | startTime: '2024-6-13 8:00', |
| | | endTime: '2024-6-13 8:00', |
| | | teacher: '测试测试', |
| | | roomName: 'test' |
| | | teacherName: '测试测试', |
| | | } |
| | | ] |
| | | }; |
| | | }, |
| | | methods: { |
| | | start () { |
| | | handleUpdate (item) { |
| | | this.$emit('handleUpdate',item) |
| | | }, |
| | | remove (item) { |
| | | this.$emit('remove',item) |
| | | }, |
| | | start (item) { |
| | | let routeUrl = this.$router.resolve({ |
| | | path: "/meet", |
| | | query: { |
| | | domain: 'ycl.easyblog.vip:8443/' + item.id, |
| | | roomName: item.meetName, |
| | | userInfoStr: JSON.stringify({ |
| | | displayName: item.teacherName |
| | | }) |
| | | } |
| | | }) |
| | | window.open(routeUrl.href, '_blank') |
| | | // window.open('https://ycl.easyblog.vip:8443/test'); |
| | |
| | | font-weight: bold; |
| | | } |
| | | |
| | | .info-teacher { |
| | | .info-teacherName { |
| | | display: flex; |
| | | font-size: 14px; |
| | | } |
| | |
| | | </el-tabs> |
| | | </div> |
| | | <div class="header-search"> |
| | | <el-input v-model="searchText" placeholder="请输入课程名称"/> |
| | | <el-button type="primary" class="ml-4">搜索</el-button> |
| | | <el-input v-model="queryParam.meetName" @input="getList" clearable @clear="getList" placeholder="请输入课程名称"/> |
| | | <el-button type="primary" class="ml-4" @click="getList" >搜索</el-button> |
| | | </div> |
| | | <div> |
| | | <el-button type="primary" @click="handleAdd()">添加</el-button> |
| | |
| | | |
| | | <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 :tableData="tableData" @handleUpdate="handleUpdate" @remove = "remove"></DataList> |
| | | <div id="meet" ref="meet"></div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="card-footer flex justify-center mb-7 shrink-0"> |
| | | <el-pagination background layout="prev, pager, next" :total="1000"/> |
| | | </div> |
| | | <pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize" |
| | | @pagination="getList"/> |
| | | </div> |
| | | </el-card> |
| | | |
| | | <!-- 添加题目对话框 --> |
| | | <!-- 添加会议对话框 --> |
| | | <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body> |
| | | <el-form label-width="80px" ref="form" :model="form" :rules="rules" > |
| | | <el-form-item label="房间名" prop="meetName" > |
| | | <el-form-item label="房间名:" prop="meetName" > |
| | | <el-input v-model="form.meetName" placeholder="请输入房间名" style="width: 300px"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="班级" prop="classesId" > |
| | | <el-select v-model="form.classesId" placeholder="请选择班级" /> |
| | | <el-form-item label="班级:" > |
| | | <el-select |
| | | v-model="form.classesId" |
| | | placeholder="班级" |
| | | clearable |
| | | > |
| | | <el-option v-for="item in classesIds" :key="item.id" :label="item.className" :value="item.id"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="上课时间" prop="time" > |
| | | <el-date-picker |
| | | v-model="form.time" |
| | | type="datetimerange" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期"> |
| | |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="cancel">确 定</el-button> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | |
| | | |
| | | <script> |
| | | import DataList from './data-list/index.vue' |
| | | import Pagination from '@/components/Pagination' |
| | | import { getMeets,addMeet,editMeet,deleteMeetById } from '@/api/meet' |
| | | import { myClasses } from '@/api/classes' |
| | | |
| | | |
| | | export default { |
| | | components: { DataList }, |
| | | components: { DataList,Pagination}, |
| | | data () { |
| | | return { |
| | | queryParam: { |
| | | status: null, |
| | | meetName: null, |
| | | pageIndex: 1, |
| | | pageSize: 10 |
| | | }, |
| | | total: 0, |
| | | open: false, |
| | | listLoading: true, |
| | | title: '', |
| | | form: {}, |
| | | tableData: [], |
| | | classesIds: [], |
| | | activeName: '1', |
| | | searchText: '', |
| | | rules: { |
| | | meetName: [ |
| | | { required: true, message: '请输入房间名称', trigger: 'blur' } |
| | | ], |
| | | classesId: [ |
| | | { required: true, message: '请选择班级', trigger: 'change' } |
| | | ], |
| | | time: [ |
| | | { required: true, message: '请选择时间', trigger: 'change' } |
| | | ] |
| | | }, |
| | | } |
| | | }, |
| | | created () {}, |
| | | created () { |
| | | this.getList() |
| | | this.getClasses() |
| | | }, |
| | | methods: { |
| | | handleClick () { |
| | | |
| | | }, |
| | | remove (item) { |
| | | deleteMeetById(item.id).then(re => { |
| | | if (re.data.code === 1) { |
| | | this.open = false |
| | | this.getList() |
| | | this.$message.success(re.data.message) |
| | | } else { |
| | | this.$message.error(re.data.message) |
| | | } |
| | | }) |
| | | }, |
| | | handleUpdate (item) { |
| | | this.form = { |
| | | ...item, |
| | | time: [item.startTime, item.endTime] |
| | | } |
| | | this.open = true |
| | | }, |
| | | // 获取房间 |
| | | getList () { |
| | | this.listLoading = true |
| | | getMeets(this.queryParam).then(re => { |
| | | const data = re.data |
| | | this.tableData = data.data |
| | | this.total = data.total |
| | | this.queryParam.pageIndex = data.pageNum |
| | | this.listLoading = false |
| | | }) |
| | | }, |
| | | cancel() { |
| | | this.open = false |
| | | this.resetForm() |
| | | }, |
| | | resetForm () { |
| | | this.form = { |
| | | id: null, |
| | | meetName: null, |
| | | classesId: null, |
| | | status: null, |
| | | startTime: null, |
| | | endTime: null, |
| | | time: [] |
| | | } |
| | | }, |
| | | submitForm () { |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid) { |
| | | this.form.startTime = this.form.time[0] |
| | | this.form.endTime = this.form.time[1] |
| | | if (this.form.id) { |
| | | editMeet(this.form).then(re => { |
| | | if (re.data.code === 1) { |
| | | this.open = false |
| | | this.getList() |
| | | this.$message.success(re.data.message) |
| | | } else { |
| | | this.$message.error(re.data.message) |
| | | } |
| | | }) |
| | | } else { |
| | | addMeet(this.form).then(re => { |
| | | if (re.data.code === 1) { |
| | | this.open = false |
| | | this.getList() |
| | | this.$message.success(re.data.message) |
| | | } else { |
| | | this.$message.error(re.data.message) |
| | | } |
| | | }) |
| | | } |
| | | } else { |
| | | return false |
| | | } |
| | | }) |
| | | }, |
| | | // 获取我的班级 |
| | | getClasses () { |
| | | myClasses().then(re => { |
| | | this.classesIds = re.data.data |
| | | }) |
| | | }, |
| | | handleAdd () { |
| | | this.open = true |
| | |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | |
| | | .list-container { |
| | | flex: 1; |
| | | position: relative; |
| | | width: 100%; |
| | | } |
| | | } |
| | | .card-header { |