Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Z
zuiketang
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
夏彬
zuiketang
Commits
05b342d1
Commit
05b342d1
authored
Oct 31, 2016
by
杨培
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
可以修改未审核等状态课程的视频了
发布与修改课程表单重复代码整理与优化
parent
fd015495
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
222 additions
and
167 deletions
+222
-167
MyCourseController.php
src/frontend/controllers/MyCourseController.php
+63
-6
CoursePublishForm.php
src/frontend/models/CoursePublishForm.php
+9
-16
edit.php
src/frontend/views/my-course/edit.php
+22
-0
publish.php
src/frontend/views/my-course/publish.php
+1
-1
video-upload.vue
src/frontend/web/js/components/uploader/video-upload.vue
+20
-14
edit.js
src/frontend/web/js/my-course/edit.js
+20
-55
publish.js
src/frontend/web/js/my-course/publish.js
+13
-75
validate-option.js
src/frontend/web/js/my-course/validate-option.js
+74
-0
No files found.
src/frontend/controllers/MyCourseController.php
View file @
05b342d1
...
@@ -142,7 +142,6 @@ class MyCourseController extends \yii\web\Controller
...
@@ -142,7 +142,6 @@ class MyCourseController extends \yii\web\Controller
$form
=
new
CoursePublishForm
(
true
);
$form
=
new
CoursePublishForm
(
true
);
$form
->
class_id
=
$classId
;
$form
->
class_id
=
$classId
;
$form
->
user_id
=
$userId
;
$form
->
load
(
Yii
::
$app
->
request
->
post
());
$form
->
load
(
Yii
::
$app
->
request
->
post
());
if
(
!
$form
->
validate
())
{
if
(
!
$form
->
validate
())
{
...
@@ -174,9 +173,6 @@ class MyCourseController extends \yii\web\Controller
...
@@ -174,9 +173,6 @@ class MyCourseController extends \yii\web\Controller
$courseware
->
time
=
round
(
$videoInfo
[
'av'
][
'format'
][
'duration'
]);
$courseware
->
time
=
round
(
$videoInfo
[
'av'
][
'format'
][
'duration'
]);
$courseware
->
format
=
pathinfo
(
$form
->
vuid
[
'key'
],
PATHINFO_EXTENSION
);
$courseware
->
format
=
pathinfo
(
$form
->
vuid
[
'key'
],
PATHINFO_EXTENSION
);
//list($video, $audio) = $avInfo['streams'];
//$format = $avInfo['format'];
//验证课件数据
//验证课件数据
if
(
!
$courseware
->
validate
())
{
if
(
!
$courseware
->
validate
())
{
Utils
::
ajaxResponse
(
false
,
Utils
::
fetchErrorFirst
(
$courseware
->
errors
));
Utils
::
ajaxResponse
(
false
,
Utils
::
fetchErrorFirst
(
$courseware
->
errors
));
...
@@ -219,7 +215,6 @@ class MyCourseController extends \yii\web\Controller
...
@@ -219,7 +215,6 @@ class MyCourseController extends \yii\web\Controller
$form
=
new
CoursePublishForm
();
$form
=
new
CoursePublishForm
();
$form
->
class_id
=
$classId
;
$form
->
class_id
=
$classId
;
$form
->
user_id
=
$userId
;
$form
->
load
(
Yii
::
$app
->
request
->
post
());
$form
->
load
(
Yii
::
$app
->
request
->
post
());
if
(
!
$form
->
validate
())
{
if
(
!
$form
->
validate
())
{
...
@@ -236,6 +231,9 @@ class MyCourseController extends \yii\web\Controller
...
@@ -236,6 +231,9 @@ class MyCourseController extends \yii\web\Controller
throw
new
ForbiddenHttpException
();
throw
new
ForbiddenHttpException
();
}
}
$courseware
=
Courseware
::
findOne
([
'course_id'
=>
$course
->
id
]);
$coursewareUpdate
=
false
;
$oldPreview
=
$course
->
preview_pic
;
$oldPreview
=
$course
->
preview_pic
;
//修改课程数据
//修改课程数据
...
@@ -246,19 +244,54 @@ class MyCourseController extends \yii\web\Controller
...
@@ -246,19 +244,54 @@ class MyCourseController extends \yii\web\Controller
$course
->
recommend
=
$form
->
recommend
;
$course
->
recommend
=
$form
->
recommend
;
$form
->
preview
&&
$course
->
preview_pic
=
$form
->
preview
[
'key'
];
$form
->
preview
&&
$course
->
preview_pic
=
$form
->
preview
[
'key'
];
//是否提交重新审核,仅待审核和已拒绝状态允许重新进入审核
$isRecheck
=
in_array
(
$course
->
status
,
[
Course
::
STATUS_UNCHECK
,
Course
::
STATUS_FAILED
]);
$course
->
status
=
Course
::
STATUS_UNCHECK
;
//仅重审核时可以更换视频
if
(
$form
->
vuid
&&
!
$isRecheck
)
{
Utils
::
ajaxResponse
(
false
,
'当前课程状态不允许更换视频!'
);
}
//验证课程数据
//验证课程数据
if
(
!
$course
->
validate
())
{
if
(
!
$course
->
validate
())
{
Utils
::
ajaxResponse
(
false
,
Utils
::
fetchErrorFirst
(
$course
->
errors
));
Utils
::
ajaxResponse
(
false
,
Utils
::
fetchErrorFirst
(
$course
->
errors
));
}
}
//保存课程数据
//保存课程数据
if
(
!
$course
->
sav
e
())
{
if
(
!
$course
->
updat
e
())
{
Utils
::
ajaxResponse
(
false
,
'课程保存失败'
);
Utils
::
ajaxResponse
(
false
,
'课程保存失败'
);
}
}
//保存讲师与课程关联数据
//保存讲师与课程关联数据
CourseTeacher
::
autoSaveRelations
(
$course
->
id
,
$form
->
teacher
);
CourseTeacher
::
autoSaveRelations
(
$course
->
id
,
$form
->
teacher
);
//更换视频
if
(
$form
->
vuid
&&
$form
->
vuid
[
'key'
]
!=
$course
[
'name'
])
{
UploadPools
::
deleteFile
(
'video:'
.
$courseware
->
name
);
UploadPools
::
claimFile
(
$form
->
vuid
[
'uuid'
]);
$courseware
->
name
=
$form
->
vuid
[
'key'
];
if
(
$courseware
->
src_stand
)
{
UploadPools
::
deleteFile
(
'video:'
.
$courseware
->
src_stand
);
$courseware
->
src_stand
=
''
;
}
if
(
$courseware
->
src_free
)
{
UploadPools
::
deleteFile
(
'video:'
.
$courseware
->
src_free
);
$courseware
->
src_free
=
''
;
}
$coursewareUpdate
=
true
;
}
if
(
$isRecheck
&&
$courseware
->
status
!=
Course
::
STATUS_UNCHECK
)
{
$courseware
->
status
=
Course
::
STATUS_UNCHECK
;
$coursewareUpdate
=
true
;
}
$coursewareUpdate
&&
$courseware
->
update
();
//认领文件与附件,删除老文件
//认领文件与附件,删除老文件
if
(
$form
->
preview
)
{
if
(
$form
->
preview
)
{
UploadPools
::
claimFile
(
$form
->
preview
[
'uuid'
]);
UploadPools
::
claimFile
(
$form
->
preview
[
'uuid'
]);
...
@@ -323,4 +356,28 @@ class MyCourseController extends \yii\web\Controller
...
@@ -323,4 +356,28 @@ class MyCourseController extends \yii\web\Controller
return
[
'success'
=>
true
,
'msg'
=>
''
,
'file_path'
=>
$result
[
'src'
],
'key'
=>
$result
[
'key'
],
'uuid'
=>
$result
[
'uuid'
]];
return
[
'success'
=>
true
,
'msg'
=>
''
,
'file_path'
=>
$result
[
'src'
],
'key'
=>
$result
[
'key'
],
'uuid'
=>
$result
[
'uuid'
]];
}
}
/*
public function actionTest()
{
//$key = 'source/ea/52/80/3mnxijfpy5bvC8_eKHXT.mp4';
$key = 'source/b5/42/29/dc_nvGJm5Vvj6WOU_tNr.flv';
//$key = 'source/18/d3/23/UUQtSkbQMfvp3tITL29j.mp4';
define('BR', '<br>');
$auth = new \Qiniu\Auth('Tm34_10r5kYLrUProU3Rx82HXCOnYuF8MhirB_YR', 'NwLeT4eF_C2UStiHzNAQmzqnIq_ru-BdHFK43Isn');
$url = $auth->privateDownloadUrl('http://vdn.c.pp.cc/'.$key.'?avinfo');
//$url = 'http://vdn.c.pp.cc/source/ea/52/80/3mnxijfpy5bvC8_eKHXT.mp4?avinfo&e=1477627689&token='.urlencode('Tm34_10r5kYLrUProU3Rx82HXCOnYuF8MhirB_YR:3EHHpfAdrEqbaMh8q0RJeHDkA0E=');
echo $url.BR;
$response = \Qiniu\Http\Client::get($url);
//$avInfo = $response->json();
echo $response->statusCode;
opcache_invalidate(__FILE__);
}
*/
}
}
src/frontend/models/CoursePublishForm.php
View file @
05b342d1
...
@@ -21,8 +21,7 @@ use yii\base\Model;
...
@@ -21,8 +21,7 @@ use yii\base\Model;
*
*
* @property $id int
* @property $id int
* @property $tmp string
* @property $tmp string
* @property $class_id int
* @property $class_id int 课堂ID,用于内部数据验证等
* @property $user_id int
* @property $preview string|array
* @property $preview string|array
* @property $vuid string|array
* @property $vuid string|array
* @property $name string
* @property $name string
...
@@ -37,7 +36,6 @@ class CoursePublishForm extends Model
...
@@ -37,7 +36,6 @@ class CoursePublishForm extends Model
public
$id
;
public
$id
;
public
$tmp
;
public
$tmp
;
public
$class_id
;
public
$class_id
;
public
$user_id
;
public
$vuid
;
public
$vuid
;
public
$preview
;
public
$preview
;
public
$name
;
public
$name
;
...
@@ -70,8 +68,6 @@ class CoursePublishForm extends Model
...
@@ -70,8 +68,6 @@ class CoursePublishForm extends Model
return
[
return
[
'id'
=>
'ID'
,
'id'
=>
'ID'
,
'tmp'
=>
'Tmp'
,
'tmp'
=>
'Tmp'
,
'user_id'
=>
'User ID'
,
'class_id'
=>
'Class ID'
,
'name'
=>
'标题'
,
'name'
=>
'标题'
,
'teacher'
=>
'讲师'
,
'teacher'
=>
'讲师'
,
'price'
=>
'价格'
,
'price'
=>
'价格'
,
...
@@ -85,29 +81,26 @@ class CoursePublishForm extends Model
...
@@ -85,29 +81,26 @@ class CoursePublishForm extends Model
public
function
rules
()
public
function
rules
()
{
{
$requiredFields
=
[
'tmp'
,
'class_id'
,
'user_id'
,
'name'
,
'price'
,
'free_time'
,
'preview
'
];
//$requiredFields = ['tmp', 'name', 'price', 'free_time', 'preview', 'vuid
'];
//创建模式下将验证视频文件
//创建模式下将验证视频文件
if
(
$this
->
createMode
)
{
//
if ($this->createMode) {
$requiredFields
[]
=
'vuid'
;
//
$requiredFields[] = 'vuid';
}
//
}
$rules
=
[
$rules
=
[
[
$requiredFields
,
'required'
],
[
[
'tmp'
,
'name'
,
'price'
,
'free_time'
,
'preview'
,
'vuid'
]
,
'required'
],
[[
'id'
,
'
class_id'
,
'user_id'
,
'
free_time'
],
'integer'
],
[[
'id'
,
'free_time'
],
'integer'
],
[[
'tmp'
,
'name'
,
'preview'
,
'intro'
],
'string'
],
[[
'tmp'
,
'name'
,
'preview'
,
'intro'
],
'string'
],
[
'tmp'
,
'match'
,
'pattern'
=>
'/^\w{20}$/i'
],
[
'tmp'
,
'match'
,
'pattern'
=>
'/^\w{20}$/i'
],
[
'teacher'
,
'validateTeachers'
],
[
'teacher'
,
'validateTeachers'
],
[
'teacher'
,
'default'
,
'value'
=>
[]],
[
'teacher'
,
'default'
,
'value'
=>
[]],
[
'free_time'
,
'integer'
,
'min'
=>
0
,
'max'
=>
15
],
[
'free_time'
,
'integer'
,
'min'
=>
0
,
'max'
=>
15
],
[
'preview'
,
'validateUploadKey'
],
[
'preview'
,
'validateUploadKey'
],
[
'recommend'
,
'boolean'
]
[
'recommend'
,
'boolean'
],
[
'vuid'
,
'validateUploadKey'
]
];
];
if
(
$this
->
createMode
)
{
$rules
[]
=
[
'vuid'
,
'validateUploadKey'
];
}
return
$rules
;
return
$rules
;
}
}
...
...
src/frontend/views/my-course/edit.php
View file @
05b342d1
...
@@ -6,7 +6,9 @@
...
@@ -6,7 +6,9 @@
* @var $teacherIds [\common\models\CourseTeacher]
* @var $teacherIds [\common\models\CourseTeacher]
*/
*/
use
common\libs\Utils
;
use
frontend\assets\AppAsset
;
use
frontend\assets\AppAsset
;
use
common\models\Course
;
$this
->
title
=
'编辑课程信息'
;
$this
->
title
=
'编辑课程信息'
;
...
@@ -37,6 +39,26 @@ AppAsset::addCss($this, '@web/assets/css/course_publish.css');
...
@@ -37,6 +39,26 @@ AppAsset::addCss($this, '@web/assets/css/course_publish.css');
<teachers
init-teachers=
"
<?=
join
(
','
,
$teacherIds
)
?>
"
></teachers>
<teachers
init-teachers=
"
<?=
join
(
','
,
$teacherIds
)
?>
"
></teachers>
</div>
</div>
<?php
if
(
$course
->
status
==
Course
::
STATUS_UNCHECK
||
$course
->
status
==
Course
::
STATUS_FAILED
)
{
?>
<div
class=
"cls-part"
>
<div
class=
"tit"
>
更换视频
<span
class=
"text-info"
style=
"font-size:12px;"
>
不选择则继续使用现有视频
</span></div>
<video-upload
uptoken=
"
<?=
$videoToken
?>
"
text=
"保留原视频或选择要更换的视频"
></video-upload>
</div>
<?php
}
else
{
?>
<div
class=
"cls-part"
>
<div
class=
"tit"
>
视频信息
</div>
<div>
<div
class=
"upload-ready"
>
<div
class=
"video-detail"
style=
"margin-top:0;"
>
视频时长:
<?=
Utils
::
humanSeconds
(
$lesson
->
time
)
?>
<br>
原始大小:
<?=
Utils
::
byteConvert
(
$lesson
->
size
)
?>
<br>
原始格式:
<?=
$lesson
->
format
?>
<br>
</div>
</div>
</div>
</div>
<?php
}
?>
<div
class=
"cls-part"
>
<div
class=
"cls-part"
>
<div
class=
"tit"
>
规则设定
</div>
<div
class=
"tit"
>
规则设定
</div>
<div
class=
"clearfix"
>
<div
class=
"clearfix"
>
...
...
src/frontend/views/my-course/publish.php
View file @
05b342d1
...
@@ -28,7 +28,7 @@ AppAsset::addCss($this, '@web/assets/css/course_publish.css');
...
@@ -28,7 +28,7 @@ AppAsset::addCss($this, '@web/assets/css/course_publish.css');
</div>
</div>
<div
class=
"cls-part"
>
<div
class=
"cls-part"
>
<div
class=
"tit"
>
上传视频
<span
class=
"required"
>
*
</span></div>
<div
class=
"tit"
>
上传视频
<span
class=
"required"
>
*
</span></div>
<video-upload
uptoken=
"
<?=
$videoToken
?>
"
></video-upload>
<video-upload
uptoken=
"
<?=
$videoToken
?>
"
></video-upload>
</div>
</div>
...
...
src/frontend/web/js/components/uploader/video-upload.vue
View file @
05b342d1
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
<div>
<div>
<div
class=
"upload-video-btn"
v-bind:id=
"uploaderId"
v-show=
"state=='ready' || state=='error'"
>
<div
class=
"upload-video-btn"
v-bind:id=
"uploaderId"
v-show=
"state=='ready' || state=='error'"
>
<i
class=
"icon-play"
></i>
<i
class=
"icon-play"
></i>
<b>
上传视频
</b>
<b>
{{
text
}}
</b>
</div>
</div>
<div
class=
"upload-ready"
v-else
>
<div
class=
"upload-ready"
v-else
>
...
@@ -18,11 +18,8 @@
...
@@ -18,11 +18,8 @@
<i
class=
"upload-progress"
v-bind:style=
"
{width:progress + '%'}">
</i>
<i
class=
"upload-progress"
v-bind:style=
"
{width:progress + '%'}">
</i>
<!--上传完成-->
<!--上传完成-->
<!--
<span
class=
"tip-upload-rdy"
v-show=
"state=='completed'"
><i
class=
"icon-check"
></i>
上传完成
</span>
<span
class=
"tip-upload-rdy"
><i
class=
"icon-check"
></i>
上传完成
</span>
<a
href=
"javascript:;"
class=
"delete"
title=
"取消"
@
click=
"cancelClick"
><i
class=
"icon-cross"
></i></a>
-->
<a
href=
"#"
class=
"delete"
><i
class=
"icon-cross"
></i></a>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
...
@@ -37,6 +34,8 @@ import layer from "layer-js";
...
@@ -37,6 +34,8 @@ import layer from "layer-js";
import
str
from
"../../utils/string"
;
import
str
from
"../../utils/string"
;
import
qiniu
from
"../../utils/qiniu"
;
import
qiniu
from
"../../utils/qiniu"
;
var
uploader
;
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
...
@@ -49,7 +48,20 @@ export default {
...
@@ -49,7 +48,20 @@ export default {
}
}
},
},
props
:
{
props
:
{
uptoken
:
String
uptoken
:
String
,
text
:
{
type
:
String
,
default
:
"上传视频"
}
},
methods
:
{
cancelClick
:
function
()
{
uploader
.
stop
();
this
.
state
=
"ready"
;
uploader
.
refresh
();
this
.
$dispatch
(
"video-upload-cancel"
);
}
},
},
ready
()
{
ready
()
{
var
container
=
$
(
this
.
$el
),
var
container
=
$
(
this
.
$el
),
...
@@ -81,7 +93,7 @@ export default {
...
@@ -81,7 +93,7 @@ export default {
}
}
});
});
var
uploader
=
new
qiniu
.
Uploader
({
uploader
=
new
qiniu
.
Uploader
({
browse_button
:
self
.
uploaderId
,
browse_button
:
self
.
uploaderId
,
drop_element
:
self
.
uploaderId
,
drop_element
:
self
.
uploaderId
,
upload_token
:
self
.
uptoken
,
upload_token
:
self
.
uptoken
,
...
@@ -102,8 +114,6 @@ export default {
...
@@ -102,8 +114,6 @@ export default {
self
.
videoName
=
file
.
name
;
self
.
videoName
=
file
.
name
;
});
});
// container.find(".upload-video-btn").hide();
// ready.show();
self
.
state
=
'uploading'
;
self
.
state
=
'uploading'
;
up
.
start
();
up
.
start
();
...
@@ -123,10 +133,6 @@ export default {
...
@@ -123,10 +133,6 @@ export default {
var
toDate
=
new
Date
();
var
toDate
=
new
Date
();
toDate
.
setTime
((
new
Date
()).
getTime
()
+
leftSeconds
*
1000
);
toDate
.
setTime
((
new
Date
()).
getTime
()
+
leftSeconds
*
1000
);
infoRemain
.
text
(
moment
(
toDate
).
toNow
(
true
));
infoRemain
.
text
(
moment
(
toDate
).
toNow
(
true
));
// infoProgress.text(file.percent);
// $("#" + file.id + " .attachup-list-element-status").html("上传中 - " + file.percent + "%");
},
},
//每个文件上传成功后
//每个文件上传成功后
'FileUploaded'
:
function
(
up
,
file
,
info
)
{
'FileUploaded'
:
function
(
up
,
file
,
info
)
{
...
...
src/frontend/web/js/my-course/edit.js
View file @
05b342d1
...
@@ -2,11 +2,13 @@
...
@@ -2,11 +2,13 @@
* Created by pader on 16/10/21.
* Created by pader on 16/10/21.
*/
*/
var
Vue
=
require
(
'vue'
);
var
Vue
=
require
(
'vue'
);
var
videoUpload
=
require
(
'../components/uploader/video-upload.vue'
);
var
thumbUpload
=
require
(
'../components/uploader/thumb-upload.vue'
);
var
thumbUpload
=
require
(
'../components/uploader/thumb-upload.vue'
);
var
teacherQuickList
=
require
(
'./components/teacher-quick-list.vue'
);
var
teacherQuickList
=
require
(
'./components/teacher-quick-list.vue'
);
var
richText
=
require
(
'./rich-text'
);
var
richText
=
require
(
'./rich-text'
);
var
layer
=
require
(
"layer-js"
);
var
layer
=
require
(
"layer-js"
);
var
str
=
require
(
"../utils/string"
);
var
str
=
require
(
"../utils/string"
);
var
validateOption
=
require
(
'./validate-option'
);
require
(
'jquery-validation'
);
require
(
'jquery-validation'
);
...
@@ -20,70 +22,31 @@ var vm = new Vue({
...
@@ -20,70 +22,31 @@ var vm = new Vue({
tmp
:
str
.
rand
(
20
)
tmp
:
str
.
rand
(
20
)
},
},
components
:
{
components
:
{
videoUpload
:
videoUpload
,
thumbUpload
:
thumbUpload
,
thumbUpload
:
thumbUpload
,
teachers
:
teacherQuickList
teachers
:
teacherQuickList
},
},
ready
:
function
()
{
ready
:
function
()
{
var
self
=
this
;
var
self
=
this
;
this
.
$on
(
"video-uploaded"
,
function
(
name
,
data
)
{
self
.
vuid
=
data
.
uuid
;
});
this
.
$on
(
"video-upload-cancel"
,
function
()
{
self
.
vuid
=
"@orig"
;
});
this
.
$on
(
"thumb-uploaded"
,
function
(
name
,
data
)
{
this
.
$on
(
"thumb-uploaded"
,
function
(
name
,
data
)
{
self
.
previewKey
=
data
.
uuid
;
self
.
previewKey
=
data
.
uuid
;
});
});
var
validator
=
$
(
form
).
validate
({
var
opt
=
validateOption
.
generateOption
(
form
);
$
.
extend
(
opt
,
{
//debug: true,
//debug: true,
//errorClass: "",
//errorClass: "",
//validClass: "",
//validClass: "",
ignore
:
""
,
rules
:
{
name
:
{
required
:
true
},
price
:
{
min
:
0.01
},
preview
:
{
required
:
true
}
},
messages
:
{
name
:
{
required
:
"请填写标题"
},
price
:
{
min
:
"必须设置一个价格"
},
preview
:
{
required
:
"必须上传缩略图"
}
},
errorPlacement
:
function
(
error
,
element
)
{
var
text
=
error
.
text
();
var
org
=
element
.
get
(
0
);
var
to
=
null
;
if
(
org
==
form
.
preview
)
{
to
=
$
(
".upload-video-screen"
).
get
(
0
);
}
else
{
to
=
org
;
}
//绑定提示到元素上
if
(
text
)
{
if
(
to
.
tipIndex
)
{
layer
.
close
(
to
.
tipIndex
);
}
to
.
tipIndex
=
layer
.
tips
(
text
,
to
,
{
tips
:
org
==
form
.
name
?
3
:
2
,
time
:
0
,
tipsMore
:
true
});
}
else
if
(
to
.
tipIndex
)
{
layer
.
close
(
to
.
tipIndex
);
to
.
tipIndex
=
null
;
}
},
success
:
function
()
{},
//添加 success 后,当表单验证成功时才会触发 errorPlacement,否则验证成功不触发
submitHandler
:
function
()
{
submitHandler
:
function
()
{
var
data
=
$
(
form
).
serialize
();
var
data
=
$
(
form
).
serialize
();
var
idx
=
layer
.
msg
(
"正在提交.."
,
{
icon
:
16
,
shade
:
[
0.2
,
'#000'
],
time
:
0
});
var
idx
=
layer
.
msg
(
"正在提交.."
,
{
icon
:
16
,
shade
:
[
0.2
,
'#000'
],
time
:
0
});
...
@@ -91,7 +54,7 @@ var vm = new Vue({
...
@@ -91,7 +54,7 @@ var vm = new Vue({
$
.
post
(
"/my-course/save"
,
data
,
function
(
t
)
{
$
.
post
(
"/my-course/save"
,
data
,
function
(
t
)
{
layer
.
close
(
idx
);
layer
.
close
(
idx
);
if
(
t
.
status
)
{
if
(
t
.
status
)
{
window
.
onbeforeunload
=
null
;
window
.
onbeforeunload
=
null
;
layer
.
msg
(
'成功修改课程信息。'
,
{
layer
.
msg
(
'成功修改课程信息。'
,
{
time
:
2000
,
time
:
2000
,
icon
:
1
,
icon
:
1
,
...
@@ -103,12 +66,14 @@ var vm = new Vue({
...
@@ -103,12 +66,14 @@ var vm = new Vue({
}
else
{
}
else
{
layer
.
alert
(
t
.
message
,
{
icon
:
5
,
title
:
"提示"
});
layer
.
alert
(
t
.
message
,
{
icon
:
5
,
title
:
"提示"
});
}
}
},
"json"
);
},
"json"
);
return
false
;
return
false
;
}
}
});
});
var
validator
=
$
(
form
).
validate
(
opt
);
var
doValidate
=
function
()
{
validator
.
form
();
};
var
doValidate
=
function
()
{
validator
.
form
();
};
this
.
$watch
(
"vuid"
,
doValidate
);
this
.
$watch
(
"vuid"
,
doValidate
);
...
@@ -117,8 +82,8 @@ var vm = new Vue({
...
@@ -117,8 +82,8 @@ var vm = new Vue({
richText
.
createEditor
(
$
(
"#introEditor"
),
this
.
tmp
);
richText
.
createEditor
(
$
(
"#introEditor"
),
this
.
tmp
);
}
}
});
});
//添加关闭提示页面
//添加关闭提示页面
window
.
onbeforeunload
=
function
()
{
window
.
onbeforeunload
=
function
()
{
var
warning
=
"确认退出?"
;
return
"确认退出?"
;
return
warning
;
};
};
\ No newline at end of file
src/frontend/web/js/my-course/publish.js
View file @
05b342d1
...
@@ -8,6 +8,7 @@ var teacherQuickList = require('./components/teacher-quick-list.vue');
...
@@ -8,6 +8,7 @@ var teacherQuickList = require('./components/teacher-quick-list.vue');
var
richText
=
require
(
'./rich-text'
);
var
richText
=
require
(
'./rich-text'
);
var
layer
=
require
(
"layer-js"
);
var
layer
=
require
(
"layer-js"
);
var
str
=
require
(
"../utils/string"
);
var
str
=
require
(
"../utils/string"
);
var
validateOption
=
require
(
'./validate-option'
);
require
(
'jquery-validation'
);
require
(
'jquery-validation'
);
...
@@ -31,83 +32,21 @@ var vm = new Vue({
...
@@ -31,83 +32,21 @@ var vm = new Vue({
this
.
$on
(
"video-uploaded"
,
function
(
name
,
data
)
{
this
.
$on
(
"video-uploaded"
,
function
(
name
,
data
)
{
self
.
vuid
=
data
.
uuid
;
self
.
vuid
=
data
.
uuid
;
});
});
this
.
$on
(
"video-upload-cancel"
,
function
()
{
self
.
vuid
=
""
;
});
this
.
$on
(
"thumb-uploaded"
,
function
(
name
,
data
)
{
this
.
$on
(
"thumb-uploaded"
,
function
(
name
,
data
)
{
self
.
previewKey
=
data
.
uuid
;
self
.
previewKey
=
data
.
uuid
;
});
});
$
.
validator
.
addMethod
(
'courseName'
,
function
(
value
,
element
,
param
)
{
return
value
.
indexOf
(
'云涯'
);
var
opt
=
validateOption
.
generateOption
(
form
);
});
var
validator
=
$
(
form
).
validate
(
{
$
.
extend
(
opt
,
{
//debug: true,
//debug: true,
//errorClass: "",
//errorClass: "",
//validClass: "",
//validClass: "",
ignore
:
""
,
rules
:
{
name
:
{
required
:
true
,
courseName
:
true
},
price
:
{
min
:
0.01
},
intro
:
{
required
:
true
},
preview
:
{
required
:
true
},
vuid
:
{
required
:
true
}
},
messages
:
{
name
:
{
required
:
"请填写标题"
,
courseName
:
'课堂名称不允许出现“云涯”二字。'
},
price
:
{
min
:
"必须设置一个价格"
},
intro
:
{
required
:
"必须填写课程介绍"
},
preview
:
{
required
:
"必须上传缩略图"
},
vuid
:
{
required
:
"您还没有上传视频"
}
},
errorPlacement
:
function
(
error
,
element
)
{
var
text
=
error
.
text
();
var
org
=
element
.
get
(
0
);
var
to
=
null
;
if
(
org
==
form
.
vuid
)
{
to
=
$
(
".upload-video-btn"
).
get
(
0
);
}
else
if
(
org
==
form
.
preview
)
{
to
=
$
(
".upload-video-screen"
).
get
(
0
);
}
else
{
to
=
org
;
}
//绑定提示到元素上
if
(
text
)
{
if
(
to
.
tipIndex
)
{
layer
.
close
(
to
.
tipIndex
);
}
to
.
tipIndex
=
layer
.
tips
(
text
,
to
,
{
tips
:
org
==
form
.
name
?
3
:
2
,
time
:
0
,
tipsMore
:
true
});
}
else
if
(
to
.
tipIndex
)
{
layer
.
close
(
to
.
tipIndex
);
to
.
tipIndex
=
null
;
}
},
success
:
function
()
{},
//添加 success 后,当表单验证成功时才会触发 errorPlacement,否则验证成功不触发
submitHandler
:
function
()
{
submitHandler
:
function
()
{
var
data
=
$
(
form
).
serialize
();
var
data
=
$
(
form
).
serialize
();
var
idx
=
layer
.
msg
(
"正在提交.."
,
{
icon
:
16
,
shade
:
[
0.2
,
'#000'
],
time
:
0
});
var
idx
=
layer
.
msg
(
"正在提交.."
,
{
icon
:
16
,
shade
:
[
0.2
,
'#000'
],
time
:
0
});
...
@@ -115,7 +54,7 @@ var vm = new Vue({
...
@@ -115,7 +54,7 @@ var vm = new Vue({
$
.
post
(
"/my-course/submit"
,
data
,
function
(
t
)
{
$
.
post
(
"/my-course/submit"
,
data
,
function
(
t
)
{
layer
.
close
(
idx
);
layer
.
close
(
idx
);
if
(
t
.
status
)
{
if
(
t
.
status
)
{
window
.
onbeforeunload
=
null
;
window
.
onbeforeunload
=
null
;
location
.
replace
(
"/my-course/result?id="
+
t
.
data
.
course_id
+
"&action=publish"
);
location
.
replace
(
"/my-course/result?id="
+
t
.
data
.
course_id
+
"&action=publish"
);
}
else
{
}
else
{
layer
.
alert
(
t
.
message
,
{
icon
:
5
,
title
:
"提示"
});
layer
.
alert
(
t
.
message
,
{
icon
:
5
,
title
:
"提示"
});
...
@@ -126,6 +65,7 @@ var vm = new Vue({
...
@@ -126,6 +65,7 @@ var vm = new Vue({
}
}
});
});
var
validator
=
$
(
form
).
validate
(
opt
);
var
doValidate
=
function
()
{
validator
.
form
();
};
var
doValidate
=
function
()
{
validator
.
form
();
};
this
.
$watch
(
"vuid"
,
doValidate
);
this
.
$watch
(
"vuid"
,
doValidate
);
...
@@ -135,9 +75,7 @@ var vm = new Vue({
...
@@ -135,9 +75,7 @@ var vm = new Vue({
}
}
});
});
//添加关闭提示页面
//添加关闭提示页面
window
.
onbeforeunload
=
function
()
{
window
.
onbeforeunload
=
function
()
{
var
warning
=
"确认退出?"
;
return
"确认退出?"
;
return
warning
;
};
};
\ No newline at end of file
src/frontend/web/js/my-course/validate-option.js
0 → 100644
View file @
05b342d1
/**
* Created by pader on 2016/10/31.
*/
module
.
exports
=
{
generateOption
:
function
(
form
)
{
return
{
ignore
:
""
,
rules
:
{
name
:
{
required
:
true
},
price
:
{
min
:
0.01
},
intro
:
{
required
:
true
},
preview
:
{
required
:
true
},
vuid
:
{
required
:
true
}
},
messages
:
{
name
:
{
required
:
"请填写标题"
,
courseName
:
'课程名称不允许出现“云涯”二字。'
},
price
:
{
min
:
"必须设置一个价格"
},
intro
:
{
required
:
"必须填写课程介绍"
},
preview
:
{
required
:
"必须上传缩略图"
},
vuid
:
{
required
:
"您还没有上传视频"
}
},
success
:
function
()
{},
//添加 success 后,当表单验证成功时才会触发 errorPlacement,否则验证成功不触发
errorPlacement
:
function
(
error
,
element
)
{
var
text
=
error
.
text
();
var
org
=
element
.
get
(
0
);
var
to
=
null
;
if
(
org
==
form
.
vuid
)
{
to
=
$
(
".upload-video-btn"
).
get
(
0
);
}
else
if
(
org
==
form
.
preview
)
{
to
=
$
(
".upload-video-screen"
).
get
(
0
);
}
else
{
to
=
org
;
}
//绑定提示到元素上
if
(
text
)
{
if
(
to
.
tipIndex
)
{
layer
.
close
(
to
.
tipIndex
);
}
to
.
tipIndex
=
layer
.
tips
(
text
,
to
,
{
tips
:
org
==
form
.
name
?
3
:
2
,
time
:
0
,
tipsMore
:
true
});
}
else
if
(
to
.
tipIndex
)
{
layer
.
close
(
to
.
tipIndex
);
to
.
tipIndex
=
null
;
}
}
};
}
};
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment