Browse Source

1. 消息页面开发

Cee.Yang 3 years ago
parent
commit
9601bdc450
100 changed files with 1456 additions and 614 deletions
  1. 19 9
      api/api.js
  2. 3 3
      api/envs.js
  3. 8 9
      components/colorui/main.css
  4. 2 1
      i18n/en.js
  5. 2 1
      i18n/zh.js
  6. 10 1
      pages.json
  7. 1 1
      pages/calendar/course_item.vue
  8. 16 16
      pages/calendar/index.vue
  9. 9 5
      pages/index/index.vue
  10. 34 11
      pages/lesson/lesson_detail.vue
  11. 38 0
      pages/lesson/lesson_detail_item.vue
  12. 80 0
      pages/message/class_interaction_page.vue
  13. 131 0
      pages/message/classroom_item.vue
  14. 45 113
      pages/message/index.vue
  15. 46 29
      pages/mine/index.vue
  16. 1 1
      pages/mine/setting.vue
  17. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
  18. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
  19. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  20. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/htz-image-upload/htz-image-upload.js.map
  21. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/scroll-list/scroll-list.js.map
  22. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-calendar/uni-calendar-item.js.map
  23. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-calendar/uni-calendar.js.map
  24. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/calendar/course_item.js.map
  25. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/calendar/index.js.map
  26. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
  27. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/launch/index.js.map
  28. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/launch/screen.js.map
  29. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/lesson/lesson_detail.js.map
  30. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/lesson/lesson_detail_item.js.map
  31. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/login/env_page.js.map
  32. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/login/index.js.map
  33. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/message/class_interaction_page.js.map
  34. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/message/classroom_item.js.map
  35. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/message/index.js.map
  36. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/index.js.map
  37. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/setting.js.map
  38. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/test/livetest.js.map
  39. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/test/upload.js.map
  40. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js.map
  41. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u--input/u--input.js.map
  42. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-badge/u-badge.js.map
  43. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-button/u-button.js.map
  44. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-gap/u-gap.js.map
  45. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-icon/u-icon.js.map
  46. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-input/u-input.js.map
  47. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.js.map
  48. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-navbar/u-navbar.js.map
  49. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.js.map
  50. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-status-bar/u-status-bar.js.map
  51. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.js.map
  52. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-tabbar/u-tabbar.js.map
  53. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-tabs/u-tabs.js.map
  54. 1 1
      unpackage/dist/dev/app-plus/app-config-service.js
  55. 0 0
      unpackage/dist/dev/app-plus/app-service.js
  56. 229 152
      unpackage/dist/dev/app-plus/app-view.js
  57. BIN
      unpackage/dist/dev/app-plus/static/home/arrow_left.png
  58. BIN
      unpackage/dist/dev/app-plus/static/home/arrow_right.png
  59. BIN
      unpackage/dist/dev/app-plus/static/home/grey_book.png
  60. BIN
      unpackage/dist/dev/app-plus/static/home/i2_name.png
  61. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_dkxy.png
  62. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_fk.png
  63. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_js.png
  64. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_kq.png
  65. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_nr.png
  66. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_qx.png
  67. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_rz.png
  68. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_select_tag.png
  69. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_sk.png
  70. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_sl.png
  71. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_wr.png
  72. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_wsk.png
  73. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_xs.png
  74. BIN
      unpackage/dist/dev/app-plus/static/lesson/lesson_zy.png
  75. 5 2
      unpackage/dist/dev/mp-weixin/app.json
  76. 89 37
      unpackage/dist/dev/mp-weixin/common/main.js
  77. 135 8
      unpackage/dist/dev/mp-weixin/common/main.wxss
  78. 1 2
      unpackage/dist/dev/mp-weixin/common/runtime.js
  79. 38 21
      unpackage/dist/dev/mp-weixin/common/vendor.js
  80. 0 0
      unpackage/dist/dev/mp-weixin/components/colorui/components/cu-custom.bak.json
  81. 54 0
      unpackage/dist/dev/mp-weixin/components/htz-image-upload/htz-image-upload.js
  82. 4 0
      unpackage/dist/dev/mp-weixin/components/htz-image-upload/htz-image-upload.json
  83. 1 0
      unpackage/dist/dev/mp-weixin/components/htz-image-upload/htz-image-upload.wxml
  84. 145 0
      unpackage/dist/dev/mp-weixin/components/htz-image-upload/htz-image-upload.wxss
  85. 0 1
      unpackage/dist/dev/mp-weixin/components/ren-calendar/ren-calendar.wxml
  86. 0 160
      unpackage/dist/dev/mp-weixin/components/ren-calendar/ren-calendar.wxss
  87. 67 0
      unpackage/dist/dev/mp-weixin/components/scroll-list/scroll-list.js
  88. 4 0
      unpackage/dist/dev/mp-weixin/components/scroll-list/scroll-list.json
  89. 0 0
      unpackage/dist/dev/mp-weixin/components/scroll-list/scroll-list.wxml
  90. 128 0
      unpackage/dist/dev/mp-weixin/components/scroll-list/scroll-list.wxss
  91. 11 11
      unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar-item.js
  92. 2 2
      unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar-item.json
  93. 0 0
      unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar-item.wxml
  94. 26 5
      unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar-item.wxss
  95. 11 11
      unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar.js
  96. 0 0
      unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar.wxml
  97. 1 1
      unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar.wxss
  98. 52 0
      unpackage/dist/dev/mp-weixin/pages/calendar/course_item.js
  99. 6 0
      unpackage/dist/dev/mp-weixin/pages/calendar/course_item.json
  100. 1 0
      unpackage/dist/dev/mp-weixin/pages/calendar/course_item.wxml

+ 19 - 9
api/api.js

@@ -2,27 +2,37 @@ import request from './request'
 
 class Api {
 	
-	///
+	/////////////////////
 	/// LOGIN
-	///
+	/////////////////////
 	
 	/// 登录 { "account": lishuming, "password": 123456}
-	static login(data) { return request({url: '/api/v1/sso_v2/app_login', method: "POST", data: data}) }
+	static login(data) { return request({url: '/sso_v2/app_login', method: "POST", data: data}) }
 
-	///
+	/////////////////////
 	/// SCHEDULE
-	/// 
+	/////////////////////
 	
 	/// 获取日程 /api/v1/school_app_class_schedule_page/page?time=202201
 	/// @time: String, eg: 202201
-	static classSchedule(time) { return request({url: `/api/v1/school_app_class_schedule_page/page?time=${time}`}) }
+	static classSchedule(time) { return request({url: `/school_app_class_schedule_page/page?time=${time}`}) }
 
-	///
+	/////////////////////
 	/// LESON
-	///
+	/////////////////////
 	
 	/// 获取课程详情
-	static lessonDetail(id) { return request({ url: `/api/v1/school_app_class_schedule_page/get_kq_stu?cs_id=${id}` }) }
+	static lessonDetail(id) { return request({ url: `/school_app_class_schedule_page/get_kq_stu?cs_id=${id}` }) }
+	
+	/////////////////////
+	/// MESSAGE
+	/////////////////////
+	
+	/// 获取消息列表
+	static messageList(data) { return request({ url: `/school_app_class_schedule_page/kq_cs_page`, method: "GET", data: data }) }
+	
+	/// 获取用户信息
+	static userInfo() { return request({ url: '/erp_user_info/get', method: 'GET' }) }
 }
 
 export default Api

+ 3 - 3
api/envs.js

@@ -3,17 +3,17 @@ const Envs = {
 	release: {
 	  index: 0,
 		name: '正式环境',
-	  url: "https://api-eschool-slb.i2edu.net"
+	  url: "https://api-eschool-slb.i2edu.net/api/v1"
 	},
 	test: {
 	  index: 1,
 		name: '测试环境',
-	  url: "http://api-test-eschool-slb.i2edu.net:31103"
+	  url: "http://api-test-eschool-slb.i2edu.net:31103/api/v1"
 	},
   dev: {
     index: 2,
 		name: '开发环境',
-    url: "http://api-test-eschool-slb.i2edu.net:31103"
+    url: "http://api-test-eschool-slb.i2edu.net:31103/api/v1"
   },
 	custom: {
 	  index: 3,

+ 8 - 9
components/colorui/main.css

@@ -1979,7 +1979,7 @@ button.cuIcon.lg {
 }
 
 .cu-timeline>.cu-item {
-	padding: 30upx 30upx 30upx 120upx;
+	padding: 20upx 25upx 5upx 70upx;
 	position: relative;
 	display: block;
 	z-index: 0;
@@ -1995,7 +1995,7 @@ button.cuIcon.lg {
 	position: absolute;
 	width: 1upx;
 	background-color: #ddd;
-	left: 60upx;
+	left: 35upx;
 	height: 100%;
 	top: 0;
 	z-index: 8;
@@ -2005,15 +2005,14 @@ button.cuIcon.lg {
 	font-family: "cuIcon";
 	display: block;
 	position: absolute;
-	top: 36upx;
+	top: 10upx;
 	z-index: 9;
-	background-color: #ffffff;
 	width: 50upx;
 	height: 50upx;
 	text-align: center;
 	border: none;
 	line-height: 50upx;
-	left: 36upx;
+	left: 18upx;
 }
 
 .cu-timeline>.cu-item:not([class*="cuIcon-"])::before {
@@ -2021,13 +2020,13 @@ button.cuIcon.lg {
 }
 
 .cu-timeline>.cu-item[class*="cuIcon-"]::before {
-	background-color: #ffffff;
+	/* background-color: #ffffff; */
 	width: 50upx;
 	height: 50upx;
 	text-align: center;
 	border: none;
 	line-height: 50upx;
-	left: 36upx;
+	left: 10upx;
 }
 
 .cu-timeline>.cu-item>.content {
@@ -2043,7 +2042,7 @@ button.cuIcon.lg {
 }
 
 .cu-timeline>.cu-item>.content+.content {
-	margin-top: 20upx;
+	margin-top: 10upx;
 }
 
 /* ==================
@@ -3909,4 +3908,4 @@ scroll-view.cu-steps .cu-item {
 .line-white,
 .lines-white {
 	color: #ffffff;
-}
+}

+ 2 - 1
i18n/en.js

@@ -288,7 +288,8 @@ const en = {
 	"uni-calender.SUN": "SUN",
 	
 	
-	"courseProgress": "CourseProgress"
+	"courseProgress": "CourseProgress",
+	"answered": "Answered"
 	
 }
 export default en;

+ 2 - 1
i18n/zh.js

@@ -285,6 +285,7 @@ const cn = {
 	"uni-calender.FRI": "五",
 	"uni-calender.SAT": "六",
 	
-	"courseProgress": "课程进度"
+	"courseProgress": "课程进度",
+	"answered": "已作答"
 }
 export default cn;

+ 10 - 1
pages.json

@@ -57,6 +57,15 @@
 		"navigationBarTitleText": "uni-app",
 		"navigationBarBackgroundColor": "#F8F8F8",
 		"backgroundColor": "#F8F8F8",
-		"enablePullDownRefresh": false
+		"enablePullDownRefresh": false,
+		"app-plus": {
+			"bounce": "none",
+			"safearea": {  
+			    "background": "#CCCCCC",  
+			    "bottom": {  
+			        "offset": "auto"  
+			    }  
+			}
+		}
 	}
 }

+ 1 - 1
pages/calendar/course_item.vue

@@ -1,5 +1,5 @@
 <template>
-	<view class="lesson-item u-flex-column" :style="{ 'border-left': '5px solid ' + mainColor }" @click="lessonItemOnTap">
+	<view class="bg-white lesson-item u-flex-column" :style="{ 'border-left': '5px solid ' + mainColor }" @click="lessonItemOnTap">
 		<view class="flex justify-between margin-sm">
 			<text :style="{ color: mainColor }">{{ startTime + ' - ' + endTime }}</text>
 			<text v-if="lessonStatus" class="lesson-status text-xs round" :style="{ 'background-color': mainColor }">{{ lessonStatus }}</text>

+ 16 - 16
pages/calendar/index.vue

@@ -7,10 +7,12 @@
 			</view>
 			<view class="u-nav-slot" slot="right"><u-button @click="testBtnClick">直播测试</u-button></view>
 		</u-navbar>
-		<scroll-list ref="list" :option="option" @refresh="refresh">
+		
+		<!-- 列表 -->
+		<scroll-list ref="list" :option="option" @refresh="refresh" style="padding-bottom: 70px !important; height: auto;">
+			
 			<!-- 日历 -->
 			<uni-calendar insert foldAble :selected="selected" @change="change" @monthSwitch="monthSwitch" />
-			<!-- hint -->
 			<view class="bg-gray flex justify-between align-center padding-lr-sm">
 				<view v-for="(item, index) in lessonStatus" :key="index">
 					<view class="flex justify-between align-center">
@@ -19,7 +21,7 @@
 					</view>
 				</view>
 			</view>
-
+			
 			<!-- 列表 -->
 			<course-item v-for="(item, index) in list" :key="index" :data="item" />
 
@@ -70,23 +72,18 @@ export default {
 	methods: {
 		initCurrentDate() {
 			let now = new Date();
-			var year = now.getFullYear();
-			var month = now.getMonth() + 1;
-			var day = now.getDay();
-			month = `${month}`.padStart(2, 0);
-			day = `${day}`.padStart(2, 0);
-			this.currentMonth = `${year}${month}`;
-			this.currentDate = `${year}-${month}-${day}`;
+			this.currentMonth = moment(now).format('YYYYMM')
+			this.currentDate = moment(now).format('YYYY-MM-DD')
 		},
 		/// 获取课程列表
 		async getClassSchedule() {
 			var that = this;
 			Api.classSchedule(this.currentMonth).then(res => {
 				if (res.code != 200) return;
-				let data = res.data;
+				let data = res.data || [];
 				var map = {};
 				data.forEach(e => {
-					var startTime = moment(e.start_time).format('YYYY-MM-DD');
+					var startTime = moment(e.start_time).format('YYYY-MM-DD')
 					var arrs = map[startTime] || [];
 					if (arrs.map(a => a.class_id).indexOf(e.class_id) == -1) {
 						arrs.push(e);
@@ -97,7 +94,7 @@ export default {
 				var _tempSelected = [];
 				for (let i = 0; i < Object.keys(map).length; i++) {
 					var time = Object.keys(map)[i];
-					var study_states = map[time].map(a => a.study_state)
+					var study_states = map[time].map(a => a.study_state) || []
 					var status = 'absence' /// 默认未上课
 					var absence_lessons = study_states.filter(e=>e=='45') /// 未上课等 != 当天总数量:未上完课
 					if (absence_lessons.length != study_states.length) { status = 'onGoing' }
@@ -146,11 +143,14 @@ export default {
 };
 </script>
 
-<style scoped>
+<style lang="scss" scoped>
 .calendar-page {
-	background-color: #ffffff;
+	background-color: $uni-bg-color-hover;
 	margin-bottom: 70px;
-	height: 100%;
+	height: auto;
+	padding-bottom: 70px;
+	display: flex;
+	flex-direction: column;
 }
 .hint-box {
 	height: 5px;

+ 9 - 5
pages/index/index.vue

@@ -1,9 +1,9 @@
 <template>
-	<view>
-		<tabbar-calendar v-if="selectedIndex == 0"></tabbar-calendar>
-		<tabbar-message v-if="selectedIndex == 1"></tabbar-message>
-		<tabbar-mine v-if="selectedIndex == 2"></tabbar-mine>
-		<u-tabbar :value="selectedIndex" fixed placeholder safeAreaInsetBottom activeColor="#d81e06">
+	<view @touchmove.stop.prevent="moveHandle">
+		<tabbar-calendar v-show="selectedIndex == 0"></tabbar-calendar>
+		<tabbar-message v-show="selectedIndex == 1"></tabbar-message>
+		<tabbar-mine v-show="selectedIndex == 2"></tabbar-mine>
+		<u-tabbar class="solid-top" :value="selectedIndex" fixed placeholder safeAreaInsetBottom activeColor="#d81e06">
 			<u-tabbar-item
 				v-for="item in tabItems"
 				:index="item.index"
@@ -45,6 +45,10 @@ export default {
 		tabBarDidChange(e) {
 			console.log(e)
 			this.selectedIndex = e;
+		},
+		/// 禁用页面滑动
+		moveHandle() {
+			return
 		}
 	}
 };

+ 34 - 11
pages/lesson/lesson_detail.vue

@@ -4,7 +4,7 @@
 			<text class="margin-sm text-white text-lg"> {{ $t(lessonStatus.name) }} </text>
 		</view>
 		<view class="u-flex-column padding-lr-sm bg-white">
-			<view v-for="(item,index) in items" :key="index" class="flex justify-between padding-tb-sm" :class="{
+			<view v-for="(item,index) in baseInfo" :key="index" class="flex justify-between padding-tb-sm" :class="{
 				'gap-line': item.gap != null,
 			}">
 				<text> {{ $t(item.title) }} </text>
@@ -12,12 +12,14 @@
 			</view>
 			<view class="bg-gray margin-tb-sm" style="height: 1px; width: 100%;" />
 		</view>
+		<lesson-detail-item v-for="(item, index) in items" :key="index" :image="item.image" :title="item.title" :subTitle="item.subtitle"/>
 	</view>
 </template>
 
 <script>
 	import Api from '../../api/api.js';
 	import { getLessonStatus } from '../../common/tools.js'
+	import LessonDetailItem from './lesson_detail_item.vue'
 	import moment from 'moment';
 	export default {
 		data() {
@@ -26,8 +28,13 @@
 				data:{},
 				classState: {},
 				teaState: {},
+				stuState: [],
+				baseInfo: []
 			};
 		},
+		components:{
+			LessonDetailItem,
+		},
 		name: 'lesson-detail',
 		computed: {
 			mainColor() {
@@ -41,16 +48,17 @@
 				return getLessonStatus(this.classState.study_state)
 			},
 			items() {
-				var startTime = moment(this.classState.appStartTime).format('HH:mm');
-				var endTime = moment(this.classState.appEndTime).format('HH:mm');
+				var { stuState, classState } = this
+				var attendanceInfo = '(0/0)'
+				if (stuState != null && stuState.length > 0) {
+					var list = stuState.filter(e=>e.classId!=null&&e.classId.length>0)
+					attendanceInfo = `(${list.length}/${stuState.length})`
+				}
+				var feedbackTotalInfo = (classState.feedback_total != null && parseInt(classState.feedback_total) > 0) ? this.$i18n.t('completed') : this.$i18n.t('unCompleted')
 				return [
-					{'title': 'classId', 'value': this.classState.class_number},
-					{'title': 'textBook', 'value': this.classState.tb_name},
-					{'title': 'ft', 'value': this.classState.tb_name},
-					{'title': 'courseProgress', 'value': `Topic ${this.classState.unit} / Lesson ${this.classState.lession}`, 'gap': true},
-					{'title': 'lessonDate', 'value': moment(this.classState.appStartTime).format('YYYY-MM-DD')},
-					{'title': 'lessonTime', 'value': `${startTime}-${endTime}`},
-					{'title': 'classroom', 'value': this.classState.name},
+					{'image': '/static/lesson/lesson_rz.png', 'title': this.$i18n.t('attendance'), 'subtitle': attendanceInfo},
+					{'image': '/static/lesson/lesson_fk.png', 'title': this.$i18n.t('addLessonFeedback'), 'subtitle': feedbackTotalInfo},
+					{'image': '/static/lesson/lesson_rz.png', 'title': this.$i18n.t('attendance'), 'subtitle': attendanceInfo},
 				]
 			}
 		},
@@ -59,15 +67,30 @@
 			this.getLessonDetail()
 		},
 		mounted() {
-
+		
 		},
 		methods: {
+			initData() {
+				var startTime = moment(this.classState.appStartTime).format('HH:mm');
+				var endTime = moment(this.classState.appEndTime).format('HH:mm');
+				this.baseInfo = [
+					{'title': 'classId', 'value': this.classState.class_number},
+					{'title': 'textBook', 'value': this.classState.tb_name},
+					{'title': 'ft', 'value': this.classState.tb_name},
+					{'title': 'courseProgress', 'value': `Topic ${this.classState.unit} / Lesson ${this.classState.lession}`, 'gap': true},
+					{'title': 'lessonDate', 'value': moment(this.classState.appStartTime).format('YYYY-MM-DD')},
+					{'title': 'lessonTime', 'value': `${startTime}-${endTime}`},
+					{'title': 'classroom', 'value': this.classState.name},
+				]
+			},
 			async getLessonDetail() {
 				var that = this
 				Api.lessonDetail(this.lessonId).then(res=>{
 					if (res.code != 200) return;
 					that.classState = res.data.class_state
 					that.teaState = res.data.tea_state
+					that.stuState = res.data.stu_state
+					this.initData()
 				})
 			}
 		}

+ 38 - 0
pages/lesson/lesson_detail_item.vue

@@ -0,0 +1,38 @@
+<template>
+	<view class="flex justify-between padding margin-sm radius shadow bg-white">
+		<view class="flex justify-between align-center">
+			<image v-if="image" :src="image" style="width: 20px; height: 20px;"></image>
+			<text class="text-sm margin-lr-sm"> {{ title }} </text>
+		</view>
+		<view class="flex justify-between align-center">
+			<text class="text-sm margin-lr-sm"> {{ subTitle }} </text>
+			<view class="cuIcon-right"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {        
+		props: {
+			image: {
+				type: String,
+				default: ''
+			},
+			title: {
+				type: String,
+				default: '',
+			},
+			subTitle: {
+				type: String,
+				default: '未添加',
+			}
+		},
+		data() {
+			return {}
+		}
+	}
+</script>
+
+<style>
+	
+</style>

+ 80 - 0
pages/message/class_interaction_page.vue

@@ -0,0 +1,80 @@
+<template>
+	<view class="bg-white">
+		<!-- 列表 -->
+		<scroll-list ref="list" :option="option" @load="load" @refresh="refresh">
+			<!-- 列表 -->
+			<classroom-item v-for="(item, index) in list" :key="index" :data="item" />
+		</scroll-list>
+	</view>
+</template>
+
+<script>
+import Api from '../../api/api.js';
+import moment from 'moment';
+import ClassroomItem from './classroom_item.vue'
+export default {
+	components: {
+		ClassroomItem
+	},
+	data() {
+		return {
+			option: {
+				size: 10,
+				auto: true,
+				loadDisabled: true
+			},
+			list: [],
+			lastStartTime: '',
+			page: 1
+		};
+	},
+	computed: {
+	},
+	onReady() {},
+	mounted() {
+		
+	},
+	methods: {
+		/// 初始化数据
+		async requestData(isRefresh) {
+			this.page = isRefresh ? 1 : this.page + 1
+			var params = {
+				"page": this.page,
+				"rows": 10
+			}
+			var that = this
+			Api.messageList(params).then( res => {
+				if (res.code != 200) return;
+				let data = res.data.content;
+				var newList = []
+				for (let i = 0; i < data.length; i++) {
+					var item = data[i]
+					var _startTime = moment(item.start_time).format('YYYY-MM-DD')
+					item.isSection = that.lastStartTime != _startTime
+					item.date = _startTime
+					that.lastStartTime = _startTime
+				}
+				
+				if (isRefresh) {
+					that.list = data
+					that.$refs.list.refreshSuccess({ list: that.list, total: res.data.totalSize });
+				} else {
+					that.list = [ ...that.list, ...data]
+					this.$refs.list.loadSuccess({ list: this.list, total: res.data.totalSize });
+				}
+			})
+		},
+		// 刷新刷剧
+		refresh(paging) {
+			this.requestData(true)
+		},
+		load(paging) {
+			this.requestData(false)
+		},
+	}
+};
+</script>
+
+<style scoped>
+
+</style>

+ 131 - 0
pages/message/classroom_item.vue

@@ -0,0 +1,131 @@
+<template>
+	<view class="u-flex-column">
+		<!-- 日期 -->
+		<view v-if="data.isSection" class="flex margin-sm align-center">
+			<text class="lg text-red cuIcon-round"></text>
+			<text class="margin-lr-sm text-lg text-bold"> {{ data.date }} </text>
+		</view>
+		<!-- 时间线 -->
+		<view class="u-flex-column">
+			<!-- 左侧时间线与图标 -->
+			<view class="cu-timeline bg-normal">
+				<view class="cu-item cuIcon-title bg-normal">
+					<view class="flex align-center bg-normal">
+						<text class="text-black text-bold"> {{ startTime + ' - ' + endTime }} </text>
+					</view>
+					<!-- 课程信息 -->
+					<view class="lesson-item u-flex-column bg-white" :style="{ 'border-left': '5px solid ' + mainColor }">
+						<!-- 课程状态 -->
+						<view class="flex justify-between margin-sm">
+							<view class="text-center round padding-lr-sm u-border-bottom" :style="{ 'background-color': mainColor }">
+								<text class="text-red text-xs" v-if="!data.if_feedback"> {{ $t('feedback') }} </text>
+							</view>
+							<view class="lesson-status text-xs flex align-center" @click="classStatusDidClick">
+								<view class="cuIcon-form sm"></view>
+								<text> {{ data.if_feedback ? $t('Completed') : $t('Uncompleted') }} </text>
+							</view>
+						</view>
+						<view class="margin-sm" @click="lessonItemOnTap">
+							<view class="bg-gray" style="height: 1px;" />
+							<view class="flex justify-between align-center">
+								<text class="margin-xs">{{ data.class_number || '-' }}</text>
+								<text class="margin-xs">{{ answerStatus }}</text>
+							</view>
+							<view class="flex justify-start align-center">
+								<uni-icons type="location"></uni-icons>
+								<text class="padding-lr-xs text-sm text-gray">{{ data.school_address || '-' }}</text>
+							</view>
+							<view class="bg-gray margin-tb-sm" style="height: 1px;" />
+							<view class="margin-lr-sm flex justify-start align-start">
+								<text class="text-gray text-sm"> 学员: </text>
+								<view v-if="data.stu_list" class="flex flex-wrap" style="flex:1">
+									<view class="margin-lr-sm" v-for="(item, index) in data.stu_list" :key="index">
+										<text class="text-gray text-sm"> {{ item.stu_name }} </text>
+									</view>
+								</view>
+								<text v-else class="text-gray text-sm margin-lr-sm">暂无学员</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+import moment from 'moment';
+export default {
+	props: {
+		data: {
+			type: Object,
+			default: () => ({})
+		}
+	},
+	data() {
+		return {
+		};
+	},
+	computed: {
+		startTime() {
+			return moment(this.data.start_time).format('hh:mm');
+		},
+		endTime() {
+			return moment(this.data.end_time).format('hh:mm');
+		},
+		mainColor() {
+			if (this.data.if_feedback) {
+				return '#F7C405'
+			} else {
+				return '#FFD7D9';
+			}
+		},
+		lessonStatus() {
+			if (this.data.study_state == 45) return '未上课';
+			if (this.data.study_state == 47) return '已上课';
+			if (this.data.study_state == 686) return '已取消';
+			return ''
+		},
+		answerStatus() {
+			var total = (this.data.stu_list || []).length
+			return `${this.$i18n.t('answered')}\(${this.data.finish_num}/${total}\)`
+		}
+		
+	},
+	onReady() {},
+	mounted() {},
+	methods: {
+		lessonItemOnTap(){
+			uni.navigateTo({
+				url:`../lesson/lesson_detail?lessonId=${this.data.id}`
+			})
+		},
+		classStatusDidClick() {
+			console.log('classStatusDidClick')
+		}
+	}
+};
+</script>
+<style lang="scss" scoped>
+.bg-normal {
+	background-color: $uni-bg-color-hover;
+}
+.lesson-item {
+	width: auto;
+	border-top: 1px solid #f1f1f1;
+	margin: 5px;
+	padding-bottom: 5px;
+	border-radius: 5px;
+	box-shadow: 3px 3px 0 0 #f1f1f1;
+}
+.lesson-top-box {
+	display: flex;
+	justify-content: space-between;
+	margin: 10px;
+}
+.lesson-status {
+	background-color: red;
+	color: white;
+	padding: 3px 5px;
+	border-radius: 10px 2px 10px 2px;
+}
+</style>

+ 45 - 113
pages/message/index.vue

@@ -1,147 +1,79 @@
 <template>
-	<view class="calendar-page">
+	<view class="message-page">
 		<!-- 导航栏 -->
-		<u-navbar bgColor="red">
+		<u-navbar fixed title="消息" placeholder>
+			<view class="u-nav-slot" slot="right"></view>
 			<view class="u-nav-slot" slot="left">
-				<text class="text-bold text-xxl text-white">{{ $t('schedule') }}</text>
+				<text class="cuIcon-filter"></text>
 			</view>
-			<view class="u-nav-slot" slot="right"></view>
 		</u-navbar>
-		<!-- 日历 -->
-		<uni-calendar insert foldAble :selected="selected" @change="change" />
-		<!-- hint -->
-		<view class="bg-gray flex justify-between align-center padding-lr-sm">
-			<view v-for="(item, index) in hints" :key="index">
-				<view class="flex justify-between align-center">
-					<view class="hint-icon" :style="{ 'background-color': item.color}"></view>
-					<text class="text-sm">{{ item.title }}</text>
+				
+		<!-- tabs -->
+		<scroll-view scroll-x class="bg-white nav">
+			<view class="flex text-center">
+				<view class="cu-item flex-sub" :class="tabIndex==index?'text-red cur':''" v-for="(item,index) in tabs" :key="index" @tap="tabSelect" :data-id="index">
+					{{ item.name }}
 				</view>
 			</view>
+		</scroll-view>
+			
+		<!-- List -->
+		<u-gap height="1"></u-gap>
+		
+		<!-- List -->
+		<view class="message-content">
+			<class-interaction-page v-show="tabIndex==0" />
 		</view>
-		<!-- 列表 -->
-		<scroll-list ref="list" :option="option" @load="load" @refresh="refresh">
-			<view class="list-item" v-for="(item, index) in list" :key="index">
-				<view class="avatar">{{ index + 1 }}</view>
-				<view class="info">
-					<view class="info-item"></view>
-					<view class="info-item"></view>
-				</view>
-			</view>
-		</scroll-list>
 	</view>
 </template>
 
 <script>
 import Api from '../../api/api.js';
-import UniCalendar from '../../components/uni-calendar/uni-calendar.vue';
+import ClassInteractionPage from './class_interaction_page.vue'
 export default {
 	components: {
-		UniCalendar
+		ClassInteractionPage
 	},
 	data() {
 		return {
-			currentDate: '',
-			show: false,
-			mode: 'range',
-			selected: [
-				{ date: '2022-01-05', info: '签到', data: { custom: '自定义信息', name: '自定义消息头' } },
-				{ date: '2022-01-09', info: '打卡', data: { custom: '自定义信息', name: '自定义消息头' } },
-				{ date: '2022-02-03', info: '打卡', data: { custom: '自定义信息', name: '自定义消息头' } }
-			],
 			option: {
 				size: 10,
-				auto: false
+				auto: false,
+				loadDisabled: false
 			},
 			list: [],
-			hints: [
-				{ index: 0, color: 'red', title: '未上课' },
-				{ index: 1, color: 'green', title: '已上课' },
-				{ index: 2, color: 'blue', title: '未上完课' },
-				{ index: 3, color: 'grey', title: '班级取消' }
-			]
+			tabIndex: 0
 		};
 	},
+	computed: {
+		tabs() {
+			return [
+				{ 'index': 0, 'name': this.$i18n.t('classInteraction') },
+				{ 'index': 1, 'name': this.$i18n.t('notification') }
+			]
+		}
+	},
 	onReady() {},
 	mounted() {
-		// let now = new Date()
-		// let ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(now)
-		// let mo = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(now)
-		// this.currentDate = `${ye}${mo}` /// 202201
-
-		let now = new Date();
-		var year = now.getFullYear();
-		var month = now.getMonth() + 1;
-		this.currentDate = `${year}${month}`; /// 202201
-		console.log(this.currentDate);
-
-		this.getClassSchedule();
 	},
 	methods: {
-		async getClassSchedule() {
-			Api.classSchedule(this.currentDate).then(res => {
-				console.log(res);
-			});
-		},
-		previousBtnDidClick() {
-			console.log('previousBtnDidClick');
-		},
-		nextBtnDidClick() {
-			console.log('nextBtnDidClick');
-		},
-		change(e) {
-			console.log(e);
-		},
-		uploadAction() {
-			uni.navigateTo({ url: '../test/upload' });
-		},
-		monitoringBtnClick() {
-			uni.navigateTo({
-				url: '../launch/index'
-			});
-		},
-		// 加载数据
-		load(paging) {
-			setTimeout(() => {
-				let list = [];
-				for (var i = 0; i < paging.size; i++) {
-					list.push(i);
-				}
-				this.list = [...this.list, ...list];
-				// 加载成功  参数对象{list: 当前列表,total: 数据总长度(后端查询的total)}
-				this.$refs.list.loadSuccess({ list: this.list, total: 50 });
-				// 加载失败
-				// this.$refs.list.loadFail()
-			}, this.$u.random(100, 1000));
-		},
-		// 刷新刷剧
-		refresh(paging) {
-			setTimeout(() => {
-				let list = [];
-				for (var i = 0; i < paging.size; i++) {
-					list.push(i);
-				}
-				this.list = list;
-				// 刷新成功  参数对象{list: 当前列表,total: 数据总长度(后端查询的total)}
-				this.$refs.list.refreshSuccess({ list: this.list, total: 50 });
-				// 刷新失败
-				// this.$refs.list.refreshFail()
-			}, this.$u.random(100, 1000));
+		tabSelect(e) {
+			this.tabIndex = e.currentTarget.dataset.id
 		}
 	}
 };
 </script>
 
-<style scoped>
-	.hint-box {
-		height: 5px;
-	}
-	.hint-item {
-		margin: 0 5px 0 5px;
+<style lang="scss">
+	.message-page {
+		width: 100%;
+		position: absolute;
+		display: flex;
+		flex-direction: column;
+		height: 100%;
+		.message-content {
+			padding: 0px 0px 120px;
+		}
 	}
-	.hint-icon {
-		width: 8px;
-		height: 8px;
-		border-radius: 50%;
-		margin-right: 5px;
-	}	
-</style>
+	
+</style>

+ 46 - 29
pages/mine/index.vue

@@ -1,48 +1,55 @@
 <template>
 	<view class="mine">
 		
-		<view class="mine-content" style="background:url('/static/login/login_top_backgroud.png') no-repeat; background-size: 100%;">
-			
-			<!-- 用户信息 -->
-			<view class="mine-card cu-card padding radius shadow bg-white">
-				<view class="cu-chat">
-					<view class="cu-avatar xl round" style="background-image:url(https://ossweb-img.qq.com/images/lol/web201310/skin/big99008.jpg);"></view>
-					<text class="text-bold text-xl"> {{ userInfo.name }} </text>
-				</view>
-				<view class="cu-bar justify-around" style="width: 100%;">
-					<view class="cu-bar">
-						<image src="../../static/mine/phone.png" style="width: 20px;height: 20px;"></image>
-						<text class="text-sm"> {{ userInfo.mobile }} </text>
-					</view>
-					<view class="cu-bar">
-						<image src="../../static/mine/email.png" style="width: 20px;height: 20px;"></image>
-						<text class="text-sm"> {{ userInfo.email }} </text>
+		<scroll-list ref="list" :option="option" @refresh="refresh">
+			<view class="mine-content" style="background:url('/static/login/login_top_backgroud.png') no-repeat; background-size: 100%;">
+				
+				<!-- 用户信息 -->
+				<view class="mine-card cu-card padding radius shadow bg-white">
+					<view class="cu-chat">
+						<view class="cu-avatar xl round" style="background-image:url(https://ossweb-img.qq.com/images/lol/web201310/skin/big99008.jpg);"></view>
+						<text class="text-bold text-xl"> {{ userInfo.name }} </text>
 					</view>
-				</view>
-			</view>
-			
-			<view v-for="(section,i) in mineItems" :key="i">
-				<u-gap height="15"/>
-				<view class="cu-card padding radius shadow bg-white">
-					<view class="cu-bar justify-between align-center" v-for="(item,index) in section" :key="index" @click="itemDidClick(item)">
+					<view class="cu-bar justify-around" style="width: 100%;">
 						<view class="cu-bar">
-							<image :src="item.image" style="width: 30px;height: 30px;"></image>
-							<text class="text-bold padding-sm"> {{ $t(item.title) }} </text>
+							<image src="../../static/mine/phone.png" style="width: 20px;height: 20px;"></image>
+							<text class="text-sm"> {{ userInfo.mobile }} </text>
+						</view>
+						<view class="cu-bar">
+							<image src="../../static/mine/email.png" style="width: 20px;height: 20px;"></image>
+							<text class="text-sm"> {{ userInfo.email }} </text>
 						</view>
-						<text v-if="item.detail"> {{ item.detail }} </text>
-						<text v-else class="lg text-gray cuIcon-right"></text>
 					</view>
 				</view>
-			</view>		
-		</view>
+				
+				<view v-for="(section,i) in mineItems" :key="i">
+					<u-gap height="15"/>
+					<view class="cu-card padding radius shadow bg-white">
+						<view class="cu-bar justify-between align-center" v-for="(item,index) in section" :key="index" @click="itemDidClick(item)">
+							<view class="cu-bar">
+								<image :src="item.image" style="width: 30px;height: 30px;"></image>
+								<text class="text-bold padding-sm"> {{ $t(item.title) }} </text>
+							</view>
+							<text v-if="item.detail"> {{ item.detail }} </text>
+							<text v-else class="lg text-gray cuIcon-right"></text>
+						</view>
+					</view>
+				</view>		
+			</view>
+			<view slot="empty" />
+		</scroll-list>
 	</view>
 </template>
 
 <script>
 	import { mapState, mapMutations } from 'vuex'  
+	import Api from '../../api/api.js'
 	export default {
 		data() {
 			return {
+				option: {
+					loadDisabled: true,
+				},
 				mineItems: [
 					[
 						{'image': '/static/mine/city.png','title': 'city','detail': '成都', 'url': ''},
@@ -74,6 +81,16 @@
 				uni.navigateTo({
 					url: item.url
 				})
+			},
+			async refresh(e) {
+				console.log('fuck')
+				Api.userInfo().then( res => {
+					if (res.code != 200) return
+					/// 合并登录信息,并重新储存到 userInfo
+					var newInfo = Object.assign(this.userInfo, res.data)
+					this.$store.commit('setUserInfo', newInfo)
+					this.$refs.list.refreshSuccess({ list: [], total: 0})
+				})
 			}
 		},
 	}

+ 1 - 1
pages/mine/setting.vue

@@ -35,7 +35,7 @@
 					],
 					[
 						{'index': 5, 'image': '/static/mine/logout.png','title': 'logOut', 'url': '../login/index'},
-					],
+					]
 				]
 			};
 		},

File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/htz-image-upload/htz-image-upload.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/scroll-list/scroll-list.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-calendar/uni-calendar-item.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-calendar/uni-calendar.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/calendar/course_item.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/calendar/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/launch/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/launch/screen.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/lesson/lesson_detail.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/lesson/lesson_detail_item.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/login/env_page.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/login/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/message/class_interaction_page.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/message/classroom_item.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/message/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/setting.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/test/livetest.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/test/upload.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u--input/u--input.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-badge/u-badge.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-button/u-button.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-gap/u-gap.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-icon/u-icon.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-input/u-input.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-navbar/u-navbar.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-status-bar/u-status-bar.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-tabbar/u-tabbar.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-tabs/u-tabs.js.map


+ 1 - 1
unpackage/dist/dev/app-plus/app-config-service.js

@@ -1,7 +1,7 @@
 
 var isReady=false;var onReadyCallbacks=[];
 var isServiceReady=false;var onServiceReadyCallbacks=[];
-var __uniConfig = {"pages":["pages/launch/index","pages/login/index","pages/index/index","pages/login/env_page","pages/mine/setting","pages/test/upload","pages/test/livetest","pages/lesson/lesson_detail"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"uni-app","navigationBarBackgroundColor":"#F8F8F8","backgroundColor":"#F8F8F8","enablePullDownRefresh":false},"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":false},"appname":"i2School","compilerVersion":"3.3.11","entryPagePath":"pages/launch/index","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}};
+var __uniConfig = {"pages":["pages/launch/index","pages/login/index","pages/index/index","pages/login/env_page","pages/mine/setting","pages/test/upload","pages/test/livetest","pages/lesson/lesson_detail"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"uni-app","navigationBarBackgroundColor":"#F8F8F8","backgroundColor":"#F8F8F8","enablePullDownRefresh":false,"bounce":"none","safearea":{"background":"#CCCCCC","bottom":{"offset":"auto"}}},"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":false},"appname":"i2School","compilerVersion":"3.3.11","entryPagePath":"pages/launch/index","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}};
 var __uniRoutes = [{"path":"/pages/launch/index","meta":{"isQuit":true},"window":{"navigationStyle":"custom"}},{"path":"/pages/login/index","meta":{},"window":{"navigationStyle":"custom"}},{"path":"/pages/index/index","meta":{},"window":{"navigationStyle":"custom"}},{"path":"/pages/login/env_page","meta":{},"window":{"navigationBarTitleText":"开发者工具"}},{"path":"/pages/mine/setting","meta":{},"window":{"navigationBarTitleText":"设置"}},{"path":"/pages/test/upload","meta":{},"window":{"navigationBarTitleText":"上传"}},{"path":"/pages/test/livetest","meta":{},"window":{"navigationBarTitleText":"直播测试","enablePullDownRefresh":false}},{"path":"/pages/lesson/lesson_detail","meta":{},"window":{"navigationBarTitleText":"课堂详情"}}];
 __uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
 __uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});

File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/app-plus/app-service.js


File diff suppressed because it is too large
+ 229 - 152
unpackage/dist/dev/app-plus/app-view.js


BIN
unpackage/dist/dev/app-plus/static/home/arrow_left.png


BIN
unpackage/dist/dev/app-plus/static/home/arrow_right.png


BIN
unpackage/dist/dev/app-plus/static/home/grey_book.png


BIN
unpackage/dist/dev/app-plus/static/home/i2_name.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_dkxy.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_fk.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_js.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_kq.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_nr.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_qx.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_rz.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_select_tag.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_sk.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_sl.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_wr.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_wsk.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_xs.png


BIN
unpackage/dist/dev/app-plus/static/lesson/lesson_zy.png


+ 5 - 2
unpackage/dist/dev/mp-weixin/app.json

@@ -4,7 +4,10 @@
     "pages/login/index",
     "pages/index/index",
     "pages/login/env_page",
-    "pages/mine/setting"
+    "pages/mine/setting",
+    "pages/test/upload",
+    "pages/test/livetest",
+    "pages/lesson/lesson_detail"
   ],
   "subPackages": [],
   "window": {
@@ -12,7 +15,7 @@
     "navigationBarTitleText": "uni-app",
     "navigationBarBackgroundColor": "#F8F8F8",
     "backgroundColor": "#F8F8F8",
-    "enablePullDownRefresh": true
+    "enablePullDownRefresh": false
   },
   "usingComponents": {}
 }

File diff suppressed because it is too large
+ 89 - 37
unpackage/dist/dev/mp-weixin/common/main.js


+ 135 - 8
unpackage/dist/dev/mp-weixin/common/main.wxss

@@ -1759,7 +1759,7 @@ to {
 	display: block;
 }
 .cu-timeline>.cu-item {
-	padding: 30rpx 30rpx 30rpx 120rpx;
+	padding: 20rpx 25rpx 5rpx 70rpx;
 	position: relative;
 	display: block;
 	z-index: 0;
@@ -1773,7 +1773,7 @@ to {
 	position: absolute;
 	width: 1rpx;
 	background-color: #ddd;
-	left: 60rpx;
+	left: 35rpx;
 	height: 100%;
 	top: 0;
 	z-index: 8;
@@ -1782,27 +1782,26 @@ to {
 	font-family: "cuIcon";
 	display: block;
 	position: absolute;
-	top: 36rpx;
+	top: 10rpx;
 	z-index: 9;
-	background-color: #ffffff;
 	width: 50rpx;
 	height: 50rpx;
 	text-align: center;
 	border: none;
 	line-height: 50rpx;
-	left: 36rpx;
+	left: 18rpx;
 }
 .cu-timeline>.cu-item:not([class*="cuIcon-"])::before {
 	content: "\e763";
 }
 .cu-timeline>.cu-item[class*="cuIcon-"]::before {
-	background-color: #ffffff;
+	/* background-color: #ffffff; */
 	width: 50rpx;
 	height: 50rpx;
 	text-align: center;
 	border: none;
 	line-height: 50rpx;
-	left: 36rpx;
+	left: 10rpx;
 }
 .cu-timeline>.cu-item>.content {
 	padding: 30rpx;
@@ -1815,7 +1814,7 @@ to {
 	color: #333333;
 }
 .cu-timeline>.cu-item>.content+.content {
-	margin-top: 20rpx;
+	margin-top: 10rpx;
 }
 /* ==================
          聊天
@@ -4481,3 +4480,131 @@ scroll-view.cu-steps .cu-item {
   background: transparent;
 }
 
+@charset "UTF-8";
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* uni.scss */
+/* 颜色变量 */
+/* 行为相关颜色 */
+/* 文字基本颜色 */
+/* 背景颜色 */
+/* 边框颜色 */
+/* 尺寸变量 */
+/* 文字尺寸 */
+/* 图片尺寸 */
+/* Border Radius */
+/* 水平间距 */
+/* 垂直间距 */
+/* 透明度 */
+/* 文章场景相关 */
+.scroll-list-wrap.data-v-377c9ec2 {
+  box-sizing: border-box;
+}
+.scroll-list-wrap .scroll-view.data-v-377c9ec2 {
+  position: relative;
+}
+.scroll-list-wrap .scroll-view .scroll-content.data-v-377c9ec2 {
+  height: 100%;
+  display: flex;
+  will-change: transform;
+  flex-direction: column;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-down-wrap.data-v-377c9ec2 {
+  left: 0;
+  width: 100%;
+  display: flex;
+  padding: 30rpx 0;
+  position: absolute;
+  align-items: flex-end;
+  justify-content: center;
+  -webkit-transform: translateY(-100%);
+          transform: translateY(-100%);
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-down-wrap .refresh-view.data-v-377c9ec2 {
+  display: flex;
+  justify-content: center;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-down-wrap .refresh-view .pull-down-animation.data-v-377c9ec2 {
+  width: 32rpx;
+  height: 32rpx;
+  border-width: 4rpx;
+  border-style: solid;
+  border-radius: 50%;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-down-wrap .refresh-view .pull-down-animation.refreshing.data-v-377c9ec2 {
+  -webkit-animation: spin-data-v-377c9ec2 0.5s linear infinite;
+          animation: spin-data-v-377c9ec2 0.5s linear infinite;
+}
+@-webkit-keyframes spin-data-v-377c9ec2 {
+to {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+}
+}
+@keyframes spin-data-v-377c9ec2 {
+to {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+}
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-down-wrap .refresh-view .pull-down-text.data-v-377c9ec2 {
+  margin-left: 10rpx;
+}
+.scroll-list-wrap .scroll-view .scroll-content .empty-wrap.data-v-377c9ec2 {
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  position: absolute;
+  align-items: center;
+  flex-direction: column;
+}
+.scroll-list-wrap .scroll-view .scroll-content .empty-wrap .empty-view.data-v-377c9ec2 {
+  margin: auto;
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+}
+.scroll-list-wrap .scroll-view .scroll-content .empty-wrap .empty-view .empty-image.data-v-377c9ec2 {
+  width: 200rpx;
+  height: 200rpx;
+}
+.scroll-list-wrap .scroll-view .scroll-content .empty-wrap .empty-view .empty-text.data-v-377c9ec2 {
+  color: #606266;
+  margin-top: 20rpx;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-up-wrap.data-v-377c9ec2 {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-up-wrap .load-view.data-v-377c9ec2 {
+  padding: 20rpx 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-up-wrap .load-view .pull-up-animation.data-v-377c9ec2 {
+  width: 32rpx;
+  height: 32rpx;
+  border-width: 4rpx;
+  border-style: solid;
+  border-radius: 50%;
+  -webkit-animation: spin-data-v-377c9ec2 0.5s linear infinite;
+          animation: spin-data-v-377c9ec2 0.5s linear infinite;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-up-wrap .load-view .pull-up-text.data-v-377c9ec2 {
+  margin-left: 10rpx;
+}
+

File diff suppressed because it is too large
+ 1 - 2
unpackage/dist/dev/mp-weixin/common/runtime.js


File diff suppressed because it is too large
+ 38 - 21
unpackage/dist/dev/mp-weixin/common/vendor.js


+ 0 - 0
unpackage/dist/dev/mp-weixin/components/colorui/components/cu-custom.json → unpackage/dist/dev/mp-weixin/components/colorui/components/cu-custom.bak.json


File diff suppressed because it is too large
+ 54 - 0
unpackage/dist/dev/mp-weixin/components/htz-image-upload/htz-image-upload.js


+ 4 - 0
unpackage/dist/dev/mp-weixin/components/htz-image-upload/htz-image-upload.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "component": true
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/components/htz-image-upload/htz-image-upload.wxml

@@ -0,0 +1 @@
+<view class="htz-image-upload-list"><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view class="htz-image-upload-Item"><block wx:if="{{!item.g0}}"><view class="htz-image-upload-Item-video"><video disabled="{{false}}" controls="{{false}}" src="{{item.$orig}}"><cover-view data-event-opts="{{[['tap',[['previewVideo',['$0'],[[['uploadLists','',index]]]]]]]}}" class="htz-image-upload-Item-video-fixed" bindtap="__e"></cover-view><block wx:if="{{remove&&previewVideoSrc==''}}"><cover-view data-event-opts="{{[['tap',[['imgDel',[index]]]]]}}" class="htz-image-upload-Item-del-cover" bindtap="__e">×</cover-view></block></video></view></block><block wx:else><image src="{{item.$orig}}" data-event-opts="{{[['tap',[['imgPreview',['$0'],[[['uploadLists','',index]]]]]]]}}" bindtap="__e"></image></block><block wx:if="{{remove}}"><view data-event-opts="{{[['tap',[['imgDel',[index]]]]]}}" class="htz-image-upload-Item-del" bindtap="__e">×</view></block></view></block><block wx:if="{{uploadLists.length<max&&add}}"><view data-event-opts="{{[['tap',[['chooseFile',['$event']]]]]}}" class="htz-image-upload-Item htz-image-upload-Item-add" bindtap="__e">+</view></block><block wx:if="{{previewVideoSrc!=''}}"><view class="preview-full"><video autoplay="{{true}}" src="{{previewVideoSrc}}" show-fullscreen-btn="{{false}}"><cover-view data-event-opts="{{[['tap',[['previewVideoClose',['$event']]]]]}}" class="preview-full-close" bindtap="__e">×</cover-view></video></view></block></view>

+ 145 - 0
unpackage/dist/dev/mp-weixin/components/htz-image-upload/htz-image-upload.wxss

@@ -0,0 +1,145 @@
+
+.ceshi {
+	width: 100%;
+	height: 100%;
+	position: relative;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	right: 0;
+	background-color: #FFFFFF;
+	color: #2C405A;
+	opacity: 0.5;
+	z-index: 100;
+}
+
+
+.preview-full {
+	position: fixed;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	width: 100%;
+	height: 100%;
+	z-index: 1002;
+}
+.preview-full video {
+	width: 100%;
+	height: 100%;
+	z-index: 1002;
+}
+.preview-full-close {
+	position: fixed;
+	right: 32rpx;
+	top: 25rpx;
+	width: 80rpx;
+	height: 80rpx;
+	line-height: 60rpx;
+	text-align: center;
+	z-index: 1003;
+	/* 	background-color: #808080; */
+	color: #fff;
+	font-size: 65rpx;
+	font-weight: bold;
+	text-shadow: 1px 2px 5px rgb(0 0 0);
+}
+
+/* .preview-full-close-before,
+.preview-full-close-after {
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	content: '';
+	height: 60rpx;
+	margin-top: -30rpx;
+	width: 6rpx;
+	margin-left: -3rpx;
+	background-color: #FFFFFF;
+	z-index: 20000;
+}
+
+.preview-full-close-before {
+	transform: rotate(45deg);
+
+}
+
+.preview-full-close-after {
+	transform: rotate(-45deg);
+
+} */
+.htz-image-upload-list {
+	display: flex;
+	flex-wrap: wrap;
+}
+.htz-image-upload-Item {
+	width: 160rpx;
+	height: 160rpx;
+	margin: 13rpx;
+	border-radius: 10rpx;
+	position: relative;
+}
+.htz-image-upload-Item image {
+	width: 100%;
+	height: 100%;
+	border-radius: 10rpx;
+}
+.htz-image-upload-Item-video {
+	width: 100%;
+	height: 100%;
+	border-radius: 10rpx;
+	position: relative;
+}
+.htz-image-upload-Item-video-fixed {
+	position: absolute;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	width: 100%;
+	height: 100%;
+	border-radius: 10rpx;
+	z-index: 996;
+}
+.htz-image-upload-Item video {
+	width: 100%;
+	height: 100%;
+	border-radius: 10rpx;
+}
+.htz-image-upload-Item-add {
+	font-size: 105rpx;
+	/* line-height: 160rpx; */
+	text-align: center;
+	border: 1px dashed #d9d9d9;
+	color: #d9d9d9;
+}
+.htz-image-upload-Item-del {
+	background-color: #f5222d;
+	font-size: 24rpx;
+	position: absolute;
+	width: 35rpx;
+	height: 35rpx;
+	line-height: 35rpx;
+	text-align: center;
+	top: 0;
+	right: 0;
+	z-index: 997;
+	color: #fff;
+}
+.htz-image-upload-Item-del-cover {
+	background-color: #f5222d;
+	font-size: 24rpx;
+	position: absolute;
+	width: 35rpx;
+	height: 35rpx;
+	text-align: center;
+	top: 0;
+	right: 0;
+	color: #fff;
+
+
+
+
+	line-height: 35rpx;
+
+	z-index: 997;
+}
+

+ 0 - 1
unpackage/dist/dev/mp-weixin/components/ren-calendar/ren-calendar.wxml

@@ -1 +0,0 @@
-<view class="calendar-wrapper data-v-2e42c8f8"><block wx:if="{{headerBar}}"><view class="header data-v-2e42c8f8"><view data-event-opts="{{[['tap',[['changeMonth',['pre']]]]]}}" class="pre data-v-2e42c8f8" bindtap="__e">上个月</view><view class="data-v-2e42c8f8">{{y+'年'+$root.m0+'月'}}</view><view data-event-opts="{{[['tap',[['changeMonth',['next']]]]]}}" class="next data-v-2e42c8f8" bindtap="__e">下个月</view></view></block><view class="week data-v-2e42c8f8"><block wx:for="{{weekDay}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view class="week-day data-v-2e42c8f8">{{item}}</view></block></view><view class="{{['content','data-v-2e42c8f8',(!monthOpen)?'hide':'']}}" style="{{'height:'+(height)+';'}}"><view class="days data-v-2e42c8f8" style="{{'top:'+(positionTop+'rpx')+';'}}"><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view class="item data-v-2e42c8f8"><view data-event-opts="{{[['tap',[['selectOne',['$0','$event'],[[['dates','',index]]]]]]]}}" class="{{['day','data-v-2e42c8f8',(choose==item.$orig.year+'-'+item.$orig.month+'-'+item.$orig.date&&item.$orig.isCurM)?'choose':'',(!item.$orig.isCurM)?'nolm':'',(item.m1)?'today':'',(item.m2)?'isWorkDay':'']}}" bindtap="__e">{{''+item.m3+''}}</view><block wx:if="{{item.m4}}"><view class="markDay data-v-2e42c8f8"></view></block></view></block></view></view><block wx:if="{{collapsible}}"><image class="{{['weektoggle','data-v-2e42c8f8',(monthOpen)?'down':'']}}" src="https://i.loli.net/2020/07/16/2MmZsucVTlRjSwK.png" mode="scaleToFill" data-event-opts="{{[['tap',[['toggle',['$event']]]]]}}" bindtap="__e"></image></block></view>

+ 0 - 160
unpackage/dist/dev/mp-weixin/components/ren-calendar/ren-calendar.wxss

@@ -1,160 +0,0 @@
-@charset "UTF-8";
-/**
- * 这里是uni-app内置的常用样式变量
- *
- * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
- * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
- *
- */
-/**
- * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
- *
- * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
- */
-/* uni.scss */
-/* 颜色变量 */
-/* 行为相关颜色 */
-/* 文字基本颜色 */
-/* 背景颜色 */
-/* 边框颜色 */
-/* 尺寸变量 */
-/* 文字尺寸 */
-/* 图片尺寸 */
-/* Border Radius */
-/* 水平间距 */
-/* 垂直间距 */
-/* 透明度 */
-/* 文章场景相关 */
-.calendar-wrapper.data-v-2e42c8f8 {
-  color: #bbb7b7;
-  font-size: 28rpx;
-  text-align: center;
-  background-color: #fff;
-  padding-bottom: 10rpx;
-}
-.calendar-wrapper .header.data-v-2e42c8f8 {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  color: #42464A;
-  font-size: 32rpx;
-  font-weight: bold;
-  border-bottom: 2rpx solid #f2f2f2;
-}
-.calendar-wrapper .header .pre.data-v-2e42c8f8, .calendar-wrapper .header .next.data-v-2e42c8f8 {
-  color: #4d7df9;
-  font-size: 28rpx;
-  font-weight: normal;
-  padding: 8rpx 15rpx;
-  border-radius: 10rpx;
-  border: 2rpx solid #dcdfe6;
-}
-.calendar-wrapper .header .pre.data-v-2e42c8f8 {
-  margin-right: 30rpx;
-}
-.calendar-wrapper .header .next.data-v-2e42c8f8 {
-  margin-left: 30rpx;
-}
-.calendar-wrapper .week.data-v-2e42c8f8 {
-  display: flex;
-  align-items: center;
-  height: 80rpx;
-  line-height: 80rpx;
-  border-bottom: 1rpx solid rgba(255, 255, 255, 0.2);
-}
-.calendar-wrapper .week view.data-v-2e42c8f8 {
-  flex: 1;
-}
-.calendar-wrapper .content.data-v-2e42c8f8 {
-  position: relative;
-  overflow: hidden;
-  transition: height 0.4s ease;
-}
-.calendar-wrapper .content .days.data-v-2e42c8f8 {
-  transition: top 0.3s;
-  display: flex;
-  align-items: center;
-  flex-wrap: wrap;
-  position: relative;
-}
-.calendar-wrapper .content .days .item.data-v-2e42c8f8 {
-  position: relative;
-  display: block;
-  height: 80rpx;
-  line-height: 80rpx;
-  width: calc(100% / 7);
-}
-.calendar-wrapper .content .days .item .day.data-v-2e42c8f8 {
-  font-style: normal;
-  display: inline-block;
-  vertical-align: middle;
-  width: 60rpx;
-  height: 60rpx;
-  line-height: 60rpx;
-  overflow: hidden;
-  border-radius: 60rpx;
-}
-.calendar-wrapper .content .days .item .day.choose.data-v-2e42c8f8 {
-  background-color: #4d7df9;
-  color: #fff;
-}
-.calendar-wrapper .content .days .item .day.nolm.data-v-2e42c8f8 {
-  color: #fff;
-  opacity: 0.3;
-}
-.calendar-wrapper .content .days .item .isWorkDay.data-v-2e42c8f8 {
-  color: #42464a;
-}
-.calendar-wrapper .content .days .item .notSigned.data-v-2e42c8f8 {
-  font-style: normal;
-  width: 8rpx;
-  height: 8rpx;
-  background: #fa7268;
-  border-radius: 10rpx;
-  position: absolute;
-  left: 50%;
-  bottom: 0;
-  pointer-events: none;
-}
-.calendar-wrapper .content .days .item .today.data-v-2e42c8f8 {
-  color: #fff;
-  background-color: #a8c0ff;
-}
-.calendar-wrapper .content .days .item .workDay.data-v-2e42c8f8 {
-  font-style: normal;
-  width: 8rpx;
-  height: 8rpx;
-  background: #4d7df9;
-  border-radius: 10rpx;
-  position: absolute;
-  left: 50%;
-  bottom: 0;
-  pointer-events: none;
-}
-.calendar-wrapper .content .days .item .markDay.data-v-2e42c8f8 {
-  font-style: normal;
-  width: 8rpx;
-  height: 8rpx;
-  background: #fc7a64;
-  border-radius: 10rpx;
-  position: absolute;
-  left: 50%;
-  bottom: 0;
-  pointer-events: none;
-}
-.calendar-wrapper .hide.data-v-2e42c8f8 {
-  height: 80rpx !important;
-}
-.calendar-wrapper .weektoggle.data-v-2e42c8f8 {
-  width: 85rpx;
-  height: 32rpx;
-  position: relative;
-  bottom: -42rpx;
-}
-.calendar-wrapper .weektoggle.down.data-v-2e42c8f8 {
-  -webkit-transform: rotate(180deg);
-          transform: rotate(180deg);
-  bottom: 0;
-}
-

File diff suppressed because it is too large
+ 67 - 0
unpackage/dist/dev/mp-weixin/components/scroll-list/scroll-list.js


+ 4 - 0
unpackage/dist/dev/mp-weixin/components/scroll-list/scroll-list.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "component": true
+}

File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/mp-weixin/components/scroll-list/scroll-list.wxml


+ 128 - 0
unpackage/dist/dev/mp-weixin/components/scroll-list/scroll-list.wxss

@@ -0,0 +1,128 @@
+@charset "UTF-8";
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* uni.scss */
+/* 颜色变量 */
+/* 行为相关颜色 */
+/* 文字基本颜色 */
+/* 背景颜色 */
+/* 边框颜色 */
+/* 尺寸变量 */
+/* 文字尺寸 */
+/* 图片尺寸 */
+/* Border Radius */
+/* 水平间距 */
+/* 垂直间距 */
+/* 透明度 */
+/* 文章场景相关 */
+.scroll-list-wrap.data-v-377c9ec2 {
+  box-sizing: border-box;
+}
+.scroll-list-wrap .scroll-view.data-v-377c9ec2 {
+  position: relative;
+}
+.scroll-list-wrap .scroll-view .scroll-content.data-v-377c9ec2 {
+  height: 100%;
+  display: flex;
+  will-change: transform;
+  flex-direction: column;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-down-wrap.data-v-377c9ec2 {
+  left: 0;
+  width: 100%;
+  display: flex;
+  padding: 30rpx 0;
+  position: absolute;
+  align-items: flex-end;
+  justify-content: center;
+  -webkit-transform: translateY(-100%);
+          transform: translateY(-100%);
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-down-wrap .refresh-view.data-v-377c9ec2 {
+  display: flex;
+  justify-content: center;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-down-wrap .refresh-view .pull-down-animation.data-v-377c9ec2 {
+  width: 32rpx;
+  height: 32rpx;
+  border-width: 4rpx;
+  border-style: solid;
+  border-radius: 50%;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-down-wrap .refresh-view .pull-down-animation.refreshing.data-v-377c9ec2 {
+  -webkit-animation: spin-data-v-377c9ec2 0.5s linear infinite;
+          animation: spin-data-v-377c9ec2 0.5s linear infinite;
+}
+@-webkit-keyframes spin-data-v-377c9ec2 {
+to {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+}
+}
+@keyframes spin-data-v-377c9ec2 {
+to {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+}
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-down-wrap .refresh-view .pull-down-text.data-v-377c9ec2 {
+  margin-left: 10rpx;
+}
+.scroll-list-wrap .scroll-view .scroll-content .empty-wrap.data-v-377c9ec2 {
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  position: absolute;
+  align-items: center;
+  flex-direction: column;
+}
+.scroll-list-wrap .scroll-view .scroll-content .empty-wrap .empty-view.data-v-377c9ec2 {
+  margin: auto;
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+}
+.scroll-list-wrap .scroll-view .scroll-content .empty-wrap .empty-view .empty-image.data-v-377c9ec2 {
+  width: 200rpx;
+  height: 200rpx;
+}
+.scroll-list-wrap .scroll-view .scroll-content .empty-wrap .empty-view .empty-text.data-v-377c9ec2 {
+  color: #606266;
+  margin-top: 20rpx;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-up-wrap.data-v-377c9ec2 {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-up-wrap .load-view.data-v-377c9ec2 {
+  padding: 20rpx 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-up-wrap .load-view .pull-up-animation.data-v-377c9ec2 {
+  width: 32rpx;
+  height: 32rpx;
+  border-width: 4rpx;
+  border-style: solid;
+  border-radius: 50%;
+  -webkit-animation: spin-data-v-377c9ec2 0.5s linear infinite;
+          animation: spin-data-v-377c9ec2 0.5s linear infinite;
+}
+.scroll-list-wrap .scroll-view .scroll-content .pull-up-wrap .load-view .pull-up-text.data-v-377c9ec2 {
+  margin-left: 10rpx;
+}
+

File diff suppressed because it is too large
+ 11 - 11
unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar-item.js


+ 2 - 2
unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar-item.json

@@ -1,4 +1,4 @@
 {
-  "component": true,
-  "usingComponents": {}
+  "usingComponents": {},
+  "component": true
 }

File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar-item.wxml


+ 26 - 5
unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar-item.wxss

@@ -40,6 +40,19 @@
   font-size: 12px;
   color: #333;
 }
+.uni-calendar-item__weeks-lunar-box.data-v-09f1e40c {
+  position: relative;
+}
+.uni-calendar-item__weeks-lunar-box-image.data-v-09f1e40c {
+  width: 25px;
+  height: 15px;
+}
+.uni-calendar-item__weeks-lunar-box-text.data-v-09f1e40c {
+  position: absolute;
+  right: 0;
+  font-size: 12px;
+  color: #fff;
+}
 .uni-calendar-item__weeks-box-item.data-v-09f1e40c {
   position: relative;
   display: flex;
@@ -63,10 +76,10 @@
   color: #c0c0c0;
 }
 .uni-calendar-item--isDay-text.data-v-09f1e40c {
-  color: #007aff;
+  color: red;
 }
 .uni-calendar-item--isDay.data-v-09f1e40c {
-  background-color: #007aff;
+  background-color: red;
   opacity: 0.8;
   color: #fff;
 }
@@ -75,12 +88,20 @@
   opacity: 0.8;
 }
 .uni-calendar-item--checked.data-v-09f1e40c {
-  background-color: #007aff;
+  background-color: red;
   color: #fff;
-  opacity: 0.8;
+  opacity: 0.6;
+}
+.uni-calendar-item--checked-box.data-v-09f1e40c {
+  border-radius: 50%;
+  background-color: #efebe9;
+}
+.uni-calendar-item--checked-text.data-v-09f1e40c {
+  color: #fff;
+  opacity: 0.6;
 }
 .uni-calendar-item--multiple.data-v-09f1e40c {
-  background-color: #007aff;
+  background-color: red;
   color: #fff;
   opacity: 0.8;
 }

File diff suppressed because it is too large
+ 11 - 11
unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar.wxml


+ 1 - 1
unpackage/dist/dev/mp-weixin/components/uni-calendar/uni-calendar.wxss

@@ -152,7 +152,7 @@
   justify-content: center;
   align-items: center;
   height: 45px;
-  border-bottom-color: #F5F5F5;
+  border-bottom-color: #f5f5f5;
   border-bottom-style: solid;
   border-bottom-width: 1px;
 }

File diff suppressed because it is too large
+ 52 - 0
unpackage/dist/dev/mp-weixin/pages/calendar/course_item.js


+ 6 - 0
unpackage/dist/dev/mp-weixin/pages/calendar/course_item.json

@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "uni-icons": "/uni_modules/uni-icons/components/uni-icons/uni-icons"
+  }
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/calendar/course_item.wxml

@@ -0,0 +1 @@
+<view data-event-opts="{{[['tap',[['lessonItemOnTap',['$event']]]]]}}" class="bg-white lesson-item u-flex-column data-v-0526985f" style="{{'border-left:'+('5px solid '+mainColor)+';'}}" bindtap="__e"><view class="flex justify-between margin-sm data-v-0526985f"><text style="{{'color:'+(mainColor)+';'}}" class="data-v-0526985f">{{startTime+' - '+endTime}}</text><block wx:if="{{lessonStatus}}"><text class="lesson-status text-xs round data-v-0526985f" style="{{'background-color:'+(mainColor)+';'}}">{{lessonStatus}}</text></block></view><text class="margin-sm text-lg data-v-0526985f">{{data.text_book_name||'暂无课本名称'}}</text><view class="flex justify-start align-center margin-sm data-v-0526985f"><uni-icons vue-id="c0a616f2-1" type="location" class="data-v-0526985f" bind:__l="__l"></uni-icons><text class="padding-lr-xs text-sm text-gray data-v-0526985f">{{data.school_address||'暂无地址'}}</text></view><view class="bg-gray margin-sm data-v-0526985f" style="height:1px;"></view><view class="margin-lr-sm padding-bottom-sm flex justify-start align-start data-v-0526985f"><text class="text-gray text-sm data-v-0526985f">学员:</text><block wx:if="{{data.stu_list}}"><view class="flex flex-wrap data-v-0526985f" style="flex:1;"><block wx:for="{{data.stu_list}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view class="margin-lr-sm data-v-0526985f"><text class="text-gray text-sm data-v-0526985f">{{''+item.stu_name+''}}</text></view></block></view></block><block wx:else><text class="text-gray text-sm margin-lr-sm data-v-0526985f">暂无学员</text></block></view></view>

Some files were not shown because too many files changed in this diff