XSLu08042 5 bulan lalu
induk
melakukan
f42e155f0b
100 mengubah file dengan 18899 tambahan dan 0 penghapusan
  1. 256 0
      api/course.js
  2. 65 0
      api/integral.js
  3. 71 0
      api/shortvideo.js
  4. 64 0
      assets/css/czy/emoji/biaoqin.js
  5. 3139 0
      assets/css/czy/emoji/sina.js
  6. 1595 0
      assets/css/czy/es.1.base.css
  7. 94 0
      assets/css/czy/es.2.color.css
  8. 28 0
      assets/css/czy/es.3.icon.css
  9. 101 0
      assets/css/czy/es.4.view.css
  10. 95 0
      components/adMask/adMask.vue
  11. 70 0
      components/es-nav-bg/es-nav-bg.vue
  12. 61 0
      components/es-nav-title-base/es-nav-title-base.vue
  13. 143 0
      components/es-nav-title/es-nav-title.vue
  14. 34 0
      components/es-top/es-top.vue
  15. 244 0
      components/me-tabs/me-tabs.vue
  16. 356 0
      components/popupBottom/popupBottom.vue
  17. 233 0
      components/share-box/share-box.vue
  18. 245 0
      components/share-box/share-boxN.vue
  19. 517 0
      pages/course/components/doctorHall.vue
  20. 181 0
      pages/course/components/hallItem.vue
  21. 403 0
      pages/course/components/studyCenter.vue
  22. 424 0
      pages/course/index.vue
  23. 519 0
      pages_course/catalogue.vue
  24. 416 0
      pages_course/catalogueN.nvue
  25. 638 0
      pages_course/commentN.nvue
  26. 584 0
      pages_course/components/comment.vue
  27. 243 0
      pages_course/components/commentList.vue
  28. 237 0
      pages_course/components/goodsItemVertical.vue
  29. 605 0
      pages_course/famousHall.vue
  30. 130 0
      pages_course/famousHallPage.vue
  31. 328 0
      pages_course/famousHallPageItem.vue
  32. 278 0
      pages_course/favoritePage.vue
  33. 2330 0
      pages_course/info.vue
  34. 257 0
      pages_course/learning.vue
  35. 321 0
      pages_course/learningPage.vue
  36. 405 0
      pages_course/myNote.vue
  37. 489 0
      pages_course/note.vue
  38. 383 0
      pages_course/noteList.vue
  39. 494 0
      pages_course/privilege.nvue
  40. 246 0
      pages_course/studyCenter/courseCollect.vue
  41. 274 0
      pages_course/studyCenter/orderList.vue
  42. 625 0
      pages_course/video/comment.vue
  43. 155 0
      pages_course/videoPopup.nvue
  44. 477 0
      pages_course/vipBuy.vue
  45. TEMPAT SAMPAH
      static/images/ad/Frame.png
  46. TEMPAT SAMPAH
      static/images/ad/adbtn.gif
  47. 4 0
      static/images/ad/addfans_btn.svg
  48. 4 0
      static/images/ad/buy_btn.svg
  49. TEMPAT SAMPAH
      static/images/ad/close_icon.png
  50. 35 0
      static/images/ad/free_font_img.svg
  51. TEMPAT SAMPAH
      static/images/ad/gift_img.png
  52. TEMPAT SAMPAH
      static/images/ad/gift_img_head.png
  53. TEMPAT SAMPAH
      static/images/ad/hdtz_icon40.png
  54. TEMPAT SAMPAH
      static/images/ad/integral_img.png
  55. TEMPAT SAMPAH
      static/images/ad/jianyi_icon.png
  56. TEMPAT SAMPAH
      static/images/ad/jskc_icon40.png
  57. TEMPAT SAMPAH
      static/images/ad/mflp_icon40.png
  58. 3 0
      static/images/ad/new_user_bg.svg
  59. TEMPAT SAMPAH
      static/images/ad/pointer.gif
  60. TEMPAT SAMPAH
      static/images/ad/redpacked.png
  61. TEMPAT SAMPAH
      static/images/ad/service.png
  62. TEMPAT SAMPAH
      static/images/ad/sign_in_on_icon.png
  63. TEMPAT SAMPAH
      static/images/ad/tc_bg.png
  64. TEMPAT SAMPAH
      static/images/ad/tc_kcc_bg.png
  65. TEMPAT SAMPAH
      static/images/ad/tc_ksp_bg.png
  66. TEMPAT SAMPAH
      static/images/ad/tc_kzb_bg.png
  67. TEMPAT SAMPAH
      static/images/ad/vipFrame.png
  68. TEMPAT SAMPAH
      static/images/ad/zsfw_icon40.png
  69. TEMPAT SAMPAH
      static/images/course/add.png
  70. TEMPAT SAMPAH
      static/images/course/arrow.png
  71. TEMPAT SAMPAH
      static/images/course/back_white_icon.png
  72. TEMPAT SAMPAH
      static/images/course/banner.png
  73. TEMPAT SAMPAH
      static/images/course/banner1.png
  74. TEMPAT SAMPAH
      static/images/course/banner2.png
  75. TEMPAT SAMPAH
      static/images/course/bg.png
  76. TEMPAT SAMPAH
      static/images/course/bg2.png
  77. TEMPAT SAMPAH
      static/images/course/bg3.png
  78. TEMPAT SAMPAH
      static/images/course/bg_bar.png
  79. TEMPAT SAMPAH
      static/images/course/black_back.png
  80. TEMPAT SAMPAH
      static/images/course/calendar.png
  81. TEMPAT SAMPAH
      static/images/course/cate-bg1.png
  82. TEMPAT SAMPAH
      static/images/course/cate-bg2.png
  83. TEMPAT SAMPAH
      static/images/course/cate-bg3.png
  84. TEMPAT SAMPAH
      static/images/course/check.png
  85. TEMPAT SAMPAH
      static/images/course/choose_icon.png
  86. TEMPAT SAMPAH
      static/images/course/choose_moren_icon.png
  87. TEMPAT SAMPAH
      static/images/course/close.png
  88. TEMPAT SAMPAH
      static/images/course/close_icon.png
  89. TEMPAT SAMPAH
      static/images/course/collect.png
  90. TEMPAT SAMPAH
      static/images/course/collect_icon.png
  91. TEMPAT SAMPAH
      static/images/course/collect_icon24.png
  92. TEMPAT SAMPAH
      static/images/course/collect_on_icon24.png
  93. TEMPAT SAMPAH
      static/images/course/collect_orange_icon.png
  94. TEMPAT SAMPAH
      static/images/course/comment.png
  95. TEMPAT SAMPAH
      static/images/course/comment2.png
  96. TEMPAT SAMPAH
      static/images/course/course_icon.png
  97. TEMPAT SAMPAH
      static/images/course/defHead.png
  98. TEMPAT SAMPAH
      static/images/course/dianzan_icon.png
  99. TEMPAT SAMPAH
      static/images/course/dianzan_on_icon.png
  100. TEMPAT SAMPAH
      static/images/course/edit.png

+ 256 - 0
api/course.js

@@ -0,0 +1,256 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ //获取是否收藏
+ export function checkFavorite(courseId) {
+ 	 return request('/app/course/checkFavorite?courseId='+courseId,null,'GET');
+ }
+ 
+ //获取是否关注
+ export function checkFollow(talentId) { 
+ 	 return request('/app/talent/checkFollow?talentId='+talentId,null,'GET');
+ }
+ 
+ //获取是否点赞
+ export function checkLike(courseId) {
+ 	 return request('/app/course/checkLike?courseId='+courseId,null,'GET');
+ }
+ 
+ //收藏
+ export function doFavorite(courseId) {
+	 const data={"courseId":courseId};
+ 	 return request('/app/course/doFavorite',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ //关注
+ export function doFollow(talentId) {
+	 const data={"talentId":talentId};
+ 	 return request('/app/talent/doFollow',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ //点赞
+ export function doLike(courseId) {
+	  const data={"courseId":courseId};
+ 	 return request('/app/course/doLike',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //获取课程详情
+ export function getCourseById(courseId) {
+ 	 return request('/app/course/getCourseById?courseId='+courseId,null,'GET');
+ }
+ 
+ //获取课程分类
+ export function getCourseCate() {
+ 	 return request('/app/course/getCourseCate',null,'GET');
+ }
+ 
+ 
+ //获取课程简介
+ export function getCourseDescription(courseId) {
+ 	 return request('/app/course/getCourseDescription?courseId='+courseId,null,'GET');
+ }
+ 
+ 
+
+ 
+ //课程列表
+ export function getCourseList(parmars,page = 1, size = 10) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/course/getCourseList',data,'GET');
+ }
+ 
+ //获取在学课程
+ export function getCourseStudyList(parmars,page = 1, size = 10) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/course/getCourseStudyList',data,'GET');
+ }
+ 
+ //获取课程目录
+ export function getCourseVideoList(parmars,page = 1, size = 20) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/course/getCourseVideoList',data,'GET');
+ }
+ 
+ //获取收藏课程
+ export function getMyFavoriteCourseList(parmars,page = 1, size = 100) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/course/getMyFavoriteCourseList',data,'GET');
+ }
+ 
+ //获取子分类
+ export function getProductCateByPid(pid) {
+ 	 return request('/app/course/getProductCateByPid?pid='+pid,null,'GET');
+ }
+ 
+ //分享课程
+ export function shareCourse(courseId) {
+ 	 return request('/app/course/shareCourse?courseId='+courseId,null,'GET');
+ }
+ 
+ 
+ //添加笔记
+ export function addCourseNote(data) {
+ 	 return request('/app/course/note/addCourseNote',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+ //点赞
+ export function noteDoLike(data) {
+ 	 return request('/app/course/note/doLike',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ //编辑笔记
+ export function editCourseNote(data) {
+ 	 return request('/app/course/note/editCourseNote',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //删除笔记
+ export function delCourseNote(data) {
+ 	 return request('/app/course/note/delCourseNote',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //课堂笔记列表
+ export function getCourseNoteList(parmars,page = 1, size = 10) {
+    let data = {"pageNum":page,"pageSize":size};
+    data=Object.assign(parmars, data);
+    return request('/app/course/note/getCourseNoteList',data,'GET');
+ }
+ 
+ 
+ //课堂笔记详情
+ export function getMyCourseNoteByNoteId(noteId) {
+ 	 return request('/app/course/note/getMyCourseNoteByNoteId?noteId='+noteId,null,'GET');
+ }
+ 
+ //我的笔记列表
+ export function getMyCourseNoteList(parmars,page = 1, size = 10) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/course/note/getMyCourseNoteList',data,'GET');
+ }
+ 
+
+ //新增课堂评论
+ export function addComment(data) {
+ 	 return request('/app/course/comment/addComment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ //修改课堂评论
+ export function updateComment(data) {
+ 	 return request('/app/course/comment',data,'PUT','application/json;charset=UTF-8');
+ }
+ 
+ //删除课堂评论
+ export function deleteComment(commentId) {
+ 	 return request('/app/course/comment/'+commentId,null,'DELETE','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //点赞
+ export function commentDoLike(data) {
+ 	 return request('/app/course/comment/doLike',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //课堂课堂评论
+ export function getCommentList(parmars,page = 1, size = 10) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/course/comment/list',data,'GET');
+ }
+ 
+ 
+ //我的评论
+ export function getMyCommentList(parmars,page = 1, size = 10) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/course/comment/myList',data,'GET');
+ }
+
+
+ //创建在学课程
+ export function addDuration(data) {
+ 	 return request('/app/course/addStudyCourse',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ //笔记转存
+ export function saveNote(data) {
+ 	 return request('/app/course/note/save',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+
+ 
+ //创建课程订单
+ export function createCourseOrder(data) {
+ 	 return request('/app/courseOrder/createOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ //创建课程订单
+ export function createIntegralOrder(data) {
+ 	 return request('/app/courseOrder/createIntegralOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+ //课程微信支付
+ export function wxPayment(data) {
+ 	 return request('/app/courseOrder/wxpayment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //课程支付宝支付
+ export function aliPayment(data) {
+  	return request('/app/courseOrder/aliPayment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //vip套餐列表
+ export function getPackageList(data) {
+ 	 return request('/app/userVip/getPackageList',null,'GET');
+ }
+ 
+ 
+ 
+ //创建Vip订单
+ export function createVipOrder(data) {
+ 	 return request('/app/userVip/createOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //会员支付宝支付
+ export function vipZfbPayment(data) {
+  	return request('/app/userVip/aliPayment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ //会员支付宝支付
+ export function getIntegral(data) {
+  	return request('/app/course/getIntegral',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+ //获取订单列表
+ export function getCourseOrderList(parmars,page = 1, size = 10) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/courseOrder/getCourseOrderList',data,'GET');
+ }
+ 
+ //获取Vip订单详情
+ export function getVipOrderById(orderId) {
+ 	 return request('/app/userVip/getVipOrderById?orderId='+orderId,null,'GET');
+ }
+ 
+ //获取订单详情
+ export function getCourseOrderById(orderId) {
+ 	 return request('/app/courseOrder/getCourseOrderById?orderId='+orderId,null,'GET');
+ }
+ 

+ 65 - 0
api/integral.js

@@ -0,0 +1,65 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getIntegralGoodsList(data) {
+ 	 return request('/app/integral/getIntegralGoodsList',data,'GET');
+ }
+ export function getIntegralGoodsById(data) {
+ 	 return request('/app/integral/getIntegralGoodsById',data,'GET');
+ }
+ export function getUserIntegralLogsList(data) {
+ 	 return request('/app/integral/getUserIntegralLogsList',data,'GET');
+ }
+ export function getIntegralOrderList(data) {
+ 	 return request('/app/integral/getIntegralOrderList',data,'GET');
+ }
+ export function getIntegralOrderById(data) {
+ 	 return request('/app/integral/getIntegralOrderById',data,'GET');
+ }
+ 
+ export function createOrder(data) {
+  	return request('/app/integral/createOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getUserSign() {
+ 	 return request('/app/integral/getUserSign',null,'GET');
+ }
+ 
+ export function doSign(data) {
+ 	 return request('/app/integral/sign',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //添加积分 
+ export function addIntegral(type) {   //类型 1浏览商品 2刷视频  
+    let data={"type":type};
+  	return request('/app/integral/addIntegral',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //获取新人福利完成情况
+ export function getNewcomerBenefits(type) {   
+  	return request('/app/integral/getNewcomerBenefits',null,'GET','application/json;charset=UTF-8');
+ }
+ 
+ //获取邀请下载海报
+ export function getDownloadPoster(type) {   
+  	return request('/app/invited/getDownloadPoster',null,'GET');
+ }
+ 
+ //填写邀请码
+ export function invited(data) {   
+  	return request('/app/invited',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+  
+  
+  

+ 71 - 0
api/shortvideo.js

@@ -0,0 +1,71 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ //获取视频列表
+ export function getVideoList(parmars,page = 1, size = 10) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/video/getVideoList',data,'GET');
+ }
+ 
+ 
+ //我的收藏视频列表
+ export function getFavoriteVideoList(parmars,page = 1, size = 10) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/video/getFavoriteVideoList',data,'GET');
+ }
+ 
+ 
+ //收藏
+ export function doFavorite(videoId) {
+ 	 let data={"videoId":videoId};
+ 	 return request('/app/video/doFavorite',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+
+ //点赞
+ export function doLike(videoId) {
+ 	 let data={"videoId":videoId};
+	 console.log("qxj doLike videoId:"+videoId);
+ 	 return request('/app/video/doLike',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //获取视频评论
+ export function getComments(parmars,page = 1, size = 10) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/video/getComments',data,'GET');
+ }
+ 
+  //评论回复列表
+ export function getReplies(parmars,page = 1, size = 10) {
+   let data = {"pageNum":page,"pageSize":size};
+   data=Object.assign(parmars, data);
+   return request('/app/video/getReplies',data,'GET');
+ }
+ 
+ 
+ //视频评论
+ export function addComment(data) {
+ 	 return request('/app/video/addComment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ //评论点赞
+ export function doLikeComment(data) {
+ 	 return request('/app/video/doLikeComment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ //删除评论
+ export function deleteComment(data) {
+ 	 return request('/app/video/delComment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+
+ // 增加分享
+ export function shareVideo(data) {
+ 	 return request('/app/video/shareVideo',data,'POST','application/json;charset=UTF-8');
+ }
+ 

+ 64 - 0
assets/css/czy/emoji/biaoqin.js

@@ -0,0 +1,64 @@
+const emojiList = [
+	{"url":"0@2x.gif","alt":"[惊讶]"},{"url":"1@2x.gif","alt":"[撇嘴]"},{"url":"2@2x.gif","alt":"[色]"},{"url":"3@2x.gif","alt":"[啊这]"},{"url":"4@2x.gif","alt":"[得意]"},{"url":"5@2x.gif","alt":"[流泪]"},{"url":"6@2x.gif","alt":"[害羞]"},
+	{"url":"7@2x.gif","alt":"[闭嘴]"},{"url":"8@2x.gif","alt":"[睡]"},{"url":"9@2x.gif","alt":"[大哭]"},{"url":"10@2x.gif","alt":"[尴尬]"},{"url":"11@2x.gif","alt":"[发怒]"},{"url":"12@2x.gif","alt":"[调皮]"},{"url":"13@2x.gif","alt":"[呲牙]"},
+	{"url":"14@2x.gif","alt":"[微笑]"},{"url":"15@2x.gif","alt":"[难过]"},{"url":"16@2x.gif","alt":"[酷]"},{"url":"18@2x.gif","alt":"[抓狂]"},{"url":"19@2x.gif","alt":"[吐]"},{"url":"20@2x.gif","alt":"[偷笑]"},{"url":"21@2x.gif","alt":"[可爱]"},
+	{"url":"22@2x.gif","alt":"[白眼]"},{"url":"23@2x.gif","alt":"[傲慢]"},{"url":"24@2x.gif","alt":"[饥饿]"},{"url":"25@2x.gif","alt":"[困]"},{"url":"26@2x.gif","alt":"[惊恐]"},{"url":"27@2x.gif","alt":"[流汗]"},{"url":"28@2x.gif","alt":"[憨笑]"},
+	{"url":"29@2x.gif","alt":"[悠闲]"},{"url":"30@2x.gif","alt":"[奋斗]"},{"url":"31@2x.gif","alt":"[咒骂]"},{"url":"32@2x.gif","alt":"[疑问]"},{"url":"33@2x.gif","alt":"[嘘]"},{"url":"34@2x.gif","alt":"[晕]"},{"url":"35@2x.gif","alt":"[折磨]"},
+	{"url":"36@2x.gif","alt":"[衰]"},{"url":"37@2x.gif","alt":"[骷髅]"},{"url":"38@2x.gif","alt":"[敲打]"},{"url":"39@2x.gif","alt":"[再见]"},{"url":"46@2x.gif","alt":"[猪头]"},{"url":"49@2x.gif","alt":"[抱抱]"},{"url":"53@2x.gif","alt":"[生日]"},
+	{"url":"54@2x.gif","alt":"[闪电]"},{"url":"55@2x.gif","alt":"[炸弹]"},{"url":"56@2x.gif","alt":"[刀]"},{"url":"57@2x.gif","alt":"[足球]"},{"url":"59@2x.gif","alt":"[便便]"},{"url":"60@2x.gif","alt":"[咖啡]"},{"url":"61@2x.gif","alt":"[饭]"},
+	{"url":"62@2x.gif","alt":"[药]"},{"url":"63@2x.gif","alt":"[玫瑰]"},{"url":"64@2x.gif","alt":"[凋谢]"},{"url":"66@2x.gif","alt":"[爱心]"},{"url":"67@2x.gif","alt":"[心碎]"},{"url":"69@2x.gif","alt":"[礼物]"},{"url":"72@2x.gif","alt":"[信封]"},
+	{"url":"74@2x.gif","alt":"[太阳]"},{"url":"75@2x.gif","alt":"[月亮]"},{"url":"76@2x.gif","alt":"[赞]"},{"url":"77@2x.gif","alt":"[踩]"},{"url":"78@2x.gif","alt":"[握手]"},{"url":"79@2x.gif","alt":"[胜利]"},{"url":"89@2x.gif","alt":"[西瓜]"},
+	{"url":"90@2x.gif","alt":"[下雨]"},{"url":"91@2x.gif","alt":"[多云]"},{"url":"96@2x.gif","alt":"[冷汗]"},{"url":"97@2x.gif","alt":"[擦汗]"},{"url":"98@2x.gif","alt":"[抠鼻]"},{"url":"99@2x.gif","alt":"[鼓掌]"},{"url":"100@2x.gif","alt":"[嗅大了]"},
+	{"url":"101@2x.gif","alt":"[坏笑]"},{"url":"102@2x.gif","alt":"[右哼哼]"},{"url":"103@2x.gif","alt":"[左哼哼]"},{"url":"104@2x.gif","alt":"[哈欠]"},{"url":"105@2x.gif","alt":"[鄙视]"},{"url":"106@2x.gif","alt":"[委屈]"},{"url":"107@2x.gif","alt":"[快哭了]"},
+	{"url":"108@2x.gif","alt":"[阴险]"},{"url":"109@2x.gif","alt":"[亲亲]"},{"url":"110@2x.gif","alt":"[吓]"},{"url":"111@2x.gif","alt":"[可怜]"},{"url":"112@2x.gif","alt":"[菜刀]"},{"url":"113@2x.gif","alt":"[啤酒]"},{"url":"114@2x.gif","alt":"[篮球]"},
+	{"url":"115@2x.gif","alt":"[乒乓]"},{"url":"116@2x.gif","alt":"[示爱]"},{"url":"117@2x.gif","alt":"[瓢虫]"},{"url":"118@2x.gif","alt":"[抱拳]"},{"url":"119@2x.gif","alt":"[勾引]"},{"url":"120@2x.gif","alt":"[拳头]"},{"url":"121@2x.gif","alt":"[差劲]"},
+	{"url":"122@2x.gif","alt":"[爱你]"},{"url":"123@2x.gif","alt":"[NO]"},{"url":"124@2x.gif","alt":"[OK]"},{"url":"136@2x.gif","alt":"[双喜]"},{"url":"137@2x.gif","alt":"[鞭炮]"},{"url":"138@2x.gif","alt":"[灯笼]"},{"url":"139@2x.gif","alt":"[麻将]"},
+	{"url":"140@2x.gif","alt":"[唱歌]"},{"url":"141@2x.gif","alt":"[包包]"},{"url":"142@2x.gif","alt":"[信]"},{"url":"143@2x.gif","alt":"[象棋]"},{"url":"144@2x.gif","alt":"[礼物]"},{"url":"145@2x.gif","alt":"[祈祷]"},{"url":"146@2x.gif","alt":"[爆筋]"},
+	{"url":"147@2x.gif","alt":"[棒棒糖]"},{"url":"148@2x.gif","alt":"[喝奶]"},{"url":"149@2x.gif","alt":"[吃面]"},{"url":"150@2x.gif","alt":"[香蕉]"},{"url":"151@2x.gif","alt":"[飞机]"},{"url":"152@2x.gif","alt":"[汽车]"},{"url":"153@2x.gif","alt":"[高铁]"},
+	{"url":"154@2x.gif","alt":"[动车]"},{"url":"155@2x.gif","alt":"[动车头]"},{"url":"156@2x.gif","alt":"[多云]"},{"url":"157@2x.gif","alt":"[下雨]"},{"url":"158@2x.gif","alt":"[钞票]"},{"url":"159@2x.gif","alt":"[熊猫]"},{"url":"160@2x.gif","alt":"[电灯泡]"},
+	{"url":"161@2x.gif","alt":"[七彩]"},{"url":"162@2x.gif","alt":"[闹钟]"},{"url":"163@2x.gif","alt":"[雨伞]"},{"url":"164@2x.gif","alt":"[气球]"},{"url":"165@2x.gif","alt":"[钻戒]"},{"url":"166@2x.gif","alt":"[座椅]"},{"url":"167@2x.gif","alt":"[纸巾]"},
+	{"url":"168@2x.gif","alt":"[药丸]"},{"url":"169@2x.gif","alt":"[手枪]"},{"url":"170@2x.gif","alt":"[青蛙]"},{"url":"171@2x.gif","alt":"[热汤]"},{"url":"172@2x.gif","alt":"[眨眼睛]"},{"url":"173@2x.gif","alt":"[泪奔]"},{"url":"174@2x.gif","alt":"[无奈]"},
+	{"url":"175@2x.gif","alt":"[卖萌]"},{"url":"176@2x.gif","alt":"[小纠结]"},{"url":"177@2x.gif","alt":"[喷血]"},{"url":"178@2x.gif","alt":"[斜眼笑]"},{"url":"179@2x.gif","alt":"[高傲]"},{"url":"180@2x.gif","alt":"[惊喜]"},{"url":"181@2x.gif","alt":"[骚扰]"},
+	{"url":"182@2x.gif","alt":"[笑哭]"},{"url":"183@2x.gif","alt":"[我最美]"},{"url":"184@2x.gif","alt":"[河蟹]"},{"url":"185@2x.gif","alt":"[羊驼]"},{"url":"186@2x.gif","alt":"[板栗]"},{"url":"187@2x.gif","alt":"[幽灵]"},{"url":"188@2x.gif","alt":"[鸡蛋]"},
+	{"url":"189@2x.gif","alt":"[魔方]"},{"url":"190@2x.gif","alt":"[转花圈]"},{"url":"191@2x.gif","alt":"[搓澡]"},{"url":"192@2x.gif","alt":"[红包]"},{"url":"200@2x.gif","alt":"[拜托]"},{"url":"201@2x.gif","alt":"[点赞]"},{"url":"202@2x.gif","alt":"[无聊]"},
+	{"url":"203@2x.gif","alt":"[托脸]"},{"url":"204@2x.gif","alt":"[吃]"},{"url":"205@2x.gif","alt":"[送花]"},{"url":"206@2x.gif","alt":"[害怕]"},{"url":"207@2x.gif","alt":"[花痴]"},{"url":"208@2x.gif","alt":"[小样儿]"},{"url":"210@2x.gif","alt":"[飙泪]"},
+	{"url":"211@2x.gif","alt":"[我不看]"},{"url":"212@2x.gif","alt":"[托腮]"},{"url":"245@2x.gif","alt":"[加油必胜]"},{"url":"246@2x.gif","alt":"[抱抱]"},{"url":"247@2x.gif","alt":"[白条]"},{"url":"260@2x.gif","alt":"[白条]"},{"url":"261@2x.gif","alt":"[搬砖中]"},
+	{"url":"262@2x.gif","alt":"[脑壳疼]"},{"url":"263@2x.gif","alt":"[沧桑]"},{"url":"264@2x.gif","alt":"[捂脸]"},{"url":"265@2x.gif","alt":"[辣眼睛]"},{"url":"266@2x.gif","alt":"[哦呦]"},{"url":"267@2x.gif","alt":"[头秃]"},{"url":"268@2x.gif","alt":"[问号脸]"},
+	{"url":"269@2x.gif","alt":"[暗中观察]"},{"url":"270@2x.gif","alt":"[emm]"},{"url":"271@2x.gif","alt":"[吃瓜]"},{"url":"272@2x.gif","alt":"[呵呵哒]"},{"url":"273@2x.gif","alt":"[白条]"},{"url":"274@2x.gif","alt":"[白条]"},{"url":"newemoji_002.gif","alt":"[好的]"},
+	{"url":"newemoji_003.gif","alt":"[白眼]"},{"url":"newemoji_004.gif","alt":"[鬼脸]"},{"url":"newemoji_005.gif","alt":"[马赛克]"},{"url":"newemoji_006.gif","alt":"[喝茶]"},{"url":"newemoji_007.gif","alt":"[摸鱼]"},{"url":"newemoji_008.gif","alt":"[大笑]"},{"url":"newemoji_009.gif","alt":"[请滚]"},
+	{"url":"newemoji_010.gif","alt":"[睁眼]"},{"url":"newemoji_011.gif","alt":"[儿子乖]"},{"url":"newemoji_012.gif","alt":"[脸疼]"},{"url":"newemoji_013.gif","alt":"[考虑]"},{"url":"newemoji_014.gif","alt":"[惊掉下巴]"},{"url":"newemoji_015.gif","alt":"[遮眼]"},{"url":"newemoji_016.gif","alt":"[比爱心]"},
+	{"url":"newemoji_017.gif","alt":"[喝彩]"}
+]
+export default emojiList;
+// const emojiList = [
+// 	{"url":"0@2x.png","alt":"[惊讶]"},{"url":"1@2x.png","alt":"[撇嘴]"},{"url":"2@2x.png","alt":"[色]"},{"url":"3@2x.png","alt":"[啊这]"},{"url":"4@2x.png","alt":"[得意]"},{"url":"5@2x.png","alt":"[流泪]"},{"url":"6@2x.png","alt":"[害羞]"},
+// 	{"url":"7@2x.png","alt":"[闭嘴]"},{"url":"8@2x.png","alt":"[睡]"},{"url":"9@2x.png","alt":"[大哭]"},{"url":"10@2x.png","alt":"[尴尬]"},{"url":"11@2x.png","alt":"[发怒]"},{"url":"12@2x.png","alt":"[调皮]"},{"url":"13@2x.png","alt":"[呲牙]"},
+// 	{"url":"14@2x.png","alt":"[微笑]"},{"url":"15@2x.png","alt":"[难过]"},{"url":"16@2x.png","alt":"[酷]"},{"url":"18@2x.png","alt":"[抓狂]"},{"url":"19@2x.png","alt":"[吐]"},{"url":"20@2x.png","alt":"[偷笑]"},{"url":"21@2x.png","alt":"[可爱]"},
+// 	{"url":"22@2x.png","alt":"[白眼]"},{"url":"23@2x.png","alt":"[傲慢]"},{"url":"24@2x.png","alt":"[饥饿]"},{"url":"25@2x.png","alt":"[困]"},{"url":"26@2x.png","alt":"[惊恐]"},{"url":"27@2x.png","alt":"[流汗]"},{"url":"28@2x.png","alt":"[憨笑]"},
+// 	{"url":"29@2x.png","alt":"[悠闲]"},{"url":"30@2x.png","alt":"[奋斗]"},{"url":"31@2x.png","alt":"[咒骂]"},{"url":"32@2x.png","alt":"[疑问]"},{"url":"33@2x.png","alt":"[嘘]"},{"url":"34@2x.png","alt":"[晕]"},{"url":"35@2x.png","alt":"[折磨]"},
+// 	{"url":"36@2x.png","alt":"[衰]"},{"url":"37@2x.png","alt":"[骷髅]"},{"url":"38@2x.png","alt":"[敲打]"},{"url":"39@2x.png","alt":"[再见]"},{"url":"46@2x.png","alt":"[猪头]"},{"url":"49@2x.png","alt":"[抱抱]"},{"url":"53@2x.png","alt":"[生日]"},
+// 	{"url":"54@2x.png","alt":"[闪电]"},{"url":"55@2x.png","alt":"[炸弹]"},{"url":"56@2x.png","alt":"[刀]"},{"url":"57@2x.png","alt":"[足球]"},{"url":"59@2x.png","alt":"[便便]"},{"url":"60@2x.png","alt":"[咖啡]"},{"url":"61@2x.png","alt":"[饭]"},
+// 	{"url":"62@2x.png","alt":"[药]"},{"url":"63@2x.png","alt":"[玫瑰]"},{"url":"64@2x.png","alt":"[凋谢]"},{"url":"66@2x.png","alt":"[爱心]"},{"url":"67@2x.png","alt":"[心碎]"},{"url":"69@2x.png","alt":"[礼物]"},{"url":"72@2x.png","alt":"[信封]"},
+// 	{"url":"74@2x.png","alt":"[太阳]"},{"url":"75@2x.png","alt":"[月亮]"},{"url":"76@2x.png","alt":"[赞]"},{"url":"77@2x.png","alt":"[踩]"},{"url":"78@2x.png","alt":"[握手]"},{"url":"79@2x.png","alt":"[胜利]"},{"url":"89@2x.png","alt":"[西瓜]"},
+// 	{"url":"90@2x.png","alt":"[下雨]"},{"url":"91@2x.png","alt":"[多云]"},{"url":"96@2x.png","alt":"[冷汗]"},{"url":"97@2x.png","alt":"[擦汗]"},{"url":"98@2x.png","alt":"[抠鼻]"},{"url":"99@2x.png","alt":"[鼓掌]"},{"url":"100@2x.png","alt":"[嗅大了]"},
+// 	{"url":"101@2x.png","alt":"[坏笑]"},{"url":"102@2x.png","alt":"[右哼哼]"},{"url":"103@2x.png","alt":"[左哼哼]"},{"url":"104@2x.png","alt":"[哈欠]"},{"url":"105@2x.png","alt":"[鄙视]"},{"url":"106@2x.png","alt":"[委屈]"},{"url":"107@2x.png","alt":"[快哭了]"},
+// 	{"url":"108@2x.png","alt":"[阴险]"},{"url":"109@2x.png","alt":"[亲亲]"},{"url":"110@2x.png","alt":"[吓]"},{"url":"111@2x.png","alt":"[可怜]"},{"url":"112@2x.png","alt":"[菜刀]"},{"url":"113@2x.png","alt":"[啤酒]"},{"url":"114@2x.png","alt":"[篮球]"},
+// 	{"url":"115@2x.png","alt":"[乒乓]"},{"url":"116@2x.png","alt":"[示爱]"},{"url":"117@2x.png","alt":"[瓢虫]"},{"url":"118@2x.png","alt":"[抱拳]"},{"url":"119@2x.png","alt":"[勾引]"},{"url":"120@2x.png","alt":"[拳头]"},{"url":"121@2x.png","alt":"[差劲]"},
+// 	{"url":"122@2x.png","alt":"[爱你]"},{"url":"123@2x.png","alt":"[NO]"},{"url":"124@2x.png","alt":"[OK]"},{"url":"136@2x.png","alt":"[双喜]"},{"url":"137@2x.png","alt":"[鞭炮]"},{"url":"138@2x.png","alt":"[灯笼]"},{"url":"139@2x.png","alt":"[麻将]"},
+// 	{"url":"140@2x.png","alt":"[唱歌]"},{"url":"141@2x.png","alt":"[包包]"},{"url":"142@2x.png","alt":"[信]"},{"url":"143@2x.png","alt":"[象棋]"},{"url":"144@2x.png","alt":"[礼物]"},{"url":"145@2x.png","alt":"[祈祷]"},{"url":"146@2x.png","alt":"[爆筋]"},
+// 	{"url":"147@2x.png","alt":"[棒棒糖]"},{"url":"148@2x.png","alt":"[喝奶]"},{"url":"149@2x.png","alt":"[吃面]"},{"url":"150@2x.png","alt":"[香蕉]"},{"url":"151@2x.png","alt":"[飞机]"},{"url":"152@2x.png","alt":"[汽车]"},{"url":"153@2x.png","alt":"[高铁]"},
+// 	{"url":"154@2x.png","alt":"[动车]"},{"url":"155@2x.png","alt":"[动车头]"},{"url":"156@2x.png","alt":"[多云]"},{"url":"157@2x.png","alt":"[下雨]"},{"url":"158@2x.png","alt":"[钞票]"},{"url":"159@2x.png","alt":"[熊猫]"},{"url":"160@2x.png","alt":"[电灯泡]"},
+// 	{"url":"161@2x.png","alt":"[七彩]"},{"url":"162@2x.png","alt":"[闹钟]"},{"url":"163@2x.png","alt":"[雨伞]"},{"url":"164@2x.png","alt":"[气球]"},{"url":"165@2x.png","alt":"[钻戒]"},{"url":"166@2x.png","alt":"[座椅]"},{"url":"167@2x.png","alt":"[纸巾]"},
+// 	{"url":"168@2x.png","alt":"[药丸]"},{"url":"169@2x.png","alt":"[手枪]"},{"url":"170@2x.png","alt":"[青蛙]"},{"url":"171@2x.png","alt":"[热汤]"},{"url":"172@2x.png","alt":"[眨眼睛]"},{"url":"173@2x.png","alt":"[泪奔]"},{"url":"174@2x.png","alt":"[无奈]"},
+// 	{"url":"175@2x.png","alt":"[卖萌]"},{"url":"176@2x.png","alt":"[小纠结]"},{"url":"177@2x.png","alt":"[喷血]"},{"url":"178@2x.png","alt":"[斜眼笑]"},{"url":"179@2x.png","alt":"[高傲]"},{"url":"180@2x.png","alt":"[惊喜]"},{"url":"181@2x.png","alt":"[骚扰]"},
+// 	{"url":"182@2x.png","alt":"[笑哭]"},{"url":"183@2x.png","alt":"[我最美]"},{"url":"184@2x.png","alt":"[河蟹]"},{"url":"185@2x.png","alt":"[羊驼]"},{"url":"186@2x.png","alt":"[板栗]"},{"url":"187@2x.png","alt":"[幽灵]"},{"url":"188@2x.png","alt":"[鸡蛋]"},
+// 	{"url":"189@2x.png","alt":"[魔方]"},{"url":"190@2x.png","alt":"[转花圈]"},{"url":"191@2x.png","alt":"[搓澡]"},{"url":"192@2x.png","alt":"[红包]"},{"url":"200@2x.png","alt":"[拜托]"},{"url":"201@2x.png","alt":"[点赞]"},{"url":"202@2x.png","alt":"[无聊]"},
+// 	{"url":"203@2x.png","alt":"[托脸]"},{"url":"204@2x.png","alt":"[吃]"},{"url":"205@2x.png","alt":"[送花]"},{"url":"206@2x.png","alt":"[害怕]"},{"url":"207@2x.png","alt":"[花痴]"},{"url":"208@2x.png","alt":"[小样儿]"},{"url":"210@2x.png","alt":"[飙泪]"},
+// 	{"url":"211@2x.png","alt":"[我不看]"},{"url":"212@2x.png","alt":"[托腮]"},{"url":"245@2x.png","alt":"[加油必胜]"},{"url":"246@2x.png","alt":"[抱抱]"},{"url":"247@2x.png","alt":"[白条]"},{"url":"260@2x.png","alt":"[白条]"},{"url":"261@2x.png","alt":"[搬砖中]"},
+// 	{"url":"262@2x.png","alt":"[脑壳疼]"},{"url":"263@2x.png","alt":"[沧桑]"},{"url":"264@2x.png","alt":"[捂脸]"},{"url":"265@2x.png","alt":"[辣眼睛]"},{"url":"266@2x.png","alt":"[哦呦]"},{"url":"267@2x.png","alt":"[头秃]"},{"url":"268@2x.png","alt":"[问号脸]"},
+// 	{"url":"269@2x.png","alt":"[暗中观察]"},{"url":"270@2x.png","alt":"[emm]"},{"url":"271@2x.png","alt":"[吃瓜]"},{"url":"272@2x.png","alt":"[呵呵哒]"},{"url":"273@2x.png","alt":"[白条]"},{"url":"274@2x.png","alt":"[白条]"},{"url":"newemoji_002.png","alt":"[好的]"},
+// 	{"url":"newemoji_003.png","alt":"[白眼]"},{"url":"newemoji_004.png","alt":"[鬼脸]"},{"url":"newemoji_005.png","alt":"[马赛克]"},{"url":"newemoji_006.png","alt":"[喝茶]"},{"url":"newemoji_007.png","alt":"[摸鱼]"},{"url":"newemoji_008.png","alt":"[大笑]"},{"url":"newemoji_009.png","alt":"[请滚]"},
+// 	{"url":"newemoji_010.png","alt":"[睁眼]"},{"url":"newemoji_011.png","alt":"[儿子乖]"},{"url":"newemoji_012.png","alt":"[脸疼]"},{"url":"newemoji_013.png","alt":"[考虑]"},{"url":"newemoji_014.png","alt":"[惊掉下巴]"},{"url":"newemoji_015.png","alt":"[遮眼]"},{"url":"newemoji_016.png","alt":"[比爱心]"},
+// 	{"url":"newemoji_017.png","alt":"[喝彩]"}
+// ]
+// export default emojiList;

+ 3139 - 0
assets/css/czy/emoji/sina.js

@@ -0,0 +1,3139 @@
+// 新浪表情包api https://api.weibo.com/2/emotions.json?source=1362404091
+const sinaEmoji = [
+    {
+        "phrase": "[微笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/2018new_weixioa02_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/2018new_weixioa02_org.png",
+        "value": "[微笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[可爱]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/2018new_keai_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/2018new_keai_org.png",
+        "value": "[可爱]",
+        "picid": ""
+    },
+    {
+        "phrase": "[太开心]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2018new_taikaixin_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2018new_taikaixin_org.png",
+        "value": "[太开心]",
+        "picid": ""
+    },
+    {
+        "phrase": "[鼓掌]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/2018new_guzhang_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/2018new_guzhang_thumb.png",
+        "value": "[鼓掌]",
+        "picid": ""
+    },
+    {
+        "phrase": "[嘻嘻]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/2018new_xixi_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/2018new_xixi_thumb.png",
+        "value": "[嘻嘻]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哈哈]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/2018new_haha_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/2018new_haha_thumb.png",
+        "value": "[哈哈]",
+        "picid": ""
+    },
+    {
+        "phrase": "[笑cry]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/2018new_xiaoku_thumb.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/2018new_xiaoku_thumb.png",
+        "value": "[笑cry]",
+        "picid": ""
+    },
+    {
+        "phrase": "[挤眼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/2018new_jiyan_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/2018new_jiyan_org.png",
+        "value": "[挤眼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[馋嘴]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/2018new_chanzui_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/2018new_chanzui_org.png",
+        "value": "[馋嘴]",
+        "picid": ""
+    },
+    {
+        "phrase": "[黑线]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/2018new_heixian_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/2018new_heixian_thumb.png",
+        "value": "[黑线]",
+        "picid": ""
+    },
+    {
+        "phrase": "[汗]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/2018new_han_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/2018new_han_org.png",
+        "value": "[汗]",
+        "picid": ""
+    },
+    {
+        "phrase": "[挖鼻]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/2018new_wabi_thumb.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/2018new_wabi_thumb.png",
+        "value": "[挖鼻]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/2018new_heng_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/2018new_heng_thumb.png",
+        "value": "[哼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[怒]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f6/2018new_nu_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f6/2018new_nu_thumb.png",
+        "value": "[怒]",
+        "picid": ""
+    },
+    {
+        "phrase": "[委屈]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/2018new_weiqu_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/2018new_weiqu_thumb.png",
+        "value": "[委屈]",
+        "picid": ""
+    },
+    {
+        "phrase": "[可怜]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/2018new_kelian_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/2018new_kelian_org.png",
+        "value": "[可怜]",
+        "picid": ""
+    },
+    {
+        "phrase": "[失望]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/2018new_shiwang_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/2018new_shiwang_thumb.png",
+        "value": "[失望]",
+        "picid": ""
+    },
+    {
+        "phrase": "[悲伤]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/2018new_beishang_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/2018new_beishang_org.png",
+        "value": "[悲伤]",
+        "picid": ""
+    },
+    {
+        "phrase": "[泪]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/2018new_leimu_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/2018new_leimu_org.png",
+        "value": "[泪]",
+        "picid": ""
+    },
+    {
+        "phrase": "[允悲]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/2018new_kuxiao_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/2018new_kuxiao_org.png",
+        "value": "[允悲]",
+        "picid": ""
+    },
+    {
+        "phrase": "[苦涩]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/2021_bitter_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/2021_bitter_thumb.png",
+        "value": "[苦涩]",
+        "picid": ""
+    },
+    {
+        "phrase": "[害羞]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/2018new_haixiu_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/2018new_haixiu_org.png",
+        "value": "[害羞]",
+        "picid": ""
+    },
+    {
+        "phrase": "[污]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/2018new_wu_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/2018new_wu_thumb.png",
+        "value": "[污]",
+        "picid": ""
+    },
+    {
+        "phrase": "[爱你]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f6/2018new_aini_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f6/2018new_aini_org.png",
+        "value": "[爱你]",
+        "picid": ""
+    },
+    {
+        "phrase": "[亲亲]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/2018new_qinqin_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/2018new_qinqin_thumb.png",
+        "value": "[亲亲]",
+        "picid": ""
+    },
+    {
+        "phrase": "[抱一抱]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/2020_hug_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/2020_hug_thumb.png",
+        "value": "[抱一抱]",
+        "picid": ""
+    },
+    {
+        "phrase": "[色]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/2018new_huaxin_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/2018new_huaxin_org.png",
+        "value": "[色]",
+        "picid": ""
+    },
+    {
+        "phrase": "[憧憬]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/2018new_chongjing_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/2018new_chongjing_org.png",
+        "value": "[憧憬]",
+        "picid": ""
+    },
+    {
+        "phrase": "[舔屏]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/2018new_tianping_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/2018new_tianping_thumb.png",
+        "value": "[舔屏]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哇]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/2022_wow_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/2022_wow_thumb.png",
+        "value": "[哇]",
+        "picid": ""
+    },
+    {
+        "phrase": "[坏笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/2018new_huaixiao_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/2018new_huaixiao_org.png",
+        "value": "[坏笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[阴险]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/2018new_yinxian_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/2018new_yinxian_org.png",
+        "value": "[阴险]",
+        "picid": ""
+    },
+    {
+        "phrase": "[笑而不语]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2d/2018new_xiaoerbuyu_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2d/2018new_xiaoerbuyu_org.png",
+        "value": "[笑而不语]",
+        "picid": ""
+    },
+    {
+        "phrase": "[偷笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/2018new_touxiao_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/2018new_touxiao_org.png",
+        "value": "[偷笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[666]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/2022_666_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/2022_666_thumb.png",
+        "value": "[666]",
+        "picid": ""
+    },
+    {
+        "phrase": "[酷]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/2018new_ku_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/2018new_ku_org.png",
+        "value": "[酷]",
+        "picid": ""
+    },
+    {
+        "phrase": "[并不简单]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/2018new_bingbujiandan_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/2018new_bingbujiandan_thumb.png",
+        "value": "[并不简单]",
+        "picid": ""
+    },
+    {
+        "phrase": "[思考]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/2018new_sikao_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/2018new_sikao_org.png",
+        "value": "[思考]",
+        "picid": ""
+    },
+    {
+        "phrase": "[疑问]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/2018new_ningwen_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/2018new_ningwen_org.png",
+        "value": "[疑问]",
+        "picid": ""
+    },
+    {
+        "phrase": "[费解]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/2018new_wenhao_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/2018new_wenhao_thumb.png",
+        "value": "[费解]",
+        "picid": ""
+    },
+    {
+        "phrase": "[晕]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/2018new_yun_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/2018new_yun_thumb.png",
+        "value": "[晕]",
+        "picid": ""
+    },
+    {
+        "phrase": "[衰]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/2018new_shuai_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/2018new_shuai_thumb.png",
+        "value": "[衰]",
+        "picid": ""
+    },
+    {
+        "phrase": "[骷髅]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/2018new_kulou_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/2018new_kulou_thumb.png",
+        "value": "[骷髅]",
+        "picid": ""
+    },
+    {
+        "phrase": "[嘘]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/2018new_xu_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/2018new_xu_org.png",
+        "value": "[嘘]",
+        "picid": ""
+    },
+    {
+        "phrase": "[闭嘴]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/2018new_bizui_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/2018new_bizui_org.png",
+        "value": "[闭嘴]",
+        "picid": ""
+    },
+    {
+        "phrase": "[傻眼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/2018new_shayan_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/2018new_shayan_org.png",
+        "value": "[傻眼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[裂开]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1b/202011_liekai_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1b/202011_liekai_thumb.png",
+        "value": "[裂开]",
+        "picid": ""
+    },
+    {
+        "phrase": "[感冒]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/2022_cold_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/2022_cold_thumb.png",
+        "value": "[感冒]",
+        "picid": ""
+    },
+    {
+        "phrase": "[吃惊]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/2018new_chijing_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/2018new_chijing_org.png",
+        "value": "[吃惊]",
+        "picid": ""
+    },
+    {
+        "phrase": "[吐]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/2018new_tu_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/2018new_tu_org.png",
+        "value": "[吐]",
+        "picid": ""
+    },
+    {
+        "phrase": "[生病]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/2018new_shengbing_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/2018new_shengbing_thumb.png",
+        "value": "[生病]",
+        "picid": ""
+    },
+    {
+        "phrase": "[拜拜]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/2018new_baibai_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/2018new_baibai_thumb.png",
+        "value": "[拜拜]",
+        "picid": ""
+    },
+    {
+        "phrase": "[鄙视]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/2018new_bishi_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/2018new_bishi_org.png",
+        "value": "[鄙视]",
+        "picid": ""
+    },
+    {
+        "phrase": "[白眼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/2018new_landelini_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/2018new_landelini_org.png",
+        "value": "[白眼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[左哼哼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/2018new_zuohengheng_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/2018new_zuohengheng_thumb.png",
+        "value": "[左哼哼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[右哼哼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/2018new_youhengheng_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/2018new_youhengheng_thumb.png",
+        "value": "[右哼哼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[抓狂]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/2018new_zhuakuang_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/2018new_zhuakuang_org.png",
+        "value": "[抓狂]",
+        "picid": ""
+    },
+    {
+        "phrase": "[怒骂]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/2018new_zhouma_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/2018new_zhouma_thumb.png",
+        "value": "[怒骂]",
+        "picid": ""
+    },
+    {
+        "phrase": "[打脸]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/2018new_dalian_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/2018new_dalian_org.png",
+        "value": "[打脸]",
+        "picid": ""
+    },
+    {
+        "phrase": "[顶]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/2018new_ding_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/2018new_ding_org.png",
+        "value": "[顶]",
+        "picid": ""
+    },
+    {
+        "phrase": "[互粉]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/2018new_hufen02_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/2018new_hufen02_org.png",
+        "value": "[互粉]",
+        "picid": ""
+    },
+    {
+        "phrase": "[钱]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/2018new_qian_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/2018new_qian_thumb.png",
+        "value": "[钱]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哈欠]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/2018new_dahaqian_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/2018new_dahaqian_org.png",
+        "value": "[哈欠]",
+        "picid": ""
+    },
+    {
+        "phrase": "[困]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/2018new_kun_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/2018new_kun_thumb.png",
+        "value": "[困]",
+        "picid": ""
+    },
+    {
+        "phrase": "[睡]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/2018new_shuijiao_thumb.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/2018new_shuijiao_thumb.png",
+        "value": "[睡]",
+        "picid": ""
+    },
+    {
+        "phrase": "[赢牛奶]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/2021_yingniunai_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/2021_yingniunai_thumb.png",
+        "value": "[赢牛奶]",
+        "picid": ""
+    },
+    {
+        "phrase": "[开学季]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/2021_kaixueji_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/2021_kaixueji_thumb.png",
+        "value": "[开学季]",
+        "picid": ""
+    },
+    {
+        "phrase": "[求饶]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/moren_qiurao02_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/moren_qiurao02_thumb.png",
+        "value": "[求饶]",
+        "picid": ""
+    },
+    {
+        "phrase": "[吃瓜]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/2018new_chigua_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/2018new_chigua_thumb.png",
+        "value": "[吃瓜]",
+        "picid": ""
+    },
+    {
+        "phrase": "[打call]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/moren_dacall02_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/moren_dacall02_thumb.png",
+        "value": "[打call]",
+        "picid": ""
+    },
+    {
+        "phrase": "[awsl]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/moren_awsl02_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/moren_awsl02_thumb.png",
+        "value": "[awsl]",
+        "picid": ""
+    },
+    {
+        "phrase": "[彩虹屁]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/2022_praise_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/2022_praise_thumb.png",
+        "value": "[彩虹屁]",
+        "picid": ""
+    },
+    {
+        "phrase": "[酸]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/hot_wosuanle_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/hot_wosuanle_thumb.png",
+        "value": "[酸]",
+        "picid": ""
+    },
+    {
+        "phrase": "[doge]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/2018new_doge02_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/2018new_doge02_org.png",
+        "value": "[doge]",
+        "picid": ""
+    },
+    {
+        "phrase": "[二哈]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/2018new_erha_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/2018new_erha_org.png",
+        "value": "[二哈]",
+        "picid": ""
+    },
+    {
+        "phrase": "[喵喵]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/2018new_miaomiao_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/2018new_miaomiao_thumb.png",
+        "value": "[喵喵]",
+        "picid": ""
+    },
+    {
+        "phrase": "[单身狗]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/2021_alongdog_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/2021_alongdog_thumb.png",
+        "value": "[单身狗]",
+        "picid": ""
+    },
+    {
+        "phrase": "[揣手]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/2022_chuaishou_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/2022_chuaishou_thumb.png",
+        "value": "[揣手]",
+        "picid": ""
+    },
+    {
+        "phrase": "[举手]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/2022_raisehand_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/2022_raisehand_thumb.png",
+        "value": "[举手]",
+        "picid": ""
+    },
+    {
+        "phrase": "[抱抱]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/2018new_baobao_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/2018new_baobao_thumb.png",
+        "value": "[抱抱]",
+        "picid": ""
+    },
+    {
+        "phrase": "[摊手]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/2018new_tanshou_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/2018new_tanshou_org.png",
+        "value": "[摊手]",
+        "picid": ""
+    },
+    {
+        "phrase": "[跪了]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/2018new_gui_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/2018new_gui_org.png",
+        "value": "[跪了]",
+        "picid": ""
+    },
+    {
+        "phrase": "[中国赞]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/2018new_zhongguozan_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/2018new_zhongguozan_org.png",
+        "value": "[中国赞]",
+        "picid": ""
+    },
+    {
+        "phrase": "[鲜花]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/2018new_xianhua_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/2018new_xianhua_org.png",
+        "value": "[鲜花]",
+        "picid": ""
+    },
+    {
+        "phrase": "[航天员]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/2021_yuhangyuan_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/2021_yuhangyuan_thumb.png",
+        "value": "[航天员]",
+        "picid": ""
+    },
+    {
+        "phrase": "[红灯笼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/2021_lantern_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/2021_lantern_thumb.png",
+        "value": "[红灯笼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[烟花]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/2021_fireworks_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/2021_fireworks_thumb.png",
+        "value": "[烟花]",
+        "picid": ""
+    },
+    {
+        "phrase": "[雪花]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/yunying2020_snowflakes_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/yunying2020_snowflakes_thumb.png",
+        "value": "[雪花]",
+        "picid": ""
+    },
+    {
+        "phrase": "[丘比特]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/2021_qiubite_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/2021_qiubite_thumb.png",
+        "value": "[丘比特]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小丑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/2021_xiaochou_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/2021_xiaochou_thumb.png",
+        "value": "[小丑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[杰瑞]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/2021_jerry_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/2021_jerry_thumb.png",
+        "value": "[杰瑞]",
+        "picid": ""
+    },
+    {
+        "phrase": "[汤姆]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/2021_tom_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/2021_tom_thumb.png",
+        "value": "[汤姆]",
+        "picid": ""
+    },
+    {
+        "phrase": "[奶瓶]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/2021_naiping_org.png",
+        "hot": false,
+        "common": true,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/2021_naiping_thumb.png",
+        "value": "[奶瓶]",
+        "picid": ""
+    },
+    {
+        "phrase": "[报税]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/2022_baoshui_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/2022_baoshui_thumb.png",
+        "value": "[报税]",
+        "picid": ""
+    },
+    {
+        "phrase": "[交税]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/2022_jiaoshui_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/2022_jiaoshui_thumb.png",
+        "value": "[交税]",
+        "picid": ""
+    },
+    {
+        "phrase": "[嗅嗅]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/2022_Niffler_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/2022_Niffler_thumb.png",
+        "value": "[嗅嗅]",
+        "picid": ""
+    },
+    {
+        "phrase": "[格林德沃]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/2022_Grindelwald_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/2022_Grindelwald_thumb.png",
+        "value": "[格林德沃]",
+        "picid": ""
+    },
+    {
+        "phrase": "[邓布利多]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/2022_Dumbledore_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/2022_Dumbledore_thumb.png",
+        "value": "[邓布利多]",
+        "picid": ""
+    },
+    {
+        "phrase": "[新蝙蝠侠]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/2022_theBatman_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/2022_theBatman_thumb.png",
+        "value": "[新蝙蝠侠]",
+        "picid": ""
+    },
+    {
+        "phrase": "[谜语人]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/2022_theRiddler_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/2022_theRiddler_thumb.png",
+        "value": "[谜语人]",
+        "picid": ""
+    },
+    {
+        "phrase": "[送花花]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/2022_Flowers_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/2022_Flowers_thumb.png",
+        "value": "[送花花]",
+        "picid": ""
+    },
+    {
+        "phrase": "[福气虎]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/2022_AuspiciousTiger_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/2022_AuspiciousTiger_thumb.png",
+        "value": "[福气虎]",
+        "picid": ""
+    },
+    {
+        "phrase": "[暴发虎]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/2022_richtiger_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/2022_richtiger_thumb.png",
+        "value": "[暴发虎]",
+        "picid": ""
+    },
+    {
+        "phrase": "[虎爪比心]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/2022_handheart_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/2022_handheart_thumb.png",
+        "value": "[虎爪比心]",
+        "picid": ""
+    },
+    {
+        "phrase": "[许愿虎]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/2022_Wishingtiger_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/2022_Wishingtiger_thumb.png",
+        "value": "[许愿虎]",
+        "picid": ""
+    },
+    {
+        "phrase": "[萌虎贴贴]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/2022_Cutetigerkiss_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/2022_Cutetigerkiss_thumb.png",
+        "value": "[萌虎贴贴]",
+        "picid": ""
+    },
+    {
+        "phrase": "[单身奖杯]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/2022_Asingletrophy_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/2022_Asingletrophy_thumb.png",
+        "value": "[单身奖杯]",
+        "picid": ""
+    },
+    {
+        "phrase": "[绿马]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/2022_Greenhorse_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/2022_Greenhorse_thumb.png",
+        "value": "[绿马]",
+        "picid": ""
+    },
+    {
+        "phrase": "[2022]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/2021_2022_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/2021_2022_thumb.png",
+        "value": "[2022]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小雪人]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/2021_snowman_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/2021_snowman_thumb.png",
+        "value": "[小雪人]",
+        "picid": ""
+    },
+    {
+        "phrase": "[春游家族]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/2021_YoungFamily_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/2021_YoungFamily_thumb.png",
+        "value": "[春游家族]",
+        "picid": ""
+    },
+    {
+        "phrase": "[放假]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/2021_fangjia_org.png",
+        "hot": true,
+        "common": false,
+        "category": "",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/2021_fangjia_thumb.png",
+        "value": "[放假]",
+        "picid": ""
+    },
+    {
+        "phrase": "[心]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/2018new_xin_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/2018new_xin_thumb.png",
+        "value": "[心]",
+        "picid": ""
+    },
+    {
+        "phrase": "[伤心]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/2018new_xinsui_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/2018new_xinsui_thumb.png",
+        "value": "[伤心]",
+        "picid": ""
+    },
+    {
+        "phrase": "[男孩儿]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/2018new_nanhai_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/2018new_nanhai_thumb.png",
+        "value": "[男孩儿]",
+        "picid": ""
+    },
+    {
+        "phrase": "[女孩儿]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/2018new_nvhai_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/2018new_nvhai_thumb.png",
+        "value": "[女孩儿]",
+        "picid": ""
+    },
+    {
+        "phrase": "[握手]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/2018new_woshou_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/2018new_woshou_thumb.png",
+        "value": "[握手]",
+        "picid": ""
+    },
+    {
+        "phrase": "[赞]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/2018new_zan_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/2018new_zan_org.png",
+        "value": "[赞]",
+        "picid": ""
+    },
+    {
+        "phrase": "[good]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/2018new_good_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/2018new_good_org.png",
+        "value": "[good]",
+        "picid": ""
+    },
+    {
+        "phrase": "[弱]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/2018new_ruo_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/2018new_ruo_org.png",
+        "value": "[弱]",
+        "picid": ""
+    },
+    {
+        "phrase": "[NO]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2018new_no_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2018new_no_org.png",
+        "value": "[NO]",
+        "picid": ""
+    },
+    {
+        "phrase": "[耶]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/2018new_ye_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/2018new_ye_thumb.png",
+        "value": "[耶]",
+        "picid": ""
+    },
+    {
+        "phrase": "[拳头]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/2018new_quantou_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/2018new_quantou_thumb.png",
+        "value": "[拳头]",
+        "picid": ""
+    },
+    {
+        "phrase": "[ok]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/2018new_ok_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/2018new_ok_org.png",
+        "value": "[ok]",
+        "picid": ""
+    },
+    {
+        "phrase": "[加油]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/2018new_jiayou_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/2018new_jiayou_org.png",
+        "value": "[加油]",
+        "picid": ""
+    },
+    {
+        "phrase": "[来]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/2018new_guolai_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/2018new_guolai_thumb.png",
+        "value": "[来]",
+        "picid": ""
+    },
+    {
+        "phrase": "[作揖]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/2018new_zuoyi_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/2018new_zuoyi_org.png",
+        "value": "[作揖]",
+        "picid": ""
+    },
+    {
+        "phrase": "[haha]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1d/2018new_hahashoushi_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1d/2018new_hahashoushi_org.png",
+        "value": "[haha]",
+        "picid": ""
+    },
+    {
+        "phrase": "[熊猫]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/2018new_xiongmao_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/2018new_xiongmao_thumb.png",
+        "value": "[熊猫]",
+        "picid": ""
+    },
+    {
+        "phrase": "[兔子]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/2018new_tuzi_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/2018new_tuzi_thumb.png",
+        "value": "[兔子]",
+        "picid": ""
+    },
+    {
+        "phrase": "[猪头]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/2018new_zhutou_thumb.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/2018new_zhutou_thumb.png",
+        "value": "[猪头]",
+        "picid": ""
+    },
+    {
+        "phrase": "[草泥马]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/2018new_caonima_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/2018new_caonima_thumb.png",
+        "value": "[草泥马]",
+        "picid": ""
+    },
+    {
+        "phrase": "[奥特曼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/2018new_aoteman_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/2018new_aoteman_org.png",
+        "value": "[奥特曼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[太阳]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/2018new_taiyang_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/2018new_taiyang_org.png",
+        "value": "[太阳]",
+        "picid": ""
+    },
+    {
+        "phrase": "[月亮]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/2018new_yueliang_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/2018new_yueliang_org.png",
+        "value": "[月亮]",
+        "picid": ""
+    },
+    {
+        "phrase": "[浮云]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/2018new_yunduo_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/2018new_yunduo_thumb.png",
+        "value": "[浮云]",
+        "picid": ""
+    },
+    {
+        "phrase": "[下雨]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/2018new_yu_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/2018new_yu_thumb.png",
+        "value": "[下雨]",
+        "picid": ""
+    },
+    {
+        "phrase": "[沙尘暴]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b7/2018new_shachenbao_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b7/2018new_shachenbao_org.png",
+        "value": "[沙尘暴]",
+        "picid": ""
+    },
+    {
+        "phrase": "[围观]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/2018new_weiguan_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/2018new_weiguan_org.png",
+        "value": "[围观]",
+        "picid": ""
+    },
+    {
+        "phrase": "[飞机]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/2018new_feiji_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/2018new_feiji_thumb.png",
+        "value": "[飞机]",
+        "picid": ""
+    },
+    {
+        "phrase": "[照相机]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/2018new_xiangji_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/2018new_xiangji_thumb.png",
+        "value": "[照相机]",
+        "picid": ""
+    },
+    {
+        "phrase": "[话筒]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/2018new_huatong_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/2018new_huatong_org.png",
+        "value": "[话筒]",
+        "picid": ""
+    },
+    {
+        "phrase": "[音乐]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/2018new_yinyue_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/2018new_yinyue_org.png",
+        "value": "[音乐]",
+        "picid": ""
+    },
+    {
+        "phrase": "[喜]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/2018new_xizi_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/2018new_xizi_thumb.png",
+        "value": "[喜]",
+        "picid": ""
+    },
+    {
+        "phrase": "[给力]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/2018new_geili_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/2018new_geili_thumb.png",
+        "value": "[给力]",
+        "picid": ""
+    },
+    {
+        "phrase": "[威武]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/2018new_weiwu_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/2018new_weiwu_thumb.png",
+        "value": "[威武]",
+        "picid": ""
+    },
+    {
+        "phrase": "[可乐]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/moren_kele_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/moren_kele_thumb.png",
+        "value": "[可乐]",
+        "picid": ""
+    },
+    {
+        "phrase": "[干杯]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/2018new_ganbei_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/2018new_ganbei_org.png",
+        "value": "[干杯]",
+        "picid": ""
+    },
+    {
+        "phrase": "[礼物]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/2018new_liwu_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/2018new_liwu_org.png",
+        "value": "[礼物]",
+        "picid": ""
+    },
+    {
+        "phrase": "[钟]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/2018new_zhong_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/2018new_zhong_org.png",
+        "value": "[钟]",
+        "picid": ""
+    },
+    {
+        "phrase": "[肥皂]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/2018new_feizao_thumb.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/2018new_feizao_thumb.png",
+        "value": "[肥皂]",
+        "picid": ""
+    },
+    {
+        "phrase": "[绿丝带]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/2018new_lvsidai_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/2018new_lvsidai_thumb.png",
+        "value": "[绿丝带]",
+        "picid": ""
+    },
+    {
+        "phrase": "[围脖]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/2018new_weibo_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/2018new_weibo_org.png",
+        "value": "[围脖]",
+        "picid": ""
+    },
+    {
+        "phrase": "[浪]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/2018new_xinlang_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/2018new_xinlang_thumb.png",
+        "value": "[浪]",
+        "picid": ""
+    },
+    {
+        "phrase": "[羞嗒嗒]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/lxhxiudada_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/lxhxiudada_thumb.gif",
+        "value": "[羞嗒嗒]",
+        "picid": ""
+    },
+    {
+        "phrase": "[好爱哦]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/lxhainio_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/lxhainio_thumb.gif",
+        "value": "[好爱哦]",
+        "picid": ""
+    },
+    {
+        "phrase": "[偷乐]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/lxhtouxiao_thumb.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/lxhtouxiao_thumb.gif",
+        "value": "[偷乐]",
+        "picid": ""
+    },
+    {
+        "phrase": "[赞啊]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/lxhzan_thumb.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/lxhzan_thumb.gif",
+        "value": "[赞啊]",
+        "picid": ""
+    },
+    {
+        "phrase": "[笑哈哈]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/lxhwahaha_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/lxhwahaha_thumb.gif",
+        "value": "[笑哈哈]",
+        "picid": ""
+    },
+    {
+        "phrase": "[好喜欢]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/lxhlike_thumb.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/lxhlike_thumb.gif",
+        "value": "[好喜欢]",
+        "picid": ""
+    },
+    {
+        "phrase": "[求关注]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/lxhqiuguanzhu_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/lxhqiuguanzhu_thumb.gif",
+        "value": "[求关注]",
+        "picid": ""
+    },
+    {
+        "phrase": "[胖丁微笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/film_pangdingsmile_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/film_pangdingsmile_thumb.png",
+        "value": "[胖丁微笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[佩奇]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/hot_pigpeiqi_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/hot_pigpeiqi_thumb.png",
+        "value": "[佩奇]",
+        "picid": ""
+    },
+    {
+        "phrase": "[大侦探皮卡丘微笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/pikaqiu_weixiao_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/pikaqiu_weixiao_thumb.png",
+        "value": "[大侦探皮卡丘微笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[圣诞老人111]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/xmax_oldman01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/xmax_oldman01_thumb.png",
+        "value": "[圣诞老人111]",
+        "picid": ""
+    },
+    {
+        "phrase": "[紫金草]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/gongjiri_zijinhua_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/gongjiri_zijinhua_thumb.png",
+        "value": "[紫金草]",
+        "picid": ""
+    },
+    {
+        "phrase": "[文明遛狗]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/gongyi_wenminglgnew_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/gongyi_wenminglgnew_thumb.png",
+        "value": "[文明遛狗]",
+        "picid": ""
+    },
+    {
+        "phrase": "[神马]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/horse2_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/horse2_thumb.gif",
+        "value": "[神马]",
+        "picid": ""
+    },
+    {
+        "phrase": "[马到成功]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/mdcg_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/mdcg_thumb.gif",
+        "value": "[马到成功]",
+        "picid": ""
+    },
+    {
+        "phrase": "[炸鸡啤酒]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/zhajibeer_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/zhajibeer_thumb.gif",
+        "value": "[炸鸡啤酒]",
+        "picid": ""
+    },
+    {
+        "phrase": "[最右]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/remen_zuiyou180605_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/remen_zuiyou180605_thumb.png",
+        "value": "[最右]",
+        "picid": ""
+    },
+    {
+        "phrase": "[织]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/zz2_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/zz2_thumb.gif",
+        "value": "[织]",
+        "picid": ""
+    },
+    {
+        "phrase": "[五仁月饼_旧]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/2018zhongqiu_yuebing_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/2018zhongqiu_yuebing_thumb.png",
+        "value": "[五仁月饼_旧]",
+        "picid": ""
+    },
+    {
+        "phrase": "[给你小心心]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/qixi2018_xiaoxinxin_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/qixi2018_xiaoxinxin_thumb.png",
+        "value": "[给你小心心]",
+        "picid": ""
+    },
+    {
+        "phrase": "[吃狗粮]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/qixi2018_chigouliang_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/qixi2018_chigouliang_thumb.png",
+        "value": "[吃狗粮]",
+        "picid": ""
+    },
+    {
+        "phrase": "[弗莱见钱眼开]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/2018newyear_richdog_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/2018newyear_richdog_thumb.gif",
+        "value": "[弗莱见钱眼开]",
+        "picid": ""
+    },
+    {
+        "phrase": "[星星]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/hot_star171109_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/hot_star171109_thumb.png",
+        "value": "[星星]",
+        "picid": ""
+    },
+    {
+        "phrase": "[半星]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/hot_halfstar_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/hot_halfstar_thumb.png",
+        "value": "[半星]",
+        "picid": ""
+    },
+    {
+        "phrase": "[空星]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/hot_blankstar_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/hot_blankstar_thumb.png",
+        "value": "[空星]",
+        "picid": ""
+    },
+    {
+        "phrase": "[圣诞袜]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/2020_santastockings_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/2020_santastockings_thumb.png",
+        "value": "[圣诞袜]",
+        "picid": ""
+    },
+    {
+        "phrase": "[圣诞帽]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/2020_santahat_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/2020_santahat_thumb.png",
+        "value": "[圣诞帽]",
+        "picid": ""
+    },
+    {
+        "phrase": "[圣诞老人]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2020_santaclaus_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2020_santaclaus_thumb.png",
+        "value": "[圣诞老人]",
+        "picid": ""
+    },
+    {
+        "phrase": "[平安果]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ea/2020_apple_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ea/2020_apple_thumb.png",
+        "value": "[平安果]",
+        "picid": ""
+    },
+    {
+        "phrase": "[姜饼人]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/23/2020_gingerbread_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/23/2020_gingerbread_thumb.png",
+        "value": "[姜饼人]",
+        "picid": ""
+    },
+    {
+        "phrase": "[欢度国庆]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/guoqing20_huandugq_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/guoqing20_huandugq_thumb.png",
+        "value": "[欢度国庆]",
+        "picid": ""
+    },
+    {
+        "phrase": "[七夕布谷鸟]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/2020qixi_bugubird_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/2020qixi_bugubird_thumb.png",
+        "value": "[七夕布谷鸟]",
+        "picid": ""
+    },
+    {
+        "phrase": "[撒狗粮]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/qixi2020_sagouliang_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/qixi2020_sagouliang_thumb.png",
+        "value": "[撒狗粮]",
+        "picid": ""
+    },
+    {
+        "phrase": "[求脱单]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/qixi2020_qiutuodan_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/qixi2020_qiutuodan_thumb.png",
+        "value": "[求脱单]",
+        "picid": ""
+    },
+    {
+        "phrase": "[酷炫街舞给手]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/yunying_jiewu03_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/yunying_jiewu03_thumb.png",
+        "value": "[酷炫街舞给手]",
+        "picid": ""
+    },
+    {
+        "phrase": "[这就是街舞3]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/yunying_jiewu02_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/yunying_jiewu02_thumb.png",
+        "value": "[这就是街舞3]",
+        "picid": ""
+    },
+    {
+        "phrase": "[毛巾助力]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/yunying_jiewu01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/yunying_jiewu01_thumb.png",
+        "value": "[毛巾助力]",
+        "picid": ""
+    },
+    {
+        "phrase": "[超新星运动会]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/yunying_starquanyunhui_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/yunying_starquanyunhui_thumb.png",
+        "value": "[超新星运动会]",
+        "picid": ""
+    },
+    {
+        "phrase": "[超人爸爸]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/2020fuqinjie_chaorenbaba_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/2020fuqinjie_chaorenbaba_thumb.png",
+        "value": "[超人爸爸]",
+        "picid": ""
+    },
+    {
+        "phrase": "[我爱爸爸]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/2020fuqinjie_woaibaba_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/2020fuqinjie_woaibaba_thumb.png",
+        "value": "[我爱爸爸]",
+        "picid": ""
+    },
+    {
+        "phrase": "[父与子]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2020fuqinjie_fuyuzi_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2020fuqinjie_fuyuzi_thumb.png",
+        "value": "[父与子]",
+        "picid": ""
+    },
+    {
+        "phrase": "[棒棒糖]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/2020liuyi_bangbangtang_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/2020liuyi_bangbangtang_thumb.png",
+        "value": "[棒棒糖]",
+        "picid": ""
+    },
+    {
+        "phrase": "[纸飞机]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/2020liuyi_zhifeiji_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/2020liuyi_zhifeiji_thumb.png",
+        "value": "[纸飞机]",
+        "picid": ""
+    },
+    {
+        "phrase": "[炸鸡腿]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/yunying_zhaji_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/yunying_zhaji_thumb.png",
+        "value": "[炸鸡腿]",
+        "picid": ""
+    },
+    {
+        "phrase": "[武汉加油]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/hot_wuhanjiayou_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/hot_wuhanjiayou_thumb.png",
+        "value": "[武汉加油]",
+        "picid": ""
+    },
+    {
+        "phrase": "[点亮橙色]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/gongyi_dlchengse03_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/gongyi_dlchengse03_thumb.png",
+        "value": "[点亮橙色]",
+        "picid": ""
+    },
+    {
+        "phrase": "[锦鲤]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/hbf2019_jinli_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/hbf2019_jinli_thumb.png",
+        "value": "[锦鲤]",
+        "picid": ""
+    },
+    {
+        "phrase": "[微风]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/2018new_weifeng_thumb.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/2018new_weifeng_thumb.png",
+        "value": "[微风]",
+        "picid": ""
+    },
+    {
+        "phrase": "[蜡烛]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/2018new_lazhu_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/2018new_lazhu_org.png",
+        "value": "[蜡烛]",
+        "picid": ""
+    },
+    {
+        "phrase": "[蛋糕]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/2018new_dangao_org.png",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/2018new_dangao_org.png",
+        "value": "[蛋糕]",
+        "picid": ""
+    },
+    {
+        "phrase": "[看涨]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/kanzhangv2_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/kanzhangv2_thumb.gif",
+        "value": "[看涨]",
+        "picid": ""
+    },
+    {
+        "phrase": "[看跌]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/kandiev2_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/kandiev2_thumb.gif",
+        "value": "[看跌]",
+        "picid": ""
+    },
+    {
+        "phrase": "[带着微博去旅行]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/eventtravel_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "其他",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/eventtravel_thumb.gif",
+        "value": "[带着微博去旅行]",
+        "picid": ""
+    },
+    {
+        "phrase": "[绿植领养]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/2021_lvzhilingyang_org.png",
+        "hot": false,
+        "common": false,
+        "category": "绿植",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/2021_lvzhilingyang_thumb.png",
+        "value": "[绿植领养]",
+        "picid": ""
+    },
+    {
+        "phrase": "[绿植挖土]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/2021_lvzhiwatu_org.png",
+        "hot": false,
+        "common": false,
+        "category": "绿植",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/2021_lvzhiwatu_thumb.png",
+        "value": "[绿植挖土]",
+        "picid": ""
+    },
+    {
+        "phrase": "[绿植托脸]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/2021_lvzhituolian_org.png",
+        "hot": false,
+        "common": false,
+        "category": "绿植",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/2021_lvzhituolian_thumb.png",
+        "value": "[绿植托脸]",
+        "picid": ""
+    },
+    {
+        "phrase": "[绿植乖巧]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/2021_lvzhiguaiqiao_org.png",
+        "hot": false,
+        "common": false,
+        "category": "绿植",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/2021_lvzhiguaiqiao_thumb.png",
+        "value": "[绿植乖巧]",
+        "picid": ""
+    },
+    {
+        "phrase": "[掌宝爱心]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/2021_LZheart_org.png",
+        "hot": false,
+        "common": false,
+        "category": "掌宝",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/2021_LZheart_thumb.png",
+        "value": "[掌宝爱心]",
+        "picid": ""
+    },
+    {
+        "phrase": "[掌宝加油]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/2021_LZfighting_org.png",
+        "hot": false,
+        "common": false,
+        "category": "掌宝",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/2021_LZfighting_thumb.png",
+        "value": "[掌宝加油]",
+        "picid": ""
+    },
+    {
+        "phrase": "[掌宝可怜]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2021_LZpoor_org.png",
+        "hot": false,
+        "common": false,
+        "category": "掌宝",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2021_LZpoor_thumb.png",
+        "value": "[掌宝可怜]",
+        "picid": ""
+    },
+    {
+        "phrase": "[掌宝卖萌]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/2021_LZkawaii_org.png",
+        "hot": false,
+        "common": false,
+        "category": "掌宝",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/2021_LZkawaii_thumb.png",
+        "value": "[掌宝卖萌]",
+        "picid": ""
+    },
+    {
+        "phrase": "[掌宝哭泣]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/2021_LZcry_org.png",
+        "hot": false,
+        "common": false,
+        "category": "掌宝",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/2021_LZcry_thumb.png",
+        "value": "[掌宝哭泣]",
+        "picid": ""
+    },
+    {
+        "phrase": "[掌宝星星眼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/2021_LZstareyes_org.png",
+        "hot": false,
+        "common": false,
+        "category": "掌宝",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/2021_LZstareyes_thumb.png",
+        "value": "[掌宝星星眼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[掌宝荧光棒]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/2021_LZyingguangbang_org.png",
+        "hot": false,
+        "common": false,
+        "category": "掌宝",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/2021_LZyingguangbang_thumb.png",
+        "value": "[掌宝荧光棒]",
+        "picid": ""
+    },
+    {
+        "phrase": "[蕾伊]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/starwar_leiyi_org.png",
+        "hot": false,
+        "common": false,
+        "category": "星球大战",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/starwar_leiyi_thumb.png",
+        "value": "[蕾伊]",
+        "picid": ""
+    },
+    {
+        "phrase": "[凯洛伦]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/starwar_kailuolun_org.png",
+        "hot": false,
+        "common": false,
+        "category": "星球大战",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/starwar_kailuolun_thumb.png",
+        "value": "[凯洛伦]",
+        "picid": ""
+    },
+    {
+        "phrase": "[BB8]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/starwar_bb8_org.png",
+        "hot": false,
+        "common": false,
+        "category": "星球大战",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/starwar_bb8_thumb.png",
+        "value": "[BB8]",
+        "picid": ""
+    },
+    {
+        "phrase": "[冲锋队员]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/starwar_chongfengduiyuan_org.png",
+        "hot": false,
+        "common": false,
+        "category": "星球大战",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/starwar_chongfengduiyuan_thumb.png",
+        "value": "[冲锋队员]",
+        "picid": ""
+    },
+    {
+        "phrase": "[达斯维达]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/starwar_dasiweida_org.png",
+        "hot": false,
+        "common": false,
+        "category": "星球大战",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/starwar_dasiweida_thumb.png",
+        "value": "[达斯维达]",
+        "picid": ""
+    },
+    {
+        "phrase": "[C3PO]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/starwar_c3po_org.png",
+        "hot": false,
+        "common": false,
+        "category": "星球大战",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/starwar_c3po_thumb.png",
+        "value": "[C3PO]",
+        "picid": ""
+    },
+    {
+        "phrase": "[丘巴卡]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/starwar_qiubaka_org.png",
+        "hot": false,
+        "common": false,
+        "category": "星球大战",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/starwar_qiubaka_thumb.png",
+        "value": "[丘巴卡]",
+        "picid": ""
+    },
+    {
+        "phrase": "[R2D2]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/starwar_r2d2_org.png",
+        "hot": false,
+        "common": false,
+        "category": "星球大战",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/starwar_r2d2_thumb.png",
+        "value": "[R2D2]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哆啦A梦花心]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/dorahaose_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/dorahaose_thumb.gif",
+        "value": "[哆啦A梦花心]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哆啦A梦害怕]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/dorahaipa_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/dorahaipa_thumb.gif",
+        "value": "[哆啦A梦害怕]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哆啦A梦吃惊]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/dorachijing_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/dorachijing_thumb.gif",
+        "value": "[哆啦A梦吃惊]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哆啦A梦汗]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/dorahan_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/dorahan_thumb.gif",
+        "value": "[哆啦A梦汗]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哆啦A梦微笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/jqmweixiao_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/jqmweixiao_thumb.gif",
+        "value": "[哆啦A梦微笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[伴我同行]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/jqmbwtxing_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/jqmbwtxing_thumb.gif",
+        "value": "[伴我同行]",
+        "picid": ""
+    },
+    {
+        "phrase": "[静香微笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/jiqimaojingxiang_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/jiqimaojingxiang_thumb.gif",
+        "value": "[静香微笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[大雄微笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/jiqimaodaxiong_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/jiqimaodaxiong_thumb.gif",
+        "value": "[大雄微笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[胖虎微笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2f/jiqimaopanghu_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2f/jiqimaopanghu_thumb.gif",
+        "value": "[胖虎微笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小夫微笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/jiqimaoxiaofu_org.gif",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/jiqimaoxiaofu_thumb.gif",
+        "value": "[小夫微笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哆啦A梦笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/dora_xiao_org.png",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/dora_xiao_thumb.png",
+        "value": "[哆啦A梦笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哆啦A梦无奈]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/dora_wunai_org.png",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/dora_wunai_thumb.png",
+        "value": "[哆啦A梦无奈]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哆啦A梦美味]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/dora_meiwei_org.png",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/dora_meiwei_thumb.png",
+        "value": "[哆啦A梦美味]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哆啦A梦开心]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/dora_kaixin_org.png",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/dora_kaixin_thumb.png",
+        "value": "[哆啦A梦开心]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哆啦A梦亲亲]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/dora_qinqin_org.png",
+        "hot": false,
+        "common": false,
+        "category": "哆啦A梦",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/dora_qinqin_thumb.png",
+        "value": "[哆啦A梦亲亲]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小黄人微笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/xhrnew_weixiao_org.png",
+        "hot": false,
+        "common": false,
+        "category": "小黄人",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/xhrnew_weixiao_org.png",
+        "value": "[小黄人微笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小黄人剪刀手]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/xhrnew_jiandaoshou_org.png",
+        "hot": false,
+        "common": false,
+        "category": "小黄人",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/xhrnew_jiandaoshou_org.png",
+        "value": "[小黄人剪刀手]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小黄人不屑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/xhrnew_buxie_org.png",
+        "hot": false,
+        "common": false,
+        "category": "小黄人",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/xhrnew_buxie_org.png",
+        "value": "[小黄人不屑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小黄人高兴]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/xhrnew_gaoxing_org.png",
+        "hot": false,
+        "common": false,
+        "category": "小黄人",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/xhrnew_gaoxing_org.png",
+        "value": "[小黄人高兴]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小黄人惊讶]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/xhrnew_jingya_thumb.png",
+        "hot": false,
+        "common": false,
+        "category": "小黄人",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/xhrnew_jingya_thumb.png",
+        "value": "[小黄人惊讶]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小黄人委屈]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/xhrnew_weiqu_org.png",
+        "hot": false,
+        "common": false,
+        "category": "小黄人",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/xhrnew_weiqu_org.png",
+        "value": "[小黄人委屈]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小黄人坏笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/xhrnew_huaixiao_thumb.png",
+        "hot": false,
+        "common": false,
+        "category": "小黄人",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/xhrnew_huaixiao_thumb.png",
+        "value": "[小黄人坏笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小黄人白眼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/xhrnew_baiyan_org.png",
+        "hot": false,
+        "common": false,
+        "category": "小黄人",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/xhrnew_baiyan_org.png",
+        "value": "[小黄人白眼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小黄人无奈]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/xhrnew_wunai_org.png",
+        "hot": false,
+        "common": false,
+        "category": "小黄人",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/xhrnew_wunai_thumb.png",
+        "value": "[小黄人无奈]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小黄人得意]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c8/xhrnew_deyi_org.png",
+        "hot": false,
+        "common": false,
+        "category": "小黄人",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c8/xhrnew_deyi_thumb.png",
+        "value": "[小黄人得意]",
+        "picid": ""
+    },
+    {
+        "phrase": "[钢铁侠]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/avengers_ironman01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/avengers_ironman01_thumb.png",
+        "value": "[钢铁侠]",
+        "picid": ""
+    },
+    {
+        "phrase": "[美国队长]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/avengers_captain01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/avengers_captain01_thumb.png",
+        "value": "[美国队长]",
+        "picid": ""
+    },
+    {
+        "phrase": "[雷神]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/avengers_thor01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/avengers_thor01_thumb.png",
+        "value": "[雷神]",
+        "picid": ""
+    },
+    {
+        "phrase": "[浩克]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/avengers_hulk01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/avengers_hulk01_thumb.png",
+        "value": "[浩克]",
+        "picid": ""
+    },
+    {
+        "phrase": "[黑寡妇]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/avengers_blackwidow01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/avengers_blackwidow01_thumb.png",
+        "value": "[黑寡妇]",
+        "picid": ""
+    },
+    {
+        "phrase": "[鹰眼]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/avengers_clint01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/avengers_clint01_thumb.png",
+        "value": "[鹰眼]",
+        "picid": ""
+    },
+    {
+        "phrase": "[惊奇队长]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/avengers_captainmarvel01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/avengers_captainmarvel01_thumb.png",
+        "value": "[惊奇队长]",
+        "picid": ""
+    },
+    {
+        "phrase": "[奥克耶]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/avengers_aokeye01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/avengers_aokeye01_thumb.png",
+        "value": "[奥克耶]",
+        "picid": ""
+    },
+    {
+        "phrase": "[蚁人]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/avengers_antman01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/avengers_antman01_thumb.png",
+        "value": "[蚁人]",
+        "picid": ""
+    },
+    {
+        "phrase": "[灭霸]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/avengers_thanos01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/avengers_thanos01_thumb.png",
+        "value": "[灭霸]",
+        "picid": ""
+    },
+    {
+        "phrase": "[蜘蛛侠]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/avengers_spiderman01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/avengers_spiderman01_thumb.png",
+        "value": "[蜘蛛侠]",
+        "picid": ""
+    },
+    {
+        "phrase": "[洛基]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/avengers_locki01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/avengers_locki01_thumb.png",
+        "value": "[洛基]",
+        "picid": ""
+    },
+    {
+        "phrase": "[奇异博士]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/avengers_drstranger01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/avengers_drstranger01_thumb.png",
+        "value": "[奇异博士]",
+        "picid": ""
+    },
+    {
+        "phrase": "[冬兵]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/avengers_wintersolider01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/avengers_wintersolider01_thumb.png",
+        "value": "[冬兵]",
+        "picid": ""
+    },
+    {
+        "phrase": "[黑豹]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/avengers_panther01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/avengers_panther01_thumb.png",
+        "value": "[黑豹]",
+        "picid": ""
+    },
+    {
+        "phrase": "[猩红女巫]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/avengers_witch01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/avengers_witch01_thumb.png",
+        "value": "[猩红女巫]",
+        "picid": ""
+    },
+    {
+        "phrase": "[幻视]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/avengers_vision01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/avengers_vision01_thumb.png",
+        "value": "[幻视]",
+        "picid": ""
+    },
+    {
+        "phrase": "[星爵]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/avengers_starlord01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/avengers_starlord01_thumb.png",
+        "value": "[星爵]",
+        "picid": ""
+    },
+    {
+        "phrase": "[格鲁特]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/avengers_gelute01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/avengers_gelute01_thumb.png",
+        "value": "[格鲁特]",
+        "picid": ""
+    },
+    {
+        "phrase": "[螳螂妹]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/avengers_mantis01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/avengers_mantis01_thumb.png",
+        "value": "[螳螂妹]",
+        "picid": ""
+    },
+    {
+        "phrase": "[无限手套]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/avengers_gauntlet01_org.png",
+        "hot": false,
+        "common": false,
+        "category": "复仇者联盟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/avengers_gauntlet01_thumb.png",
+        "value": "[无限手套]",
+        "picid": ""
+    },
+    {
+        "phrase": "[胖红拽]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/angerbird_panghongzhuai_org.png",
+        "hot": false,
+        "common": false,
+        "category": "愤怒的小鸟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/angerbird_panghongzhuai_thumb.png",
+        "value": "[胖红拽]",
+        "picid": ""
+    },
+    {
+        "phrase": "[胖红生气]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/angerbird_shengqi_org.png",
+        "hot": false,
+        "common": false,
+        "category": "愤怒的小鸟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/angerbird_shengqi_thumb.png",
+        "value": "[胖红生气]",
+        "picid": ""
+    },
+    {
+        "phrase": "[胖红微笑]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/angerbird_panghongweixiao_org.png",
+        "hot": false,
+        "common": false,
+        "category": "愤怒的小鸟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/angerbird_panghongweixiao_thumb.png",
+        "value": "[胖红微笑]",
+        "picid": ""
+    },
+    {
+        "phrase": "[飞镖黄跳舞]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/angerbird_feibiaohuang_org.png",
+        "hot": false,
+        "common": false,
+        "category": "愤怒的小鸟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/angerbird_feibiaohuang_thumb.png",
+        "value": "[飞镖黄跳舞]",
+        "picid": ""
+    },
+    {
+        "phrase": "[炸弹黑hi]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/angerbird_zhadanhei_org.png",
+        "hot": false,
+        "common": false,
+        "category": "愤怒的小鸟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/angerbird_zhadanhei_thumb.png",
+        "value": "[炸弹黑hi]",
+        "picid": ""
+    },
+    {
+        "phrase": "[三三蹦跳]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/angerbird_sansna_org.png",
+        "hot": false,
+        "common": false,
+        "category": "愤怒的小鸟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/angerbird_sansna_thumb.png",
+        "value": "[三三蹦跳]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小V开心]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/angerbird_xiaovkaixin_org.png",
+        "hot": false,
+        "common": false,
+        "category": "愤怒的小鸟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/angerbird_xiaovkaixin_thumb.png",
+        "value": "[小V开心]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小V生气]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/angerbird_xiaov_org.png",
+        "hot": false,
+        "common": false,
+        "category": "愤怒的小鸟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/angerbird_xiaov_thumb.png",
+        "value": "[小V生气]",
+        "picid": ""
+    },
+    {
+        "phrase": "[佐伊卖萌]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/angerbird_zuoyimaimeng_org.png",
+        "hot": false,
+        "common": false,
+        "category": "愤怒的小鸟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/angerbird_zuoyimaimeng_thumb.png",
+        "value": "[佐伊卖萌]",
+        "picid": ""
+    },
+    {
+        "phrase": "[小猪惊讶]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/angerbird_xiaozhujingya_org.png",
+        "hot": false,
+        "common": false,
+        "category": "愤怒的小鸟",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/angerbird_xiaozhujingya_thumb.png",
+        "value": "[小猪惊讶]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哪吒委屈]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/nezha_weiqu02_org.png",
+        "hot": false,
+        "common": false,
+        "category": "哪吒",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/nezha_weiqu02_thumb.png",
+        "value": "[哪吒委屈]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哪吒得意]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1d/nezha_deyi02_org.png",
+        "hot": false,
+        "common": false,
+        "category": "哪吒",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1d/nezha_deyi02_thumb.png",
+        "value": "[哪吒得意]",
+        "picid": ""
+    },
+    {
+        "phrase": "[哪吒开心]",
+        "type": "face",
+        "url": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/nezha_kaixin02_org.png",
+        "hot": false,
+        "common": false,
+        "category": "哪吒",
+        "icon": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/nezha_kaixin02_thumb.png",
+        "value": "[哪吒开心]",
+        "picid": ""
+    }
+]
+export default sinaEmoji;

+ 1595 - 0
assets/css/czy/es.1.base.css

@@ -0,0 +1,1595 @@
+.es{
+	display: flex;
+	flex-direction: row;
+	justify-content: flex-start;
+	position: relative;
+}
+
+.es-fx{
+	flex: 1;
+}
+
+.es-ver{
+	flex-direction: column;
+}
+
+.es-ac{
+	align-items: center;
+}
+.es-ae{
+	align-items: flex-end;
+}
+
+.es-pc{
+	justify-content: center;
+}
+
+.es-pe{
+	justify-content: flex-end;
+}
+
+.es-f1{
+	/*#ifndef APP-NVUE*/   
+	flex-grow: 1;
+	 /*#endif*/ 
+}
+.es-f2{
+	/*#ifndef APP-NVUE*/   
+	flex-grow: 2;
+	 /*#endif*/ 
+}
+.es-f3{
+	/*#ifndef APP-NVUE*/   
+	flex-grow: 3;
+	 /*#endif*/ 
+}
+.es-f4{
+	/*#ifndef APP-NVUE*/   
+	flex-grow: 4;
+	/*#endif*/ 
+}
+
+/*#ifndef APP-NVUE*/   
+.es > div,.es > view{
+	flex-shrink: 0;
+}
+/*#endif*/ 
+
+.es-f1,.es-f2,.es-f3,.es-f4{
+	/*#ifndef APP-NVUE*/ 
+	flex-shrink: 1 !important;
+	/*#endif*/ 
+	overflow: hidden;
+}
+
+/*es+es-pc+es-ac*/
+.es-center{
+	justify-content: space-between;
+}
+.es-max-btn{
+	display: flex;
+	flex-direction: row;
+	position: relative;
+	align-items: center;
+	justify-content: center;
+}
+
+/*margin*/
+.es-ml-1{ margin-left:1rpx; }
+.es-ml-2{ margin-left:2rpx; }
+.es-ml-3{ margin-left:3rpx; }
+.es-ml-4{ margin-left:4rpx; }
+.es-ml-5{ margin-left:5rpx; }
+.es-ml-6{ margin-left:6rpx; }
+.es-ml-7{ margin-left:7rpx; }
+.es-ml-8{ margin-left:8rpx; }
+.es-ml-9{ margin-left:9rpx; }
+.es-ml-10{ margin-left:10rpx; }
+.es-ml-11{ margin-left:11rpx; }
+.es-ml-12{ margin-left:12rpx; }
+.es-ml-13{ margin-left:13rpx; }
+.es-ml-14{ margin-left:14rpx; }
+.es-ml-15{ margin-left:15rpx; }
+.es-ml-16{ margin-left:16rpx; }
+.es-ml-17{ margin-left:17rpx; }
+.es-ml-18{ margin-left:18rpx; }
+.es-ml-19{ margin-left:19rpx; }
+.es-ml-20{ margin-left:20rpx; }
+.es-ml-21{ margin-left:21rpx; }
+.es-ml-22{ margin-left:22rpx; }
+.es-ml-23{ margin-left:23rpx; }
+.es-ml-24{ margin-left:24rpx; }
+.es-ml-25{ margin-left:25rpx; }
+.es-ml-26{ margin-left:26rpx; }
+.es-ml-27{ margin-left:27rpx; }
+.es-ml-28{ margin-left:28rpx; }
+.es-ml-29{ margin-left:29rpx; }
+.es-ml-30{ margin-left:30rpx; }
+.es-ml-31{ margin-left:31rpx; }
+.es-ml-32{ margin-left:32rpx; }
+.es-ml-33{ margin-left:33rpx; }
+.es-ml-34{ margin-left:34rpx; }
+.es-ml-35{ margin-left:35rpx; }
+.es-ml-36{ margin-left:36rpx; }
+.es-ml-37{ margin-left:37rpx; }
+.es-ml-38{ margin-left:38rpx; }
+.es-ml-39{ margin-left:39rpx; }
+.es-ml-40{ margin-left:40rpx; }
+.es-ml-41{ margin-left:41rpx; }
+.es-ml-42{ margin-left:42rpx; }
+.es-ml-43{ margin-left:43rpx; }
+.es-ml-44{ margin-left:44rpx; }
+.es-ml-45{ margin-left:45rpx; }
+.es-ml-46{ margin-left:46rpx; }
+.es-ml-47{ margin-left:47rpx; }
+.es-ml-48{ margin-left:48rpx; }
+.es-ml-49{ margin-left:49rpx; }
+.es-ml-50{ margin-left:50rpx; }
+
+.es-mr-1{ margin-right:1rpx; }
+.es-mr-2{ margin-right:2rpx; }
+.es-mr-3{ margin-right:3rpx; }
+.es-mr-4{ margin-right:4rpx; }
+.es-mr-5{ margin-right:5rpx; }
+.es-mr-6{ margin-right:6rpx; }
+.es-mr-7{ margin-right:7rpx; }
+.es-mr-8{ margin-right:8rpx; }
+.es-mr-9{ margin-right:9rpx; }
+.es-mr-10{ margin-right:10rpx; }
+.es-mr-11{ margin-right:11rpx; }
+.es-mr-12{ margin-right:12rpx; }
+.es-mr-13{ margin-right:13rpx; }
+.es-mr-14{ margin-right:14rpx; }
+.es-mr-15{ margin-right:15rpx; }
+.es-mr-16{ margin-right:16rpx; }
+.es-mr-17{ margin-right:17rpx; }
+.es-mr-18{ margin-right:18rpx; }
+.es-mr-19{ margin-right:19rpx; }
+.es-mr-20{ margin-right:20rpx; }
+.es-mr-21{ margin-right:21rpx; }
+.es-mr-22{ margin-right:22rpx; }
+.es-mr-23{ margin-right:23rpx; }
+.es-mr-24{ margin-right:24rpx; }
+.es-mr-25{ margin-right:25rpx; }
+.es-mr-26{ margin-right:26rpx; }
+.es-mr-27{ margin-right:27rpx; }
+.es-mr-28{ margin-right:28rpx; }
+.es-mr-29{ margin-right:29rpx; }
+.es-mr-30{ margin-right:30rpx; }
+.es-mr-31{ margin-right:31rpx; }
+.es-mr-32{ margin-right:32rpx; }
+.es-mr-33{ margin-right:33rpx; }
+.es-mr-34{ margin-right:34rpx; }
+.es-mr-35{ margin-right:35rpx; }
+.es-mr-36{ margin-right:36rpx; }
+.es-mr-37{ margin-right:37rpx; }
+.es-mr-38{ margin-right:38rpx; }
+.es-mr-39{ margin-right:39rpx; }
+.es-mr-40{ margin-right:40rpx; }
+.es-mr-41{ margin-right:41rpx; }
+.es-mr-42{ margin-right:42rpx; }
+.es-mr-43{ margin-right:43rpx; }
+.es-mr-44{ margin-right:44rpx; }
+.es-mr-45{ margin-right:45rpx; }
+.es-mr-46{ margin-right:46rpx; }
+.es-mr-47{ margin-right:47rpx; }
+.es-mr-48{ margin-right:48rpx; }
+.es-mr-49{ margin-right:49rpx; }
+.es-mr-50{ margin-right:50rpx; }
+
+.es-mt-1{ margin-top:1rpx; }
+.es-mt-2{ margin-top:2rpx; }
+.es-mt-3{ margin-top:3rpx; }
+.es-mt-4{ margin-top:4rpx; }
+.es-mt-5{ margin-top:5rpx; }
+.es-mt-6{ margin-top:6rpx; }
+.es-mt-7{ margin-top:7rpx; }
+.es-mt-8{ margin-top:8rpx; }
+.es-mt-9{ margin-top:9rpx; }
+.es-mt-10{ margin-top:10rpx; }
+.es-mt-11{ margin-top:11rpx; }
+.es-mt-12{ margin-top:12rpx; }
+.es-mt-13{ margin-top:13rpx; }
+.es-mt-14{ margin-top:14rpx; }
+.es-mt-15{ margin-top:15rpx; }
+.es-mt-16{ margin-top:16rpx; }
+.es-mt-17{ margin-top:17rpx; }
+.es-mt-18{ margin-top:18rpx; }
+.es-mt-19{ margin-top:19rpx; }
+.es-mt-20{ margin-top:20rpx; }
+.es-mt-21{ margin-top:21rpx; }
+.es-mt-22{ margin-top:22rpx; }
+.es-mt-23{ margin-top:23rpx; }
+.es-mt-24{ margin-top:24rpx; }
+.es-mt-25{ margin-top:25rpx; }
+.es-mt-26{ margin-top:26rpx; }
+.es-mt-27{ margin-top:27rpx; }
+.es-mt-28{ margin-top:28rpx; }
+.es-mt-29{ margin-top:29rpx; }
+.es-mt-30{ margin-top:30rpx; }
+.es-mt-31{ margin-top:31rpx; }
+.es-mt-32{ margin-top:32rpx; }
+.es-mt-33{ margin-top:33rpx; }
+.es-mt-34{ margin-top:34rpx; }
+.es-mt-35{ margin-top:35rpx; }
+.es-mt-36{ margin-top:36rpx; }
+.es-mt-37{ margin-top:37rpx; }
+.es-mt-38{ margin-top:38rpx; }
+.es-mt-39{ margin-top:39rpx; }
+.es-mt-40{ margin-top:40rpx; }
+.es-mt-41{ margin-top:41rpx; }
+.es-mt-42{ margin-top:42rpx; }
+.es-mt-43{ margin-top:43rpx; }
+.es-mt-44{ margin-top:44rpx; }
+.es-mt-45{ margin-top:45rpx; }
+.es-mt-46{ margin-top:46rpx; }
+.es-mt-47{ margin-top:47rpx; }
+.es-mt-48{ margin-top:48rpx; }
+.es-mt-49{ margin-top:49rpx; }
+.es-mt-50{ margin-top:50rpx; }
+
+.es-mb-1{ margin-bottom:1rpx; }
+.es-mb-2{ margin-bottom:2rpx; }
+.es-mb-3{ margin-bottom:3rpx; }
+.es-mb-4{ margin-bottom:4rpx; }
+.es-mb-5{ margin-bottom:5rpx; }
+.es-mb-6{ margin-bottom:6rpx; }
+.es-mb-7{ margin-bottom:7rpx; }
+.es-mb-8{ margin-bottom:8rpx; }
+.es-mb-9{ margin-bottom:9rpx; }
+.es-mb-10{ margin-bottom:10rpx; }
+.es-mb-11{ margin-bottom:11rpx; }
+.es-mb-12{ margin-bottom:12rpx; }
+.es-mb-13{ margin-bottom:13rpx; }
+.es-mb-14{ margin-bottom:14rpx; }
+.es-mb-15{ margin-bottom:15rpx; }
+.es-mb-16{ margin-bottom:16rpx; }
+.es-mb-17{ margin-bottom:17rpx; }
+.es-mb-18{ margin-bottom:18rpx; }
+.es-mb-19{ margin-bottom:19rpx; }
+.es-mb-20{ margin-bottom:20rpx; }
+.es-mb-21{ margin-bottom:21rpx; }
+.es-mb-22{ margin-bottom:22rpx; }
+.es-mb-23{ margin-bottom:23rpx; }
+.es-mb-24{ margin-bottom:24rpx; }
+.es-mb-25{ margin-bottom:25rpx; }
+.es-mb-26{ margin-bottom:26rpx; }
+.es-mb-27{ margin-bottom:27rpx; }
+.es-mb-28{ margin-bottom:28rpx; }
+.es-mb-29{ margin-bottom:29rpx; }
+.es-mb-30{ margin-bottom:30rpx; }
+.es-mb-31{ margin-bottom:31rpx; }
+.es-mb-32{ margin-bottom:32rpx; }
+.es-mb-33{ margin-bottom:33rpx; }
+.es-mb-34{ margin-bottom:34rpx; }
+.es-mb-35{ margin-bottom:35rpx; }
+.es-mb-36{ margin-bottom:36rpx; }
+.es-mb-37{ margin-bottom:37rpx; }
+.es-mb-38{ margin-bottom:38rpx; }
+.es-mb-39{ margin-bottom:39rpx; }
+.es-mb-40{ margin-bottom:40rpx; }
+.es-mb-41{ margin-bottom:41rpx; }
+.es-mb-42{ margin-bottom:42rpx; }
+.es-mb-43{ margin-bottom:43rpx; }
+.es-mb-44{ margin-bottom:44rpx; }
+.es-mb-45{ margin-bottom:45rpx; }
+.es-mb-46{ margin-bottom:46rpx; }
+.es-mb-47{ margin-bottom:47rpx; }
+.es-mb-48{ margin-bottom:48rpx; }
+.es-mb-49{ margin-bottom:49rpx; }
+.es-mb-50{ margin-bottom:50rpx; }
+
+/*padding*/
+.es-pl-1{ padding-left:1rpx; }
+.es-pl-2{ padding-left:2rpx; }
+.es-pl-3{ padding-left:3rpx; }
+.es-pl-4{ padding-left:4rpx; }
+.es-pl-5{ padding-left:5rpx; }
+.es-pl-6{ padding-left:6rpx; }
+.es-pl-7{ padding-left:7rpx; }
+.es-pl-8{ padding-left:8rpx; }
+.es-pl-9{ padding-left:9rpx; }
+.es-pl-10{ padding-left:10rpx; }
+.es-pl-11{ padding-left:11rpx; }
+.es-pl-12{ padding-left:12rpx; }
+.es-pl-13{ padding-left:13rpx; }
+.es-pl-14{ padding-left:14rpx; }
+.es-pl-15{ padding-left:15rpx; }
+.es-pl-16{ padding-left:16rpx; }
+.es-pl-17{ padding-left:17rpx; }
+.es-pl-18{ padding-left:18rpx; }
+.es-pl-19{ padding-left:19rpx; }
+.es-pl-20{ padding-left:20rpx; }
+.es-pl-21{ padding-left:21rpx; }
+.es-pl-22{ padding-left:22rpx; }
+.es-pl-23{ padding-left:23rpx; }
+.es-pl-24{ padding-left:24rpx; }
+.es-pl-25{ padding-left:25rpx; }
+.es-pl-26{ padding-left:26rpx; }
+.es-pl-27{ padding-left:27rpx; }
+.es-pl-28{ padding-left:28rpx; }
+.es-pl-29{ padding-left:29rpx; }
+.es-pl-30{ padding-left:30rpx; }
+.es-pl-31{ padding-left:31rpx; }
+.es-pl-32{ padding-left:32rpx; }
+.es-pl-33{ padding-left:33rpx; }
+.es-pl-34{ padding-left:34rpx; }
+.es-pl-35{ padding-left:35rpx; }
+.es-pl-36{ padding-left:36rpx; }
+.es-pl-37{ padding-left:37rpx; }
+.es-pl-38{ padding-left:38rpx; }
+.es-pl-39{ padding-left:39rpx; }
+.es-pl-40{ padding-left:40rpx; }
+.es-pl-41{ padding-left:41rpx; }
+.es-pl-42{ padding-left:42rpx; }
+.es-pl-43{ padding-left:43rpx; }
+.es-pl-44{ padding-left:44rpx; }
+.es-pl-45{ padding-left:45rpx; }
+.es-pl-46{ padding-left:46rpx; }
+.es-pl-47{ padding-left:47rpx; }
+.es-pl-48{ padding-left:48rpx; }
+.es-pl-49{ padding-left:49rpx; }
+.es-pl-50{ padding-left:50rpx; }
+
+.es-pr-1{ padding-right:1rpx; }
+.es-pr-2{ padding-right:2rpx; }
+.es-pr-3{ padding-right:3rpx; }
+.es-pr-4{ padding-right:4rpx; }
+.es-pr-5{ padding-right:5rpx; }
+.es-pr-6{ padding-right:6rpx; }
+.es-pr-7{ padding-right:7rpx; }
+.es-pr-8{ padding-right:8rpx; }
+.es-pr-9{ padding-right:9rpx; }
+.es-pr-10{ padding-right:10rpx; }
+.es-pr-11{ padding-right:11rpx; }
+.es-pr-12{ padding-right:12rpx; }
+.es-pr-13{ padding-right:13rpx; }
+.es-pr-14{ padding-right:14rpx; }
+.es-pr-15{ padding-right:15rpx; }
+.es-pr-16{ padding-right:16rpx; }
+.es-pr-17{ padding-right:17rpx; }
+.es-pr-18{ padding-right:18rpx; }
+.es-pr-19{ padding-right:19rpx; }
+.es-pr-20{ padding-right:20rpx; }
+.es-pr-21{ padding-right:21rpx; }
+.es-pr-22{ padding-right:22rpx; }
+.es-pr-23{ padding-right:23rpx; }
+.es-pr-24{ padding-right:24rpx; }
+.es-pr-25{ padding-right:25rpx; }
+.es-pr-26{ padding-right:26rpx; }
+.es-pr-27{ padding-right:27rpx; }
+.es-pr-28{ padding-right:28rpx; }
+.es-pr-29{ padding-right:29rpx; }
+.es-pr-30{ padding-right:30rpx; }
+.es-pr-31{ padding-right:31rpx; }
+.es-pr-32{ padding-right:32rpx; }
+.es-pr-33{ padding-right:33rpx; }
+.es-pr-34{ padding-right:34rpx; }
+.es-pr-35{ padding-right:35rpx; }
+.es-pr-36{ padding-right:36rpx; }
+.es-pr-37{ padding-right:37rpx; }
+.es-pr-38{ padding-right:38rpx; }
+.es-pr-39{ padding-right:39rpx; }
+.es-pr-40{ padding-right:40rpx; }
+.es-pr-41{ padding-right:41rpx; }
+.es-pr-42{ padding-right:42rpx; }
+.es-pr-43{ padding-right:43rpx; }
+.es-pr-44{ padding-right:44rpx; }
+.es-pr-45{ padding-right:45rpx; }
+.es-pr-46{ padding-right:46rpx; }
+.es-pr-47{ padding-right:47rpx; }
+.es-pr-48{ padding-right:48rpx; }
+.es-pr-49{ padding-right:49rpx; }
+.es-pr-50{ padding-right:50rpx; }
+.es-pl-51{ padding-left:51rpx; }
+.es-pl-52{ padding-left:52rpx; }
+.es-pl-53{ padding-left:53rpx; }
+.es-pl-54{ padding-left:54rpx; }
+.es-pl-55{ padding-left:55rpx; }
+.es-pl-56{ padding-left:56rpx; }
+.es-pl-57{ padding-left:57rpx; }
+.es-pl-58{ padding-left:58rpx; }
+.es-pl-59{ padding-left:59rpx; }
+
+.es-pt-1{ padding-top:1rpx; }
+.es-pt-2{ padding-top:2rpx; }
+.es-pt-3{ padding-top:3rpx; }
+.es-pt-4{ padding-top:4rpx; }
+.es-pt-5{ padding-top:5rpx; }
+.es-pt-6{ padding-top:6rpx; }
+.es-pt-7{ padding-top:7rpx; }
+.es-pt-8{ padding-top:8rpx; }
+.es-pt-9{ padding-top:9rpx; }
+.es-pt-10{ padding-top:10rpx; }
+.es-pt-11{ padding-top:11rpx; }
+.es-pt-12{ padding-top:12rpx; }
+.es-pt-13{ padding-top:13rpx; }
+.es-pt-14{ padding-top:14rpx; }
+.es-pt-15{ padding-top:15rpx; }
+.es-pt-16{ padding-top:16rpx; }
+.es-pt-17{ padding-top:17rpx; }
+.es-pt-18{ padding-top:18rpx; }
+.es-pt-19{ padding-top:19rpx; }
+.es-pt-20{ padding-top:20rpx; }
+.es-pt-21{ padding-top:21rpx; }
+.es-pt-22{ padding-top:22rpx; }
+.es-pt-23{ padding-top:23rpx; }
+.es-pt-24{ padding-top:24rpx; }
+.es-pt-25{ padding-top:25rpx; }
+.es-pt-26{ padding-top:26rpx; }
+.es-pt-27{ padding-top:27rpx; }
+.es-pt-28{ padding-top:28rpx; }
+.es-pt-29{ padding-top:29rpx; }
+.es-pt-30{ padding-top:30rpx; }
+.es-pt-31{ padding-top:31rpx; }
+.es-pt-32{ padding-top:32rpx; }
+.es-pt-33{ padding-top:33rpx; }
+.es-pt-34{ padding-top:34rpx; }
+.es-pt-35{ padding-top:35rpx; }
+.es-pt-36{ padding-top:36rpx; }
+.es-pt-37{ padding-top:37rpx; }
+.es-pt-38{ padding-top:38rpx; }
+.es-pt-39{ padding-top:39rpx; }
+.es-pt-40{ padding-top:40rpx; }
+.es-pt-41{ padding-top:41rpx; }
+.es-pt-42{ padding-top:42rpx; }
+.es-pt-43{ padding-top:43rpx; }
+.es-pt-44{ padding-top:44rpx; }
+.es-pt-45{ padding-top:45rpx; }
+.es-pt-46{ padding-top:46rpx; }
+.es-pt-47{ padding-top:47rpx; }
+.es-pt-48{ padding-top:48rpx; }
+.es-pt-49{ padding-top:49rpx; }
+.es-pt-50{ padding-top:50rpx; }
+
+.es-pb-1{ padding-bottom:1rpx; }
+.es-pb-2{ padding-bottom:2rpx; }
+.es-pb-3{ padding-bottom:3rpx; }
+.es-pb-4{ padding-bottom:4rpx; }
+.es-pb-5{ padding-bottom:5rpx; }
+.es-pb-6{ padding-bottom:6rpx; }
+.es-pb-7{ padding-bottom:7rpx; }
+.es-pb-8{ padding-bottom:8rpx; }
+.es-pb-9{ padding-bottom:9rpx; }
+.es-pb-10{ padding-bottom:10rpx; }
+.es-pb-11{ padding-bottom:11rpx; }
+.es-pb-12{ padding-bottom:12rpx; }
+.es-pb-13{ padding-bottom:13rpx; }
+.es-pb-14{ padding-bottom:14rpx; }
+.es-pb-15{ padding-bottom:15rpx; }
+.es-pb-16{ padding-bottom:16rpx; }
+.es-pb-17{ padding-bottom:17rpx; }
+.es-pb-18{ padding-bottom:18rpx; }
+.es-pb-19{ padding-bottom:19rpx; }
+.es-pb-20{ padding-bottom:20rpx; }
+.es-pb-21{ padding-bottom:21rpx; }
+.es-pb-22{ padding-bottom:22rpx; }
+.es-pb-23{ padding-bottom:23rpx; }
+.es-pb-24{ padding-bottom:24rpx; }
+.es-pb-25{ padding-bottom:25rpx; }
+.es-pb-26{ padding-bottom:26rpx; }
+.es-pb-27{ padding-bottom:27rpx; }
+.es-pb-28{ padding-bottom:28rpx; }
+.es-pb-29{ padding-bottom:29rpx; }
+.es-pb-30{ padding-bottom:30rpx; }
+.es-pb-31{ padding-bottom:31rpx; }
+.es-pb-32{ padding-bottom:32rpx; }
+.es-pb-33{ padding-bottom:33rpx; }
+.es-pb-34{ padding-bottom:34rpx; }
+.es-pb-35{ padding-bottom:35rpx; }
+.es-pb-36{ padding-bottom:36rpx; }
+.es-pb-37{ padding-bottom:37rpx; }
+.es-pb-38{ padding-bottom:38rpx; }
+.es-pb-39{ padding-bottom:39rpx; }
+.es-pb-40{ padding-bottom:40rpx; }
+.es-pb-41{ padding-bottom:41rpx; }
+.es-pb-42{ padding-bottom:42rpx; }
+.es-pb-43{ padding-bottom:43rpx; }
+.es-pb-44{ padding-bottom:44rpx; }
+.es-pb-45{ padding-bottom:45rpx; }
+.es-pb-46{ padding-bottom:46rpx; }
+.es-pb-47{ padding-bottom:47rpx; }
+.es-pb-48{ padding-bottom:48rpx; }
+.es-pb-49{ padding-bottom:49rpx; }
+.es-pb-50{ padding-bottom:50rpx; }
+
+
+
+
+/* widthPercent */
+.es-wp-1{ width:1%; }
+.es-wp-2{ width:2%; }
+.es-wp-3{ width:3%; }
+.es-wp-4{ width:4%; }
+.es-wp-5{ width:5%; }
+.es-wp-6{ width:6%; }
+.es-wp-7{ width:7%; }
+.es-wp-8{ width:8%; }
+.es-wp-9{ width:9%; }
+.es-wp-10{ width:10%; }
+.es-wp-11{ width:11%; }
+.es-wp-12{ width:12%; }
+.es-wp-13{ width:13%; }
+.es-wp-14{ width:14%; }
+.es-wp-15{ width:15%; }
+.es-wp-16{ width:16%; }
+.es-wp-17{ width:17%; }
+.es-wp-18{ width:18%; }
+.es-wp-19{ width:19%; }
+.es-wp-20{ width:20%; }
+.es-wp-21{ width:21%; }
+.es-wp-22{ width:22%; }
+.es-wp-23{ width:23%; }
+.es-wp-24{ width:24%; }
+.es-wp-25{ width:25%; }
+.es-wp-26{ width:26%; }
+.es-wp-27{ width:27%; }
+.es-wp-28{ width:28%; }
+.es-wp-29{ width:29%; }
+.es-wp-30{ width:30%; }
+.es-wp-31{ width:31%; }
+.es-wp-32{ width:32%; }
+.es-wp-33{ width:33%; }
+.es-wp-333{ width:33.33%; }
+.es-wp-34{ width:34%; }
+.es-wp-35{ width:35%; }
+.es-wp-36{ width:36%; }
+.es-wp-37{ width:37%; }
+.es-wp-38{ width:38%; }
+.es-wp-39{ width:39%; }
+.es-wp-40{ width:40%; }
+.es-wp-41{ width:41%; }
+.es-wp-42{ width:42%; }
+.es-wp-43{ width:43%; }
+.es-wp-44{ width:44%; }
+.es-wp-45{ width:45%; }
+.es-wp-46{ width:46%; }
+.es-wp-47{ width:47%; }
+.es-wp-48{ width:48%; }
+.es-wp-49{ width:49%; }
+.es-wp-50{ width:50%; }
+.es-wp-51{ width:51%; }
+.es-wp-52{ width:52%; }
+.es-wp-53{ width:53%; }
+.es-wp-54{ width:54%; }
+.es-wp-55{ width:55%; }
+.es-wp-56{ width:56%; }
+.es-wp-57{ width:57%; }
+.es-wp-58{ width:58%; }
+.es-wp-59{ width:59%; }
+.es-wp-60{ width:60%; }
+.es-wp-61{ width:61%; }
+.es-wp-62{ width:62%; }
+.es-wp-63{ width:63%; }
+.es-wp-64{ width:64%; }
+.es-wp-65{ width:65%; }
+.es-wp-66{ width:66%; }
+.es-wp-67{ width:67%; }
+.es-wp-68{ width:68%; }
+.es-wp-69{ width:69%; }
+.es-wp-70{ width:70%; }
+.es-wp-71{ width:71%; }
+.es-wp-72{ width:72%; }
+.es-wp-73{ width:73%; }
+.es-wp-74{ width:74%; }
+.es-wp-75{ width:75%; }
+.es-wp-76{ width:76%; }
+.es-wp-77{ width:77%; }
+.es-wp-78{ width:78%; }
+.es-wp-79{ width:79%; }
+.es-wp-80{ width:80%; }
+.es-wp-81{ width:81%; }
+.es-wp-82{ width:82%; }
+.es-wp-83{ width:83%; }
+.es-wp-84{ width:84%; }
+.es-wp-85{ width:85%; }
+.es-wp-86{ width:86%; }
+.es-wp-87{ width:87%; }
+.es-wp-88{ width:88%; }
+.es-wp-89{ width:89%; }
+.es-wp-90{ width:90%; }
+.es-wp-91{ width:91%; }
+.es-wp-92{ width:92%; }
+.es-wp-93{ width:93%; }
+.es-wp-94{ width:94%; }
+.es-wp-95{ width:95%; }
+.es-wp-96{ width:96%; }
+.es-wp-97{ width:97%; }
+.es-wp-98{ width:98%; }
+.es-wp-99{ width:99%; }
+.es-wp-100{ width:100%; }
+
+/* border */
+.es-b-b{ border-bottom: 1px #F7F8FA solid; }
+.es-b-t{ border-top: 1px #F7F8FA solid; }
+.es-b-l{ border-left: 1px #F7F8FA solid; }
+.es-b-r{ border-right: 1px #F7F8FA solid; }
+.es-br{ border-radius: 1000rpx;}
+.es-br-1{ border-radius: 1rpx; }
+.es-br-2{ border-radius: 2rpx; }
+.es-br-3{ border-radius: 3rpx; }
+.es-br-4{ border-radius: 4rpx; }
+.es-br-5{ border-radius: 5rpx; }
+.es-br-6{ border-radius: 6rpx; }
+.es-br-7{ border-radius: 7rpx; }
+.es-br-8{ border-radius: 8rpx; }
+.es-br-9{ border-radius: 9rpx; }
+.es-br-10{ border-radius: 10rpx; }
+.es-br-11{ border-radius: 11rpx; }
+.es-br-12{ border-radius: 12rpx; }
+.es-br-13{ border-radius: 13rpx; }
+.es-br-14{ border-radius: 14rpx; }
+.es-br-15{ border-radius: 15rpx; }
+.es-br-16{ border-radius: 16rpx; }
+.es-br-17{ border-radius: 17rpx; }
+.es-br-18{ border-radius: 18rpx; }
+.es-br-19{ border-radius: 19rpx; }
+.es-br-20{ border-radius: 20rpx; }
+.es-br-21{ border-radius: 21rpx; }
+.es-br-22{ border-radius: 22rpx; }
+.es-br-23{ border-radius: 23rpx; }
+.es-br-24{ border-radius: 24rpx; }
+.es-br-25{ border-radius: 25rpx; }
+.es-br-26{ border-radius: 26rpx; }
+.es-br-27{ border-radius: 27rpx; }
+.es-br-28{ border-radius: 28rpx; }
+.es-br-29{ border-radius: 29rpx; }
+.es-br-30{ border-radius: 30rpx; }
+.es-br-31{ border-radius: 31rpx; }
+.es-br-32{ border-radius: 32rpx; }
+.es-br-33{ border-radius: 33rpx; }
+.es-br-34{ border-radius: 34rpx; }
+.es-br-35{ border-radius: 35rpx; }
+.es-br-36{ border-radius: 36rpx; }
+.es-br-37{ border-radius: 37rpx; }
+.es-br-38{ border-radius: 38rpx; }
+.es-br-39{ border-radius: 39rpx; }
+.es-br-40{ border-radius: 40rpx; }
+.es-br-41{ border-radius: 41rpx; }
+.es-br-42{ border-radius: 42rpx; }
+.es-br-43{ border-radius: 43rpx; }
+.es-br-44{ border-radius: 44rpx; }
+.es-br-45{ border-radius: 45rpx; }
+.es-br-46{ border-radius: 46rpx; }
+.es-br-47{ border-radius: 47rpx; }
+.es-br-48{ border-radius: 48rpx; }
+.es-br-49{ border-radius: 49rpx; }
+.es-br-50{ border-radius: 50rpx; }
+.es-br-51{ border-radius: 51rpx; }
+.es-br-52{ border-radius: 52rpx; }
+.es-br-53{ border-radius: 53rpx; }
+.es-br-54{ border-radius: 54rpx; }
+.es-br-55{ border-radius: 55rpx; }
+.es-br-56{ border-radius: 56rpx; }
+.es-br-57{ border-radius: 57rpx; }
+.es-br-58{ border-radius: 58rpx; }
+.es-br-59{ border-radius: 59rpx; }
+.es-br-60{ border-radius: 60rpx; }
+.es-br-61{ border-radius: 61rpx; }
+.es-br-62{ border-radius: 62rpx; }
+.es-br-63{ border-radius: 63rpx; }
+.es-br-64{ border-radius: 64rpx; }
+.es-br-65{ border-radius: 65rpx; }
+.es-br-66{ border-radius: 66rpx; }
+.es-br-67{ border-radius: 67rpx; }
+.es-br-68{ border-radius: 68rpx; }
+.es-br-69{ border-radius: 69rpx; }
+.es-br-70{ border-radius: 70rpx; }
+.es-br-71{ border-radius: 71rpx; }
+.es-br-72{ border-radius: 72rpx; }
+.es-br-73{ border-radius: 73rpx; }
+.es-br-74{ border-radius: 74rpx; }
+.es-br-75{ border-radius: 75rpx; }
+.es-br-76{ border-radius: 76rpx; }
+.es-br-77{ border-radius: 77rpx; }
+.es-br-78{ border-radius: 78rpx; }
+.es-br-79{ border-radius: 79rpx; }
+.es-br-80{ border-radius: 80rpx; }
+.es-br-ban{ border-radius: 50%; }
+
+
+ /*#ifndef APP-NVUE*/  
+/* float */
+.es-fl{ float:left; }
+.es-fr{ float:right; }
+ /*#endif*/ 
+ 
+ 
+/* other common style */
+.es-view-w-x{ padding-left:30rpx; padding-right:30rpx;position: relative;
+    /*#ifndef APP-NVUE*/   
+    overflow: auto;
+	 /*#endif*/ 
+}
+.es-view-w-y{ margin-left:30rpx;margin-right:30rpx;
+/*#ifndef APP-NVUE*/   
+overflow: auto;
+/*#endif*/ 
+position: relative;}
+
+.es-omit,.es-omit-1{overflow: hidden;text-overflow: ellipsis;
+   /*#ifndef APP-NVUE*/   
+   white-space: nowrap;
+   /*#endif*/ 
+}
+
+.es-omit-2{overflow: hidden;text-overflow: ellipsis; 
+  /*#ifndef APP-NVUE*/   
+   display:-webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;
+   /*#endif*/ 
+}
+.es-omit-3{overflow: hidden;text-overflow: ellipsis;
+ /*#ifndef APP-NVUE*/   
+   display: -webkit-box;-webkit-line-clamp: 3;-webkit-box-orient: vertical;
+  /*#endif*/ 
+}
+.es-omit-4{overflow: hidden;text-overflow: ellipsis;
+ /*#ifndef APP-NVUE*/   
+   display: -webkit-box;-webkit-line-clamp: 4;-webkit-box-orient: vertical;
+  /*#endif*/ 
+}
+.es-omit-5{overflow: hidden;text-overflow: ellipsis;
+ /*#ifndef APP-NVUE*/   
+   display: -webkit-box;-webkit-line-clamp: 5;-webkit-box-orient: vertical;
+ /*#endif*/ 
+}
+
+.es-on-act:active,.es-max-btn:active{opacity: 0.7;}
+.es-on-bc:active{background: #cfcfcf !important;}
+
+.es-hide,.es-hidden{  
+	/*#ifndef APP-NVUE*/   
+	display: none; 
+	/*#endif*/
+}
+
+.es-oa{ 
+	/*#ifndef APP-NVUE*/   
+	overflow: auto;
+	/*#endif*/
+}
+
+.es-oh{ overflow: hidden;}
+
+.es-fix-top{ position: fixed;left:0;top:0;width:100%; z-index:10;}
+
+.es-fix-bottom{ position: fixed;left:0; bottom:0;width:100%; z-index:10;}
+.es-auto-bottom{ 
+	/*#ifndef APP-NVUE*/  
+	padding-bottom: env(safe-area-inset-bottom);
+	/*#endif*/
+}
+.es-auto-top{ /* padding-top: var(--status-bar-height); */ /* padding-top: env(safe-area-inset-top); */}
+.es-shadow-top,.es-fix-top.es-bc-white{ box-shadow: 0px -3px 8px rgba(0, 0, 0, 0.03);}
+
+.es-fix-top.es-bc-white{
+	box-shadow: 0 0 8rpx rgba(0,0,0,0.05);
+}
+
+.es-deleteline{ text-decoration:line-through;}
+.es-underline{ text-decoration:underline;}
+
+.es-block{ position: relative;overflow: hidden;}
+/*#ifndef APP-NVUE*/   
+.es-block > view:nth-child(1){ padding-top:100%;width:100%;}
+.es-block > view:nth-child(2){ width:100%;height:100%;position: absolute;left:0;top:0;overflow: hidden;z-index:1;}
+.es-block > view:nth-child(3){position: absolute;overflow: hidden;z-index:2;}
+/*#endif*/
+
+/* icon */
+.es-icon-default{background-image: url(/static/logo.png);}
+.es-icon,.es-icon-auto,.es-icon-default,
+.es-icon-10,.es-icon-11,.es-icon-12,.es-icon-13,.es-icon-14,.es-icon-15,.es-icon-16,.es-icon-17,.es-icon-18,.es-icon-19,
+.es-icon-20,.es-icon-21,.es-icon-22,.es-icon-23,.es-icon-24,.es-icon-25,.es-icon-26,.es-icon-27,.es-icon-28,.es-icon-29,
+.es-icon-30,.es-icon-31,.es-icon-32,.es-icon-33,.es-icon-34,.es-icon-35,.es-icon-36,.es-icon-37,.es-icon-38,.es-icon-39,
+.es-icon-40,.es-icon-41,.es-icon-42,.es-icon-43,.es-icon-44,.es-icon-45,.es-icon-46,.es-icon-47,.es-icon-48,.es-icon-49,
+.es-icon-50,.es-icon-51,.es-icon-52,.es-icon-53,.es-icon-54,.es-icon-55,.es-icon-56,.es-icon-57,.es-icon-58,.es-icon-59,
+.es-icon-60,.es-icon-61,.es-icon-62,.es-icon-63,.es-icon-64,.es-icon-65,.es-icon-66,.es-icon-67,.es-icon-68,.es-icon-69,
+.es-icon-70,.es-icon-71,.es-icon-72,.es-icon-73,.es-icon-74,.es-icon-75,.es-icon-76,.es-icon-77,.es-icon-78,.es-icon-79,
+.es-icon-80,.es-icon-81,.es-icon-82,.es-icon-83,.es-icon-84,.es-icon-85,.es-icon-86,.es-icon-87,.es-icon-88,.es-icon-89,
+.es-icon-90,.es-icon-91,.es-icon-92,.es-icon-93,.es-icon-94,.es-icon-95,.es-icon-96,.es-icon-97,.es-icon-98,.es-icon-99,
+.es-icon-100,.es-icon-101,.es-icon-102,.es-icon-103,.es-icon-104,.es-icon-105,.es-icon-106,.es-icon-107,.es-icon-108,.es-icon-109,
+.es-icon-110,.es-icon-111,.es-icon-112,.es-icon-113,.es-icon-114,.es-icon-115,.es-icon-116,.es-icon-117,.es-icon-118,.es-icon-119,
+.es-icon-120,.es-icon-121,.es-icon-122,.es-icon-123,.es-icon-124,.es-icon-125,.es-icon-126,.es-icon-127,.es-icon-128,.es-icon-129,
+.es-icon-130,.es-icon-131,.es-icon-132,.es-icon-133,.es-icon-134,.es-icon-135,.es-icon-136,.es-icon-137,.es-icon-138,.es-icon-139,
+.es-icon-140,.es-icon-141,.es-icon-142,.es-icon-143,.es-icon-144,.es-icon-145,.es-icon-146,.es-icon-147,.es-icon-148,.es-icon-149,
+.es-icon-150,.es-icon-151,.es-icon-152,.es-icon-153,.es-icon-154,.es-icon-155,.es-icon-156,.es-icon-157,.es-icon-158,.es-icon-159,
+.es-icon-160,.es-icon-161,.es-icon-162,.es-icon-163,.es-icon-164,.es-icon-165,.es-icon-166,.es-icon-167,.es-icon-168,.es-icon-169,
+.es-icon-170,.es-icon-171,.es-icon-172,.es-icon-173,.es-icon-174,.es-icon-175,.es-icon-176,.es-icon-177,.es-icon-178,.es-icon-179,
+.es-icon-180,.es-icon-181,.es-icon-182,.es-icon-183,.es-icon-184,.es-icon-185,.es-icon-186,.es-icon-187,.es-icon-188,.es-icon-189,
+.es-icon-190,.es-icon-191,.es-icon-192,.es-icon-193,.es-icon-194,.es-icon-195,.es-icon-196,.es-icon-197,.es-icon-198,.es-icon-199,
+.es-icon-200{
+	/*#ifndef APP-NVUE*/   
+	background-size:  100% 100%;
+    /*#endif*/ 
+	overflow: hidden;
+}
+
+
+/*#ifndef APP-NVUE*/
+.es-icon image,.es-icon-auto image,
+.es-icon-10 image,.es-icon-11 image,.es-icon-12 image,.es-icon-13 image,.es-icon-14 image,.es-icon-15 image,.es-icon-16 image,.es-icon-17 image,.es-icon-18 image,.es-icon-19 image,
+.es-icon-20 image,.es-icon-21 image,.es-icon-22 image,.es-icon-23 image,.es-icon-24 image,.es-icon-25 image,.es-icon-26 image,.es-icon-27 image,.es-icon-28 image,.es-icon-29 image,
+.es-icon-30 image,.es-icon-31 image,.es-icon-32 image,.es-icon-33 image,.es-icon-34 image,.es-icon-35 image,.es-icon-36 image,.es-icon-37 image,.es-icon-38 image,.es-icon-39 image,
+.es-icon-40 image,.es-icon-41 image,.es-icon-42 image,.es-icon-43 image,.es-icon-44 image,.es-icon-45 image,.es-icon-46 image,.es-icon-47 image,.es-icon-48 image,.es-icon-49 image,
+.es-icon-50 image,.es-icon-51 image,.es-icon-52 image,.es-icon-53 image,.es-icon-54 image,.es-icon-55 image,.es-icon-56 image,.es-icon-57 image,.es-icon-58 image,.es-icon-59 image,
+.es-icon-60 image,.es-icon-61 image,.es-icon-62 image,.es-icon-63 image,.es-icon-64 image,.es-icon-65 image,.es-icon-66 image,.es-icon-67 image,.es-icon-68 image,.es-icon-69 image,
+.es-icon-70 image,.es-icon-71 image,.es-icon-72 image,.es-icon-73 image,.es-icon-74 image,.es-icon-75 image,.es-icon-76 image,.es-icon-77 image,.es-icon-78 image,.es-icon-79 image,
+.es-icon-80 image,.es-icon-81 image,.es-icon-82 image,.es-icon-83 image,.es-icon-84 image,.es-icon-85 image,.es-icon-86 image,.es-icon-87 image,.es-icon-88 image,.es-icon-89 image,
+.es-icon-90 image,.es-icon-91 image,.es-icon-92 image,.es-icon-93 image,.es-icon-94 image,.es-icon-95 image,.es-icon-96 image,.es-icon-97 image,.es-icon-98 image,.es-icon-99 image,
+.es-icon-100 image,.es-icon-101 image,.es-icon-102 image,.es-icon-103 image,.es-icon-104 image,.es-icon-105 image,.es-icon-106 image,.es-icon-107 image,.es-icon-108 image,.es-icon-109 image,
+.es-icon-110 image,.es-icon-111 image,.es-icon-112 image,.es-icon-113 image,.es-icon-114 image,.es-icon-115 image,.es-icon-116 image,.es-icon-117 image,.es-icon-118 image,.es-icon-119 image,
+.es-icon-120 image,.es-icon-121 image,.es-icon-122 image,.es-icon-123 image,.es-icon-124 image,.es-icon-125 image,.es-icon-126 image,.es-icon-127 image,.es-icon-128 image,.es-icon-129 image,
+.es-icon-130 image,.es-icon-131 image,.es-icon-132 image,.es-icon-133 image,.es-icon-134 image,.es-icon-135 image,.es-icon-136 image,.es-icon-137 image,.es-icon-138 image,.es-icon-139 image,
+.es-icon-140 image,.es-icon-141 image,.es-icon-142 image,.es-icon-143 image,.es-icon-144 image,.es-icon-145 image,.es-icon-146 image,.es-icon-147 image,.es-icon-148 image,.es-icon-149 image,
+.es-icon-150 image,.es-icon-151 image,.es-icon-152 image,.es-icon-153 image,.es-icon-154 image,.es-icon-155 image,.es-icon-156 image,.es-icon-157 image,.es-icon-158 image,.es-icon-159 image,
+.es-icon-160 image,.es-icon-161 image,.es-icon-162 image,.es-icon-163 image,.es-icon-164 image,.es-icon-165 image,.es-icon-166 image,.es-icon-167 image,.es-icon-168 image,.es-icon-169 image,
+.es-icon-170 image,.es-icon-171 image,.es-icon-172 image,.es-icon-173 image,.es-icon-174 image,.es-icon-175 image,.es-icon-176 image,.es-icon-177 image,.es-icon-178 image,.es-icon-179 image,
+.es-icon-180 image,.es-icon-181 image,.es-icon-182 image,.es-icon-183 image,.es-icon-184 image,.es-icon-185 image,.es-icon-186 image,.es-icon-187 image,.es-icon-188 image,.es-icon-189 image,
+.es-icon-190 image,.es-icon-191 image,.es-icon-192 image,.es-icon-193 image,.es-icon-194 image,.es-icon-195 image,.es-icon-196 image,.es-icon-197 image,.es-icon-198 image,.es-icon-199 image,
+.es-icon-200 image{
+	width:100%;
+	height:100%;
+}
+ /*#endif*/ 
+
+
+.es-bg-auto{
+	/*#ifndef APP-NVUE*/   
+	background-size: 100% auto;
+	background-repeat: no-repeat;
+	 /*#endif*/ 
+}
+
+
+/* common */
+
+
+.es-icon,.es-icon-default{ width:48rpx;height:48rpx; overflow: hidden;
+  /*#ifndef APP-NVUE*/   
+   background-size: 100% 100% !important;
+   /*#endif*/ 
+}
+.es-icon-10{ width:10rpx;height:10rpx;
+   /*#ifndef APP-NVUE*/   
+   background-size: 100% 100% !important;
+  /*#endif*/ 
+}
+.es-icon-11{ width:11rpx;height:11rpx;
+    /*#ifndef APP-NVUE*/   
+	 background-size: 100% 100% !important; 
+	/*#endif*/ 
+}
+.es-icon-12{ width:12rpx;height:12rpx;
+    background-size: 100% 100% !important;
+ }
+ 
+.es-icon-13{  width:13rpx;height:13rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-14{  width:14rpx;height:14rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-15{  width:15rpx;height:15rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-16{  width:16rpx;height:16rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-17{  width:17rpx;height:17rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-18{  width:18rpx;height:18rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-19{  width:19rpx;height:19rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-20{  width:20rpx;height:20rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-21{  width:21rpx;height:21rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-22{  width:22rpx;height:22rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-23{  width:23rpx;height:23rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-24{  width:24rpx;height:24rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-25{  width:25rpx;height:25rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-26{  width:26rpx;height:26rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-27{  width:27rpx;height:27rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-28{  width:28rpx;height:28rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-29{  width:29rpx;height:29rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-30{  width:30rpx;height:30rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+
+
+.es-icon-31{ width:31rpx;height:31rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-32{ width:32rpx;height:32rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-33{ width:33rpx;height:33rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-34{ width:34rpx;height:34rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-35{ width:35rpx;height:35rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+
+.es-icon-37{  width:37rpx;height:37rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-38{  width:38rpx;height:38rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-39{  width:39rpx;height:39rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-40{  width:40rpx;height:40rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-41{  width:41rpx;height:41rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-42{  width:42rpx;height:42rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-43{  width:43rpx;height:43rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-44{  width:44rpx;height:44rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-45{  width:45rpx;height:45rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-46{  width:46rpx;height:46rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-47{  width:47rpx;height:47rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-48{  width:48rpx;height:48rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-49{  width:49rpx;height:49rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-50{  width:50rpx;height:50rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-51{  width:51rpx;height:51rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-52{  width:52rpx;height:52rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-53{  width:53rpx;height:53rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-54{  width:54rpx;height:54rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-55{  width:55rpx;height:55rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+
+.es-icon-56{  width:56rpx;height:56rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-57{  width:57rpx;height:57rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-58{  width:58rpx;height:58rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-59{  width:59rpx;height:59rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-60{  width:60rpx;height:60rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-61{  width:61rpx;height:61rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-62{  width:62rpx;height:62rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-63{  width:63rpx;height:63rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-64{  width:64rpx;height:64rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-65{  width:65rpx;height:65rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-66{  width:66rpx;height:66rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-67{  width:67rpx;height:67rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-68{  width:68rpx;height:68rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-69{  width:69rpx;height:69rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-70{  width:70rpx;height:70rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+
+.es-icon-71{  width:71rpx;height:71rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-72{  width:72rpx;height:72rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-73{  width:73rpx;height:73rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-74{  width:74rpx;height:74rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-75{  width:75rpx;height:75rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-76{  width:76rpx;height:76rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-77{  width:77rpx;height:77rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-78{  width:78rpx;height:78rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+.es-icon-79{  width:79rpx;height:79rpx;  /*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/  }
+
+
+.es-icon-80{ width:80rpx;height:80rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-81{ width:81rpx;height:81rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-82{ width:82rpx;height:82rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-83{ width:83rpx;height:83rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-84{ width:84rpx;height:84rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-85{ width:85rpx;height:85rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-86{ width:86rpx;height:86rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-87{ width:87rpx;height:87rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-88{ width:88rpx;height:88rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-89{ width:89rpx;height:89rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-90{ width:90rpx;height:90rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+
+
+
+
+.es-icon-91{ width:91rpx;height:91rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-92{ width:92rpx;height:92rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-93{ width:93rpx;height:93rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-94{ width:94rpx;height:94rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-95{ width:95rpx;height:95rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-96{ width:96rpx;height:96rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-97{ width:97rpx;height:97rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-98{ width:98rpx;height:98rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-99{ width:99rpx;height:99rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-100{ width:100rpx;height:100rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-101{ width:101rpx;height:101rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-102{ width:102rpx;height:102rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-103{ width:103rpx;height:103rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-104{ width:104rpx;height:104rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-105{ width:105rpx;height:105rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-106{ width:106rpx;height:106rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-107{ width:107rpx;height:107rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-108{ width:108rpx;height:108rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-109{ width:109rpx;height:109rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-110{ width:110rpx;height:110rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-111{ width:111rpx;height:111rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-112{ width:112rpx;height:112rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-113{ width:113rpx;height:113rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-114{ width:114rpx;height:114rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-115{ width:115rpx;height:115rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-116{ width:116rpx;height:116rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-117{ width:117rpx;height:117rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-118{ width:118rpx;height:118rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-119{ width:119rpx;height:119rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-120{ width:120rpx;height:120rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-121{ width:121rpx;height:121rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-122{ width:122rpx;height:122rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-123{ width:123rpx;height:123rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-124{ width:124rpx;height:124rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-125{ width:125rpx;height:125rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-126{ width:126rpx;height:126rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-127{ width:127rpx;height:127rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-128{ width:128rpx;height:128rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-129{ width:129rpx;height:129rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-130{ width:120rpx;height:120rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-131{ width:131rpx;height:131rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-132{ width:132rpx;height:132rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-133{ width:133rpx;height:133rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-134{ width:134rpx;height:134rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-135{ width:135rpx;height:135rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-136{ width:136rpx;height:136rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-137{ width:137rpx;height:137rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-138{ width:138rpx;height:138rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-139{ width:139rpx;height:139rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-140{ width:140rpx;height:140rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+
+
+
+.es-icon-141{ width:141rpx;height:141rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-142{ width:142rpx;height:142rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-143{ width:143rpx;height:143rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-144{ width:144rpx;height:144rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-145{ width:145rpx;height:145rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-146{ width:146rpx;height:146rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-147{ width:147rpx;height:147rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-148{ width:148rpx;height:148rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-149{ width:149rpx;height:149rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-150{ width:150rpx;height:150rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-151{ width:151rpx;height:151rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-152{ width:152rpx;height:152rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-153{ width:153rpx;height:153rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-154{ width:154rpx;height:154rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-155{ width:155rpx;height:155rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-156{ width:156rpx;height:156rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-157{ width:157rpx;height:157rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-158{ width:158rpx;height:158rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-159{ width:159rpx;height:159rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-160{ width:160rpx;height:160rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-161{ width:161rpx;height:161rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-162{ width:162rpx;height:162rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-163{ width:163rpx;height:163rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-164{ width:164rpx;height:164rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-165{ width:165rpx;height:165rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-166{ width:166rpx;height:166rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-167{ width:167rpx;height:167rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-168{ width:168rpx;height:168rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-169{ width:169rpx;height:169rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-170{ width:170rpx;height:170rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-171{ width:171rpx;height:171rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-172{ width:172rpx;height:172rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-173{ width:173rpx;height:173rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-174{ width:174rpx;height:174rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-175{ width:175rpx;height:175rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-176{ width:176rpx;height:176rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-177{ width:177rpx;height:177rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-178{ width:178rpx;height:178rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-179{ width:179rpx;height:179rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-180{ width:180rpx;height:180rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-181{ width:181rpx;height:181rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-182{ width:182rpx;height:182rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-183{ width:183rpx;height:183rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-184{ width:184rpx;height:184rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-185{ width:185rpx;height:185rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-186{ width:186rpx;height:186rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-187{ width:187rpx;height:187rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-188{ width:188rpx;height:188rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-189{ width:189rpx;height:189rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-190{ width:190rpx;height:190rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-191{ width:191rpx;height:191rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-192{ width:192rpx;height:192rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-193{ width:193rpx;height:193rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-194{ width:194rpx;height:194rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-195{ width:195rpx;height:195rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-196{ width:196rpx;height:196rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-197{ width:197rpx;height:197rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-198{ width:198rpx;height:198rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-199{ width:199rpx;height:199rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+.es-icon-200{ width:190rpx;height:190rpx;/*#ifndef  APP-NVUE*/  background-size:  100%  100%  !important;  /*#endif*/ }
+
+
+
+
+/* font.css */
+/* fontWeight */
+.es-fw{font-weight: bold;}
+.es-fw1,.es-fw-600{ font-weight: 600; }
+.es-fw2,.es-fw-bold,.es-fw-700{ font-weight: 700; }
+.es-fw-500{ font-weight: 500; }
+.es-fw-400{ font-weight: 400; }
+.es-fw-n{font-weight: normal;}
+
+
+/* font orientation */
+.es-tc{ text-align: center; }
+.es-tl{ text-align: left; }
+.es-tr{ text-align: right; }
+
+/* fontSize */
+.es-fs-10{ font-size:10rpx; }
+.es-fs-11{ font-size:11rpx; }
+.es-fs-12{ font-size:12rpx; }
+.es-fs-13{ font-size:13rpx; }
+.es-fs-14{ font-size:14rpx; }
+.es-fs-15{ font-size:15rpx; }
+.es-fs-16{ font-size:16rpx; }
+.es-fs-17{ font-size:17rpx; }
+.es-fs-18{ font-size:18rpx; }
+.es-fs-19{ font-size:19rpx; }
+.es-fs-20{ font-size:20rpx; }
+.es-fs-21{ font-size:21rpx; }
+.es-fs-22{ font-size:22rpx; }
+.es-fs-23{ font-size:23rpx; }
+.es-fs-24{ font-size:24rpx; }
+.es-fs-25{ font-size:25rpx; }
+.es-fs-26{ font-size:26rpx; }
+.es-fs-27{ font-size:27rpx; }
+.es-fs-28{ font-size:28rpx; }
+.es-fs-29{ font-size:29rpx; }
+.es-fs-30{ font-size:30rpx; }
+.es-fs-31{ font-size:31rpx; }
+.es-fs-32{ font-size:32rpx; }
+.es-fs-33{ font-size:33rpx; }
+.es-fs-34{ font-size:34rpx; }
+.es-fs-35{ font-size:35rpx; }
+.es-fs-36{ font-size:36rpx; }
+.es-fs-37{ font-size:37rpx; }
+.es-fs-38{ font-size:38rpx; }
+.es-fs-39{ font-size:39rpx; }
+.es-fs-40{ font-size:40rpx; }
+.es-fs-41{ font-size:41rpx; }
+.es-fs-42{ font-size:42rpx; }
+.es-fs-43{ font-size:43rpx; }
+.es-fs-44{ font-size:44rpx; }
+.es-fs-45{ font-size:45rpx; }
+.es-fs-46{ font-size:46rpx; }
+.es-fs-47{ font-size:47rpx; }
+.es-fs-48{ font-size:48rpx; }
+.es-fs-49{ font-size:49rpx; }
+.es-fs-50{ font-size:50rpx; }
+.es-fs-51{ font-size:51rpx; }
+.es-fs-52{ font-size:52rpx; }
+.es-fs-53{ font-size:53rpx; }
+.es-fs-54{ font-size:54rpx; }
+.es-fs-55{ font-size:55rpx; }
+.es-fs-56{ font-size:56rpx; }
+.es-fs-57{ font-size:57rpx; }
+.es-fs-58{ font-size:58rpx; }
+.es-fs-59{ font-size:59rpx; }
+.es-fs-60{ font-size:60rpx; }
+.es-fs-61{ font-size:61rpx; }
+.es-fs-62{ font-size:62rpx; }
+.es-fs-63{ font-size:63rpx; }
+.es-fs-64{ font-size:64rpx; }
+.es-fs-65{ font-size:65rpx; }
+.es-fs-66{ font-size:66rpx; }
+.es-fs-67{ font-size:67rpx; }
+.es-fs-68{ font-size:68rpx; }
+.es-fs-69{ font-size:69rpx; }
+.es-fs-70{ font-size:70rpx; }
+.es-fs-71{ font-size:71rpx; }
+.es-fs-72{ font-size:72rpx; }
+.es-fs-73{ font-size:73rpx; }
+.es-fs-74{ font-size:74rpx; }
+.es-fs-75{ font-size:75rpx; }
+.es-fs-76{ font-size:76rpx; }
+.es-fs-77{ font-size:77rpx; }
+.es-fs-78{ font-size:78rpx; }
+.es-fs-79{ font-size:79rpx; }
+.es-fs-80{ font-size:80rpx; }
+.es-fs-81{ font-size:81rpx; }
+.es-fs-82{ font-size:82rpx; }
+.es-fs-83{ font-size:83rpx; }
+.es-fs-84{ font-size:84rpx; }
+.es-fs-85{ font-size:85rpx; }
+.es-fs-86{ font-size:86rpx; }
+.es-fs-87{ font-size:87rpx; }
+.es-fs-88{ font-size:88rpx; }
+.es-fs-89{ font-size:89rpx; }
+.es-fs-90{ font-size:90rpx; }
+.es-fs-91{ font-size:91rpx; }
+.es-fs-92{ font-size:92rpx; }
+.es-fs-93{ font-size:93rpx; }
+.es-fs-94{ font-size:94rpx; }
+.es-fs-95{ font-size:95rpx; }
+.es-fs-96{ font-size:96rpx; }
+.es-fs-97{ font-size:97rpx; }
+.es-fs-98{ font-size:98rpx; }
+.es-fs-99{ font-size:99rpx; }
+.es-fs-100{ font-size:100rpx; }
+
+
+
+/* height */
+.es-h-1{ height:1rpx; }
+.es-h-2{ height:2rpx; }
+.es-h-3{ height:3rpx; }
+.es-h-4{ height:4rpx; }
+.es-h-5{ height:5rpx; }
+.es-h-6{ height:6rpx; }
+.es-h-7{ height:7rpx; }
+.es-h-8{ height:8rpx; }
+.es-h-9{ height:9rpx; }
+.es-h-10{ height:10rpx; }
+.es-h-11{ height:11rpx; }
+.es-h-12{ height:12rpx; }
+.es-h-13{ height:13rpx; }
+.es-h-14{ height:14rpx; }
+.es-h-15{ height:15rpx; }
+.es-h-16{ height:16rpx; }
+.es-h-17{ height:17rpx; }
+.es-h-18{ height:18rpx; }
+.es-h-19{ height:19rpx; }
+.es-h-20{ height:20rpx; }
+.es-h-21{ height:21rpx; }
+.es-h-22{ height:22rpx; }
+.es-h-23{ height:23rpx; }
+.es-h-24{ height:24rpx; }
+.es-h-25{ height:25rpx; }
+.es-h-26{ height:26rpx; }
+.es-h-27{ height:27rpx; }
+.es-h-28{ height:28rpx; }
+.es-h-29{ height:29rpx; }
+.es-h-30{ height:30rpx; }
+.es-h-31{ height:31rpx; }
+.es-h-32{ height:32rpx; }
+.es-h-33{ height:33rpx; }
+.es-h-34{ height:34rpx; }
+.es-h-35{ height:35rpx; }
+.es-h-36{ height:36rpx; }
+.es-h-37{ height:37rpx; }
+.es-h-38{ height:38rpx; }
+.es-h-39{ height:39rpx; }
+.es-h-40{ height:40rpx; }
+.es-h-41{ height:41rpx; }
+.es-h-42{ height:42rpx; }
+.es-h-43{ height:43rpx; }
+.es-h-44{ height:44rpx; }
+.es-h-45{ height:45rpx; }
+.es-h-46{ height:46rpx; }
+.es-h-47{ height:47rpx; }
+.es-h-48{ height:48rpx; }
+.es-h-49{ height:49rpx; }
+.es-h-50{ height:50rpx; }
+.es-h-51{ height:51rpx; }
+.es-h-52{ height:52rpx; }
+.es-h-53{ height:53rpx; }
+.es-h-54{ height:54rpx; }
+.es-h-55{ height:55rpx; }
+.es-h-56{ height:56rpx; }
+.es-h-57{ height:57rpx; }
+.es-h-58{ height:58rpx; }
+.es-h-59{ height:59rpx; }
+.es-h-60{ height:60rpx; }
+.es-h-61{ height:61rpx; }
+.es-h-62{ height:62rpx; }
+.es-h-63{ height:63rpx; }
+.es-h-64{ height:64rpx; }
+.es-h-65{ height:65rpx; }
+.es-h-66{ height:66rpx; }
+.es-h-67{ height:67rpx; }
+.es-h-68{ height:68rpx; }
+.es-h-69{ height:69rpx; }
+.es-h-70{ height:70rpx; }
+.es-h-71{ height:71rpx; }
+.es-h-72{ height:72rpx; }
+.es-h-73{ height:73rpx; }
+.es-h-74{ height:74rpx; }
+.es-h-75{ height:75rpx; }
+.es-h-76{ height:76rpx; }
+.es-h-77{ height:77rpx; }
+.es-h-78{ height:78rpx; }
+.es-h-79{ height:79rpx; }
+.es-h-80{ height:80rpx; }
+.es-h-81{ height:81rpx; }
+.es-h-82{ height:82rpx; }
+.es-h-83{ height:83rpx; }
+.es-h-84{ height:84rpx; }
+.es-h-85{ height:85rpx; }
+.es-h-86{ height:86rpx; }
+.es-h-87{ height:87rpx; }
+.es-h-88{ height:88rpx; }
+/* #ifdef MP-WEIXIN */
+/* .es-h-88{ height:41px; } */
+/* #endif */
+.es-h-89{ height:89rpx; }
+.es-h-90{ height:90rpx; }
+.es-h-91{ height:91rpx; }
+.es-h-92{ height:92rpx; }
+.es-h-93{ height:93rpx; }
+.es-h-94{ height:94rpx; }
+.es-h-95{ height:95rpx; }
+.es-h-96{ height:96rpx; }
+.es-h-97{ height:97rpx; }
+.es-h-98{ height:98rpx; }
+.es-h-99{ height:99rpx; }
+
+.es-h-100{ height:100rpx; }
+.es-h-101{ height:101rpx; }
+.es-h-102{ height:102rpx; }
+.es-h-103{ height:103rpx; }
+.es-h-104{ height:104rpx; }
+.es-h-105{ height:105rpx; }
+.es-h-106{ height:106rpx; }
+.es-h-107{ height:107rpx; }
+.es-h-108{ height:108rpx; }
+.es-h-109{ height:109rpx; }
+.es-h-110{ height:110rpx; }
+.es-h-111{ height:111rpx; }
+.es-h-112{ height:112rpx; }
+.es-h-113{ height:113rpx; }
+.es-h-114{ height:114rpx; }
+.es-h-115{ height:115rpx; }
+.es-h-116{ height:116rpx; }
+.es-h-117{ height:117rpx; }
+.es-h-118{ height:118rpx; }
+.es-h-119{ height:119rpx; }
+.es-h-120{ height:120rpx; }
+.es-h-121{ height:121rpx; }
+.es-h-122{ height:122rpx; }
+.es-h-123{ height:123rpx; }
+.es-h-124{ height:124rpx; }
+.es-h-125{ height:125rpx; }
+.es-h-126{ height:126rpx; }
+.es-h-127{ height:127rpx; }
+.es-h-128{ height:128rpx; }
+.es-h-129{ height:129rpx; }
+.es-h-130{ height:140rpx; }
+.es-h-131{ height:141rpx; }
+.es-h-132{ height:142rpx; }
+.es-h-133{ height:143rpx; }
+.es-h-134{ height:144rpx; }
+.es-h-135{ height:145rpx; }
+.es-h-136{ height:146rpx; }
+.es-h-137{ height:147rpx; }
+.es-h-138{ height:148rpx; }
+.es-h-139{ height:149rpx; }
+.es-h-140{ height:140rpx; }
+.es-h-141{ height:141rpx; }
+.es-h-142{ height:142rpx; }
+.es-h-143{ height:143rpx; }
+.es-h-144{ height:144rpx; }
+.es-h-145{ height:145rpx; }
+.es-h-146{ height:146rpx; }
+.es-h-147{ height:147rpx; }
+.es-h-148{ height:148rpx; }
+.es-h-149{ height:149rpx; }
+.es-h-150{ height:150rpx; }
+.es-h-151{ height:151rpx; }
+.es-h-152{ height:152rpx; }
+.es-h-153{ height:153rpx; }
+.es-h-154{ height:154rpx; }
+.es-h-155{ height:155rpx; }
+.es-h-156{ height:156rpx; }
+.es-h-157{ height:157rpx; }
+.es-h-158{ height:158rpx; }
+.es-h-159{ height:159rpx; }
+.es-h-160{ height:160rpx; }
+.es-h-161{ height:161rpx; }
+.es-h-162{ height:162rpx; }
+.es-h-163{ height:163rpx; }
+.es-h-164{ height:164rpx; }
+.es-h-165{ height:165rpx; }
+.es-h-166{ height:166rpx; }
+.es-h-167{ height:167rpx; }
+.es-h-168{ height:168rpx; }
+.es-h-169{ height:169rpx; }
+.es-h-170{ height:170rpx; }
+.es-h-171{ height:171rpx; }
+.es-h-172{ height:172rpx; }
+.es-h-173{ height:173rpx; }
+.es-h-174{ height:174rpx; }
+.es-h-175{ height:175rpx; }
+.es-h-176{ height:176rpx; }
+.es-h-177{ height:177rpx; }
+.es-h-178{ height:178rpx; }
+.es-h-179{ height:179rpx; }
+.es-h-180{ height:180rpx; }
+.es-h-181{ height:181rpx; }
+.es-h-182{ height:182rpx; }
+.es-h-183{ height:183rpx; }
+.es-h-184{ height:184rpx; }
+.es-h-185{ height:185rpx; }
+.es-h-186{ height:186rpx; }
+.es-h-187{ height:187rpx; }
+.es-h-188{ height:188rpx; }
+.es-h-189{ height:189rpx; }
+.es-h-190{ height:190rpx; }
+.es-h-191{ height:191rpx; }
+.es-h-192{ height:192rpx; }
+.es-h-193{ height:193rpx; }
+.es-h-194{ height:194rpx; }
+.es-h-195{ height:195rpx; }
+.es-h-196{ height:196rpx; }
+.es-h-197{ height:197rpx; }
+.es-h-198{ height:198rpx; }
+.es-h-199{ height:199rpx; }
+.es-h-200{ height:200rpx; }
+
+/* width */
+.es-w-1{ width:1rpx; }
+.es-w-2{ width:2rpx; }
+.es-w-3{ width:3rpx; }
+.es-w-4{ width:4rpx; }
+.es-w-5{ width:5rpx; }
+.es-w-6{ width:6rpx; }
+.es-w-7{ width:7rpx; }
+.es-w-8{ width:8rpx; }
+.es-w-9{ width:9rpx; }
+.es-w-10{ width:10rpx; }
+.es-w-11{ width:11rpx; }
+.es-w-12{ width:12rpx; }
+.es-w-13{ width:13rpx; }
+.es-w-14{ width:14rpx; }
+.es-w-15{ width:15rpx; }
+.es-w-16{ width:16rpx; }
+.es-w-17{ width:17rpx; }
+.es-w-18{ width:18rpx; }
+.es-w-19{ width:19rpx; }
+.es-w-20{ width:20rpx; }
+.es-w-21{ width:21rpx; }
+.es-w-22{ width:22rpx; }
+.es-w-23{ width:23rpx; }
+.es-w-24{ width:24rpx; }
+.es-w-25{ width:25rpx; }
+.es-w-26{ width:26rpx; }
+.es-w-27{ width:27rpx; }
+.es-w-28{ width:28rpx; }
+.es-w-29{ width:29rpx; }
+.es-w-30{ width:30rpx; }
+.es-w-31{ width:31rpx; }
+.es-w-32{ width:32rpx; }
+.es-w-33{ width:33rpx; }
+.es-w-34{ width:34rpx; }
+.es-w-35{ width:35rpx; }
+.es-w-36{ width:36rpx; }
+.es-w-37{ width:37rpx; }
+.es-w-38{ width:38rpx; }
+.es-w-39{ width:39rpx; }
+.es-w-40{ width:40rpx; }
+.es-w-41{ width:41rpx; }
+.es-w-42{ width:42rpx; }
+.es-w-43{ width:43rpx; }
+.es-w-44{ width:44rpx; }
+.es-w-45{ width:45rpx; }
+.es-w-46{ width:46rpx; }
+.es-w-47{ width:47rpx; }
+.es-w-48{ width:48rpx; }
+.es-w-49{ width:49rpx; }
+.es-w-50{ width:50rpx; }
+.es-w-51{ width:51rpx; }
+.es-w-52{ width:52rpx; }
+.es-w-53{ width:53rpx; }
+.es-w-54{ width:54rpx; }
+.es-w-55{ width:55rpx; }
+.es-w-56{ width:56rpx; }
+.es-w-57{ width:57rpx; }
+.es-w-58{ width:58rpx; }
+.es-w-59{ width:59rpx; }
+.es-w-60{ width:60rpx; }
+.es-w-61{ width:61rpx; }
+.es-w-62{ width:62rpx; }
+.es-w-63{ width:63rpx; }
+.es-w-64{ width:64rpx; }
+.es-w-65{ width:65rpx; }
+.es-w-66{ width:66rpx; }
+.es-w-67{ width:67rpx; }
+.es-w-68{ width:68rpx; }
+.es-w-69{ width:69rpx; }
+.es-w-70{ width:70rpx; }
+.es-w-71{ width:71rpx; }
+.es-w-72{ width:72rpx; }
+.es-w-73{ width:73rpx; }
+.es-w-74{ width:74rpx; }
+.es-w-75{ width:75rpx; }
+.es-w-76{ width:76rpx; }
+.es-w-77{ width:77rpx; }
+.es-w-78{ width:78rpx; }
+.es-w-79{ width:79rpx; }
+.es-w-80{ width:80rpx; }
+.es-w-81{ width:81rpx; }
+.es-w-82{ width:82rpx; }
+.es-w-83{ width:83rpx; }
+.es-w-84{ width:84rpx; }
+.es-w-85{ width:85rpx; }
+.es-w-86{ width:86rpx; }
+.es-w-87{ width:87rpx; }
+.es-w-88{ width:88rpx; }
+.es-w-89{ width:89rpx; }
+.es-w-90{ width:90rpx; }
+.es-w-91{ width:91rpx; }
+.es-w-92{ width:92rpx; }
+.es-w-93{ width:93rpx; }
+.es-w-94{ width:94rpx; }
+.es-w-95{ width:95rpx; }
+.es-w-96{ width:96rpx; }
+.es-w-97{ width:97rpx; }
+.es-w-98{ width:98rpx; }
+.es-w-99{ width:99rpx; }
+
+.es-w-100{ width:100rpx; }
+.es-w-101{ width:101rpx; }
+.es-w-102{ width:102rpx; }
+.es-w-103{ width:103rpx; }
+.es-w-104{ width:104rpx; }
+.es-w-105{ width:105rpx; }
+.es-w-106{ width:106rpx; }
+.es-w-107{ width:107rpx; }
+.es-w-108{ width:108rpx; }
+.es-w-109{ width:109rpx; }
+.es-w-110{ width:110rpx; }
+.es-w-111{ width:111rpx; }
+.es-w-112{ width:112rpx; }
+.es-w-113{ width:113rpx; }
+.es-w-114{ width:114rpx; }
+.es-w-115{ width:115rpx; }
+.es-w-116{ width:116rpx; }
+.es-w-117{ width:117rpx; }
+.es-w-118{ width:118rpx; }
+.es-w-119{ width:119rpx; }
+.es-w-120{ width:120rpx; }
+.es-w-121{ width:121rpx; }
+.es-w-122{ width:122rpx; }
+.es-w-123{ width:123rpx; }
+.es-w-124{ width:124rpx; }
+.es-w-125{ width:125rpx; }
+.es-w-126{ width:126rpx; }
+.es-w-127{ width:127rpx; }
+.es-w-128{ width:128rpx; }
+.es-w-129{ width:129rpx; }
+.es-w-130{ width:140rpx; }
+.es-w-131{ width:141rpx; }
+.es-w-132{ width:142rpx; }
+.es-w-133{ width:143rpx; }
+.es-w-134{ width:144rpx; }
+.es-w-135{ width:145rpx; }
+.es-w-136{ width:146rpx; }
+.es-w-137{ width:147rpx; }
+.es-w-138{ width:148rpx; }
+.es-w-139{ width:149rpx; }
+.es-w-140{ width:140rpx; }
+.es-w-141{ width:141rpx; }
+.es-w-142{ width:142rpx; }
+.es-w-143{ width:143rpx; }
+.es-w-144{ width:144rpx; }
+.es-w-145{ width:145rpx; }
+.es-w-146{ width:146rpx; }
+.es-w-147{ width:147rpx; }
+.es-w-148{ width:148rpx; }
+.es-w-149{ width:149rpx; }
+.es-w-150{ width:150rpx; }
+.es-w-151{ width:151rpx; }
+.es-w-152{ width:152rpx; }
+.es-w-153{ width:153rpx; }
+.es-w-154{ width:154rpx; }
+.es-w-155{ width:155rpx; }
+.es-w-156{ width:156rpx; }
+.es-w-157{ width:157rpx; }
+.es-w-158{ width:158rpx; }
+.es-w-159{ width:159rpx; }
+.es-w-160{ width:160rpx; }
+.es-w-161{ width:161rpx; }
+.es-w-162{ width:162rpx; }
+.es-w-163{ width:163rpx; }
+.es-w-164{ width:164rpx; }
+.es-w-165{ width:165rpx; }
+.es-w-166{ width:166rpx; }
+.es-w-167{ width:167rpx; }
+.es-w-168{ width:168rpx; }
+.es-w-169{ width:169rpx; }
+.es-w-170{ width:170rpx; }
+.es-w-171{ width:171rpx; }
+.es-w-172{ width:172rpx; }
+.es-w-173{ width:173rpx; }
+.es-w-174{ width:174rpx; }
+.es-w-175{ width:175rpx; }
+.es-w-176{ width:176rpx; }
+.es-w-177{ width:177rpx; }
+.es-w-178{ width:178rpx; }
+.es-w-179{ width:179rpx; }
+.es-w-180{ width:180rpx; }
+.es-w-181{ width:181rpx; }
+.es-w-182{ width:182rpx; }
+.es-w-183{ width:183rpx; }
+.es-w-184{ width:184rpx; }
+.es-w-185{ width:185rpx; }
+.es-w-186{ width:186rpx; }
+.es-w-187{ width:187rpx; }
+.es-w-188{ width:188rpx; }
+.es-w-189{ width:189rpx; }
+.es-w-190{ width:190rpx; }
+.es-w-191{ width:191rpx; }
+.es-w-192{ width:192rpx; }
+.es-w-193{ width:193rpx; }
+.es-w-194{ width:194rpx; }
+.es-w-195{ width:195rpx; }
+.es-w-196{ width:196rpx; }
+.es-w-197{ width:197rpx; }
+.es-w-198{ width:198rpx; }
+.es-w-199{ width:199rpx; }
+.es-w-200{ width:200rpx; }
+
+
+.es-p-a{position: absolute;}
+.es-p-f{position: fixed;}
+.es-p-r{position: relative;}
+

+ 94 - 0
assets/css/czy/es.2.color.css

@@ -0,0 +1,94 @@
+/* backgroundColor color borderColor */
+.es-bc,.es-max-btn{ background: #FF5C03;color:white; }
+.es-c{ color: #FF5C03 !important; }
+.es-brc{ border:1px #FF5C03 solid !important; }
+.es-bc-tint{
+	background-color: rgba(255, 92, 3, 0.1);
+}
+
+.es-bc-tint2{
+	background-color: rgba(255, 92, 3, 0.2);
+}
+
+.es-bc-tint05{
+	background-color: rgba(255, 92, 3, 0.05);
+}
+
+.es-bc-theme{ background-color:#FF5C03; color:white; }
+
+.es-bc-yellow{ background:#F57221; color:white; }
+.es-c-yellow{ color:#F57221; }
+.es-btc-yellow{ border:1px #F57221 solid !important;}
+
+
+.es-bc-yellow-tint{ background:#FCB75B; color:white; }
+.es-c-yellow-tint{ color:#FCB75B; }
+.es-brc-yellow{ border:1px #FCB75B solid !important;}
+
+
+.es-bc-blue{ background:#00a1ea;color:white; }
+.es-c-blue{ color:#00a1ea; }
+.es-brc-gray{ border:1px #00a1ea solid !important;}
+
+.es-bc-gray{  background: #C4C4C4; color:white; }
+.es-c-gray{ color: #C4C4C4; }
+.es-brc-gray{ border:1px #C4C4C4 solid !important;}
+
+.es-bc-gray-tint{ background:#F7F8FA; }
+
+.es-bc-f1{ background:#f1f1f1; color:#666666; }
+.es-bc-f3{ background:#f3f3f3; color:#666666; }
+.es-bc-d7{ background:#d7d7d7; color:#666666; }
+
+.es-brc-f1{ border:#f1f1f1 1px solid; }
+.es-brc-f3{ border:#f3f3f3 1px solid; }
+.es-brc-d7{ border:#d7d7d7 1px solid; }
+
+
+.es-bc-white{ background:#FFFFFF; }
+.es-brc-white{ border:#FFFFFF 1px solid; }
+.es-c-white{ color:#ffffff; }
+
+.es-c-red{ color:#EE5845; }
+.es-bc-red{ background:#EE5845;color:white; }
+.es-brc-red{ border:#EE5845 1px solid; }
+
+.es-c-purple{ color:#5473E8; }
+.es-bc-purple{ background:#5473E8;color:white; }
+.es-brc-purple{ border:#5473E8 1px solid; }
+
+.es-bc-black{background: #1F2129;}
+
+.es-bc-c4{ background:#c4c4c4;color:white; }
+.es-bc-f7{background:#F7F8FA;}
+.es-bc-f8{background:#F8F8F8;}
+.es-bc-db{background:#DBDBDB;}
+.es-bc-f9{background:#f9f9f9;}
+.es-bc-90{background: #9096AB !important;color:white;}
+.es-bc-e6{background-color: #e6e5e4;}
+.es-bc-fa{background-color: #fafafa;}
+
+
+/* fontColor */
+/* page{ color:#454545; } */
+.es-c-99{ color:#999999; }
+.es-t-y,.es-c-66{ color:#666666; }
+.es-t-z,.es-c-c4{ color:#C4C4C4; }
+.es-c-45{ color:#454545; }
+.es-c-cc{ color:#cccccc; }
+.es-c-7b{color:#7b7b7b;}
+.es-c-6c{color: #6c6c6c;}
+.es-t-x{color:#9096AB;}
+
+.es-c-b4{color: #b4b4b4;}
+.es-c-6a{color: #6a6a6a;}
+
+.es-c-00{color: #000000;}
+.es-c-33{color: #333333;}
+.es-c-66{color: #666666;}
+.es-c-99{color: #999999;}
+.es-c-ec{color: #ececec;}
+.es-c-e1{color: #e1e1e1;}
+.es-c-e5{color: #e5e5e5;}
+
+/*input*/

+ 28 - 0
assets/css/czy/es.3.icon.css

@@ -0,0 +1,28 @@
+
+.es-icon-default{
+	background-image: url("@/static/logo.png");
+}
+
+.es-icon-play{
+	background-image: url("@/static/images/course/play.png");
+}
+
+.es-icon-ret-white{
+	background-image: url("@/static/images/course/ret-white.png");
+	width: 18rpx;
+	height: 31rpx;
+	background-size: 100% 100%;
+}
+
+/* .es-top-bg{
+	background-image: url(/static/image/home/home_top_bg.png);
+} */
+
+.es-icon-ret-right{
+	background-image: url("@/static/images/course/ret-right2.png");
+	width: 19rpx;
+	height: 19rpx;
+	background-size: 100% 100%;
+	margin-top: 3rpx;
+	margin-left: 6rpx;
+}

+ 101 - 0
assets/css/czy/es.4.view.css

@@ -0,0 +1,101 @@
+/*
+	存放本项目使用的一些扩展类
+*/
+/* page {
+	font-family: ".PingFang SC";
+	font-size: 28rpx;
+	font-weight: 400;
+
+	background: #F7F8FA;
+} */
+
+button::after {
+	border: none;
+}
+
+button {
+	border-radius: 0;
+	font-size: 30rpx;
+	line-height: 1em;
+	padding-left: 0;
+	padding-right: 0;
+}
+
+.es-min-btn {
+	padding: 8rpx 31rpx;
+	border-radius: 200rpx;
+	font-size: 26rpx;
+}
+
+.es-min-btn2 {
+	padding: 14rpx 36rpx;
+	border-radius: 200rpx;
+	font-size: 28rpx;
+	font-weight: 600;
+}
+
+.es-min-btn-n {
+	padding: 8rpx 31rpx;
+	border-radius: 200rpx;
+	font-size: 26rpx;
+	color: #9096AB;
+	border: 1px #9096AB solid;
+}
+
+.es-min-btn-n.ac {
+	color: #12C194;
+	border: 1px #12C194 solid;
+}
+
+.es-ipt,
+.es-text {
+	overflow: hidden;
+}
+
+.es-ipt,
+.es-ipt input {
+	height: 76rpx;
+}
+
+.es-text,
+.es-text textarea {
+	height: 158rpx;
+}
+
+.es-text textarea,
+.es-ipt input {
+	padding: 0 24rpx;
+	background: #F7F8FA;
+	font-size: 28rpx;
+	width: calc(100% - 50rpx);
+}
+
+.es-text textarea {
+	padding-top: 15rpx !important;
+	padding-bottom: 15rpx !important;
+}
+
+.es-ipt.es-bc-white,
+.es-ipt.es-bc-white input,
+.es-text.es-bc-white textarea {
+	background: white;
+}
+
+
+
+.es-max-btn {
+	height: 80rpx;
+	border-radius: 15rpx;
+	background-color: #12C194;
+	color: white;
+	font-size: 28rpx;
+}
+
+
+/* .label {
+	color: #12C194;
+	background: rgba(18, 193, 148, 0.1);
+	padding: 10rpx 25rpx;
+	border-radius: 100rpx;
+	font-size: 24rpx;
+ }*/

+ 95 - 0
components/adMask/adMask.vue

@@ -0,0 +1,95 @@
+<template>
+	<view v-show="show">
+		<view class="ad-mask">
+			<slot>
+				<view class="adbox">
+					<view class="adbox-close">
+						<image src="@/static/images/ad/close_icon.png" @click="close"></image>
+					</view>
+					<image class="adbox-bg" v-show="imgType==0" src="@/static/images/ad/tc_kcc_bg.png" mode="aspectFill"></image>
+					<image class="adbox-bg" v-show="imgType==1" src="@/static/images/ad/tc_kzb_bg.png" mode="aspectFill"></image>
+					<image class="adbtn" src="@/static/images/ad/adbtn.gif"></image>
+					<image class="pointer" src="@/static/images/ad/pointer.gif"></image>
+				</view>
+			</slot>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			show: {
+				type: Boolean,
+				default: false
+			},
+			imgType: {
+				type: [String,Number],
+				default: 0
+			},
+		},
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			close() {
+				this.$emit("close");
+				this.show=false;
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.ad-mask {
+		width: 100vw;
+		height: 100vh;
+		background-color: rgba(0,0,0,0.6);
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 999;
+		@include u-flex(column, center, center);
+		.adbox {
+			width: 620rpx;
+			position: relative;
+			@include u-flex(column, center, center);
+			&-close{
+				width: 100%;
+				margin-bottom: 74rpx;
+				@include u-flex(row, center, flex-end);
+				image {
+					width: 64rpx;
+					height: 64rpx;
+				}
+			}
+			&-bg {
+				width: 580rpx;
+				height: 620rpx;
+			}
+		}
+		.adbtn{
+			width: 412rpx;
+			height: 104rpx;
+			position: absolute;
+			bottom: 80rpx;
+			left: 50%;
+			transform: translate(-50%,0);
+		}
+		.pointer {
+			width: 180rpx;
+			height: 194rpx;
+			position: absolute;
+			bottom: -52rpx;
+			right: -42rpx;
+		}
+	}
+</style>

+ 70 - 0
components/es-nav-bg/es-nav-bg.vue

@@ -0,0 +1,70 @@
+<template>
+	<view>
+		<!-- <view class="bg-img" style="position: absolute;top:0;width: 100%;height: 600rpx;background-image: url(/static/image/home/home_top_bg.png)"></view> -->
+		<image src="/static/image/home/home_top_bg.png" style="width: 100%;position: absolute;top:0;left:0;z-index: 0;" mode="widthFix"></image>
+		<block v-if="title">
+			<view class="es-fix-top" :class="css">
+				<view class="" :style="top_color?('background:'+top_color):''" id="div-top">
+					<es-top></es-top>
+					<es-nav-title-base :title="title"></es-nav-title-base>
+				</view>
+			</view>
+			<es-top></es-top>
+			<view class="es-h-88"></view>
+		</block>
+		<block v-else>
+			<view class="es-fix-top" :class="css">
+				<view class="" :style="top_color?('background:'+top_color):''" id="div-top">
+					<es-top></es-top>
+					<slot></slot>
+				</view>
+			</view>
+		</block>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "es-nav-bg",
+		data() {
+			return {
+				top_color: 'rgba(0,0,0,0)',
+				h: 64,
+			};
+		},
+		props: [
+			'title', 'css'
+		],
+		created: function() {
+			if (!this.title) {
+				setTimeout(e => {
+					try {
+						uni.createSelectorQuery().select('#div-top').boundingClientRect(r2 => {
+							if (r2) {
+								this.h = r2.height;
+							}
+						}).exec();
+					} catch (e) {
+						//TODO handle the exception
+					}
+				}, 50)
+			} else {
+
+			}
+		},
+		methods: {
+			scrollBody: function(e) {
+				let top = e.scrollTop / this.h;
+				this.top_color = 'rgba(255,92,3, ' + top + ')';
+			}
+		}
+	}
+</script>
+
+<style>
+	.bg-img {
+		/* background-image: url(@/static/image/home/home_top_bg.png); */
+		background-size: 100% auto;
+		background-repeat: no-repeat;
+	}
+</style>

+ 61 - 0
components/es-nav-title-base/es-nav-title-base.vue

@@ -0,0 +1,61 @@
+<template>
+	<view>
+		<view class="es-h-88 es-pl-10 es es-ac es-bc-white">
+			<view class="es-w-100 es-h-88 es es-ac">
+				<view v-if="left!='none'" class="es-icon-ret-black" @tap="close"></view>
+			</view>
+			<view class="es-f1 es es-ac es-pc  view-title es-c-00 es-omit">{{title}}</view>
+			<view class="es-w-100 es-h-88 es x-c es-ae">
+				<view class="es-c-white es-fs-28 es-fw-500 " v-if="right!='none'" @tap="rightClick">{{right}}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name:"es-nav-title-base",
+		data() {
+			return {
+				
+			};
+		},
+		props:[
+			'title','left','right'
+		],
+		methods:{
+			close:function(){
+				uni.navigateBack({
+					animationType: 'pop-out',
+					animationDuration: 200
+				});
+			},
+			rightClick(){
+				
+			},
+		}
+	}
+</script>
+
+<style>
+.view-title{
+	font-weight:500;
+	font-family: PingFang SC;
+	color:#333;
+	font-weight: 500;
+	font-size: 34rpx;
+}
+.es-icon-ret-white1{
+	background-image: url("/static/images/course/ret-white.png");
+	width: 18rpx;
+	height: 31rpx;
+	background-size: 100% 100%;
+}
+
+.es-icon-ret-black{
+	background-image: url("/static/images/course/black_back.png");
+	width: 54rpx;
+	height: 54rpx;
+	background-size: 100% 100%;
+}
+</style>

+ 143 - 0
components/es-nav-title/es-nav-title.vue

@@ -0,0 +1,143 @@
+<template>
+	<view>
+		<block v-if="mode=='cover'">
+			<cover-view class="es-fix-top">
+				<cover-view class="top-img"></cover-view>
+			    <cover-view class="top-close flex x-ac" >
+					<cover-image @tap="close" class="es-w-18 es-h-31"  src="/static/images/other/ret-white.png" ></cover-image>
+					<cover-view @tap="close"  class="es-fw-500 es-c-white es-fs-30 ">返回</cover-view>
+				</cover-view>
+				<cover-view  class="es-h-88"></cover-view>
+				<es-top></es-top>
+			</cover-view>
+		</block>
+		<block v-else-if="mode=='fav'">
+			<cover-view class="es-fix-top">
+				<!-- <cover-image class="top-img" src="/static/image/home/home_top_bg.png"></cover-image> -->
+				<cover-view class="top-img"></cover-view>
+				<cover-view class="top-close flex x-ac" >
+					<cover-image @tap="close" class="es-w-18 es-h-31"  src="/static/images/other/ret-white.png" ></cover-image>
+					<cover-view @tap="close"  class="es-fw-500 es-c-white es-fs-30 ">返回</cover-view>
+				</cover-view>
+				<cover-view  class="es-h-88" ></cover-view>
+				<es-top></es-top>
+			</cover-view>
+		</block>
+		
+		<block v-else>
+			<view class="es-fix-top">
+				<cover-view class="top-img1" ></cover-view>
+				<es-top></es-top>
+				<es-nav-title-base :title="title" :left="left"></es-nav-title-base>
+			</view>
+		</block>
+		
+		<block v-if="bg!='none'">
+			<es-top></es-top>
+			<view class="es-h-88"></view>
+		</block>
+		
+
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "es-nav-title",
+		data() {
+			return {
+				top_color: 'rgba(0,0,0,0)',
+				h:44,
+			};
+		},
+		props: [
+			'title', 'bg', 'left', 'mode'
+		],
+		created: function() {
+
+		},
+		methods: {
+			close: function() {
+				const pages = getCurrentPages();
+				const currentPageIndex = pages.length - 1; // 当前页面的索引
+				const targetPageIndex = 1; // 假设要返回到首页(页面 A)
+				// 计算需要返回的层数
+				const delta = currentPageIndex - targetPageIndex;
+				console.log("qxj dalta:"+delta);
+				uni.navigateBack({
+					delta: delta,
+					animationType: 'pop-out',
+					animationDuration: 200
+				});
+			},
+			scrollBody:function(e){
+				let top = e.scrollTop / this.h;
+				this.top_color = 'rgba(255,92,3, ' + top + ')';
+			}
+		}
+	
+	
+	}
+</script>
+
+
+<style>
+	.es-fix-top {
+		font-weight: 620;
+		font-family: PingFang SC;
+		color: white;
+		
+		z-index: 1000;
+		position: fixed;
+		
+		/* background-size: 100% auto;
+		background-repeat: no-repeat; */
+	}
+	.es-h-88 {
+		height: 44px;
+	}
+
+	.top-img {
+		width: 100%;
+		height: 500rpx;
+		position: absolute;
+		background: #FF5C03;
+	}
+	
+	.top-img1 {
+	    width:100%;
+		height: var(--status-bar-height); 
+		position: absolute;
+		overflow: hidden;
+		background: #fff;
+	}
+
+	.top-close {
+		left: 30rpx;
+		position: absolute;
+		bottom: 0rpx;
+		width: 100rpx;
+		height: 80rpx;
+	}
+	
+	.title-box{
+		left: 0rpx;
+		position: absolute;
+		top: 0rpx;
+		right: 130rpx;
+		height: 80rpx;
+	}
+	
+	
+	.navTitle{
+		left: calc(50% - 80rpx);
+		top:10rpx;
+		position: absolute;
+		width: 80rpx;
+		height: 70rpx;
+		line-height: 70rpx;
+		color: #fff;
+		font-size: 30rpx;
+		font-weight: 500;
+	}
+</style>

+ 34 - 0
components/es-top/es-top.vue

@@ -0,0 +1,34 @@
+<template>
+	<view :style="'height:'+top+'px'" >
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		name:"es-top",
+		data() {
+			return {
+				top:0,
+			};
+		},
+		created:function(){
+			let data = getApp().globalData;
+			if(data.__czy_top)
+			{
+				this.top = data.__czy_top;
+			}else{
+				uni.getSystemInfo({
+					success: (res) => {
+						let top = res.safeArea.top;
+						data.__czy_top = this.top = top;
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 244 - 0
components/me-tabs/me-tabs.vue

@@ -0,0 +1,244 @@
+<!-- tab组件: <me-tabs v-model="tabIndex" :tabs="tabs" @change="tabChange"></me-tabs> -->
+<template>
+	<view class="me-tabs" :class="{'tabs-fixed': fixed}" :style="{height: tabHeightVal}">
+		<scroll-view v-if="tabs.length" :id="viewId" :scroll-left="scrollLeft" scroll-x scroll-with-animation :scroll-animation-duration="300">
+			<view class="tabs-item" :class="{'tabs-flex':!isScroll, 'tabs-scroll':isScroll}">
+				<!-- tab -->
+				<view class="tab-item"  v-for="(tab, i) in tabs"  :id="'tabitem'+i" :ref="'tabitem'+i" :class="{'active': value===i}" :style="{ height: tabHeightVal, 'line-height':tabHeightVal,'color':value===i?actColor:norColor }" :key="i" @click="tabClick(i)">
+					{{getTabName(tab)}}
+				</view>
+				
+				<!-- 下划线 -->
+				<view class="tabs-line" :style="{left:lineLeft}"></view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+
+<script>
+	export default {
+		props: {
+			tabs: {
+				type: Array,
+				default() {
+					return []
+				}
+			},
+			nameKey: {
+				type: String,
+				default: 'dictLabel'
+			},
+			value: {
+				type: [String, Number],
+				default: 0
+			},
+			fixed: Boolean,
+			tabWidth: Number,
+			height: {
+				type: Number,
+				default: 64
+			},
+			norColor: {
+				type: String,
+				default: '#333333'
+			},
+			actColor: {
+				type: String,
+				default: '#FF5C03'
+			},
+		},
+		data() {
+			return {
+				viewId: 'id_' + Math.random().toString(36).substr(2, 16),
+				scrollLeft: 0,
+				tabListSize: [],
+				lineLeft: '0px',
+				
+			}
+		},
+		computed: {
+			isScroll() {
+				return this.tabWidth && this.tabs.length;
+			},
+			tabHeightPx() {
+				return uni.upx2px(this.height);
+			},
+			tabHeightVal() {
+				return this.tabHeightPx + 'px';
+			},
+			tabWidthPx() {
+				return uni.upx2px(this.tabWidth);
+			},
+			tabWidthVal() {
+				return this.isScroll ? this.tabWidthPx + 'px' : '';
+			}
+		},
+		watch: {
+			tabs() {
+				this.warpWidth = null;
+				this.updateTabs();
+			},
+			value() {
+				console.log("qxj value changed");
+				this.updateTabs();
+			}
+		},
+		methods: {
+			getTabName(tab) {
+				return typeof tab === "object" ? tab[this.nameKey] : tab;
+			},
+			tabClick(i) {
+				if (this.value !== i) {
+					this.$emit("input", i);
+					this.$emit("change", i);
+				}
+			},
+			async updateTabs() {
+				await this.selectorQuery();
+				this.scrollCenter();
+				this.updateLineLeft();
+			},
+			async scrollCenter() {
+				if (!this.isScroll) return;
+				if (!this.warpWidth) {
+					let rect = await this.initWarpRect();
+					this.warpWidth = rect ? rect.width : uni.getSystemInfoSync().windowWidth;
+				}
+				let tabLeft = this.tabWidthPx * this.value + this.tabWidthPx / 2;
+				let diff = tabLeft - this.warpWidth / 2;
+				this.scrollLeft = diff;
+				// #ifdef MP-TOUTIAO
+				this.scrollTimer && clearTimeout(this.scrollTimer);
+				this.scrollTimer = setTimeout(() => {
+					this.scrollLeft = Math.ceil(diff);
+				}, 400);
+				// #endif
+			},
+			initWarpRect() {
+				return new Promise(resolve => {
+					setTimeout(() => {
+						let query = uni.createSelectorQuery();
+						// #ifndef MP-ALIPAY
+						query = query.in(this);
+						// #endif
+						query.select('#' + this.viewId).boundingClientRect(data => {
+							resolve(data);
+						}).exec();
+					}, 20);
+				});
+			},
+			selectorQuery() {
+				return new Promise(resolve => {
+					if (this.tabs.length === 0) {
+						resolve();
+						return;
+					}
+					uni.createSelectorQuery().in(this).select('.tabs-item').fields({
+						dataset: true,
+						size: true,
+					}, res => {
+						if (res) {
+							this.swiperWidth = res.width;
+						}
+					}).exec();
+					uni.createSelectorQuery().in(this).selectAll('.tab-item').boundingClientRect(rects => {
+						this.tabListSize = rects;
+						resolve();
+					}).exec();
+				});
+			},
+			updateLineLeft() {
+				
+				if (this.isScroll && this.tabListSize.length > 0) {
+					let currentSize = this.tabListSize[this.value];
+					let tabWid = currentSize.left + currentSize.width / 2.0;
+					this.lineLeft = tabWid + 'px';
+					console.log("qxj isScroll updateLineLeft value:"+this.lineLeft);
+				} else {
+					this.lineLeft = 100 / this.tabs.length * (this.value + 1) - 100 / (this.tabs.length * 2) + '%';
+					console.log("qxj  updateLineLeft value:"+this.lineLeft);
+				}
+			}
+		},
+		mounted() {
+			this.updateTabs();
+		}
+	}
+</script>
+
+
+
+
+<style lang="scss">
+	.me-tabs{
+		position: relative;
+		font-size: 28rpx;
+		background-color: #fff;
+		border-bottom: 0rpx solid #eee;
+		box-sizing: border-box;
+		overflow-y: hidden;
+		background-color: #fff;
+		&.tabs-fixed{
+			z-index: 990;
+			position: fixed;
+			top: var(--window-top);
+			left: 0;
+			width: 100%;
+		}
+		&.tabs-fixed1{
+			z-index: 990;
+			position: fixed;
+			top: 80;
+			left: 0;
+			width: 100%;
+		}
+	
+		.tabs-item{
+			position: relative;
+			white-space: nowrap;
+			padding-bottom: 30rpx; // 撑开高度,再配合me-tabs的overflow-y: hidden,以达到隐藏滚动条的目的
+			box-sizing: border-box;
+			.tab-item{
+				position: relative;
+				text-align: center;
+				box-sizing: border-box;
+				padding-left: 20rpx;
+				padding-right:20rpx;
+				color:#333;
+				font-size: 32rpx;
+				&.active{
+					font-weight: bold;
+					color: #FF5C03;
+				}
+			}
+		}
+		
+		// 平分的方式显示item
+		.tabs-flex{
+			display: flex;
+			.tab-item{
+				flex: 1;
+			}
+		}
+		// 居左显示item,支持水平滑动
+		.tabs-scroll{
+			.tab-item{
+				display: inline-block;
+			}
+		}
+		
+		// 选中tab的线
+		.tabs-line{
+			z-index: 1;
+			position: absolute;
+			bottom: 32rpx; // 至少与.tabs-item的padding-bottom一致,才能保证在底部边缘
+			width: 50rpx;
+			height: 6rpx;
+			transform: translateX(-50%);
+			border-radius: 4rpx;
+			transition: left .3s;
+			background: #FF5C03;
+		}
+	}
+</style>

+ 356 - 0
components/popupBottom/popupBottom.vue

@@ -0,0 +1,356 @@
+<template>
+	
+	<view :class="['popup',{'popup-show':show}]" @mousewheel.prevent.stop @touchmove.stop.prevent
+		:style="{'z-index':zindex}">
+		<view class="mask" :style="{'z-index':maskZindex,bottom:bottom+'rpx'}" v-show="show" @click.stop="onClose"
+			@touchmove.prevent.stop></view>
+		<view :class="['content',{show}]" @click.stop @touchmove.prevent.stop :style="{height:`${height}px`,maxHeight:show ? cotMaxHeight:0,'border-top-right-radius':cotRadius,
+			'border-top-left-radius':cotRadius,transition: `all ${animaTime}s ease-in`,bottom:bottom+'rpx','z-index':zindex}">
+			<view id="title-bar" class="title-bar" v-show="title">
+				<view class="title" :style="{fontWeight:fontweight}">{{title}}</view>
+				<view class="close-wrap" @click.stop="onClose">
+					<image class="close-icon" :src="closeIcon" mode="widthFix"></image>
+				</view>
+			</view>
+		
+		   <view class="scroll-wrap">
+		    	<scroll-view :class="{'scroll-view':isAnimaStart}" scroll-y="true" style="height:100%;"
+		    		@scrolltolower="onScrollToLower">
+		    		<view id="popup_content" class="popup_content" :style="{height:`${PopHeight}px`}">
+						
+		    			 <mescroll-item v-if="type==0" ref="mescrollItem" :videoId="cmdId"></mescroll-item>
+						 
+						 <course-comment-item v-if="type==1" ref="mescrollItem" :courseId="cmdId"></course-comment-item>
+						 
+		    		</view>
+		    	</scroll-view>
+		    </view>
+		
+		</view>
+	</view>
+	
+<!-- 	<view :style="{'z-index':zindex,height:`${PopHeight}px`}" style="position: absolute;left: 0;right: 0;bottom: 0;">
+        <mescroll-item ref="mescrollItem" :videoId="videoId"></mescroll-item>
+	</view> -->
+	
+</template>
+
+<script>
+	import iconClose from '@/static/images/close40.png'
+	import MescrollItem from "@/pages_course/video/comment.vue"
+	import CourseCommentItem from "@/pages_course/components/comment.vue"
+	// 第二步: 引入mescroll-comp.js
+	import MescrollCompMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-comp.js";
+	
+	export default {
+		mixins: [MescrollCompMixin],
+		components: {
+			MescrollItem,
+			CourseCommentItem
+		},
+		props: {
+			title: { //标题
+				type: String,
+				default: ''
+			},
+			fontweight: {
+				type: [String, Number],
+				default: 'normal'
+			},
+			visible: { //隐藏显示标识
+				type: Boolean,
+				default: false
+			},
+			maxHeight: { //内容区域最大高度
+				type: [String, Number],
+				default: '75%'
+			},
+			radius: { //顶部圆角
+				type: [String, Number],
+				default: '0'
+			},
+			animaTime: { //弹窗动画时间
+				type: Number,
+				default: 0.2
+			},
+			bottom: { //离底部距离
+				type: [String, Number],
+				default: 0
+			},
+			zindex: {
+				type: [String, Number],
+				default: 1000
+			},
+			maskZindex: {
+				type: [String, Number],
+				default: 999
+			},
+			always: { //是否每次打开都重新计算内容高度
+				type: Boolean,
+				default: false
+			},
+	
+			cmdId: { //
+				type: [String, Number],
+				default:0
+			},
+			smsNum: { //
+				type: [String, Number],
+				default:0
+			},
+			type: { //
+				type: [String, Number],
+				default:0
+			}
+
+		},
+		
+		data() {
+			return {
+				show: false,
+				height: 0,
+				PopHeight: 0,
+				cotMaxHeight: '',
+				isAnimaStart: false,
+				rpxRate: "",
+				cotRadius: 0,
+				closeIcon: iconClose
+			}
+		},
+		watch: {
+			visible(newval) {
+				this.isAnimaStart = true;
+				setTimeout(() => {
+					this.isAnimaStart = false;
+				}, this.animaTime * 1000);
+				if (newval && this.height === 0) {
+					if (this.PopHeight === 0 || this.always) {
+						this.setContViewHeight();
+					} else {
+						this.height = this.PopHeight
+					}
+					// #ifdef H5 
+					//this.setBodyOverFlow('hidden') //阻止滚动穿透
+					//#endif
+					this.$emit('open')
+
+				} else {
+					this.height = 0;
+					// #ifdef H5 
+					this.setBodyOverFlow('visible')
+					//#endif
+				}
+
+				this.show = newval
+				if(newval){
+					this.$refs.mescrollItem.showBotBar(this.smsNum);
+				}
+				
+
+			},
+			maxHeight: {
+				handler(newval) {
+					this.cotMaxHeight = this.unitCheck(newval);
+
+				},
+				immediate: true
+			},
+			radius: {
+				handler(newval) {
+					this.cotRadius = this.unitCheck(newval);
+
+				},
+				immediate: true
+			}
+		},
+		created() {
+			this.rpxRate = this.getRpxRate()
+		},
+		mounted() {
+			// this.$nextTick(() => {
+			// 	// #ifdef H5
+			// 	this.preventTouch(document.querySelector(
+			// 		'.scroll-wrap .uni-scroll-view .uni-scroll-view')); //防止浏览器报错
+			// 	//#endif
+			// })
+			
+		},
+		methods: {
+			onClose() {
+				this.$emit("update:visible", false);
+				this.$emit('close');
+				this.$refs.mescrollItem.hideBotBar();
+			},
+			// //触底
+			onScrollToLower(e) {
+				console.log("qxj onScrollToLower");
+				// this.$emit("reachBottom");
+				uni.$emit('reachBottom');
+			},
+			getRpxRate() {
+				let res = uni.getSystemInfoSync();
+				let width = res.windowWidth;
+				let rate = 750.00 / width;
+				return rate
+			},
+			unitCheck(value) {
+				const val = String(value);
+				if (!val.includes('px') && !val.includes('%')) {
+					return `${val}rpx`;
+				}
+				return val;
+			},
+			preventTouch(el) {
+				el.addEventListener('touchmove', function(e) {
+					e.stopPropagation();
+				},{
+					passive: false
+				});
+			},
+			setBodyOverFlow(val) {
+				document.body.style.overflow = val
+			},
+			//设置内容区域高度
+			async setContViewHeight() {
+				
+				const systemInfo = uni.getSystemInfoSync();
+				let viewHeight=systemInfo.screenHeight;
+				
+				this.height =viewHeight*0.7;
+				console.log("qxj viewHeight:"+this.height);
+				
+				this.PopHeight = this.height;
+				
+				
+			},
+			//计算内容区域高度
+			computeHeight() {
+				return new Promise(resolve => {
+					this.$nextTick(() => {
+						const query = uni.createSelectorQuery().in(this);
+						query.select('#popup_content').boundingClientRect(data => {
+							resolve(data)
+						}).exec();
+					})
+				})
+			}
+
+		}
+
+
+	}
+</script>
+
+<style lang="scss" scoped>
+	.popup {
+
+		&.popup-show {
+			position: fixed;
+			top: 0;
+			right: 0;
+			left: 0;
+			bottom: 0;
+			overflow: hidden;
+			z-index: 999;
+		}
+
+		.mask {
+			position: fixed;
+			top: 0;
+			right: 0;
+			bottom: 0;
+			left: 0;
+			background-color: rgba($color: #000000, $alpha: 0.5);
+			z-index: 999;
+		}
+
+		.content {
+			position: fixed;
+			bottom: 0;
+			left: 0;
+			right: 0;
+			height: 0;
+			height: auto;
+			background-color: white;
+			transition: all 0.2s ease-in;
+			z-index: 1000;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			overflow: hidden;
+
+			.title-bar {
+				width: 100%;
+				flex-shrink: 0;
+				text-align: center;
+				position: relative;
+				padding: 15rpx 70rpx 0;
+				padding-top: 30rpx;
+				box-sizing: border-box;
+				height: 80rpx;
+				.title {
+					font-size: 26rpx;
+					font-family: PingFang SC;
+					font-weight: normal !important;
+					color: #111111;
+					width: 100%;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					white-space: nowrap;
+				}
+
+				.close-wrap {
+					position: absolute;
+					top: 20rpx;
+					right: 10rpx;
+					padding: 10rpx 20rpx;
+					box-sizing: border-box;
+				}
+
+				.close-icon {
+					width: 40rpx;
+					height: 40rpx;
+				}
+			}
+
+			.scroll-wrap {
+				flex: 1;
+				height: 0;
+				width: 100%;
+			}
+
+			&.visible {
+				max-height: 75%;
+				overflow-y: hidden;
+				height: auto;
+
+			}
+		}
+	}
+
+	.scroll-view ::-webkit-scrollbar {
+		display: none !important;
+		width: 0 !important;
+		height: 0 !important;
+		-webkit-appearance: none;
+		background: transparent;
+
+	}
+
+	.popup_content {
+		width: 100%;
+		padding: 30rpx;
+		padding-top: 0;
+		box-sizing: border-box;
+
+		&::after {
+			display: block;
+			width: 100%;
+			content: "\00A0";
+			overflow: hidden;
+			opacity: 0;
+			height: 1rpx;
+		}
+
+	}
+</style>

+ 233 - 0
components/share-box/share-box.vue

@@ -0,0 +1,233 @@
+<template>
+	<view class="share-content">
+		<view class="share-inner">
+			<view class="share-item" @click="wxShare(0)">
+				<image src="/static/images/icon_wx.png" mode=""></image>
+				<text class="text">微信</text>
+			</view>
+			<view class="share-item" @click="wxShare(1)">
+				<image src="/static/images/icon_pyq.png" mode=""></image>
+				<text class="text">朋友圈</text>
+			</view>
+
+			<!-- 	   <view class="share-item">
+						<image src="/static/images/icon_xcxhb.png" mode=""></image>
+						<text class="text">小程序海报</text>
+					</view>
+					<view class="share-item">
+						<image src="/static/images/icon_xccard.png" mode=""></image>
+						<text class="text">小程序卡片</text>
+					</view>
+					<view class="share-item">
+						<image src="/static/images/icon_code.png" mode=""></image>
+						<text class="text">二维码</text>
+					</view> -->
+
+			<view class="share-item" @click="copyUrl()">
+				<image src="/static/images/icon_copy_link.png" mode=""></image>
+				<text class="text">复制链接</text>
+			</view>
+
+		</view>
+		<view class="cancel-btn" @click="closeShare">取消</view>
+	</view>
+
+</template>
+
+<script>
+	import { shareCourse } from '@/api/course'
+	import { shareVideo } from '@/api/shortvideo'
+	export default {
+		name: "share-box",
+		props: {
+			shareItem: {
+				type: Object,
+				default: function() {
+					return {
+						imageUrl: "",
+						title: "",
+						url: "",
+						summary: url,
+						courseId: 0,
+						videoId: 0,
+						isMini: false
+					}; // type 0:课程 1视频
+				}
+			},
+		},
+		data() {
+			return {
+
+			};
+		},
+		methods: {
+			wxShare(type) {
+				if (this.$isEmpty(this.shareItem.title)) {
+					uni.showToast({
+						title: "数据未加载",
+						icon: "none",
+						position: 'top',
+						duration: 2000
+					})
+					return;
+				}
+				// #ifdef APP-PLUS
+				if (!plus.runtime.isAgreePrivacy()) {
+					uni.showToast({
+						title: "请同意隐私政策",
+						icon: "none",
+						position: 'top',
+						duration: 2000
+					})
+					return;
+				}
+				// #endif
+				let that = this;
+				let sceneStr = type == 0 ? "WXSceneSession" : "WXSceneTimeline";
+				// 仅支持分享微信小程序到微信聊天界面,想进入朋友圈需改为分享图片方式,在图片中包含小程序码
+				if (sceneStr == 'WXSceneTimeline' || !this.shareItem.isMini) {
+					uni.share({
+						provider: "weixin",
+						scene: sceneStr,
+						type: 0,
+						imageUrl: this.shareItem.imageUrl, //分享封面图片
+						title: this.shareItem.title, // 分享标题
+						href: this.shareItem.url, //跳转链接
+						summary: this.shareItem.summary, // 分享内容文字
+						success: function(res) {
+							that.doShare();
+							uni.showToast({
+								title: "分享成功",
+								icon: 'none'
+							});
+						},
+						fail: function(err) {
+							// 此处是调起微信分享失败的回调
+						},
+						complete: (e) => {
+							console.log("WXSceneTimeline", e)
+						}
+					});
+				} else {
+
+					uni.share({
+						provider: "weixin",
+						scene: sceneStr,
+						type: 5,
+						imageUrl: this.shareItem.imageUrl, //分享封面图片
+						title: this.shareItem.title, // 分享标题
+						//summary: this.shareItem.summary,    // 分享内容文字
+						miniProgram: {
+							id: "gh_7a6a32e5ef61",
+							path: this.shareItem.path,
+							type: 0, //0-正式版; 1-测试版; 2-体验版。 默认值为0。
+							webUrl: "http://uniapp.dcloud.io"
+						},
+						success: function(res) {
+							that.doShare();
+							uni.showToast({
+								title: "分享成功",
+								icon: 'none'
+							});
+						},
+						fail: function(err) {
+							// 此处是调起微信分享失败的回调
+						},
+						complete: (e) => {
+							console.log("WXSceneSession", e)
+						}
+					});
+				}
+			},
+			doShare() {
+				if (!this.shareItem.isMini) {
+					if (this.shareItem.courseId > 0) {
+						this.shareCourse();
+					}else if(this.shareItem.videoId > 0) {
+						this.shareVideo();
+					}
+				}
+			},
+			shareCourse() {
+				shareCourse(this.shareItem.courseId).then(res => {
+
+					},
+					rej => {}
+				);
+			},
+			shareVideo() {
+				shareVideo({videoId:this.shareItem.videoId})
+			},
+			copyUrl() {
+				uni.setClipboardData({
+					data: this.shareItem.url,
+					success: () => {
+						uni.showToast({
+							title: '复制成功',
+							icon: 'none'
+						});
+					},
+					fail: () => {
+						uni.showToast({
+							title: '复制失败',
+							icon: 'none'
+						});
+					}
+				});
+			},
+
+			closeShare() {
+				return this.$emit('closeShare');
+			}
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.share-content {
+		background-color: #FFF;
+		border-radius: 40upx 40upx 0px 0px;
+
+		.share-inner {
+			padding: 70upx 0 0 0;
+			display: flex;
+			flex-wrap: wrap;
+
+			.share-item {
+				width: 25%;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: center;
+				margin-bottom: 66upx;
+
+				image {
+					width: 80upx;
+					height: 80upx;
+					margin-bottom: 20upx;
+				}
+
+				.text {
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					line-height: 1;
+				}
+			}
+		}
+
+		.cancel-btn {
+			height: 96upx;
+			line-height: 96upx;
+			text-align: center;
+			font-size: 32upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #111111;
+			border-top: 2upx solid #E8E8E8;
+			background-color: #FFF;
+		}
+	}
+</style>

+ 245 - 0
components/share-box/share-boxN.vue

@@ -0,0 +1,245 @@
+<template>
+	<view class="share-content" :style="{'width':viewWidth+'px'}">
+
+		<view class="share-inner" style="width: 100%;">
+			<view class="share-item" :style="{'width':viewWidth/4.0+'px'}" @click="wxShare(0)">
+				<image class="image" src="/static/images/icon_wx.png" mode=""></image>
+				<text class="text">微信</text>
+			</view>
+			<view class="share-item" :style="{'width':viewWidth/4.0+'px'}" @click="wxShare(1)">
+				<image class="image" src="/static/images/icon_pyq.png" mode=""></image>
+				<text class="text">朋友圈</text>
+			</view>
+			<view class="share-item" :style="{'width':viewWidth/4.0+'px'}" @click="copyUrl()" v-if="operate.indexOf('copyUrl') > -1">
+				<image class="image" src="/static/images/icon_copy_link.png" mode=""></image>
+				<text class="text">复制链接</text>
+			</view>
+		</view>
+		<text class="cancel-btn" @click="closeShare">取消</text>
+	</view>
+
+</template>
+
+<script>
+	import {shareCourse} from '@/api/course'
+	import { shareVideo } from '@/api/shortvideo'
+	export default {
+		name: "share-box",
+		props: {
+			shareItem: {
+				type: Object,
+				default: function() {
+					return {
+						imageUrl: "",
+						title: "",
+						url: "",
+						summary: url,
+						courseId: 0,
+						videoId: 0,
+						isMini: false,
+					}; // type 0:课程 1视频
+				}
+			},
+			operate: {
+				type: Array,
+				default: ['WXSceneSession','WXSceneTimeline','copyUrl']
+			}
+		},
+		data() {
+			return {
+				viewWidth: 0,
+			};
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			this.viewWidth = systemInfo.screenWidth;
+		},
+		methods: {
+			wxShare(type) {
+				if (this.isEmpty(this.shareItem.title)) {
+					uni.showToast({
+						title: "数据未加载",
+						icon: "none",
+						position: 'top',
+						duration: 2000
+					})
+					return;
+				}
+				// #ifdef APP-PLUS
+				if (!plus.runtime.isAgreePrivacy()) {
+					uni.showToast({
+						title: "请同意隐私政策",
+						icon: "none",
+						position: 'top',
+						duration: 2000
+					})
+					return;
+				}
+				// #endif
+				let that = this;
+				let sceneStr = type == 0 ? "WXSceneSession" : "WXSceneTimeline";
+				// 仅支持分享微信小程序到微信聊天界面,想进入朋友圈需改为分享图片方式,在图片中包含小程序码
+				if (sceneStr == 'WXSceneTimeline' || !this.shareItem.isMini) {
+					uni.share({
+						provider: "weixin",
+						scene: sceneStr,
+						type: 0,
+						imageUrl: this.shareItem.imageUrl, //分享封面图片
+						title: this.shareItem.title, // 分享标题
+						href: this.shareItem.url, //跳转链接
+						summary: this.shareItem.summary, // 分享内容文字
+						success: function(res) {
+							that.doShare();
+							uni.showToast({
+								title: "分享成功",
+								icon: 'none'
+							});
+						},
+						fail: function(err) {
+							// 此处是调起微信分享失败的回调
+						},
+						complete: (e) => {
+							console.log("WXSceneTimeline", e)
+						}
+					});
+				} else {
+
+					uni.share({
+						provider: "weixin",
+						scene: sceneStr,
+						type: 5,
+						imageUrl: this.shareItem.imageUrl, //分享封面图片
+						title: this.shareItem.title, // 分享标题
+						//summary: this.shareItem.summary,    // 分享内容文字
+						miniProgram: {
+							id: "gh_7a6a32e5ef61",
+							path: this.shareItem.path,
+							type: 0, //0-正式版; 1-测试版; 2-体验版。 默认值为0。
+							webUrl: "http://uniapp.dcloud.io"
+						},
+						success: function(res) {
+							that.doShare();
+							uni.showToast({
+								title: "分享成功",
+								icon: 'none'
+							});
+						},
+						fail: function(err) {
+							// 此处是调起微信分享失败的回调
+						},
+						complete: (e) => {
+							console.log("WXSceneSession", e)
+						}
+					});
+				}
+			},
+			doShare() {
+				if (!this.shareItem.isMini) {
+					if (this.shareItem.courseId > 0) {
+						this.shareCourse();
+					}else if(this.shareItem.videoId > 0) {
+						this.shareVideo();
+					}
+				}
+			},
+			isEmpty(obj) {
+				if (typeof obj == "undefined" || obj == null || obj == "") {
+					return true;
+				} else {
+					return false;
+				}
+			},
+			shareCourse() {
+				shareCourse(this.shareItem.courseId).then(res => {
+			
+					},
+					rej => {}
+				);
+			},
+			shareVideo() {
+				shareVideo({videoId:this.shareItem.videoId})
+			},
+			copyUrl() {
+				uni.setClipboardData({
+					data: this.shareItem.url,
+					success: () => {
+						uni.showToast({
+							title: '复制成功',
+							icon: 'none'
+						});
+					},
+					fail: () => {
+						uni.showToast({
+							title: '复制失败',
+							icon: 'none'
+						});
+					}
+				});
+			},
+			closeShare() {
+				return this.$emit('closeShare');
+			},
+			showToast(title) {
+				uni.showToast({
+					icon: 'none',
+					title: title,
+					duration: 3000
+				});
+			}
+
+		}
+	}
+</script>
+
+<style scoped>
+	.share-content {
+		border-radius: 40upx 40upx 0px 0px;
+		width: 100%;
+		height: 250rpx;
+		/* background-color:blue; */
+	}
+
+	.share-inner {
+		padding: 0 0 0 0;
+		width: 100%;
+		flex: 1;
+		height: 160rpx;
+		flex-direction: row;
+		flex-wrap: wrap;
+	}
+
+	.share-item {
+		width: 25%;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		height: 160rpx;
+		/* background-color:red; */
+	}
+
+	.share-item .image {
+		width: 80rpx;
+		height: 80rpx;
+		margin-top: 40rpx;
+	}
+
+	.text {
+		font-size: 28rpx;
+		font-weight: 500;
+		color: #111111;
+		height: 60rpx;
+		margin-top: 20rpx;
+	}
+
+	.cancel-btn {
+		height: 70upx;
+		line-height: 80upx;
+		text-align: center;
+		font-size: 32upx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #111111;
+		border-top: 2upx solid #E8E8E8;
+		background-color: #FFF;
+	}
+</style>

+ 517 - 0
pages/course/components/doctorHall.vue

@@ -0,0 +1,517 @@
+<template>
+	<view class="content">
+		
+		<!-- 搜索 -->
+		<!-- <view class="search-box">
+			<uni-search-bar class="search" radius="34" placeholder="请输入关键字搜索" clearButton="auto" cancelButton="none"
+				@confirm="search">
+				<template v-slot:searchIcon>
+					<image src="@/static/images/course/search_gray_icon.png" mode="aspectFill"></image>
+				</template>
+			</uni-search-bar>
+			<view class="msg" @click="goToMsg()">
+				<image :class="isNew ? 'badge':''" src="@/static/images/course/new_hall_icon.png" mode="aspectFill"></image>
+			</view>
+		</view> -->
+		
+		<!-- banner -->
+		<swiper class="swiper" style="height: 390rpx;" circular :indicator-dots="indicatorDots" :autoplay="autoplay"
+			:interval="interval" :duration="duration">
+			<swiper-item  v-for="(url,index) in advImgs" :key="index"  class="swiper-item" @click="handleAdvClick(index)">
+				<image style="width: 100%;height: 100%;" :src="url" mode="aspectFill"></image>
+			</swiper-item>
+		</swiper>
+		
+		<!-- 名医讲堂 -->
+		<view id="guide3">
+			 <view class="box-nav">
+					 <view class="title">名医讲堂</view>
+					 <view class="box-nav-right" @click="navTo('/pages_course/famousHall?type=0')">
+						<text>更多讲堂</text>
+						<image class="right-arrow" src="@/static/images/course/my_right_arrow.png" mode="aspectFill"></image>
+					</view>
+			</view>
+			
+			<scroll-view scroll-x="true" class="cate-scroll" :scroll-into-view="scrollViewId" scroll-with-animation="true"
+				overflow-anchor="none">
+				<view :id="'scrollView' + index" class="cate-scroll-item" v-for="(item, index) in mtabs"
+					:key="index" @click="tabChange(index)" :class="tabIndex == index ? 'cate-scroll-item-active' : ''">
+					{{ item.dictLabel }}
+				</view>
+			</scroll-view>
+		</view>
+	
+		<swiper :style="{'height': swHeight+'px'}" @transition="onTransition" @animationfinish="animationfinish" circular :autoplay="swiperAutoplay" interval="5000" duration="1000" :current="tabIndex"  @change="swiperChange" v-if="mtabs.length>0">
+		   <swiper-item v-for="(tab,i) in mtabs" :key="i">	  
+		       <view id="swiper-content" class="hall-box">
+		            <hallItem class="gapitem guide3item"  v-for="(item, index) in dataList[i] " :key="index" :item="item"  @click.native="navTo('/pages_course/info?courseId='+item.courseId)"  />
+			   </view>
+		   </swiper-item>
+		</swiper>
+		
+		<!-- 热门推荐 -->
+		<view class="box-nav">
+			<view class="title">热门推荐</view>
+			<view class="box-nav-right"  @click="navTo('/pages_course/famousHall?type=1')">
+				<text>更多讲堂</text>
+				<image class="right-arrow" src="@/static/images/course/my_right_arrow.png" mode="aspectFill" :lazy-load="true"></image>
+			</view>
+		</view>
+	
+		<view class="hothall" v-for="(item, index) in recommendList" :key="index"  @click="navTo('/pages_course/info?courseId='+item.courseId)">
+			<image class="video-img" :src="item.imgUrl"></image>
+			<view class="hothall-infobox">
+				<view class="hothall-info">
+					<image :src="item.secondImg" mode="aspectFit"></image>
+					<view>
+						<view class="hothall-title">{{item.courseName}}</view>
+						<view class="hothall-desc">{{item.description}}
+						</view>
+					</view>
+					<view v-if="item.isIntegral!=1" class="vip">VIP</view>
+				</view>
+				<view class="tagbox">
+					<block v-if="item.tags!=null">
+						<view class="tag" v-for="(item, index) in item.tags.split(',')" :key="index" >{{item}}</view>
+					</block>
+				</view>
+			</view>
+		</view>
+	
+	</view>
+</template>
+
+<script>
+	import hallItem from "./hallItem.vue";
+	import {getAdvList} from '@/api/adv.js'
+	import { getDictByKey } from '@/api/common'
+	import { getCourseCate,getCourseList } from '@/api/course'
+	export default {
+		components: {
+			hallItem
+		},
+		props: ['swiperAutoplay'],
+		data() {
+			return {
+				keyword: "",
+				isNew: false,
+				background: ['color1', 'color2', 'color3'],
+				indicatorDots: true,
+				autoplay: true,
+				interval: 3000,
+				duration: 1000,
+				cateId:0,
+				scrollViewId:'scrollView0',
+				tabIndex: 0,
+				advImgs:[],
+				advs:[],
+				mtabs:[],
+				dataList:[],
+				swHeight: 400,
+				recommendList:[],
+				isBest:false,
+				famousItemHei:0,
+			}
+		},
+		mounted() {
+			this.famousItemHei=uni.upx2px(192);
+			this.getAdvList();
+			this.getCourseCate();
+			this.getRecommendList();
+		},
+		methods: {
+			getAdvList() {
+				//联网加载数据
+				var that = this;
+				var data = { advType:12,status:1}
+				getAdvList(data).then(res => {
+					if(res.code==200){
+						that.advImgs=[];
+						that.advs=[];
+						res.data.forEach(function(element) {
+							if(element.imageUrl!=null&&element.imageUrl!=""){
+								that.advs.push(element);
+								that.advImgs.push(element.imageUrl);
+							}
+						});
+						
+					}else{
+						uni.showToast({icon:'none',title: "请求失败"});
+					}
+				});
+			},
+			getCourseCate:function(){
+				let that=this;
+				getCourseCate().then(res => {
+						if(res.code==200){
+							this.mtabs=res.data;  
+							let findIdx=this.mtabs.findIndex(item=>item.dictLabel=='精选');
+							if(findIdx==-1){
+								let dictItem={"dictValue":0,"dictLabel": "精选"};
+								this.mtabs.unshift(dictItem);
+							}
+							this.isBest=true;
+							if(this.mtabs.length>0){
+								this.mtabs = this.mtabs.splice(0,4)
+								 this.cateId=this.mtabs[0].dictValue;
+								 for (let i = 0; i < this.mtabs.length; i++) {
+									 if(i<=4){
+										 this.tabChange(i); 
+									 }
+								 }
+								 this.tabChange(0);
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			getFamousCourseList:function(index){
+				let that=this;
+				let params={};
+				if(this.isBest){
+					params={"isBest":1};
+				}else{
+					params={"cateId":this.cateId};
+				}
+				if(this.dataList.hasOwnProperty(index+"")){
+					 this.updateSwiperHeight(index);
+				     return;
+				}
+				getCourseList(params,1,4).then(res => {
+						if(res.code==200){
+							this.dataList[index+""]=res.data.list;  
+							this.$emit("loadFamousCourse",0);
+						    //this.$nextTick(() => {
+						         this.updateSwiperHeight(index);
+						    //}); 
+						}
+					},
+					rej => {}
+				);
+			},
+			getRecommendList(){
+				let that=this;
+				const params={"isTui":1};
+				getCourseList(params,1,10).then(res => {
+						if(res.code==200){
+							this.recommendList=res.data.list;  
+						}
+					},
+					rej => {}
+				);
+			},
+			search() {},
+			// 修改当前页
+			tabChange(index){
+				//if(this.tabIndex === index) return;
+				this.tabIndex = index;
+				this.scrollViewId = 'scrollView'+index;
+				const item=this.mtabs[index];
+				if(item){
+					if(item.dictLabel=='精选'){
+						this.isBest=true;
+					}else{
+						this.isBest=false;
+					}
+					this.cateId=item.dictValue;
+					this.getFamousCourseList(index);
+				}
+			},
+			// SWIPER划动
+			swiperChange(e){
+				// this.tabIndex = e.detail.current;
+				// this.scrollViewId = 'scrollView'+this.tabIndex;
+				this.tabChange(e.detail.current);
+			},
+			
+			onTransition(){
+				//console.log("qxj onTransition");
+			},
+			animationfinish(){
+				//console.log("qxj animationfinish");
+				// this.updateSwiperHeight();
+			},
+			onSwiperResize() {
+				 //console.log("qxj onSwiperResize");
+			 },
+			updateSwiperHeight() {
+				 let dataArr=this.dataList[this.tabIndex.toString()];
+				 if(dataArr==undefined ||  dataArr.length==0){
+					 this.swHeight=150;
+				 }else{
+					 uni.createSelectorQuery().in(this).select('#swiper-content').boundingClientRect(rect => {
+						  //console.log("qxj swHeight:"+this.swHeight);
+						  if(rect!=null){
+							  this.swHeight = rect.height+20;
+						  }
+						  if(this.swHeight<=100){
+							     //所以(total + pagesize -1) / pagesize就得到总页数
+							     // console.log("qxj famousItemHei:"+this.famousItemHei);
+							     this.swHeight=(dataArr.length+1)/2*this.famousItemHei;
+							     return;
+						  }
+						
+					 }).exec();
+				 }
+			 },
+			handleAdvClick(index){
+				var ad=this.advs[index];
+				if(ad.showType==1){
+					uni.setStorageSync('url',ad.appAdvUrl);
+					uni.navigateTo({
+						url:"h5"
+					})
+				}
+				else if(ad.showType==3){
+					 uni.setStorageSync('content',ad.content);
+					 uni.navigateTo({
+					 	url:"content"
+					 })
+				}
+				else{
+					uni.navigateTo({
+						url:ad.appAdvUrl
+					})
+				}
+			},
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				})
+			},
+			goToMsg(){
+				  // 切换到视图1 tab
+				  uni.switchTab({
+					  url: '/pages/TUIKit/TUIPages/TUIConversation/index' 
+				  });
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+
+	.content {
+		padding: 0 24rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 24rpx;
+		color: #999999;
+	}
+
+	.title {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 32rpx;
+		color: #222222;
+		line-height: 44rpx;
+	}
+
+	.search-box {
+		@include u-flex(row, center, space-between);
+		padding-bottom: 22rpx;
+	}
+
+	.search {
+		padding: 0;
+		flex: 1;
+		image {
+			width: 24rpx;
+			height: 24rpx;
+			padding-left: 16rpx;
+		}
+	}
+
+	.msg {
+		image {
+			width: 48rpx;
+			height: 48rpx;
+			margin-left: 26rpx;
+			margin-right: 4rpx;
+			position: relative;
+		}
+
+		.badge::after {
+			content: "";
+			width: 16rpx;
+			height: 16rpx;
+			background: #018C39;
+			border-radius: 50%;
+			position: absolute;
+			right: 0;
+			top: 0;
+		}
+	}
+
+	.swiper {
+		width: 694rpx;
+		height: 390rpx;
+		margin: 0 auto 16rpx auto;
+		background: #fff;
+		border-radius: 20rpx;
+		overflow: hidden;
+		.swiper-item {
+			width: 694rpx;
+			height: 390rpx;
+		}
+	}
+
+	::v-deep {
+		.uni-swiper-dot {
+			width: 10rpx;
+			height: 10rpx;
+			background: rgba(255, 255, 255, 0.5);
+		}
+		.uni-swiper-dot-active {
+			width: 24rpx;
+			height: 10rpx;
+			background-color: #FFFFFF;
+			border-radius: 5rpx 5rpx 5rpx 5rpx;
+		}
+	}
+	
+	.cate-scroll{
+		width: 100%;
+		min-height: 64rpx;
+		white-space: nowrap;
+		margin-bottom: 24rpx;
+		&-item{
+			display: inline-block;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #222222;
+			padding: 0 43rpx;
+			line-height: 64rpx;
+			margin-right: 20rpx;
+			border-radius: 32rpx;
+			background: #fff;
+			&-active{
+				font-weight: 600;
+				font-size: 28rpx;
+				color: #018C39;
+			}
+		}
+	}
+	.box-nav {
+		width: 100%;
+		padding: 16rpx 0;
+		box-sizing: border-box;
+		display: flex;
+		justify-content: space-between;
+		&-right {
+			@include u-flex(row, center, flex-start);
+		}
+		.right-arrow {
+			height: 48rpx;
+			width: 48rpx;
+		}
+	}
+
+	.hall-box {
+		@include u-flex(row, center, flex-start);
+		flex-wrap: wrap;
+		margin: 0 -18rpx -18rpx 0;
+		.gapitem {
+			margin: 0 18rpx 18rpx 0;
+		}
+	}
+	
+
+	.hothall {
+		width: 702rpx;
+		margin-bottom: 20rpx;
+		background: #FFFFFF;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		overflow: hidden;
+        position: relative;	
+		.video-img {
+			width: 702rpx;
+			height: 400rpx;
+			background: rgba(0, 0, 0, 0.15);
+			border-radius: 16rpx 16rpx 0rpx 0rpx;
+		}
+		.vip{
+			  position: absolute;
+			  min-width: 54rpx;
+			  min-height: 20rpx;
+			  line-height: 20rpx;
+			  background: linear-gradient(94deg, #FFE9D0 0%, #E9BD97 100%);
+			  border-radius: 16rpx 0 16rpx 0;
+			  top:0;
+			  left: 0;
+			  color:#333;
+			  font-size:18rpx ;
+			  text-align: center;
+			  font-weight: 500;
+			  font-style: italic;		  
+		}				  	
+
+		&-infobox {
+			padding: 24rpx;
+
+			image {
+				width: 88rpx;
+				height: 128rpx;
+				background: #ECECEC;
+				border-radius: 8rpx 8rpx 8rpx 8rpx;
+				border: 2rpx solid #ECECEC;
+				flex-shrink: 0;
+				margin-right: 28rpx;
+			}
+		}
+
+		&-info {
+			@include u-flex(row, center, flex-start);
+		}
+
+		&-title {
+			font-weight: 500;
+			font-size: 28rpx;
+			color: #222222;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+		}
+
+		&-desc {
+			font-weight: 400;
+			font-size: 24rpx;
+			color: #757575;
+			line-height: 28rpx;
+			margin-top: 10rpx;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			display: -webkit-box;
+			-webkit-line-clamp: 2;
+			-webkit-box-orient: vertical;
+		}
+
+		.tagbox {
+			@include u-flex(row, center, flex-start);
+			flex-wrap: wrap;
+			margin: 0 -12rpx -12rpx 0;
+		}
+
+		.tag {
+			min-height: 40rpx;
+			margin: 16rpx 12rpx 12rpx 0;
+			background: #FEFAF3;
+			border-radius: 20rpx 20rpx 20rpx 20rpx;
+			border: 1rpx solid #FBEDD1;
+			padding: 0 16rpx;
+			font-weight: 400;
+			font-size: 22rpx;
+			color: #A97125;
+			line-height: 40rpx;
+		}
+	}
+	
+
+</style>

+ 181 - 0
pages/course/components/hallItem.vue

@@ -0,0 +1,181 @@
+<template>
+	<view class="hall-box-item">
+		<view class="video-imgbox">
+			<image class="video-img" :src="item.imgUrl" mode="scaleToFill" :lazy-load="true"></image>
+			<image class="video-img-icon" src="@/static/images/course/video_icon.png" mode="aspectFill"></image>  
+		</view>
+		
+		<view class="hall-box-info">
+			<view class="hall-box-name">{{item.courseName}}</view>
+			<view class="hall-box-desc">{{item.description}}</view>
+			<view class="hall-box-footer">
+				<view class="hall-box-footerl footer-flex">
+					<image class="hall-box-img" :src="item.avatar"></image>
+					<text>{{item.talentName}}</text>
+				</view>
+				<view class="hall-box-footerr footer-flex">
+					<image class="hall-box-img" src="@/static/images/course/zan_icon.png"></image>
+					<text>{{ formatNum(item.likes)  }}</text>
+				</view>
+			</view>
+		</view>
+	    <view v-if="item.isIntegral!=1" class="vip">VIP</view>
+	
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "hallItem",
+		props: {
+			item: {
+				type: Object,
+				default() {
+					return { imgUrl:"",isIntegral:-1 };
+				}
+			}
+		},
+		data() {
+			return {
+
+			};
+		},
+		methods: {
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				})
+			},
+			formatNum(num){
+				if(num>10000){
+					return (num/10000.0).toFixed(1)+'Íò';
+				}
+				return num;
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.vip{ 
+		  position: absolute;
+		  width: 54rpx;
+		  height: 20rpx;
+		  line-height: 20rpx;
+		  background: linear-gradient(94deg, #FFE9D0 0%, #E9BD97 100%);
+		  border-radius: 16rpx 0 16rpx 0;
+		  top: 0;
+		  left: 0;
+		  color:#333;
+		  font-size:18rpx ;
+		  text-align: center;
+		  font-weight: 500;
+		  font-style: italic;		  
+	}
+	.hall-box {
+		@include u-flex(row, center, flex-start);
+		flex-wrap: wrap;
+		&-item {
+			width: 342rpx;
+			background: #FFFFFF;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			overflow: hidden;
+            position: relative;
+			.video-imgbox {
+				width: 342rpx;
+				height: 191rpx;
+				background: #ECECEC;
+				border-radius: 16rpx 16rpx 0rpx 0rpx;
+				position: relative;
+				overflow: hidden;
+			}
+			.video-img-icon {
+				width: 48rpx;
+				height: 48rpx;
+				position: absolute;
+				left: 50%;
+				top: 50%;
+				transform: translate(-50%, -50%);
+				z-index: 1;
+			}
+			.video-img {
+				width: 342rpx;
+				height: 191rpx;
+				// &::after {
+				// 	content: "";
+				// 	width: 48rpx;
+				// 	height: 48rpx;
+				// 	position: absolute;
+				// 	left: 50%;
+				// 	top: 50%;
+				// 	transform: translate(-50%, -50%);
+				// 	z-index: 1;
+				// 	background-image: url("@/static/images/hall/video_icon.png");
+				// 	background-repeat: no-repeat;
+				// 	background-size: 100% 100%;
+				// }
+			}
+					
+		
+		}
+
+		&-info {
+			padding: 22rpx 20rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 24rpx;
+			color: #999999;
+		}
+
+		&-name {
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #222222;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+		}
+
+		&-desc {
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			margin: 10rpx 0 18rpx;
+		}
+
+		&-footer {
+			@include u-flex(row, center, space-between);
+			width: 100%;
+		}
+
+		&-footerl {
+			flex: 1;
+			text {
+				overflow: hidden;
+				white-space: nowrap;
+				text-overflow: ellipsis;
+			}
+		}
+		&-img {
+			width: 32rpx;
+			height: 32rpx;
+			margin-right: 8rpx;
+			flex-shrink: 0;
+		}
+	}
+	
+	.footer-flex {
+		overflow: hidden;
+		@include u-flex(row, center, flex-start);
+	}
+	
+
+
+</style>

+ 403 - 0
pages/course/components/studyCenter.vue

@@ -0,0 +1,403 @@
+<template>
+	<view class="content">
+		<view class="navbox" id="guide4">
+			<view class="navbox-item">
+				<view class="navbox-iteminfo" @click="loginNavTo('/pages_course/learning')">
+					<image src="@/static/images/course/course_icon.png" mode="aspectFill"></image>
+					<text>在学课程</text>
+				</view>
+			</view>
+			<view class="navbox-item" @click="loginNavTo('/pages_course/noteList')">
+				<view class="navbox-iteminfo">
+					<image src="@/static/images/course/note_icon.png" mode="aspectFill"></image>
+					<text>学习笔记</text>
+				</view>
+			</view>
+			<view class="navbox-item">
+				<view class="navbox-iteminfo" @click="handleCollect()">
+					<image src="@/static/images/course/collect_icon.png" mode="aspectFill"></image>
+					<text>我的收藏</text>
+				</view>
+			</view>
+			<!-- <view class="navbox-item" >
+				<view class="navbox-iteminfo">
+					<image src="@/static/images/course/evaluate_icon.png" mode="aspectFill"></image>
+					<text>我的评价</text>
+				</view>
+			</view> -->
+		</view>
+		<view class="navbox navbox-other">
+			<view class="navbox-item" @click="handleOrder(0)">
+				<image src="@/static/images/course/order_icon.png" mode="aspectFill"></image>
+				<text>全部订单</text>
+			</view>
+			<view class="navbox-item" @click="handleOrder(1)">
+				<image src="@/static/images/course/obligation_icon.png" mode="aspectFill"></image>
+				<text>待付款</text>
+			</view>
+			<view class="navbox-item" @click="handleOrder(2)">
+				<image src="@/static/images/course/paid_icon.png" mode="aspectFill"></image>
+				<text>已支付</text>
+			</view>
+			<view class="navbox-item" @click="handleOrder(4)">
+				<image src="@/static/images/course/evaluate_icon24.png" mode="aspectFill"></image>
+				<text>已退款</text>
+			</view>
+		</view>
+		
+		<!-- 开通会员入口 -->
+		<!-- <view class="vipbox" v-if="!user.isVip" @tap="loginNavTo('/pages_course/vipBuy')">
+			<view class="vipbox-l">
+				<image class="vip-icon" src="@/static/images/course/v_icon.png" mode="aspectFill"></image>
+				<text>新用户开通会员,仅需9.9/月看全场</text>
+			</view>
+			<image class="vip-arrow" src="@/static/images/course/vip_arrow_right_icon.png" mode="aspectFill"></image>
+		</view> -->
+		
+		
+		<!-- 签到 -->
+		<view class="sign">
+			<view class="sign-info">
+				<view class="sign-day">已连续签到<text>{{signNum}}</text>天</view>
+				<view class="sign-num">我的积分:{{integral}}</view>
+			</view>
+			
+			<view class="sign-box">
+				<view class="sign-boxbar">
+					<view class="sign-line">
+						<view class="sign-line-item" v-for="i in 6" :key="i"></view>
+					</view>
+					<view class="sign-item" v-for="(item,index) in sign"  :key="index">
+						<image src="@/static/images/course/sign_in_on_icon.png" v-if="index + 1 <= signNum"></image>
+						<view class="sign-item-circle" v-else></view>
+						<view :class="index + 1 <= signNum ? 'active-text sign-item-txt':'sign-item-txt'">第{{index + 1}}天</view>
+					</view>
+				</view>
+				<button class="sign-btn"  @click="loginNavTo('/pages_user/user/integral')">立即签到</button>
+			</view>
+		</view>
+		
+		<!-- 讲堂 -->
+		<view class="hallbox">
+			<hallItem class="gapitem"  v-for="(item, index) in recommendList " :key="index" :item="item"  @click.native="navTo('/pages_course/info?courseId='+item.courseId)"  />
+		</view>
+	</view>
+</template>
+
+<script>
+	import hallItem from "./hallItem.vue";
+	import { getCourseList } from '@/api/course'
+	import {getUserInfo} from '@/api/user'
+	import {getUserSign} from '@/api/integral';
+	export default{
+		components: {
+			hallItem
+		},
+		data() {
+			return {
+				recommendList:[],
+				user:{isVip:false},
+				isDaySign:false,
+				signNum:0,
+				integral:0,
+				defaultSign: [
+					{signNum:10,sort:1,day:"第1天"},
+					{signNum:20,sort:2,day:"第2天"},
+					{signNum:30,sort:3,day:"第3天"},
+					{signNum:40,sort:4,day:"第4天"},
+					{signNum:50,sort:5,day:"第5天"},
+					{signNum:50,sort:6,day:"第6天"},
+					{signNum:50,sort:7,day:"第7天"},
+				],
+				sign:[],
+				data:null,
+			}
+		},
+		mounted() {
+			this.getRecommendList();
+			this.utils.isLogin().then(res => {
+				if(res){
+					this.getUserInfo();
+					this.getUserSign();
+				} else {
+					this.sign = this.defaultSign
+				}
+			})
+			let that=this;
+			uni.$on('refreshUserSign', function() {
+				that.utils.isLogin().then(res => {
+					if(res){
+						that.getUserSign();
+					}
+				})
+			});
+		},
+		methods: {
+			onShowFun() {
+				this.getRecommendList();
+				this.utils.isLogin().then(res => {
+					if(res){
+						this.getUserInfo();
+						this.getUserSign();
+					} else {
+						this.signNum=0;
+						this.isDaySign=false;
+						this.integral=0;
+						this.sign = this.defaultSign
+					}
+				})
+			},
+			getRecommendList(){
+				let that=this;
+				const params={"isTui":1};
+				getCourseList(params,1,10).then(res => {
+						if(res.code==200){
+							this.recommendList=res.data.list;  
+						}
+					},
+					rej => {}
+				);
+			},
+			getUserSign(){
+				getUserSign().then(res => {
+						if(res.code==200){
+							this.data=res.member;
+							this.signNum=res.signNum;
+							this.isDaySign=res.isDaySign;
+							this.integral=res.integral;
+							this.sign=JSON.parse(res.sign);
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			handleOrder(status) {
+				this.loginNavTo('/pages_course/studyCenter/orderList?status='+status);
+			},
+			handleCollect() {
+				this.loginNavTo('/pages_course/studyCenter/courseCollect');
+			},
+			getUserInfo(){
+				let that=this;
+				getUserInfo().then(res => {
+						if(res.code==200){
+							if(res.user!=null){
+								uni.setStorageSync('userInfo',JSON.stringify(res.user));
+								this.user=res.user;
+							}
+							else{
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+							}
+						}
+					},
+					rej => {}
+				);
+			},		
+			loginNavTo(url){
+				this.utils.isLogin().then(res=>{
+					if(res) {
+						this.$navTo(url);
+					}
+				})
+			},
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				})
+			},
+			
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.content {
+		padding: 0 24rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+	}
+	.navbox {
+		@include u-flex(row,center,space-between);
+		margin-top: 12rpx;
+		&:last-child {
+			margin-right: 0;
+		}
+		&-item {
+			flex:1;
+			margin-right: 18rpx;
+			@include u-flex(column,center,center);
+		}
+		&-iteminfo {
+			width: 162rpx;
+			height: 162rpx;
+			background: rgba(255,255,255,0.7);
+			border-radius: 24rpx 24rpx 24rpx 24rpx;
+			@include u-flex(column,center,center);
+			font-size: 26rpx;
+			color: #222222;
+		}
+		image {
+			width: 64rpx;
+			height: 64rpx;
+			margin-bottom: 14rpx;
+		}
+	}
+	.navbox-other {
+		height: 160rpx;
+		background: #FFFFFF;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		font-size: 24rpx;
+		image {
+			width: 48rpx;
+			height: 48rpx;
+			margin-bottom: 10rpx;
+		}
+	}
+	.vipbox {
+		height: 120rpx;
+		margin-top: 20rpx;
+		padding: 0 20rpx 0 32rpx;
+		border-radius: 16rpx;
+		overflow: hidden;
+		@include u-flex(row,center,space-between);
+		font-weight: 500;
+		font-size: 28rpx;
+		color: #7F5532;
+		background: url("@/static/images/course/vip_bg.png") no-repeat right / 152rpx 120rpx,linear-gradient( 90deg, #FFE6C5 0%, #FBD095 100%);
+		&-l {
+			@include u-flex(row,center,flex-start);
+		}
+		.vip-icon {
+			width: 32rpx;
+			height: 32rpx;
+			margin-right: 24rpx;
+		}
+		.vip-arrow {
+			width: 48rpx;
+			height: 48rpx;
+		}
+	}
+	.sign {
+		margin-top: 20rpx;
+		padding: 26rpx 20rpx;
+		background: url("@/static/images/course/sign_in_bg.png") no-repeat right top / cover,linear-gradient( 180deg, #EB473A 0%, #FBE8DE 100%);
+		border-radius: 20rpx;
+		overflow: hidden;
+		&-info {
+			@include u-flex(row,center,space-between);
+		}
+		&-day {
+			margin-top: -10rpx;
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #FFFFFF;
+			@include u-flex(row,baseline,flex-start);
+			text {
+				font-family: Roboto, Roboto;
+				font-weight: bold;
+				font-size: 56rpx;
+				color: #FEEBC9;
+			}
+		}
+		&-num {
+			height: 42rpx;
+			padding: 0 16rpx;
+			background: #FFE3DE;
+			border-radius: 20rpx 20rpx 20rpx 20rpx;
+			border: 2rpx solid rgba(255,255,255,0.3);
+			font-size: 24rpx;
+			color: #F6443C;
+			line-height: 42rpx;
+		}
+		&-box {
+			background: #FEFAF7;
+			border-radius: 12rpx;
+			padding: 34rpx 32rpx 32rpx 32rpx;
+			margin-top: 20rpx;
+		}
+		&-btn {
+			font-weight: 500;
+			font-size: 28rpx;
+			color: #FFFFFF;
+			height: 72rpx;
+			line-height: 72rpx;
+			margin-top: 40rpx;
+			background: linear-gradient( 90deg, #EB4A42 0%, #EE7E50 100%);
+			box-shadow: 0rpx 8rpx 8rpx 0rpx rgba(238,124,80,0.2);
+			border-radius: 36rpx 36rpx 36rpx 36rpx;
+			&::after {
+				border: none;
+			}
+		}
+		&-boxbar {
+			@include u-flex(row,center,space-between);
+			overflow: hidden;
+			position: relative;
+		}
+		&-line {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			@include u-flex(row,center,space-between);
+			position: absolute;
+			top: 24rpx;
+			left: 0;
+			&-item {
+				flex: 1;
+				height: 4rpx;
+				background: #F8D7D3;
+			}
+		}
+		&-item {
+			@include u-flex(column,center,center);
+			font-size: 22rpx;
+			color: #757575;
+			position: relative;
+			z-index: 1;
+			&-circle {
+				width: 48rpx;
+				height: 48rpx;
+				background: #FEFAF7;
+				border-radius: 50%;
+				border: 5rpx solid #F8D7D3;
+				box-sizing: border-box;
+			}
+			&-txt {
+				margin-top: 16rpx;
+			}
+			image {
+				width: 48rpx;
+				height: 48rpx;
+			}
+		}
+		.active-text {
+			color: #EC5D46;
+		}
+	}
+	.hallbox {
+		@include u-flex(row, center, flex-start);
+		flex-wrap: wrap;
+		margin: 0 -18rpx -18rpx 0;
+		padding: 20rpx 0;
+		.gapitem {
+			margin: 0 18rpx 18rpx 0;
+		}
+	}
+	
+	
+	
+</style>

+ 424 - 0
pages/course/index.vue

@@ -0,0 +1,424 @@
+<template>
+	<view>
+		<view class="container">
+			<image class="home_top_bg" src="https://beiliyo-2025.obs.cn-north-4.myhuaweicloud.com/fs/20250115/1736955760372.png" mode="widthFix"></image>
+			<view class="tabbox">
+				<view ref="tabbar" class="tabbar">
+					<view :id="index" :class="activeTab == index ? 'active tabbar-item':'tabbar-item'"
+						v-for="(tab,index) in tabList" :key="tab.id" @click="handleTab(index)">{{tab.name}}</view>
+				</view>
+				<view ref="underline" class="tabbar-tabline tabbar-tabline-animation"
+					:style="{left: indicatorLineLeft + 'px', width: indicatorLineWidth + 'px'}">
+					<image class="tabbar-tabline-image" src="@/static/images/course/hall_on_icon.png" mode="aspectFill">
+					</image>
+				</view>
+			</view>
+			
+			<!-- 内容 -->
+			<swiper :current="activeTab" @change="onSwiperChange" :style="'height:' + clientHeight + 'px;'">
+				<swiper-item>
+					<scroll-view scroll-y="true" :style="'height:' + clientHeight + 'px;'" :scroll-top="scrollTopHall"
+						@scroll="scroll($event,'scrollTopHall')">
+						<doctorHall ref="doctorHall" :swiperAutoplay="swiperAutoplay" />
+					</scroll-view>
+				</swiper-item>
+				<swiper-item>
+					<scroll-view scroll-y="true" :style="'height:' + clientHeight + 'px;'" :scroll-top="scrollTopStudy"
+						@scroll="scroll($event,'scrollTopStudy')">
+						<studyCenter ref="studyCenter" />
+					</scroll-view>
+				</swiper-item>
+			</swiper>
+		</view>
+		<tabbar :actindex="1"></tabbar>
+	</view>
+</template>
+
+<script>
+	import doctorHall from './components/doctorHall.vue';
+	import studyCenter from './components/studyCenter.vue';
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import mescrollBody from "@/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.vue";
+	import {
+		getDictByKey
+	} from '@/api/common'
+	import {
+		getCourseCate,
+		getCourseList
+	} from '@/api/course'
+	import {
+		getAdvList
+	} from '@/api/adv.js'
+
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		components: {
+			mescrollBody,
+			doctorHall,
+			studyCenter
+		},
+		data() {
+			return {
+				mescroll: "",
+				downOption: { //下拉刷新
+					auto: true // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: { //上拉加载
+					auto: false, // 不自动加载
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量
+					},
+					noMoreSize: 5, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+					empty: {
+						tip: '~ 空空如也 ~' // 提示
+						// btnText: '去看看'
+					}
+				},
+				imageList: [],
+				advs: [],
+				mtabs: [],
+				tabIndex: 0, // 当前tab的下标
+				fixedTop: false,
+				top: 0,
+				cateId: 0,
+				isBest: false,
+				dataList: [],
+				recommendList: [],
+				swHeightArr: {},
+				swHeight: "400px",
+				keyWord: "",
+				dataItem: {},
+				swiperAutoplay: true,
+				famousItemHei: 0,
+				scrollTopHall: 0,
+				scrollTopStudy: 0,
+				old: {
+					scrollTopStudy: 0,
+					scrollTopHall: 0,
+				},
+				activeTab: 0,
+				scrollViewId:'scrollView0',
+				indicatorLineLeft: 0,
+				indicatorLineWidth: 0,
+				tabList: [{
+					id: "tab01",
+					name: '名医讲堂'
+				}, {
+					id: "tab02",
+					name: '学习中心'
+				}],
+				clientHeight: 0,
+			}
+		},
+
+		onPageScroll(e) {
+			this.top = e.scrollTop;
+		},
+		computed: {
+			// 计算属性的 getter
+			headerBG: function() {
+				var top = this.top / 88;
+				return 'rgba(255,92,3, ' + top + ')';
+			},
+		},
+		onReady() {
+			uni.getSystemInfo({
+				success: (res) => {
+					this.clientHeight = res.windowHeight - uni.upx2px(120) - res.statusBarHeight - 50;
+				}
+			})
+			this.tabListSize = {};
+			this.selectorQuery();
+		},
+		onShow() {
+			this.swiperAutoplay = true;
+			if (this.activeTab == 1) {
+				this.$nextTick(() => {
+					this.$refs['studyCenter'].onShowFun()
+				});
+			}
+		},
+		onHide() {
+			this.swiperAutoplay = false;
+		},
+		mounted() {
+			try {
+				const system = uni.getSystemInfoSync();
+				let itemWid = (system.windowWidth - 40 - 32) * 0.5 * 0.95;
+				let tempHei = itemWid * 0.5;
+				tempHei = uni.upx2px(tempHei) + 30;
+				this.famousItemHei = tempHei;
+			} catch (e) {
+
+			}
+		},
+		methods: {
+			scroll(e, type) {
+				this.old[type] = e.detail.scrollTop
+			},
+			handleTab(activeTab) {
+				this.activeTab = activeTab
+				this.$nextTick(() => {
+					this.selectorQuery()
+				})
+			},
+			updateIndicator(left, width) {
+				this.indicatorLineLeft = left;
+				this.indicatorLineWidth = width;
+			},
+			selectorQuery() {
+				uni.createSelectorQuery().in(this).selectAll('.tabbar-item').boundingClientRect((rects) => {
+					rects.forEach((rect) => {
+						this.tabListSize[rect.id] = rect;
+					})
+					this.updateIndicator(this.tabListSize[this.activeTab].left, this.tabListSize[this.activeTab]
+						.width);
+				}).exec();
+			},
+			// swiper划动
+			onSwiperChange(e) {
+				this.changeIdx(e.detail.current);
+			},
+			// 更新当前页
+			changeIdx(index) {
+				if (this.activeTab === index) return;
+				this.activeTab = index;
+				this.scrollViewId = 'scrollView' + this.activeTab;
+				this.$nextTick(() => {
+					this.selectorQuery()
+				});
+			},
+			/*下拉刷新的回调 */
+			downCallback() {
+				this.mescroll.resetUpScroll(true);
+			},
+			/*上拉加载的回调*/
+			upCallback(page) {
+				this.mescroll.endByPage(1, 1);
+			},
+			getCourseCate: function() {
+				let that = this;
+				getCourseCate().then(res => {
+						if (res.code == 200) {
+							this.mtabs = res.data;
+							let findIdx = this.mtabs.findIndex(item => item.dictLabel == '精选');
+							// console.log("qxj findIdx:"+findIdx);
+							if (findIdx == -1) {
+								let dictItem = {
+									"dictValue": 0,
+									"dictLabel": "精选"
+								};
+								this.mtabs.unshift(dictItem);
+							}
+							this.isBest = true;
+							if (this.mtabs.length > 0) {
+								this.cateId = this.mtabs[0].dictValue;
+								for (let i = 0; i < this.mtabs.length; i++) {
+									if (i <= 4) {
+										this.tabChange(i);
+									}
+								}
+								//this.tabIndex=0;
+								//this.dataItem=this.dataList[this.tabIndex.toString()]
+								this.tabChange(0);
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			getFamousCourseList: function(index) {
+				let that = this;
+				let params = {};
+				if (this.isBest) {
+					params = {
+						"isBest": 1
+					};
+				} else {
+					params = {
+						"cateId": this.cateId
+					};
+				}
+				if (this.dataList.hasOwnProperty(index + "")) {
+					this.updateSwiperHeight(index);
+					return;
+				}
+				getCourseList(params, 1, 6).then(res => {
+						if (res.code == 200) {
+							this.dataList[index + ""] = res.data.list;
+							//this.$nextTick(() => {
+							this.updateSwiperHeight(index);
+							//}); 
+						}
+					},
+					rej => {}
+				);
+			},
+			getRecommendList: function() {
+				let that = this;
+				const params = {
+					"isTui": 1
+				};
+				getCourseList(params, 1, 10).then(res => {
+						if (res.code == 200) {
+							this.recommendList = res.data.list;
+						}
+					},
+					rej => {}
+				);
+			},
+			swiperChange(e) {
+				// console.log("qxj swiperChange");
+				this.tabIndex = e.detail.current;
+				this.tabChange(this.tabIndex);
+			},
+			tabChange(index) {
+				// console.log("qxj tabChange index:"+index);
+				this.tabIndex = index;
+				const item = this.mtabs[index];
+				if (item) {
+					if (item.dictLabel == '精选') {
+						this.isBest = true;
+					} else {
+						this.isBest = false;
+					}
+					this.cateId = item.dictValue;
+					this.getFamousCourseList(index);
+				}
+			},
+			updateSwiperHeight() {
+				let dataArr = this.dataList[this.tabIndex.toString()];
+				if (dataArr == undefined || dataArr.length == 0) {
+					this.swHeight = 150;
+				} else {
+					uni.createSelectorQuery().in(this).select('#swiper-content').boundingClientRect(rect => {
+						//console.log("qxj swHeight:"+this.swHeight);
+						if (rect != null) {
+							this.swHeight = rect.height + 20;
+						}
+						if (this.swHeight <= 100) {
+							//所以(total + pagesize -1) / pagesize就得到总页数
+							// console.log("qxj famousItemHei:"+this.famousItemHei);
+							this.swHeight = (dataArr.length + 1) / 2 * this.famousItemHei;
+							return;
+						}
+					}).exec();
+				}
+			},
+
+			getAdvList() {
+				//联网加载数据
+				var that = this;
+				var data = {
+					advType: 12,
+					status: 1
+				}
+				getAdvList(data).then(res => {
+					if (res.code == 200) {
+						that.imageList = [];
+						that.advs = [];
+						res.data.forEach(function(element) {
+							if (element.imageUrl != null && element.imageUrl != "") {
+								that.advs.push(element);
+								that.imageList.push(element.imageUrl);
+							}
+						});
+
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败"
+						});
+					}
+				});
+			},
+			// 页面跳转
+			navTo(url) {
+				console.log("qxj url:" + url);
+				uni.navigateTo({
+					url: url
+				});
+			},
+			loginNavTo(url) {
+				this.utils.isLogin().then(res => {
+					if(res){
+						this.$navTo(url);
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.container {
+		font-family: PingFang SC, PingFang SC;
+		padding-top: var(--status-bar-height);
+		box-sizing: border-box;
+		position: relative;
+		z-index: 2;
+	}
+
+	.home_top_bg {
+		width: 100%;
+		height: auto;
+		position: absolute;
+		top: 0;
+		left: 0;
+		z-index: -1;
+	}
+
+	.tabbox {
+		position: relative;
+		margin-bottom: 22rpx;
+		position: relative;
+
+		.tabbar {
+			height: 88rpx;
+			@include u-flex(row, center, center);
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #222222;
+			line-height: 88rpx;
+			position: relative;
+
+			.tabbar-item {
+				margin: 0 24rpx;
+			}
+
+			.active {
+				font-weight: 600;
+				font-size: 40rpx;
+				color: #018C39;
+				position: relative;
+			}
+		}
+
+		.tabbar-tabline-image {
+			width: 36rpx;
+			height: 12rpx;
+		}
+
+		.tabbar-tabline {
+			position: absolute;
+			bottom: 0;
+			width: 0;
+			height: 12rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+
+		.tabbar-tabline-animation {
+			transition-duration: 0.2s;
+			transition-property: left;
+		}
+	}
+</style>

+ 519 - 0
pages_course/catalogue.vue

@@ -0,0 +1,519 @@
+<template>
+	<view class="content">
+		
+		<es-nav-bg title="课程目录"></es-nav-bg>
+
+<!-- 		<view class="es-view-w-x es-mt-10">
+			<view class="banner es-icon-auto es-br-20">
+				<image :src="data.imgUrl"></image>
+			</view>
+		</view> -->
+		
+		
+		<view class="video es-mt-10 es-ml-20 es-mr-20 es-mb-10 es-br-10">
+			<video ref="myVideo" id="myVideo"  :src="pickCatalog.videoUrl"
+			 @error="videoErrorCallback"  :enable-progress-gesture="data.isFast==1"  :enable-danmu="false" :danmu-btn="false" :danmu-list="danmuList" :initial-time="studyTimes"  
+			 :poster="poster" objectFit="contain" :show-progress="data.isFast==1" :title="pickCatalog.courseName" :controls="true" :show-fullscreen-btn="true"  @controlstoggle="toggleBarChange" 
+			 @timeupdate="onTimeUpdate" @fullscreenchange="onFullscreenChange" @loadedmetadata="onLoadedMetadata" >
+			 </video>
+			 
+			 <!-- #ifdef APP-PLUS -->
+			 <cover-image src="/static/images/yuan-1.png" class="video-1"></cover-image>
+			 <cover-image src="/static/images/yuan-2.png" class="video-2"></cover-image>
+			 <cover-image src="/static/images/yuan-3.png" class="video-3"></cover-image>
+			 <cover-image src="/static/images/yuan-4.png" class="video-4"></cover-image>
+			 <!-- #endif -->
+		</view>
+		
+		<view class="es-bc-white es-br-20" style="margin-top: -194rpx;min-height: 300rpx;">
+			<view class="es-h-194"></view>
+			<view class="es-view-w-x es-mt-25">
+				<view class="es es-ac">
+					<view class="es-icon es-w-35 es-h-31 es-icon-course-icon-6"></view>
+					<view class="es-ml-20 es-fs-30 es-fw-600 es-f1">目录<text
+							class="es-ml-1 es-fs-24 es-c-99">({{catalogueList.length}})</text></view>
+					<!-- <view class="es-icon-25 es-icon-course-close"></view> -->
+				</view>
+
+				<view class="es-f1 es-bc-fa es-h-70 es-br es es-ac es-mt-30">
+					<view class="es-icon-26 es-ml-27 es-icon-search-search"></view>
+					<view class="es-f1 es-ipt">
+						<input v-model="searchText"  placeholder="请输入关键字搜索" class="es-fs-24" placeholder-class="es-c-b4" />
+					</view>
+					<view @tap="search()" class="es-w-108 es-h-58 es-br es-bc es-mr-7  es es-ac es-pc es-fw-500 es-fs-26 es-on-act">搜索
+					</view>
+				</view>
+
+				<!-- 下面是目录列表 -->
+				<view v-for="(item, index) in catalogueList"  :key="index" @click="pickCatalogAction(index)" class="es-mt-20 es es-ac es-icon-auto es-h-100 es-view-w-x"
+				  :class="index==pickCatalogIdx?'es-icon-course-cate-bg1 es-c':'es-icon-course-cate-bg2'">
+					<view class="es-f1">
+						<view class="es-fs-28 es-fw-600">第{{item.courseSort}}讲</view>
+						<view class="es-fs-22 es-mt-4">{{item.title}}</view>
+					</view>
+					<view class="es-w-60 es-h-31 es-icon-course-play-loading es-icon" v-if="index==pickCatalogIdx"></view>
+					<view class="vip es-icon-auto es-icon-course-cate-bg3 es-h-42 es es-ac es-fs-22 es es-ac es-pc" v-if="index!=pickCatalogIdx">
+						<view class="es-icon-22 es-icon-course-cate-vip"></view>
+						<text class="es-ml-4 es-fs-22">{{ item.courseSort>2 && canShowVip(item) ? '限时特惠' : '免费'}}</text>
+					</view>
+				</view>
+			</view>
+	
+		</view>
+		<!-- #ifndef APP-PLUS -->
+		<adMask :show="tipShow">
+			<!-- 逐集观看提示弹窗 -->
+			<view class="tipspop">
+				<view class="jianyi_icon_box">
+					<image class="jianyi_icon" src="@/static/images/ad/jianyi_icon.png" mode="aspectFill"></image>
+				</view>
+				<view class="tc_bg">
+					<image src="@/static/images/ad/tc_bg.png" mode="widthFix" style="width: 100%;height: auto;"></image>
+				</view>
+				<view class="tipspop-con">
+					<view class="tipspop-title">建议逐集观看,学习效果更佳</view>
+					<view>是否返回逐集观看?</view>
+				</view>
+				<view class="tipspop-footer">
+					<view class="tipspop-footer-l" @click="tipCancel">取消</view>
+					<view @click="tipConfirm">确认</view>
+				</view>
+			</view>
+		</adMask>
+		<!-- #endif  -->
+	</view>
+</template>
+
+<script>
+	import { getCourseById,getCourseVideoList,addDuration } from '@/api/course'
+	export default {
+		data() {
+			return {
+			   catalogueList:[],
+			   pickCatalog:{videoUrl:"",thumbnail:"",duration:0,videoId:0,seconds:0},
+			   pickCatalogIdx:0,
+			   searchText:"",
+			   videoContext: null,
+			   video: {
+			   	  percent: 10, //进度百分比
+			   },
+			   data:{
+					courseId:null,
+					imgUrl:"",
+					talentAvatar:"",
+					price:"",
+					remark:"",
+					noteNum:0,
+					courseName:"",
+					description:"",
+					cataIndex:0,
+					isFast:false,
+					isAutoPlay:false,
+			   },
+			   danmuList:[],
+			   tempStudyTimes:0,
+			   studyTimes:0,
+			   audioContext: null,
+			   audioPlayIng:false,
+			   showFullScreenBtn:true,
+			   isLearning:false,
+			   myVideo:null,
+			   showProgress:true,
+			   videoUrl:"https://1319721001.vod-qcloud.com/3525603bvodcq1319721001/2b3e76ac1253642698811158287/Hmod7JMfAowA.mp4",
+			   poster: "",
+			   videoId:null,
+			   isAutoPlay:false,
+			   tipShow: false,
+			   tipsIndex: null,
+			   isNext: 0
+			}
+		},
+		onLoad(options) {
+		    this.courseId=options.courseId;
+			this.videoId=options.videoId;
+			this.isAutoPlay=options.isAutoPlay;
+			this.tempStudyTimes=options.studyTimes;
+			this.getCourseInfo();
+			this.getCourseVideoList();
+		},
+		onShow(){
+			  // if(this.data!=null && !this.countdowning){
+				   // this.startCountsTime();
+			  // }
+		},
+		onReady() {
+			this.videoContext = uni.createVideoContext("myVideo", this);
+		},
+		methods: {
+			canShowVip(item){
+				return true;
+				if(this.myUserInfo.isVip){
+					return false;
+				}
+				return item.isVip==1 && item.isBuy==0;
+			},
+            getCourseInfo(){
+               getCourseById(this.courseId).then(res => {
+            		if(res.code==200){
+            			this.data=res.data;
+						this.isNext = res.data.isNext;
+            		}
+            	},
+            	rej => {}
+               );
+            },
+			search() {
+				this.videoId = 0
+				this.getCourseVideoList()
+			},
+            //课程目录
+            getCourseVideoList(){
+            	let that=this;
+            	const params={"courseId":this.courseId,"keyword":this.searchText};
+            	getCourseVideoList(params,1,30).then(res => {
+						if(res.code==200){
+							this.catalogueList=res.data.list;  
+							if(this.catalogueList.length>0){
+								if(this.videoId!=null &&this.videoId!= 0){
+									console.log("qxj videoId="+this.videoId);
+									this.pickCatalogIdx=this.getCatalogIdx();
+									console.log("qxj pickCatalogIdx:"+this.pickCatalogIdx);
+									this.pickCatalog=this.catalogueList[this.pickCatalogIdx];
+								}else{
+									this.pickCatalog=this.catalogueList[0];
+								}
+								
+								if(this.tempStudyTimes>0){
+									this.pickCatalog.studyTime=this.tempStudyTimes;
+									this.initStudyTime(this.pickCatalog.studyTime);
+								}else{
+									if(this.pickCatalog.studyTime!=null){
+										this.initStudyTime(this.pickCatalog.studyTime);
+									}
+								}
+								//开始播放计时
+								if(this.isAutoPlay==1){
+									this.pickCatalogMethod(this.pickCatalogIdx);
+								}
+								this.poster=this.pickCatalog.thumbnail;
+							}
+						}
+            		},
+            		rej => {}
+            	);
+            },
+            
+			addStudyCourse(){
+				if(this.catalogueList.length==0){
+					return;
+				}
+				this.pickCatalog=this.catalogueList[this.pickCatalogIdx];
+				const parmas={"courseId":parseInt(this.courseId),"duration":this.courseDuration,"videoId":this.pickCatalog.videoId};
+				addDuration(parmas).then(res => {
+						if(res.code==200){
+							this.courseDuration=0;
+						}
+					},
+					rej => {}
+				);
+			},
+			
+			playVideo() {
+			  this.videoContext.play();
+			},
+			pauseVideo() {
+			   console.log("pause");
+			   // (uni.getElementById("myVideo"))?.pause(); //as写法测试。注意id不对时as会崩溃
+			   this.videoContext.pause();
+			},
+			pickCatalogAction(index){
+				if(this.pickCatalogIdx == index) return
+				if(this.isNext == 1 && this.pickCatalogIdx != index -1) {
+					this.pauseVideo()
+					this.openTips(index)
+					return
+				}
+				//添加切换之前课程目录学习记录
+				this.addStudyCourse();
+				this.pickCatalogMethod(index);
+			},
+			pickCatalogMethod(index){
+				this.pickCatalogIdx=index;
+				this.pickCatalog=this.catalogueList[index];
+				this.studyTimes=0;//当pickCatalog.studyTime=null 或者等于视频总时长时默认切为零
+				if(this.pickCatalog.studyTime!=this.pickCatalog.seconds){
+					this.studyTimes=this.pickCatalog.studyTime;
+				}
+				this.initStudyTime(this.studyTimes);
+				this.poster=this.pickCatalog.thumbnail;
+				let that=this;
+				setTimeout(function(){
+					that.playVideo();
+				},200);
+			},
+			initStudyTime(times){
+				this.studyTimes=times;
+				this.courseDuration=times;
+			},
+			toggleBarChange(event){
+				console.log("qxj toggleBarChange");
+				this.showFullScreenBtn=!this.showFullScreenBtn;
+			},
+			onTimeUpdate(event){
+				this.courseDuration = (event.detail.currentTime*1.0).toFixed(0);
+			},
+			onFullscreenChange(event){
+				// 检查是否全屏
+				if (event.fullscreen) {
+					// 如果是全屏,则退出全屏
+					//this.videoContext.exitFullScreen();
+				}
+			},
+			onLoadedMetadata(e) {
+			    this.pickCatalog=this.catalogueList[this.pickCatalogIdx];
+				if(this.pickCatalog.seconds==null){
+					this.pickCatalog.seconds =(e.target.duration).toFixed(0);
+				}
+			},
+			getCatalogIdx(){
+				let index=0;
+				for (var i = 0; i < this.catalogueList.length; i++) {
+					let item=this.catalogueList[i];
+					if(this.videoId==item.videoId){
+						break;
+					}
+					index++;
+				}
+				return index;
+			},
+			videoErrorCallback(){
+				
+			},
+			openTips(index){
+				this.tipsIndex = index 
+				this.tipShow = true
+			},
+			tipConfirm() { // 提示确认
+				this.tipsIndex = null
+				this.tipShow = false
+				// 继续播放
+				this.playVideo()
+			},
+			tipCancel() { // 提示取消
+				this.tipShow = false
+				// 播放选择的一节
+				//添加切换之前课程目录学习记录
+				this.addStudyCourse();
+				this.pickCatalogMethod(this.tipsIndex);
+			}, 
+		},
+		onUnload() {
+			this.addStudyCourse();
+			let studyData={"studyTimes":this.courseDuration,"videoId":this.pickCatalog.videoId}
+			uni.$emit('backStudyTime', studyData);
+		}
+
+	}
+	
+</script>
+
+<style lang="scss" scoped>
+	page {
+		background-color: white;
+	}
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.banner {
+		height: 430rpx;
+	}
+
+	.es-icon-course-icon-6 {
+		background-image: url(/static/images/course/icon-6.png);
+	}
+
+	.es-icon-course-close {
+		background-image: url(/static/images/course/close.png);
+	}
+
+	.es-icon-course-cate-bg1 {
+		background-image: url(/static/images/course/cate-bg1.png);
+	}
+
+	.es-icon-course-cate-bg2 {
+		background-image: url(/static/images/course/cate-bg2.png);
+	}
+
+	.es-icon-course-cate-bg3 {
+		background-image: url(/static/images/course/cate-bg3.png);
+	}
+
+	.es-icon-course-play-loading {
+		background-image: url(/static/images/course/play-loading.png);
+	}
+
+	.es-icon-course-cate-vip {
+		background-image: url(/static/images/course/vip.png);
+	}
+
+	.es-icon-search-search {
+		background-image: url(/static/images/search.png);
+	}
+	.vip{
+		word-break: keep-all;
+		min-width: 87rpx;
+		padding: 6rpx 10rpx;
+		box-sizing: border-box;
+	}
+	
+	.video {
+		height: 380rpx;
+		position: relative;
+		display: flex;
+		.cover{
+			position: absolute;
+			left: 0;
+			top: 0;
+		    width: 100%;
+			height: 100%;
+			border-radius: 20rpx;
+		}
+		.playIcon{
+			position: absolute;
+			width:44rpx ;
+			height: 44rpx;
+			z-index: 10;
+		    right: 26rpx;
+			bottom: 50rpx;
+		 }
+	}
+	
+	.video video {
+		width: 100%;
+		height: 100%;
+		border-radius: 20rpx;
+	}
+	.video .video-1,.video .video-2,.video .video-3,.video .video-4{
+		position: absolute;
+		width: 20rpx;
+		height: 20rpx;
+		z-index: 1;
+	}
+	.video .video-1{
+		left:0;top:0;
+	}
+	.video .video-2{
+		right:0;top:0;
+	}
+	.video .video-3{
+		left:0;bottom:0;
+	}
+	.video .video-4{
+		right:0;bottom:0;
+	}
+	.tipspop {
+		width: 630rpx;
+		// height: 376rpx;
+		padding-bottom: 40rpx;
+		background: linear-gradient( 180deg, #FFEDE3 0%, #FFFFFF 100%);
+		border-radius: 32rpx 32rpx 32rpx 32rpx;
+		position: relative;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 28rpx;
+		color: #757575;
+		text-align: center;
+		.jianyi_icon_box {
+			width: 124rpx;
+			height: 124rpx;
+			border-radius: 50%;
+			background: linear-gradient( 180deg, #FF9B45 0%, #FF5C03 100%);
+			border: 12rpx solid #FFFFFF;
+			@include u-flex(row, center, center);
+			position: absolute;
+			left: 50%;
+			top: -74rpx;
+			transform: translateX(-50%);
+		}
+		.jianyi_icon {
+			height: 64rpx;
+			width: 64rpx;
+		}
+		.tc_bg {
+			width: 100%;
+			height: auto;
+			border-radius: 32rpx 32rpx 0 0;
+			overflow: hidden;
+		}
+		&-con {
+			padding: 0 48rpx;
+		}
+		&-title {
+			margin: 14rpx 0 20rpx 0;
+			font-weight: 500;
+			font-size: 34rpx;
+			color: #333333;
+		}
+		&-footer {
+			padding-top: 34rpx;
+			@include u-flex(row, center, center);
+			view {
+				width: 248rpx;
+				height: 84rpx;
+				line-height: 84rpx;
+				text-align: center;
+				background: #FF5C03;
+				border-radius: 42rpx 42rpx 42rpx 42rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 32rpx;
+				color: #FFFFFF;
+			}
+			.tipspop-footer-l{
+				margin-right: 38rpx;
+				background: #F4F4F4;
+				color: #757575;
+			}
+		}
+	}
+	.tipsvip {
+		width: 630rpx;
+		// height: 624rpx;
+		padding-bottom: 40rpx;
+		box-sizing: border-box;
+		background: #FFFFFF;
+		border-radius: 32rpx 32rpx 32rpx 32rpx;
+		overflow: hidden;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 32rpx;
+		color: #333333;
+		line-height: 48rpx;
+		.vipFrame {
+			width: 100%;
+			height: auto;
+		}
+		&-con {
+			padding: 44rpx 48rpx;
+			box-sizing: border-box;
+		}
+		&-footer {
+			@include u-flex(row, center, center);
+			&-btn {
+				width: 534rpx;
+				height: 84rpx;
+				line-height: 84rpx;
+				text-align: center;
+				background: #FF5C03;
+				border-radius: 42rpx 42rpx 42rpx 42rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 32rpx;
+				color: #FFFFFF;
+			}
+		}
+	}
+</style>

+ 416 - 0
pages_course/catalogueN.nvue

@@ -0,0 +1,416 @@
+<template>
+	<view class="es content es-bc-white" style="position:relative;flex-direction: column;" @touchmove.stop>
+		 <view class="pBox es-bc-white es-br-20 flex" style="padding: 20rpx 0; box-sizing: border-box;">
+			 <view class="es-view-w-x">
+			 	
+				<view class="es es-h-60" >
+					<view class="es es-ac  es-h-44  es-mt-5" >
+						<image class="es-w-27 es-h-29" src="/static/images/course/icon-6.png"></image>
+						<text class="es-ml-20 es-fs-28 es-fw-600 es-f1">目录</text>
+						<text class="es-ml-1 es-fs-30 es-c-99">({{totalNum}})</text>
+					</view>
+					<image @tap="closePopup()" style="position: absolute;right:10rpx;top:0rpx" class="es-w-40 es-h-40" src="/static/images/close40.png"></image>
+				</view>
+			 
+			 	<view class="es-f1 es-bc-f7 es-h-74 es-br es es-ac flex" style="box-sizing: border-box;margin-bottom: 24rpx;">
+			 		<image class="es-icon-26 es-ml-27" src="/static/images/search.png"></image>
+			 		<view class="es-f1 es-ipt  es-ml-10 es-bc-f7 es-br-10 flex" >
+			 			<input v-model="searchText"  placeholder="请输入关键字搜索" @input="onKeyInput"  class="es-h-76 es-fs-28" placeholder-class="es-c-b4" />
+			 		</view>
+			 		<view @tap="doSearch()" class="es-w-108 es-h-54 es-br es-bc es-mr-10   es es-ac es-pc es-fw-500 es-fs-26" >
+						<text class="es-c-white es-fs-26">搜索</text>
+					</view>
+			 	</view>
+			 
+			 	<!-- 下面是目录列表 -->
+				
+			  <list loadmoreoffset="100" @loadmore="loadmore" :style="{'height':listHei+'px'}" >	
+			       <refresh @pullingdown='onpullingdown' @refresh="onrefresh" :display=" refreshing ? 'show' : 'hide' " class="refresh x-c ">
+						<loading-indicator style="width: 22px;height: 22px;color:#999;"></loading-indicator>
+						<text class="es-fs-32 es-ml-8">{{refreshText}}</text>
+			       </refresh>
+				   
+				   <cell v-for="(item, index) in dataList"  :key="index">
+						 <view  @click="pickCatalogAction(Number(item.courseSort)- 1)" class="es es-ac es-icon-auto es-view-w-x es-pt-15 es-pb-15 es-mb-16">
+						   <image  class="bgImg" :src="Number(item.courseSort)- 1==pickCatalogIdx?'/static/images/course/cate-bg1.png':'/static/images/course/cate-bg2.png'  "></image>
+							<view class="es-f1 flex">
+								<text class="es-fs-30 es-fw-600">第{{item.courseSort}}讲</text>
+								<text class="es-fs-26 es-mt-4">{{item.title}}</text>
+							</view>
+							
+							<image src="/static/images/course/play-loading.png" class="es-w-60 es-h-31" v-if="Number(item.courseSort)- 1==pickCatalogIdx"></image>
+							<view class="vip es-icon-auto es-h-42 es es-ac es-fs-22 es es-ac es-pc" v-if="Number(item.courseSort)- 1!=pickCatalogIdx">
+								<image class="bgImg" mode="aspectFill" src="/static/images/course/cate-bg3.png"></image>
+								<image v-if="item.courseSort>2 && canShowVip(item)" class="es-icon-22" src="/static/images/course/vip.png"></image>
+								<text class="es-ml-4 es-fs-22">{{ item.courseSort>2 && canShowVip(item) ? '限时特惠' : '免费'}}</text>
+							</view>
+						 </view>
+					</cell>
+					
+				   <cell v-if="showLoadMore || dataList.length > 4">
+						  <view class="loading-more">
+							  <text class="loading-more-text">{{loadMoreText}}</text>
+						  </view>
+					</cell>
+					
+					<cell>
+						<view v-if="totalNum==0 && reqDataCode!=0"  class="y-f" style="height: 300px;padding-top: 200rpx;" >
+							<image @tap="refreshPage()" class="es-w-124 es-h-80" style="width:187rpx;height:120rpx;" src="/static/image/nodata.png"></image>
+							<text @tap="refreshPage()" class="es-c-33">{{reqDataCode==1?'暂无数据':'请求超时'}}</text>
+						</view>
+					</cell>
+									
+		      </list>
+		
+			 </view>
+			 	
+		 </view>	
+	</view>
+</template>
+
+<script>
+	import { getCourseById,getCourseVideoList,addDuration } from '@/api/course'
+	import { isEmpty } from '@/utils/common'
+	export default {
+		data() {
+			return {
+				dataList:[],
+				pickCatalog:{videoUrl:"",thumbnail:"",duration:0,videoId:0,seconds:0},
+				pickCatalogIdx:0,
+				searchText:"",
+				videoContext: null,
+				video: {
+					  percent: 10, //进度百分比
+				},
+				courseId:null,
+				data:{
+					courseId:null,
+					imgUrl:"",
+					talentAvatar:"",
+					price:"",
+					remark:"",
+					noteNum:0,
+					courseName:"",
+					description:"",
+					cataIndex:0,
+					isFast:false,
+					isAutoPlay:false,
+				},
+				danmuList:[],
+				tempStudyTimes:0,
+				studyTimes:0,
+				audioContext: null,
+				audioPlayIng:false,
+				showFullScreenBtn:true,
+				isLearning:false,
+				myVideo:null,
+				showProgress:true,
+				videoUrl:"https://1319721001.vod-qcloud.com/3525603bvodcq1319721001/2b3e76ac1253642698811158287/Hmod7JMfAowA.mp4",
+				poster: "",
+				videoId:null,
+				isAutoPlay:false,
+				loadMoreText:"加载中...",
+				showLoadMore:false,
+				isLastPage:false,
+				refreshing: false,
+				refreshText: '下拉刷新',
+				pageNum:1,
+				listHei:0,
+				totalNum:0,
+				reqDataCode:0, //1:正常加载 -1 请求超时
+				myUserInfo: {},
+			}
+		},
+		mounted() {
+			try {
+				console.log("qxj catalogueN reqDataCode:"+this.reqDataCode);
+				let that=this;
+				this.subNVue= uni.getSubNVueById('catalogueN');
+				uni.$on('catalogue', (data) => {  
+					console.log("qxj catalogue ondata:"+JSON.stringify(data));
+					that.courseId=data.courseId;
+					that.videoId=data.videoId;
+					that.pickCatalogIdx=data.pickCatalogIdx;
+					if(that.reqDataCode==1){
+						return;
+					}
+					that.getCourseInfo();
+					that.upCallback();
+				}); 
+				
+				uni.$on('pickCatalogIdx', (data) => {
+					that.pickCatalogIdx=data.pickCatalogIdx;
+					if(data.type == 'catalogueN') {
+						that.closePopup()
+					}
+				}); 
+				
+				const res = uni.getSystemInfoSync();
+				// this.listHei=res.windowHeight*1.05;
+				this.listHei= res.windowHeight*0.85 - uni.upx2px(200);
+				
+				if(!this.$isLogin()){
+					let useInfo=uni.getStorageSync('userInfo');
+					if(!!useInfo && useInfo!=null){
+						this.myUserInfo=JSON.parse(useInfo);
+					}
+				}
+			} catch (e) {
+				
+			}
+		},
+		onUnload() {
+			// 注销全局配置监听
+			uni.$off("catalogue");
+			uni.$off("pickCatalogIdx");
+		},
+		methods: {
+			getCourseInfo(){
+			   getCourseById(this.courseId).then(res => {
+					if(res.code==200){
+						this.courseData=res.data;
+					}
+				},
+				rej => {}
+			   );
+			},
+			onpullingdown(e) {
+			    if (this.refreshing) return;
+				if (Math.abs(e.pullingDistance) > Math.abs(e.viewHeight)) {
+					this.refreshText = '下拉更新'
+				} else {
+					this.refreshText = '释放更新'
+				}
+			 },
+			 onrefresh(e) {
+			   console.log('onRefreshing...');
+			    this.refreshing = true;
+				this.pageNum=1;
+			    this.upCallback();
+			    if (this.refreshing) return;
+			},
+			loadmore(){
+				if(this.isLastPage){
+					return;
+				}
+				console.log("loadmore");
+				this.pageNum++;
+				this.showLoadMore = true;
+				setTimeout(() => {
+					this.upCallback();
+				}, 300);
+			},
+			pickCatalogAction(index){   
+				const data = {
+					index: index,
+					type: 'catalogueN'
+				}
+				uni.$emit('pickCatalogAction',data);
+			},
+			/*下拉刷新的回调 */
+			upCallback() {   	
+				/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+				if(this.courseId==null){
+					this.courseId=7;
+				}
+				const params={"courseId":this.courseId,"keyword":this.searchText};
+				uni.showLoading({title:""});
+				getCourseVideoList(params,this.pageNum).then(res => {
+					    uni.hideLoading();
+						if(res.code==200){
+							setTimeout(()=>{
+								if(this.pageNum == 1) this.dataList = []; //如果是第一页需手动制空列表
+								this.dataList=this.dataList.concat(res.data.list); //追加新数据
+								
+								this.totalNum=res.data.total;
+								this.reqDataCode=1;
+								this.refreshing = false;
+								this.isLastPage=res.data.isLastPage;
+								if(this.isLastPage){
+									this.refreshText = '加载完成'
+								}
+								if(res.data.isLastPage){
+									this.loadMoreText = "没有更多数据了!"
+									this.showLoadMore=false;
+								}else{
+									this.loadMoreText = "加载中..."
+								}
+							},200);
+						}else{
+							this.refreshing = false;
+							this.refreshText = '加载完成';
+							this.reqDataCode=-1;
+						}
+					},
+					rej => {}
+				).catch(()=>{
+					//联网失败, 结束加载
+					this.refreshing = false;
+					this.refreshText = '加载完成';
+					this.reqDataCode=-1;
+				});
+			},
+			closePopup() {
+				const subNVue = uni.getSubNVueById('catalogueN');
+				subNVue.hide('slide-out-bottom');
+			},
+			doSearch(){
+				this.pageNum=1;
+				this.upCallback();
+			},
+			refreshPage(){
+				 this.pageNum=1;
+			     this.upCallback();
+			},
+			onKeyInput: function(event) {
+				 this.refreshPage();
+			},
+			canShowVip(item){
+				return true;
+				if(this.myUserInfo.isVip){
+					return false;
+				}
+				return item.isVip==1 && item.isBuy==0;
+			},
+		}
+	}
+</script>
+
+<style sscope lang="scss">
+	
+	page {
+		background-color: white;
+	}
+	.catalogue {
+		width: 100%;
+		padding: 15rpx;
+		margin-bottom: 16rpx;
+		position: relative;
+		min-height: 100rpx;
+		overflow: hidden;
+		box-sizing: border-box;
+		z-index: 2;
+	}
+	.fl-row{
+		display: flex;
+		flex-direction: row;
+	}
+	  
+	.pBox{
+		background-color:#171a1d;
+		box-sizing: border-box;
+	}
+	
+	.es-icon-course-icon-6 {
+		background-image: url(/static/images/course/icon-6.png);
+	}
+	
+	.es-icon-course-close {
+		background-image: url(/static/images/course/close.png);
+	}
+	
+	.es-icon-course-cate-bg1 {
+		background-image: url(/static/images/course/cate-bg1.png);
+	}
+	
+	.es-icon-course-cate-bg2 {
+		background-image: url(/static/images/course/cate-bg2.png);
+	}
+	
+	.es-icon-course-cate-bg3 {
+		background-image: url(/static/images/course/cate-bg3.png);
+	}
+	
+	.es-icon-course-play-loading {
+		background-image: url(/static/images/course/play-loading.png);
+	}
+	
+	.es-icon-course-cate-vip {
+		background-image: url(/static/images/course/vip.png);
+	}
+	
+	.es-icon-search-search {
+		background-image: url(/static/images/search.png);
+	}
+	
+	.bgImg{
+		position: absolute;left: 0;right: 0;top:0;bottom: 0;
+	}
+	
+	
+	.vip{
+		flex-shrink: 0;
+		word-break: keep-all;
+		min-width: 43px;
+		padding: 0 6rpx;
+		box-sizing: border-box;
+	}
+	
+	.video {
+		height: 380rpx;
+		position: relative;
+		display: flex;
+		.cover{
+			position: absolute;
+			left: 0;
+			top: 0;
+		    width: 100%;
+			height: 100%;
+			border-radius: 20rpx;
+		}
+		.playIcon{
+			position: absolute;
+			width:44rpx ;
+			height: 44rpx;
+			z-index: 10;
+		    right: 26rpx;
+			bottom: 50rpx;
+		 }
+	}
+	
+	.video video {
+		width: 100%;
+		height: 100%;
+		border-radius: 20rpx;
+	}
+	.video .video-1,.video .video-2,.video .video-3,.video .video-4{
+		position: absolute;
+		width: 20rpx;
+		height: 20rpx;
+		z-index: 1;
+	}
+	.video .video-1{
+		left:0;top:0;
+	}
+	.video .video-2{
+		right:0;top:0;
+	}
+	.video .video-3{
+		left:0;bottom:0;
+	}
+	.video .video-4{
+		right:0;bottom:0;
+	}
+	
+	
+	.refresh {
+		display: flex;
+		flex-direction: row; 
+	    justify-content: center;
+		height: 50px;
+	}
+	
+	.loading-more {
+		  align-items: center;
+		  justify-content: center;
+		  padding-top: 14px;
+		  padding-bottom: 14px;
+		  text-align: center;
+	}
+	
+	.loading-more-text {
+		  font-size: 28rpx;
+		  color: #999;
+	}
+
+</style>

+ 638 - 0
pages_course/commentN.nvue

@@ -0,0 +1,638 @@
+<template>
+	<view class="es content es-bc-white" style="position:relative;flex-direction: column;" @touchmove.stop>
+		 <view class="comtentBox es-bc-white es-pb-40 es-br-20 flex"  >
+			<view class="es es-h-60" >
+				<view class="es es-ac es-view-w-x es-h-44  es-mt-25"  >
+					<image class="es-w-35 es-h-31" src="/static/images/course/comment2.png"></image>
+					<text class="es-ml-20 es-fs-28 es-fw-600 es-f1">评论</text>
+					<text class="es-ml-1 es-fs-30 es-c-99">({{totalNum}})</text>
+				</view>
+				<image @tap="closePopup()" style="position: absolute;right:30rpx;top:20rpx" class="es-w-40 es-h-40" src="/static/images/close40.png"></image>
+			</view>
+			<view class="es-view-w-x es-mt-15" >
+				<view class="es es-ac es-mt-25 es-c" style="border-bottom: 1px #FAFAFA solid;">
+					<view class="es-on-act nav es-icon-auto es es-ac es-pc x-c es-br-10"  :class="sortType==1?'ac':'br'" @tap="tapCommentType(1)">
+						<image src="/static/images/course/icon-2.png" class="es-icon-20"></image>
+						<text class="es-ml-19 es-fs-28 es-c" :class="1?'es-fw-600':''">热度</text>
+					</view>
+					
+					<view class="es-on-act nav es-icon-auto es es-ac es-pc es-br-10 es-ml-14" :class="sortType==2?'ac':'br'" @tap="tapCommentType(2)">
+						<image src="/static/images/course/icon-2.png" class="es-icon-20"></image>
+						<text class="es-ml-19 es-fs-28 es-c" :class="0?'es-fw-600':''">时间</text>
+					</view>
+				</view>
+				
+				<list loadmoreoffset="100" @loadmore="loadmore" :style="{'height':listHei+'px'}" >
+						<refresh @pullingdown='onpullingdown' @refresh="onrefresh" :display=" refreshing ? 'show' : 'hide' " class="refresh x-c ">
+							<loading-indicator style="width: 22px;height: 22px;color:#999;"></loading-indicator>
+							<text class="es-fs-32 es-ml-8">{{refreshText}}</text>
+						</refresh>
+						<cell v-for="(item, index) in dataList"  :key="index">
+							
+							 <view   class="es es-mt-30" >
+								<image class="es-icon-80 es-br" :src="isEmpty(item.avatar)?defHeadImg:item.avatar"></image>
+								<view  class="es-f1 es-ml-21" style="display:flex;flex:1;">
+									<text class="es-fs-28 es-fw">{{ isEmpty(item.nickName)?"暂无昵称":item.nickName  }}</text>
+									<text class="es-c-99 es-fs-22 es-mt-4">{{ formatDate(item.createTime) }}</text>
+									<text class="es-fs-26 es-fw-500 es-pt-24 es-pb-25">{{item.content}}</text>
+									<view class="es es-c-99  es-pb-10">
+										<view class="es es-ac" @tap="doLike(item,index)">
+											<image class="es-icon-28" :src="item.isLike?'/static/images/course/dianzan_on_icon.png':'/static/images/course/dianzan_icon.png'"></image>
+											<text class="es-ml-11 es-fs-26">{{item.likes}}</text>
+										</view>
+										<view class="es es-ac es-ml-23" @tap="doReply(item)">
+											<image class="es-icon-28" src="/static/images/course/pingjia_icon.png"></image>
+											<text class="es-ml-11 es-fs-26">{{item.replyCount}}</text>
+										</view>
+										<view class="es-f1"></view>
+										<view class="es es-ac es-pc es-icon-33" style="position:absolute;right:20rpx;"  v-if="isMySend(item)"  @tap="delComment(item)">
+											<image src="/static/images/course/more_icon16.png" class="es-w-32 es-h-32"></image>
+										</view>
+									</view>
+									<view v-if="item.replyList && item.replyList.length>0" class="es-br-20 es-pt-10 es-pb-10 es-view-w-x es-mt-25"
+										style="background-color: #F5F7FA;">
+										<view class="es es-pt-20 es-pb-20" :class="cIndex<item.replyList.length-1?'comment-reply-item':''"  v-for="(cItem,cIndex) in item.replyList"    :key="cIndex">	
+											<image class="es-icon-60 es-br" :src="isEmpty(cItem.avatar)?defHeadImg:cItem.avatar"></image>
+											<view class="es-f1 es-ml-11" style="display:flex;flex:1;">
+												<text class="es-fs-24 es-fw-600">{{cItem.nickName || '暂无昵称'}}</text>
+												<text class="es-fs-22 es-c-99 es-mt-10 es-mb-10">{{ formatDate(cItem.createTime) }}</text>
+												<text class="es-fs-24 es-fw-500 es-pb-20">{{cItem.content}}</text>
+												
+												<view class="es-f1 es-c-99">
+													<view class="es es-ac" @tap="doLike(cItem,index,cIndex,1)">
+														<image class="es-icon-28" :src="cItem.isLike?'/static/images/course/dianzan_on_icon.png':'/static/images/course/dianzan_icon.png'"></image>
+														<text class="es-ml-11 es-fs-26">{{cItem.likes}}</text>
+													</view>
+													
+													<view class="es es-ac es-pc es-icon-33" style="position:absolute;right:0"  v-if="isMySend(cItem)"  @tap="delComment(cItem)">
+														<image src="/static/images/course/more_icon16.png" class="es-w-32 es-h-32"></image>
+													</view>
+												</view>
+											</view>
+										</view>
+										
+										<view @tap="replayClick(item,index)" v-if="item.replyList && item.replyList.length>3"  class="es es-ac es-mt-20 es-pb-20">
+											<view class="es-f1"></view>
+											<text v-if="item.expand==undefined"  class="es es-ac es-fs-22 es es-ac es-pc es-view-w-x es-pt-10 es-pb-10 es-br es-brc es-c">
+												{{item.replyList.length-3}}条回复>
+											</text>
+										</view>
+									</view>
+								
+								</view>
+							</view>
+						</cell>
+				 
+						<cell v-if="showLoadMore || dataList.length > 4">
+							  <view class="loading-more">
+								  <text class="loading-more-text">{{loadMoreText}}</text>
+							  </view>
+						</cell>
+						
+						<cell>
+							<view v-if="totalNum==0 && reqDataCode!=0"  class="y-f" style="height: 300px;padding-top: 200rpx;" >
+								<image @tap="refreshPage()" class="es-w-124 es-h-80" style="width:187rpx;height:120rpx;" src="/static/image/nodata.png"></image>
+								<text @tap="refreshPage()" class="es-c-33">{{reqDataCode==1?'暂无数据':'请求超时'}}</text>
+							</view>
+						</cell>
+				</list>
+			  
+			</view>
+		</view>
+    
+		<view  :style="'height:'+(KeyHight)+'px'" style="background-color: red;" v-if="KeyHight>0"></view>
+		<view class="es-h-120 es-auto-bottom" v-else></view>
+	
+		<cover-view class="fix-bottom  es-b-t" >
+			<view class="es-h-120  es-view-w-x es es-ac flex" >
+				<view class="es-f1 es-br es-ipt flex ac es-h-70 es-pl-20 es-pr-20 es-pt-10" >
+					<input style="width:100%;font-size: 28rpx;" ref="txtPing" v-model="pingContent" :focus="isInputFocus" 
+					 @blur="onblur" :placeholder="placeholder" placeholder-class="es-c" />
+				</view>  
+				<text class="es-w-120 es-h-60 es-fs-30 es-fw-600 es-ml-20 es-c " style="text-align: center;line-height: 60rpx;" :adjust-position="false"
+					:always-system="true" @tap="doSend">发布</text>
+			</view>
+			<view class="es-auto-bottom" v-if="!KeyHight"></view>
+		</cover-view>
+
+	</view>
+</template>
+
+<script>   
+	
+	import { getCourseById,getCommentList,addComment,updateComment,commentDoLike,deleteComment } from '@/api/course'
+	import { isLogin,isEmpty } from '@/utils/common'
+	import { showLoginPage } from '@/utils/login'
+	import dayjs from 'dayjs';
+	export default {
+		data() {
+			return {
+				pingContent: '',
+				KeyHight:0,
+				cateId:5,
+				courseId:0,
+				totalNum:0,
+				courseData:{},
+				pageHei:400,
+				downOption: {
+					auto: false ,// 不自动加载 (mixin已处理第一个tab触发downCallback)
+					use:true
+				},
+				upOption: {
+					use:true,
+					auto: false, // 不自动加载
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量
+					},
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						btnText: '去看看'
+					},
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				   
+				},
+				pingType:1,//1:评论   2:回复
+				dataList: [], //列表数据
+				replyParentId:null,
+				txtPing:null,
+				sortType:1,
+				isInputFocus:false,
+				showBoottom:true,
+				placeholder:"发布一条友善的评论",
+				defHeadImg:"/static/images/hall/my_heads_icon.png",
+				myUserInfo:{userId:0},
+				delCommentId:null,
+				mescroll:null,
+				adpid: '',
+		        loadMoreText:"加载中...",
+		        showLoadMore:false,
+				isLastPage:false,
+				refreshing: false,
+				refreshText: '下拉刷新',
+				pageNum:1,
+				listHei:0,
+				reqDataCode:0 //1:正常加载 -1 请求超时
+			}
+		},
+		mounted() {
+			try {
+				console.log("qxj commentN mounted");
+				let that=this;
+				this.subNVue= uni.getSubNVueById('commentN');
+				uni.$on('comment', (data) => {  
+				    that.videoId=data.videoId;
+					that.courseId=data.courseId;
+					that.getCourseInfo();
+					that.upCallback();
+				}); 
+				
+				const res = uni.getSystemInfoSync();
+				// this.listHei=res.windowHeight*1;
+				// this.listHei=uni.upx2px(1150 - 240);
+				this.listHei= res.windowHeight*0.85 - uni.upx2px(324);
+				
+				this.txtPing = this.$refs["txtPing"];
+				uni.onKeyboardHeightChange(this.boardHeightChange);
+				
+				if(this.isLogin()){
+					let useInfo=uni.getStorageSync('userInfo');
+					if(!!useInfo && useInfo!=null){
+						this.myUserInfo=JSON.parse(useInfo);
+					}
+				}
+			
+			} catch (e) {
+				
+			}
+		},
+		onUnload() {
+			console.log("qxj commentN onUnload");
+			uni.offKeyboardHeightChange(this.boardHeightChange);
+			uni.$off("comment");
+		},
+		methods: {
+		    getCourseInfo(){
+		       getCourseById(this.courseId).then(res => {
+		    		if(res.code==200){
+		    			this.courseData=res.data;
+		    		}
+		    	},
+		    	rej => {}
+		       );
+		    },
+			onpullingdown(e) {
+			    if (this.refreshing) return;
+				if (Math.abs(e.pullingDistance) > Math.abs(e.viewHeight)) {
+					this.refreshText = '下拉更新'
+				} else {
+					this.refreshText = '释放更新'
+				}
+			 },
+			 onrefresh(e) {
+			   console.log('onRefreshing...');
+			    this.refreshing = true;
+				this.pageNum=1;
+			    this.upCallback();
+			    if (this.refreshing) return;
+			},
+			loadmore(){
+				if(this.isLastPage){
+					return;
+				}
+				console.log("loadmore");
+				this.pageNum++;
+				this.showLoadMore = true;
+				setTimeout(() => {
+					this.upCallback();
+				}, 300);
+			},
+			/*下拉刷新的回调 */
+			upCallback() {   	
+				/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+				const params={"courseId":this.courseId,"sortType":this.sortType};
+				uni.showLoading({title:""});
+				getCommentList(params,this.pageNum).then(res => {
+					    uni.hideLoading();
+						if(res.code==200){
+							setTimeout(()=>{
+								//this.mescroll.endByPage(res.data.list.length, res.data.pages);
+								if(this.pageNum == 1) this.dataList = []; //如果是第一页需手动制空列表
+								this.dataList=this.dataList.concat(res.data.list); //追加新数据
+								this.totalNum=res.data.total;
+								this.reqDataCode=1;
+								this.refreshing = false;
+								this.isLastPage=res.data.isLastPage;
+								if(this.isLastPage){
+									this.refreshText = '加载完成'
+								}
+								if(res.data.isLastPage){
+									this.loadMoreText = "";
+									this.showLoadMore=false;
+								}
+							},200);
+						}else{
+							this.refreshing = false;
+							this.refreshText = '加载完成';
+							this.reqDataCode=-1;
+						}
+					},
+					rej => {}
+				).catch(()=>{
+					//联网失败, 结束加载
+					this.refreshing = false;
+					this.refreshText = '加载完成';
+					this.reqDataCode=-1;
+				});
+			},
+			closePopup() {
+			   const subNVue = uni.getSubNVueById('commentN');
+			   subNVue.hide('slide-out-bottom');
+			},
+			refreshPage(){
+				 this.pageNum=1;
+			     this.upCallback();
+			},
+			tapCommentType(type){
+				this.sortType=type;
+				this.refreshPage();
+			},
+			isMySend(item){
+				if(this.myUserInfo!=null && this.myUserInfo.userId==item.userId){
+					return true;
+				}
+				return false;
+			},
+			doSend(){
+			   
+			     if(this.isEmpty(this.pingContent)){
+			     	uni.showToast({title: '评论内容不能为空',icon: 'none'});
+			     	return;
+			     }
+				 if(!isLogin()){
+					showLoginPage();
+					return;
+				  }
+			     let params={"courseId":this.courseId,"content":this.pingContent,"type":this.pingType};
+			     if(!!this.replyParentId){
+			     	params["parentId"]=this.replyParentId;
+			     }
+			     uni.showLoading({title:""});
+			     addComment(params).then(res => {
+			     		uni.hideLoading();
+			     		if(res.code==200){
+			     			uni.showToast({title: '添加评论成功',icon: 'none'});
+			     		}else{
+			     			uni.showToast({title: res.msg,icon: 'none'});
+			     		}
+			     		this.placeholder="发布一条友善的评论";
+			     		this.pingType=1;
+			     		this.pingContent='';
+			     		this.refreshPage();
+			     		
+			     	},
+			     	rej => {}
+			     );
+			     			
+			},
+			doReply(item){
+				this.replyParentId=item.commentId;
+				this.pingType=2;
+				let placeHolder=this.isEmpty(item.nickName)?"回复":"回复"+item.nickName;
+				this.placeholder=placeHolder;
+				this.pingContent='';
+				//this.isInputFocus=true;
+			    this.$nextTick(()=>{
+			    	this.$refs.txtPing.focus();
+			    });
+			
+			},
+			replayClick(item,index){
+				item.expand=true;  
+				this.dataList[index]=item;
+				this.$forceUpdate(); // 如果你需要强制刷新,可以调用 $forceUpdate()
+			},
+			expandReplyAct(item,idx){
+				return true
+			},
+			onblur(){
+				console.log("qxj onblur");
+			    
+			},
+			doLike(item,index,childIdx,type){
+				if(!this.isLogin()){
+					showLoginPage();
+					return;
+				}
+				const params={"commentId":item.commentId};
+				uni.showLoading({title:""});
+				commentDoLike(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							if(item.isLike==0){
+								item.likes+=1;
+								item.isLike=1;
+							}else{
+								item.likes=1;
+								item.isLike=0;
+							}
+							// 	this.dataList[index]=item;
+							// this.$forceUpdate();
+							uni.showToast({title: '操作成功',icon: 'none'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						
+					},
+					rej => {}
+				);
+			},
+			delComment(item){
+				this.delCommentId=item.commentId;
+				let that = this;
+				uni.showModal({
+				      title:  '系统提示',
+				      content:  '确定删除吗',
+				      success:  function  (res)  {
+				          if  (res.confirm)  {
+							    console.log("qxj confirm");
+				                that.delCommentAct();
+				          }  else if  (res.cancel)  {
+				               console.log("qxj cancel");
+				          }
+				      }
+				});
+			},
+			delCommentAct(){
+				if(!this.isLogin()){
+					showLoginPage();
+					return;
+				}
+				uni.showLoading({title:""});
+				deleteComment(this.delCommentId).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: '操作成功',icon: 'none'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						this.refreshPage();
+					},
+					rej => {}
+				);
+			},
+			boardHeightChange:function(res){
+				console.log('changeHeight', res.height);
+				if(res.height==0){
+					this.placeholder="发布一条友善的评论";
+					//this.pingContent='';
+					this.isInputFocus=false;
+				}else{
+					this.isInputFocus=true;
+					
+				}
+				this.KeyHight = res.height;
+			},
+		    isLogin() {
+		    	let obj=uni.getStorageSync("AppToken");
+		    	return !!obj;
+		    },
+			isEmpty(obj) {
+				if (typeof obj == "undefined" || obj == null || obj == "") {
+					return true;
+				} else {
+					return false;
+				}
+			},
+			formatDate(dateStr) {
+				let formatStr = "";
+				let formatDate;
+				if(dateStr==null){
+					return formatStr;
+				}
+				let date = dayjs(dateStr,'YYYY-MM-DD HH:mm:ss');
+				let today = dayjs();
+				if (date.year() != today.year()) {
+					formatDate = date.format('YYYY-MM-DD HH:mm');
+				} 
+				else if (date.month() === today.month()) {
+					switch (date.date() - today.date()) {
+						case 0:
+							formatDate = date.format('今天 HH:mm');
+							break;
+						case -1:
+							formatDate = date.format('昨天 HH:mm');
+							break;
+						case 1:
+							formatDate = date.format('明天 HH:mm');
+							break;
+						default:
+							formatDate = date.format('MM-DD HH:mm');
+							break;
+					}
+				} 
+				else if (date.month() - today.month() === 0 && date.date() === 1) {
+					formatDate = date.format('明天 HH:mm');
+				} 
+				else {
+					formatDate = date.format('MM-DD HH:mm');
+				}
+				return formatDate;
+			}
+			
+		},
+		onHide() {
+			 console.log("qxj commentN onHide");
+		},
+		onClose() {
+			 console.log("qxj commentN onClose");
+		},
+		beforeDestroy() {
+		    console.log("qxj commentN beforeDestroy");
+		    uni.$off('comment');
+		},
+		destroyed() {
+			console.log("qxj commentN destroyed");
+			// 注销全局配置监听
+			uni.$off("comment");
+		}
+	}
+</script>
+
+<style scoped>
+	
+	page {
+		background-color: white;
+	}
+	
+	.fl-row{
+		display: flex;
+		flex-direction: row;
+	}
+	  
+	.comtentBox{
+		background-color:#171a1d;
+		box-sizing: border-box;
+	}
+
+	.banner {
+		height: 430rpx;
+	}
+
+	.es-icon-course-bg {
+		background-image: url(/static/images/course/bg.png);
+	}
+
+	.es-icon-course-icon-1 {
+		background-image: url(/static/images/course/icon-1.png);
+	}
+
+	.es-icon-course-icon-2 {
+		background-image: url(/static/images/course/icon-2.png);
+	}
+
+	.es-icon-course-icon-3 {
+		background-image: url(/static/images/course/icon-3.png);
+	}
+
+	.es-icon-course-close {
+		background-image: url(/static/images/course/close.png);
+	}
+
+	.es-icon-course-info {
+		background-image: url(/static/images/course/info.png);
+	}
+
+	.es-icon-course-bg2 {
+		background-image: url(/static/images/course/bg2.png);
+	}
+
+	.es-icon-course-bg3 {
+		background-image: url(/static/images/course/bg3.png);
+	}
+
+	.es-icon-course-comment {
+		background-image: url(/static/images/course/comment.png);
+	}
+
+	.es-icon-course-comment2 {
+		background-image: url(/static/images/course/comment2.png);
+	}
+
+	.es-icon-course-nav-bg,
+	.nav {
+		background-image: url(/static/images/course/nav-bg.png);
+	}
+
+	.es-icon-course-nav-bg-ac,.ac {
+		background-color: #ffd8c4;
+	}
+
+	.es-icon-course-point {
+		background-image: url(/static/images/course/point.png);
+	}
+
+	.es-icon-course-share {
+		background-image: url(/static/images/course/share.png);
+	}
+
+	.es-icon-course-like2 {
+		background-image: url(/static/images/course/like2.png);
+	}
+
+	.es-icon-course-like2-ac {
+		background-image: url(/static/images/course/like2-ac.png);
+	}
+
+	.item {
+		width: calc(33.33% - 14rpx);
+	}
+
+	.nav {
+		width: 216rpx;
+		height: 60rpx;
+	}
+
+	.comment-reply-item {
+		/* border-bottom: 1px #fff solid; */
+	}
+
+
+	.br{
+	  border: 1px solid #FF5C03;
+	}
+	
+	.fix-bottom{
+		position: fixed;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		/* width: 100%; */
+		z-index: 999;
+		background-color: white;
+	
+	}
+	
+	.refresh {
+		display: flex;
+		flex-direction: row; 
+	    justify-content: center;
+		height: 50px;
+	}
+	
+	.loading-more {
+		  align-items: center;
+		  justify-content: center;
+		  padding-top: 14px;
+		  padding-bottom: 14px;
+		  text-align: center;
+	}
+	
+	.loading-more-text {
+		  font-size: 28rpx;
+		  color: #999;
+	}
+	
+	
+ 
+</style>

+ 584 - 0
pages_course/components/comment.vue

@@ -0,0 +1,584 @@
+<template>
+	<view>
+	<view class="es es-ac es-mt-25 es-pb-30 es-fs-22 es-c" style="border-bottom: 1px #FAFAFA solid;">
+		<view class="es-on-act nav es-icon-auto es es-ac es-pc" :class="sortType==1?'ac':''" @tap="tapCommentType(1)">
+			<view class="es-icon-20 es-icon-course-icon-2"></view>
+			<view class="es-ml-19" :class="1?'es-fw-600':''">热度</view>
+		</view>
+		<view class="es-on-act nav es-icon-auto es es-ac es-pc es-ml-14" :class="sortType==2?'ac':''" @tap="tapCommentType(2)">
+			<view class="es-icon-20 es-icon-course-icon-2"></view>
+			<view class="es-ml-19" :class="0?'es-fw-600':''">时间</view>
+		</view>
+	</view>
+
+	<mescroll-body   @init="mescrollInit" top="0"  :down="downOption" :up="upOption"  @down="downCallback" @up="upCallback" @emptyclick="emptyClick">
+		 <view class="es-bc-white es-br-20">
+			<view class="es-view-w-x1 es-mt-25">
+				<view  v-for="(item, index) in dataList"  :key="index" class="es es-mt-20">
+					<view class="es-icon-80 es-br">
+						<image :src="$isEmpty(item.avatar)?defHeadImg:item.avatar"></image>
+					</view>
+					<view  class="es-f1 es-ml-21">
+						<view class="es-fs-28 es-fw">{{item.nickName || '暂无昵称'}}</view>
+						<view class="es-c-99 es-fs-22 es-mt-4">{{ utils.formatDate(item.createTime) }}</view>
+						<view class="es-fs-26 es-fw-500 es-pt-24 es-pb-25">
+							{{item.content}}
+						</view>
+						<view class="es es-c-99">
+							<view class="es es-ac" @tap="doLike(item)">
+								<view class="es-icon-28" :class="item.isLike?'es-icon-course-like2-ac':'es-icon-course-like2'" ></view>
+								<view class="es-ml-11 es-fs-26">{{item.likes}}</view>
+							</view>
+							<view class="es es-ac es-ml-23" @tap="openReplyPop(item)">
+								<view class="es-icon-28 es-icon-course-comment"></view>
+								<view class="es-ml-11 es-fs-26">{{item.replyCount}}</view>
+							</view>
+							<view class="es-f1"></view>
+							<view class="es es-ac es-pc es-icon-33"  v-if="isMySend(item)" @tap="delComment(item)">
+								<image src="/static/images/hall/more_icon16.png" class="es-w-32 es-h-32"></image>
+							</view>
+						</view>
+						
+						<view v-if="item.replyList && item.replyList.length>0" class="es-br-20 es-pt-10 es-pb-10 es-view-w-x es-mt-25" style="background-color: #F6F9F8;">
+							<view class="es es-pt-20 es-pb-20"  v-for="(cItem,idx) in item.replyList"  :key="idx">
+								<view class="es-icon-60 es-br">
+									<image :src="$isEmpty(cItem.avatar)?defHeadImg:cItem.avatar"></image>
+								</view>
+								<view class="es-f1 es-ml-11">
+									<view class="es-fs-24 es-fw-600">{{cItem.nickName || '暂无昵称'}}</view>
+									<view class="es-fs-22 es-c-99 es-mt-10 es-mb-10">{{ utils.formatDate(cItem.createTime) }}</view>
+									<view class="es-fs-24 es-fw-500 es-pt-8 es-pb-14">{{cItem.content}}</view>
+									
+									<view class="es es-c-99">
+										<view class="es es-ac" @tap="doReplyLike(cItem)">
+											<view class="es-icon-28" :class="cItem.liked?'es-icon-course-like2-ac':'es-icon-course-like2'" ></view>
+											<view class="es-ml-11 es-fs-26">{{cItem.likes}}</view>
+										</view>
+
+										<view class="es es-ac es-pc es-icon-33"  v-if="isMySend(cItem)" @tap="delComment(cItem)">
+											<image src="/static/images/hall/more_icon16.png" class="es-w-32 es-h-32"></image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+																
+						<view @tap="replayClick(item,index)" v-if="item.showReplyBtn"  class="es es-ac es-mt-20 es-pb-20">
+							<text  class="es es-ac es-fs-24 es es-ac es-pc  es-pt-10 es-pb-10  es-c-99">
+								——展开更多回复
+							</text>
+						</view>
+					
+					</view>
+				</view>
+			</view>
+		</view>
+	</mescroll-body>	
+	
+	<view class="" :style="'height:'+(KeyHight)+'px'" v-if="KeyHight" ></view>
+	<view class="es-h-120 es-auto-bottom" v-else></view>
+	
+	<view class="es-fix-bottom es-bc-white es-b-t" v-if="showBoottom">
+		<view class="es-h-120 es-view-w-x es es-ac">
+			<view class="es-f1 es-ipt es-br es-icon-auto es-icon-course-bg2">
+				<input ref="txtPing" v-model="pingContent" :focus="isInputFocus" @blur="onblur" :placeholder="placeholder" placeholder-class="es-c" />
+			</view>  
+			<view class="es-fs-30 es-fw-600 es-ml-50 es-c" :adjust-position="false"
+				:always-system="true" @tap="commentSend">发布</view>
+		</view>
+		<view class="es-auto-bottom" v-if="!KeyHight"></view>
+	</view>
+	
+	<!-- 回复弹出框 -->
+	<uni-popup ref="popup" background-color="#fff" >
+		<view class="popup-content">
+			<view class="es-h-150 es-view-w-x es es-ac">
+					<!-- <input ref="txtPing" v-model="pingContent" :focus="isInputFocus" @blur="onblur" :placeholder="placeholder" placeholder-class="es-c" /> -->
+				<textarea name="replyPing" v-model="replyContent"  style="background-color: #f7f7f7;" :placeholder="rPlaceholder" :focus="isRInputFocus" @blur="onReplyBlur" placeholder-class="place-hold"></textarea>	
+				<view class="es-fs-30 es-fw-600 es-ml-20 es-c"  :adjust-position="false"
+					:always-system="true"  @tap="replySend">发布</view>
+			</view>
+		</view>
+	</uni-popup>
+	</view>
+</template>
+
+<script>
+	
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import { getCourseById,getCommentList,addComment,updateComment,commentDoLike,deleteComment } from '@/api/course'
+	export default {
+		mixins: [MescrollMixin],
+		props: {
+			courseId: {
+				type: [String, Number],
+				default: 0
+			}
+		},
+		data() {
+			return {
+				pingContent: '',
+				KeyHight:0,
+				cateId:5,
+				courseId1:0,
+				totalNum:0,
+				courseData:{},
+				pageHei:400,
+				downOption: {
+					auto: false ,// 不自动加载 (mixin已处理第一个tab触发downCallback)
+					use:true
+				},
+				upOption: {
+					auto: false, // 不自动加载
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量
+					},
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						btnText: '去看看',
+						icon:"/static/image/nodata.png"
+					},
+					textNoMore:"已经到底了",
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				    use:true,
+				},
+				
+				pingType:1,//1:评论   2:回复
+				dataList: [], //列表数据
+				replyParentId:null,
+				txtPing:null,
+				sortType:1,
+				isInputFocus:false,
+				showBoottom:false,
+				placeholder:"发布一条友善的评论",
+				defHeadImg:"/static/images/hall/my_heads_icon.png",
+				myUserInfo:{userId:0},
+				rpyPageNum:0,
+				replyContent:"",
+				rPlaceholder:"",
+				delCommentId:null,
+				isLastPage:false,
+				isRInputFocus:false,
+			}
+		},
+		mounted() {
+			try {
+				console.log("qxj comment mounted");
+				const res = uni.getSystemInfoSync();
+				let navigationBarHeight=88,tabHei=120;
+				let tempHei=res.windowHeight-uni.upx2px(navigationBarHeight+tabHei);
+				console.log("qxj tempHei:"+tempHei);
+				this.pageHei=tempHei+"px";
+				this.checkUser();
+				let that=this;
+				uni.$on('reachBottom', (data) => {
+					if(!that.isLastPage){
+						that.mescroll.triggerUpScroll();
+					}
+				}); 
+			
+			} catch (e) {
+				
+			}
+		},
+		onLoad(options) {
+			console.log("qxj comment onLoad");
+			this.txtPing = this.$refs["txtPing"];
+			uni.onKeyboardHeightChange(this.boardHeightChange);
+			
+		},
+		onUnload: function() {
+			uni.offKeyboardHeightChange(this.boardHeightChange);
+		},
+		methods: {
+			onReplyBlur(){
+			    this.isRInputFocus=false;
+				//this.rPlaceholder="发布一条友善的评论";
+			},
+			getCourseInfo(){
+			   getCourseById(this.courseId).then(res => {
+					if(res.code==200){
+						this.courseData=res.data;
+					}
+				},
+				rej => {}
+			   );
+			},
+			upCallback(page) {   	
+				/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+				const params={"courseId":this.courseId,"sortType":this.sortType};
+				//uni.showLoading({title:""});
+				getCommentList(params,page.num).then(res => {
+					    //uni.hideLoading();
+						if(res.code==200){
+							setTimeout(()=>{
+								this.mescroll.endByPage(res.data.list.length, res.data.pages);
+								this.isLastPage=res.data.isLastPage;
+								if(this.isLastPage){
+									this.mescroll.showNoMore()
+								}
+								if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+								let dataList=res.data.list;
+								// dataList.forEach((item, index)  =>  {
+								// 	if(item.replyCount>0){
+								// 		item.showReplyBtn=true;
+								// 		item.isLastReplyPage=false;
+								// 	}else{
+								// 		item.showReplyBtn=false;
+								// 		item.isLastReplyPage=true;
+								// 	}
+								// 	item.rpyPageNum=1;
+								// });
+								this.dataList=this.dataList.concat(dataList); //追加新数据
+							},100);
+						}
+					},
+					rej => {}
+				).catch(()=>{
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				});
+			},
+			refreshPage(){
+			    this.mescroll.hideTopBtn();
+			    this.mescroll.resetUpScroll();
+			},
+			tapCommentType(type){
+				this.sortType=type;
+				this.refreshPage();
+			},
+			isMySend(item){
+				if(this.myUserInfo!=null && this.myUserInfo.userId==item.userId){
+					return true;
+				}
+				return false;
+			},
+			doReply(item){
+				this.replyParentId=item.commentId;
+				this.pingType=2;
+				this.placeholder="回复"+item.nickName;
+				this.$nextTick(()=>{
+					this.pingContent='';
+					this.isInputFocus=true;
+				});
+				// this.txtPing.placeholder="回复";
+			},
+			replayClick(item,index){
+				item.expand=true;  
+				this.dataList[index]=item;
+				this.$forceUpdate(); // 如果你需要强制刷新,可以调用 $forceUpdate()
+			},
+			onblur(){
+			    this.isInputFocus=false;
+				this.placeholder="发布一条友善的评论";
+			},
+			doLike(item){
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				const params={"commentId":item.commentId};
+				uni.showLoading({title:""});
+				commentDoLike(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: '操作成功',icon: 'none'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						this.refreshPage();
+					},
+					rej => {}
+				);
+			},
+			
+			doReplyLike(item){
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				const params={"commentId":item.commentId};
+				uni.showLoading({title:""});
+				commentDoLike(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							if(item.liked==0){
+								item.likes+=1;
+								item.liked=1;
+							}else{
+								item.likes-=1;
+								item.liked=0;
+							}
+							// this.dataList[index]=item;
+							// this.$forceUpdate();
+							uni.showToast({title: '操作成功',icon: 'none',position:'bottom'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						
+					},
+					rej => {}
+				);
+			},
+			/*打开回复弹框*/
+			openReplyPop(item){
+				this.rPlaceholder="回复"+item.nickName;
+			    this.$refs.popup.open("bottom")
+				this.replyParentId=item.commentId;
+				this.$nextTick(()=>{
+					this.replyContent='';
+					this.isRInputFocus=true;
+				});
+			},
+			//点击评论发送按钮
+			commentSend(){
+			    this.replyParentId=null;
+				if(this.$isEmpty(this.pingContent)){
+					uni.showToast({title: '评论内容不能为空',icon: 'none',position:'bottom'});
+					return;
+				}
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				let params={"courseId":this.courseId,"content":this.pingContent};
+				this.postComment(params);
+			},
+			//点击回复发送按钮
+			replySend(){
+				if(this.$isEmpty(this.replyContent)){
+					uni.showToast({title: '回复内容不能为空',icon: 'none',position:'bottom'});
+					return;
+				}
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				let params={"courseId":this.courseId,"content":this.replyContent,"parentId":this.replyParentId};
+				this.postComment(params);
+			},		
+			//提交评论请求
+			postComment(params){
+				let that=this;
+				uni.showLoading({title:""});
+				addComment(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.$emit('refreshTitle',that.totalNum++);
+							this.pingContent="";
+							this.replyContent="";
+							this.sendNotify(this.totalNum++);
+							if(!this.replyParentId){
+								uni.showToast({title: '添加评论成功',icon: 'none',position:'bottom'});
+							}else{
+								uni.showToast({title: '添加回复成功',icon: 'none',position:'bottom'});
+							}
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						this.placeholder="发布一条友善的评论";
+						this.pingType=1;
+						this.pingContent='';
+						this.refreshPage();
+						
+					},
+					rej => {}
+				);		
+			},
+			delComment(item){
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				let that = this;
+				uni.showModal({
+				      title:  '系统提示',
+				      content:  '确定删除吗',
+				      success:  function  (res)  {
+				          if (res.confirm)  {
+							    console.log("qxj confirm");
+				                that.delCommentAct(item);
+				          }  else if  (res.cancel)  {
+				             
+				          }
+				      }
+				});
+			},
+			delCommentAct(item){
+				this.delCommentId=item.commentId;
+				this.delCommentRequest(this.delCommentId);
+			},
+			delCommentRequest(params){
+				let that=this;
+				uni.showLoading({title:""});
+				deleteComment(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: '操作成功',icon: 'none'});
+							this.sendNotify(this.totalNum-1);
+							setTimeout(function(){
+								that.refreshPage();
+							},1000)
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+					},
+					rej => {}
+				);
+			},	
+			
+			//点击空布局按钮的回调
+			emptyClick(){
+				this.mescroll.resetUpScroll(true);
+			},
+			boardHeightChange:function(res){
+				console.log('changeHeight', res.height);
+				//转化为rpx 
+				this.KeyHight = res.height;
+			},
+			showBotBar(smsNum){
+				this.showBoottom=true;
+				this.totalNum=smsNum;
+				console.log("qxj showBotBar smsNum:"+smsNum);
+				this.checkUser();
+				setTimeout(()=>{
+					this.refreshPage();
+				},500);
+			},
+			hideBotBar(){
+				this.showBoottom=false;
+			},
+			sendNotify(num){
+				uni.$emit('refreshTitle',num);
+			},
+			checkUser(){
+				if(this.$checkToken()){
+					let useInfo=uni.getStorageSync('userInfo');
+					if(!!useInfo && useInfo!=null){
+						this.myUserInfo=JSON.parse(useInfo);
+					}
+				}
+			},
+		}
+	}
+</script>
+
+<style>
+	
+	page {
+		background-color: white;
+	}
+	
+	.es-view-w-x1{
+		padding-left: 20rpx;
+		padding-right: 20rpx;
+		position: relative;
+	}
+
+	.banner {
+		height: 430rpx;
+	}
+
+	.es-icon-course-bg {
+		background-image: url(/static/images/course/bg.png);
+	}
+
+	.es-icon-course-icon-1 {
+		background-image: url(/static/images/course/icon-1.png);
+	}
+
+	.es-icon-course-icon-2 {
+		background-image: url(/static/images/course/icon-2.png);
+	}
+
+	.es-icon-course-icon-3 {
+		background-image: url(/static/images/course/icon-3.png);
+	}
+
+	.es-icon-course-close {
+		background-image: url(/static/images/course/close.png);
+	}
+
+	.es-icon-course-info {
+		background-image: url(/static/images/course/info.png);
+	}
+
+	.es-icon-course-bg2 {
+		background-image: url(/static/images/course/bg2.png);
+	}
+
+	.es-icon-course-bg3 {
+		background-image: url(/static/images/course/bg3.png);
+	}
+
+	.es-icon-course-comment {
+		background-image: url(/static/images/hall/pingjia_icon.png);
+	}
+
+	.es-icon-course-nav-bg,
+	.nav {
+		background-image: url(/static/images/course/nav-bg.png);
+	}
+
+	.es-icon-course-nav-bg-ac,
+	.nav.ac {
+		background-image: url(/static/images/course/nav-bg-ac.png);
+	}
+
+	.es-icon-course-point {
+		background-image: url(/static/images/hall/more_icon16.png);
+	}
+
+	.es-icon-course-share {
+		background-image: url(/static/images/course/share.png);
+	}
+
+	.es-icon-course-like2 {
+		background-image: url(/static/images/hall/dianzan_icon.png);
+	}
+
+	.es-icon-course-like2-ac {
+		background-image: url(/static/images/hall/dianzan_on_icon.png);
+	}
+
+
+
+	.item {
+		width: calc(33.33% - 14rpx);
+	}
+
+	.nav {
+		width: 216rpx;
+		height: 60rpx;
+	}
+
+	.es-ipt input {
+		padding-left: 43rpx;
+	}
+
+	.es-ipt,.es-ipt input {
+		
+	}
+	
+    
+    textarea{
+    	width: 100%;
+    	font-size: 28upx;
+    	font-family: PingFang SC;
+    	font-weight: 500;
+    	height: 140upx;
+    	line-height: 1.6;
+    	text-indent: 0.5em;
+        color: #666666;
+    }
+    .place-hold{
+    	font-size: 28upx;
+    	font-family: PingFang SC;
+    	font-weight: 500;
+    	color: #999999;
+    	padding:10rpx 0rpx;
+    }
+    
+	
+</style>

+ 243 - 0
pages_course/components/commentList.vue

@@ -0,0 +1,243 @@
+<template>
+	<view class="comment">
+		<view class="comment-avatar-info" v-for="(item, index) in commentList" :key="index">
+			<image class="comment-avatar" :src="$isEmpty(item.avatar)?defHeadImg:item.avatar" mode="aspectFill"></image>
+			<view class="comment-box">
+				<view class="comment-people">
+					<view class="comment-people-name">{{item.nickName}}</view>
+					<view class="comment-time">{{ $isEmpty(item.createTime)?"暂无昵称":utils.formatDate(item.createTime) }}</view>
+				</view>
+				<view class="comment-text">{{item.content}}</view>
+				<view class="comment-footer" >
+					<view class="comment-footer-l">
+						<view class="comment-footer-dianzan" @tap="doLike(item)">
+							<image  :src="(item.isLike!=undefined && item.isLike==true)?'/static/images/hall/dianzan_on_icon.png':'/static/images/hall/dianzan_icon.png'"></image>
+							<text>{{item.likes || '点赞'}}</text>
+						</view>
+						<view class="comment-footer-pingjia">
+							<image src="/static/images/hall/pingjia_icon.png"></image>
+							<text>{{item.replyCount || '回复'}}</text>
+						</view>
+					</view>
+					<image class="more-icon" v-if="isMySend(item)"  @tap="delComment(item)" src="@/static/images/course/more_icon16.png"></image>
+				</view>
+				
+				<!-- 子评论 -->
+				<view class="comment-avatar-info" style="padding-top: 24rpx;" v-for="(reply,idx) in item.commentReplys" :key="idx">
+					<image class="comment-avatar" src="@/static/images/hall/my_heads_icon.png" mode="aspectFill"></image>
+					<view class="comment-box">
+						<view class="comment-people">
+							<view class="comment-people-name">
+								<text>{{reply.replyInfo.userName}}</text>
+								<text class="reply" v-if="reply.parentReply.itemId != 0">回复</text>
+								<text v-if="reply.parentReply.itemId != 0">{{reply.parentReply.userName}}</text>
+							</view>
+							<view class="comment-time">{{reply.replyInfo.ctime}}</view>
+						</view>
+						<view class="comment-text">{{reply.replyInfo.content}}</view>
+					</view>
+				</view>
+				<view class="comment-morereply" v-if="item.replyCount > 2">
+					<text>查看全部{{item.replyCount}}条回复</text>
+					<image src="@/static/images/course/reply_more_icon.png"></image>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { addComment,commentDoLike,deleteComment } from '@/api/course'
+	export default {
+		name: "commentList",
+		props: {
+			commentList: {
+				type: Array,
+				default:function(){
+					return [  ];
+				}
+			}
+		},
+		data() {
+			return {
+				defHeadImg:"/static/images/hall/my_heads_icon.png",
+				delCommentId:null,
+				isLastPage:false,
+				myUserInfo:{userId:0},
+			};
+		},
+		mounted() {
+			if(!this.$checkToken()){
+				let useInfo=uni.getStorageSync('userInfo');
+				if(!!useInfo && useInfo!=null){
+					this.myUserInfo=JSON.parse(useInfo);
+				}
+			}
+		},
+		methods: {
+			doLike(item){
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				const params={"commentId":item.commentId};
+				uni.showLoading({title:""});
+				commentDoLike(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							if(!!item.isLike){
+								item.likes-=1;
+							}
+							else{
+								item.likes+=1;
+							}
+							item.isLike=!item.isLike;
+							uni.showToast({title: '操作成功',icon: 'none'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						//this.refreshPage();
+					},
+					rej => {}
+				);
+			},
+			
+			delComment(item){
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				let that = this;
+				uni.showModal({
+				      title:  '系统提示',
+				      content:  '确定删除吗',
+				      success:  function  (res)  {
+				          if (res.confirm)  {
+							    console.log("qxj confirm");
+				                that.delCommentAct(item,type);
+				          }  else if  (res.cancel)  {
+				             
+				          }
+				      }
+				});
+			},
+			delCommentAct(item,type){
+				this.delCommentId=item.commentId;
+				let params={"commentId":this.delCommentId};
+				if(type==1){
+					params["parentId"]=item.parentId;
+				}
+				this.delCommentRequest(params);
+			},
+			delCommentRequest(params){
+				let that=this;
+				uni.showLoading({title:""});
+				deleteComment(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: '操作成功',icon: 'none'});
+							this.sendNotify(this.totalNum-1);
+							setTimeout(function(){
+								that.refreshPage();
+							},1000)
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+					},
+					rej => {}
+				);
+			},	
+			isMySend(item){
+				if(this.myUserInfo!=null && this.myUserInfo.userId==item.userId){
+					return true;
+				}
+				return false;
+			},
+			
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.comment {
+		font-family: PingFang SC, PingFang SC;
+		font-size: 28rpx;
+		font-weight: 400;
+		color: #222222;
+		&-avatar-info {
+			// @include u-flex(row, flex-start, flex-start);
+			display: flex;
+			flex:1;
+			flex-direction: row;
+		}
+		&-avatar {
+			flex-shrink: 0;
+			width: 72rpx;
+			height: 72rpx;
+			border-radius: 50%;
+			overflow: hidden;
+			margin-right: 20rpx;
+		}
+		&-box {
+			display: flex;
+			flex:1;
+			flex-direction: column;
+		}
+		&-people-name {
+			@include u-flex(row, center, flex-start);
+			font-weight: 600;
+			margin-bottom: 4rpx;
+		}
+		.reply {
+			font-weight: 500;
+			font-size: 28rpx;
+			color: #999999;
+			margin: 0 12rpx;
+		}
+		&-time {
+			font-size: 22rpx;
+			color: #999999;
+		}
+		&-text {
+			padding: 20rpx 0 38rpx;
+			line-height: 38rpx;
+			word-break:break-all;
+		}
+		&-footer {
+			margin-bottom: 24rpx;
+			@include u-flex(row, center, space-between);
+			font-size: 24rpx;
+			color: #757575;
+			image {
+				width: 32rpx;
+				height: 32rpx;
+			}
+			&-l {
+				@include u-flex(row, center, flex-start);
+				view {
+					@include u-flex(row, center, flex-start);
+					margin-right: 28rpx;
+					image {
+						margin-right: 8rpx;
+					}
+				}
+			}
+		}
+		&-morereply {
+			padding-bottom: 24rpx;
+			font-size: 24rpx;
+			color: #999999;
+			@include u-flex(row, center, flex-start);
+			image {
+				width: 24rpx;
+				height: 24rpx;
+			}
+		}
+	}
+</style>

+ 237 - 0
pages_course/components/goodsItemVertical.vue

@@ -0,0 +1,237 @@
+<template>
+	<view class="vertical-goods-itembox">
+		<view class="choose" @click.stop="handleChoose" v-show="isOperate">
+			<image src="@/static/images/course/choose_icon.png" v-show="item.checked"></image>
+			<image src="@/static/images/course/choose_moren_icon.png" v-show="!item.checked"></image>
+		</view>
+		<view class="vertical-goods-item" @click="$navTo('/pages_course/info?courseId='+item.courseId)">
+			<image class="vertical-goods-item-image" :src="item.imgUrl" :lazy-load="true" mode="aspectFill"></image>
+			<view class="vertical-goods-item-info">
+				<text class=" vertical-goods-item-name textOne">{{item.courseName}}</text>
+				<text class="vertical-goods-item-desc">{{item.description}}</text>
+				<view class="vertical-goods-item-buyinfo">{{ formatNum(item.favoriteNum) }}人收藏</view>
+				<view class="vertical-goods-item-footer">
+					<view class="price-box">
+					<!-- 	<text class="price-box-unit">¥</text>
+						<text class="price-box-integer">300</text>
+						<text class="price-box-decimal">.00</text>
+						<text class="price-box-text">/日</text> -->
+						
+						<image class="price-box-imgEye" src="@/static/images/course/icon_eyes.png"></image>
+						<text class="text">{{ formatNum(item.likes)  }}</text>
+						
+						<image class="price-box-imgZan" src="@/static/images/course/zan_icon.png"></image>
+						<text class="text">{{ formatNum(item.views)  }}</text>
+						
+					</view>
+					<view class="vertical-goods-item-footer-r" :style="{visibility: isOperate ? 'hidden':'visible'}">
+						<view v-show="showCollect">
+							<image src="@/static/images/course/collect_orange_icon.png"></image>
+						</view>
+						<view class="gobuy-btn"  @click.stop="canCalFav(item)">取消收藏</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { doFavorite } from '@/api/course'
+	export default {
+		props: {
+			// 是否展示收藏
+			showCollect: {
+				type: Boolean,
+				default: true
+			},
+			// 是否可以对其操作
+			isOperate: {
+				type: Boolean,
+				default: false
+			},
+			item: {
+				type: Object,
+				default() {
+					return { imgUrl:"",isIntegral:-1 };
+				}
+			},
+			index: {
+				type: Number,
+				default: -1
+			},
+		},
+		data() {
+			return {
+
+			}
+		},
+		methods: {
+			handleChoose() {
+				this.$emit("handleChoose",this.index);
+			},
+			canCalFav(item) {
+				item.index=this.index;
+				this.$emit("canCalFav",item);
+			},
+			formatNum(num){
+				if(num>10000){
+					return (num/10000.0).toFixed(1)+"万";
+				}
+				return num;
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.vertical-goods-itembox {
+		width: 100%;
+		padding: 20rpx 16rpx;
+		box-sizing: border-box;
+		background: #FFFFFF;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		overflow: hidden;
+		@include u-flex(row, center , flex-start);
+		.choose {
+			margin-right: 20rpx;
+			image{
+				width: 36rpx;
+				height: 36rpx;
+				flex-shrink: 0;
+			}
+		}
+	}
+	.vertical-goods-item {
+		flex: 1;
+		@include u-flex(row, center , flex-start);
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		overflow: hidden;
+		&-image {
+			width: 230rpx;
+			height: 129rpx;
+			margin-right: 24rpx;
+			flex-shrink: 0;
+			background: #FFFFFF;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			overflow: hidden;
+		}
+		&-info {
+			flex: 1;
+			@include u-flex(column, flex-start , flex-start);
+			overflow: hidden;
+		}
+		&-name {
+			width: 100%;
+			font-weight: 500;
+			font-size: 28rpx;
+			color: #000000;
+			margin-bottom: 10rpx;
+		}
+		&-desc {
+			
+			width: 100%;
+			font-size: 24rpx;
+			color: #999999;
+			margin-bottom: 20rpx;
+			
+			display: -webkit-box;
+			-webkit-line-clamp: 2; /* 显示的行数 */
+			-webkit-box-orient: vertical; /* 内容会垂直堆叠 */
+			overflow: hidden; /* 隐藏溢出的内容 */
+			text-overflow: ellipsis; /* 当内容被裁剪时显示省略号 */
+		}
+		&-buyinfo {
+			width: 100%;
+			font-size: 22rpx;
+			color: #E69A22;
+			margin-bottom: 8rpx;
+		}
+		&-footer {
+			width: 100%;
+			@include u-flex(row, center , space-between);
+			.price-box {
+				font-family: Roboto, Roboto;
+				font-weight: bold;
+				font-size: 36rpx;
+				display: flex;
+				align-items: center;
+				color: #FF5C03;
+				&-unit {
+					font-weight: 600;
+					font-size: 20rpx;
+				}
+				&-integer {
+					font-size: 36rpx;
+				}
+				&-decimal {
+					font-weight: 600;
+					font-size: 26rpx;
+				}
+				&-text {
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 500;
+					font-size: 22rpx;
+				}
+				.buynum {
+					font-weight: 400;
+					font-size: 22rpx;
+					color: #757575;
+					line-height: 22rpx;
+					margin-left: 16rpx;
+				}
+				
+				&-imgEye {
+					width: 32rpx;
+					height: 22rpx;
+					margin-right: 8rpx;
+					flex-shrink: 0;
+				}
+				&-imgZan{
+					width: 32rpx;
+					height: 32rpx;
+					margin-left: 8rpx;
+					margin-right: 8rpx;
+					flex-shrink: 0;
+				}
+			}
+			.gobuy-btn {
+				width: 142rpx;
+				height: 56rpx;
+				background: linear-gradient( 270deg, #FF5C03 0%, #FFAC64 100%);
+				border-radius: 0rpx 8rpx 8rpx 0rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 26rpx;
+				color: #FFFFFF;
+				line-height: 56rpx;
+				text-align: center;
+			}
+			&-r {
+				height: 56rpx;
+				flex-shrink: 0;
+				@include u-flex(row, center , flex-start);
+				image {
+					width: 32rpx;
+					height: 32rpx;
+					margin-right: 20rpx;
+				}
+			}
+			
+			.text{
+				
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 24rpx;
+				color: #999999;
+			}
+		}
+	}
+</style>

+ 605 - 0
pages_course/famousHall.vue

@@ -0,0 +1,605 @@
+<template>
+	<view class="content" >
+		<image class="home_top_bg" src="https://beiliyo-2025.obs.cn-north-4.myhuaweicloud.com/fs/20250115/1736955760372.png" mode="widthFix"></image>
+		<view class="navBar">
+			<view class="grace-page-header" :style="{'z-index':headerIndex }">
+				<!-- 沉浸式状态栏 -->
+				<view class="grace-page-status-bar" :style="{height:statusBarHeight+'px', background:statusBarBG}"></view>
+				<!-- 头部核心 -->
+				<view class="grace-page-header-nav" id="gracePageHeader" :style="{minHeight:headerHeight+'px', height:headerHeight+'px', overflow:'hidden'}">
+					<view class="u-nav-back"  @click="goBack">
+						<image class="img" src="@/static/images/course/black_back.png" mode="heightFix"></image>
+					</view>
+					<view class="grace-header-main">{{navTitle}}</view>
+				</view>
+			</view>
+			<view :style="{width:'100%', height:(headerHeight+statusBarHeight) + 'px'}"></view>
+		</view>
+		
+	   <!-- <mescroll-body :sticky="true" @init="mescrollInit" @down="downCallback" :down="downOption" :up="upOption"> -->
+	        <view class="cont-box">
+	           <view class="top-section">
+					   <view class="search-header-nav" id="gracePageHeader">
+							<view class="search-header-main" style="height: auto;">
+								<image src="@/static/images/course/icon_search.png" mode=""></image>
+								<input class="input-text" @input="inputEvent" type="text" placeholder="搜索课程内容"/>
+							</view>
+					   </view>
+	            </view>	
+				
+				 <!-- sticky吸顶悬浮的菜单, 父元素必须是 mescroll -->
+		         <view>
+					<me-tabs :value="tabIndex" :tabs="mtabs" nameKey="dictLabel"  :height="88" @change="tabChange" :tab-width="134"></me-tabs>
+				</view>
+				
+			    <view class="scroll">
+					 <swiper :style="{'height': swHeight}"   :current="tabIndex" @change="swiperChange" v-if="mtabs.length>0">
+						<swiper-item v-for="(tab,i) in mtabs" :key="i">
+							<famous-hall-item  ref="mescrollItem" :i="i"  :disable-scroll="disableScroll" :index="tabIndex"  :tipsArr="tipsArr"></famous-hall-item>
+						</swiper-item>
+					 </swiper>
+			    </view> 
+			
+				<!-- <view class="scroll">
+				   <famous-hall-page ref="mescrollItem0" :mtabs="tabs" :tabTop="tabTop" :tipsArr="tipsArr"></famous-hall-page>
+		         </view>  -->
+		
+		</view>  	
+		<!-- </mescroll-body> -->
+	</view>
+	
+</template>
+
+<script>
+	
+    // import MescrollCompMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-comp.js";
+    // import MescrollMoreMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more.js";
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+    import famousHallItem from "./famousHallPageItem.vue" 
+	import famousHallPage from "./famousHallPage.vue" 
+	import { getCourseCate,getCourseList } from '@/api/course'
+	export default {
+		mixins: [ MescrollMixin ], //mescroll-body写在子组件时
+		components: {
+			famousHallItem,
+			famousHallPage
+		 },
+		 watch: {
+		 	tabIndex(i) {
+		 		// 当列表禁止滚动时,需把列表滚动条置顶 (解决问题: "全部"tab翻到第二页,切换到其他tab,滚动到顶部,再切回"全部"tab,此时的列表数据应该重头开始)
+		 		if(this.disableScroll){
+		 			this.disableScroll = false // 当disableScroll=true时,scroll-view的scrollTo会失效,需先开启,再置顶
+		 			this.$nextTick(()=>{
+		 				let mescroll = this.getMescroll(i)
+		 				mescroll && mescroll.scrollTo(0,0)
+		 				setTimeout(()=>{ // 经测试android真机需延时300ms才能恢复禁止滚动,否则scrollTo有可能无效
+		 					this.disableScroll = true
+		 				},300)
+		 			});
+		 		}
+		 	}
+		 },
+		data() {
+			return {
+				headerHeight:44,
+				statusBarHeight: 0,
+				tabTop:0,
+				navigationBarHeight:44,
+				headerBG:"#FF5C03",
+				statusBarBG:"none",
+				headerIndex:98,
+				swHeight: "800px",
+				downOption: {   //下拉刷新
+				    use:false,
+				},
+				upOption: {   //上拉加载
+				 	use: false // 主体框架只启用下拉刷新
+				},
+				tipsArr:[],
+				tabIndex: 0, // tab下标
+				current: 0,
+				mtabs:["精选","学科","入门","经典","名医"],
+				fixedTop: false, 
+				topHeight:0,
+				disableScroll: false, // swiper列表是否禁止滚动
+				cateId:0,
+				dataList:[],
+				keyword:"",
+				type:0,
+				navTitle:""
+			}
+		},
+		created() { 
+			// var system = uni.getSystemInfoSync();
+			// system.model = system.model.replace(' ', '');
+			// system.model = system.model.toLowerCase();
+			// if (system.model.indexOf('iphonex') != -1 || system.model.indexOf('iphone1') != -1) {
+			// 	this.iphoneXButtomHeight = uni.upx2px(50);
+			// }
+			
+		},
+		mounted() {
+			try {
+				const system = uni.getSystemInfoSync();
+				let navigationBarHeight=44,tabHei=50,searchBarHei=88;
+				let tempHei=navigationBarHeight+tabHei+system.statusBarHeight;
+				tempHei=tempHei+uni.upx2px(searchBarHei);
+				tempHei=system.windowHeight-tempHei;
+				this.swHeight=tempHei+"px";
+				this.statusBarHeight = system.statusBarHeight;
+				
+			} catch (e) {
+				
+			}
+		},
+		onLoad(options){
+			this.type=options.type;
+			this.navTitle=this.type==0?"名医讲堂":"课程讲堂"
+			this.getCourseCate();
+		},
+		methods: {
+			swiperChange(e){
+				//this.tabIndex = e.detail.current;
+				this.tabChange(e.detail.current);
+			},
+			/*下拉刷新的回调 */
+			downCallback() {
+				this.mescroll.resetUpScroll(true);
+				this.requestData();
+			},
+			/*上拉加载的回调*/
+			upCallback(page) { 
+				this.mescroll.endByPage(1, 1); 
+				//this.mescroll.endSuccess(8,false);
+				// if (page.num == 1) {
+				// 	this.mescroll.endSuccess(8, false);
+				// } else {
+				// 	this.mescroll.endErr()
+				// }
+			},
+			refreshPage(index){
+			    let vForItem = this.$refs["mescrollItem"];
+				let mescrollP=vForItem[index];
+				mescrollP.tabs=this.mtabs;
+				mescrollP.cateId=this.cateId;
+				mescrollP.keyword= this.keyword;
+				const item=this.mtabs[index];
+			    mescrollP.isBest=item.dictLabel=='精选'; //精选
+				mescrollP.getProductCateByPid();
+				mescrollP.mescroll.triggerDownScroll();
+			},
+			getCourseCate:function(){
+				let that=this;
+				getCourseCate().then(res => {
+						if(res.code==200){
+							this.mtabs=res.data;  
+							let findIdx=this.mtabs.findIndex(item=>item.dictLabel=='精选');
+							console.log("qxj findIdx:"+findIdx);
+							if(findIdx==-1){
+								let dictItem={"dictValue":0,"dictLabel": "精选"};
+								this.mtabs.unshift(dictItem);
+							}
+							if(this.mtabs.length>0){
+								 this.cateId=this.mtabs[0].dictValue;
+								 this.refreshPage(0);
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			// 切换菜单
+			tabChange (index) {
+				// let preTab = this.tabs[this.preIndex]
+				// preTab.y = this.mescroll.getScrollTop()
+				// this.preIndex = index;
+				this.tabIndex=index;
+				const item=this.mtabs[index];
+				if(item){
+					this.cateId=item.dictValue;
+					this.refreshPage(index);
+				}
+				// this.mescroll.optUp.use=this.tabIndex>0;
+				// let curTab = this.tabs[index];
+				// if(index==0){
+				// 	this.mescroll.hideUpScroll();
+				// 	this.mescroll.removeEmpty();
+				// 	this.$nextTick(()=>{
+				// 		this.mescroll.scrollTo(curTab.y, 0) // 恢复滚动条的位置
+				// 	});
+				// }
+			},
+			inputEvent(event){
+				//console.log("qxj event:"+JSON.stringify(event));
+				let vForItem = this.$refs["mescrollItem"];
+				let mescrollP=vForItem[this.tabIndex];
+				this.keyword=event.detail.value;
+				mescrollP.keyword= this.keyword;
+				mescrollP.mescroll.resetUpScroll();
+			},
+			// 获取指定下标的mescroll对象
+			getMescroll(i){
+				let mescrollItems = this.$refs.mescrollItem;
+				if(mescrollItems){
+					let item = mescrollItems[i]
+					if(item) return item.mescroll
+				}
+				return null
+			},
+			// 页面的滚动事件
+			onPageScroll(e){
+				let mescroll = this.getMescroll(this.tabIndex);
+				let that=this;
+				if(Math.ceil(e.scrollTop)<69){
+					mescroll.scrollTo(Math.ceil(e.scrollTop)-69,0);
+					if(Math.ceil(e.scrollTop)>=44 && Math.ceil(e.scrollTop)<=69){
+						
+					}
+					that.disableScroll = Math.ceil(e.scrollTop) < 69;
+					setTimeout(function(){
+						
+					},200);
+					if(mescroll.isScrollUp){ //向上滑动
+					
+					}
+				}
+				else{
+					this.disableScroll = Math.ceil(e.scrollTop) < 69;
+					mescroll.scrollTo(100,1);
+					if(Math.ceil(e.scrollTop)>=44 && Math.ceil(e.scrollTop)<=69){
+						
+					}
+				}
+				
+				console.log("qxj scrollTop:"+Math.ceil(e.scrollTop)+" isScrollUp:"+mescroll.isScrollUp+" disableScroll:"+this.disableScroll);
+			},
+			// 页面跳转
+			navTo(url) {
+				console.log("qxj url:"+url);
+				uni.navigateTo({
+					url: url
+				})
+			},
+			goBack() {
+				uni.navigateBack({
+					delta:1,
+					animationType: 'slide-out-right',
+					animationDuration: 200
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	/*
+	    sticky生效条件:
+		1、父元素不能overflow:hidden或者overflow:auto属性。(mescroll-body设置:sticky="true"即可, mescroll-uni本身没有设置overflow)
+		2、必须指定top、bottom、left、right4个值之一,否则只会处于相对定位
+		3、父元素的高度不能低于sticky元素的高度
+		4、sticky元素仅在其父元素内生效,所以父元素必须是 mescroll
+	*/
+   
+  page{
+  	 height: 100%;
+	 background-color: #fff;
+  }
+  
+  .content{
+  	/* #ifdef APP-PLUS */
+  	flex: 1;
+  	/* #endif */
+  	/* #ifndef APP-PLUS */
+  	//display: flex;
+  	/* #endif */
+  	
+  	display: flex;
+  	flex-direction: column;
+  	width: 100%;
+  	min-height: 100%;
+  	flex: 1;
+	position: relative;
+  }
+  
+  .home_top_bg {
+  	width: 100%;
+  	height: auto;
+  	position: absolute;
+  	top: 0;
+  	left: 0;
+  	z-index: 0;
+  }
+  
+  .sticky-tabs{
+		z-index: 11;
+		position: sticky;
+		top: 44px;
+		background-color: #fff;
+		height: 80rpx;
+		align-items: center;
+  }
+  
+  .grace-page-header {
+		width: 100%;
+		position: fixed;
+		left: 0;
+		top: 0;
+		z-index: 99;
+		border-bottom: 0px solid #FFFFFF;
+		.grace-page-status-bar {
+			width: 100%;
+			height: 0;
+		}
+		.grace-page-header-nav {
+			width: 100%;
+			display: flex;
+			flex-direction: row;
+			flex-wrap: nowrap;
+			align-items: center;
+		}
+		.grace-header-main {
+			width: 300rpx;
+			flex: auto;
+			overflow: hidden;
+			margin:0 20rpx;
+			height: 48rpx;
+			text-align: center;
+			font-weight: 500;
+			font-size: 34rpx;
+			color: #333;
+		}
+  }
+  
+  .u-nav-back{
+		display: flex;
+		align-items: center;
+		position: absolute;
+		left:20rpx;
+		.img{
+			height: 48upx;
+		}
+   }
+
+  .cont-box{
+	   position: relative;
+	  .top-section{
+		  // background: #FF5C03;
+		  padding-bottom: 20rpx;
+	      .search-header-nav {
+	      	width: 100%;
+	      	display: flex;
+	      	flex-direction: row;
+	      	flex-wrap: nowrap;
+	      	align-items: center;
+			
+	      }
+	      .search-header-main {
+	      		width: 300rpx;
+	      		flex: auto;
+	      		overflow: hidden;
+	      		margin:0 20rpx;
+	      		height: 48rpx;
+	      		background: #fff;
+	      		border-radius: 35rpx;
+	      		padding: 10rpx 20upx;
+	      		display: flex;
+	      		justify-content: flex-start;
+	      		align-items: center;
+	      		image{
+	      			width: 28upx;
+	      			height: 28upx;
+	      			margin-right: 16upx;
+	      		}
+	      		.input-text{
+	      			color: #333;
+	      			font-size: 24rpx;
+	      			height: 48rpx;
+	      			line-height:48rpx ;
+	      		
+	      		}
+	      		.uni-input-placeholder{
+	      			color:#999;
+	      		}
+	      }
+	  }
+	  
+	  .inner.fixed{
+			width: 100%;
+			position: fixed;
+			top: 0;
+			left: 0;
+			z-index: 999;
+	  }
+	  .seat{
+			display: none;
+			&.show{
+				display: block;
+			}
+	  }
+	  .status-bar.white-bg {
+	  	  background-color: #fff;
+	  }
+	  .top-title-box{
+			height: 88rpx;
+			line-height: 88rpx;
+			text-align: center;
+			background-color: #fff;
+			font-size: 36rpx;
+			font-weight: 420;
+			color: #333333;
+			color: red;
+			display: none;
+			&.show{
+				display: block;
+			}
+	  }
+ }  
+ 
+  .myjt-box{
+	  margin:0 20rpx;
+	  border-radius: 20rpx;
+	  padding-right: 0rpx;
+	  background-color: #fff;
+	  .title-inner{
+		    margin-left: 20rpx;
+			height: 70rpx;
+			line-height: 70rpx;
+			padding-top:20rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-right: 20rpx;
+			font-size: 32rpx;
+			font-weight: 500;
+			.arrow-pro{
+				height: 60rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.card{
+					font-size: 26rpx;
+					color: #999;
+				}
+				image{
+					width: 20rpx;
+					height: 20rpx;
+					margin-right: 6rpx;
+				}
+			}
+	
+	  }
+	  .collection-list{
+			display: flex;
+			flex-wrap: wrap;
+			border-radius: 8rpx;
+			margin: 0 16rpx;
+			margin-top:20rpx;
+	  	.item{
+			display: flex;
+			flex-direction: column;
+			// align-items: center;
+			justify-content: center;
+	  		width: calc(100%);
+	  		margin-bottom: 20rpx;
+			.top{
+				display: flex;
+				flex: 1;
+				flex-direction: row;
+				.img-box{
+					  position: relative;
+					  width: 40%; /* 或者任何你想要的宽度 */
+					  padding-bottom: 25%; /* 高度等于宽度 */
+					  overflow: hidden; /* 防止图片溢出 */
+					  image{
+							position: absolute;
+							width: 100%;
+							height: 100%;
+							top: 50%;
+							left: 50%;
+							transform: translate(-50%, -50%);
+							border-radius: 20rpx;
+					  }
+				}
+				.playIcon{
+							 position: absolute;
+							 width: 50rpx;
+							 height: 50rpx;
+							 background: rgba(0, 0, 0, 0.28);
+							 border-radius: 50%;
+							 top: 50%;
+							 left: 50%;
+							 transform: translate(-50%, -50%);
+							 image{
+								 width:20rpx ;
+								 height: 24rpx;
+								 border-radius: 0 !important;
+							 }
+					 }
+					 .vip{
+							  position: absolute;
+							  width: 49rpx;
+							  height: 28rpx;
+							  background: linear-gradient(94deg, #FFE9D0 0%, #E9BD97 100%);
+							  border-radius: 6rpx;
+							  top: 16rpx;
+							  right: 16rpx;
+							  color:#333;
+							  font-size:18rpx ;
+							  text-align: center;
+							  font-weight: 500;
+							  font-style: italic;		  
+					 }
+				}  
+				.info-box{
+					    width: calc(60%);
+						padding:0 20rpx;
+						position: relative;
+						.title{
+							font-size: 26rpx;
+							font-family: PingFang SC;
+							font-weight: 470;
+							color: #333;
+							line-height: 40rpx;
+							margin-top: 10rpx;
+						}
+						.tips,.time{
+							font-size: 26rpx;
+							color: #666;
+							line-height: 40rpx;
+							margin-top: 10rpx;
+						}
+						.time{
+							position: absolute;
+							left: 20rpx;
+							bottom: 20rpx;
+						}
+				}
+				.arrow{
+					width: 30rpx;
+					height: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					margin-right: 10rpx;
+					image{
+						width: 26rpx;
+						height: 22rpx;
+					}
+				}
+			}
+			.progress-bar{
+				border-radius: 20rpx;
+				background: #ebebeb;
+				height: 20rpx;
+				margin:20rpx 0rpx;
+				display: flex;
+				flex-direction: row;
+				align-items: center;
+				.focus-bar{
+					background:#FF5C03;
+					border-radius: 20rpx;
+					height: 100%;
+				}  
+				.number{
+					font-size: 22rpx;
+					color: #fff;
+					background:#FF5C03;
+					border-radius: 10rpx;
+					border-left: 2rpx solid #fff;
+					padding: 0rpx 12rpx;
+					margin-left: -2rpx;
+				}
+			}
+	  }
+  }		
+  
+  .scroll{
+		width: 100%;
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		overflow: hidden;
+		margin-top: 0rpx;
+  }
+
+</style>

+ 130 - 0
pages_course/famousHallPage.vue

@@ -0,0 +1,130 @@
+<template>
+	
+	<view>
+	
+		<view class="sticky-tabs" :style="{top:tabTop+'px'}">
+			<me-tabs v-model="tabIndex" :tabs="mtabs" :height="88" @change="tabChange" :tab-width="134"></me-tabs>
+		</view>
+		<swiper :style="{'height': swHeight}"   :current="tabIndex" @change="swiperChange" v-if="mtabs.length>0">
+			<swiper-item v-for="(tab,i) in mtabs" :key="i">
+				<famous-hall-item  ref="mescrollItem" :i="i" :index="tabIndex" :tabs="mtabs" :tipsArr="tipsArr"></famous-hall-item>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+
+<script>
+	import MescrollCompMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-comp.js";
+    import MescrollMoreMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more.js";
+    import famousHallItem from "./famousHallPageItem.vue" 
+	export default {
+		mixins: [MescrollCompMixin,MescrollMoreMixin], // 多个mescroll-body写在子组件时, 则使用mescroll-more.js补充子组件的页面生命周期
+		components: {
+			famousHallItem
+		},
+		props: {
+			keyword: String,
+			cataType:Number,
+			i:Number,
+			index:Number,
+			tabTop:Number,
+			mtabs: {
+				type: Array,
+				default(){
+					return []
+				}
+			},
+			tipsArr: {
+				type: Array,
+				default(){
+					return []
+				}
+			}
+		},
+		watch:{
+			
+		},
+		data() {
+			return {
+				swHeight: "800px",
+				tabIndex: 0,
+			}
+		},
+		created(){
+			
+		},
+		destroyed() {
+			
+		},
+		mounted() {
+			
+		},
+		methods: {
+			swiperChange(e){
+				this.tabIndex = e.detail.current
+			},
+		
+		},
+		
+	}
+
+
+</script>
+
+
+
+<style lang="scss" scoped>
+
+	.item_content{
+		background-color: #f7f7f7;
+		margin-top: 20rpx;
+		width: 100%;
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+	}
+	
+	.top-section{
+	    .search-header-nav {
+	    	width: 100%;
+	    	display: flex;
+	    	flex-direction: row;
+	    	flex-wrap: nowrap;
+	    	align-items: center;
+				background: #FF5C03;
+	    }
+	    .search-header-main {
+	    		width: 300rpx;
+	    		flex: auto;
+	    		overflow: hidden;
+	    		margin:0 20rpx;
+	    		height: 48rpx;
+	    		background: #fff;
+	    		border-radius: 24rpx;
+	    		padding: 10rpx 20upx;
+	    		display: flex;
+	    		justify-content: flex-start;
+	    		align-items: center;
+	    		image{
+	    			width: 28upx;
+	    			height: 28upx;
+	    			margin-right: 16upx;
+	    		}
+	    		.input-text{
+	    			color: #333;
+	    			font-size: 24rpx;
+	    			height: 48rpx;
+	    			line-height:48rpx ;
+	    		
+	    		}
+	    		.uni-input-placeholder{
+	    			color:#999;
+	    		}
+	    }
+	}
+	
+
+</style>
+
+

+ 328 - 0
pages_course/famousHallPageItem.vue

@@ -0,0 +1,328 @@
+<template>
+	
+	<view  class="item_content">
+		
+		<view class="cate-list">
+		    <!-- 关键字列表 -->
+			<scroll-view   scroll-x="true" >
+				<view class="inner">
+					<view v-for="(item,index) in cates" :key="index" :class="subCateId == item.dictValue?'item active':'item'" @click="choseCate(item)">
+						{{ item.dictLabel }}
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+		
+		<mescroll-uni :ref="'mescrollRef'+i"  @init="mescrollInit" style="background-color: #fff;" :disable-scroll="disableScroll"  top="80"  bottom="0"  :down="downOption" :up="upOption"   @down="downCallback"
+		 @up="upCallback" @emptyclick="emptyClick">
+			<view class="myjt-box">
+					 <view  class="item" v-for="(item,index) in dataList"  @click="$navTo('/pages_course/info?courseId='+item.courseId)" :key="index">
+							<view class="img-box">
+								<image class="image" :src="item.imgUrl" mode="scaleToFill"></image>
+								<view class="playIcon x-c">
+									<image src="@/static/images/course/play_icon.png"></image>
+								</view>
+								<view class="vip">VIP</view>
+								<view class="x-f es-h-44" style="position: absolute;bottom: 0;width: 100%;">
+									<image class="es-w-24 es-h-24 es-ml-10 es-mr-8" src="@/static/images/course/play.png"></image>
+									<text class="es-c-white es-fw-400 es-fs-22">{{item.views}}</text>
+								</view>
+							</view>
+							<view class="info-box">
+								<view class="title ellipsis2">{{item.courseName}}</view>
+							</view>
+					 </view>			 
+			 </view> 
+		</mescroll-uni>
+	</view>
+</template>
+
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import MescrollMoreItemMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more-item.js";
+	import { getCourseCate,getCourseList,getProductCateByPid } from '@/api/course'
+	export default {
+		mixins: [ MescrollMixin,MescrollMoreItemMixin ], 
+		components: {
+			
+		},
+		props: {
+			cataType:Number,
+			i:Number,
+			index:Number,
+			itemData: {
+				type: Object,
+				default() {
+					return { };
+				}
+			},
+			tipsArr: {
+				type: Array,
+				default(){
+					return []
+				}
+			},
+			disableScroll: Boolean // 是否禁止滚动, 默认false
+		},
+		watch:{
+			
+		},
+		data() {
+			return {
+				bottomBlackLineHeight: uni.getStorageSync('bottomBlackLineHeight'),
+				downOption: {
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {
+					auto: false, // 不自动加载
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量
+					},
+					textNoMore:"已经到底了",
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				    toTop:{
+				    	width:0,
+				    },
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						btnText: '刷新重试',
+						icon:"/static/images/icon_img_empty.png"
+					},
+				},
+				cateId:null,
+				subCateId:null,
+				tabs:[],
+				dataList: [] ,//列表数据
+				cates:[],
+				keyword:"",
+				isBest:false,
+			    sorCates:[{"dictLabel": "全部","dictValue":0}]
+			}
+		},
+		mounted() {
+			
+		
+		},
+		methods: {
+			/*下拉刷新的回调 */
+			downCallback() {
+				// 下拉刷新的回调,默认重置上拉加载列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
+				this.mescroll.resetUpScroll(true);
+			},
+			/*上拉加载的回调 */
+			upCallback(page) {
+				var that = this;
+				let params={};
+				if(this.isBest){
+					params={"isBest":1};
+				}else{
+					params={"cateId":this.cateId};
+				}
+				
+				if(this.subCateId!=null && this.subCateId!=0){
+					params['subCateId']=this.subCateId;
+				}
+				if(!this.utils.isEmpty(this.keyword)){
+					params['keyword']=this.keyword;
+				}
+				getCourseList(params,page.num).then(res => {
+						if(res.code==200){
+							//设置列表数据
+							setTimeout(()=>{
+								this.mescroll.endByPage(res.data.list.length, res.data.pages); 
+								if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+								this.dataList=this.dataList.concat(res.data.list); //追加新数据
+							},400);
+							
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+							that.dataList = null;
+							that.mescroll.endErr();
+						}
+					},
+					rej => {}
+				);
+			},
+			//点击空布局按钮的回调
+			emptyClick() {
+				
+			},
+		   refreshPage(){
+			   this.mescroll.hideTopBtn();
+			   this.mescroll.resetUpScroll(true);
+		   },
+		   getProductCateByPid(){
+			   if(this.isBest){
+				   this.cates = this.sorCates;
+				   this.subCateId=0;
+				   return;
+			   }
+			   getProductCateByPid(this.cateId).then(res => {
+			   		if(res.code==200){
+			   			this.cates=this.sorCates.concat(res.data);
+						this.subCateId=this.cates[0].dictValue;
+						this.refreshPage();
+			   		}else{
+			   			this.cates = this.sorCates;
+			   		}
+			   	},
+			   	rej => {}
+			   );
+			   			
+		   },
+		   
+		   choseCate(item){
+				this.subCateId = item.dictValue;
+				this.refreshPage();
+		   },
+		   // 页面的滚动事件
+		   onPageScroll(e){
+		      console.log("qxj disableScroll:"+disableScroll);
+		   }
+		},
+		created(){
+			let that = this;
+			uni.$on('refreshFollowLog', function(data){
+				//that.refreshPage();
+				that.$emit('resetUpScroll');
+			});
+		},
+		destroyed() {
+			// 注销全局配置监听
+			uni.$off("refreshFollowLog")
+		}
+	}
+
+
+</script>
+
+
+
+<style lang="scss" scoped>
+	
+	.item_content{
+		background-color: #fff;
+	}
+	
+	.cate-list{
+		box-sizing: border-box;
+		background: #fff;
+		padding:20rpx 20rpx;
+		padding-top: 20rpx;
+		padding-bottom: 0;
+		height: 100rpx;
+		.inner{
+			display: flex;
+		}
+		.item{
+			flex-shrink: 0;
+			padding: 0 24rpx;
+			margin-right: 16rpx;
+			height: 56rpx;
+			line-height: 50rpx;
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: normal;
+			color: #666666;
+			background: #fff;
+			border: 0px solid #EEEEEE;
+			line-height: 54rpx;
+			background: #eeeeee;
+			
+			border-radius: 32rpx;
+			&.active{
+				color: #FF6600;
+				background: #FDEEE7;
+				border: 1px solid #FF6600;
+				
+			}
+		}
+	}
+		
+	.myjt-box{
+		  display: flex;
+		  flex-wrap: wrap;
+		  border-radius: 8rpx;
+		  margin: 0 16rpx;
+		  margin-top:20rpx;
+	      .item{
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: center;
+				width: calc(50%);
+				margin-bottom: 26rpx;
+				.img-box{
+					  position: relative;
+					  width: 95%; /* 或者任何你想要的宽度 */
+					  padding-bottom: 58%; /* 高度等于宽度 */
+					  overflow: hidden; /* 防止图片溢出 */
+					  .image{
+							position: absolute;
+							max-width: 100%;
+							max-height: 100%;
+							top: 50%;
+							left: 50%;
+							transform: translate(-50%, -50%);
+							border-radius: 12rpx;
+					  }
+				}
+				.playIcon{
+						 position: absolute;
+						 width: 69rpx;
+						 height: 69rpx;
+						 background: rgba(0, 0, 0, 0.28);
+						 border-radius: 50%;
+						 top: 50%;
+						 left: 50%;
+						 transform: translate(-50%, -50%);
+						 image{
+							 width:28rpx ;
+							 height: 32rpx;
+							 border-radius: 0;
+						 }
+				 }
+				 .vip{
+						  position: absolute;
+						  width: 49rpx;
+						  height: 28rpx;
+						  background: linear-gradient(94deg, #FFE9D0 0%, #E9BD97 100%);
+						  border-radius: 6rpx;
+						  top: 16rpx;
+						  right: 16rpx;
+						  color:#333;
+						  font-size:18rpx ;
+						  text-align: center;
+						  font-weight: 500;
+						  font-style: italic;		  
+				 }
+							
+				.info-box{
+						width: calc(100% - 20upx);
+						.title{
+							font-size: 28rpx;
+							font-family: PingFang SC;
+							font-weight: 470;
+							color: #333;
+							line-height: 40rpx;
+							max-height: 80rpx;
+							margin-top: 14rpx;
+						}
+				}
+		  }
+		  
+		  
+	}		
+	
+	.mescroll-uni-fixed{
+		 background-color: #fff !important;
+	}
+	
+</style>
+
+

+ 278 - 0
pages_course/favoritePage.vue

@@ -0,0 +1,278 @@
+<template>
+	
+	<view class="item_content">
+			<mescroll-body  @init="mescrollInit" top="0"  bottom="0"  :down="downOption" @down="downCallback" :up="upOption"
+			 @up="upCallback" @emptyclick="emptyClick">
+			   <view class="collection-list">
+					<view class="item" v-for="(item,index) in dataList"  @click="$navTo('/pages_course/info?courseId='+item.courseId)" :key="index">
+						<view class="top">
+							<view class="img-box">
+								<image :src="item.imgUrl" mode="aspectFill"></image>
+								<view class="playIcon">
+									<image src="@/static/images/course/play_icon.png"></image>
+								</view>
+								<view class="vip">VIP</view>
+							</view>
+							<view class="info-box">
+								<view class="title ellipsis2">{{item.courseName}}</view>
+								<view class="tips ellipsis2">{{item.videoName}}</view>
+								<view class="time">{{utils.formatDate(item.createTime) }}</view>
+							</view>
+							<view class="arrow">
+								<image  src="/static/images/more_icon_12.png" mode=""></image>
+							</view>
+						</view>
+					</view>
+			   </view> 	
+			</mescroll-body>
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import MescrollMoreItemMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more-item.js";
+    import { getMyFavoriteCourseList } from '@/api/course'
+	export default {
+		mixins: [MescrollMixin,MescrollMoreItemMixin], 
+		components: {
+			
+		},
+		props: {
+			cataType:Number,
+			i:Number,
+			index:Number,
+			itemData: {
+				type: Object,
+				default() {
+					return { };
+				}
+			},
+			
+		},
+		watch:{
+			
+		},
+		data() {
+			return {
+				bottomBlackLineHeight: uni.getStorageSync('bottomBlackLineHeight'),
+				downOption: {
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {
+					auto: false, // 不自动加载
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量
+					},
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				    toTop:{
+				    	width:0,
+				    }
+				},
+				keyword:"",
+				dataList: [] //列表数据
+			}
+		},
+		mounted() {
+			// this.mescroll.resetUpScroll(true);
+		},
+		methods: {
+			/*下拉刷新的回调 */
+			downCallback() {
+				// 下拉刷新的回调,默认重置上拉加载列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
+				this.mescroll.resetUpScroll(true);
+			},
+			/*上拉加载的回调 */
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var params = {
+					"keyword":this.keyword
+				};
+				getMyFavoriteCourseList(params,page.num).then(res => {
+					if(res.code==200){
+						setTimeout(()=>{
+							this.mescroll.endByPage(res.data.list.length, res.data.pages); 
+							if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+							this.dataList=this.dataList.concat(res.data.list); //追加新数据
+						},400);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			//点击空布局按钮的回调
+			emptyClick() {
+				
+			},
+		   refreshPage(){
+			   this.mescroll.hideTopBtn();
+			   this.mescroll.resetUpScroll(true);
+		   }
+		},
+		created(){
+			let that = this;
+			uni.$on('refreshFollowLog', function(data){
+				//that.refreshPage();
+				that.$emit('resetUpScroll');
+			});
+		},
+		destroyed() {
+			// 注销全局配置监听
+			uni.$off("refreshFollowLog")
+		}
+	}
+
+
+</script>
+
+
+
+<style lang="scss" scoped>
+	
+	.item_content .content:last-child .sline{
+		height: 100%;
+	}
+	.item_content{
+		background-color: #f7f7f7;
+		margin-top: 20rpx;
+		// padding-bottom: 100rpx;
+	}	
+	.collection-list{
+		display: flex;
+		flex-wrap: wrap;
+		padding: 0 20rpx;
+	
+		.item{
+			display: flex;
+			flex-direction: column;
+			// align-items: center;
+			justify-content: center;
+			width: calc(100%);
+			margin-bottom: 20rpx;
+			padding: 16rpx;
+			box-sizing: border-box;
+			border-radius: 20rpx;
+			background-color: #fff;		
+			.top{
+				display: flex;
+				flex: 1;
+				flex-direction: row;
+				.img-box{
+					  position: relative;
+					  width: 40%; /* 或者任何你想要的宽度 */
+					  padding-bottom: 25%; /* 高度等于宽度 */
+					  overflow: hidden; /* 防止图片溢出 */
+					  image{
+							position: absolute;
+							width: 100%;
+							height: 100%;
+							top: 50%;
+							left: 50%;
+							transform: translate(-50%, -50%);
+							border-radius: 20rpx;
+					  }
+				}
+				.playIcon{
+							 position: absolute;
+							 width: 50rpx;
+							 height: 50rpx;
+							 background: rgba(0, 0, 0, 0.28);
+							 border-radius: 50%;
+							 top: 50%;
+							 left: 50%;
+							 transform: translate(-50%, -50%);
+							 image{
+								 width:20rpx ;
+								 height: 24rpx;
+								 border-radius: 0 !important;
+							 }
+					 }
+					 .vip{
+							  position: absolute;
+							  width: 49rpx;
+							  height: 28rpx;
+							  background: linear-gradient(94deg, #FFE9D0 0%, #E9BD97 100%);
+							  border-radius: 6rpx;
+							  top: 16rpx;
+							  right: 16rpx;
+							  color:#333;
+							  font-size:18rpx ;
+							  text-align: center;
+							  font-weight: 500;
+							  font-style: italic;		  
+					 }
+				}  
+				.info-box{
+						width: calc(60%);
+						padding:0 20rpx;
+						position: relative;
+						.title{
+							font-size: 26rpx;
+							font-family: PingFang SC;
+							font-weight: 470;
+							color: #333;
+							line-height: 40rpx;
+							margin-top: 10rpx;
+						}
+						.tips,.time{
+							font-size: 26rpx;
+							color: #666;
+							line-height: 40rpx;
+							margin-top: 10rpx;
+						}
+						.time{
+							position: absolute;
+							left: 20rpx;
+							bottom: 20rpx;
+						}
+				}
+				.arrow{
+					width: 30rpx;
+					height: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					margin-right: 10rpx;
+					image{
+						width: 26rpx;
+						height: 22rpx;
+					}
+				}
+				
+			}
+			
+			.progress-bar{
+				border-radius: 20rpx;
+				background: #ebebeb;
+				height: 20rpx;
+				margin:20rpx 0rpx;
+				display: flex;
+				flex-direction: row;
+				align-items: center;
+				.focus-bar{
+					background:#FF5C03;
+					border-radius: 20rpx;
+					height: 100%;
+					
+				}  
+				.number{
+					font-size: 22rpx;
+					color: #fff;
+					background:#FF5C03;
+					border-radius: 10rpx;
+					border-left: 2rpx solid #fff;
+					padding: 0rpx 12rpx;
+					margin-left: -2rpx;
+				}
+			}
+	}
+</style>
+
+

+ 2330 - 0
pages_course/info.vue

@@ -0,0 +1,2330 @@
+<template>
+	<view class="content">
+		<view class="video-box">
+			<!-- 返回按钮 -->
+			<!-- #ifdef APP-PLUS -->
+			<image class="back-img" @click.stop="navBack()" src="@/static/images/course/back_white_icon.png"></image>
+			<!-- #endif -->
+			<view class="cousrseImg x-c" v-show="!pickCatalog.url">
+				<u-loading-icon size="30"></u-loading-icon>
+				<!-- <image :src="data.imgUrl" mode="aspectFit"></image> -->
+			</view>
+			<!-- 视频 -->
+			<view class="video-container" style="position: relative;height: 422rpx;" :videoPlayStatus="videoPlayStatus" :change:videoPlayStatus="xgplayer.changeVideo">
+				<view id="detail-video"
+				:pickCatalog="pickCatalog" 
+				:change:pickCatalog="xgplayer.initJs"
+				:exitFullscreen="exitFullscreen"
+				:change:exitFullscreen="xgplayer.handleExitFullscreen"
+				></view>
+				<image class="back-img" v-if="fullScreen" @click.stop="videoback" src="@/static/images/course/back_white_icon.png"></image>
+				<!-- 疗法  -->
+				<!-- <view v-if="showTherapy&&fullScreen" class="horizontal" @tap.stop>
+					<view class="goods" @tap.stop="goToPro(showTherapyItem.packageId)">
+						<image :src="showTherapyItem.imgUrl" mode="aspectFill" class="goodsimg"></image>
+						<view class="goodsname textOne">{{showTherapyItem.packageName}}</view>
+					</view>
+					<view style="width: 20px;height: 20px;position: absolute;right:0rpx;top:0rpx;z-index:999">
+						<image style="width: 20px;height: 20px" src="@/static/images/close40.png"
+							@tap.stop="closeTherapy"></image>
+					</view>
+				</view> -->
+				<view class="audiobox es es-ver es-ac es-pc" v-if="showAudio" @click.stop>
+			
+					<view class="audiobox-title">
+						<image class="back" @click.stop="navBack()" src="@/static/images/course/back_white_icon.png"></image>
+						<view class="textOne">
+						{{catalogueList[pickCatalogIdx]&&catalogueList[pickCatalogIdx].title}}
+						</view>
+					</view>
+					<view class="es es-ver es-ac es-pc">
+						<view class="es es-ac es-pc">
+							<image class="es-icon-52 es-icon-play-last"
+								src="/static/images/video/play-last.png" @tap="endedPlayPrev()"></image>
+							<image class="es-icon-88 es-ml-50 es-mr-50"
+								:src="audioPlayIng?'/static/images/video/play-stop.png':'/static/images/course/video_icon.png'" @tap="playAudioAction()"></image>
+							<image class="es-icon-52 es-icon-play-next"
+								src="/static/images/video/play-next.png" @tap="endedPlayNext('click')"></image>
+						</view>
+						<view class="audiobox-time">{{utils.formatSeconds(tempAudioDuration)}} / {{utils.formatSeconds(pickCatalog.seconds)}}</view>
+					</view>
+					<view class="audiobox-video x-ac" @tap="backPlayVideo">返回视频</view>
+				</view>
+			</view>
+		</view>
+		<scroll-view class="scroll-Y" :scroll-y="true" :style="'height:' + clientHeight + 'px;'" v-show="!isShowList">
+			<view class="video-info">
+				<view class="video-info-header">
+					<view class="video-info-headerl">
+						<image mode="aspectFill" :src="data.talentAvatar"></image>
+						<text class="textOne">{{data.courseName}}</text>
+					</view>
+					<button class="follow-btn" @tap="doFollow()">
+						<image v-show="!isFollow" src="@/static/images/course/guanzhu_icon.png" mode="aspectFill"></image>
+						<text>{{isFollow?"已关注":"关注"}}</text>
+					</button>
+				</view>
+				<view>
+					<view class="video-info-voicebox2">
+						<text>{{data.views}}次播放 · 总时长:{{data.totalDuration}}</text>
+						<view class="x-c" @click="isExpand = !isExpand" v-if="showExpandText">
+							<text>{{isExpand ? '收起简介' : '展开简介'}}</text>
+							<view :class="isExpand ? 'rotate':''"><uni-icons type="down" size="14"
+									color="#bbbbbb"></uni-icons></view>
+						</view>
+					</view>
+					<view :class="showDes|| !showExpandText? 'opacity video-info-desc':'video-info-desc' "
+						id="descbox-desc" :style="{height: isExpand ? 'auto': '84rpx'}">
+						{{data.description}}
+						<image v-show="!isExpand&&showExpandText" class="desc-image x-c"
+							src="/static/images/other/bg_bar.png"></image>
+					</view>
+				</view>
+
+				<view class="video-info-footer">
+					<view @tap="handleListen()">
+						<image src="@/static/images/course/sound_icon24.png" mode="aspectFill"></image>
+						<text :style="{color: showAudio ? '#FF5C03':'#757575'}">听声</text>
+					</view>
+					<!-- v-if="!$qconfig.isAppStore" -->
+					<view @tap="$navTo('./note?courseId='+courseId)">
+						<image src="@/static/images/course/note_icon24.png" mode="aspectFill"></image>
+						<text>笔记</text>
+					</view>
+					<view @tap="doFavorite()">
+						<image
+							:src="isFavorite?'/static/images/course/collect_on_icon24.png':'/static/images/course/collect_icon24.png'"
+							mode="aspectFill"></image>
+						<text>{{isFavorite?"已收藏":"收藏"}}</text>
+					</view>
+					<view @tap="doLike()">
+						<image :src="isLike?'/static/images/course/like_on_icon.png':'/static/images/course/like_icon.png'"
+							mode="aspectFill"></image>
+						<text>{{isLike?"喜欢":"喜欢"}}</text>
+					</view>
+					<!-- <view @tap="openShare()">
+						<image src="@/static/images/course/weixin_icon.png" mode="aspectFill"></image>
+						<text>分享</text>
+					</view> -->
+				</view>
+
+			</view>
+			<!-- 讲堂目录 -->
+			<view class="video-directory">
+				<view class="box-header">
+					<view class="box-header-title">讲堂目录</view>
+					<view class="box-header-r" @tap="goToCatalogue()">
+						<text>共{{catalogueList.length}}节</text>
+						<image src="@/static/images/course/my_right_arrow_right_icon.png" mode="aspectFill"></image>
+					</view>
+				</view>
+
+				<scroll-view class="video-directory-scrollx" scroll-x="true" :scroll-into-view="scrollIntoViewId"
+					scroll-with-animation="true" overflow-anchor="none">
+					<view :id="'cataLogue' + index"
+						:class="pickCatalogIdx == index ? 'active-scrollitem video-directory-scrollitem':'video-directory-scrollitem'"
+						v-for="(item,index) in catalogueList" :key="index" @click="pickCatalogAction(index)">
+						<view
+							:class="index>1 && canShowVip(item) ? 'freeflag freeflag-member':'freeflag freeflag-free'">
+							{{ index>1 && canShowVip(item) ? '限时特惠' : '免费'}}
+						</view>
+						<view class="video-directory-num">
+							<text>第{{item.courseSort}}讲</text>
+							<image v-if='pickCatalogIdx == index' src="@/static/images/course/hear_icon.png"></image>
+							<view class="empty" v-else></view>
+						</view>
+						<view class="video-directory-title">
+							<view class="textTwo">{{item.title}}</view>
+							<!-- <view class="imagebox">
+			  						<view class="mask" v-if='pickCatalogIdx != index'>
+			  							<image src="@/static/images/course/video_icon.png" mode="aspectFill"></image>
+			  						</view>
+			  						<image class="video-directory-img" src="@/static/image/home1/logo.png" mode="aspectFill"></image>
+			  					</view> -->
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+			<!-- 课程疗法 -->
+			<!-- <view class="therapy" v-show="packageJsonList&&packageJsonList.length > 0">
+				<view class="box-header-title" style="margin-bottom: 20rpx;">课程疗法</view>
+				<scroll-view class="therapy-scrollx" scroll-x="true" :scroll-into-view="scrollIntoTherapy"
+					scroll-with-animation="true" overflow-anchor="none">
+					<view :class="therapyIndex == idx ? 'therapy-active therapy-scrollitem':'therapy-scrollitem'"
+						:id="'therapy' + idx" v-for="(item,idx) in packageJsonList" :key="idx"
+						@click="handleTherapy(item,idx)">
+						<image mode="aspectFill" class="therapy-goodsimg" :src="item.imgUrl"></image>
+						<view class="therapy-goodsname textTwo">{{item.packageName}}</view>
+					</view>
+				</scroll-view>
+			</view> -->
+			<!-- 评论 v-if="!$qconfig.isAppStore"-->
+			<view class="video-comment">
+				<view class="box-header">
+					<view class="box-header-title">评论</view>
+					<view class="box-header-r" @tap="goToComment()">
+						<text>共{{data.commentNum}}条</text>
+						<image src="@/static/images/course/my_right_arrow_right_icon.png" mode="aspectFill"></image>
+					</view>
+				</view>
+				<view style="padding: 20rpx 24rpx;">
+					<commentList :commentList="data.commentList" />
+				</view>
+			</view>
+
+			<!-- 猜你喜欢 -->
+			<view class="video-comment">
+				<view class="box-header">
+					<view class="box-header-title">猜你喜欢</view>
+					<view class="box-header-r" v-if="false">
+						<text>更多</text>
+						<image src="@/static/images/course/my_right_arrow_right_icon.png" mode="aspectFill"></image>
+					</view>
+				</view>
+				<view class="hall-box">
+					<hallItem class="gapitem" v-for="(item, index) in dataList " :key="index" :item="item"
+						@click.native="navTo('/pages_course/info?courseId='+item.courseId)" />
+				</view>
+			</view>
+		</scroll-view>
+
+		<!-- h5下载 -->
+		<!-- <h5-down-app-tip :pageUrl="pageUrl" :type="'course'" :courseId="courseId" /> -->
+
+		<!-- 分享弹窗 -->
+		<u-popup :show="showShare" @close="closeShareAct()">
+			<share-box :shareItem="shareItem" @closeShare='closeShareAct()'></share-box>
+		</u-popup>
+
+		<!-- VIP特权弹窗 -->
+		<uni-popup ref="popPrivilege" type="bottom" borderRadius="10rpx 10rpx 0px 0px">
+			<view class="privilegeBox es es-ver es-br-38 es-pt-30 es-pb-30 ">
+				<view class="es es-fx es-pc es-h-56 es-ml-48 es-mr-48">
+					<image class="es-w-74 es-h-40" style="position: absolute;left:60rpx;top:0"
+						src="/static/images/course/xiangyun.png"></image>
+					<view class="es-fs-40 es-h-56 es-fw-500" style="color: #FFDAA3;">限时特惠</view>
+					<image class="es-w-74 es-h-40" style="position: absolute;right:60rpx;top:0"
+						src="/static/images/course/xiangyun2.png"></image>
+					<image class="es-w-40 es-h-40" style="position: absolute;right:-20rpx;top:-10rpx"
+						@tap="closePrivilege" src="/static/images/close40.png"></image>
+				</view>
+
+				<!-- <view class="sec1 es-mt-20 es-ml-48 es-mr-48">
+					<view class="es x-bc es-pl-28 es-pt-12">
+						<view class="l1">
+							<view class="x-f">
+								<image class="es-w-44 es-h-44" src="/static/images/course/fozhu.png">
+								</image>
+								<view class="es-ml-8 es-c-white es-fs-32 es-fw-600">名家讲堂</view>
+							</view>
+							<view class="es-fs-30 es-mt-10 es-c-99">畅享10000+VIP视频</view>
+						</view>
+						<view class="es">
+							<image src="/static/images/course/zyx.png" class="es-w-183 es-h-98 es-br-15"></image> -->
+							<!-- <view class="es-fs-20 es-br-8 es-w-80 es-h-30 es-fw-bold x-c" style="position:absolute; right: 0;top:10rpx;background: #000;opacity: 0.7;color: #FFDAA3;">10000+</view> -->
+						<!-- </view>
+					</view>
+				</view> -->
+
+				<!-- <view class="sec2 es es-fx es-pc es-h-56 es-mt-40 es-ml-48 es-mr-48"> -->
+					<!-- <image class="es-w-148 es-h-3" style="position: absolute;left:0;top:16rpx" src="/static/image/course/privilege/line1.png"></image> -->
+					<!-- <view class="es-fs-30 es-h-56 es-fw-bold" style="color: #FFDAA3;">超多权益待你开启</view> -->
+					<!-- <image class="es-w-148 es-h-3" style="position: absolute;right:0;top:16rpx" src="/static/image/course/privilege/line2.png"></image> -->
+				<!-- </view> -->
+
+				<!-- <view class="primenu-box es es-fx es-pc es-mt-20 es-ml-48 es-mr-48">
+					<view class="content-inner">
+						<view class="item">
+							<image class="img" src="/static/images/course/privilege/she.png" mode="heightFix"></image>
+							<text class="label">AI舌诊</text>
+						</view>
+						<view class="item">
+							<image class="img jlxw" src="/static/images/course/privilege/tizhi.png" mode="heightFix">
+							</image>
+							<text class="label">体质检测</text>
+						</view>
+						<view class="item">
+							<image class="img" src="/static/images/course/privilege/baike.png" mode="heightFix"></image>
+							<text class="label">养生百科</text>
+						</view>
+						<view class="item">
+							<image class="img" src="/static/images/course/privilege/yishu.png" mode="heightFix"></image>
+							<text class="label">经典医书</text>
+						</view>
+						<view class="item">
+							<image class="img" src="/static/images/course/privilege/more.png" mode="heightFix"></image>
+							<text class="label">多设备登陆</text>
+						</view>
+						<view class="item">
+							<image class="img" src="/static/images/course/privilege/ad.png" mode="heightFix"></image>
+							<text class="label">去除广告</text>
+						</view>
+					</view>
+				</view> -->
+
+				<view class="es-ml-48 es-mr-48 es-mt-10 es-pt-10 es-pb-10 es-br-5" style="background:#2a2f32">
+					<view v-for="(item, index) in vipMethods" :key="index" @tap="changeVipMethod(index)">
+						<view v-if="index!=0" class="vipMethodItem es x-bc">
+							<view class="x-bc es-ml-14">
+								<view class="es-fs-32  es-fw-500 es-ml-14">{{item}}</view>
+							</view>
+							<image v-if="vipMethodIdx==index" class="es-w-40 es-h-40 es-br-ban es-mr-14 es-mr-26"
+								src="/static/images/course/check.png"></image>
+							<view v-else class="es-w-40 es-h-40 es-br-ban es-mr-14 es-mr-26 circle"></view>
+						</view>
+					</view>
+				</view>
+
+				<view v-if="isShowPayType" class="es-ml-48 es-mr-48 es-mt-40 x-bc" style="background:#2a2f32">
+					<view v-for="(item, index) in payTypes" :key="index" @tap="changePayType(index)"
+						class="payTypeItem es x-bc " :class="payType==index+1?'pt_ac':''">
+						<view class="x-bc es-ml-14">
+							<image class="es-w-59 es-h-52"
+								:src="index==0?'/static/images/course/vipBuy/wx.png':'/static/images/course/vipBuy/zfb.png'">
+							</image>
+							<view class="es-fs-33 es-c-white es-fw-500 es-ml-14">{{item}}</view>
+						</view>
+						<image v-if="payType==index+1" src="/static/images/course/check.png"
+							class="es-w-40 es-h-40 es-br-ban es-mr-14"></image>
+						<view v-else class="es-w-40 es-h-40 es-br-ban es-mr-14 circle"></view>
+					</view>
+				</view>
+
+				<view class="es es-mt-40 es-ml-48 es-mr-48 x-c">
+					<view @tap="doBuy()" class="es-h-94 x-c es-fw-700 es-fs-34 vipCourseBtn vipAc es-br-46"
+						style="width: 310rpx;">
+						立即购买
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+
+		<uni-popup ref="popTip" type="dialog">
+			<uni-popup-dialog cancelText="支付失败" confirmText="支付成功" mode="base" content="是否已支付成功?" title="提示"
+				:duration="2000" :before-close="true" @close="confirmTip" @confirm="confirmTip"></uni-popup-dialog>
+		</uni-popup>
+
+		<!-- 评论弹窗 -->
+		<popupBottom ref="mescrollItem" :visible.sync="specVisible" @close="closePop" :cmdId="courseId"
+			:smsNum="data.commentNum" :title="data.commentNum+'条评论'" :type="1" radius="32" maxHeight="1200">
+		</popupBottom>
+	</view>
+</template>
+
+<script>
+	import {getUserInfo} from '@/api/user'
+	import { getCourseById,getCourseList,getCourseVideoList,checkFavorite,checkFollow,checkLike,doFavorite,doFollow,doLike,addDuration,
+	createCourseOrder,createIntegralOrder,getIntegral,createVipOrder,aliPayment,wxPayment,getCourseOrderById } from '@/api/course'
+	import commentList from "./components/commentList.vue";
+	import hallItem from "@/pages/course/components/hallItem.vue";
+	import popupBottom from '@/components/popupBottom/popupBottom.vue'
+	import MescrollCompMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-comp.js";
+	import adMask from "@/components/adMask/adMask.vue"
+	export default {
+		mixins: [MescrollCompMixin],
+	    components: {
+	    	popupBottom,
+			commentList,
+			hallItem,
+			adMask
+	    },
+		data() {
+			return {
+				player: null,
+				Events: null,
+				isH5: false,
+				showDes: false,
+				showExpandText: false,
+				isExpand: true,
+				textHeight: 0, //文本高度
+				courseId: null,
+				isShare: false,
+				videoId: null,
+				isLearning: false,
+				data: {
+					courseId: null,
+					imgUrl: "",
+					talentAvatar: "",
+					price: "",
+					remark: "",
+					noteNum: 0,
+					courseName: "",
+					description: "",
+					cataIndex: 0,
+					isFast: 1,
+					isAutoPlay: false,
+					commentList: [{
+						avatar: "",
+						content: "",
+						createTime: "",
+						nickName: ""
+					}]
+				},
+				dataList: [],
+				talentId: null,
+				studyLog: null,
+				isNext: 0,			
+				user: {},
+				isFavorite: 0,
+				isFollow: 0,
+				isLike: 0,
+				clientHeight: 0,
+				isShowList: false, // 是否展示讲堂目录列表
+				catalogueList: [],
+				scrollIntoViewId: 'cataLogue0',
+				pickCatalog: {
+					// videoUrl: "https://tcpv.ylrzcloud.com/course/20241014/1728890026184.mp4",
+					videoUrl:"",
+					thumbnail: "",
+					duration: 0,
+					videoId: 0,
+					seconds: 0,
+					studyTime: null,
+					isFast: 1,
+				},
+				pickCatalogIdx: 0,
+				packageJsonList: [],
+				poster: '',
+				showShare: false,
+				shareItem: {
+					imageUrl: "",
+					title: "",
+					path: ""
+				},
+				fullScreen: false,
+				showTherapy: false,
+				showTherapyItem: {},
+				playDuration:0, // 播放时长
+				timer: null, // 定时器
+				lookDuration: 0 ,// 观看时长
+				countdowning: false, // 观看时长计时开关
+				showAudio: false, //音频展示
+				videoPlayStatus:{
+					status: '',
+					tempAudioDuration: 0,
+					studyTime: 0,
+				}, // 视频播放状态
+				pageUrl: '',
+				courseOrderId:0,
+				scrollIntoTherapy: 'therapy0',
+				therapyIndex: null,
+				allLookTimer: null, // 定时器
+				allLookDuration:0,//H5未登录状态播放五分钟就跳出登录页面
+				tempAudioDuration:0, //用于记录视频和音频播放的时间,达到无缝续播				
+				audioTimer:null,
+				playTime:"00:00",
+				studyTimes:0,
+				audioContext: null,
+				audioPlayIng:false,  
+				isPostBack:true,//页面是否已初次加载
+				specVisible: false,
+				esComment:null,
+				vipSelIndex:0,
+				vipMethods:["开通会员"],
+				vipMethodIdx:0,
+				isShowPayType:false,
+				payTypes:["微信支付","支付宝支付"],
+				payType:1,//微信支付1  支付宝支付2
+				createType:3,//1直接购买,2积分兑换 3开通会员
+				orderId:null,
+				order:null,
+				showPayTips:false,
+				isPlayIng:false,//是否正在播放
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
+				direction: "",
+				nodeTime: 0,
+				exitFullscreen: '', //是否退出全屏yes , no 加上时间戳
+			}
+		},
+		onLoad(options) {
+			this.courseId = options.courseId;
+			this.isShare = options.isShare || false
+			this.videoId = options.videoId || null;
+			this.isLearning = options.isLearning || false;
+			// #ifdef APP-PLUS
+			uni.getSubNVueById('videoPopup').hide();
+			uni.$on('getEventType', (data) => {
+				uni.getSubNVueById('videoPopup').hide();
+				if(data.type == 'confirm') {
+					// 确认
+					this.tipConfirm(data.extraData)
+				} else {
+					// 取消
+					this.tipCancel(data.extraData)
+				}
+			})
+			// #endif
+			this.esComment=this.$refs["esComment"];
+			
+			let that=this;
+			uni.$on('refreshTitle', (pingCount) => {
+				that.data.commentNum=pingCount;
+			}); 
+			this.getCourseInfo();
+			if (this.$checkToken()) {
+				this.getUserInfo();
+				this.checkFavorite();
+				this.checkLike();
+			}
+		},
+		onShow() {
+			this.exitFullscreen = 'no'+ new Date().getTime()
+			//#ifdef H5
+			this.isH5 = true;
+			//#endif
+			
+			//#ifdef APP-PLUS
+			   if(this.$checkToken()){
+			   		if(!this.timer){
+			   			this.timer=setInterval(() => {
+			   				if(this.countdowning){   //观看时长计时开关开启
+			   					this.lookDuration+=5;
+			   					this.addIntegral();	
+			   				}			
+			   			}, 5000);
+			   		}
+			   }
+			//#endif
+			if(!this.$checkToken()){
+					if(!this.allLookTimer){
+						this.allLookTimer=setInterval(() => {
+							if(this.countdowning){   //观看时长计时开关开启
+								this.allLookDuration+=5;
+							}			
+						}, 5000);
+					}
+			}
+			this.playFun()
+			if(this.showPayTips){
+				this.$refs.popTip.open();
+				this.showPayTips=false;
+			}
+		},
+		onReady() {
+			this.audioContext = uni.createInnerAudioContext();
+			uni.getSystemInfo({
+				success: (res) => {
+					this.clientHeight = res.windowHeight - uni.upx2px(422) - res.statusBarHeight;
+				}
+			});
+		},
+		onHide() {
+			const type = this.showAudio ? 'audio' : 'video'
+			this.pauseFun(type);
+		},
+		onUnload() {
+			this.exitFullscreen = 'yes'+ new Date().getTime()
+		    // 页面卸载时清除计时器
+		    this.endCountsTime();
+			this.addStudyCourse();
+			this.destoryAudio();
+			// #ifdef APP-PLUS
+			uni.$off('getEventType');
+			// #endif 
+			uni.$emit('refreshStudyTime', {});
+			uni.$off("backStudyTime");
+			uni.$off("refreshUser");
+			uni.$off("showPayTips");
+			uni.$off("pickCatalogAction");
+			uni.$off("refreshTitle");
+			uni.$off("refreshCatalog");
+		},
+		methods: {
+			navBack() {
+				uni.navigateBack({
+					animationType: 'pop-out',
+					animationDuration: 200
+				});
+			},
+			endCountsTime(){
+				if (this.timer) {
+				   clearInterval(this.timer);
+				   this.timer = null;
+				}
+				if (this.allLookTimer) {
+				   clearInterval(this.allLookTimer);
+				   this.allLookTimer = null;
+				}
+			},
+			getCourseInfo() {
+				this.showDes = false
+				getCourseById(this.courseId).then(res => {
+						if (res.code == 200) {
+							this.data = res.data;
+							this.dataList = res.data.courseList;
+							this.talentId = res.data.talentId;
+							this.studyLog = res.data.studyLog;
+							this.isNext = res.data.isNext;
+							this.videoId = this.studyLog ? this.studyLog.videoId : null;
+							this.vipMethods = ["开通会员"];
+							if (this.data.isIntegral == 1) {
+								this.vipMethods.push("积分兑换")
+							}
+							if (this.data.sellPrice > 0) {
+								this.vipMethods.push(this.data.sellPrice + "元购买");
+							}
+							this.getDescHeight()
+							this.getCourseVideoList();
+							if (this.$checkToken()) {
+								this.checkFollow();
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			getDescHeight() {
+				this.$nextTick(() => {
+					const query = uni.createSelectorQuery().in(this);
+					query
+						.select("#descbox-desc")
+						.boundingClientRect((data) => {
+							this.textHeight = data.height
+							this.isExpand = this.textHeight > uni.upx2px(84) ? false : true
+							this.showExpandText = this.textHeight > uni.upx2px(84) ? true : false
+							this.showDes = true
+						})
+						.exec();
+				})
+			},
+			//课程目录
+			getCourseVideoList() {
+				let that = this;
+				const params = {
+					"courseId": this.courseId
+				};
+				getCourseVideoList(params, 1, 50).then(res => {
+						if (res.code == 200) {
+							this.catalogueList = res.data.list;
+							if (this.catalogueList.length > 0) {
+								this.pickCatalogIdx = this.getCatalogIdx();
+								//开始播放计时
+								if (this.data.isAutoPlay == 1) {
+									this.pickCatalogMethod(this.pickCatalogIdx);
+								}
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			canShowVip(item) {
+				return true;
+				if (this.user.isVip) {
+					return false;
+				}
+				return item.isVip == 1 && item.isBuy == 0;
+			},
+			getCatalogIdx() {
+				let index = this.catalogueList.findIndex(item => item.videoId == this.videoId);
+				if (!this.videoId || index < 0) {
+					index = 0;
+				}
+				return index;
+			},
+			getUserInfo() {
+				let that = this;
+				getUserInfo().then(res => {
+						if (res.code == 200) {
+							if (res.user != null) {
+								uni.setStorageSync('userInfo', JSON.stringify(res.user));
+								this.user = res.user;
+							} else {
+								uni.showToast({
+									icon: 'none',
+									title: res.msg,
+								});
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			checkFavorite() {
+				checkFavorite(this.courseId).then(res => {
+						if (res.code == 200) {
+							this.isFavorite = res.isFavorite;
+						}
+					},
+					rej => {}
+				);
+			},
+			checkFollow() {
+				checkFollow(this.talentId).then(res => {
+						if (res.code == 200) {
+							this.isFollow = res.isFollow;
+						}
+					},
+					rej => {}
+				);
+			},
+			checkLike() {
+				checkLike(this.courseId).then(res => {
+						if (res.code == 200) {
+							this.isLike = res.isLike;
+						}
+					},
+					rej => {}
+				);
+			},
+			doFollow() {
+				if (!this.$checkToken()) {
+					this.$showLoginPage();
+					return;
+				}
+				uni.showLoading({
+					title: ""
+				});
+				doFollow(this.talentId).then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							uni.showToast({
+								title: '操作成功',
+								icon: 'none'
+							});
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+						}
+						this.isFollow = !this.isFollow;
+					},
+					rej => {}
+				);
+			},
+			doFavorite() {
+				if (!this.$checkToken()) {
+					this.$showLoginPage();
+					return;
+				}
+				uni.showLoading({
+					title: ""
+				});
+				doFavorite(this.courseId).then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							uni.showToast({
+								title: '操作成功',
+								icon: 'none'
+							});
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+						}
+						this.isFavorite = !this.isFavorite;
+					},
+					rej => {}
+				);
+
+			},
+			doLike() {
+				if (!this.$checkToken()) {
+					this.$showLoginPage();
+					return;
+				}
+				uni.showLoading({
+					title: ""
+				});
+				doLike(this.courseId).then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							uni.showToast({
+								title: '操作成功',
+								icon: 'none'
+							});
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+						}
+						this.isLike = !this.isLike;
+					},
+					rej => {}
+				);
+			},
+			openShare() {
+				if (this.isH5) {
+					return;
+				}
+				console.log("qxj title:" + this.pickCatalog.title);
+				if (this.$isEmpty(this.pickCatalog.title)) {
+					this.shareItem.title = this.data.courseName;
+				} else {
+					this.shareItem.title = this.data.courseName + "-" + this.pickCatalog.title;
+				}
+				this.shareItem.isMini = false
+				this.shareItem.imageUrl = this.data.imgUrl;
+				this.shareItem.courseId = this.courseId;
+				this.shareItem.summary = !this.$isEmpty(this.data.description) ? this.data.description : "";
+				let cdn = uni.getStorageSync('h5Path');
+				this.shareItem.url = cdn + "/pages_course/info?courseId=" + this.courseId;
+				this.showShare = true;
+			},
+			goToComment(){
+				if(this.isH5){
+					this.specVisible=true;
+				}
+				else{
+					// this.$navTo('./comment?courseId='+this.courseId);
+					// return;
+					const subNVue = uni.getSubNVueById('commentN');
+					subNVue.show('slide-in-bottom', 250);
+					uni.$emit('comment', {  
+					    videoId: this.pickCatalog.videoId,  
+					    courseId: this.courseId 
+					});
+				}
+			},
+			closePop(){
+				this.specVisible=false;
+			},
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+			openVipCourse(index) {
+				if(!this.isPostBack){
+					this.isPostBack=true;
+					return;
+				}
+				this.showPopPrivilege(index);
+			},
+			showPopPrivilege(index){
+				if(this.isH5){
+					this.$refs.popPrivilege.open("bottom");
+				}
+				else{
+					const subNVue = uni.getSubNVueById('privilege');
+					subNVue.show('slide-in-bottom', 250);
+					let pickCatalog=this.catalogueList[index];
+					uni.$emit('privilege', {  
+					    videoId: pickCatalog.videoId,  
+					    courseId: this.courseId,
+						sellPrice:this.data.sellPrice,
+						catalogIndex:index,
+						integral: this.data.integral,
+					});
+				}
+			},
+			changeVip(index){
+				this.vipSelIndex=index;
+				if(index==2){
+					this.showPopPrivilege();
+				}
+			},
+			changeVipMethod(index){
+			    this.vipMethodIdx=index;	
+				const vipMethod=this.vipMethods[index];
+				this.isShowPayType=false;
+				if(vipMethod.indexOf('元购买')!=-1){  //直接购买
+					this.isShowPayType=true;
+					this.createType=1;
+				}
+				if(vipMethod.indexOf('积分兑换')!=-1){  //积分兑换
+					this.createType=2;
+				}
+				if(vipMethod.indexOf('开通会员')!=-1){  //开通会员
+					this.createType=3;
+				}
+			},
+			changePayType(index){
+				this.payType=index+1;
+			},
+			doBuy(){
+				if(this.createType==1){  //直接购买
+					 this.createCourseOrder();
+				}
+				else if(this.createType==2){   //积分兑换
+					 this.createIntegralOrder();
+				}
+				else{  //开通会员
+					 this.$navTo('./vipBuy');	
+				}
+			},
+			createCourseOrder(){
+			   	if(!this.$checkToken()){
+			   		this.$showLoginPage();
+			   		return;
+			   	}
+			   	uni.showLoading({title:""});
+				let params={"courseId":this.courseId,"createType":this.createType,"videoId":this.pickCatalog.videoId,"payType":this.payType};
+			   	createCourseOrder(params).then(res => {
+			   			uni.hideLoading();
+			   			if(res.code==200){
+							this.order=res.order;
+							if(this.payType==1){  //微信支付
+								this.doWxPay();
+							}else{   //支付宝
+								this.doAlipay();
+							}
+			   			}else{
+			   				uni.showToast({title: res.msg,icon: 'none'});
+			   			}
+			   		},
+			   		rej => {}
+			   	);
+			},
+			createIntegralOrder(){
+			   	if(!this.$checkToken()){
+			   		this.$showLoginPage();
+			   		return;
+			   	}
+			   	uni.showLoading({title:""});
+				let params={"courseId":this.courseId,"videoId":this.pickCatalog.videoId};
+			   	createIntegralOrder(params).then(res => {
+			   			uni.hideLoading();
+			   			if(res.code==200){
+			   				uni.showToast({title: res.msg,icon: 'success'});
+							
+			   			}else{
+			   				uni.showToast({title: res.msg,icon: 'none'});
+			   			}
+			   		},
+			   		rej => {}
+			   	);
+			},
+			doAlipay(){
+				var data = {orderId:this.order.orderId};
+				uni.showLoading();
+				aliPayment(data).then(res => {
+						uni.hideLoading()
+						this.$refs.popPrivilege.close();
+						if(res.code==200){
+							this.$refs.popTip.open();
+							if (uni.getSystemInfoSync().platform == 'android') {
+								var alipayScheme ='alipays://platformapi/startApp?&saId=10000007&qrcode=' + res.data.qr_code;
+								
+							}else{
+							    var alipayScheme ='alipay://platformapi/startApp?&saId=10000007&qrcode=' + res.data.qr_code;
+							    	
+							}
+							console.log(alipayScheme)
+							// 在uni-app中使用plus.runtime.openURL打开URL
+							plus.runtime.openURL(alipayScheme, function(error) {
+							  // console.error('打开支付宝失败: ' + error.message);
+							  // 处理打开支付宝失败的情况,比如提示用户或者跳转到其他支付方式
+							});
+						}
+						else{
+							uni.showToast({
+								title:res.msg,
+								icon:'none'
+							})
+							
+						}
+					},
+					rej => {}
+				);
+			},
+			doWxPay(){
+				var that=this;
+				plus.share.getServices(function(res){
+				    var sweixin = null;  
+				    for(var i=0;i<res.length;i++){  
+				        var t = res[i];  
+				        if(t.id == 'weixin'){  
+				            sweixin = t;  
+				        }  
+				    }  
+					if(sweixin){
+						console.log('调起小程序')
+						that.$refs.popPrivilege.close();
+						that.$refs.popTip.open()
+						//唤起微信跳转小程序
+						sweixin.launchMiniProgram({
+							id:"gh_7a6a32e5ef61",
+							path:'pages_order/coursePayment?orderId='+that.orderId+"&payMethod=app",
+							type:0
+						},function(){
+							console.log("微信唤起成功");
+							return true;
+						},function(e){
+							console.log("微信唤起失败",e);
+							uni.showToast({
+								title:'微信唤起失败,请检查是否有微信应用',
+								icon:'none'
+							})
+							return false;
+						})
+						
+					}else{
+						uni.showToast({
+							title:'微信唤起失败,请检查是否有微信应用',
+							icon:'none',
+							duration:3000
+						})
+						return false;
+					}
+				      
+				},function(res){  
+				    console.log(JSON.stringify(res));  
+				});
+			},
+			goToCatalogue(){
+				if(this.isH5){
+					 let url='./catalogue?courseId='+this.courseId+'&videoId='+this.pickCatalog.videoId+'&isAutoPlay='+this.data.isAutoPlay+'&studyTimes='+this.tempAudioDuration;
+					 this.$navTo(url);	
+				}
+				else{
+					const subNVue = uni.getSubNVueById('catalogueN');
+					subNVue.show('slide-in-bottom', 250);
+					uni.$emit('catalogue', {  
+					    videoId: this.pickCatalog.videoId,  
+					    courseId: this.courseId,
+						pickCatalogIdx:this.pickCatalogIdx 
+					});
+				}
+			},
+			pickCatalogAction(index,type){
+				if (this.pickCatalogIdx === index) return;
+				if(type == 'catalogueN'&&this.isNext == 1 && this.pickCatalogIdx != index - 1) {
+					const type = this.showAudio ? 'audio' : 'video'
+					this.pauseFun(type);
+					this.openTips(index)
+					return
+				}
+				this.pickCatalogActionFun(index,type)
+			},
+			pickCatalogActionFun(index,type) {
+				if(!this.$checkToken()){   //切换小节需要登录
+					this.$showLoginPage();
+					return;
+				}
+				if(this.isH5 && index>1){
+					uni.showToast({title: "请下载App观看",icon: 'none'});
+					return;
+				}
+				//切换之前添加课程目录学习记录
+				this.addStudyCourse();
+				this.addIntegral();	//加积分
+				this.pickCatalogMethod(index,type);
+				this.scrollIntoViewId = 'cataLogue' + index;
+			},
+			pickCatalogMethod(index,type){
+				let tempCatalogue=this.catalogueList[index];
+				this.lookDuration=0;//重置观看当前小节的课程时长
+				if(tempCatalogue.isVip==1){  //需要Vip才能观看
+					if(!this.$checkToken()){
+						this.$showLoginPage();
+						return;
+					}
+					if(this.user==null){
+						this.user=this.$getUserInfo();
+					}
+					if(this.user.isVip!=1 && tempCatalogue.isBuy!=1){
+						this.openVipCourse(index);
+						return;
+					}
+				}
+				this.pickCatalogIdx=index;
+				//传递消息给小节弹窗
+				uni.$emit('pickCatalogIdx', {pickCatalogIdx:index,type:type});  
+				this.pickCatalog=this.catalogueList[index];
+				this.pickCatalog.isFast = this.data.isFast
+				this.packageJsonList = this.pickCatalog && this.pickCatalog.packageJson ? JSON.parse(this.pickCatalog.packageJson) : []
+				this.initStudyTime(this.pickCatalog.studyTime || 0)
+				const url = this.pickCatalog.lineTwo ? this.pickCatalog.lineTwo : this.pickCatalog.videoUrl
+				this.resetAudioContext(url)
+			},
+			resetAudioContext(url) {
+				if (this.audioContext==null) {
+				    this.audioContext = uni.createInnerAudioContext();
+				}
+				this.audioContext.src = url
+				// this.audioContext.src = this.pickCatalog.videoUrl;
+				this.audioContext.onTimeUpdate(()=>{
+					this.initStudyTime(this.audioContext.currentTime)
+				})
+			},
+			changeLine(data) {
+				this.resetAudioContext(data.url)
+			},
+			endedPlayNext(type){
+				let nextCatalog=this.catalogueList[this.pickCatalogIdx+1];
+				if(!nextCatalog){
+					return;
+				}
+				if(nextCatalog && this.pickCatalogIdx<this.catalogueList.length-1){  //未播放到最后一节自动续播
+					this.pickCatalogAction(this.pickCatalogIdx+1)
+				}
+			},
+			endedPlayPrev(){
+				if(this.pickCatalogIdx == 0) {
+					uni.showToast({
+						title: '已经是第一节视频了',
+						icon: 'none',
+						position: 'top',
+						duration: 2000
+					})
+					return 
+				}
+				let nextCatalog=this.catalogueList[this.pickCatalogIdx-1];
+				if(!nextCatalog){
+					return;
+				}
+				this.pickCatalogAction(this.pickCatalogIdx-1)
+			},
+			addStudyCourse(){
+				if(this.catalogueList.length==0 || this.tempAudioDuration==0){
+					return;
+				}
+				// this.pickCatalog=this.catalogueList[this.pickCatalogIdx];
+				// this.packageJsonList = this.pickCatalog && this.pickCatalog.packageJson ? JSON.parse(this.pickCatalog.packageJson) : []
+				if(this.pickCatalog.isBuy==0){
+					return;
+				}
+				const parmas={"courseId":parseInt(this.courseId),"duration":this.tempAudioDuration,"videoId":this.pickCatalog.videoId};
+				addDuration(parmas).then(res => {
+						if(res.code==200){
+							
+						}
+					},
+					rej => {}
+				);
+			},
+			addIntegral(){
+				// 观看到视频时长50%加一次积分
+				if(this.lookDuration==0 || this.playDuration==0){
+					return;
+				}
+				// this.pickCatalog=this.catalogueList[this.pickCatalogIdx];
+				// this.packageJsonList = this.pickCatalog && this.pickCatalog.packageJson ? JSON.parse(this.pickCatalog.packageJson) : []
+				if(this.lookDuration<this.pickCatalog.seconds*0.5){
+					return;
+				}
+				let data={videoId:this.pickCatalog.videoId,duration:this.lookDuration};
+				getIntegral(data).then(res => {
+						if(res.code==200){
+							uni.showToast({icon:'none',title:res.msg,duration:3000,position:'bottom'});
+							this.countdowning=false;
+						}
+					},
+					rej => {}
+				);
+			},
+			closeShareAct(){
+				this.showShare=false;
+			},
+			closeTherapy() {
+				this.showTherapy = false
+			},
+			goToPro(productId) {
+				this.exitFullscreen = 'yes'+ new Date().getTime()
+				this.showTherapy = false
+				setTimeout(()=> {
+					uni.navigateTo({
+						url: "/pages/store/packageDetails?packageId="+productId
+					});
+				}, 500);
+			},
+			// 返回视频
+			backPlayVideo() {
+				this.showAudio = false;
+				this.audioPlayIng = false;
+				this.isLearning=false;
+				this.pauseFun('audio');
+				this.playFun();
+			},
+			changeCountdowning(data) {
+				this.countdowning=data.countdowning;
+			},
+			onTimeUpdate(data) {
+				this.playDuration = Math.round(data.time)
+				this.initStudyTime(this.playDuration)
+				if(data.time>=this.pickCatalog.seconds){
+					this.countdowning = false;  //观看时长开关关闭					  
+				}
+				if(this.isH5){
+					 if(this.allLookDuration>=300){   //H5未登录状态播放五分钟就跳出登录页面
+						 if(!this.$checkToken()){
+							 this.$showLoginPage();
+							 const type = this.showAudio ? 'audio' : 'video'
+							 this.pauseFun(type);
+						 }
+					 }
+				}
+				else{
+					 if(this.allLookDuration>=120){   //未登录状态播放两分钟就跳出登录页面
+						 if(!this.$checkToken()){
+							 this.$showLoginPage();
+							 const type = this.showAudio ? 'audio' : 'video'
+							 this.pauseFun(type);
+						 }
+					 }
+				}
+				uni.$u.throttle(this.checkTherapy, 1000,false);
+			},
+			checkTherapy() {
+				let currentTime = Math.round(this.tempAudioDuration || 0)
+				let node = this.packageJsonList.filter(item => item.duration == currentTime)
+				if(node&&node.length > 0) {
+					this.nodeTime = node[0].duration
+					this.showTherapyItem = node[0]
+					if(!this.showTherapy) {
+						this.showTherapy = true
+					}
+				} else {
+					if(this.showTherapy && this.nodeTime && this.nodeTime > currentTime) {
+						this.showTherapy = false
+					}
+				}
+			},
+			// 打开集观看提示弹窗
+			openTips(index){
+				// #ifdef APP-PLUS
+				uni.$emit('getTipShowType', {index:index})
+				uni.getSubNVueById('videoPopup').show();
+				// #endif 
+			},
+			tipConfirm() { // 提示确认
+				// 继续播放
+				//传递消息给小节弹窗
+				uni.$emit('pickCatalogIdx', {pickCatalogIdx:this.pickCatalogIdx,type: 'catalogueN'}); 
+				this.playFun()
+			},
+			tipCancel(index) { // 提示取消
+				// 播放选择的一节
+				this.pickCatalogActionFun(index,'catalogueN')
+			}, 
+			// 听声
+			handleListen() {
+				if(this.showAudio) {
+					this.backPlayVideo()
+				} else {
+					// 打开音频
+					this.showAudio = true
+					this.pauseFun('video');
+					this.playFun()
+				}
+			},
+			// 播放音频
+			playAudioAction(type) {
+				if(!this.audioPlayIng){
+					setTimeout(()=>{
+						this.audioContext.play()
+					},200)
+				}
+				else{
+					this.pauseAudioAction()
+				}
+				this.audioPlayIng=!this.audioPlayIng;
+			},
+			// 播放
+			playFun() {
+				this.audioPlayIng = false
+				if(this.showAudio) {
+					const ended = this.tempAudioDuration == this.pickCatalog.seconds
+					this.audioContext.seek(ended ? 0: this.tempAudioDuration);
+					// this.audioContext.onSeeked(() => {
+						this.playAudioAction()
+					// })
+				} else {
+					this.videoPlayStatus={
+						status: 'play'+ new Date().getTime(),
+						tempAudioDuration: this.tempAudioDuration || 0,
+						studyTime: this.pickCatalog.studyTime,
+					}
+				}
+			},
+			initStudyTime(time){
+				this.tempAudioDuration = Math.round(time)
+			},
+			// 暂停音频
+			pauseAudioAction() {
+				if(this.audioContext) {
+					setTimeout(()=>{
+						this.audioContext.pause();
+					},200)
+				   clearInterval(this.audioTimer);
+				   this.audioTimer=null;
+				}
+			},
+			destoryAudio() {
+				if(this.audioContext) {
+					this.audioContext.destroy();
+					clearInterval(this.audioTimer);
+					this.audioTimer=null;
+				}
+			},
+			// 暂停
+			pauseFun(type) {
+				this.audioPlayIng = true
+				if(type == 'audio') {
+					this.pauseAudioAction()
+				} else if(type == 'video'){
+					this.videoPlayStatus={
+						status: 'pause'+ new Date().getTime(),
+						tempAudioDuration: this.tempAudioDuration || 0,
+						studyTime: this.pickCatalog.studyTime,
+					}
+				}
+			},
+			closePrivilege(){
+				this.$refs.popPrivilege.close();
+			},
+			closeTip(){
+				this.$refs.popTip.close();
+			},
+			canShowVip(item){
+				return true;
+				if(this.user.isVip){
+					return false;
+				}
+				return item.isVip==1 && item.isBuy==0;
+			},
+			confirmTip() {
+				this.getUserInfo();
+				this.getCourseInfo();
+				this.$refs.popTip.close();
+				uni.showLoading({title:"请稍侯...",mask:true,duration:3000});
+				setTimeout(()=>{
+					this.getCourseOrderById();
+				},2000);
+			},
+			getCourseOrderById(){
+				getCourseOrderById(this.courseOrderId).then(res => {
+					    uni.hideLoading();
+						if(res.code==200){
+							if(res.order.status==2 || res.order.payTime!=null){
+								// #ifdef APP-PLUS
+								if(plus.runtime.channel=="baidu"){  //获取渠道标识
+									let bdCmdType=uni.getStorageSync("bdCmdType");
+									if(bdCmdType!=null && parseInt(bdCmdType)<=2){
+									    //this.$registerIdCode("orders",2,res.order.payMoney.toString()); //已下单
+									}
+								}
+								//  #endif
+								uni.showToast({title:"支付成功",icon:'success'});
+							}
+							else if(res.order.status==1){
+								uni.showToast({title:"课程待支付请稍侯",icon:'none'});
+							}
+							else{
+								uni.showToast({title:"支付失败",icon:'error'});
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			handleTherapy(item,idx) {
+				this.scrollIntoTherapy = 'therapy' + idx,
+				this.therapyIndex = idx
+				setTimeout(()=> {
+					uni.navigateTo({
+						url: "/pages/store/packageDetails?packageId="+item.packageId
+					});
+				}, 500);
+			},
+			onFullscreenChange(data) {
+				this.fullScreen = data.isFullscreen
+				// direction取为 vertical 或 horizontal
+				this.direction = data.direction
+				if (!data.isFullscreen) {
+					// 退出全屏,锁定竖屏
+					// #ifdef APP-PLUS
+					plus.screen.lockOrientation('portrait-primary');
+					// #endif
+				}
+			},
+			// 全屏返回
+			videoback() {
+				this.exitFullscreen = 'yes'+ new Date().getTime()
+			}
+		},
+		created() {
+			let that = this;
+			uni.$on('backStudyTime', function(data) {
+				 that.videoId=data.videoId;
+				 that.pickCatalogIdx=that.getCatalogIdx();
+				 that.pickCatalog=that.catalogueList[that.pickCatalogIdx];
+				 that.pickCatalog.studyTime=data.studyTimes;
+				 that.catalogueList[that.pickCatalogIdx]=that.pickCatalog;
+				
+				 that.packageJsonList = that.pickCatalog && that.pickCatalog.packageJson ? JSON.parse(that.pickCatalog.packageJson) : []
+				 that.pickCatalogMethod(that.pickCatalogIdx);
+			});
+			
+			uni.$on('showPayTips', function(data) {
+				console.log("qxj showPayTips")
+				that.courseOrderId=data.courseOrderId;
+				//that.showPayTips=true;
+				that.$refs.popTip.open();
+			});
+			
+			uni.$on('refreshUser', function(data) {
+				that.getUserInfo();
+				that.getCourseInfo();
+			});
+			
+			uni.$on('pickCatalogAction', function(data) {
+				that.pickCatalogAction(data.index,data.type);
+			});
+			uni.$on('refreshCatalog', function(index) {
+				let catalog=that.catalogueList[index];
+				catalog.isBuy=true;
+				that.catalogueList[index]=catalog;
+			});
+		},
+		destroyed() {
+			uni.$off("backStudyTime");
+			uni.$off("refreshUser");
+			uni.$off("showPayTips");
+			uni.$off("pickCatalogAction");
+			uni.$off("refreshTitle");
+			uni.$off("refreshCatalog");
+			// #ifdef APP-PLUS
+			uni.$off('getEventType');
+			// #endif 
+		}
+	}
+</script>
+
+<script module="xgplayer" lang="renderjs">
+	// import Player from "xgplayer"
+	// import Mp4Plugin from "xgplayer-mp4"
+	// import 'xgplayer/dist/index.min.css';
+	let xgPlayer
+	export default {
+		data() {
+			return {
+				player: null,
+				ownerInstance: null,
+				ownerInstanceVideo: null,
+				isFullscreen: false,
+				isCSSFull: false,
+				lineName:""
+			}
+		},
+		beforeDestroy() {
+			if(this.player) {
+				if(this.isFullscreen) {
+					if(this.isCSSFull) {
+						this.player.exitCssFullscreen()
+					} else {
+						this.player.exitFullscreen()
+					}
+				}
+				this.player.destroy() 
+				// 销毁播放器
+				this.player = null 
+			}
+		},
+		methods: {
+			initJs(newValue, oldValue,ownerInstance) {
+				if (typeof window.Player === 'function') {
+					this.initPlayer(newValue, oldValue,ownerInstance)
+				} else {
+					// 动态引入较大类库避免影响页面展示
+					const script = document.createElement('script')
+					// view 层的页面运行在根目录
+					script.src = 'https://unpkg.byted-static.com/xgplayer/3.0.20/dist/index.min.js'
+					script.onload = this.initPlayer.bind(this, newValue, oldValue,ownerInstance)
+					document.head.appendChild(script)
+					const l_tag = document.createElement('link'); // 引入播放器css
+					l_tag.rel = 'stylesheet';
+					l_tag.href = 'https://unpkg.byted-static.com/xgplayer/3.0.20/dist/index.min.css';
+					document.body.appendChild(l_tag);
+				}
+			},
+
+			initPlayer(newValue, oldValue,ownerInstance) {
+				this.Events = window.Player.Events
+				if (!this.ownerInstance) this.ownerInstance = ownerInstance
+				let xgplayerOption = {
+					lang: 'zh',
+					url: "",
+					id: 'detail-video',
+					autoplay: false,
+					// height: uni.upx2px(422),
+					height: '100%',
+					width: '100%',
+					poster: "",
+					'x5-video-player-type': 'h5', // 微信内置浏览器设置,防止被浏览器劫持
+					playsinline: true,
+					playbackRate: false,
+					ignores: ['volume', 'miniscreen', 'keyboard'],
+					plugins: [],
+					startTime: 0, // 起始播放时间
+					fullscreenTarget: document.querySelector('.video-container'),
+					commonStyle: {
+						// 播放完成部分进度条底色
+						playedColor: '#FF5C03',
+						cachedColor: 'transparent'
+					},
+					seekedStatus: 'auto',
+					disableGesture: true,
+					closeVideoTouch: true,
+					closeVideoDblclick: true,
+					closeVideoClick: false,
+					progress: {
+						isDraggingSeek: false,
+						isCloseClickSeek: true,
+						closeMoveSeek: true
+					},
+					fullscreen:{
+						useScreenOrientation: true,
+						lockOrientationType: 'landscape'
+					},
+					definition: {
+						defaultDefinition: "线路二"
+					}
+				}
+				xgplayerOption.url = newValue.lineTwo ? newValue.lineTwo : newValue.videoUrl
+				xgplayerOption.definition.defaultDefinition = newValue.lineTwo ? '线路二' :'线路一'
+				if(!xgplayerOption.url) return
+				xgplayerOption.poster = newValue.thumbnail
+				if(newValue.studyTime && newValue.seconds != newValue.studyTime) {
+					xgplayerOption.startTime = newValue.studyTime
+				}
+				if(newValue.isFast == 1) {
+					// 允许拖动进度条
+					xgplayerOption.progress.isCloseClickSeek = false
+					xgplayerOption.progress.closeMoveSeek = false
+				}else {
+					// 不允许拖动进度条
+					xgplayerOption.progress.isCloseClickSeek = true
+					xgplayerOption.progress.closeMoveSeek = true
+				}
+				if(this.player) {
+					this.player.playNext({
+						url: newValue.lineTwo ? newValue.lineTwo : newValue.videoUrl,
+						startTime: newValue.startTime || 0,
+						poster:xgplayerOption.thumbnail  || '',
+						ignores:xgplayerOption.ignores,
+						progress: xgplayerOption.progress,
+						definition: xgplayerOption.definition,
+					})
+				} else {
+					this.player = new Player(xgplayerOption);
+				}
+				if(newValue.isFast == 1) {
+					this.player.getPlugin('progress').show()
+				}else {
+					this.player.getPlugin('progress').hide()
+				}
+				let lines=[]
+				if(newValue.lineOne) {
+					lines.push({
+						name: '线路一', 
+						definition: '线路一', 
+						url:newValue.lineOne
+					})
+				}
+				if(newValue.lineTwo) {
+					lines.push({
+						name: '线路二', 
+						definition: '线路二', 
+						url:newValue.lineTwo
+					})
+				} 
+				if(newValue.lineThree) {
+					lines.push({
+						name: '线路三', 
+						definition: '线路三', 
+						url:newValue.lineThree
+					})
+				} 
+				this.player.emit('resourceReady', lines)
+				this.progressMove(xgplayerOption)
+			},
+			progressMove(data) {
+				this.rjsPlayFun(data)
+				const Events = this.Events
+				this.player.on(Events.PlAY, () => {
+				  this.ownerInstance.callMethod("changeCountdowning",{countdowning:true})
+				})
+				this.player.on(Events.PLAYING, () => {
+					// console.log("===播放Events.PLAYING")
+				  this.ownerInstance.callMethod("changeCountdowning",{countdowning:true})
+				})
+				this.player.on(Events.WAITING, () => {
+					this.ownerInstance.callMethod("changeCountdowning",{countdowning:false})
+				})
+				this.player.on(Events.PAUSE, () => {
+					// console.log("===暂停Events.PAUSE")
+				  this.ownerInstance.callMethod("changeCountdowning",{countdowning:false})
+				})
+				this.player.on(Events.ERROR, (error) => {
+					console.log('video error:', error)
+					this.ownerInstance.callMethod("changeCountdowning",{countdowning:false})
+				})
+				// 监听用户的播放进度
+				this.player.on(Events.TIME_UPDATE, () => {
+					this.ownerInstance.callMethod("onTimeUpdate",{time: this.player.currentTime});
+				})
+				this.player.on(Events.ENDED, () => {
+					this.ownerInstance.callMethod("changeCountdowning",{countdowning:false})
+				})
+				this.player.on(Events.FULLSCREEN_CHANGE, (isFullscreen) => {
+					if(this.isFullscreen == isFullscreen) return
+					this.isFullscreen = isFullscreen
+					plus.screen.lockOrientation('landscape')
+					this.ownerInstance.callMethod("onFullscreenChange",{isFullscreen:isFullscreen})
+				})
+				this.player.on(Events.CSS_FULLSCREEN_CHANGE, (isFullscreen) => {
+					if(this.isFullscreen == isFullscreen) return
+					this.isCSSFull = true
+					this.isFullscreen = isFullscreen
+					this.ownerInstance.callMethod("onFullscreenChange",{isFullscreen:isFullscreen})
+				})
+				// 清晰度发生变化
+				this.player.on(Events.DEFINITION_CHANGE, (res) => {
+					if(this.lineName == res.to.name) return
+					this.lineName = res.to.name
+					this.ownerInstance.callMethod("changeLine",{url: res.to.url})
+				})
+			},
+			rjsPlayFun(xgplayerOption){
+				this.ownerInstance.callMethod("playFun",{time: xgplayerOption.startTime})
+			},
+			changeVideo(newValue, oldValue,ownerInstance) {
+				if (!this.ownerInstanceVideo) this.ownerInstanceVideo = ownerInstance
+				if(this.player) {
+					if(newValue.status.indexOf('play') > -1) {
+						const tempAudioDuration = newValue.tempAudioDuration
+						const flag = newValue.tempAudioDuration != newValue.studyTime
+						if(flag) {
+							this.player.seek(tempAudioDuration)
+							this.player.on(this.Events.SEEKED, () => {
+								setTimeout(()=>{
+									this.player.play()
+								},200)
+							})
+						} else {
+							setTimeout(()=>{
+								this.player.play()
+							},200)
+						}
+					}else if(newValue.status.indexOf('pause') > -1) {
+						this.player.pause()
+					}
+				}
+			},
+			handleExitFullscreen(newValue, oldValue,ownerInstance) {
+				// 退出全屏
+				if(this.player&&this.isFullscreen && newValue.indexOf('yes') > -1) {
+					if(this.isCSSFull) {
+						this.player.exitCssFullscreen()
+					} else {
+						this.player.exitFullscreen()
+					}
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+
+	.content {
+		background: #f7f7f7;
+	}
+	.cousrseImg {
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 422rpx;
+		background-color: #000;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	.video-box {
+		width: 100%;
+		height: calc(var(--status-bar-height) + 422rpx);
+		overflow: hidden;
+		position: relative;
+		padding-top: var(--status-bar-height);
+	}
+
+	.scroll-Y {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 28rpx;
+		color: #222222;
+	}
+
+	.horizontal {
+		width: 130px;
+		height: 150px;
+		position: absolute;
+		bottom: 50px;
+		left: 20px;
+		z-index: 999;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: flex-end;
+		background-color: transparent;
+
+		.es-w-40 {
+			width: 20px;
+		}
+
+		.es-h-40 {
+			height: 20px;
+		}
+
+		.goods {
+			width: 120px;
+			height: 140px;
+			border-radius: 10px;
+			background-color: rgba(255, 255, 255, 0.4);
+			overflow: hidden;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+		}
+
+		.goodsimg {
+			width: 100px;
+			height: 100px;
+			border-radius: 10px;
+		}
+
+		.goodsname {
+			width: 100px;
+			font-size: 12px;
+			box-sizing: border-box;
+			padding-top: 7px;
+			verflow: hidden;
+			word-break: break-all;
+		}
+	}
+
+	.rotate {
+		transform: rotate(-180deg);
+	}
+
+	.status_bar {
+		background-color: #000;
+	}
+
+	.back-img {
+		width: 25px;
+		height: 25px;
+		position: absolute;
+		top: calc(var(--status-bar-height) + 10px);
+		left: 34rpx;
+		z-index: 99;
+	}
+
+	.audiobox {
+		width: 100%;
+		height: 422rpx;
+		position: absolute;
+		top: 0;
+		left: 0;
+		background-color: #333;
+		z-index: 9990;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 26rpx;
+		color: #fff;
+
+		&-video {
+			background-color: rgba(255, 255, 255, 0.3);
+			padding: 8rpx 20rpx;
+			border-radius: 50rpx;
+			position: absolute;
+			bottom: 40rpx;
+			left: 50%;
+			transform: translateX(-50%);
+			z-index: 9991;
+			text-align: center;
+		}
+
+		&-title {
+			position: absolute;
+			top: 0;
+			left: 0;
+			z-index: 9991;
+			padding: 30rpx 40rpx;
+			width: 100%;
+			box-sizing: border-box;
+			background: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.8) 100%);
+			display: flex;
+			align-items: center;
+			.back {
+				width: 50rpx;
+				height: 50rpx;
+				margin-right: 15rpx;
+				flex-shrink: 0;
+			}
+		}
+
+		&-time {
+			margin-top: 18rpx;
+			font-size: 24rpx;
+		}
+	}
+	.scroll-Y {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 28rpx;
+		color: #222222;
+	}
+
+	.video-info {
+		padding: 24rpx;
+		background-color: #fff;
+
+		&-header {
+			width: 100%;
+			@include u-flex(row, center, space-between);
+		}
+
+		&-headerl {
+			flex: 1;
+			@include u-flex(row, center, flex-start);
+			font-weight: 500;
+			font-size: 32rpx;
+			overflow: hidden;
+
+			image {
+				flex-shrink: 0;
+				width: 88rpx;
+				height: 88rpx;
+				margin-right: 28rpx;
+				background: #F5F7FA;
+				border-radius: 50%;
+				overflow: hidden;
+			}
+		}
+
+		.follow-btn {
+			@include u-flex(row, center, center);
+			height: 56rpx;
+			min-width: 154rpx;
+			padding: 0 23rpx;
+			background: #FF5C03;
+			border-radius: 28rpx 28rpx 28rpx 28rpx;
+			color: #FFFFFF;
+			font-size: 28rpx;
+
+			image {
+				height: 32rpx;
+				width: 32rpx;
+				margin-right: 6rpx;
+			}
+		}
+
+		&-voice {
+			width: 100%;
+			padding: 24rpx 20rpx 38rpx 28rpx;
+			margin-top: 26rpx;
+			background: #F5F7FA;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			box-sizing: border-box;
+
+			image {
+				width: 48rpx;
+				height: 48rpx;
+			}
+
+			&-l {
+				@include u-flex(row, center, flex-start);
+
+				image {
+					margin-right: 20rpx;
+				}
+			}
+		}
+
+		&-voicebox1 {
+			@include u-flex(row, center, space-between);
+		}
+
+		&-voicebox2 {
+			padding: 24rpx 0;
+			@include u-flex(row, center, space-between);
+			font-weight: 400;
+			font-size: 26rpx;
+			color: #757575;
+		}
+
+		::v-deep .uni-collapse-item__title-arrow {
+			margin-right: -8rpx;
+		}
+
+		.opacity {
+			position: relative !important;
+			opacity: 1 !important;
+			z-index: 1 !important;
+		}
+
+		&-desc {
+			margin-bottom: 52rpx;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #222222;
+			word-break: break-all;
+			overflow: hidden;
+			line-height: 42rpx;
+			position: absolute;
+			opacity: 0;
+			z-index: -1;
+
+			.desc-image {
+				height: 60rpx;
+				width: 100%;
+				position: absolute;
+				bottom: 0;
+				left: 0;
+			}
+		}
+
+		.text-clamp {
+			display: -webkit-box;
+			-webkit-line-clamp: 2;
+			/* 显示的行数 */
+			-webkit-box-orient: vertical;
+			/* 内容会垂直堆叠 */
+			overflow: hidden;
+			/* 隐藏溢出的内容 */
+			text-overflow: ellipsis;
+			/* 当内容被裁剪时显示省略号 */
+		}
+
+		&-footer {
+			@include u-flex(row, center, space-between);
+			color: #757575;
+			font-weight: 400;
+			font-size: 24rpx;
+
+			view {
+				width: 128rpx;
+				height: 104rpx;
+				@include u-flex(column, center, center);
+			}
+
+			image {
+				width: 48rpx;
+				height: 48rpx;
+				margin-bottom: 8rpx;
+			}
+		}
+	}
+
+	.box-header {
+		height: 80rpx;
+		padding: 0 24rpx;
+		@include u-flex(row, center, space-between);
+		font-weight: 500;
+		font-size: 24rpx;
+		color: #999999;
+
+		&-title {
+			color: #222222;
+			font-size: 34rpx;
+		}
+
+		&-r {
+			@include u-flex(row, center, flex-start);
+
+			image {
+				width: 48rpx;
+				height: 48rpx;
+			}
+		}
+	}
+
+	.therapy {
+		background-color: #fff;
+		padding-left: 24rpx;
+		padding-bottom: 20rpx;
+
+		&-scrollx {
+			white-space: nowrap;
+			width: 100%;
+			// margin-left: 24rpx;
+		}
+
+		&-scrollitem {
+			display: inline-block;
+			overflow: hidden;
+			background: #F5F7FA;
+			padding: 10rpx;
+			margin-right: 20rpx;
+			border-radius: 10rpx;
+			overflow: hidden;
+			border: 1rpx solid #F5F7FA;
+			box-sizing: border-box;
+			position: relative;
+
+			image {
+				width: 200rpx;
+				height: 200rpx;
+				border-radius: 10rpx;
+				background-color: #F5F7FA;
+			}
+
+			&::after {
+				content: '查看详情';
+				background-color: #F5F7FA;
+				position: absolute;
+				top: 0;
+				left: 0;
+				font-weight: 400;
+				font-size: 20rpx;
+				padding: 4rpx 14rpx;
+				border-radius: 10rpx 0 10rpx 0;
+				color: #757575;
+			}
+		}
+
+		&-active {
+			background: #fff;
+			border: 1rpx solid #FF5C03;
+
+			.therapy-goodsname {
+				color: #FF5C03 !important;
+			}
+
+			&::after {
+				background: #fff;
+				color: #FF5C03 !important;
+			}
+		}
+
+		&-goodsname {
+			margin-top: 6rpx;
+			width: 200rpx;
+			min-height: 64rpx;
+			font-size: 24rpx;
+			color: #757575;
+			word-break: break-all;
+			white-space: normal;
+		}
+	}
+
+	.video-directory {
+		background-color: #fff;
+		padding-top: 12rpx;
+		margin-top: 20rpx;
+
+		&-scrollx {
+			white-space: nowrap;
+			width: calc(100% - 24rpx);
+			margin-left: 24rpx;
+		}
+
+		&-scrollitem {
+			display: inline-block;
+			width: 276rpx;
+			height: 160rpx;
+			background: #F5F7FA;
+			border-radius: 8rpx 8rpx 8rpx 8rpx;
+			margin-right: 18rpx;
+			padding: 20rpx 12rpx 20rpx 20rpx;
+			box-sizing: border-box;
+			position: relative;
+			margin-bottom: 20rpx;
+			overflow: hidden;
+		}
+
+		.freeflag {
+			min-width: 68rpx;
+			height: 32rpx;
+			padding: 0 12rpx 0 12rpx;
+			text-align: center;
+			line-height: 32rpx;
+			position: absolute;
+			right: 0;
+			top: 0;
+			font-weight: 500;
+			font-size: 20rpx;
+			color: #FFFFFF;
+			border-radius: 0 8rpx 0 8rpx;
+			box-sizing: border-box;
+			&-free {
+				// background: url('@/static/images/course/free_lable_bg.png') no-repeat right / 100% 32rpx;
+				background-color: #FF5C03;
+			}
+
+			&-member {
+				// background: url('@/static/images/course/member_label_bg.png') no-repeat right / 100% 32rpx;
+				background-color: #FFB205;
+			}
+		}
+
+		&-num {
+			font-weight: 500;
+			font-size: 28rpx;
+			@include u-flex(row, center, flex-start);
+
+			image,
+			.empty {
+				width: 48rpx;
+				height: 48rpx;
+				margin-left: 10rpx;
+			}
+		}
+
+		&-title {
+			@include u-flex(row, center, space-between);
+			font-size: 24rpx;
+			color: #757575;
+			word-break: break-all;
+			white-space: normal;
+
+			.imagebox {
+				flex-shrink: 0;
+				margin: 0 8rpx;
+				position: relative;
+
+				image {
+					width: 92rpx;
+					height: 72rpx;
+					border-radius: 8rpx 8rpx 8rpx 8rpx;
+					overflow: hidden;
+				}
+			}
+		}
+
+		.mask {
+			width: 92rpx;
+			height: 72rpx;
+			border-radius: 8rpx 8rpx 8rpx 8rpx;
+			background: rgba(0, 0, 0, 0.2);
+			overflow: hidden;
+			position: absolute;
+			top: 0;
+			left: 0;
+			z-index: 1;
+			@include u-flex(row, center, center);
+
+			image {
+				width: 24rpx;
+				height: 24rpx;
+			}
+		}
+
+		.active-scrollitem {
+			background: #FCF0E7;
+			color: #FF5C03;
+
+			.video-directory-title {
+				color: #FF5C03;
+			}
+		}
+	}
+
+	.video-comment {
+		background-color: #fff;
+		padding-top: 12rpx;
+		margin-top: 20rpx;
+	}
+
+	.hall-box {
+		@include u-flex(row, center, flex-start);
+		flex-wrap: wrap;
+		margin: 0 -18rpx -18rpx 0;
+		padding: 12rpx 24rpx 24rpx 24rpx;
+
+		.gapitem {
+			margin: 0 18rpx 18rpx 0;
+		}
+	}
+
+	.popbox {
+		background-color: #fff;
+		position: relative;
+
+		.box-header {
+			padding-top: 12rpx;
+			padding-bottom: 12rpx;
+			box-sizing: border-box;
+			background-color: #fff;
+		}
+
+		.popbox-body {
+
+			.comment,
+			.directoryinfo {
+				padding: 24rpx;
+			}
+		}
+
+		.search-box {
+			@include u-flex(row, center, space-between);
+			padding: 10px 24rpx;
+
+			.search {
+				padding: 0;
+				flex: 1;
+
+				image {
+					width: 24rpx;
+					height: 24rpx;
+					padding-left: 16rpx;
+				}
+			}
+		}
+	}
+
+	.search-btn {
+		flex-shrink: 0;
+		height: 68rpx;
+		padding: 0 42rpx;
+		margin-left: 20rpx;
+		background: #FCF0E7;
+		border-radius: 34rpx 34rpx 34rpx 34rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 600;
+		font-size: 26rpx;
+		color: #FF5C03;
+		text-align: center;
+		line-height: 68rpx;
+	}
+
+	.comment-inputbox {
+		@include u-flex(row, center, space-between);
+		padding: 28rpx 24rpx;
+		box-sizing: border-box;
+		background: #FFFFFF;
+
+		.inputbox {
+			flex: 1;
+			height: 72rpx;
+			padding-left: 24rpx;
+			background: #F5F7FA;
+			border-radius: 36rpx 36rpx 36rpx 36rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 26rpx;
+			color: #999999;
+			line-height: 72rpx;
+		}
+
+		.release-btn {
+			@extend .search-btn;
+		}
+	}
+
+	.audio {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 24rpx;
+		color: #757575;
+
+		&-play {
+			display: flex;
+			flex-direction: row;
+			align-items: center;
+		}
+
+		&-icon {
+			width: 48rpx;
+			height: 48rpx;
+		}
+
+		&-slider {
+			flex: 1;
+		}
+
+		&-time {
+			flex-shrink: 0;
+		}
+	}
+
+	.vipCourseBtn {
+		background: #1B1F22;
+		border-radius: 46rpx;
+		border: 1px solid #FFDAA3;
+		color: #FFDAA3;
+		width: calc(33.33333% - 46.6666rpx);
+	}
+
+	.vipAc {
+		background: linear-gradient(90deg, #FFE0B2, #F8BA8B);
+		border-radius: 46rpx;
+		border: 1px solid #FFDAA3;
+		color: #1B1F22;
+	}
+
+	.privilegeBox {
+		background-color: #171a1d;
+		box-sizing: border-box;
+	}
+
+	.primenu-box {
+		border-radius: 16rpx;
+		margin-top: 0rpx;
+		padding: 10rpx 20rpx;
+	}
+
+	.content-inner {
+		display: flex;
+		flex-wrap: wrap;
+		min-height: 310rpx;
+	}
+
+	.content-inner .item {
+		width: calc(33.3333333%);
+		height: 150rpx;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		margin-top: 0rpx;
+
+	}
+
+	.content-inner .item .img {
+		width: 84rpx;
+		height: 84rpx;
+		margin-bottom: 8rpx;
+	}
+
+	.content-inner .item .label {
+		font-size: 32rpx;
+		color: #83878A;
+
+	}
+
+	.vipMethodItem {
+		border-radius: 10rpx;
+		width: calc(100%);
+		height: 70rpx;
+		color: #FDD8A1;
+	}
+
+	.payTypeItem {
+		background-color: #1B1F22;
+		border: 1px solid #fff;
+		border-radius: 10rpx;
+		width: calc(50% - 15rpx);
+		height: 94rpx;
+	}
+
+	.circle {
+		border: 1px solid #FDD8A1;
+	}
+
+	.pt_ac {
+		border: 1px solid #FDD8A1;
+	}
+
+	.slider-box {
+		flex: 1
+	}
+</style>

+ 257 - 0
pages_course/learning.vue

@@ -0,0 +1,257 @@
+<template>
+	<view class="content" >
+		<u-sticky offsetTop="0" customNavHeight="0">
+			<view class="grace-page-header" :style="{background:headerBG }">
+				<!-- 沉浸式状态栏 -->
+				<view class="grace-page-status-bar"></view>
+				<!-- 头部核心 -->
+				<view class="grace-page-header-nav" id="gracePageHeader" :style="{minHeight:headerHeight+'px', height:headerHeight+'px', overflow:'hidden'}">
+					<view class="u-nav-back"  @click="goBack">
+						<image class="img" src="@/static/images/course/icon_back_w.png" mode="heightFix"></image>
+					</view>
+					<view class="grace-header-main">在学课程</view>
+				</view>
+			</view>
+			<view class="nav_bar">
+				<view class="search-header-nav" style="box-sizing:content-box;">
+					<view class="search-header-main" style="height: auto;">
+						<image src="/static/images/course/icon_search.png" mode=""></image>
+						<input  class="input-text" @input="inputEvent" type="text" placeholder="搜索课程内容"/>
+					</view>
+				</view>
+			</view>
+			<view class="sticky-tabs">
+				<me-tabs :value="tabIndex" :tabs="tabs" :height="88" @change="tabChange"></me-tabs>
+			</view>
+		</u-sticky>
+	
+	  <!--  <mescroll-uni ref="mescrollRef" style="background-color: #EEEEEE;" :top="88" bottom="20" :down="downOption"  :up="upOption"
+	     @down="downCallback"  @up="upCallback"> -->
+
+	        <view class="cont-box">
+	             <view class="scroll">
+					 <learning-page :i="0" v-show="tabIndex == 0" :index="tabIndex"  ref="mescrollItem0"></learning-page>
+					 <favorite-page :i="1" v-show="tabIndex == 1" :index="tabIndex"  ref="mescrollItem1"></favorite-page>
+			    </view>
+			</view>  	
+		
+	<!-- 	</mescroll-uni> -->
+		
+	</view>
+	
+</template>
+
+<script>
+    import MescrollCompMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-comp.js";
+    import MescrollMoreMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more.js";
+	import learningPage from "./learningPage.vue"
+	import favoritePage from "./favoritePage.vue"
+
+	export default {
+		mixins: [ MescrollCompMixin,MescrollMoreMixin], //mescroll-body写在子组件时
+		components: {
+			learningPage,
+			favoritePage,
+		 },
+		data() {
+			return {
+				headerHeight:44,
+				navigationBarHeight:44,
+				headerBG:"#FF5C03",
+				statusBarBG:"none",
+				downOption: {   //下拉刷新
+				    use:false,
+				 	auto: true // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {   //上拉加载
+				 	auto: false, // 不自动加载
+				 	page: {
+				 		num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+				 		size: 10 // 每页数据的数量
+				 	},
+				 	noMoreSize: 5, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				 	empty: {
+				 		tip: '~ 空空如也 ~' // 提示
+				 		// btnText: '去看看'
+				 	}
+				},
+				tabs: [
+					    {dictLabel:'在学课程', num:1, y:0, curPageLen:0, hasNext:false,hasInit:false},
+						{dictLabel:'我的收藏', num:1, y:0, curPageLen:0, hasNext:true,hasInit:false}
+				],
+				tabIndex: 0, // tab下标
+				current: 0,
+				mtabs:["精选","疾病","名医","养生","用药"],
+				fixedTop: false, 
+				tabTop:0,
+			}
+		},
+		created() { 
+			var system = uni.getSystemInfoSync();
+			system.model = system.model.replace(' ', '');
+			system.model = system.model.toLowerCase();
+			if (system.model.indexOf('iphonex') != -1 || system.model.indexOf('iphone1') != -1) {
+				this.iphoneXButtomHeight = uni.upx2px(50);
+			}
+			this.navigationBarHeight=78;
+			//this.tabTop=uni.upx2px(this.statusBarHeight)+58;
+		},
+		methods: {
+			/*下拉刷新的回调 */
+			downCallback() {
+				this.mescroll.resetUpScroll(true);
+				var that=this;
+				this.requestData();
+			},
+			/*上拉加载的回调*/
+			upCallback(page) { 
+				this.mescroll.endByPage(1, 1); 
+				//this.mescroll.endSuccess(8,false);
+				// if (page.num == 1) {
+				// 	this.mescroll.endSuccess(8, false);
+				// } else {
+				// 	this.mescroll.endErr()
+				// }
+			},
+			requestData(){
+			    
+			},
+			// 切换菜单
+			tabChange (index) {
+				// let preTab = this.tabs[this.preIndex]
+				// preTab.y = this.mescroll.getScrollTop()
+				// this.preIndex = index;
+				this.tabIndex=index;
+				// this.mescroll.optUp.use=this.tabIndex>0;
+				// let curTab = this.tabs[index];
+				// if(index==0){
+				// 	this.mescroll.hideUpScroll();
+				// 	this.mescroll.removeEmpty();
+				// 	this.$nextTick(()=>{
+				// 		this.mescroll.scrollTo(curTab.y, 0) // 恢复滚动条的位置
+				// 	});
+				// }
+				this.$nextTick(()=>{
+					const el = "mescrollItem"+ this.tabIndex
+					let mescrollP=this.$refs[el];
+					mescrollP.keyword= this.keyword;
+					mescrollP.mescroll.resetUpScroll();
+				})
+			},
+			inputEvent(event){
+				// let vForItem = this.$refs["mescrollItem"+this.tabIndex];
+				const el = "mescrollItem"+ this.tabIndex
+				let mescrollP=this.$refs[el];
+				this.keyword=event.detail.value;
+				mescrollP.keyword= this.keyword;
+				mescrollP.mescroll.resetUpScroll();
+			},
+			// 页面跳转
+			navTo(url) {
+				console.log("qxj url:"+url);
+				uni.navigateTo({
+					url: url
+				})
+			},
+			goBack() {
+				uni.navigateBack({
+					delta:1,
+					animationType: 'slide-out-right',
+					animationDuration: 200
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+  page{
+  	 height: 100%;
+	 background-color: #f7f7f7;
+  }
+ 
+  .grace-page-header {
+		.grace-page-status-bar {
+			width: 100%;
+			height: var(--status-bar-height);
+		}
+		.grace-page-header-nav {
+			width: 100%;
+			display: flex;
+			flex-direction: row;
+			flex-wrap: nowrap;
+			align-items: center;
+		}
+		.grace-header-main {
+			width: 300rpx;
+			flex: auto;
+			overflow: hidden;
+			margin:0 20rpx;
+			height: 48rpx;
+			text-align: center;
+			color: #fff;
+		}
+  }
+  
+  .nav_bar {
+  	height: 44px;
+  	width: 100%;
+  	background: #FF5C03;
+  	padding: 25rpx 0;
+  	padding-top: 5rpx;
+  	.search-header-nav {
+  		width: 100%;
+  		display: flex;
+  		flex-direction: row;
+  		flex-wrap: nowrap;
+  		align-items: center;
+  		background: #FF5C03;
+  	}
+  	.search-header-main {
+		width: 300rpx;
+		flex: auto;
+		overflow: hidden;
+		margin:0 20rpx;
+		height: 48rpx;
+		background: #fff;
+		border-radius: 35rpx;
+		padding: 10rpx 20upx;
+		display: flex;
+		justify-content: flex-start;
+		align-items: center;
+		image{
+			width: 28upx;
+			height: 28upx;
+			margin-right: 16upx;
+		}
+  			
+  	}
+  	.input-text{
+		color: #333;
+		font-size: 24rpx;
+		height: 50rpx;
+		line-height:50rpx ;
+		width: 100%;
+  	}
+  	.uni-input-placeholder{
+  	   	color:#999;
+  	}  
+  }
+  .u-nav-back{
+		display: flex;
+		align-items: center;
+		position: absolute;
+		left:32rpx;
+		.img{
+			height: 42upx;
+		}
+   }
+  .scroll{
+		width: 100%;
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		overflow: hidden;
+  }
+
+</style>

+ 321 - 0
pages_course/learningPage.vue

@@ -0,0 +1,321 @@
+<template>
+	
+	<view class="item_content">
+		<mescroll-body  @init="mescrollInit"  top="0"  bottom="0"  :down="downOption" @down="downCallback" :up="upOption"
+			 @up="upCallback" @emptyclick="emptyClick">
+			    <view class="myjt-box" v-for="(citem,index) in dataList" :key="index" >
+			    	 <view class="title-inner">{{citem.date}}</view>
+			    	 <view class="collection-list">
+			    			<view class="item"  v-for="(item,index) in citem.courses"  @tap="goToInfo(item)" :key="index">
+			    				<view class="top">
+			    					<view class="img-box">
+			    						<image :src="item.imgUrl" mode="aspectFill"></image>
+			    						<view class="playIcon">
+			    							<image src="@/static/images/course/play_icon.png"></image>
+			    						</view>
+			    						<view v-if="item.isIntegral!=1" class="vip">VIP</view>
+			    					</view>
+			    					<view class="info-box">
+			    						<view class="title ellipsis2">{{item.courseName}}</view>
+			    						<view class="tips ellipsis2">{{item.videoName}}</view>
+			    						<view class="time es-fs-24 es-c-66">{{ utils.formatDate(item.studyTime) }}</view>
+			    					</view>
+			    					<view class="arrow">
+			    						<image  src="/static/images/more_icon_12.png" mode=""></image>
+			    					</view>
+			    				</view>
+			    				<view class="progress-bar">  
+			    					<view class="focus-bar" :style="{width:getProgress(item)+'%'}"></view>
+			    					<view class="number">{{ getProgress(item)+'%' }}</view>
+			    				</view>
+			    			</view>
+			    			
+			    	 </view>
+			   
+				</view>  	
+		</mescroll-body>
+	</view>
+</template>
+
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import MescrollMoreItemMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more-item.js";
+    import { getCourseStudyList } from '@/api/course'
+	
+	export default {
+		mixins: [MescrollMixin,MescrollMoreItemMixin], 
+		props: {
+			cataType:Number,
+			i:Number,
+			index:Number,
+			itemData: {
+				type: Object,
+				default() {
+					return { };
+				}
+			},
+		},
+		watch:{
+			
+		},
+		onLoad() {
+			
+		},
+		onUnload() {
+			
+		},
+		onShow() {
+			this.refreshPage();
+		},
+		data() {
+			return {
+				bottomBlackLineHeight: uni.getStorageSync('bottomBlackLineHeight'),
+				downOption: {
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {
+					auto: false, // 不自动加载
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量
+					},
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				    toTop:{
+				    	width:0,
+				    }
+				},
+				keyword:"",
+				dataList: [] //列表数据
+			}
+		},
+		mounted() {
+			//this.refreshPage();
+		},
+		methods: {
+			/*下拉刷新的回调 */
+			downCallback() {
+				// 下拉刷新的回调,默认重置上拉加载列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
+				this.mescroll.resetUpScroll(true);
+			},
+			/*上拉加载的回调 */
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var params = {"keyword":this.keyword};
+				getCourseStudyList(params,page.num).then(res => {
+					if(res.code==200){
+						setTimeout(()=>{
+							this.mescroll.endByPage(res.data.list.length, res.data.pages); 
+							if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+							this.dataList=this.dataList.concat(res.data.list); //追加新数据
+						},400);
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			getProgress(item){
+				let value=(item.currentTimes/item.times*1.0*100).toFixed(2);
+			    return value;
+			},
+			goToInfo(item){
+				let url='/pages_course/info?courseId='+item.courseId+'&times='+item.currentTimes+'&videoId='+item.videoId+'&isLearning=true';
+				 this.$navTo(url);
+			},
+			//点击空布局按钮的回调
+			emptyClick() {
+				
+			},
+			hasPrimession(){
+			   let primession=this.isMyCts;
+			   return primession;
+		   },
+		   refreshPage(){
+			   this.mescroll.hideTopBtn();
+			   this.mescroll.resetUpScroll(true);
+		   }
+		},
+		created(){
+			let that = this;
+			uni.$on('refreshStudyTime', function(data) {
+				that.refreshPage();
+			});
+			uni.$on('refreshFollowLog', function(data){
+				//that.refreshPage();
+				that.$emit('resetUpScroll');
+			});
+			
+		},
+		destroyed() {
+			// 注销全局配置监听
+			uni.$off("refreshFollowLog");
+			uni.$off('refreshStudyTime');
+		}
+	}
+
+
+</script>
+
+
+
+<style lang="scss" scoped>
+	
+	.item_content .content:last-child .sline{
+		height: 100%;
+	}
+	.item_content{
+		background-color: #f7f7f7;
+		margin-top: 10rpx;
+	}
+	
+	.myjt-box{
+		  margin:0 20rpx;
+		  margin-top: 20rpx;
+		  border-radius: 20rpx;
+		  padding-right: 0rpx;
+		  background-color: #fff;
+		  .title-inner{
+				margin-left: 20rpx;
+				height: 60rpx;
+				line-height: 80rpx;
+				font-size: 28rpx;
+				color: #666;
+		  }
+		  .collection-list{
+				display: flex;
+				flex-wrap: wrap;
+				border-radius: 8rpx;
+				margin: 0 16rpx;
+				margin-top:20rpx;
+		  	.item{
+				display: flex;
+				flex-direction: column;
+				// align-items: center;
+				justify-content: center;
+		  		width: calc(100%);
+		  		margin-bottom: 20rpx;
+				.top{
+					display: flex;
+					flex: 1;
+					flex-direction: row;
+					.img-box{
+						  position: relative;
+						  width: 40%; /* 或者任何你想要的宽度 */
+						  padding-bottom: 25%; /* 高度等于宽度 */
+						  overflow: hidden; /* 防止图片溢出 */
+						  image{
+								position: absolute;
+								width: 100%;
+								height: 100%;
+								top: 50%;
+								left: 50%;
+								transform: translate(-50%, -50%);
+								border-radius: 20rpx;
+						  }
+					}
+					.playIcon{
+								 position: absolute;
+								 width: 50rpx;
+								 height: 50rpx;
+								 background: rgba(0, 0, 0, 0.28);
+								 border-radius: 50%;
+								 top: 50%;
+								 left: 50%;
+								 transform: translate(-50%, -50%);
+								 image{
+									 width:20rpx ;
+									 height: 24rpx;
+									 border-radius: 0 !important;
+								 }
+						 }
+						 .vip{
+								  position: absolute;
+								  width: 49rpx;
+								  height: 28rpx;
+								  background: linear-gradient(94deg, #FFE9D0 0%, #E9BD97 100%);
+								  border-radius: 6rpx;
+								  top: 16rpx;
+								  right: 16rpx;
+								  color:#333;
+								  font-size:18rpx ;
+								  text-align: center;
+								  font-weight: 500;
+								  font-style: italic;		  
+						 }
+					}  
+					.info-box{
+						    width: calc(60%);
+							padding:0 20rpx;
+							padding-right: 0rpx;
+							position: relative;
+							.title{
+								font-size: 26rpx;
+								font-family: PingFang SC;
+								font-weight: 470;
+								color: #333;
+								line-height: 40rpx;
+								margin-top: 10rpx;
+							}
+							.tips,.time{
+								font-size: 26rpx;
+								color: #666;
+								line-height: 40rpx;
+								margin-top: 10rpx;
+							}
+							.time{
+								position: absolute;
+								left: 20rpx;
+								// bottom: 20rpx;
+							}
+					}
+					.arrow{
+						width: 30rpx;
+						height: 100%;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						margin-right: 10rpx;
+						image{
+							width: 26rpx;
+							height: 22rpx;
+						}
+					}
+					
+				}
+				
+				.progress-bar{
+					border-radius: 20rpx;
+					background: #ebebeb;
+					height: 20rpx;
+					margin:20rpx 0rpx;
+					display: flex;
+					flex-direction: row;
+					align-items: center;
+					.focus-bar{
+						background:#FF5C03;
+						border-radius: 20rpx;
+						height: 100%;
+						
+					}  
+					.number{
+						font-size: 22rpx;
+						color: #fff;
+						background:#FF5C03;
+						border-radius: 10rpx;
+						border-left: 2rpx solid #fff;
+						padding: 0rpx 12rpx;
+						margin-left: -2rpx;
+					}
+				}
+		  }
+	}		
+	
+</style>
+
+

+ 405 - 0
pages_course/myNote.vue

@@ -0,0 +1,405 @@
+<template>
+	<view class="content-box" >
+	    <image class="bg-img" src="https://beiliyo-2025.obs.cn-north-4.myhuaweicloud.com/fs/20250115/1736955760372.png"></image>
+	    <view class="nav-bar">
+	    	<view class="grace-page-header" :style="{ background:headerBG }">
+	    		<!-- 沉浸式状态栏 -->
+	    		<view class="grace-page-status-bar" :style="{ background:statusBarBG}"></view>
+	    		<!-- 头部核心 -->
+	    		<view class="grace-page-header-nav" id="gracePageHeader" :style="{minHeight:headerHeight+'px', height:headerHeight+'px', overflow:'hidden'}">
+	    			<view class="u-nav-left" @tap="navBack()">
+	    				<image class="back" src="@/static/images/course/ret-white.png"  ></image>
+	    			</view>
+					<view class="grace-header-main es-fw-500">我的笔记</view>
+	    			<view class="u-nav-right">
+	    				<image class="right-icon" src="@/static/images/course/edit.png" @tap="deleteNote()" ></image>
+						<view v-if="noteType!=2" class="edit" @tap="changeEdit()">{{!isEdit?'编辑':'取消'}}</view>
+	    			</view>
+	    		</view>
+	    	</view>
+	    	<view class="nav_box">
+	    		<view class="status_bar"></view>
+	    		<view class="nav_bar"></view>
+	    	</view>
+			
+	    </view>
+	
+		<mescroll-body ref="mescrollRef" style="background-color:#f7f7f7;min-height: 700px;"  @init="mescrollInit" top="0" bottom="200" :down="downOption" :up="upOption" @down="downCallback" @up="upCallback">				
+		   <view class="es-ml-30 es-mr-30 es-mt-30">
+			   <image  @tap="$navTo('/pages_course/info?courseId='+noteData.courseId)" class="cover" :src="noteData.imgUrl" mode="scaleToFill"></image>
+			   <view  @tap="$navTo('/pages_course/info?courseId='+noteData.courseId)" class="title es-fw-500 es-fs-30 es-mb-20">{{noteData.courseName}}</view>
+			   <view  @tap="$navTo('/pages_course/info?courseId='+noteData.courseId)" class="es-fw-500 es-fs-26 es-c-33">{{noteData.videoName}}</view>
+			   <view class="x-start es-mt-20">
+				   <view  class="calendar x-c es-w-60 es-h-60">
+					    <image class="es-w-28 es-h-30" src="@/static/images/course/calendar.png"></image>
+				   </view>
+				   <view class="es-ml-20 es-mt-20 es-fw-500 es-fs-24 es-c-99">{{ utils.formatDate(noteData.createTime)}}</view>
+			   </view>
+			   
+			   <view v-if="!isEdit" class="textAreaBox es-bc-ff es-br-20 es-mt-20  es-fw-n es-fs-30 es-c-33 es-pl-20 es-pt-20">
+			   		{{noteData.content}} 
+			   </view>
+			   
+			   <view v-if="isEdit" class="textAreaBox es-bc-ff es-br-20 es-mt-20  es-fw-n es-fs-30 es-c-33 x-c es-pl-20 es-pt-20">
+				  <textarea class="textArea"  :focus="isEdit" :disabled="noteType==2" v-model="noteData.content" placeholder-style="color:#999" placeholder="请填写笔记内容"/>		  
+			   </view>
+			   
+			   <view  v-if="isEdit" class="btn-box">
+			      	<view class="sub-btn" @click="doSend()">保存</view>
+			   </view>
+			   
+		   </view>
+		</mescroll-body>
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import mescrollBody from "@/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.vue";
+	import { getDictByKey } from '@/api/common'
+	import { editCourseNote,getMyCourseNoteByNoteId,delCourseNote } from '@/api/course'
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		components: {
+		    mescrollBody,
+		 },
+		data() {
+			return {
+				headerHeight:44,
+				statusBarBG:"none",
+				headerIndex:98,
+				downOption: {   //下拉刷新
+				 	auto: false, // 不自动加载 (mixin已处理第一个tab触发downCallback)
+					use:false
+				},
+				upOption: {   //上拉加载
+				 	auto: false, // 不自动加载
+					use:false,
+				 	page: {
+				 		num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+				 		size: 10 // 每页数据的数量
+				 	},
+				 	noMoreSize: 5, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				 	empty: {
+				 		tip: '~ 空空如也 ~' // 提示
+				 		// btnText: '去看看'
+				 	}
+				},
+				dataList:[],
+				noteId:null,
+				fixedTop: false,
+				top:0,
+				isEdit:false,
+				noteType:0,
+				noteData:{"content":"","courseId":0,"noteType":0} 
+				
+			}
+		},
+		onPageScroll(e) {
+			this.top=e.scrollTop;
+		},
+		computed: {
+			// 计算属性的 getter
+			headerBG:function() {
+				var top=this.top/88;
+				return 'rgba(255,92,3, ' + top + ')';
+			},
+		},
+		onShow(){
+		   
+		},
+		onLoad(options){
+			this.noteId=options.noteId;
+			this.noteType=options.noteType;
+			this.requestData();
+		},
+		
+		methods: {
+			/*下拉刷新的回调 */
+			downCallback() {
+				this.mescroll.resetUpScroll();
+				var that=this;
+			},
+			/*上拉加载的回调*/
+			upCallback(page) { 
+				//this.mescroll.endByPage(1, 1); 
+				//this.mescroll.endSuccess(8,false);
+				// if (page.num == 1) {
+				// 	this.mescroll.endSuccess(8, false);
+				// } else {
+				// 	this.mescroll.endErr()
+				// }
+			},
+			requestData(){
+			    getMyCourseNoteByNoteId(this.noteId).then(res => {
+			    		if(res.code==200){
+			    			this.noteData=res.data;
+			    		}
+			    	},
+			    	rej => {}
+			    );
+			},
+			changeEdit(){
+			   this.isEdit=!this.isEdit;	
+			},
+			doSend(){
+				if(this.utils.isEmpty(this.noteData.content)){
+					uni.showToast({title: '请输入笔记内容',icon: 'none'});
+					return;
+				}
+				uni.showLoading({title:""});
+				editCourseNote(this.noteData).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: res.msg,icon: 'none'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						this.isLike=!this.isLike;
+						//this.isEdit=!this.isEdit;
+					},
+					rej => {}
+				);
+			},
+			deleteNote(){
+				   let that=this;
+				   uni.showModal({
+						title:"系统提示",
+						content:"确定删除吗?",
+						cancelText:'取消',
+						confirmText:'确定',
+						success: (res) => {
+							console.log("qxj res:"+JSON.stringify(res));
+							if (res.confirm) {
+								that.deleteNoteAction();
+							}
+							else if(res.cancel) {
+							
+							}
+						},
+							fail: () => {
+								uni.hideLoading();
+							}
+					   });
+			},
+			navBack() {
+				uni.navigateBack({
+					animationType: 'pop-out',
+					animationDuration: 200
+				});
+			},
+			deleteNoteAction(){
+				uni.showLoading({title:""});
+				delCourseNote({"noteId":this.noteId}).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: "删除成功",icon: 'none'});
+							setTimeout(e => {
+								this.navBack();
+								uni.$emit('refreshMyNote', { });
+							}, 2000);
+							
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						this.isLike=!this.isLike;
+					},
+					rej => {}
+				);
+			},
+			
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	page{
+		 height: 100%;
+		 background-color: #f7f7f7;
+	}
+	.grace-page-header {
+			position: fixed;
+			width: 100%;
+			left: 0;
+			top: 0;
+			z-index: 98;
+			border-bottom: 0px solid #FFFFFF;
+			.grace-page-status-bar {
+				width: 100%;
+				height: var(--status-bar-height);
+			}
+			.grace-page-header-nav {
+				width: 100%;
+				display: flex;
+				flex-direction: row;
+				flex-wrap: nowrap;
+				align-items: center;
+				justify-content: space-between;
+			}
+			.grace-header-main {
+				width: 300rpx;
+				flex: auto;
+				overflow: hidden;
+				margin:0 20rpx;
+				height: 48rpx;
+				text-align: center;
+				color: #fff;
+			}
+	}
+	.u-nav-left{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-left: 25rpx;
+			.back{
+				width: 18rpx;
+				height: 31rpx;
+			}
+		 }
+		 
+		
+	.u-nav-right{
+		    position: absolute;
+			right:20rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			.right-icon{
+				width: 27rpx;
+				height: 29rpx;
+				margin-right: 30rpx;
+			}
+			.edit{
+				color: #fff;
+				font-size: 34rpx;
+				margin-right: 10rpx;
+				font-weight: normal;
+			}
+		}
+		
+	.bg-img{
+	     position: fixed;
+	     width: 100%;
+	 	   height: 524rpx;
+	     top: 0;
+	     left: 0;
+	     right: 0;
+	     bottom: 0;
+	 	   z-index: 0;
+	 }
+	 
+	
+	.nav_box{
+		width: 100%;
+		.status_bar {
+			height: var(--status-bar-height);
+			width: 100%;
+		}
+		.nav_bar {
+			height: 44px;
+			width: 100%;
+		}
+	}
+	
+	
+	.search-box {
+			width: calc(100% - 60rpx);
+			height: 70rpx;
+			display: flex;
+			flex-direction: row;
+			align-items: center;
+			justify-content: space-between;
+			background: #fff;
+			border-radius: 35rpx;
+			margin:30rpx;
+			margin-top: 10rpx;
+	      padding-left: 30rpx;
+			position: relative;
+			z-index: 10;
+			.left{
+				display: flex;
+				flex-direction: row;
+				align-items: center;
+				justify-content: flex-start;
+			}
+			
+			image{
+				width: 28upx;
+				height: 28upx;
+				margin-right: 16upx;
+			}
+			.input-text{
+				color: #333;
+				font-size: 24rpx;
+				height: 70rpx;
+				line-height:70rpx ;
+			}
+			.uni-input-placeholder{
+				color:#999;
+			}
+			.button{
+				background: #FF5C03;
+				border-radius: 29rpx;
+				width: 108rpx;
+				height: 54rpx;
+				line-height: 54rpx;
+				color: #fff;
+				font-size: 26rpx;
+				margin-right: 10rpx;
+			}
+	}
+	
+	.cover{
+		height:300rpx ;
+		width: 100%;
+		border-radius: 20rpx;
+	}  
+	.title{
+		color:#0173FF;
+	}
+	
+	.calendar{
+		background-color:#FFE8DC ;
+		width: 60rpx;
+		height: 60rpx;
+		border-radius: 50%;
+	}
+	
+	.textAreaBox{
+		background-color: #fff;
+		padding-left: 15rpx;
+		padding-right: 15rpx;
+		height: 200px;
+	}
+	
+	.textArea{
+		background-color: #fff;
+		border-radius: 10rpx;
+		width: 100%;
+		height: 100%;
+		font-size: 30rpx;
+	}
+	
+	.btn-box{
+		margin-top: 15rpx;
+		height: 120upx;
+		padding: 0 30upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		.sub-btn{
+			width: 100%;
+			height: 88upx;
+			line-height: 88upx;
+			text-align: center;
+			font-size: 30upx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #FFFFFF;
+			background: #FF5C03;
+			border-radius: 44upx;
+		}
+	}
+	
+	
+</style>

+ 489 - 0
pages_course/note.vue

@@ -0,0 +1,489 @@
+<template>
+	<view class="">
+		<es-nav-bg ref="nav" title="学习笔记"></es-nav-bg>
+		<mescroll-body  ref="mescrollRef"  @init="mescrollInit" top="0"  :height="pageHei"   :down="downOption" @down="downCallback" :up="upOption"
+			   @up="upCallback" @emptyclick="emptyClick">
+				<view class="es-view-w-x es-mt-10">
+					<view class="banner es-icon-auto es-br-20">
+						<image :src="courseData.imgUrl"></image>
+					</view>
+				</view>
+				 <view class="es-bc-white es-br-20" style="margin-top: -194rpx;min-height: 300rpx;">
+					<view class="es-h-194"></view>
+					<view class="es-view-w-x es-mt-25">
+						<view class="es es-ac">
+							<view class="es-icon es-w-35 es-h-31 es-icon-course-icon-5"></view>
+							<view class="es-ml-20 es-fs-30 es-fw-600 es-f1">笔记
+							<text class="es-ml-1 es-fs-24 es-c-99">({{totalNum}})</text></view>
+							<!-- <view class="es-icon-25 es-icon-course-close"></view> -->
+						</view>
+
+						<view class="es es-ac es-mt-25 es-pb-30 es-fs-22 es-c" style="border-bottom: 1px #FAFAFA solid;">
+							<view class="es-on-act nav es-icon-auto es es-ac es-pc" :class="sortType==1?'ac':''" @tap="tapNoteType(1)">
+								<view class="es-icon-20 es-icon-course-icon-2"></view>
+								<view class="es-ml-19" :class="sortType==1?'es-fw-600':''">热度</view>
+							</view>
+							<view class="es-on-act nav es-icon-auto es es-ac es-pc es-ml-14" :class="sortType==2?'ac':''" @tap="tapNoteType(2)">
+								<view class="es-icon-20 es-icon-course-icon-2"></view>
+								<view class="es-ml-19" :class="sortType==2?'es-fw-600':''">时间</view>
+							</view>
+							<view class="es-on-act nav es-icon-auto es es-ac es-pc es-ml-14" :class="sortType==3?'ac':''" @tap="tapNoteType(3)">
+								<view class="es-icon-20 es-icon-course-icon-3"></view>
+								<view class="es-ml-19" :class="sortType==3?'es-fw-600':''">我的发布</view>
+							</view>
+							
+						</view>
+
+						<view v-for="(item, index) in dataList"  :key="index" class="es es-mt-20 es-b-b es-pb-20">
+							<view class="es-icon-80 es-br">
+								<image :src="utils.isEmpty(item.avatar)?defHeadImg:item.avatar"></image>
+							</view>
+							<view class="es-f1 es-ml-21">
+								<view class="es-fs-28 es-fw">{{item.userNickName}}</view>
+								<view class="es-c-99 es-fs-22 es-mt-4">{{ utils.formatDate(item.createTime) }}</view>
+								<view class="es-fs-26 es-fw-500 es-pt-24 es-pb-25">
+									<text>{{item.content}}</text>
+								</view>
+								
+						<!-- 		<view class="es es-pe es-pt-10 es-pb-20">
+									<view class="es-w-87 es-h-21 es-icon es-icon-course-icon-look-all"></view>
+								</view> -->
+		
+								<view class="es es-c-99">
+									<view class="es es-ac" @tap="doLike(item)">
+										<view class="es-icon-28" :class="item.isLike?'es-icon-course-like2-ac':'es-icon-course-like2'"></view>
+										<view class="es-ml-11 es-fs-26">{{item.likes}}</view>
+									</view>
+									<view class="es es-ac es-ml-23" @tap="saveNote(item,index)">
+										<view class="es-icon-28 es-icon-course-icon-save"></view>
+										<view class="es-ml-11 es-fs-26">{{item.isSave==1?"已转存":"转存"}}</view>
+
+									</view>
+									
+									<view class="es es-ac es-ml-23"  v-if="isMySend(item.userId)" @tap="deleteNote(item,index)">
+										<view class="es-icon-24 es-icon-course-icon-delete"></view>
+										<view class="es-ml-11 es-fs-26">删除</view>
+									</view>
+									
+									<view class="es-f1"></view>
+									<view class="es es-ac es-pc es-icon-33" v-if="isMySend(item.userId)">
+										<view class="es-w-33 es-h-9 es-icon es-icon-course-point"></view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+		 </mescroll-body>
+		
+		<view class="" :style="'height:'+(KeyHight)+'px'" v-if="KeyHight" ></view>
+		<view class="es-h-120 es-auto-bottom" v-else></view>
+		<view class="es-fix-bottom es-bc-white es-b-t">
+			<view class="es-h-120 es-view-w-x es es-ac">
+				<view class="es-f1 es-ipt es-f1 es-br es-icon-auto es-icon-course-bg2">
+					<input placeholder="写笔记" v-model="pingContent" placeholder-class="es-c" />
+				</view>
+				<view class="es-fs-30 es-fw-600 es-ml-50 es-c"  :adjust-position="false"
+					:always-system="true" @tap="doSend()" >发布</view>
+			</view>
+			<view class="es-auto-bottom" v-if="!KeyHight"></view>
+		</view>
+	
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import { getCourseById,getCourseNoteList,addCourseNote,noteDoLike,saveNote,delCourseNote } from '@/api/course'
+	export default {
+		mixins: [MescrollMixin],
+		components: {
+			
+		},
+		props: {
+			keyword: String,
+		},
+		onLoad(){
+		
+		},
+		mounted() {
+			this.mescroll.hideTopBtn();
+			this.mescroll.resetUpScroll(true);
+		},
+		
+		data() {
+			return {
+				pingContent: '',
+				KeyHight:0,
+				cateId:0,
+				courseId:0,
+				totalNum:0,
+				courseData:{},
+				pageHei:400,
+				textNoMore:"已经到底了",
+                downOption: {
+					auto: false ,// 不自动加载 (mixin已处理第一个tab触发downCallback)
+					use:false
+				},
+				upOption: {
+					auto: false, // 不自动加载
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量
+					},
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						btnText: '去看看'
+					},
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				    use:true,
+				},
+				curLoginUser:null,
+				sortType:1,
+				dataList: [],//列表数据
+				defHeadImg:"/static/images/course/defHead.png",
+				isLogin: false
+			}
+		},
+		mounted() {
+			try {
+				const res = uni.getSystemInfoSync();
+				let navigationBarHeight=88,tabHei=120;
+				let tempHei=res.windowHeight-uni.upx2px(navigationBarHeight+tabHei);
+				this.pageHei=tempHei+"px";
+				this.mescroll.hideTopBtn();
+				this.mescroll.resetUpScroll(true);
+			} catch (e) {
+				
+			}
+		},
+		onLoad(options) {
+			this.courseId=options.courseId;
+			this.getCourseInfo();
+		    // #ifdef APP-PLUS
+		    uni.onKeyboardHeightChange(this.boardHeightChange);
+		    // #endif
+			this.utils.isLogin().then(res=>{
+				if(res) {
+					this.isLogin = true
+					let userInfo=JSON.parse(uni.getStorageSync('userInfo'));
+					this.curLoginUser=userInfo;
+				} else {
+					this.isLogin = false
+				}
+			})
+		},
+		onShow() {
+			this.utils.isLogin().then(res=>{
+				if(res) {
+					this.isLogin = true
+				} else {
+					this.isLogin = false
+				}
+			})
+		},
+		onUnload: function() {
+			uni.offKeyboardHeightChange(this.boardHeightChange);
+		},
+		methods: {
+			getCourseInfo(){
+			   getCourseById(this.courseId).then(res => {
+					if(res.code==200){
+						this.courseData=res.data;
+					}
+				},
+				rej => {}
+			   );
+			},
+			upCallback(page) {   	
+				/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+				const params={"courseId":this.courseId,"sortType":this.sortType};
+				uni.showLoading({title:""});
+				getCourseNoteList(params,page.num).then(res => {
+					    uni.hideLoading();
+						if(res.code==200){
+							setTimeout(()=>{
+								this.mescroll.endByPage(res.data.list.length, res.data.pages);
+								if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+								this.dataList=this.dataList.concat(res.data.list); //追加新数据
+								this.totalNum=res.data.total;
+							},100);
+						}
+					},
+					rej => {}
+				).catch(()=>{
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				});
+			},
+			refreshPage(){
+			    this.mescroll.hideTopBtn();
+			    this.mescroll.resetUpScroll(true);
+			},
+			doSend(){
+			
+				if(this.utils.isEmpty(this.pingContent)){
+					uni.showToast({title: '评论内容不能为空',icon: 'none'});
+					return;
+				}
+				if(!this.isLogin){
+					this.$showLoginPage();
+					return;
+				}
+				const params={"courseId":this.courseId,"content":this.pingContent};
+				uni.showLoading({title:""});
+				addCourseNote(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: '添加笔记成功',icon: 'none'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						this.pingContent="";
+						this.refreshPage();
+					},
+					rej => {}
+				);
+			},
+			doLike(item){
+				if(!this.isLogin){
+					this.$showLoginPage();
+					return;
+				}
+				const params={"noteId":item.noteId};
+				uni.showLoading({title:""});
+				noteDoLike(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: '操作成功',icon: 'none'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						this.refreshPage();
+					},
+					rej => {}
+				);
+			},
+			tapNoteType(type){
+				this.sortType=type;
+				this.refreshPage();
+			},
+			saveNote(note,index){
+				if(!this.isLogin){
+					this.$showLoginPage();
+					return;
+				}
+				const params={"noteId":note.noteId};
+				uni.showLoading({title:""});
+				let that=this;
+				saveNote(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: "转存成功",icon: 'none'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						this.pingContent="";
+						note.isSave=!note.isSave;
+						this.dataList[index]=note;
+						this.$forceUpdate();
+					
+						// setTimeout(function() {
+						// 	that.refreshPage();
+						// }, 1800);
+						
+					},
+					rej => {}
+				);
+			},
+			deleteNote(note,index){
+				if(!this.isLogin){
+					this.$showLoginPage();
+					return;
+				}
+				let that=this;
+				uni.showModal({
+					title:"系统提示",
+					content:"确定删除吗?",
+					cancelText:'取消',
+					confirmText:'确定',
+					success: (res) => {
+						console.log("qxj res:"+JSON.stringify(res));
+						if (res.confirm) {
+							that.deleteNoteAction(note,index);
+						}
+						else if(res.cancel) {
+						}
+					},
+						fail: () => {
+							uni.hideLoading();
+						}
+				 });
+			},
+			deleteNoteAction(note,index){
+				const params={"noteId":note.noteId};
+				uni.showLoading({title:""});
+				let that=this;
+				delCourseNote(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: "删除成功",icon: 'none'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						this.dataList.splice(index,1);
+						this.$forceUpdate();
+						// setTimeout(function() {
+						// 	that.refreshPage();
+						// }, 1800);
+						
+					},
+					rej => {}
+				);
+			},
+			isMySend(userId){
+				if(!this.isLogin){
+					return false;
+				}
+				return this.curLoginUser.userId==userId
+			},
+			
+			//点击空布局按钮的回调
+			emptyClick(){
+				this.mescroll.resetUpScroll(true);
+			},
+			boardHeightChange:function(res){
+				console.log('changeHeight', res.height);
+				//转化为rpx 
+				this.KeyHight = res.height;
+			},
+			
+		},
+		onPageScroll(e) {
+			let nav = this.$refs["nav"];
+			nav.scrollBody(e);
+		},
+	}
+</script>
+
+<style scoped>
+	page {
+		background-color: white;
+	}
+	.banner {
+		height: 430rpx;
+	}
+
+	.es-icon-course-bg {
+		background-image: url(/static/images/course/bg.png);
+	}
+
+	.es-icon-course-icon-1 {
+		background-image: url(/static/images/course/icon-1.png);
+	}
+
+	.es-icon-course-icon-2 {
+		background-image: url(/static/images/course/icon-2.png);
+	}
+
+	.es-icon-course-icon-3 {
+		background-image: url(/static/images/course/icon-3.png);
+	}
+
+	.es-icon-course-close {
+		background-image: url(/static/images/course/close.png);
+	}
+
+	.es-icon-course-info {
+		background-image: url(/static/images/course/info.png);
+	}
+
+	.es-icon-course-bg2 {
+		background-image: url(/static/images/course/bg2.png);
+	}
+
+	.es-icon-course-bg3 {
+		background-image: url(/static/images/course/bg3.png);
+	}
+
+	.es-icon-course-comment {
+		background-image: url(/static/images/course/comment.png);
+	}
+
+	.es-icon-course-comment2 {
+		background-image: url(/static/images/course/comment2.png);
+	}
+
+	.es-icon-course-nav-bg,
+	.nav {
+		background-image: url(/static/images/course/nav-bg.png);
+	}
+
+	.es-icon-course-nav-bg-ac,
+	.nav.ac {
+		background-image: url(/static/images/course/nav-bg-ac.png);
+	}
+
+	.es-icon-course-point {
+		background-image: url(/static/images/course/point.png);
+	}
+
+	.es-icon-course-share {
+		background-image: url(/static/images/course/share.png);
+	}
+
+	.es-icon-course-like2 {
+		background-image: url(/static/images/course/like2.png);
+	}
+
+	.es-icon-course-like2-ac {
+		background-image: url(/static/images/course/like2-ac.png);
+	}
+	.es-icon-course-icon-4 {
+		background-image: url(/static/images/course/icon-4.png);
+	}
+	.es-icon-course-icon-5 {
+		background-image: url(/static/images/course/icon-5.png);
+	}
+	.es-icon-course-icon-look-all {
+		background-image: url(/static/images/course/look-all.png);
+	}
+	.es-icon-course-icon-save {
+		background-image: url(/static/images/course/save.png);
+	}
+	
+   .es-icon-course-icon-delete {
+		background-image: url(/static/images/icon_delete.png);
+	}
+
+
+	.item {
+		width: calc(33.33% - 14rpx);
+	}
+
+	.nav {
+		width: 216rpx;
+		height: 60rpx;
+	}
+
+	.comment-reply-item {
+		border-bottom: 1px #fff solid;
+	}
+
+	.es-ipt input {
+		padding-left: 43rpx;
+	}
+
+	.es-ipt,
+	.es-ipt input {
+		background-color: inherit;
+	}
+
+	.es-b-b{border-bottom: 1px solid #DDDDDD;}
+	
+	.es-icon-24{
+		width: 12px;
+		height: 18px;
+		background-size: 100% 100% !important;
+	}
+</style>

+ 383 - 0
pages_course/noteList.vue

@@ -0,0 +1,383 @@
+<template>
+	<view class="content">
+		<es-nav-title title="我的笔记" mode=""></es-nav-title>
+	    <view class="search-box" >
+			<view class="left">
+				<image src="@/static/images/course/icon_search.png" mode=""></image>
+				<input v-model="keyword" class="input-text" type="text" placeholder="搜索笔记内容"/>
+			</view>
+			<view class="right">
+				<button class="button" @tap="refreshPage()">搜索</button>
+			</view>
+		</view>
+	    <view  class="tabBg es-pt-10 es-pb-10 es-bc-white" style="z-index: 100;">
+			<me-tabs :value="tabIndex"  :tabs="mtabs" nameKey="dictLabel"   @change="tabChange" :fixed="false" ></me-tabs>
+		</view>
+	
+	    <mescroll-uni ref="mescrollRef" style="background-color: #FAFAFA;" @init="mescrollInit"  :top="mescrollTopY" bottom="0" :down="downOption" @down="downCallback" :up="upOption"
+	     @up="upCallback" @emptyclick="emptyClick">
+		   <view class="es-bc-white es-p-r" >
+			    <view class="es-view-w-x es-mt-10">
+					<block v-for="(item, index) in dataList" :key="index" >
+					   <view v-if="index%3==0" @tap="goToMyNote(item)" class="es-br-20 es-bc-white es-pl-23 es-pr-23 es-pt-20 es-pb-20 es es-ac es-mt-20 es-mb-20 item_bg1">
+							<view class="es-f1 es-ml-16 " >
+								<view class="es es-ac">
+									<view class="es-f1 es-omit es-fs-30 tit_color_1">{{item.courseName}}</view>
+								    <view v-if="item.noteType==2" class="es-bc-theme es-brc-yellow es-br-30 es-bc-ff es-fs-22 es-w-110 es-h-40  x-c" >转存笔记</view>
+								</view>
+								<view class="es-fs-26 es-mt-19 es-omit es-c-33">{{item.content }}</view>
+								<view class="es es-ac es-mt-21">
+									<view class="es-f1 es-omit es-fs-24 cor_6a">{{item.subCateName}}</view>
+									<view class="es-fs-24 cor_6a">{{ utils.formatDate(item.createTime) }}</view>
+								</view>
+							</view>
+					  </view>
+					  
+					   <view v-else-if="index%3==1"  @tap="goToMyNote(item)" class="es-br-20 es-bc-white es-pl-23 es-pr-23 es-pt-20 es-pb-20 es es-ac es-mt-20 es-mb-20 item_bg2">
+							<view class="es-f1 es-ml-16 item_bg2">
+								<view class="es es-ac">
+									<view class="es-f1 es-omit es-fs-30 tit_color_2">{{item.courseName}}</view>
+								    <view v-if="item.noteType==2" class="es-bc-theme es-brc-yellow es-br-30 es-bc-ff es-fs-22 es-w-110 es-h-40  x-c" >转存笔记</view>
+								</view>
+								<view class="es-fs-26 es-mt-19 es-omit es-c-33">{{item.content}}</view>
+								<view class="es es-ac es-mt-21">
+									<view class="es-f1 es-omit es-fs-24 cor_6a">{{item.subCateName}}</view>
+									<view class="es-fs-24 cor_6a">{{ utils.formatDate(item.createTime) }}</view>
+								</view>
+							</view>
+					   </view>
+						
+						<view v-else  @tap="goToMyNote(item)"  class="es-br-20 es-bc-white es-pl-23 es-pr-23 es-pt-20 es-pb-20 es es-ac es-mt-20 es-mb-20 item_bg3">	
+							<view class="es-f1 es-ml-16">
+								<view class="es es-ac">
+									<view class="es-f1 es-omit es-fs-30 tit_color_3">{{item.courseName}}</view>
+							        <view v-if="item.noteType==2" class="es-bc-theme es-brc-yellow es-br-30 es-bc-ff es-fs-22 es-w-110 es-h-40  x-c" >转存笔记</view>
+								</view>
+								<view class="es-fs-26 es-mt-19 es-omit es-c-33">{{item.content}}</view>
+								<view class="es es-ac es-mt-21">
+									<view class="es-f1 es-omit es-fs-24 cor_6a">{{item.subCateName}}</view>
+									<view class="es-fs-24 cor_6a">{{ utils.formatDate(item.createTime) }}</view>
+								</view>
+							</view>		    	
+						</view>
+					</block>	
+				</view>		
+		   </view>
+		 
+		</mescroll-uni> 
+	
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import { getCourseCate,getCourseList,getMyCourseNoteList } from '@/api/course'
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		components: {
+		    
+		},
+		data() {
+			return {
+				headerHeight:44,
+				navigationBarHeight:44,
+				statusBarBG:"none",
+				headerIndex:98,
+				downOption: {   //下拉刷新
+				    use:true,
+				 	auto: true // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {   //上拉加载
+				 	auto: false, // 不自动加载
+				 	page: {
+				 		num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+				 		size: 10 // 每页数据的数量
+				 	},
+				 	noMoreSize: 5, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				 
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						btnText: '刷新重试',
+						icon:"/static/images/icon_img_empty.png"
+					}
+				},
+				tabIndex: 0, // tab下标
+				current: 0,
+				mtabs:[],
+				fixedTop: false, 
+				tabTop:0,
+				top:0,
+				cateId:0,
+				dataList:[],
+				keyword:"",
+				mescrollTopY:0,
+			}
+		},
+		onPageScroll(e) {
+			this.top=e.scrollTop;
+		},
+		computed: {
+			// 计算属性的 getter
+			headerBG:function() {
+				var top=this.top/88;
+				return 'rgba(255,92,3, ' + top + ')';
+			},
+		},
+		mounted() {
+			const system = uni.getSystemInfoSync();
+			let navigationBarHeight=44,tabHei=110,searchBarHei=44;
+		    let tempHei=navigationBarHeight+searchBarHei+system.statusBarHeight;
+			tempHei=tempHei+uni.upx2px(tabHei);
+			this.mescrollTopY=tempHei+"px";
+		},
+		onShow(){
+		   
+		},
+		onLoad(){
+			this.getCourseCate();
+		},
+		created(){
+			let that = this;
+			uni.$on('refreshMyNote', function(data) {
+				that.refreshPage();
+			});
+		},
+		destroyed() {
+			// 注销全局配置监听
+			uni.$off('refreshMyNote');
+		},
+		methods: {
+			/*下拉刷新的回调 */
+			downCallback() {
+				this.refreshPage();
+			},
+			/*上拉加载的回调*/
+			upCallback(page) { 
+				/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+				let params={};
+				if(this.cateId==0){
+					params={"keyword":this.keyword};
+				}else{
+					params={"cateId":this.cateId,"keyword":this.keyword};
+				}
+				getMyCourseNoteList(params,page.num).then(res => {
+						if(res.code==200){
+							setTimeout(()=>{
+								this.mescroll.endByPage(res.data.list.length, res.data.pages);
+								if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+								this.dataList=this.dataList.concat(res.data.list); //追加新数据
+								this.totalNum=res.data.total;
+							},300);
+						}else{
+							this.mescroll.endByPage(0, 1); 
+						}
+					},
+					rej => {}
+				).catch(()=>{
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				});
+				
+			},
+			refreshPage(){  
+			    this.mescroll.hideTopBtn();
+			    this.mescroll.resetUpScroll(true);
+			},
+		
+			getCourseCate:function(){
+				let that=this;
+				getCourseCate().then(res => {
+						if(res.code==200){
+						    this.mtabs=[{"dictValue": 0,"dictLabel": "全部"}];
+							this.mtabs=this.mtabs.concat(res.data);
+							if(this.mtabs.length>0){
+								 this.refreshPage();
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			tabChange(index){
+				this.tabIndex=index;
+				const item=this.mtabs[index];
+				if(item){
+					this.cateId=item.dictValue;
+					this.refreshPage();
+				}
+			},
+			goToMyNote(item){
+				//if(item.noteType!=2){
+					this.$navTo('./myNote?noteId='+item.noteId+"&noteType="+item.noteType);
+				//}
+			},
+			emptyClick() {
+				
+			},
+			
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	
+ page{
+ 	 height: 100%;
+ 	 background-color: #f7f7f7;
+ }
+ 
+ .content{
+ 	/* #ifdef APP-PLUS */
+ 	flex: 1;
+ 	/* #endif */
+ 	/* #ifndef APP-PLUS */
+ 	//display: flex;
+ 	/* #endif */
+ 	display: flex;
+ 	flex-direction: column;
+ 	width: 100%;
+ 	min-height: 100%;
+ 	flex: 1;
+ }
+ 
+ .grace-page-header {
+ 		width: 100%;
+ 		position: fixed;
+ 		left: 0;
+ 		top: 0;
+ 		z-index: 99;
+ 		border-bottom: 0px solid #FFFFFF;
+ 		.grace-page-status-bar {
+ 			width: 100%;
+ 			height: 0;
+ 		}
+ 		.grace-page-header-nav {
+ 			width: 100%;
+ 			display: flex;
+ 			flex-direction: row;
+ 			flex-wrap: nowrap;
+ 			align-items: center;
+ 		}
+ 		.grace-header-main {
+ 			width: 300rpx;
+ 			flex: auto;
+ 			overflow: hidden;
+ 			margin:0 20rpx;
+ 			height: 48rpx;
+ 			text-align: center;
+ 			color: #fff;
+ 		}
+ }
+ 
+ .u-nav-back{
+ 		display: flex;
+ 		align-items: center;
+ 		position: absolute;
+ 		left:32rpx;
+ 		.img{
+ 			height: 42upx;
+ 		}
+  }
+ 
+  .u-nav-right{
+	    position: absolute;
+	    right:20rpx;
+		.right-icon{
+			width: 35rpx;
+			height: 33rpx;
+			margin-right: 10rpx;
+		}
+	}
+  .bg-img{
+       position: fixed;
+       width: 100%;
+   	   height: 500rpx;
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 0;
+   	   z-index: 0;
+   }
+   
+  .search-box {
+  		width: calc(100% - 60rpx);
+  		height: 70rpx;
+  		display: flex;
+  		flex-direction: row;
+  		align-items: center;
+  		justify-content: space-between;
+  		background: #fff;
+  		border-radius: 35rpx;
+  		margin:30rpx;
+  		margin-bottom: 20rpx;
+        padding-left: 30rpx;
+  		position: relative;
+  		z-index: 10;
+  		.left{
+  			display: flex;
+  			flex-direction: row;
+  			align-items: center;
+  			justify-content: flex-start;
+  		}
+  		
+  		image{
+  			width: 28upx;
+  			height: 28upx;
+  			margin-right: 16upx;
+  		}
+  		.input-text{
+  			color: #333;
+  			font-size: 24rpx;
+  			height: 70rpx;
+  			line-height:70rpx ;
+  		}
+  		.uni-input-placeholder{
+  			color:#999;
+  		}
+  		.button{
+  			background: #FF5C03;
+  			border-radius: 29rpx;
+  			width: 108rpx;
+  			height: 54rpx;
+  			line-height: 54rpx;
+  			color: #fff;
+  			font-size: 26rpx;
+  			margin-right: 10rpx;
+  		}
+  }
+
+ .item_bg1{ background-color:#EBF2FB;}
+ .tit_color_1{color: #0173FF;}
+ 
+ .item_bg2{background-color:#FFF0EA;}
+ .tit_color_2{color: #FF661A;}
+ 
+ .item_bg3{background-color:#ECFBF1;}
+ .tit_color_3{color: #00A31B;}
+ 
+ .cor_6a{ color: #6A6A6A;}
+ 
+ .tabBg{
+	 z-index: 20;
+	 position: relative;
+	 &::after{
+	 	content: '';
+	 	width: 100%;
+	 	height:2rpx;
+	 	position: absolute;
+	 	left: 0;
+	 	bottom: 0;
+	 	background: #E5E5E5;
+	 }
+	
+ }
+ 
+ .mescroll-uni-fixed{
+	 background-color: #f7f7f7 !important;
+ }
+ 
+ .mescroll-empty{
+	 background-color: #f7f7f7 !important;
+ }
+
+</style>

+ 494 - 0
pages_course/privilege.nvue

@@ -0,0 +1,494 @@
+<template>
+	<view class="page" @click.stop="handleClick" catchtouchmove="true"  :style="{'height':privilegeBoxHei+'px'}" >
+		<view class="privilegeBox es es-ver es-br-38 es-pt-10 es-pb-30 ">
+			
+			<view class="es es-fx es-pc es-h-56 es-ml-40 es-mr-20 es-mt-10" style="margin-bottom: 30rpx;">
+				<image class="es-w-74 es-h-40" style="position: absolute;left:55px;top:20rpx" src="/static/images/course/xiangyun.png"></image>
+				<text class="es-fs-32 es-h-56 es-fw-500 prititle">限时特惠</text>
+				<image class="es-w-74 es-h-40" style="position: absolute;right:55px;top:20rpx" src="/static/images/course/xiangyun2.png"></image>
+			    <image  class="es-w-40 es-h-40" style="position: absolute;right:0;top:0" @tap="closePopup" src="/static/images/close40.png"></image>
+			</view>
+			<!-- 
+			<view class="sec1 es-mt-20 es-ml-48 es-mr-48 ">
+				<view class="es x-bc es-pl-28 es-pt-12 fl-row" >
+					<view class="l1">
+						<view class="x-f fl-row">
+							<image class="es-w-44 es-h-44" src="/static/images/course/privilege/fozhu.png"></image>
+							<text class="es-ml-8 es-c-white es-fs-32 es-fw-600">名家讲堂</text>
+						</view>
+						<text class="es-fs-30 es-mt-10 es-c-99">畅享10000+VIP视频</text>
+					</view>
+					<view class="es">
+						<image src="/static/images/course/zyx.png" class="es-w-183 es-h-98 es-br-15"></image>
+					</view>
+				</view>
+			</view>
+			
+			<view class="sec2 es es-fx es-pc es-h-40 es-mt-40 es-ml-48 es-mr-48 fl-row">
+				<text class="es-fs-30 es-h-56 es-fw-bold" style="color: #FFDAA3;">超多权益待你开启</text>
+			</view> -->
+			
+		    <!-- AI舌诊 -->
+		   <!-- <view class="primenu-box es es-fx es-pc  es-mb-20 es-ml-48 es-mr-48 fl-row" >
+				 <view class="content-inner fl-row">
+				 	<view class="item">
+				 		<image class="img" src="/static/images/course/privilege/she.png" mode="heightFix"></image>
+				 		<text class="label">AI舌诊</text>
+				 	</view>
+				 	<view class="item">
+				 		<image class="img" src="/static/images/course/privilege/tizhi.png" mode="heightFix"></image>
+				 		<text class="label">体质检测</text>
+				 	</view>
+				 	<view class="item" >
+				 		<image class="img" src="/static/images/course/privilege/baike.png" mode="heightFix"></image>
+				 		<text class="label">养生百科</text>
+				 	</view>
+				 	<view class="item">
+				 		<image class="img" src="/static/images/course/privilege/yishu.png" mode="heightFix"></image>
+				 		<text class="label">经典医书</text>
+				 	</view>
+				 	<view class="item">
+				 		<image class="img" src="/static/images/course/privilege/more.png" mode="heightFix"></image>
+				 		<text class="label">多设备登陆</text>
+				 	</view>
+				 	<view class="item">
+				 		<image class="img" src="/static/images/course/privilege/ad.png" mode="heightFix"></image>
+				 		<text class="label">去除广告</text>
+				 	</view>
+				 </view>	 
+		   </view> -->
+		   
+		    <!-- 开通会员 -->
+		   <view class="vipMethodBox es-ml-48 es-mr-48 es-mt-10 es-pt-10 es-pb-10 es-br-5">
+				<view v-for="(item, index) in vipMethods" :key="index" @tap="changeVipMethod(index)">
+					<view v-if="index!=0" class="vipMethodItem es x-bc fl-row">
+						<view class="x-bc es-ml-14 ">
+							<text class="es-fs-32  es-fw-500 es-ml-14 color1" :class="index==1?'es-fw-bold color2':''">{{item}}</text>
+						</view>
+						<view class="es-w-40 es-h-40 es-mr-14 es-mr-26 circular" v-if="index==1&&vipMethodIdx!=index"></view>
+						<image  class="es-w-40 es-h-40 es-br-ban es-mr-14 es-mr-26" v-else :src="vipMethodIdx==index?'/static/images/course/vipBuy/check.png':'/static/images/course/vipBuy/check_mr.png'"></image>
+					</view>
+				</view>
+		   </view>
+		 
+		   <!-- 支付方式 -->
+		    <view v-if="isShowPayType" class="payTypeBox es-ml-48 es-mr-28 es-mt-40 x-bc fl-row" >
+			   <view v-for="(item, index) in payTypes" :key="index"  @tap="changePayType(index)"  class="payTypeItem es x-bc " :class="payType==index+1?'pt_ac':''">
+					<view class="x-bc es-ml-14" style="flex-direction: row;">
+						<image class="es-w-59 es-h-52" :src="index==0?'/static/images/course/vipBuy/wx.png':'/static/images/course/vipBuy/zfb.png'"></image>
+						<text class="es-fs-33 es-c-white es-fw-500 es-ml-14">{{item}}</text>
+					</view>
+					<image v-if="payType==index+1" src="/static/images/course/vipBuy/check.png" class="es-w-40 es-h-40 es-br-ban es-mr-14"></image>
+					<text v-else class="es-w-40 es-h-40 es-br-ban es-mr-14 circle"></text>
+			   </view>
+		    </view>
+		
+			<view class="es es-mt-30 es-ml-48 es-mr-48 x-c fl-row">
+				<view @tap="doBuy()" class="es-h-94 x-c  vipCourseBtn vipAc es-br-46" style="width: 310rpx;">
+					<text class="es-fw-700 es-fs-34" style="color: #1B1F22;">立即购买</text>  
+				</view>
+			</view>
+			
+		</view>
+			  
+	</view>
+</template>
+
+<script>
+	import { createCourseOrder,createIntegralOrder,createVipOrder,aliPayment,wxPayment } from '@/api/course'
+	import { showLoginPage } from '@/utils/login'
+	export default {
+		data() {
+			return {
+				vipSelIndex:0,
+				vipMethods:["开通会员","积分兑换","0.01元购买"],
+				vipMethodIdx:1,
+				isShowPayType:false,
+				payTypes:["微信支付","支付宝支付"],
+				payType:1,//微信支付1  支付宝支付2
+				createType:2,//1直接购买,2积分兑换 3开通会员
+				courseId:null,
+				videoId:null,
+				orderId:null,
+				order:null,
+				subNVue:null,
+				sellPrice:0,
+				privilegeBoxHei:0,
+				catalogIndex:-1,
+				integral: 0, // 积分
+			}
+		},
+		mounted() {
+			let that=this;
+			this.subNVue= uni.getSubNVueById('privilege');
+			uni.$on('privilege', (data) => {  
+			    that.videoId=data.videoId;
+				that.courseId=data.courseId;
+				that.sellPrice=data.sellPrice;
+				that.catalogIndex=data.catalogIndex;
+				that.vipMethods=["开通会员", data.integral + "积分兑换", data.sellPrice+"元购买"];
+			}); 
+			
+			uni.$on('closePrivilege', () => {
+			    that.closePopup();
+			}); 
+			
+			const res = uni.getSystemInfoSync();
+			// this.privilegeBoxHei=uni.upx2px(1150);
+			this.privilegeBoxHei=uni.upx2px(580);
+			//let tempHei=res.windowHeight*0.65;
+		},
+	
+		methods: {
+			changeVip(index){
+				this.vipSelIndex=index;
+				if(index==2){
+					this.showPopPrivilege();
+				}
+			},
+			changeVipMethod(index){
+			    this.vipMethodIdx=index;	
+				const vipMethod=this.vipMethods[index];
+				this.isShowPayType=false;
+				if(vipMethod.indexOf('元购买')!=-1){  //直接购买
+					this.isShowPayType=true;
+					this.createType=1;
+					//this.changeFrame(true);
+				}
+				if(vipMethod.indexOf('积分兑换')!=-1){  //积分兑换
+					this.createType=2;
+					//this.changeFrame(false);
+				}
+				if(vipMethod.indexOf('开通会员')!=-1){  //开通会员
+					this.createType=3;
+					//this.changeFrame(false);
+				}
+			},
+			changePayType(index){
+				this.payType=index+1;
+			},
+			doBuy(){
+				if(this.createType==1){  //直接购买
+					 this.createCourseOrder();
+				}
+				else if(this.createType==2){   //积分兑换
+					 this.createIntegralOrder();
+				}
+				else{  //开通会员
+					 //this.$navTo('./vipBuy');	
+					 uni.navigateTo({url: './vipBuy' });
+					 setTimeout(e => {
+					 	  this.subNVue.hide();
+					 }, 500)
+				}
+			},
+			createCourseOrder(){
+			   	if(!this.isLogin()){
+			   		uni.showToast({title:"请先登录",icon: 'none'});
+			   		return;
+			   	}
+			   	uni.showLoading({title:""});
+				let params={"courseId":this.courseId,"createType":this.createType,"videoId":this.videoId,"payType":this.payType};
+			   	createCourseOrder(params).then(res => {
+			   			uni.hideLoading();
+			   			if(res.code==200){
+							this.order=res.order;
+							if(this.payType==1){  //微信支付
+								this.doWxPay();
+							}else{   //支付宝
+								this.doAlipay();
+							}
+			   			}else{
+			   				uni.showToast({title: res.msg,icon: 'error'});
+			   			}
+			   		},
+			   		rej => {}
+			   	);
+			},
+			createIntegralOrder(){
+			   	if(!this.isLogin()){
+					uni.showToast({title:"请先登录",icon: 'none'});
+			   		return;
+			   	}
+			   	uni.showLoading({title:""});
+				let params={"courseId":this.courseId,"videoId":this.videoId};
+			   	createIntegralOrder(params).then(res => {
+			   			uni.hideLoading();
+			   			if(res.code==200){
+			   				uni.showToast({title: "兑换成功",icon: 'success'});
+							uni.$emit("refreshCatalog",this.catalogIndex);
+						    this.closePopup();
+			   			}else{
+			   				uni.showToast({title: res.msg,icon: 'error'});
+			   			}
+			   		},
+			   		rej => {}
+			   	);
+			},
+			doAlipay(){
+				let that=this;
+				var data = {orderId:this.order.orderId};
+				// #ifdef APP-PLUS
+				const tzCashier=uni.requireNativePlugin("TZBank-Cashier");
+				uni.showLoading();
+				aliPayment(data).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							if(res.type=="tz"){
+								//console.log("qxj res:"+JSON.stringify(res));
+								//console.log("qxj orderFlowNo:"+res.data.body.orderFlowNo+" businessCstNo:"+res.data.body.orderNo+" platMerCstNo:"+res.data.body.platMerCstNo);
+								that.closePopup();
+								const match = res.data.body.url.match(/[\?&]businessCstNo=([^&]+)/);
+								const businessCstNo = match ? match[1] : null;
+						        console.log("qxj tzCashier:"+tzCashier+" businessCstNo:"+businessCstNo);
+								tzCashier.pay({
+									env:0,
+									wxMiniProgramType:0,
+									wxAppId:'wx703c4bd07bbd1695',
+									wxUniversalLink:"https://yjf.runtzh.com/",
+									orderFlowNo:res.data.body.orderFlowNo,
+									businessCstNo:businessCstNo,
+									platMerCstNo:res.data.body.platMerCstNo
+								},(res)=>{
+										uni.$emit('showPayTips', {"courseOrderId":that.order.orderId});
+								  });
+							}
+							else if(res.type=='hf'){
+								//this.$refs.popTip.open()
+								if(res.data.qr_code==null){
+									uni.showToast({title:res.data.bank_message,icon:'none'});
+									return;
+								}
+								this.closePopup();
+								if (uni.getSystemInfoSync().platform == 'android') {
+									var alipayScheme ='alipays://platformapi/startApp?&saId=10000007&qrcode=' + res.data.qr_code;
+								}else{
+								    var alipayScheme ='alipay://platformapi/startApp?&saId=10000007&qrcode=' + res.data.qr_code;
+								}
+								// 在uni-app中使用plus.runtime.openURL打开URL
+								plus.runtime.openURL(alipayScheme, function(error) {
+								   console.log("qxj alipayScheme error:"+error);
+								   if (error) {
+								       uni.showToast({title:error.message,icon:'error' });
+								   }
+								});
+								uni.$emit('showPayTips', {"courseOrderId":this.order.orderId});
+							}
+						}
+						else{
+							uni.showToast({title:res.msg,icon:'none'})
+						}
+						
+					},
+					rej => {}
+				);
+				// #endif	 
+			},
+			doWxPay(){
+				var that=this;
+				setTimeout(()=>{
+					this.closePopup();
+				},5000);
+				plus.share.getServices(function(res){
+				    var sweixin = null;  
+				    for(var i=0;i<res.length;i++){  
+				        var t = res[i];  
+				        if(t.id == 'weixin'){  
+				            sweixin = t;  
+				        }  
+				    }  
+					if(sweixin){
+						console.log('调起小程序');
+						uni.$emit('showPayTips', { "courseOrderId":that.order.orderId });
+						//唤起微信跳转小程序
+						sweixin.launchMiniProgram({
+							id:"gh_7a6a32e5ef61",
+							path:'/pages_order/courseOrderPayment?orderId='+that.order.orderId+"&payMethod=app",
+							type:0 // 微信小程序版本类型,可取值: 0-正式版; 1-测试版; 2-体验版。 默认值为0。
+						},function(){
+							console.log("微信唤起成功");
+							return true;
+						},function(e){
+							console.log("微信唤起失败",e);
+							uni.showToast({
+								title:'微信唤起失败,请检查是否有微信应用',
+								icon:'none'
+							});
+							return false;
+						});
+
+					}else{
+						uni.showToast({
+							title:'微信唤起失败,请检查是否安装微信应用',
+							icon:'none',
+							duration:3000
+						})
+						return false;
+					}
+				      
+				},function(res){  
+				    console.log(JSON.stringify(res));  
+				});
+			},
+			handleClick() {
+			    // 阻止事件冒泡
+			},
+			changeFrame(isCheck){
+				console.log("qxj changeFrame");
+				let pHeight=isCheck?1320:1020;
+				const subNVue = uni.getSubNVueById('privilege');
+				subNVue.setStyle({   
+					 "bottom": "0",
+					 "left": "0",
+					 "width": "100%",   
+					 "height" : pHeight+'upx' ,
+				});
+			},
+			closePopup() {
+			   const subNVue = uni.getSubNVueById('privilege');
+			   subNVue.hide('slide-out-bottom');
+			},
+			isLogin() {
+				let obj=uni.getStorageSync("AppToken");
+				return !!obj;
+			},
+			
+		},
+		destroyed() {
+			console.log("qxj privilege destroyed----")
+			// 注销全局配置监听
+			uni.$off("privilege");
+			uni.$off("closePrivilege");
+		}
+	}
+</script>
+
+<style scoped>
+	
+    .fl-row{
+		display: flex;
+		flex-direction: row;
+	}
+	
+	.page{
+		background-color:#171a1d;
+		border-radius: 20rpx;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+	}
+  
+   .privilegeBox{
+   	  /* background-color:#171a1d; */
+   	  box-sizing: border-box;
+   }
+   
+   .prititle{
+   	   color: #ffdaa3 !important;
+   	   text-align: center;
+	   margin-top: 20rpx;
+   }
+   
+   .primenu-box {
+		 display: flex;
+		 flex: 1;
+		 justify-content: center;
+		 align-items: center;
+   }
+   
+   .content-inner {
+		 display: flex;
+		 flex: 1;
+		 flex-wrap: wrap;
+		 justify-content: space-between;
+   }
+   
+   .content-inner .item{
+		width: 100px;
+		height: 75px;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		margin-top: 26rpx;
+		
+   }
+   
+   .content-inner .item .img{
+		width: 84rpx;
+		height: 84rpx;
+		margin-bottom: 8rpx;
+   }
+   
+   .content-inner .item .label{ 
+   	 font-size: 32rpx;
+   	 color: #83878A;
+   }
+   
+   .vipMethodBox{
+	  background:#2a2f32;
+	  display: flex;
+	  flex: 1;
+   }
+   	
+   .vipMethodItem{
+      border-radius: 10rpx;
+      height: 70rpx;
+      color: #FDD8A1;
+   }
+   
+   .payTypeBox{
+   	   display: flex;
+   	   flex: 1;
+   }
+   
+   .payTypeItem{
+     
+      border:1px solid #fff;
+      border-radius: 10rpx;
+      display: flex;
+      flex: 1;
+      height: 94rpx;
+	  margin-right: 20rpx;
+   }
+   
+   .circle{
+   	   border:1px solid #FDD8A1;
+   }
+   
+   .pt_ac{
+    	border:1px solid #FDD8A1;
+   }
+   
+   .color1{
+	   color: #FFDAA3;
+   }
+   .color2 {
+	   color: #fff;
+   }
+   .circular {
+	   border-radius: 50%;
+	   border: 1px solid #fff;
+   }
+   .slider-box{
+     	flex:1
+   }
+   
+  
+   
+   .vipCourseBtn{
+		background: #1B1F22;
+		border-radius: 46rpx;
+		border: 1px solid #FFDAA3;
+		color: #FFDAA3;
+		width: calc(33.33333% - 46.6666rpx);
+   }
+   
+   .vipAc{
+		background: linear-gradient(90deg, #FFE0B2, #F8BA8B);
+		border-radius: 46rpx;
+		border: 1px solid #FFDAA3;
+		color: #1B1F22;
+   }
+   
+</style>

+ 246 - 0
pages_course/studyCenter/courseCollect.vue

@@ -0,0 +1,246 @@
+<template>
+	<view>
+		<mescroll-body ref="mescrollRef" style="background-color: #FAFAFA;" @init="mescrollInit"  top="0" bottom="0" :down="downOption" @down="downCallback" :up="upOption"
+		 @up="upCallback" @emptyclick="emptyClick">
+		 
+			<view class="goods-list">
+				<goodsItemVertical :isOperate="isOperate" :showCollect="false" v-for="(item, index) in dataList" :item="item" :key="index" :index="index"  @canCalFav="canCalFav" @handleChoose='handleChoose' />
+			</view>
+			<uni-view v-if="dataList.length==0 && isPostBack" data-v-79c5cef0="" data-v-6f5cf468="" class="mescroll-empty" style="z-index: 99; top: 50px;padding: 0 25px 25px;">
+				<uni-view data-v-79c5cef0="">
+					<uni-image data-v-79c5cef0="" class="empty-icon" style="height: 186px;">
+						<div style="background-image: url(&quot;/static/images/icon_img_empty.png&quot;); background-size: 100% 100%; background-repeat: no-repeat;"></div><uni-resize-sensor><div><div></div></div><div><div></div></div></uni-resize-sensor>
+						<img src="/static/images/icon_img_empty.png" draggable="false">
+					</uni-image>
+				</uni-view>
+				<uni-view data-v-79c5cef0="" class="empty-tip">~ 暂无数据 ~</uni-view>
+				<uni-view data-v-79c5cef0="" class="empty-btn">刷新重试</uni-view>
+			</uni-view>
+			
+			<!-- 推荐 -->
+			<view class="recommend-title">
+				<view class="line"></view>
+				<text>为你推荐</text>
+				<view class="line"></view>
+			</view>
+			<view class="recommend-box">
+				<hallItem  class="gapitem"  v-for="(item, index) in recommendList " :key="index" :item="item"  @click.native="$navTo('/pages_course/info?courseId='+item.courseId)"  />
+			</view>
+			
+		</mescroll-body> 	
+		
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import mescrollBody from "@/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.vue";
+	import goodsItemVertical from "@/pages_course/components/goodsItemVertical.vue";
+	import hallItem from "@/pages/course/components/hallItem.vue";
+	import { getMyFavoriteCourseList,getCourseList,doFavorite } from '@/api/course' 
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		components: {
+			goodsItemVertical,
+			hallItem
+		},
+		data() {
+			return {
+				showCollect: false, // 是否显示收藏
+				text: '管理',
+				isOperate: false, // 是否操作
+				downOption: {   //下拉刷新
+				    use:true,
+				 	auto: true // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				totalNum:0,
+				upOption: {   //上拉加载
+				    use:true,
+				 	auto: false, // 不自动加载
+				 	page: {
+				 		num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+				 		size: 10 // 每页数据的数量
+				 	},
+				 	noMoreSize: 5, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						btnText: '刷新重试',
+						icon:"/static/images/icon_img_empty.png"
+					}
+				},
+				recommendList:[],
+				dataList:[],
+				isPostBack:false,
+			}
+		},
+		onNavigationBarButtonTap(e) {
+			if(this.text == "管理") {
+				if(this.dataList.length == 0) {
+					uni.showToast({
+						title: '暂无数据',
+						icon: "none"
+					})
+					return
+				}
+				this.isOperate = true
+				this.resetTitle( "删除")
+				return
+			}
+			// 删除
+			if(this.text == "删除") {
+				this.handleDel()
+				return
+			}
+		},
+		onLoad() {
+			this.getRecommendList();
+			this.upCallback({num:1});
+		},
+		methods: {
+			/*下拉刷新的回调 */
+			downCallback() {
+				this.refreshPage();
+			},
+			/*上拉加载的回调*/
+			upCallback(page) { 
+				/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+				let params={};
+				getMyFavoriteCourseList(params,page.num).then(res => {
+					   if(res.code==200){
+							setTimeout(()=>{
+								let list = res.data.list.map(item=>({
+									...item,
+									checked: false
+								}))
+								//this.mescroll.endByPage(res.data.list.length, res.data.pages);
+								if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+								this.dataList=this.dataList.concat(list); //追加新数据
+								this.totalNum=res.data.total;
+								this.isPostBack=true;
+							},300);
+						}else{
+							this.mescroll.endByPage(0, 1); 
+						}
+					},
+					rej => {}
+				).catch(()=>{
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				});
+			},
+			getRecommendList:function(){
+				let that=this;
+				const params={"isTui":1};
+				getCourseList(params,1,10).then(res => {
+						if(res.code==200){
+							this.recommendList=res.data.list;  
+						}
+					},
+					rej => {}
+				);
+			},
+			refreshPage(){  
+			    // this.mescroll.hideTopBtn();
+			    // this.mescroll.resetUpScroll(true);
+				this.upCallback({num:1});
+			},
+			back() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			canCalFav(item) {
+				uni.showLoading({title:""});
+				doFavorite(item.courseId).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: '操作成功',icon: 'none'});
+							this.dataList.splice(item.index,1);
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+					},
+					rej => {}
+				);
+			},
+			emptyClick(){
+				
+			},
+			resetTitle(text) {
+				this.text = text
+				// #ifdef H5
+				document.querySelector('.uni-page-head-ft .uni-page-head-btn .uni-btn-icon').innerHTML = text;
+				// #endif
+				// #ifdef APP-PLUS 
+				let pages = getCurrentPages();
+				let page= pages[pages.length - 1];
+				let webView = page.$getAppWebview()
+				// 修改buttons  
+				// index: 按钮索引, style {WebviewTitleNViewButtonStyles }  
+				webView.setTitleNViewButtonStyle(0, {  text: text });  
+				// #endif
+			},
+			handleDel(){
+				this.isOperate = false;
+				this.resetTitle("管理")
+			},
+			handleChoose(index) {
+				this.dataList[index].checked = !this.dataList[index].checked
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.navbar-title {
+		font-weight: 700;
+		font-size: 16px;
+		width: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+	.goods-list {
+		padding: 20rpx 24rpx;
+		.vertical-goods-itembox {
+			margin-bottom: 20rpx;
+		}
+	}
+
+	.recommend-title {
+		width: 100%;
+		height: 80rpx;
+		padding: 0 24rpx;
+		box-sizing: border-box;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 26rpx;
+		color: #FF5C03;
+		text-align: center;
+		line-height: 80rpx;
+		display: flex;
+		align-items: center;
+
+		text {
+			margin: 0 32rpx;
+		}
+
+		.line {
+			flex: 1;
+			height: 0;
+			border: 2rpx solid #ECECEC;
+		}
+	}
+
+    .recommend-box {
+		padding: 8rpx 24rpx;
+		display: flex;
+		flex-direction: row;
+		flex-wrap: wrap;
+		margin-right: -18rpx;
+	}
+	.gapitem {
+		margin-right: 18rpx;
+		margin-bottom: 18rpx;
+	}
+</style>

+ 274 - 0
pages_course/studyCenter/orderList.vue

@@ -0,0 +1,274 @@
+<template>
+	<view>
+		<scroll-view class="tabs" :scroll-x="true" scroll-with-animation  :scroll-into-view=" 'tab-' + scrollIntoView">
+			<view 
+			:id="'tab-' + index" 
+			:class="index == active ? 'tabs-item active':'tabs-item'" 
+			v-for="(item, index) in tabList" :key="index"
+			@tap="handleTab(index)">{{item.name}}</view>
+		</scroll-view>
+		
+		<mescroll-body ref="mescrollRef" style="background-color: #FAFAFA;" @init="mescrollInit"  top="0" bottom="0" :down="downOption" @down="downCallback" :up="upOption"
+		 @up="upCallback" @emptyclick="emptyClick">
+			 <view class="orderlist" v-for="(item, index) in dataList" :key="index">
+				<view class="orderlist-item">
+					<view class="orderlist-item-orderno">
+						<view class="orderlist-item-num">订单号:{{item.orderCode}}</view>
+						<view class="orderlist-item-status" :style="{color: item.status == 2 ? '#E69A22':''}">
+							{{getStatus(item.status)}}
+						</view>
+					</view>
+					<view class="orderlist-item-goodbox">
+						<image class="orderlist-item-goods" :src="item.imgUrl" mode="aspectFill"></image>
+						<view class="orderlist-item-info">
+							<text class="textOne orderlist-item-name">{{item.courseName}}</text>
+							<text class="textTwo orderlist-item-desc">{{item.videoName}}</text>
+							<view class="orderlist-item-buyinfo">
+								<text class="people">45708 人已购</text>
+								<text>x1</text>
+							</view>
+						</view>
+					</view>
+					<view class="orderlist-item-price">
+						订单金额:
+						<text class="price-unit">¥</text>
+						<text class="price-integer">{{item.payPrice||0.00}}</text>
+						<!-- <text class="price-decimal">.00</text> -->
+					</view>
+				</view>
+			</view>
+	    </mescroll-body> 	
+	
+	
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import mescrollBody from "@/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.vue";
+	import { getCourseOrderList} from '@/api/course' 
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		data() {
+			return {
+				tabList: [
+					{name: '全部'},
+					{name: '待付款'},
+					{name: '已付款'},
+					{name: '退款中'},
+				    {name: '已退款'}
+				],
+				active: 0,
+				scrollIntoView: 0,
+				status: 1,
+				downOption: {   //下拉刷新
+				    use:true,
+				 	auto: true // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				totalNum:0,
+				upOption: {   //上拉加载
+				 	auto: false, // 不自动加载
+				 	page: {
+				 		num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+				 		size: 10 // 每页数据的数量
+				 	},
+				 	noMoreSize: 5, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						btnText: '刷新重试',
+						icon:"/static/images/icon_img_empty.png"
+					}
+				},
+				dataList:[],
+			}
+		},
+		onLoad(options) {
+			this.active=options.status;
+			this.status=options.status;
+		},
+		methods: {
+			/*下拉刷新的回调 */
+			downCallback() {
+				this.refreshPage();
+			},
+			/*上拉加载的回调*/
+			upCallback(page) { 
+				/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+				let params={};
+				if(this.status>0){
+				    params["status"]=this.status;
+				}
+				getCourseOrderList(params,page.num).then(res => {
+						if(res.code==200){
+							setTimeout(()=>{
+								this.mescroll.endByPage(res.data.list.length, res.data.pages);
+								if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+								this.dataList=this.dataList.concat(res.data.list); //追加新数据
+								this.totalNum=res.data.total;
+							},300);
+						}else{
+							this.mescroll.endByPage(0, 1); 
+						}
+					},
+					rej => {}
+				).catch(()=>{
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				});
+				
+			},
+			refreshPage(){  
+			    this.mescroll.hideTopBtn();
+			    this.mescroll.resetUpScroll(true);
+			},
+			getStatus(status){
+				let statusStr="";
+				if(status==1){
+					statusStr="待付款";
+				}else if(status==2){
+					statusStr="已付款";
+				}
+				else if(status==3){
+					statusStr="退款中";
+				}
+				else{
+					statusStr="已退款";
+				}
+				return statusStr;
+			},
+			handleTab(index) {
+				if(this.active == index) return
+				this.active = index;
+				this.status=index;
+				this.scrollIntoView = index
+				this.refreshPage();
+			}
+			
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.tabs {
+		height: 100rpx;
+		background: #FFFFFF;
+		border-bottom: 1rpx solid #ECECEC;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 28rpx;
+		color: #757575;
+		white-space: nowrap;
+		width: 100%;
+		.tabs-item {
+			display: inline-block;
+			min-width: 64rpx;
+			width: 20%;
+			line-height: 100rpx;
+			position: relative;
+			text-align: center;
+		}
+		.active {
+			font-weight: 500;
+			font-size: 28rpx;
+			color: #222222;
+			&::after {
+				content: "";
+				width: 48rpx;
+				height: 6rpx;
+				background: #FF5C03;
+				border-radius: 3rpx 3rpx 3rpx 3rpx;
+				position: absolute;
+				bottom: 2rpx;
+				left: 50%;
+				transform: translateX(-50%);
+			}
+		}
+	}
+	.orderlist {
+		padding: 20rpx 24rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 26rpx;
+		color: #999999;
+		&-item {
+			padding: 30rpx 24rpx;
+			background: #FFFFFF;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			&-orderno {
+				@include u-flex(row, center, space-between);
+			}
+			&-goodbox {
+				margin-top: 26rpx;
+				@include u-flex(row, flex-start, flex-start);
+				flex: 1;
+			}
+			&-goods {
+				flex-shrink: 0;
+				width: 180rpx;
+				height: 180rpx;
+				margin-right: 26rpx;
+			}
+			&-info {
+				flex: 1;
+				overflow: hidden;
+				display: flex;
+				flex-direction: column
+			}
+			&-name {
+				
+				font-weight: 500;
+				font-size: 28rpx;
+				color: #222222;
+			}
+			&-desc {
+				font-weight: 500;
+				font-size: 28rpx;
+				color: #222222;
+				font-weight: 400;
+				font-size: 24rpx;
+				color: #999999;
+				margin-top: 8rpx;
+				
+			}
+			&-buyinfo {
+				margin-top: 18rpx;
+				@include u-flex(row, center, space-between);
+				.people {
+					font-weight: 400;
+					font-size: 22rpx;
+					color: #E69A22;
+				}
+			}
+			&-price {
+				font-weight: 400;
+				font-size: 24rpx;
+				color: #757575;
+				padding: 30rpx 0 4rpx 0;
+			}
+			.price-unit {
+				font-family: Roboto, Roboto;
+				font-weight: 600;
+				font-size: 20rpx;
+				color: #FF5C03;
+			}
+			.price-integer {
+				font-family: Roboto, Roboto;
+				font-weight: bold;
+				font-size: 36rpx;
+				color: #FF5C03;
+			}
+			.price-decimal {
+				font-family: Roboto, Roboto;
+				font-weight: bold;
+				font-size: 26rpx;
+				color: #FF5C03;
+			}
+		}
+	}
+</style>

+ 625 - 0
pages_course/video/comment.vue

@@ -0,0 +1,625 @@
+<template>
+	<view>
+		<mescroll-body  style="background-color: #fff;"   @init="mescrollInit" top="0" bottom="200" :down="downOption" :up="upOption"  @down="downCallback" 
+		 @up="upCallback" @emptyclick="emptyClick">
+		 
+			<view class="es-bc-white es-br-20" style="margin-top: 0;">
+				<view class="es-view-w-x1  es-mt-25">
+					<view  v-for="(item, index) in dataList"  :key="index" class="es es-mt-20">
+						<view class="es-icon-80 es-br">
+							<image :src="$isEmpty(item.avatar)?defHeadImg:item.avatar"></image>
+						</view>
+						<view  class="es-f1 es-ml-21 es-pb-20">
+							<view class="es-fs-28 es-fw">{{item.nickName}}</view>
+							<view class="es-c-99 es-fs-22 es-mt-4">{{ utils.formatDate(item.createTime) }}</view>
+							<view class="es-fs-26 es-fw-500 es-pt-24 es-pb-25">{{item.content}}</view>
+							<view class="es es-c-99">
+								<view class="es es-ac" @tap="doLike(item)">
+									<view class="es-icon-28" :class="item.liked?'es-icon-course-like2-ac':'es-icon-course-like2'" ></view>
+									<view class="es-ml-11 es-fs-26">{{item.likes}}</view>
+								</view>
+								<view class="es es-ac es-ml-23" @tap="openReplyPop(item)">
+									<view class="es-icon-28 es-icon-course-comment"></view>
+									<view class="es-ml-11 es-fs-26">{{item.replyCount}}</view>
+								</view>
+								<view class="es-f1"></view>
+								<view class="es es-ac es-pc es-icon-33"  v-if="isMySend(item)" @tap="delComment(item,0)">
+									<view class="es-w-33 es-h-9 es-icon es-icon-course-point"></view>
+								</view>
+							</view>
+							
+							<view v-if="item.replyList && item.replyList.length>0" class="es-br-20 es-pt-10 es-pb-10 es-view-w-x es-mt-25" style="background-color: #F6F9F8;">
+								<view class="es es-pt-20 es-pb-20 comment-reply-item"  v-for="(cItem,idx) in item.replyList"  :key="idx">
+									<view class="es-icon-60 es-br">
+										<image :src="$isEmpty(cItem.avatar)?defHeadImg:cItem.avatar"></image>
+									</view>
+									<view class="es-f1 es-ml-11">
+										<view class="es-fs-24 es-fw-600">{{cItem.nickName}}</view>
+										<view class="es-fs-22 es-c-99 es-mt-10 es-mb-10">{{ utils.formatDate(cItem.createTime) }}</view>
+										<view class="es-fs-24 es-fw-500 es-pt-8 es-pb-14">{{cItem.content}}</view>
+										
+										<view class="es es-c-99">
+											<view class="es es-ac" @tap="doReplyLike(cItem)">
+												<view class="es-icon-28" :class="cItem.liked?'es-icon-course-like2-ac':'es-icon-course-like2'" ></view>
+												<view class="es-ml-11 es-fs-26">{{cItem.likes}}</view>
+											</view>
+											<view class="es-f1"></view>
+											<view class="es es-ac es-pc es-icon-33"  v-if="isMySend(cItem)" @tap="delComment(cItem,1)">
+												<view class="es-w-33 es-h-9 es-icon es-icon-course-point"></view>
+											</view>
+										</view>
+									</view>
+								</view>
+							</view>
+						
+							<view @tap="replayClick(item,index)" v-if="item.showReplyBtn"  class="es es-ac es-mt-20 es-pb-20">
+								<text  class="es es-ac es-fs-24 es es-ac es-pc  es-pt-10 es-pb-10  es-c-99">
+									——展开更多回复
+								</text>
+							</view>
+							
+							
+							
+						</view>
+					</view>
+				</view>
+			</view>
+		</mescroll-body>	
+		
+		<view :style="'height:'+(KeyHight)+'px'" v-if="KeyHight" ></view>
+		<view class="es-h-120 es-auto-bottom" v-else></view>
+		
+		<view class="es-fix-bottom es-bc-white es-b-t" v-if="showBoottom">
+			<view class="es-h-120 es-view-w-x es es-ac">
+				<view class="es-f1 es-ipt es-f1 es-br es-icon-auto es-icon-course-bg2">
+					<input ref="txtPing" v-model="pingContent" :focus="isInputFocus" @blur="onblur" :placeholder="placeholder" placeholder-class="es-c" />
+				</view>
+				<view class="es-fs-30 es-fw-600 es-ml-20 es-c"  :adjust-position="false"
+					:always-system="true"  @tap="commentSend()">发布</view>
+			</view>
+			<view class="es-auto-bottom" v-if="!KeyHight"></view>
+		</view>
+	 
+		<!-- 回复弹出框 -->
+		<uni-popup ref="popup" background-color="#fff" >
+			<view class="popup-content">
+				<view class="es-h-150 es-view-w-x es es-ac">
+						<!-- <input ref="txtPing" v-model="pingContent" :focus="isInputFocus" @blur="onblur" :placeholder="placeholder" placeholder-class="es-c" /> -->
+					<textarea name="replyPing" v-model="replyContent"  style="background-color: #f7f7f7;" :placeholder="rPlaceholder" :focus="isRInputFocus" @blur="onReplyBlur" placeholder-class="place-hold"></textarea>	
+					<view class="es-fs-30 es-fw-600 es-ml-20 es-c"  :adjust-position="false"
+						:always-system="true"  @tap="replySend">发布</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import { getComments,getReplies,addComment,doLikeComment,deleteComment } from '@/api/shortvideo.js'
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		props: {
+			videoId: {
+				type: [String, Number],
+				default: 0
+			},
+			smsNum: {
+				type: [String, Number],
+				default: 0
+			}
+		},
+		data() {
+			return {
+				pingContent: '',
+				KeyHight:0,
+				cateId:0,
+				courseId:5,
+				totalNum:0,
+				viewHeight:400,
+				courseData:{},
+				pageHei:400,
+				downOption: {
+					auto: false ,// 不自动加载 (mixin已处理第一个tab触发downCallback)
+					use:true
+				},
+				upOption: {
+					auto: false, // 不自动加载
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量
+					},
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						btnText: '去看看',
+						icon:"/static/image/nodata.png"
+					},
+					textNoMore:"已经到底了",
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				    use:true,
+				},
+				pingType:1,//1:评论   2:回复
+				dataList: [], //列表数据
+				replyParentId:null,
+				isLastPage:false,
+				txtPing:null,
+				sortType:1,
+				isRInputFocus:false,
+				isInputFocus:false,
+				showBoottom:false,
+				placeholder:"发布一条友善的评论",
+				canShowReply:false,
+				defHeadImg:"/static/image/course/defHead.png",
+				rpyPageNum:0,
+				replyContent:"",
+				rPlaceholder:"",
+				delCommentId:null,
+				myUserInfo:{userId:0},
+				isAnimaStart:true
+			}
+		},
+		mounted() {
+			try {
+				const res = uni.getSystemInfoSync();
+				let navigationBarHeight=88,tabHei=120;
+				let tempHei=res.windowHeight-uni.upx2px(navigationBarHeight+tabHei);
+				console.log("qxj tempHei:"+tempHei);
+				this.pageHei=tempHei+"px";
+			    this.checkUser();
+				let that=this;
+				uni.$on('reachBottom', (data) => {
+					if(!that.isLastPage){
+						that.mescroll.triggerUpScroll();
+					}
+				}); 
+			
+				// this.txtPing = this.$refs["txtPing"];
+				// uni.onKeyboardHeightChange(this.boardHeightChange);
+			} catch (e) {
+				
+			}
+		},
+		onLoad(options) {
+			//this.refreshPage();
+			this.txtPing = this.$refs["txtPing"];
+			uni.onKeyboardHeightChange(this.boardHeightChange);
+		},
+		onUnload: function() {
+			uni.offKeyboardHeightChange(this.boardHeightChange);
+		},
+	
+		methods: {
+	
+			downCallback() {
+				// 下拉刷新的回调,默认重置上拉加载列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
+				this.mescroll.resetUpScroll(true);
+			},
+			upCallback(page) {   	
+				/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+				const params={"videoId":this.videoId};
+				//uni.showLoading({title:""});
+				getComments(params,page.num).then(res => {
+					    //uni.hideLoading();
+						if(res.code==200){
+							setTimeout(()=>{
+								this.mescroll.endByPage(res.data.list.length, res.data.pages);
+								this.isLastPage=res.data.isLastPage;
+								if(this.isLastPage){
+									this.mescroll.showNoMore()
+								}
+								if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+								let dataList=res.data.list;
+								dataList.forEach((item, index)  =>  {
+									if(item.replyCount>0){
+										item.showReplyBtn=true;
+										item.isLastReplyPage=false;
+									}else{
+										item.showReplyBtn=false;
+										item.isLastReplyPage=true;
+									}
+									item.rpyPageNum=1;
+								});
+								this.dataList=this.dataList.concat(dataList); //追加新数据
+							},100);
+						}
+					},
+					rej => {}
+				).catch(()=>{
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				});
+			},
+			refreshPage(){
+			    //this.mescroll.hideTopBtn();
+			    this.mescroll.resetUpScroll();
+			},
+			tapCommentType(type){
+				this.sortType=type;
+				this.refreshPage();
+			},
+			doLike(item){
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				const params={"commentId":item.commentId};
+				uni.showLoading({title:""});
+				doLikeComment(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							if(item.liked==0){
+								item.likes+=1;
+								item.liked=1;
+							}else{
+								item.likes-=1;
+								item.liked=0;
+							}
+							this.dataList[index]=item;
+							this.$forceUpdate();
+							uni.showToast({title: '操作成功',icon: 'none',position:'bottom'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+					},
+					rej => {}
+				);
+			},
+			doReplyLike(item){
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				const params={"commentId":item.commentId};
+				uni.showLoading({title:""});
+				doLikeComment(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							if(item.liked==0){
+								item.likes+=1;
+								item.liked=1;
+							}else{
+								item.likes-=1;
+								item.liked=0;
+							}
+							// this.dataList[index]=item;
+							// this.$forceUpdate();
+							uni.showToast({title: '操作成功',icon: 'none',position:'bottom'});
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						
+					},
+					rej => {}
+				);
+			},
+		
+			replayClick(item,index){
+				const params={"videoId":this.videoId,"parentId":item.commentId};
+				uni.showLoading({title:""});
+				getReplies(params,item.rpyPageNum).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							if(item.rpyPageNum == 1) item.replyList = []; //如果是第一页需手动制空列表
+							item.replyList=item.replyList.concat(res.data.list); //追加新数据
+							if(res.data.isLastPage){
+								item.showReplyBtn=false;
+								item.isLastReplyPage=true;
+							}else{
+								item.rpyPageNum+=1;
+								item.showReplyBtn=true;
+								item.isLastReplyPage=false;
+							}
+							this.dataList[index]=item;
+							this.$forceUpdate();
+						}
+					},
+					rej => {}
+				).catch(()=>{
+					//联网失败, 结束加载
+					this.refreshing = false;
+					this.refreshText = '加载完成',
+					this.reqDataCode=-1;
+				});
+			},
+	
+	        /*打开回复弹框*/
+			openReplyPop(item){
+				this.rPlaceholder="回复"+item.nickName;
+			    this.$refs.popup.open("bottom")
+				this.replyParentId=item.commentId;
+				this.$nextTick(()=>{
+					this.replyContent='';
+					this.isRInputFocus=true;
+				});
+		 	},
+			//点击评论发送按钮
+			commentSend(){
+			    this.replyParentId=null;
+				if(this.$isEmpty(this.pingContent)){
+					uni.showToast({title: '评论内容不能为空',icon: 'none',position:'bottom'});
+					return;
+				}
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				let params={"videoId":this.videoId,"content":this.pingContent};
+				this.postComment(params);
+			},
+			//点击回复发送按钮
+			replySend(){
+				if(this.$isEmpty(this.replyContent)){
+					uni.showToast({title: '回复内容不能为空',icon: 'none',position:'bottom'});
+					return;
+				}
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				let params={"videoId":this.videoId,"content":this.replyContent,"parentId":this.replyParentId};
+				this.postComment(params);
+			},
+			//提交评论请求
+			postComment(params){
+				let that=this;
+				uni.showLoading({title:""});
+				addComment(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							this.pingContent="";
+							this.replyContent="";
+							this.sendNotify(this.totalNum++);
+							if(!this.replyParentId){  
+								uni.showToast({title: '添加评论成功',icon: 'none',position:'bottom'});
+							}else{
+								uni.showToast({title: '添加回复成功',icon: 'none',position:'bottom'});
+							}
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+						this.placeholder="发布一条友善的评论";
+						this.pingContent='';
+						this.refreshPage();
+						
+					},
+					rej => {}
+				);		
+			},
+			
+			delComment(item,type){
+				if(!this.$checkToken()){
+					this.$showLoginPage();
+					return;
+				}
+				let that = this;
+				uni.showModal({
+				      title:  '系统提示',
+				      content:  '确定删除吗',
+				      success:  function  (res)  {
+				          if (res.confirm)  {
+							    console.log("qxj confirm");
+				                that.delCommentAct(item,type);
+				          }  else if  (res.cancel)  {
+				             
+				          }
+				      }
+				});
+			},
+			delCommentAct(item,type){
+				this.delCommentId=item.commentId;
+				let params={"commentId":this.delCommentId,"videoId":this.videoId};
+				if(type==1){
+					params["parentId"]=item.parentId;
+				}
+				this.delCommentRequest(params);
+			},
+			delCommentRequest(params){
+				let that=this;
+				uni.showLoading({title:""});
+				deleteComment(params).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({title: '操作成功',icon: 'none'});
+							this.sendNotify(this.totalNum-1);
+							setTimeout(function(){
+								that.refreshPage();
+							},1000)
+						}else{
+							uni.showToast({title: res.msg,icon: 'none'});
+						}
+					},
+					rej => {}
+				);
+			},	
+			
+			isMySend(item){
+				if(this.myUserInfo!=null && this.myUserInfo.userId==item.userId){
+					return true;
+				}
+				return false;
+			},
+		
+			onblur(){
+			    this.isInputFocus=false;
+				this.placeholder="发布一条友善的评论";
+				//this.replyParentId=null;
+			},
+			onReplyBlur(){
+			    this.isRInputFocus=false;
+				//this.rPlaceholder="发布一条友善的评论";
+			},
+			//点击空布局按钮的回调
+			emptyClick(){
+				this.mescroll.resetUpScroll();
+			},
+			boardHeightChange:function(res){
+				console.log('changeHeight', res.height);
+				//转化为rpx 
+				this.KeyHight = res.height;
+			},
+			showBotBar(smsNum){
+				this.showBoottom=true;
+				this.totalNum=smsNum;
+				console.log("qxj showBotBar smsNum:"+smsNum);
+			    this.checkUser();
+				setTimeout(()=>{
+					this.refreshPage();
+				},500);
+				
+			},
+			hideBotBar(){
+				this.showBoottom=false;
+			},
+			sendNotify(num){
+				uni.$emit('refreshTitle',num);
+			},
+
+			checkUser(){
+				if(this.$checkToken()){
+					let useInfo=uni.getStorageSync('userInfo');
+					if(!!useInfo && useInfo!=null){
+						this.myUserInfo=JSON.parse(useInfo);
+					}
+				}
+			},
+		}
+	}
+</script>
+
+<style scoped>
+	
+	page {
+		background-color: white;
+	}
+	
+	.es-view-w-x1{
+		padding-left: 20rpx;
+		padding-right: 20rpx;
+		position: relative;
+	}
+	.content1{
+		position: relative;
+	}
+	
+	.topbox{
+		position: absolute;
+		left: 10px;
+		top: -30px;
+		right: 20px;
+		height: 40px;
+		display: flex;
+	}
+
+	.banner {
+		height: 430rpx;
+	}
+
+	.es-icon-course-bg {  
+		background-image: url(/static/images/course/bg.png);
+	}
+
+	.es-icon-course-icon-1 {
+		background-image: url(/static/images/course/icon-1.png);
+	}
+
+	.es-icon-course-icon-2 {
+		background-image: url(/static/images/course/icon-2.png);
+	}
+
+	.es-icon-course-icon-3 {
+		background-image: url(/static/images/course/icon-3.png);
+	}
+
+	.es-icon-course-close {
+		background-image: url(/static/images/course/close.png);
+	}
+
+	.es-icon-course-info {
+		background-image: url(/static/images/course/info.png);
+	}
+
+	.es-icon-course-bg2 {
+		background-image: url(/static/images/course/bg2.png);
+	}
+
+	.es-icon-course-bg3 {
+		background-image: url(/static/images/course/bg3.png);
+	}
+
+	.es-icon-course-comment {
+		background-image: url(/static/images/hall/pingjia_icon.png);
+	}
+
+	.es-icon-course-nav-bg,
+	.nav {
+		background-image: url(/static/images/course/nav-bg.png);
+	}
+
+	.es-icon-course-nav-bg-ac,
+	.nav.ac {
+		background-image: url(/static/images/course/nav-bg-ac.png);
+	}
+
+	.es-icon-course-point {
+		background-image: url(/static/images/hall/more_icon16.png);
+	}
+
+	.es-icon-course-share {
+		background-image: url(/static/images/course/share.png);
+	}
+
+	.es-icon-course-like2 {
+		background-image: url(/static/images/hall/dianzan_icon.png);
+	}
+
+	.es-icon-course-like2-ac {
+		background-image: url(/static/images/hall/dianzan_on_icon.png);
+	}
+
+
+
+	.item {
+		width: calc(33.33% - 14rpx);
+	}
+
+	.nav {
+		width: 216rpx;
+		height: 60rpx;
+	}
+
+	.comment-reply-item {
+		border-bottom: 1px #fff solid;
+	}
+
+	.es-ipt input {
+		padding-left: 43rpx;
+	}
+
+	.es-ipt,
+	.es-ipt input {
+		background-color: inherit;
+	}
+	
+	textarea{
+		width: 100%;
+		font-size: 28upx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		height: 140upx;
+		line-height: 1.6;
+		text-indent: 0.5em;
+	    color: #666666;
+	}
+	.place-hold{
+		font-size: 28upx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #999999;
+		padding:10rpx 0rpx;
+	}
+	
+	
+
+	
+	
+</style>

+ 155 - 0
pages_course/videoPopup.nvue

@@ -0,0 +1,155 @@
+<template>
+	<view class="subnvue" :style="{height: height+'px',width: width +'px'}">
+		<!-- 逐集观看提示弹窗 -->
+		<view class="tipspopbox">
+			<view class="tipspop">
+				<view class="tc_bg">
+					<image class="tc_bg" src="@/static/images/ad/tc_bg.png" mode="widthFix" style="width: 100%;height: auto;"></image>
+				</view>
+				<view class="tipspop-con">
+					<text class="tipspop-title">建议逐集观看,学习效果更佳</text>
+					<text class="tipspop-desc">是否返回逐集观看?</text>
+				</view>
+				<view class="tipspop-footer">
+					<text class="tipspop-footer-btn tipspop-footer-l" @click="handleClick('cancel')">取消</text>
+					<text class="tipspop-footer-btn" @click="handleClick('confirm')">确认</text>
+				</view>
+			</view>
+			<view class="jianyi_icon_flex">
+				<view class="jianyi_icon_box">
+					<image class="jianyi_icon" src="@/static/images/ad/jianyi_icon.png" mode="aspectFill"></image>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	export default {
+		data() {
+			return {
+				height: uni.getSystemInfoSync().windowHeight,
+				width: uni.getSystemInfoSync().windowWidth,
+				index: null,
+			};
+		},
+		created() {
+			const that = this;
+			uni.$on('getTipShowType', (data) => {
+				this.index = data.index
+			})
+		},
+		beforeDestroy() {
+			uni.$off('getTipShowType');
+		},
+		methods: {
+			handleClick(type) {
+				const data = {
+					type: type,
+					extraData: this.index
+				}
+				uni.$emit('getEventType', data);
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+
+	.subnvue {
+		@include u-flex(column, center, center);
+	}
+	.tipspopbox{
+		position: relative;
+		padding-top: 74rpx;
+		@include u-flex(column, center, center);
+		.jianyi_icon_flex {
+			width: 630rpx;
+			@include u-flex(row, center, center);
+			position: absolute;
+			left:0;
+			top: 0;
+		}
+		.jianyi_icon_box {
+			width: 124rpx;
+			height: 124rpx;
+			border-radius: 50%;
+			background-image:linear-gradient(to bottom,#FF9B45, #FF5C03);
+			border: 12rpx solid #FFFFFF;
+			@include u-flex(row, center, center);
+		}
+		
+		.jianyi_icon {
+			height: 64rpx;
+			width: 64rpx;
+		}
+	}
+	.tipspop {
+		width: 630rpx;
+		// height: 376rpx;
+		padding-bottom: 40rpx;
+		background: linear-gradient(to bottom, #FFEDE3, #FFFFFF);
+		border-radius: 32rpx 32rpx 32rpx 32rpx;
+		position: relative;
+		text-align: center;
+
+		.tc_bg {
+			width: 630rpx;
+			// height: auto;
+			border-radius: 32rpx 32rpx 0 0;
+			overflow: hidden;
+		}
+
+		&-con {
+			padding: 0 48rpx;
+			text-align: center;
+		}
+
+		&-title {
+			display: inline-flex;
+			text-align: center;
+			margin: 14rpx 0 20rpx 0;
+			font-weight: 500;
+			font-size: 34rpx;
+			color: #333333;
+		}
+
+		&-desc {
+			display: inline-flex;
+			text-align: center;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #757575;
+		}
+
+		&-footer {
+			padding-top: 34rpx;
+			@include u-flex(row, center, center);
+
+			&-btn {
+				width: 248rpx;
+				height: 84rpx;
+				line-height: 84rpx;
+				text-align: center;
+				background: #FF5C03;
+				border-radius: 42rpx 42rpx 42rpx 42rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 32rpx;
+				color: #FFFFFF;
+			}
+
+			.tipspop-footer-l {
+				margin-right: 38rpx;
+				background: #F4F4F4;
+				color: #757575;
+			}
+		}
+	}
+</style>

+ 477 - 0
pages_course/vipBuy.vue

@@ -0,0 +1,477 @@
+<template>
+	<!-- <page-meta :page-style="pageStyle"></page-meta> -->
+	<view class="content">
+		
+		 <es-nav-bg-black title="御君方会员" right="管理订阅"></es-nav-bg-black>
+		
+		 <view class="es-fx es-pc es-h-168 es-ml-44 es-mr-44 es-mt-20">
+		  	 <image class="topBg" src="../../static/image/course/vipBuy/topbg.png"></image>
+			 <view class="topItem es es-fx x-f">
+					<image class="es-w-104 es-h-56" style="position: absolute;left:-32rpx;top:0" src="../../static/image/course/xiangyun.png"></image>
+					<view class="es-fs-40 es-h-156 es-fw-bold x-c" style="color: #FFDAA3;">
+						<view class="es  x-bc " style="margin-left: 90rpx;">
+							<image class="es-w-120 es-h-120 es-br-ban" :src="!$isEmpty(user.avatar)?user.avatar:avatar" ></image>
+							<view class="y-b es-ml-20">
+								<view class="es-fw-bold es-fs-32 es es-ac" :class="user.isVip==1?'vipC':'es-c-white'" >
+								     {{ $isEmpty(user.nickName)?"暂无昵称":user.nickName }}
+									 <image v-if="user.isVip==1" @tap="loginNavTo('../course/vipBuy')"  class="es-w-40 es-h-40 es-ml-10" src="../../static/image/mine/vip.png"></image>
+								</view>
+								<view  v-if="user.isVip==1" class="es-fs-22 es-mt-10 es-c-white" style="color: #929A9D">有效期至:{{ $formatDate(user.vipEndDate) }}</view>
+								<view v-else class="es-fs-26 es-c-white">开通VIP享<span class="es-fw-bold es-fs-44" style="color: #929A9D;">6</span>大特权</view>
+							</view>
+						</view>
+					</view>
+					<image class="es-w-104 es-h-56" style="position: absolute;right:-32rpx;bottom:30rpx" src="../../static/image/course/xiangyun2.png"></image>
+			</view>
+		 </view>
+		 
+	    <!-- Vip选项 -->
+	    <scroll-view class="payBox es x-f es-ml-44  es-mt-40" scroll-x="true"  >
+			<view v-for="(item, index) in dataList" :key="index"  @tap="changePackage(index)" class="payItem es-ac es-pc" :class="pickIndex==index?'ac':''">
+				 <image  v-if="pickIndex==index" class="san" src="../../static/image/course/vipBuy/item_san.png"></image>
+				 <view class="es-fs-28 es-c-white es-fw-400  x-c" style="margin-top: 54rpx;">{{item.packageName}}</view>
+				 <view class="es-c-white es-fs-44 es-fw-500 es-mt-2 x-c-28 price  x-c">¥{{item.sellPrice}}</view>
+				 <view class="es-fs-24  es-fw-400  oriPriceBox x-c">
+					 <view>原价</view>
+					 <view class="oriPrice">¥{{item.price}}
+						 <view class="zkline"></view>
+					 </view>
+				</view>
+				 <view class="es es-h-44 es-bc-theme es-c-white es-br-9 es-fs-28 x-c es-fx es-ml-33 es-mr-33 es-mt-10" >限时优惠</view>
+			</view>
+		 </scroll-view>
+	
+	    <!-- 支付方式 -->
+        <view class="es-mr-44 es-ml-44 es-mt-40">
+			<view class="es-c-white es-fs-40 es-fw-700">支付方式</view>
+			<view class="es-mt-30 x-bc">
+				<view v-for="(item, index) in payTypes" :key="index"  @tap="changePayType(index)"  class="payTypeItem es x-bc " :class="payType==index+1?'pt_ac':''">
+						<view class="x-bc es-ml-14">
+							<image class="es-w-59 es-h-52" :src="index==0?'../../static/image/course/vipBuy/wx.png':'../../static/image/course/vipBuy/zfb.png'"></image>
+							<view class="es-fs-33 es-c-white es-fw-500 es-ml-14">{{item}}</view>
+						</view>
+						<image v-if="payType==index+1" src="../../static/image/course/vipBuy/check.png" class="es-w-40 es-h-40 es-br-ban es-mr-14"></image>
+						<view v-else class="es-w-40 es-h-40 es-br-ban es-mr-14 circle"></view>
+				</view>
+			</view>
+		</view>
+		
+		<!-- 购买须知 -->
+		<view class="es-mr-44 es-ml-44 es-mt-40">
+			<view class="es-c-white es-fs-40 es-fw-700">购买须知</view>
+			<view class="es-mt-24 es-c-white es-fs-28" style="line-height: 40rpx;">1.有效期内,会员内容都可使用 <br/> 2.御君方会员为虛拟服务,开通后不支持退款<br/> 3.支付成功会员权益自动生效<br/></view>
+		     <view class="x-c es-mt-50 es-c es-fs-28 es-fw-500">
+				 <view class="es-mr-40" @tap="openH5(0)">《会员服务协议》</view>     
+				 <view>《自动续费协议》</view>     
+			 </view>
+		</view>
+		
+		<!-- 底部bottom -->
+		<view class="es payBot x-bc">
+			<view class="es-fs-56 es-fw-bold x-bc es-ml-44" style="color: #FDD8A1;">¥{{checkPrice}} <view class="tehui">(限时优惠)</view></view>
+			<view class="es btnPay x-c" @tap="doBuy">立即开通</view>
+		</view>
+		
+		<uni-popup ref="popTip" type="dialog">
+			<uni-popup-dialog cancelText="支付失败" confirmText="支付成功" mode="base" content="是否已支付成功?" title="提示" :duration="2000" :before-close="true" @close="confirmTip" @confirm="confirmTip"></uni-popup-dialog>
+		</uni-popup>
+		
+		
+    </view>
+</template>
+
+<script>
+	import {getUserInfo} from '@/api/user'
+	import { getPackageList,createVipOrder,vipZfbPayment,getVipOrderById } from '@/api/course'
+	export default {
+		data() {
+			return {
+				dataList:[],
+				pickIndex:0,
+				packageItem:{sellPrice:0,price:0},
+				checkPrice:0.0,
+				payTypes:["微信支付","支付宝支付"],
+				payType:1,//微信支付:1  支付宝支付:2
+				user:{
+					avatar:"/static/images/detault_head.png",
+					userName:"",
+					phone:"",
+					nickName:"",
+				},
+				order:null,
+				showPayTips:false,
+			}
+		},
+	  //  onBackPress() {
+			// // 手动调用返回方法
+			// uni.navigateBack({ delta: 1});
+			// // 阻止默认的返回行为
+			// return true;
+	  //  },
+		onLoad(options) {
+			this.initData();
+		},
+		onShow() {
+			if(this.showPayTips){
+				this.$refs.popTip.open();
+				this.showPayTips=false;
+			}
+		},
+		onUnload() {
+		    const subNVue = uni.getSubNVueById('privilege');
+			if(subNVue){
+				setTimeout(e => {
+					 subNVue.show();	
+				}, 200);
+			}
+		},
+		methods: {
+			initData(){
+				this.getPackageList();
+				this.getUserInfo();
+			},
+			getPackageList(){
+				getPackageList().then(res => {
+						if(res.code==200){
+							this.dataList=res.data;
+							this.packageItem=this.dataList[0];
+							this.checkPrice=this.packageItem.sellPrice;
+						}
+					},
+					rej => {}
+				);
+			},
+			doBuy(){
+				this.createVipOrder();
+			},
+			createVipOrder(){
+			   	if(!this.$isLogin()){
+			   		this.$showLoginPage();
+			   		return;
+			   	}
+			   	uni.showLoading({title:""});
+				let params={"packageId":this.packageItem.packageId,"payType":this.payType};
+			   	createVipOrder(params).then(res => {
+					    console.log("qxj createVipOrder res:"+JSON.stringify(res));
+			   			uni.hideLoading();
+			   			if(res.code==200){
+							this.order=res.order;
+			   				if(this.payType==1){  //微信支付
+			   					this.doWxPay();
+			   				}else{   //支付宝
+			   					this.doAlipay();
+			   				}
+			   			}else{
+			   				uni.showToast({title: res.msg,icon: 'none'});
+			   			}
+			   		},
+			   		rej => {}
+			   	);
+			},
+			changePackage(index){
+				this.pickIndex=index;
+				this.packageItem=this.dataList[index];
+				this.checkPrice=this.packageItem.sellPrice;
+			},
+			changePayType(index){
+				this.payType=index+1;
+			},
+			getUserInfo(){
+				let that=this;
+				getUserInfo().then(res => {
+						if(res.code==200){
+							if(res.user!=null){
+								uni.setStorageSync('userInfo',JSON.stringify(res.user));
+								this.user=res.user;
+							}
+							else{
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+							}
+						}
+					},
+					rej => {}
+				);
+			},		
+			doAlipay(){
+				var data = {orderId:this.order.orderId};
+			    let that=this;
+				// #ifdef APP-PLUS
+				const tzCashier=uni.requireNativePlugin("TZBank-Cashier");
+				uni.showLoading();
+				vipZfbPayment(data).then(res => {
+						uni.hideLoading();
+						if(res.code==200){
+							if(res.type=="tz"){
+								//console.log("qxj res:"+JSON.stringify(res));
+								//console.log("qxj orderFlowNo:"+res.data.body.orderFlowNo+" businessCstNo:"+res.data.body.orderNo+" platMerCstNo:"+res.data.body.platMerCstNo);
+								const match = res.data.body.url.match(/[\?&]businessCstNo=([^&]+)/);
+								const businessCstNo = match ? match[1] : null;
+						        console.log("qxj tzCashier:"+tzCashier+" businessCstNo:"+businessCstNo);
+								tzCashier.pay({
+									env:0,
+									wxMiniProgramType:0,
+									wxAppId:'wx703c4bd07bbd1695',
+									wxUniversalLink:"https://yjf.runtzh.com/",
+									orderFlowNo:res.data.body.orderFlowNo,
+									businessCstNo:businessCstNo,
+									platMerCstNo:res.data.body.platMerCstNo
+								},(res)=>{
+									    // uni.showToast({
+									    // 	title:'收银台回调:'+JSON.stringify(res),
+									    // 	icon:'none'
+									    // })
+										uni.$emit('closePrivilege', {});
+										that.showPayTips=true;
+								  });
+							}
+							else if(res.type=='hf'){
+								if (uni.getSystemInfoSync().platform == 'android') {
+									var alipayScheme ='alipays://platformapi/startApp?&saId=10000007&qrcode=' + res.data.qr_code;
+								}else{
+								    var alipayScheme ='alipay://platformapi/startApp?&saId=10000007&qrcode=' + res.data.qr_code;
+								}
+								// 在uni-app中使用plus.runtime.openURL打开URL
+								plus.runtime.openURL(alipayScheme, function(error) {
+								  
+								});
+								uni.$emit('closePrivilege', {});
+								that.showPayTips=true;
+							}
+						}
+						else{
+							uni.showToast({title:res.msg,icon:'none'})
+						}
+						
+					},
+					rej => {}
+				);
+				// #endif	
+			},
+			doWxPay(){
+				var that=this;
+				plus.share.getServices(function(res){
+				    var sweixin = null;  
+				    for(var i=0;i<res.length;i++){  
+				        var t = res[i];  
+				        if(t.id == 'weixin'){  
+				            sweixin = t;  
+				        }  
+				    }  
+					if(sweixin){
+						let path='/pages_order/userVipOrderPayment?orderId='+that.order.orderId+"&payMethod=app";
+						console.log('调起小程序 path:'+path);
+						//唤起微信跳转小程序
+						sweixin.launchMiniProgram({
+							id:"gh_7a6a32e5ef61",
+							path:'/pages_order/userVipOrderPayment?orderId='+that.order.orderId+"&payMethod=app",
+							type:0  // 微信小程序版本类型,可取值: 0-正式版; 1-测试版; 2-体验版。 默认值为0。
+						},function(){
+							console.log("微信唤起成功");
+							return true;
+						},function(e){
+							console.log("微信唤起失败",e);
+							uni.showToast({
+								title:'微信唤起失败,请检查是否有微信应用',
+								icon:'none'
+							});
+							return false;
+						});
+						that.showPayTips=true;
+						uni.$emit('closePrivilege', {});
+					}else{
+						uni.showToast({
+							title:'微信唤起失败,请检查是否有微信应用',
+							icon:'none',
+							duration:3000
+						});
+						return false;
+					}
+				      
+				},function(res){  
+				    console.log(JSON.stringify(res));  
+				});
+			},		
+			getVipOrderById(){
+				getVipOrderById(this.order.orderId).then(res => {
+					    this.$refs.popTip.close();
+						if(res.code==200){
+							if(res.data.status==1 || res.data.payTime!=null){
+								// #ifdef APP-PLUS
+								if(plus.runtime.channel=="baidu"){  //获取渠道标识
+								     let bdCmdType=uni.getStorageSync("bdCmdType");
+								     if(bdCmdType!=null && parseInt(bdCmdType)<=2){
+								         //this.$registerIdCode("orders",2,res.data.payMoney.toString()); //已下单
+								     }
+							    }
+								//  #endif
+								this.getUserInfo();
+								uni.showToast({title:"支付成功",icon:'success'});
+							}else{
+								uni.showToast({title:"支付失败",icon:'error'});
+							}
+						}
+						setTimeout(()=>{
+							this.navBack();
+						},2000);
+					
+					},
+					rej => {}
+				);
+			},
+			navBack() {
+				uni.navigateBack({
+					animationType: 'pop-out',
+					animationDuration: 200
+				});
+			},
+			openH5(index){
+				uni.setStorageSync('url',index==0?"https://userapp.his.cdwjyyh.com/web/userAgreement":"https://userapp.his.cdwjyyh.com/web/privacyPolicy");
+				uni.navigateTo({
+					url:"/pages/index/h5"
+				})
+			},
+			closeTip(){
+				this.$refs.popTip.close();
+				this.getVipOrderById();
+			},
+			confirmTip() {
+				uni.showLoading({title:"请稍侯...",mask:true});
+				setTimeout(()=>{
+					uni.hideLoading();
+					this.getVipOrderById();
+					uni.$emit('refreshUser', {});
+				},2000);
+				// setTimeout(()=>{
+				// 	this.navBack();
+				// },2000);
+			},
+		}
+	}
+</script>
+
+<style scoped>
+	
+	page {
+		background-color: #1B1F22;
+		
+	}
+   .topBg{
+	   position: absolute;
+	   width:calc(100% - 88rpx) ;
+	   height:168rpx;
+	   z-index: 5;
+   }
+   
+   .topItem{
+	   width: 100%;
+	   height: 100%;
+	   z-index: 10;
+   }
+   
+   .payBox{
+	   display:flex;
+	   white-space:nowrap;
+	   overflow-x: scroll;
+   }
+   
+   .payItem{
+	   position: relative;
+	   display: inline-block;
+	   width: 209rpx;
+	   height: 286rpx;
+	   background-image: url(../../static/image/course/vipBuy/item.png);
+	   background-repeat: no-repeat;
+	   background-size: cover;
+	   background-position: center;
+	   /* background-attachment: fixed; */
+	   margin-right: 12rpx;
+   }
+  
+   .ac{
+	    background-image: url(../../static/image/course/vipBuy/item_ac.png);
+	   .price{
+		   color: #C4AA83;
+	   }
+   }
+   
+   .san{
+	   position: absolute;
+	   left: calc(50% - 25rpx);
+	   top:-10rpx;
+	   width: 50rpx;
+	   height: 42rpx;
+   }
+   
+   .price{
+   	   color: #fff;
+   }
+   
+   .oriPriceBox{
+	   color: #797A7D;
+	   .oriPrice{
+	   	   position: relative;
+	   }
+	   .zkline{
+		   position: absolute;
+		   left: 0;
+		   top:18rpx;
+		   height: 1px;
+		   width: 100%;
+		   background-color:#797A7D ;
+	   }
+   }
+   
+   .payTypeItem{
+	   background-color:#1B1F22;
+	   border:1px solid #fff;
+	   border-radius: 10rpx;
+	   width: calc(50% - 15rpx);
+	   height: 94rpx;
+   }
+   
+   .circle{
+	   border:1px solid #fff;
+   }
+   
+   .pt_ac{
+	    border:1px solid #FDD8A1;
+   }
+   
+   .payBot{
+	   position: fixed;
+	   bottom: 0;
+	   left: 0;
+	   right: 0;
+	   width: 100%;
+	   height: 170rpx;
+   }
+   
+   .tehui{
+	   color: #8B8F92;
+	   font-size: 26rpx;
+	   font-weight: 400;
+   }
+   
+   .btnPay{
+	   width: 246rpx;
+	   height: 84rpx;
+	   background: linear-gradient(90deg, #FFE0B2, #F8BA8B);
+	   border-radius: 41rpx;
+	   margin-right: 44rpx;
+	   font-weight: 700;
+	   font-size: 40rpx;
+	   color: #1B1F22;
+	   line-height: 61rpx;
+   }
+   
+   .vipC{
+	   color: #FDD8A1;
+   }
+   
+   
+   
+   
+</style>

TEMPAT SAMPAH
static/images/ad/Frame.png


TEMPAT SAMPAH
static/images/ad/adbtn.gif


File diff ditekan karena terlalu besar
+ 4 - 0
static/images/ad/addfans_btn.svg


File diff ditekan karena terlalu besar
+ 4 - 0
static/images/ad/buy_btn.svg


TEMPAT SAMPAH
static/images/ad/close_icon.png


File diff ditekan karena terlalu besar
+ 35 - 0
static/images/ad/free_font_img.svg


TEMPAT SAMPAH
static/images/ad/gift_img.png


TEMPAT SAMPAH
static/images/ad/gift_img_head.png


TEMPAT SAMPAH
static/images/ad/hdtz_icon40.png


TEMPAT SAMPAH
static/images/ad/integral_img.png


TEMPAT SAMPAH
static/images/ad/jianyi_icon.png


TEMPAT SAMPAH
static/images/ad/jskc_icon40.png


TEMPAT SAMPAH
static/images/ad/mflp_icon40.png


File diff ditekan karena terlalu besar
+ 3 - 0
static/images/ad/new_user_bg.svg


TEMPAT SAMPAH
static/images/ad/pointer.gif


TEMPAT SAMPAH
static/images/ad/redpacked.png


TEMPAT SAMPAH
static/images/ad/service.png


TEMPAT SAMPAH
static/images/ad/sign_in_on_icon.png


TEMPAT SAMPAH
static/images/ad/tc_bg.png


TEMPAT SAMPAH
static/images/ad/tc_kcc_bg.png


TEMPAT SAMPAH
static/images/ad/tc_ksp_bg.png


TEMPAT SAMPAH
static/images/ad/tc_kzb_bg.png


TEMPAT SAMPAH
static/images/ad/vipFrame.png


TEMPAT SAMPAH
static/images/ad/zsfw_icon40.png


TEMPAT SAMPAH
static/images/course/add.png


TEMPAT SAMPAH
static/images/course/arrow.png


TEMPAT SAMPAH
static/images/course/back_white_icon.png


TEMPAT SAMPAH
static/images/course/banner.png


TEMPAT SAMPAH
static/images/course/banner1.png


TEMPAT SAMPAH
static/images/course/banner2.png


TEMPAT SAMPAH
static/images/course/bg.png


TEMPAT SAMPAH
static/images/course/bg2.png


TEMPAT SAMPAH
static/images/course/bg3.png


TEMPAT SAMPAH
static/images/course/bg_bar.png


TEMPAT SAMPAH
static/images/course/black_back.png


TEMPAT SAMPAH
static/images/course/calendar.png


TEMPAT SAMPAH
static/images/course/cate-bg1.png


TEMPAT SAMPAH
static/images/course/cate-bg2.png


TEMPAT SAMPAH
static/images/course/cate-bg3.png


TEMPAT SAMPAH
static/images/course/check.png


TEMPAT SAMPAH
static/images/course/choose_icon.png


TEMPAT SAMPAH
static/images/course/choose_moren_icon.png


TEMPAT SAMPAH
static/images/course/close.png


TEMPAT SAMPAH
static/images/course/close_icon.png


TEMPAT SAMPAH
static/images/course/collect.png


TEMPAT SAMPAH
static/images/course/collect_icon.png


TEMPAT SAMPAH
static/images/course/collect_icon24.png


TEMPAT SAMPAH
static/images/course/collect_on_icon24.png


TEMPAT SAMPAH
static/images/course/collect_orange_icon.png


TEMPAT SAMPAH
static/images/course/comment.png


TEMPAT SAMPAH
static/images/course/comment2.png


TEMPAT SAMPAH
static/images/course/course_icon.png


TEMPAT SAMPAH
static/images/course/defHead.png


TEMPAT SAMPAH
static/images/course/dianzan_icon.png


TEMPAT SAMPAH
static/images/course/dianzan_on_icon.png


TEMPAT SAMPAH
static/images/course/edit.png


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