diff --git a/app/helpers/subjects_helper.rb b/app/helpers/subjects_helper.rb index 72154b0a8..fb2246a50 100644 --- a/app/helpers/subjects_helper.rb +++ b/app/helpers/subjects_helper.rb @@ -1,12 +1,23 @@ module SubjectsHelper # 实训路径的发布状态 - def publish_status subject, is_manager, user + def publish_status subject, is_manager status = -1 if is_manager status = 0 if subject.status == 0 status = 1 if subject.status == 1 - status = 2 if subject.status == 2 && user.admin? + status = 2 if subject.status == 2 + end + status + end + + # 实训路径的公开状态 + def public_status subject, is_manager, user + status = -1 + if is_manager + status = 0 if subject.public == 0 + status = 1 if subject.public == 1 + status = 2 if subject.public == 2 && user.admin? end status end diff --git a/app/views/subjects/show.json.jbuilder b/app/views/subjects/show.json.jbuilder index 49ad55517..d25437f0a 100644 --- a/app/views/subjects/show.json.jbuilder +++ b/app/views/subjects/show.json.jbuilder @@ -6,7 +6,8 @@ json.subject_score @subject.all_score json.member_count @subject.member_count json.allow_delete (@subject.status != 2 && @is_creator) || @user.admin? -json.publish_status publish_status(@subject, @is_manager, @user) +json.publish_status publish_status(@subject, @is_manager) +json.public_status public_status(@subject, @is_manager, @user) json.allow_statistics @is_manager json.allow_send @user.logged? json.allow_visit @subject.status > 1 || @is_manager diff --git a/public/react/src/modules/courses/coursesDetail/CoursesBanner.js b/public/react/src/modules/courses/coursesDetail/CoursesBanner.js index c8715e1b8..99d5f7606 100644 --- a/public/react/src/modules/courses/coursesDetail/CoursesBanner.js +++ b/public/react/src/modules/courses/coursesDetail/CoursesBanner.js @@ -246,7 +246,7 @@ class CoursesBanner extends Component { }) }else{ - s = "邀请码停用后,用户不能主动加入该课堂了"; + s = "课堂邀请码停用后,用户不能主动加入该课堂了"; ss = "您是否确认停用?"; this.showActionPoll(i,s,ss) } diff --git a/public/react/src/modules/courses/members/CourseGroupList.js b/public/react/src/modules/courses/members/CourseGroupList.js index afec12fa9..597357a9f 100644 --- a/public/react/src/modules/courses/members/CourseGroupList.js +++ b/public/react/src/modules/courses/members/CourseGroupList.js @@ -133,7 +133,12 @@ function CourseGroupList(props) { modalsType={DownloadType} /> +
  • 分班列表
  • +
  • {props.history.push(`/courses/${courseId}/course_groups/0`)}}>未分班
  • + + } searchValue={ searchValue } onInputSearchChange={onInputSearchChange} allowClearonChange={onInputSearchChange} @@ -211,12 +216,12 @@ function CourseGroupList(props) { onPressEnter={onPressEnter} >
    - {!!none_group_member_count &&
    {props.history.push(`/courses/${courseId}/course_groups/0`)}}> + {/* {!!none_group_member_count &&
    {props.history.push(`/courses/${courseId}/course_groups/0`)}}> 未分班: {none_group_member_count}个学生 查看 -
    } +
    } */} {course_groups && !!course_groups.length ? diff --git a/public/react/src/modules/courses/members/CourseGroupListTable.js b/public/react/src/modules/courses/members/CourseGroupListTable.js index 5551faee3..d0ccbd73a 100644 --- a/public/react/src/modules/courses/members/CourseGroupListTable.js +++ b/public/react/src/modules/courses/members/CourseGroupListTable.js @@ -1,11 +1,11 @@ import React, { useState, useEffect } from 'react' -import { Input,Checkbox,Table, Pagination, Modal,Menu ,Spin, Tooltip , Badge, Popconfirm } from "antd"; +import { Input,Checkbox,Table, Pagination, Modal,Menu ,Spin, Tooltip , Badge, Popconfirm, Result } from "antd"; import axios from 'axios' import { WordsBtn, trigger, on, off, getUrl, downloadFile , sortDirections } from 'educoder' import ClipboardJS from 'clipboard' - +import './studentsList.css'; /** 角色数组, CREATOR: 创建者, PROFESSOR: 教师, ASSISTANT_PROFESSOR: 助教, STUDENT: 学生 course_members_count: 0 @@ -103,10 +103,30 @@ function CourseGroupListTable(props) { dataIndex: 'invite_code', key: 'invite_code', align:'center', - width:"10%", + width:"21%", className:"color-grey-6", render: (invite_code, record, index) => { - return invite_code + return + {invite_code} + { + record.edit_auth ? + changeInviteCode(record.id,record.invite_code_halt)} className={record.invite_code_halt ?"codeBtnStyle codeBtn_green ml10":"codeBtnStyle codeBtn_blue ml10"}> + {record.invite_code_halt ?"启用":"停用"} + + :"" + } + {isAdmin && !record.invite_code_halt && + +
    成员可以通过邀请码主动加入分班
    +
    点击复制邀请码
    + + }> + 复制 +
    + } +
    } } : { title: '你当前所在分班', @@ -127,22 +147,12 @@ function CourseGroupListTable(props) { dataIndex: 'setting', key: 'setting', align:'center', - width:"25%", + width:"14%", className:"color-grey-6", render: (none, record, index) => { return {!isCourseEnd && isAdmin && onDelete(record)} style={'grey'}>删除分班} - {isAdmin && - -
    成员可以通过邀请码主动加入分班
    -
    点击复制邀请码
    - - }> - 复制邀请码 -
    - } + {isStudent && addToDir(record)} style={''}>加入分班} onGoDetail(record)} style={''}>查看
    @@ -209,6 +219,32 @@ function CourseGroupListTable(props) { function onGoDetail(record) { props.history.push(`/courses/${courseId}/course_groups/${record.id}`) } + // 停用和启用邀请码 + function changeInviteCode(id,flag){ + if(flag){ + changeInviteCodeFunc(id,flag); + }else{ + props.confirm({ + content:"分班邀请码停用后,用户不能主动加入该分班了", + subContent:'您是否确认停用?', + onOk:() => { + changeInviteCodeFunc(id,flag) + } + }) + } + } + + function changeInviteCodeFunc(id,flag){ + const url= `/course_groups/${id}/set_invite_code_halt.json`; + axios.post(url).then(result=>{ + if(result){ + props.showNotification(`邀请码${flag?"启用":"停用"}成功!`); + props.onOperationSuccess && props.onOperationSuccess(); + } + }).catch(error=>{ + console.log(error); + }) + } const isAdmin = props.isAdmin(); const isSuperAdmin = props.isSuperAdmin(); const isStudent = props.isStudent() diff --git a/public/react/src/modules/courses/members/studentsList.css b/public/react/src/modules/courses/members/studentsList.css index b2a41c7e6..bd7b88ed1 100644 --- a/public/react/src/modules/courses/members/studentsList.css +++ b/public/react/src/modules/courses/members/studentsList.css @@ -5,4 +5,47 @@ .E9F8FF{ background-color: #E9F8FF; +} + +.codeBtnStyle{ + height: 18px; + line-height: 18px; + padding:0px 5px; + cursor: pointer; + font-size: 12px; + border-radius: 2px; +} +.codeBtn_yellow{ + border:1px solid #FF6B06; + color: #FF6B06!important; +} +.codeBtn_green{ + border:1px solid #00BA38; + color: #00BA38!important; +} + +.codeBtn_blue{ + border:1px solid #4CACFF; + color: #4CACFF!important; +} + +.course_publicNav{ + display: flex; +} +.course_publicNav li{ + position: relative; + margin-right: 30px; + cursor: pointer; +} +.course_publicNav li.active{ + color: #4CACFF +} +.course_publicNav li.active::after{ + position: absolute; + width: 100%; + height: 2px; + content: ''; + left: 0px; + bottom: -33px; + background: #4CACFF; } \ No newline at end of file diff --git a/public/react/src/modules/courses/members/studentsList.js b/public/react/src/modules/courses/members/studentsList.js index aff19d041..af83d0a49 100644 --- a/public/react/src/modules/courses/members/studentsList.js +++ b/public/react/src/modules/courses/members/studentsList.js @@ -741,12 +741,22 @@ class studentsList extends Component{ - - - { this.props.history.push(`/courses/${courseId}/course_groups`)}} - style={{color: '#212121', verticalAlign: 'initial', marginRight: '14px' }} - > - {course_group_name || '未分班'} + { + course_group_name ? + + + { this.props.history.push(`/courses/${courseId}/course_groups`)}} + style={{color: '#212121', verticalAlign: 'initial', marginRight: '14px' }} + > + {course_group_name} + + : + + } + {isAdmin && invite_code && 邀请码: