Jelajahi Sumber

线上课程后台

weixianghui 5 tahun lalu
induk
melakukan
28c09cffd6
100 mengubah file dengan 502 tambahan dan 14 penghapusan
  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. TEMPAT SAMPAH
      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. TEMPAT SAMPAH
      core/src/web/staticres/layui/css/modules/layer/default/icon-ext.png
  15. TEMPAT SAMPAH
      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. TEMPAT SAMPAH
      core/src/web/staticres/layui/css/modules/layer/default/loading-0.gif
  18. TEMPAT SAMPAH
      core/src/web/staticres/layui/css/modules/layer/default/loading-1.gif
  19. TEMPAT SAMPAH
      core/src/web/staticres/layui/css/modules/layer/default/loading-2.gif
  20. TEMPAT SAMPAH
      core/src/web/staticres/layui/font/iconfont.eot
  21. 25 0
      core/src/web/staticres/layui/font/iconfont.svg
  22. TEMPAT SAMPAH
      core/src/web/staticres/layui/font/iconfont.ttf
  23. TEMPAT SAMPAH
      core/src/web/staticres/layui/font/iconfont.woff
  24. TEMPAT SAMPAH
      core/src/web/staticres/layui/font/iconfont.woff2
  25. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/0.gif
  26. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/1.gif
  27. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/10.gif
  28. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/11.gif
  29. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/12.gif
  30. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/13.gif
  31. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/14.gif
  32. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/15.gif
  33. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/16.gif
  34. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/17.gif
  35. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/18.gif
  36. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/19.gif
  37. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/2.gif
  38. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/20.gif
  39. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/21.gif
  40. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/22.gif
  41. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/23.gif
  42. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/24.gif
  43. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/25.gif
  44. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/26.gif
  45. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/27.gif
  46. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/28.gif
  47. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/29.gif
  48. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/3.gif
  49. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/30.gif
  50. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/31.gif
  51. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/32.gif
  52. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/33.gif
  53. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/34.gif
  54. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/35.gif
  55. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/36.gif
  56. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/37.gif
  57. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/38.gif
  58. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/39.gif
  59. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/4.gif
  60. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/40.gif
  61. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/41.gif
  62. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/42.gif
  63. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/43.gif
  64. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/44.gif
  65. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/45.gif
  66. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/46.gif
  67. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/47.gif
  68. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/48.gif
  69. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/49.gif
  70. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/5.gif
  71. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/50.gif
  72. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/51.gif
  73. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/52.gif
  74. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/53.gif
  75. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/54.gif
  76. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/55.gif
  77. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/56.gif
  78. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/57.gif
  79. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/58.gif
  80. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/59.gif
  81. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/6.gif
  82. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/60.gif
  83. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/61.gif
  84. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/62.gif
  85. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/63.gif
  86. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/64.gif
  87. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/65.gif
  88. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/66.gif
  89. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/67.gif
  90. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/68.gif
  91. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/69.gif
  92. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/7.gif
  93. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/70.gif
  94. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/71.gif
  95. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/8.gif
  96. TEMPAT SAMPAH
      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;
+}

File diff ditekan karena terlalu besar
+ 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>

TEMPAT SAMPAH
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)
+  })
+}

File diff ditekan karena terlalu besar
+ 1 - 0
core/src/web/staticres/js/layui.js


File diff ditekan karena terlalu besar
+ 1 - 0
core/src/web/staticres/layui/css/layui.css


File diff ditekan karena terlalu besar
+ 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}

File diff ditekan karena terlalu besar
+ 1 - 0
core/src/web/staticres/layui/css/modules/laydate/default/laydate.css


TEMPAT SAMPAH
core/src/web/staticres/layui/css/modules/layer/default/icon-ext.png


TEMPAT SAMPAH
core/src/web/staticres/layui/css/modules/layer/default/icon.png


File diff ditekan karena terlalu besar
+ 1 - 0
core/src/web/staticres/layui/css/modules/layer/default/layer.css


TEMPAT SAMPAH
core/src/web/staticres/layui/css/modules/layer/default/loading-0.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/css/modules/layer/default/loading-1.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/css/modules/layer/default/loading-2.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/font/iconfont.eot


File diff ditekan karena terlalu besar
+ 25 - 0
core/src/web/staticres/layui/font/iconfont.svg


TEMPAT SAMPAH
core/src/web/staticres/layui/font/iconfont.ttf


TEMPAT SAMPAH
core/src/web/staticres/layui/font/iconfont.woff


TEMPAT SAMPAH
core/src/web/staticres/layui/font/iconfont.woff2


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/0.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/1.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/10.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/11.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/12.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/13.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/14.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/15.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/16.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/17.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/18.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/19.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/2.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/20.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/21.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/22.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/23.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/24.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/25.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/26.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/27.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/28.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/29.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/3.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/30.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/31.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/32.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/33.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/34.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/35.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/36.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/37.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/38.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/39.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/4.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/40.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/41.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/42.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/43.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/44.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/45.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/46.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/47.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/48.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/49.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/5.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/50.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/51.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/52.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/53.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/54.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/55.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/56.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/57.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/58.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/59.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/6.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/60.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/61.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/62.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/63.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/64.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/65.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/66.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/67.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/68.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/69.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/7.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/70.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/71.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/8.gif


TEMPAT SAMPAH
core/src/web/staticres/layui/images/face/9.gif


File diff ditekan karena terlalu besar
+ 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");

File diff ditekan karena terlalu besar
+ 1 - 0
core/src/web/staticres/layui/lay/modules/colorpicker.js


File diff ditekan karena terlalu besar
+ 1 - 0
core/src/web/staticres/layui/lay/modules/element.js


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini