Merge remote-tracking branch 'origin/master' into test
# Conflicts:
# src/views/train/index.vue
| | |
| | | method: "PUT" |
| | | }) |
| | | } |
| | | |
| | | // 获取老师列表 |
| | | export const getTeacherList = () => { |
| | | return axios({ |
| | | url: "/api/admin/user/student/list", |
| | | method: "GET" |
| | | }) |
| | | } |
| | |
| | | import { post,get } from '@/utils/request' |
| | | import { post, get } from '@/utils/request' |
| | | |
| | | export default { |
| | | getUserPageList: query => post('/api/admin/user/page/list', query), |
| | |
| | | selectByUserName: query => post('/api/admin/user/selectByUserName', query), |
| | | studentList: () => get('/api/admin/user/student/list'), |
| | | getClassesCurrentUserList: (param) => get('/api/admin/user/classes/students', param), |
| | | updatePassword: (data) => post('/api/common/user/update/password', data) |
| | | updatePassword: (data) => post('/api/common/user/update/password', data), |
| | | } |
| | |
| | | <router-link to="/profile/index"> |
| | | <el-dropdown-item>个人信息</el-dropdown-item> |
| | | </router-link> |
| | | <router-link to="/"> |
| | | <router-link to="/dashboard"> |
| | | <el-dropdown-item>主页</el-dropdown-item> |
| | | </router-link> |
| | | <el-dropdown-item @click.native="logout" divided>退出</el-dropdown-item> |
| | |
| | | > |
| | | <el-table-column |
| | | align="center" |
| | | label="班级" |
| | | label="班级名称" |
| | | prop="className" |
| | | width="180px" |
| | | ></el-table-column> |
| | |
| | | <!-- ></el-table-column>--> |
| | | <el-table-column |
| | | align="center" |
| | | width="100px" |
| | | width="300px" |
| | | label="教师" |
| | | prop="createUserName" |
| | | prop="teacherNamesStr" |
| | | ></el-table-column> |
| | | <!-- <el-table-column--> |
| | | <!-- align="center"--> |
| | |
| | | <el-button v-show="scope.row.status !== '解散'" size="small" @click="handlerEdit(scope.row)" |
| | | type="primary">修改 |
| | | </el-button> |
| | | <el-button v-show="scope.row.status !== '解散'" size="small" type="warning">班级验证</el-button> |
| | | <el-button v-show="scope.row.status !== '解散'" size="small" @click="handlerOpenNotify(scope.row)" |
| | | type="info">通知 |
| | | </el-button> |
| | | <!-- <el-button v-show="scope.row.status !== '解散'" size="small" type="warning">班级验证</el-button>--> |
| | | <!-- <el-button v-show="scope.row.status !== '解散'" size="small" @click="handlerOpenNotify(scope.row)"--> |
| | | <!-- type="info">通知--> |
| | | <!-- </el-button>--> |
| | | <el-button v-show="scope.row.status !== '解散'" @click="studentManager(scope.row.id,scope.row.className)" size="small" |
| | | type="success">成员管理 |
| | | </el-button> |
| | |
| | | <pagination v-show="total>0" :total="total" :page.sync="searchForm.currentPage" |
| | | :limit.sync="searchForm.pageSize" |
| | | @pagination="page"/> |
| | | <el-dialog |
| | | title="班级通知" |
| | | :visible.sync="notifyOpen" |
| | | width="600px" |
| | | :before-close="handleNotifyClose" |
| | | :close-on-click-modal="false"> |
| | | <el-form :model="notifyForm" :rules="notifyRules" ref="notifyForm" label-width="100px" class="demo-ruleForm"> |
| | | <el-form-item label="通知班级:" prop="className"> |
| | | <span>{{ notifyForm.className }}</span> |
| | | </el-form-item> |
| | | <el-form-item label="通知内容:" prop="notifyContent"> |
| | | <el-input type="textarea" v-model="notifyForm.notifyContent" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="handleNotifyClose">取 消</el-button> |
| | | <el-button type="primary" @click="submitNotifyForm">确 定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <!-- <el-dialog--> |
| | | <!-- title="班级通知"--> |
| | | <!-- :visible.sync="notifyOpen"--> |
| | | <!-- width="600px"--> |
| | | <!-- :before-close="handleNotifyClose"--> |
| | | <!-- :close-on-click-modal="false">--> |
| | | <!-- <el-form :model="notifyForm" :rules="notifyRules" ref="notifyForm" label-width="100px" class="demo-ruleForm">--> |
| | | <!-- <el-form-item label="通知班级:" prop="className">--> |
| | | <!-- <span>{{ notifyForm.className }}</span>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- <el-form-item label="通知内容:" prop="notifyContent">--> |
| | | <!-- <el-input type="textarea" v-model="notifyForm.notifyContent" size="small"></el-input>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-form>--> |
| | | <!-- <span slot="footer" class="dialog-footer">--> |
| | | <!-- <el-button @click="handleNotifyClose">取 消</el-button>--> |
| | | <!-- <el-button type="primary" @click="submitNotifyForm">确 定</el-button>--> |
| | | <!-- </span>--> |
| | | <!-- </el-dialog>--> |
| | | |
| | | <el-dialog |
| | | :title="title" |
| | |
| | | <el-form :model="form" :rules="rules" ref="form" label-width="100px" class="demo-ruleForm"> |
| | | <el-form-item label="班级名称" prop="className"> |
| | | <el-input v-model="form.className" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="老师配置" prop="teacherList"> |
| | | <el-select v-model="form.teacherList" multiple clearable size="small" placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in teacherList" |
| | | :key="item.id" |
| | | :label="item.realName" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="班级时间" required> |
| | | <el-col :span="11"> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { addClasses, editClasses, getClassess, dissolution, recover } from '@/api/classes' |
| | | import { addClasses, editClasses, getClassess, dissolution, recover, getTeacherList } from '@/api/classes' |
| | | import { addClassesNotify } from '@/api/classesNotify' |
| | | import Pagination from '@/components/Pagination' |
| | | |
| | |
| | | components: { Pagination }, |
| | | data () { |
| | | return { |
| | | teacherList: [], |
| | | notifyOpen: false, |
| | | notifyForm: { |
| | | className: '', |
| | |
| | | form: { |
| | | id: null, |
| | | className: '', |
| | | teacherList: [], |
| | | status: '', |
| | | verifyStatus: '', |
| | | startTime: null, |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | getTeacherList () { |
| | | getTeacherList().then(res => { |
| | | this.teacherList = res.data.data |
| | | }) |
| | | }, |
| | | handlerOpenNotify (row) { |
| | | this.notifyOpen = true |
| | | this.notifyForm.className = row.className |
| | |
| | | this.form = { |
| | | id: null, |
| | | className: '', |
| | | teacherList: [], |
| | | status: '', |
| | | verifyStatus: '', |
| | | startTime: null, |
| | |
| | | }, |
| | | created () { |
| | | this.page() |
| | | }, |
| | | this.getTeacherList() |
| | | } |
| | | } |
| | | </script> |
| | | |
| | |
| | | methods: { |
| | | muteEveryone () { |
| | | this.jitsiApi.executeCommand('muteEveryone', 'audio') |
| | | const h = this.$createElement; |
| | | |
| | | this.$notify({ |
| | | title: '提示', |
| | | message: h('i', { style: 'color: teal'}, '已全体禁音') |
| | | }); |
| | | }, |
| | | videoEveryone () { |
| | | this.jitsiApi.executeCommand('muteEveryone', 'video') |
| | | const h = this.$createElement; |
| | | |
| | | this.$notify({ |
| | | title: '提示', |
| | | message: h('i', { style: 'color: teal'}, '已关闭全体视频') |
| | | }); |
| | | }, |
| | | handleCommand (command) { |
| | | this.sendMessage(JSON.stringify(command)) |
| | |
| | | this.jitsiApi.addListener('readyToClose', () => { |
| | | window.close() |
| | | }) |
| | | // 初始化 |
| | | this.initWebSocket() |
| | | // 每三秒更学员在线状态 |
| | | this.intervalId = setInterval(() => { |
| | | this.getRoomInfo() |
| | | // 发送心跳数据 |
| | | this.ws.send('ping') |
| | | }, 2500) |
| | | |
| | | // 初始化 |
| | | this.initWebSocket() |
| | | }, |
| | | beforeDestroy () { |
| | | // 清除定时器,避免内存泄漏 |
| | |
| | | <el-timeline> |
| | | <el-timeline-item placement="top" :timestamp="userInfo.lastActiveTime"> |
| | | <el-card> |
| | | <h4>最后活动时间</h4> |
| | | <p>{{ userInfo.realName+'在校考系统中最后活动了' }}</p> |
| | | </el-card> |
| | | </el-timeline-item> |
| | | <el-timeline-item placement="top" :timestamp="userInfo.createTime"> |
| | | <el-card> |
| | | <h4>加入时间</h4> |
| | | <p>{{ userInfo.realName+'加入了校考系统' }}</p> |
| | | </el-card> |
| | | </el-timeline-item> |
| | |
| | | <script> |
| | | |
| | | export default { |
| | | props: { |
| | | userInfo: { |
| | | type: Object, |
| | | default: () => { |
| | | return { |
| | | realName: '', |
| | | lastActiveTime: '', |
| | | createTime: '' |
| | | } |
| | | } |
| | | } |
| | | } |
| | | props: ['userInfo'], |
| | | } |
| | | </script> |
| | |
| | | <div class="user-role text-center text-muted">{{ enumFormat(roleEnum,userInfo.role) }}</div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="user-bio"> |
| | | <div class="user-education user-bio-section"> |
| | | <div class="user-bio-section-header"><svg-icon icon-class="education" /><span>个人简介</span></div> |
| | | <div class="user-bio-section-body"> |
| | | <div class="text-muted"> |
| | | 无 |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </el-card> |
| | | </template> |
| | | |
| | |
| | | <el-row :gutter="20"> |
| | | |
| | | <el-col :span="6" :xs="24"> |
| | | <user-card :userInfo="userInfo" /> |
| | | <user-card :user-info="userInfo" /> |
| | | </el-col> |
| | | |
| | | <el-col :span="18" :xs="24"> |
| | | <el-card> |
| | | <el-tabs active-name="timeline"> |
| | | <el-tab-pane label="时间线" name="timeline"> |
| | | <timeline :userInfo="userInfo" /> |
| | | <timeline :user-info="userInfo" /> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="账号" name="account"> |
| | | <account :userInfo="userInfo" /> |
| | | <account :user-info="userInfo" /> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </el-card> |
| | |
| | | created () { |
| | | let _this = this |
| | | userApi.getCurrentUser().then(re => { |
| | | _this.userInfo = re.response |
| | | _this.userInfo = re.data |
| | | }) |
| | | } |
| | | } |
| | |
| | | time: [ |
| | | { required: true, message: '请选择时间', trigger: 'change' } |
| | | ] |
| | | } |
| | | }, |
| | | } |
| | | }, |
| | | created () { |
| | |
| | | <el-table-column prop="userName" label="用户名"/> |
| | | <el-table-column prop="realName" label="真实姓名" /> |
| | | <el-table-column prop="sex" label="性别" width="60px;" :formatter="sexFormatter"/> |
| | | <el-table-column label="班级"> |
| | | <template slot-scope="scope"> |
| | | <span v-if="Array.isArray(scope.row.className) && scope.row.className.length > 0"> |
| | | {{ scope.row.className.join(', ') }} |
| | | </span> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="phone" label="手机号"/> |
| | | <el-table-column prop="createTime" label="创建时间" width="160px"/> |
| | | <el-table-column label="状态" prop="status" width="70px"> |
| | |
| | | <el-table-column prop="realName" label="真实姓名" /> |
| | | <!-- <el-table-column prop="userLevel" label="学级" :formatter="levelFormatter"/>--> |
| | | <el-table-column prop="sex" label="性别" width="60px;" :formatter="sexFormatter"/> |
| | | <el-table-column label="班级"> |
| | | <template slot-scope="scope"> |
| | | <span v-if="Array.isArray(scope.row.className) && scope.row.className.length > 0"> |
| | | {{ scope.row.className.join(', ') }} |
| | | </span> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="phone" label="手机号"/> |
| | | <el-table-column prop="createTime" label="创建时间" width="160px"/> |
| | | <el-table-column label="状态" prop="status" width="70px"> |
| | |
| | | <el-table-column prop="userName" label="用户名"/> |
| | | <el-table-column prop="realName" label="真实姓名" /> |
| | | <el-table-column prop="sex" label="性别" width="60px;" :formatter="sexFormatter"/> |
| | | <el-table-column label="班级"> |
| | | <template slot-scope="scope"> |
| | | <span v-if="Array.isArray(scope.row.className) && scope.row.className.length > 0"> |
| | | {{ scope.row.className.join(', ') }} |
| | | </span> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="phone" label="手机号"/> |
| | | <el-table-column prop="createTime" label="创建时间" width="160px"/> |
| | | <el-table-column label="状态" prop="status" width="70px"> |