diff --git a/app/services/videos/create_auth_service.rb b/app/services/videos/create_auth_service.rb index 3c7ecf2f6..8dc0ddbb3 100644 --- a/app/services/videos/create_auth_service.rb +++ b/app/services/videos/create_auth_service.rb @@ -21,7 +21,14 @@ class Videos::CreateAuthService < ApplicationService private def title - @_title ||= params.delete(:title).to_s.strip + @_title ||= begin + str = params.delete(:title).to_s.strip + if str.length > 30 + "#{str[0, 15]}...#{str.reverse[0,10].reverse}" + else + str + end + end end def filename diff --git a/app/services/videos/dispatch_callback_service.rb b/app/services/videos/dispatch_callback_service.rb index 3bdabd91a..e4ad1628a 100644 --- a/app/services/videos/dispatch_callback_service.rb +++ b/app/services/videos/dispatch_callback_service.rb @@ -13,6 +13,7 @@ class Videos::DispatchCallbackService < ApplicationService case params['EventType'] when 'FileUploadComplete' then # 视频上传完成 video.file_url = params['FileUrl'] + video.filesize = params['Size'] video.upload_success video.save! when 'SnapshotComplete' then # 封面截图完成 diff --git a/db/migrate/20190819081514_add_filesize_to_videos.rb b/db/migrate/20190819081514_add_filesize_to_videos.rb new file mode 100644 index 000000000..da5b6fb50 --- /dev/null +++ b/db/migrate/20190819081514_add_filesize_to_videos.rb @@ -0,0 +1,5 @@ +class AddFilesizeToVideos < ActiveRecord::Migration[5.2] + def change + add_column :videos, :filesize, :integer, default: 0 + end +end diff --git a/public/react/src/modules/courses/new/Goldsubject.js b/public/react/src/modules/courses/new/Goldsubject.js index a34ee9900..b79a43613 100644 --- a/public/react/src/modules/courses/new/Goldsubject.js +++ b/public/react/src/modules/courses/new/Goldsubject.js @@ -364,10 +364,10 @@ class Goldsubject extends Component { // debugger //新建 // console.log('Received values of form: ', values); - + let subjectid = this.props.match.params.subjectid; let url = "/courses.json"; axios.post(url, { - subject_id:128, //这是带过来的值 + subject_id:subjectid, //这是带过来的值 name: values.classroom, class_period: values.period, credit: parseFloat(values.credit), diff --git a/public/react/src/modules/message/js/MessagSub.js b/public/react/src/modules/message/js/MessagSub.js index ab814aab8..196c460a5 100644 --- a/public/react/src/modules/message/js/MessagSub.js +++ b/public/react/src/modules/message/js/MessagSub.js @@ -470,6 +470,13 @@ class MessagSub extends Component{ } case "Discuss": return window.open(`/shixuns/${item.identifier}/shixun_discuss`); + case "Video": + if(item.tiding_type==="Apply"){ + return window.open(`/managements/video_applies`); + }else if(item.tiding_type==="System"){ + return window.open(`/users/${item.trigger_user.login}/videos`); + } + return ''; default : return window.open("/") } diff --git a/public/react/src/modules/modals/Certifiedprofessional.js b/public/react/src/modules/modals/Certifiedprofessional.js new file mode 100644 index 000000000..a7c06c31e --- /dev/null +++ b/public/react/src/modules/modals/Certifiedprofessional.js @@ -0,0 +1,86 @@ +import React, { Component } from 'react'; +import { Modal} from 'antd'; +import axios from 'axios'; +//认证职业 +class Certifiedprofessional extends Component { + + constructor(props) { + super(props); + this.state={ + occupation:3, + mydisplay:false, + } + } + + componentDidMount() { + // console.log("加入金品课堂"); + // console.log(this.props); + + } + componentDidMount() { + axios.interceptors.response.use((response) => { + if (response != undefined) + if (response && response.data.status === -1) { + if(response.data.message==="该课堂要求成员完成实名认证"){ + this.setState({ + mydisplay:true, + occupation:1, + }) + + }else if(response.data.message==="该课堂要求成员完成职业认证"){ + this.setState({ + mydisplay:true, + occupation:2, + }) + }else if(response.data.message==="该课堂要求成员完成实名和职业认证"){ + this.setState({ + mydisplay:true, + occupation:3, + }) + } + } + return response; + }, (error) => { + //TODO 这里如果样式变了会出现css不加载的情况 + + }); + } + modalCancel=()=>{ + this.setState({ + mydisplay:false, + }) + }; + + setDownload=()=>{ + + + } + + + render() { + // console.log("加入金品课堂2"); + // console.log(this.props); + return( + +
+

请在完成条件后重试

+
+ this.modalCancel()}>取消 + this.setDownload()}>确认 +
+
+
+ ) + } +} + +export default Certifiedprofessional; \ No newline at end of file diff --git a/public/react/src/modules/user/usersInfo/Infos.js b/public/react/src/modules/user/usersInfo/Infos.js index 488287b0e..242e25464 100644 --- a/public/react/src/modules/user/usersInfo/Infos.js +++ b/public/react/src/modules/user/usersInfo/Infos.js @@ -298,7 +298,7 @@ class Infos extends Component{ > {/* 项目 */} - () } diff --git a/public/react/src/modules/user/usersInfo/InfosBanner.js b/public/react/src/modules/user/usersInfo/InfosBanner.js index c3badce13..5a0c41c96 100644 --- a/public/react/src/modules/user/usersInfo/InfosBanner.js +++ b/public/react/src/modules/user/usersInfo/InfosBanner.js @@ -100,12 +100,12 @@ class InfosBanner extends Component{ onClick={() => this.setState({moduleName: 'package'})} to={`/users/${username}/package`}>众包 - {((is_current && current_user && current_user.is_teacher ) || current_user && current_user.admin) - &&
  • + {/* {((is_current && current_user && current_user.is_teacher ) || current_user && current_user.admin) + &&
  • this.setState({moduleName: 'videoes'})} - to={`/users/${username}/videoes`}>视频 -
  • } + onClick={() => this.setState({moduleName: 'videos'})} + to={`/users/${username}/videos`}>视频 + } */} diff --git a/public/react/src/modules/user/usersInfo/InfosIndex.js b/public/react/src/modules/user/usersInfo/InfosIndex.js index 092ae9009..89d69ab5d 100644 --- a/public/react/src/modules/user/usersInfo/InfosIndex.js +++ b/public/react/src/modules/user/usersInfo/InfosIndex.js @@ -23,6 +23,10 @@ const VideoPublishSuccess = Loadable({ loader: () => import('./video/VideoPublishSuccess'), loading: Loading, }) +const VideoProtocol = Loadable({ + loader: () => import('./video/VideoProtocol'), + loading: Loading, +}) const $ = window.$; class InfosIndex extends Component{ @@ -52,16 +56,23 @@ class InfosIndex extends Component{ {/* 视频发布 */} - () } > - () } > + () + } + > + + diff --git a/public/react/src/modules/user/usersInfo/video/AliyunUploaderManager.js b/public/react/src/modules/user/usersInfo/video/AliyunUploaderManager.js index e9789ba6c..9ac0f1a08 100644 --- a/public/react/src/modules/user/usersInfo/video/AliyunUploaderManager.js +++ b/public/react/src/modules/user/usersInfo/video/AliyunUploaderManager.js @@ -7,6 +7,7 @@ let _path = isDev() ? 'public' : 'build' let _testHost = '' ; // 'http://192.168.2.63:3001/api' ; // '' ; let login = 'innov' +// https://help.aliyun.com/document_detail/52204.html?spm=5176.2020520165.120.d52204.19a47029YWhro7#%E4%B8%8A%E4%BC%A0%E5%9C%B0%E5%9D%80%E5%92%8C%E5%87%AD%E8%AF%81%E6%96%B9%E5%BC%8F(%E6%8E%A8%E8%8D%90%E4%BD%BF%E7%94%A8) let uploader; let $ = window.$ function loadLib(callback) { @@ -63,7 +64,7 @@ function doCreateUploader (options) { if (!uploadInfo.videoId) { - var createUrl = `${_testHost}/users/${login}/video_auths.json?debug=true` + var createUrl = `${_testHost}/users/${login}/video_auths.json` axios.post(createUrl, { title: fileName, file_name: fileName @@ -89,10 +90,12 @@ function doCreateUploader (options) { console.log("onUploadStarted:" + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object) } else { // 如果videoId有值,根据videoId刷新上传凭证 - var refreshUrl = `${_testHost}/users/${login}/video_auths.json?debug=true` + var refreshUrl = `${_testHost}/users/${login}/video_auths.json` axios.put(refreshUrl, { video_id: uploadInfo.videoId, + title: fileName, + file_name: fileName }).then((response) => { if (response.data.status == -1) { options.onUploadError && options.onUploadError(uploadInfo) @@ -102,7 +105,8 @@ function doCreateUploader (options) { var uploadAuth = data.UploadAuth var uploadAddress = data.UploadAddress var videoId = data.VideoId - uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress, videoId) + uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress) + // , videoId options.addFileSuccess && options.addFileSuccess(uploadInfo) }).catch((error) => { @@ -145,7 +149,7 @@ function doCreateUploader (options) { // 需要根据 uploadInfo.videoId 调用刷新视频上传凭证接口(https://help.aliyun.com/document_detail/55408.html)重新获取 UploadAuth // 然后调用 resumeUploadWithAuth 方法, 这里是测试接口, 所以我直接获取了 UploadAuth $('#status').text('文件上传超时!') - var refreshUrl = `${_testHost}/users/${login}/video_auths.json?debug=true` + var refreshUrl = `${_testHost}/users/${login}/video_auths.json` axios.put(refreshUrl, { diff --git a/public/react/src/modules/user/usersInfo/video/EditVideoModal.js b/public/react/src/modules/user/usersInfo/video/EditVideoModal.js index 2e4bd7c3a..4ed20d3cd 100644 --- a/public/react/src/modules/user/usersInfo/video/EditVideoModal.js +++ b/public/react/src/modules/user/usersInfo/video/EditVideoModal.js @@ -14,10 +14,10 @@ function EditVideoModal (props) { const _title = form.getFieldsValue().title; function toList() { - history.push(`/users/${username}/videoes`) + history.push(`/users/${username}/videos`) } function toUpload() { - history.push(`/users/${username}/videoes/upload`) + history.push(`/users/${username}/videos/upload`) } function onOk() { form.validateFieldsAndScroll((err, values) => { @@ -57,8 +57,9 @@ function EditVideoModal (props) { { setLoading(false) if (response.data.videos) { - setVideoes(response.data.videos) + setvideos(response.data.videos) setCount(response.data.count) } }).catch(() => { }) } - function fetchReviewVideoes() { + function fetchReviewvideos() { const fetchUrl = `/users/${username}/videos/review.json` setLoading(true) axios.get(fetchUrl, { params: { - per_page: 200 + per_page: 100 } }) .then((response) => { setLoading(false) if (response.data.videos) { - setReviewVideoes(response.data.videos) + setReviewvideos(response.data.videos) setCount(response.data.count) } }).catch(() => { @@ -119,14 +119,14 @@ function InfoVideo (props) { } useEffect(() => { - fetchVideoes() + fetchvideos() }, [pageObj.current, sortKey]) useEffect(() => { if (categoryObj.category == 'all') { - fetchVideoes() + fetchvideos() } else { - fetchReviewVideoes() + fetchReviewvideos() } }, [categoryObj.category]) @@ -139,6 +139,8 @@ function InfoVideo (props) { _clipboard = null; } } else { + videoEl.current && videoEl.current.play() + setTimeout(() => { if (!_clipboard) { _clipboard = new ClipboardJS('.copybtn'); @@ -155,7 +157,7 @@ function InfoVideo (props) { }, []) function editSuccess() { - fetchVideoes() + fetchvideos() } function onEditVideo(item) { @@ -201,6 +203,7 @@ function InfoVideo (props) { width={800 - 1} >