Jelajahi Sumber

Merge branch 'dev2.9.1' of http://192.168.3.207:10080/qmx/qfw into dev2.9.1

lianbingjie 5 tahun lalu
induk
melakukan
c7e7e98257
100 mengubah file dengan 829 tambahan dan 6 penghapusan
  1. 0 4
      common/src/qfw/util/rpc/follow.go
  2. 43 0
      common/src/qfw/util/rpc/order.go
  3. 336 2
      core/src/qfw/manage/course.go
  4. 129 0
      core/src/web/staticres/css/base.css
  5. 197 0
      core/src/web/staticres/css/issue.css
  6. 1 0
      core/src/web/staticres/css/layui.css
  7. 3 0
      core/src/web/staticres/img/checked.svg
  8. TEMPAT SAMPAH
      core/src/web/staticres/img/date.png
  9. 3 0
      core/src/web/staticres/img/select.svg
  10. 82 0
      core/src/web/staticres/js/issue.js
  11. 1 0
      core/src/web/staticres/js/layui.js
  12. 1 0
      core/src/web/staticres/layui/css/layui.css
  13. 1 0
      core/src/web/staticres/layui/css/layui.mobile.css
  14. 2 0
      core/src/web/staticres/layui/css/modules/code.css
  15. 1 0
      core/src/web/staticres/layui/css/modules/laydate/default/laydate.css
  16. TEMPAT SAMPAH
      core/src/web/staticres/layui/css/modules/layer/default/icon-ext.png
  17. TEMPAT SAMPAH
      core/src/web/staticres/layui/css/modules/layer/default/icon.png
  18. 1 0
      core/src/web/staticres/layui/css/modules/layer/default/layer.css
  19. TEMPAT SAMPAH
      core/src/web/staticres/layui/css/modules/layer/default/loading-0.gif
  20. TEMPAT SAMPAH
      core/src/web/staticres/layui/css/modules/layer/default/loading-1.gif
  21. TEMPAT SAMPAH
      core/src/web/staticres/layui/css/modules/layer/default/loading-2.gif
  22. TEMPAT SAMPAH
      core/src/web/staticres/layui/font/iconfont.eot
  23. 25 0
      core/src/web/staticres/layui/font/iconfont.svg
  24. TEMPAT SAMPAH
      core/src/web/staticres/layui/font/iconfont.ttf
  25. TEMPAT SAMPAH
      core/src/web/staticres/layui/font/iconfont.woff
  26. TEMPAT SAMPAH
      core/src/web/staticres/layui/font/iconfont.woff2
  27. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/0.gif
  28. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/1.gif
  29. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/10.gif
  30. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/11.gif
  31. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/12.gif
  32. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/13.gif
  33. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/14.gif
  34. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/15.gif
  35. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/16.gif
  36. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/17.gif
  37. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/18.gif
  38. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/19.gif
  39. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/2.gif
  40. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/20.gif
  41. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/21.gif
  42. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/22.gif
  43. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/23.gif
  44. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/24.gif
  45. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/25.gif
  46. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/26.gif
  47. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/27.gif
  48. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/28.gif
  49. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/29.gif
  50. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/3.gif
  51. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/30.gif
  52. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/31.gif
  53. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/32.gif
  54. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/33.gif
  55. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/34.gif
  56. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/35.gif
  57. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/36.gif
  58. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/37.gif
  59. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/38.gif
  60. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/39.gif
  61. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/4.gif
  62. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/40.gif
  63. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/41.gif
  64. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/42.gif
  65. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/43.gif
  66. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/44.gif
  67. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/45.gif
  68. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/46.gif
  69. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/47.gif
  70. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/48.gif
  71. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/49.gif
  72. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/5.gif
  73. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/50.gif
  74. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/51.gif
  75. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/52.gif
  76. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/53.gif
  77. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/54.gif
  78. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/55.gif
  79. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/56.gif
  80. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/57.gif
  81. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/58.gif
  82. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/59.gif
  83. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/6.gif
  84. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/60.gif
  85. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/61.gif
  86. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/62.gif
  87. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/63.gif
  88. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/64.gif
  89. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/65.gif
  90. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/66.gif
  91. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/67.gif
  92. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/68.gif
  93. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/69.gif
  94. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/7.gif
  95. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/70.gif
  96. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/71.gif
  97. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/8.gif
  98. TEMPAT SAMPAH
      core/src/web/staticres/layui/images/face/9.gif
  99. 1 0
      core/src/web/staticres/layui/lay/modules/carousel.js
  100. 2 0
      core/src/web/staticres/layui/lay/modules/code.js

+ 0 - 4
common/src/qfw/util/rpc/follow.go

@@ -6,7 +6,3 @@ type FollowData struct {
 	Server      string `json:"server"`
 	Projectname string `json:"projectname"`
 }
-type DateExportData struct {
-	ImgSrc    string `json:"imgSrc"`
-	OrderCode string `json:"orderCode"`
-}

+ 43 - 0
common/src/qfw/util/rpc/order.go

@@ -0,0 +1,43 @@
+package rpc
+
+//数据导出线下支付
+type DateExportData struct {
+	ImgSrc    string `json:"imgSrc"`
+	OrderCode string `json:"orderCode"`
+}
+
+//创建订单
+type JyPayOrderParam struct {
+	Price       int                    `json:"price"`
+	ProductType string                 `json:"productType"`
+	Ip          string                 `json:"ip"`
+	Openid      string                 `json:"openid"`
+	PayWay      string                 `json:"payWay"`
+	Userid      string                 `json:"userid"`
+	Detail      map[string]interface{} `json:"detail"`
+}
+
+//修改订单
+type JyPayOrderChangeParam struct {
+	ProductType string `json:"productType"`
+	OrderCode   string `json:"orderCode"`
+	PayWay      string `json:"payWay"`
+	Openid      string `json:"openid"`
+	Ip          string `json:"ip"`
+}
+
+//关闭订单
+type JyPayOrderCloseParam struct {
+	ProductType string `json:"productType"`
+	OrderCode   string `json:"orderCode"`
+}
+
+/*
+code -1:失败
+err  错误信息
+*/
+type JyPayOrderResult struct {
+	Status    int    `json:"status"`
+	Err       string `json:"err"`
+	OrderCode string `json:"orderCode"`
+}

+ 336 - 2
core/src/qfw/manage/course.go

@@ -33,6 +33,14 @@ type CourseManage struct {
 	orderDetail xweb.Mapper `xweb:"/manage/courseOrder/detail/(\\w+)"` //课程订单详情
 	orderList   xweb.Mapper `xweb:"/manage/courseOrder/list"`          //请求课程订单列表
 	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/(\\w+)/(\\w+)"`        //课程详情
 }
 
 type FuncResult struct {
@@ -190,8 +198,8 @@ func (this *CourseManage) OrderList() {
 	c_type := this.GetString("strSel2")   //请求类型 0:订单编号 1:课程名称 2:联系人(订单表中 user_nickname 暂存联系人信息) 3:联系人手机号
 	c_content := this.GetString("strCont")
 	var sql = ``
-	var c_sql = `SELECT order_status,order_code,pay_time,filter,applybill_status,pay_money,order_money,course_status,pay_way FROM dataexport_order  WHERE  product_type = '招投标课程' and `
-	var c_sql_c = `SELECT count(*) FROM dataexport_order  WHERE product_type = '招投标课程' and `
+	var c_sql = `SELECT order_status,order_code,pay_time,filter,applybill_status,pay_money,order_money,course_status,pay_way FROM dataexport_order  WHERE  product_type in ('招投标课程','线上课程') and `
+	var c_sql_c = `SELECT count(*) FROM dataexport_order  WHERE product_type in ('招投标课程','线上课程') and `
 	if c_status != "" {
 		sql += `order_status =` + fmt.Sprint(c_status)
 	} else {
@@ -257,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{}{
@@ -474,3 +486,325 @@ func (this *CourseManage) ChangeStatus() {
 	}
 	this.ServeJson(r.Format())
 }
+
+func (this *CourseManage) CreateOnLineApi() {
+	c_type, _ := this.GetInteger("type") //课程类型:线下课程(1招标管理课程、2投标实物课程)、3线上课程
+	name := this.GetString("name")//课程名称
+	picUrl := this.GetString("picUrl")//头图
+	price := this.GetString("price")//课程金额
+	if price == "" {
+		price = "0"
+	}
+	price2 := fmt.Sprintf("%.2f", qutil.Float64All(price))
+	pos := strings.Index(price2, ".")
+	price3 := qutil.Int64All(price2[:pos] + price2[pos+1:])
+	videoUrl := this.GetString("videoUrl")//课程视频
+	fileUrl := this.GetString("fileUrl")//课件
+	s_publishtime := this.GetString("publishtime")//发布时间/上线时间
+	d_content := this.GetString("content")//课程详情
+	Dotype := this.GetString("dotype") //新增add or 修改edit
+	//status := this.GetString("status") //1上线、0草稿、-1未发布
+	courseDate :=  this.GetString("courseDate")//课程时长
+	endTime :=  this.GetString("endTime")//课程有效截止时间
+	associatedCourses := this.GetString("associatedCourses")//关联课程
+	//updateTime :=  this.GetString("updateTime")//课程内容更新时间
+	//createTime := time.Now().Unix()
+	//clickRate := 0//点击量默认0次
+	//tradeRate := 0//购买量默认0次
+
+	r := func() *FuncResult {
+		//数据校验
+		if name == "" || picUrl == "" || videoUrl == "" || c_type != 3 ||
+			courseDate == "" || endTime == "" {
+			return &FuncResult{false, errors.New("参数不完整"), nil}
+		}
+		publishtime, err := time.ParseInLocation(qutil.Date_Full_Layout, s_publishtime, time.Local)
+		if err != nil {
+			return &FuncResult{false, errors.New("发布时间异常"), nil}
+		}
+		l_endTime, err := time.ParseInLocation(qutil.Date_Full_Layout, endTime, time.Local)
+		if err != nil {
+			return &FuncResult{false, errors.New("课程截止时间异常"), nil}
+		}
+		//
+		d1_content, err := url.QueryUnescape(d_content)
+		if err != nil {
+			return &FuncResult{false, errors.New("课程内容解析异常"), nil}
+		}
+		content, err := url.QueryUnescape(d1_content)
+		if err != nil {
+			return &FuncResult{false, errors.New("课程内容解析异常"), nil}
+		}
+		/*if err1 != nil {
+			return &FuncResult{false, errors.New("课程金额异常"), nil}
+		}*/
+		//数据校验
+		mData := map[string]interface{}{
+			"s_name":         name,
+			"i_type":         c_type,
+			"s_picUrl":      picUrl,
+			"s_videoUrl":      videoUrl,
+			"s_fileUrl":      fileUrl,
+			"i_price":        price3,
+			"l_publishtime":  publishtime.Unix(),
+			//"l_createtime":    createTime,
+			"l_endtime":      l_endTime.Unix(),
+			"s_content":      content,
+			"s_courseDate":      courseDate,
+			"s_associatedCourses":      associatedCourses,
+			//"i_clickRate":      clickRate,
+			//"i_tradeRate":      tradeRate,
+		}
+		if Dotype == "add" || Dotype == "copy" {
+			mData["i_clickRate"] = 0
+			mData["i_tradeRate"] = 0
+			flag := this.GetString("flag") //保存 or 立即发布
+			if flag == "publish" {
+				mData["i_status"] = 1 //立即发布
+				if time.Now().After(l_endTime) {
+					return &FuncResult{false, errors.New("课程截止时间已到,禁止发布"), nil}
+				}
+			} else {
+				mData["i_status"] = 0 //暂时保存
+			}
+			mData["l_createTime"] = time.Now().Unix()
+			if mongodb.Save("jy_course", mData) == "" {
+				return &FuncResult{false, errors.New("增加课程失败"), nil}
+			} else {
+				return &FuncResult{true, nil, nil}
+			}
+		} else if Dotype == "edit" {
+			id := this.GetString("_id")
+			if id == "" {
+				return &FuncResult{false, errors.New("操作课程信息id为空"), nil}
+			}
+			flag := this.GetString("flag") //保存 or 立即发布
+			if flag == "publish" {
+				mData["i_status"] = 1 //立即发布
+				if time.Now().After(l_endTime) {
+					return &FuncResult{false, errors.New("课程截止时间已到,禁止发布"), nil}
+				}
+			} else {
+				mData["i_status"] = 0 //暂时保存
+			}
+			mData["l_updateTime"] = time.Now().Unix()
+			updateFlag := mongodb.Update("jy_course", &map[string]interface{}{
+				"_id": qutil.StringTOBsonId(id),
+			}, &map[string]interface{}{
+				"$set": mData,
+			}, false, false)
+			if !updateFlag {
+				return &FuncResult{false, errors.New("修改课程失败"), nil}
+			} else {
+				return &FuncResult{true, nil, nil}
+			}
+		}
+		return &FuncResult{false, errors.New("未知操作"), nil}
+	}()
+	if r.Err != nil {
+		log.Printf("CreateApi err:%v\n", r.Err.Error())
+	}
+	this.ServeJson(r.Format())
+}
+func (this *CourseManage) OnLineClickTradeRate()  {
+	_id := this.GetString("_id")//课程id
+	s_type := this.GetString("type")//类型click:点击量、trade:购买量
+	r := func() *FuncResult {
+		if _id != "" {
+			rData := mongodb.FindById("jy_course", _id, `"i_status":1,"l_starttime":1`)
+			if rData == nil || len(*rData) == 0 {
+				return &FuncResult{false, errors.New("未知信息_id"), nil}
+			}
+			if (*rData)["i_status"] == -1 {
+				return &FuncResult{false, errors.New("当状态下的信息不能增加购买量或点击量"), nil}
+			}
+			if s_type == "click" {
+				ok := mongodb.Update("jy_course", &map[string]interface{}{
+					"_id": qutil.StringTOBsonId(_id),
+				}, &map[string]interface{}{
+					"$inc": bson.M{"i_clickRate": 1},
+				}, false, false)
+
+				if ok {
+					return &FuncResult{true, nil, nil}
+				}
+			}
+			if s_type == "trade" {
+				ok := mongodb.Update("jy_course", &map[string]interface{}{
+					"_id": qutil.StringTOBsonId(_id),
+				}, &map[string]interface{}{
+					"$inc": bson.M{"i_tradeRate": 1},
+				}, false, false)
+
+				if ok {
+					return &FuncResult{true, nil, nil}
+				}
+			}
+		}else {
+			return &FuncResult{false, errors.New("课程id不能为空"), nil}
+		}
+		return &FuncResult{false, errors.New("未知操作"), nil}
+	}()
+	if r.Err != nil {
+		log.Printf("CreateApi err:%v\n", r.Err.Error())
+	}
+	this.ServeJson(r.Format())
+}
+
+func (this *CourseManage) OnLineList() {
+	currentPage, _ := this.GetInteger("currentPage")
+	perPage, _ := this.GetInteger("perPage")
+	queryStr := this.GetString("query")
+	flag :=  this.GetString("flag")
+	query := map[string]interface{}{}
+	if queryStr != "" {
+		query["s_name"] = bson.M{"$regex": queryStr}
+	}
+	if flag == "gl" {
+		now := time.Now().Unix()
+		query["i_status"] = 1
+		query["l_publishtime"] = bson.M{"$lt":now}
+		query["l_endtime"] = bson.M{"$gt":now}
+	}
+	query["i_type"] = 3
+	rData := mongodb.Find("jy_course", query, `{"l_publishtime":-1}`, `{"_id":1,"s_courseDate":1,"i_price":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{}{
+		"currentPage": currentPage,
+		"data":        rData,
+		"totalRows":   count,
+	})
+}
+
+func (this *CourseManage) OnLineChangeStatus() {
+	flag := this.GetString("flag")
+	_id := this.GetString("id")
+	r := func() *FuncResult {
+		if !(flag == "off" || flag == "on") {
+			return &FuncResult{false, errors.New("未知操作"), nil}
+		}
+		if _id == "" {
+			return &FuncResult{false, errors.New("未获取到信息_id"), nil}
+		}
+		rData := mongodb.FindById("jy_course", _id, `"i_status":1,"l_endtime":1`)
+		if rData == nil || len(*rData) == 0 {
+			return &FuncResult{false, errors.New("未知信息_id"), nil}
+		}
+		if (*rData)["i_status"] == -2 {
+			return &FuncResult{false, errors.New("当前信息状态不能更改"), nil}
+		}
+		if flag == "off" { //下线
+			if (*rData)["i_status"] == 1 {
+				ok := mongodb.Update("jy_course", &map[string]interface{}{
+					"_id": qutil.StringTOBsonId(_id),
+				}, &map[string]interface{}{
+					"$set": bson.M{"i_status": -1},
+				}, false, false)
+				//通过课程id查询该课程相关的订单
+				var updateSql = `UPDATE dataexport_order  SET order_status = -2 WHERE order_status = 0 AND product_type = '招投标课程' AND filter_id = '` + _id + `'`
+				go cutil.Mysql.UpdateOrDeleteBySql(updateSql)
+				if ok {
+					return &FuncResult{true, nil, nil}
+				}
+			}
+		} else if flag == "on" { //发布
+			//校验开课时间是否已到
+			if time.Unix(qutil.Int64All((*rData)["l_endtime"]), 0).Before(time.Now()) {
+				return &FuncResult{false, errors.New("课程截止时间已到,禁止上线"), nil}
+			}
+			if (*rData)["i_status"] == 0 || (*rData)["i_status"] == -1{
+				ok := mongodb.Update("jy_course", &map[string]interface{}{
+					"_id": qutil.StringTOBsonId(_id),
+				}, &map[string]interface{}{
+					"$set": bson.M{"i_status": 1},
+				}, false, false)
+
+				if ok {
+					return &FuncResult{true, nil, nil}
+				}
+			}
+		}
+		return &FuncResult{false, errors.New("信息状态修改非法"), nil}
+	}()
+	if r.Err != nil {
+		log.Printf("CreateApi err:%v\n", r.Err.Error())
+	}
+	this.ServeJson(r.Format())
+}
+
+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"] = fmt.Sprintf("%.2f", qutil.Float64All((*rData)["i_price"])/100)
+		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"]
+		var idSlice []bson.ObjectId
+		if ids != "" {
+			arr := strings.Split(ids.(string), ",")
+			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}
+		}
+		//课程基本信息
+		rData := mongodb.FindById("jy_course", _id, `{"_id":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}`)
+		if rData == nil || len(*rData) == 0 {
+			return &FuncResult{false, errors.New("未找到此课程的信息"), nil}
+		}
+		resultMap := map[string]interface{}{}
+		(*rData)["l_starttime"] = time.Unix(qutil.Int64All((*rData)["l_publishtime"]), 0).Format("2006-01-02 15:04")
+		(*rData)["l_endtime"] = time.Unix(qutil.Int64All((*rData)["l_endtime"]), 0).Format(qutil.Date_Short_Layout)
+		resultMap["detail"] = rData
+
+		if (*rData)["s_associatedCourses"] != "" {
+			//相关课程信息
+			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)
+			resultMap["aboutList"] = aboutList
+		}
+		return &FuncResult{true, nil, resultMap}
+	}()
+	if r.Err != nil {
+		log.Printf(" CourseContent err:%v\n", r.Err.Error())
+	}
+	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");

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