Explorar o código

线上课程后台

weixianghui %!s(int64=5) %!d(string=hai) anos
pai
achega
28c09cffd6
Modificáronse 100 ficheiros con 502 adicións e 14 borrados
  1. 50 14
      core/src/qfw/manage/course.go
  2. 129 0
      core/src/web/staticres/css/base.css
  3. 197 0
      core/src/web/staticres/css/issue.css
  4. 1 0
      core/src/web/staticres/css/layui.css
  5. 3 0
      core/src/web/staticres/img/checked.svg
  6. BIN=BIN
      core/src/web/staticres/img/date.png
  7. 3 0
      core/src/web/staticres/img/select.svg
  8. 82 0
      core/src/web/staticres/js/issue.js
  9. 1 0
      core/src/web/staticres/js/layui.js
  10. 1 0
      core/src/web/staticres/layui/css/layui.css
  11. 1 0
      core/src/web/staticres/layui/css/layui.mobile.css
  12. 2 0
      core/src/web/staticres/layui/css/modules/code.css
  13. 1 0
      core/src/web/staticres/layui/css/modules/laydate/default/laydate.css
  14. BIN=BIN
      core/src/web/staticres/layui/css/modules/layer/default/icon-ext.png
  15. BIN=BIN
      core/src/web/staticres/layui/css/modules/layer/default/icon.png
  16. 1 0
      core/src/web/staticres/layui/css/modules/layer/default/layer.css
  17. BIN=BIN
      core/src/web/staticres/layui/css/modules/layer/default/loading-0.gif
  18. BIN=BIN
      core/src/web/staticres/layui/css/modules/layer/default/loading-1.gif
  19. BIN=BIN
      core/src/web/staticres/layui/css/modules/layer/default/loading-2.gif
  20. BIN=BIN
      core/src/web/staticres/layui/font/iconfont.eot
  21. 25 0
      core/src/web/staticres/layui/font/iconfont.svg
  22. BIN=BIN
      core/src/web/staticres/layui/font/iconfont.ttf
  23. BIN=BIN
      core/src/web/staticres/layui/font/iconfont.woff
  24. BIN=BIN
      core/src/web/staticres/layui/font/iconfont.woff2
  25. BIN=BIN
      core/src/web/staticres/layui/images/face/0.gif
  26. BIN=BIN
      core/src/web/staticres/layui/images/face/1.gif
  27. BIN=BIN
      core/src/web/staticres/layui/images/face/10.gif
  28. BIN=BIN
      core/src/web/staticres/layui/images/face/11.gif
  29. BIN=BIN
      core/src/web/staticres/layui/images/face/12.gif
  30. BIN=BIN
      core/src/web/staticres/layui/images/face/13.gif
  31. BIN=BIN
      core/src/web/staticres/layui/images/face/14.gif
  32. BIN=BIN
      core/src/web/staticres/layui/images/face/15.gif
  33. BIN=BIN
      core/src/web/staticres/layui/images/face/16.gif
  34. BIN=BIN
      core/src/web/staticres/layui/images/face/17.gif
  35. BIN=BIN
      core/src/web/staticres/layui/images/face/18.gif
  36. BIN=BIN
      core/src/web/staticres/layui/images/face/19.gif
  37. BIN=BIN
      core/src/web/staticres/layui/images/face/2.gif
  38. BIN=BIN
      core/src/web/staticres/layui/images/face/20.gif
  39. BIN=BIN
      core/src/web/staticres/layui/images/face/21.gif
  40. BIN=BIN
      core/src/web/staticres/layui/images/face/22.gif
  41. BIN=BIN
      core/src/web/staticres/layui/images/face/23.gif
  42. BIN=BIN
      core/src/web/staticres/layui/images/face/24.gif
  43. BIN=BIN
      core/src/web/staticres/layui/images/face/25.gif
  44. BIN=BIN
      core/src/web/staticres/layui/images/face/26.gif
  45. BIN=BIN
      core/src/web/staticres/layui/images/face/27.gif
  46. BIN=BIN
      core/src/web/staticres/layui/images/face/28.gif
  47. BIN=BIN
      core/src/web/staticres/layui/images/face/29.gif
  48. BIN=BIN
      core/src/web/staticres/layui/images/face/3.gif
  49. BIN=BIN
      core/src/web/staticres/layui/images/face/30.gif
  50. BIN=BIN
      core/src/web/staticres/layui/images/face/31.gif
  51. BIN=BIN
      core/src/web/staticres/layui/images/face/32.gif
  52. BIN=BIN
      core/src/web/staticres/layui/images/face/33.gif
  53. BIN=BIN
      core/src/web/staticres/layui/images/face/34.gif
  54. BIN=BIN
      core/src/web/staticres/layui/images/face/35.gif
  55. BIN=BIN
      core/src/web/staticres/layui/images/face/36.gif
  56. BIN=BIN
      core/src/web/staticres/layui/images/face/37.gif
  57. BIN=BIN
      core/src/web/staticres/layui/images/face/38.gif
  58. BIN=BIN
      core/src/web/staticres/layui/images/face/39.gif
  59. BIN=BIN
      core/src/web/staticres/layui/images/face/4.gif
  60. BIN=BIN
      core/src/web/staticres/layui/images/face/40.gif
  61. BIN=BIN
      core/src/web/staticres/layui/images/face/41.gif
  62. BIN=BIN
      core/src/web/staticres/layui/images/face/42.gif
  63. BIN=BIN
      core/src/web/staticres/layui/images/face/43.gif
  64. BIN=BIN
      core/src/web/staticres/layui/images/face/44.gif
  65. BIN=BIN
      core/src/web/staticres/layui/images/face/45.gif
  66. BIN=BIN
      core/src/web/staticres/layui/images/face/46.gif
  67. BIN=BIN
      core/src/web/staticres/layui/images/face/47.gif
  68. BIN=BIN
      core/src/web/staticres/layui/images/face/48.gif
  69. BIN=BIN
      core/src/web/staticres/layui/images/face/49.gif
  70. BIN=BIN
      core/src/web/staticres/layui/images/face/5.gif
  71. BIN=BIN
      core/src/web/staticres/layui/images/face/50.gif
  72. BIN=BIN
      core/src/web/staticres/layui/images/face/51.gif
  73. BIN=BIN
      core/src/web/staticres/layui/images/face/52.gif
  74. BIN=BIN
      core/src/web/staticres/layui/images/face/53.gif
  75. BIN=BIN
      core/src/web/staticres/layui/images/face/54.gif
  76. BIN=BIN
      core/src/web/staticres/layui/images/face/55.gif
  77. BIN=BIN
      core/src/web/staticres/layui/images/face/56.gif
  78. BIN=BIN
      core/src/web/staticres/layui/images/face/57.gif
  79. BIN=BIN
      core/src/web/staticres/layui/images/face/58.gif
  80. BIN=BIN
      core/src/web/staticres/layui/images/face/59.gif
  81. BIN=BIN
      core/src/web/staticres/layui/images/face/6.gif
  82. BIN=BIN
      core/src/web/staticres/layui/images/face/60.gif
  83. BIN=BIN
      core/src/web/staticres/layui/images/face/61.gif
  84. BIN=BIN
      core/src/web/staticres/layui/images/face/62.gif
  85. BIN=BIN
      core/src/web/staticres/layui/images/face/63.gif
  86. BIN=BIN
      core/src/web/staticres/layui/images/face/64.gif
  87. BIN=BIN
      core/src/web/staticres/layui/images/face/65.gif
  88. BIN=BIN
      core/src/web/staticres/layui/images/face/66.gif
  89. BIN=BIN
      core/src/web/staticres/layui/images/face/67.gif
  90. BIN=BIN
      core/src/web/staticres/layui/images/face/68.gif
  91. BIN=BIN
      core/src/web/staticres/layui/images/face/69.gif
  92. BIN=BIN
      core/src/web/staticres/layui/images/face/7.gif
  93. BIN=BIN
      core/src/web/staticres/layui/images/face/70.gif
  94. BIN=BIN
      core/src/web/staticres/layui/images/face/71.gif
  95. BIN=BIN
      core/src/web/staticres/layui/images/face/8.gif
  96. BIN=BIN
      core/src/web/staticres/layui/images/face/9.gif
  97. 1 0
      core/src/web/staticres/layui/lay/modules/carousel.js
  98. 2 0
      core/src/web/staticres/layui/lay/modules/code.js
  99. 1 0
      core/src/web/staticres/layui/lay/modules/colorpicker.js
  100. 1 0
      core/src/web/staticres/layui/lay/modules/element.js

+ 50 - 14
core/src/qfw/manage/course.go

@@ -35,11 +35,12 @@ type CourseManage struct {
 	getDetail   xweb.Mapper `xweb:"/manage/courseOrder/getDetail"`     //请求课程订单详情
 
 	//线上课程
+	onLineIndex 	xweb.Mapper `xweb:"/manage/course/onLineIndex"`             //线上课程首页
 	createOnLineApi      xweb.Mapper `xweb:"/manage/course/OnLineRequest"`             //线上课程新增、修改
 	onLineClickTradeRate      xweb.Mapper `xweb:"/manage/course/OnLineClickTradeRate"`             //线上课程点击量、购买量
 	onLineList           xweb.Mapper `xweb:"/manage/course/OnLineList"`                  //线上课程列表
 	onLineChangeStatus   xweb.Mapper `xweb:"/manage/course/OnLineChangeStatus"`          //上线or下线
-	onLineDetail xweb.Mapper `xweb:"/manage/course/OnLineDetail"`        //课程详情
+	onLineDetail xweb.Mapper `xweb:"/manage/course/OnLineDetail/(\\w+)/(\\w+)"`        //课程详情
 }
 
 type FuncResult struct {
@@ -264,6 +265,10 @@ func (this *CourseManage) List() {
 	if queryStr != "" {
 		query["s_name"] = bson.M{"$regex": queryStr}
 	}
+	//课程类型不等于3
+	query1 := map[string]int32{}
+	query1["$ne"] = 3
+	query["i_type"] = query1
 	rData := mongodb.Find("jy_course", query, `{"l_publishtime":-1}`, `{"_id":1,"i_type":1,"s_address":1,"i_status":1,"s_name":1,"l_publishtime":1}`, false, (currentPage-1)*perPage, perPage)
 	count := mongodb.Count("jy_course", query)
 	this.ServeJson(map[string]interface{}{
@@ -490,7 +495,7 @@ func (this *CourseManage) CreateOnLineApi() {
 	if price == "" {
 		price = "0"
 	}
-	price2, err1 := strconv.ParseFloat(price, 64)
+	price2 := fmt.Sprintf("%.2f", qutil.Float64All(price))
 	videoUrl := this.GetString("videoUrl")//课程视频
 	fileUrl := this.GetString("fileUrl")//课件
 	s_publishtime := this.GetString("publishtime")//发布时间/上线时间
@@ -528,12 +533,9 @@ func (this *CourseManage) CreateOnLineApi() {
 		if err != nil {
 			return &FuncResult{false, errors.New("课程内容解析异常"), nil}
 		}
-		if err1 != nil {
+		/*if err1 != nil {
 			return &FuncResult{false, errors.New("课程金额异常"), nil}
-		}
-		//if !(price2 > 0 && price != "") {
-		//	return &FuncResult{false, errors.New("课程金额异常"), nil}
-		//}
+		}*/
 		//数据校验
 		mData := map[string]interface{}{
 			"s_name":         name,
@@ -708,7 +710,7 @@ func (this *CourseManage) OnLineChangeStatus() {
 			if time.Unix(qutil.Int64All((*rData)["l_endtime"]), 0).Before(time.Now()) {
 				return &FuncResult{false, errors.New("课程截止时间已到,禁止上线"), nil}
 			}
-			if (*rData)["i_status"] == 0 {
+			if (*rData)["i_status"] == 0 || (*rData)["i_status"] == -1{
 				ok := mongodb.Update("jy_course", &map[string]interface{}{
 					"_id": qutil.StringTOBsonId(_id),
 				}, &map[string]interface{}{
@@ -728,8 +730,40 @@ func (this *CourseManage) OnLineChangeStatus() {
 	this.ServeJson(r.Format())
 }
 
-func (this *CourseManage) OnLineDetail() {
-	_id := this.GetString("_id")             //课程id
+func (this *CourseManage) OnLineDetail(flag, id string) error{
+	if flag == "edit" {
+		//获取文章详情
+		if id == "" {
+			return errors.New("请求参数有误")
+		}
+		rData := mongodb.FindById("jy_course", id, `{"_id":1,"i_status":1,"s_content":1,"s_name":1,"s_picUrl":1,"i_price":1,"l_publishtime":1,"l_endtime":1,"s_associatedCourses":1,"i_clickRate":1,"s_videoUrl":1,"s_fileUrl":1,"s_courseDate":1,"i_tradeRate":1}`)
+		this.T["picUrl"] = (*rData)["s_picUrl"]
+		this.T["name"] = (*rData)["s_name"]
+		this.T["videoUrl"] = (*rData)["s_videoUrl"]
+		this.T["fileUrl"] = (*rData)["s_fileUrl"]
+		this.T["price"] = (*rData)["i_price"]
+		this.T["endTime"] = time.Unix(qutil.Int64All((*rData)["l_endtime"]), 0).Format(qutil.Date_Full_Layout)
+		this.T["courseDate"] = (*rData)["s_courseDate"]
+		this.T["content"] = (*rData)["s_content"]
+		this.T["status"] = (*rData)["i_status"]
+		ids := (*rData)["s_associatedCourses"]
+		arr := strings.Split(ids.(string), ",")
+		var idSlice []bson.ObjectId
+		for _, as := range arr{
+			idSlice = append(idSlice, bson.ObjectIdHex(as))
+		}
+		now := time.Now().Unix()
+		queryAbout := bson.M{"i_type": 3, "i_status": 1, "_id": bson.M{"$in":idSlice}, "l_publishtime": bson.M{"$lt":now}, "l_endtime": bson.M{"$gt":now}}
+		aboutList := mongodb.Find("jy_course", queryAbout, `{"l_publishtime":-1}`,
+			`{"_id":1,"s_name":1}`, false, 0, 0)
+		this.T["associatedCourses"] = aboutList
+		this.T["publishtime"] = time.Unix(qutil.Int64All((*rData)["l_publishtime"]), 0).Format(qutil.Date_Full_Layout)
+		this.T["id"] = id
+	}
+	this.T["doType"] = flag
+	this.Render("/manage/course/onLineContent.html")
+	return nil
+	/*_id := this.GetString("_id")             //课程id
 	r := func() *FuncResult {
 		if _id == "" {
 			return &FuncResult{false, errors.New("信息id为空"), nil}
@@ -756,9 +790,6 @@ func (this *CourseManage) OnLineDetail() {
 			queryAbout := bson.M{"i_type": 3, "i_status": 1, "_id": bson.M{"$in":idSlice}, "l_publishtime": bson.M{"$lt":now}, "l_endtime": bson.M{"$gt":now}}
 			aboutList := mongodb.Find("jy_course", queryAbout, `{"l_publishtime":-1}`,
 				`{"_id":1,"s_name":1}`, false, 0, 0)
-			/*for _, v := range *aboutList {
-				v["_id"] = qutil.EncodeArticleId2ByCheck(qutil.BsonIdToSId(v["_id"]))
-			}*/
 			resultMap["aboutList"] = aboutList
 		}
 		return &FuncResult{true, nil, resultMap}
@@ -766,5 +797,10 @@ func (this *CourseManage) OnLineDetail() {
 	if r.Err != nil {
 		log.Printf(" CourseContent err:%v\n", r.Err.Error())
 	}
-	this.ServeJson(r.Format())
+	this.ServeJson(r.Format())*/
+}
+
+//线上课程首页
+func (this *CourseManage) OnLineIndex() error {
+	return this.Render("/manage/course/onLineIndex.html")
 }

+ 129 - 0
core/src/web/staticres/css/base.css

@@ -0,0 +1,129 @@
+html, body, div, span, applet, object, iframe, 
+h1, h2, h3, h4, h5, h6, p, blockquote, pre, 
+a, abbr, acronym, address, big, cite, code, 
+del, dfn, em, font, img, ins, kbd, q, s, samp, 
+small, strike, strong, sub, sup, tt, var, 
+dl, dt, dd, ol, ul, li, 
+fieldset, form, label, legend, 
+table, caption, tbody, tfoot, thead, tr, th, td { 
+margin: 0; 
+padding: 0; 
+border: 0; 
+outline: 0; 
+font-weight: inherit; 
+font-style: inherit; 
+font-size: 14px; 
+font-family: inherit; 
+vertical-align: baseline; 
+-webkit-tap-highlight-color: transparent;
+} 
+:focus { 
+outline: 0; 
+} 
+body { 
+/*line-height: 1; */
+/*color: black; 
+background: white; */
+font-family: "Microsoft YaHei",sans-serif;
+font-size: 14px;
+-webkit-font-smoothing: antialiased;
+color: #4E5051;
+} 
+input{
+	font-family: "Microsoft YaHei",sans-serif;
+	-webkit-appearance: none;
+}
+ol, ul { 
+list-style: none; 
+} 
+button{ 
+	outline: none;border: none;
+	}
+table { 
+border-collapse: separate; 
+border-spacing: 0; 
+} 
+caption, th, td { 
+text-align: left; 
+font-weight: normal; 
+} 
+textarea { resize:none;-webkit-appearance: none; }
+img{border:0;}
+a{
+	text-decoration:none;
+	color: #000;
+	font-size: 14px;
+}
+/*selet 下拉三角改变*/
+/*select {border: none;border-radius: 0;appearance:none;-moz-appearance:none;-webkit-appearance:none;background:#ffffff url(../images/public-img/pub-Xsj.png) no-repeat 95% center;}*/
+/*清除ie的默认选择框样式清除,隐藏下拉箭头*/
+/*select::-ms-expand { display: none;}
+html{-webkit-text-size-adjust: none;}	*/	
+	
+/*a:link {color:#606060;} 
+a:visited {color:#606060;} 
+a:hover{color:#8cb91e;	text-decoration: underline;}
+a:active {color:#606060;}*/
+address,caption,cite,code,dfn,em,th,b,i {font-weight: normal;font-style: normal;}
+
+.clearfix:after {visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; }
+.clearfix {*zoom:1; }
+.fl {float:left; }
+.fr {float: right; }
+.w {width: 1200px; margin: 0 auto;}
+.ellipsis {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+/*去除下拉框*/
+/*input[type="search"]::-webkit-search-cancel-button{
+  display: none;
+}*/
+
+/* 版心宽度 */
+.wrapper {
+  margin: 0 auto;
+  width: 1200px;
+}
+
+/* 按钮样式 */
+button {
+  cursor: pointer;
+}
+.btn {
+  width: 48px;
+  height: 22px;
+  border: 1px solid #999;
+  border-radius: 4px;
+  font-size: 12px;
+  color: #4E5051;
+  background-color: #fff;
+}
+.btn.change {
+  color: #EAB62F;
+  border-color: #EAB62F;
+}
+.btn.out {
+  color: #F5585C;
+  border-color: #F5585C;
+}
+.btn.clone {
+  color: #4DB443;
+  border-color: #4DB443;
+}
+/* input样式 */
+input[type='text'] {
+  box-sizing: border-box;
+  border-style: none;
+  border: 1px solid #ccc;
+  height: 36px;
+  padding: 0 16px;
+  background-color: #fff;
+}
+input::placeholder {
+  color: #AEAEAE;
+}
+
+
+

+ 197 - 0
core/src/web/staticres/css/issue.css

@@ -0,0 +1,197 @@
+.issue {
+  flex: 1;
+  background-color: #F9F9F9;
+  padding: 0 116px 0 66px;
+}
+.issue .title {
+  padding: 10px 44px;
+  border-bottom: 1px solid #9FD6DD;
+}
+.issue .items {
+  padding: 16px 44px 0 44px;
+  display: flex;
+}
+.issue .items .items-left {
+  width: 70px;
+  line-height: 38px;
+}
+.issue .items .items-right {
+  margin-left: 16px;
+}
+.issue .items .items-right input {
+  width: 900px;
+  background-color: #fff;
+}
+.issue .items .items-right input.price {
+  width: 200px;
+}
+.issue .items .items-right input.time {
+  width: 330px;
+  background: url(../img/date.png) no-repeat 300px center;
+  background-color: #fff;
+  cursor: pointer;
+}
+.issue .items .items-right button {
+  box-sizing: border-box;
+  width: 110px;
+  height: 38px;
+  background: #FFFFFF;
+  border: 1px solid #CCCCCC;
+  border-radius: 4px;
+}
+.issue .items .items-right button.now-issue {
+  border: none;
+  color: #fff;
+  background-color: #4DB443;
+}
+.issue .items .items-right button.save {
+  margin-left: 12px;
+  border-color: #4DB443;
+  color: #4DB443;
+}
+.issue .items .items-right .courser {
+  display: flex;
+  flex-direction: column;
+}
+.issue .items .items-right .courser li {
+  margin-top: 12px;
+  line-height: 24px;
+}
+.issue .issue-courser,
+.issue .relevance {
+  display: none;
+}
+.issue .mork {
+  position: fixed;
+  top: 120px;
+  bottom: 0;
+  left: 247px;
+  right: 0;
+}
+.issue .mork .hint {
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  transform: translate(-50%, -50%);
+  padding: 24px;
+  box-sizing: border-box;
+  width: 360px;
+  background: #FFFFFF;
+  box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
+  border-radius: 8px;
+}
+.issue .mork .hint h2 {
+  text-align: center;
+  font-size: 18px;
+  line-height: 24px;
+}
+.issue .mork .hint p {
+  margin-top: 16px;
+  text-align: center;
+  line-height: 24px;
+}
+.issue .mork .hint span {
+  margin-top: 4px;
+  font-size: 12px;
+  line-height: 20px;
+  color: #F7585C;
+}
+.issue .mork .hint .btns {
+  margin-top: 24px;
+  display: flex;
+  justify-content: space-between;
+}
+.issue .mork .hint .btns button {
+  width: 110px;
+  height: 38px;
+  border-radius: 4px;
+  color: #fff;
+}
+.issue .mork .hint .btns button.cancel {
+  background-color: #C2C2C2;
+}
+.issue .mork .hint .btns button.now-out {
+  background-color: #F5585C;
+}
+.issue .mork .hint .btns button.ensure {
+  background-color: #4DB443;
+}
+.issue .mork .choose-course {
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  transform: translate(-50%, -50%);
+  box-sizing: border-box;
+  width: 800px;
+  max-height: 600px;
+  padding: 24px 30px;
+  background: #FFFFFF;
+  box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
+  border-radius: 8px;
+}
+.issue .mork .choose-course h3 {
+  line-height: 24px;
+  font-size: 18px;
+  text-align: center;
+}
+.issue .mork .choose-course ul {
+  display: flex;
+  flex-direction: column;
+  margin-top: 24px;
+  max-height: 440px;
+  overflow-y: auto;
+  /*滚动条样式*/
+}
+.issue .mork .choose-course ul::-webkit-scrollbar {
+  width: 4px;
+}
+.issue .mork .choose-course ul::-webkit-scrollbar-thumb {
+  border-radius: 10px;
+  box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
+  background: #ECECEC;
+}
+.issue .mork .choose-course ul li {
+  height: 40px;
+  display: flex;
+  align-items: center;
+}
+.issue .mork .choose-course ul li input[type='checkbox'] {
+  box-sizing: border-box;
+  width: 16px;
+  height: 16px;
+  border: 1px solid #CCCCCC;
+  border-radius: 50%;
+  cursor: pointer;
+}
+.issue .mork .choose-course ul li input[type='checkbox']:checked {
+  border: none;
+  background: url(../img/checked.svg) no-repeat center center;
+}
+.issue .mork .choose-course ul li label {
+  flex: 1;
+  margin-left: 10px;
+  padding-right: 36px;
+  line-height: 40px;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  cursor: pointer;
+}
+.issue .mork .choose-course .btns {
+  display: flex;
+  justify-content: center;
+  margin-top: 26px;
+}
+.issue .mork .choose-course .btns button {
+  margin: 0 45px;
+  width: 110px;
+  height: 38px;
+  border-radius: 4px;
+  color: #fff;
+}
+.issue .mork .choose-course .btns button.choose-cencal {
+  background-color: #C2C2C2;
+}
+.issue .mork .choose-course .btns button.choose-ensure {
+  background-color: #4DB443;
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
core/src/web/staticres/css/layui.css


+ 3 - 0
core/src/web/staticres/img/checked.svg

@@ -0,0 +1,3 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10.0002 18C8.14936 18 6.35568 17.3584 4.92492 16.1843C3.49416 15.0102 2.51493 13.3761 2.1538 11.5609C1.79266 9.74561 2.07202 7.86135 2.94446 6.22903C3.81689 4.59671 5.2283 3.31734 6.93824 2.60901C8.64817 1.90067 10.5509 1.80722 12.3221 2.34445C14.0933 2.88167 15.6233 4.01631 16.6516 5.5552C17.68 7.0941 18.1429 8.94196 17.9615 10.7839C17.7801 12.6258 16.9657 14.348 15.657 15.6568C14.9158 16.4019 14.0342 16.9926 13.0632 17.3949C12.0923 17.7971 11.0512 18.0028 10.0002 18ZM6.14562 8.95275C6.00195 8.95292 5.86163 8.99556 5.74221 9.07544C5.6228 9.15532 5.52964 9.26889 5.47464 9.40161C5.41963 9.53434 5.40518 9.68025 5.43309 9.82118C5.46099 9.96211 5.52999 10.0918 5.63142 10.1935L8.71735 13.2793C8.85374 13.4156 9.03871 13.4922 9.23156 13.4922C9.4244 13.4922 9.6092 13.4156 9.74558 13.2793L14.374 8.65161C14.4415 8.58404 14.4952 8.50375 14.5318 8.41546C14.5684 8.32718 14.5872 8.23261 14.5872 8.13705C14.5872 8.04149 14.5684 7.94693 14.5318 7.85865C14.4952 7.77036 14.4415 7.69007 14.374 7.6225C14.3064 7.55492 14.2263 7.50139 14.138 7.46483C14.0497 7.42826 13.955 7.40943 13.8594 7.40943C13.7638 7.40943 13.6693 7.42826 13.581 7.46483C13.4927 7.50139 13.4126 7.55492 13.345 7.6225L9.23156 11.736L6.65983 9.16511C6.59244 9.09744 6.5123 9.04371 6.42403 9.00726C6.33577 8.97081 6.24112 8.95236 6.14562 8.95275Z" fill="#4DB443"/>
+</svg>

BIN=BIN
core/src/web/staticres/img/date.png


+ 3 - 0
core/src/web/staticres/img/select.svg

@@ -0,0 +1,3 @@
+<svg width="6" height="6" viewBox="0 0 6 6" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M6 0H0L3 6L6 0Z" fill="#333333"/>
+</svg>

+ 82 - 0
core/src/web/staticres/js/issue.js

@@ -0,0 +1,82 @@
+$(function() {
+  layui.use('laydate', function () {
+    var laydate = layui.laydate;
+    //执行一个laydate实例
+    laydate.render({
+      elem: '#publishtime', //指定元素
+       trigger: 'click',
+      type: 'datetime'
+    });
+    //执行一个laydate实例
+    laydate.render({
+      elem: '#endTime', //指定元素
+      trigger: 'click',
+      type: 'datetime'
+    });
+  });
+  // layui.use('laydate', function () {
+  //   var laydate = layui.laydate;
+  //   //执行一个laydate实例
+  //   laydate.render({
+  //     elem: '#endTime', //指定元素
+  //     type: 'datetime'
+  //   });
+  // });
+  // 立即发布
+  $('.now-issue').click(function() {
+    $('.issue-courser').show()
+  })
+  // 立即发布-取消
+  $('.cancel').click(function() {
+    $('.issue-courser').hide()
+  })
+  // 立即发布-发布
+  $('.ensure').click(function() {
+    $('.issue-courser').hide()
+  })
+  glkc()
+  // 选择关联课程
+  $('.choose-btn').click(function (){
+    glkc()
+    $('.relevance').show()
+  })
+  // 选择关联课程-取消
+  $('.choose-cencal').click(function (){
+    $('.relevance').hide();
+
+  })
+  // 选择关联课程-确认
+  $('.choose-ensure').click(function (){
+    $('.relevance').hide();
+    $(".courser").empty();
+    var li = ""
+    $('.relevance input:checked').parent().find('label').each(function(){
+      li = li + '<li id="'+$(this).attr("for")+'">'+ $(this).text() +'</li>'
+    })
+    $('.courser').html(li);
+    if($('.relevance input:checked').length) {
+      $('.choose-btn').text('重新选择')
+    }
+  })
+})
+function glkc() {
+  //关联课程
+  var lis = $(".courser li")
+  var arr = new Array()
+  lis.each(function () {
+    arr.push($(this).attr('id'))
+  })
+  $.post("/manage/course/OnLineList", {flag: 'gl'}, function (r) {
+    var li = ''
+    if (r.data.length != 0) {
+      for (var i = 0; i < r.data.length; i++){
+        if (arr.indexOf(r.data[i]._id) != -1){
+          li = li + '<li><input type="checkbox" checked name="courser" id="'+ r.data[i]._id +'"><label for="'+ r.data[i]._id +'">'+ r.data[i].s_name +'</label></li>'
+        }else {
+          li = li + '<li><input type="checkbox" name="courser" id="'+ r.data[i]._id +'"><label for="'+ r.data[i]._id +'">'+ r.data[i].s_name +'</label></li>'
+        }
+      }
+    }
+    $('#glkc').html(li)
+  })
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
core/src/web/staticres/js/layui.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
core/src/web/staticres/layui/css/layui.css


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
core/src/web/staticres/layui/css/layui.mobile.css


+ 2 - 0
core/src/web/staticres/layui/css/modules/code.css

@@ -0,0 +1,2 @@
+/** layui-v2.5.6 MIT License By https://www.layui.com */
+ html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
core/src/web/staticres/layui/css/modules/laydate/default/laydate.css


BIN=BIN
core/src/web/staticres/layui/css/modules/layer/default/icon-ext.png


BIN=BIN
core/src/web/staticres/layui/css/modules/layer/default/icon.png


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
core/src/web/staticres/layui/css/modules/layer/default/layer.css


BIN=BIN
core/src/web/staticres/layui/css/modules/layer/default/loading-0.gif


BIN=BIN
core/src/web/staticres/layui/css/modules/layer/default/loading-1.gif


BIN=BIN
core/src/web/staticres/layui/css/modules/layer/default/loading-2.gif


BIN=BIN
core/src/web/staticres/layui/font/iconfont.eot


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 25 - 0
core/src/web/staticres/layui/font/iconfont.svg


BIN=BIN
core/src/web/staticres/layui/font/iconfont.ttf


BIN=BIN
core/src/web/staticres/layui/font/iconfont.woff


BIN=BIN
core/src/web/staticres/layui/font/iconfont.woff2


BIN=BIN
core/src/web/staticres/layui/images/face/0.gif


BIN=BIN
core/src/web/staticres/layui/images/face/1.gif


BIN=BIN
core/src/web/staticres/layui/images/face/10.gif


BIN=BIN
core/src/web/staticres/layui/images/face/11.gif


BIN=BIN
core/src/web/staticres/layui/images/face/12.gif


BIN=BIN
core/src/web/staticres/layui/images/face/13.gif


BIN=BIN
core/src/web/staticres/layui/images/face/14.gif


BIN=BIN
core/src/web/staticres/layui/images/face/15.gif


BIN=BIN
core/src/web/staticres/layui/images/face/16.gif


BIN=BIN
core/src/web/staticres/layui/images/face/17.gif


BIN=BIN
core/src/web/staticres/layui/images/face/18.gif


BIN=BIN
core/src/web/staticres/layui/images/face/19.gif


BIN=BIN
core/src/web/staticres/layui/images/face/2.gif


BIN=BIN
core/src/web/staticres/layui/images/face/20.gif


BIN=BIN
core/src/web/staticres/layui/images/face/21.gif


BIN=BIN
core/src/web/staticres/layui/images/face/22.gif


BIN=BIN
core/src/web/staticres/layui/images/face/23.gif


BIN=BIN
core/src/web/staticres/layui/images/face/24.gif


BIN=BIN
core/src/web/staticres/layui/images/face/25.gif


BIN=BIN
core/src/web/staticres/layui/images/face/26.gif


BIN=BIN
core/src/web/staticres/layui/images/face/27.gif


BIN=BIN
core/src/web/staticres/layui/images/face/28.gif


BIN=BIN
core/src/web/staticres/layui/images/face/29.gif


BIN=BIN
core/src/web/staticres/layui/images/face/3.gif


BIN=BIN
core/src/web/staticres/layui/images/face/30.gif


BIN=BIN
core/src/web/staticres/layui/images/face/31.gif


BIN=BIN
core/src/web/staticres/layui/images/face/32.gif


BIN=BIN
core/src/web/staticres/layui/images/face/33.gif


BIN=BIN
core/src/web/staticres/layui/images/face/34.gif


BIN=BIN
core/src/web/staticres/layui/images/face/35.gif


BIN=BIN
core/src/web/staticres/layui/images/face/36.gif


BIN=BIN
core/src/web/staticres/layui/images/face/37.gif


BIN=BIN
core/src/web/staticres/layui/images/face/38.gif


BIN=BIN
core/src/web/staticres/layui/images/face/39.gif


BIN=BIN
core/src/web/staticres/layui/images/face/4.gif


BIN=BIN
core/src/web/staticres/layui/images/face/40.gif


BIN=BIN
core/src/web/staticres/layui/images/face/41.gif


BIN=BIN
core/src/web/staticres/layui/images/face/42.gif


BIN=BIN
core/src/web/staticres/layui/images/face/43.gif


BIN=BIN
core/src/web/staticres/layui/images/face/44.gif


BIN=BIN
core/src/web/staticres/layui/images/face/45.gif


BIN=BIN
core/src/web/staticres/layui/images/face/46.gif


BIN=BIN
core/src/web/staticres/layui/images/face/47.gif


BIN=BIN
core/src/web/staticres/layui/images/face/48.gif


BIN=BIN
core/src/web/staticres/layui/images/face/49.gif


BIN=BIN
core/src/web/staticres/layui/images/face/5.gif


BIN=BIN
core/src/web/staticres/layui/images/face/50.gif


BIN=BIN
core/src/web/staticres/layui/images/face/51.gif


BIN=BIN
core/src/web/staticres/layui/images/face/52.gif


BIN=BIN
core/src/web/staticres/layui/images/face/53.gif


BIN=BIN
core/src/web/staticres/layui/images/face/54.gif


BIN=BIN
core/src/web/staticres/layui/images/face/55.gif


BIN=BIN
core/src/web/staticres/layui/images/face/56.gif


BIN=BIN
core/src/web/staticres/layui/images/face/57.gif


BIN=BIN
core/src/web/staticres/layui/images/face/58.gif


BIN=BIN
core/src/web/staticres/layui/images/face/59.gif


BIN=BIN
core/src/web/staticres/layui/images/face/6.gif


BIN=BIN
core/src/web/staticres/layui/images/face/60.gif


BIN=BIN
core/src/web/staticres/layui/images/face/61.gif


BIN=BIN
core/src/web/staticres/layui/images/face/62.gif


BIN=BIN
core/src/web/staticres/layui/images/face/63.gif


BIN=BIN
core/src/web/staticres/layui/images/face/64.gif


BIN=BIN
core/src/web/staticres/layui/images/face/65.gif


BIN=BIN
core/src/web/staticres/layui/images/face/66.gif


BIN=BIN
core/src/web/staticres/layui/images/face/67.gif


BIN=BIN
core/src/web/staticres/layui/images/face/68.gif


BIN=BIN
core/src/web/staticres/layui/images/face/69.gif


BIN=BIN
core/src/web/staticres/layui/images/face/7.gif


BIN=BIN
core/src/web/staticres/layui/images/face/70.gif


BIN=BIN
core/src/web/staticres/layui/images/face/71.gif


BIN=BIN
core/src/web/staticres/layui/images/face/8.gif


BIN=BIN
core/src/web/staticres/layui/images/face/9.gif


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
core/src/web/staticres/layui/lay/modules/carousel.js


+ 2 - 0
core/src/web/staticres/layui/lay/modules/code.js

@@ -0,0 +1,2 @@
+/** layui-v2.5.6 MIT License By https://www.layui.com */
+ ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;").replace(/"/g,"&quot;")),c.html('<ol class="layui-code-ol"><li>'+o.replace(/[\r\t\n]+/g,"</li><li>")+"</li></ol>"),c.find(">.layui-code-h3")[0]||c.prepend('<h3 class="layui-code-h3">'+(c.attr("lay-title")||e.title||"code")+(e.about?'<a href="'+l+'" target="_blank">layui.code</a>':"")+"</h3>");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss");

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
core/src/web/staticres/layui/lay/modules/colorpicker.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
core/src/web/staticres/layui/lay/modules/element.js


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio