Browse Source

update: 修改git配置

KELECHUAN 2 năm trước cách đây
mục cha
commit
2cfecbfd91
47 tập tin đã thay đổi với 3019 bổ sung0 xóa
  1. BIN
      .vs/slnx.sqlite
  2. BIN
      .vs/teammodelwxapp/v17/.suo
  3. 106 0
      subpkg/datalist/examList.vue
  4. 131 0
      subpkg/datalist/swapList.vue
  5. 128 0
      subpkg/datalist/workList.vue
  6. 286 0
      subpkg/home/classList.vue
  7. 319 0
      subpkg/home/clockStats.vue
  8. 211 0
      subpkg/mine/childInfo.vue
  9. 246 0
      subpkg/mine/parentInfo.vue
  10. 452 0
      subpkg/swap/swapStats.vue
  11. 82 0
      subpkg/work/workStats.vue
  12. 2 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/examList.js
  13. 7 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/examList.json
  14. 1 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/examList.wxml
  15. 118 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/examList.wxss
  16. 2 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/swapList.js
  17. 8 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/swapList.json
  18. 1 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/swapList.wxml
  19. 124 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/swapList.wxss
  20. 2 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/workList.js
  21. 8 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/workList.json
  22. 1 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/workList.wxml
  23. 132 0
      unpackage/dist/dev/mp-weixin/subpkg/datalist/workList.wxss
  24. 2 0
      unpackage/dist/dev/mp-weixin/subpkg/home/classList.js
  25. 7 0
      unpackage/dist/dev/mp-weixin/subpkg/home/classList.json
  26. 1 0
      unpackage/dist/dev/mp-weixin/subpkg/home/classList.wxml
  27. 150 0
      unpackage/dist/dev/mp-weixin/subpkg/home/classList.wxss
  28. 2 0
      unpackage/dist/dev/mp-weixin/subpkg/home/clockStats.js
  29. 9 0
      unpackage/dist/dev/mp-weixin/subpkg/home/clockStats.json
  30. 1 0
      unpackage/dist/dev/mp-weixin/subpkg/home/clockStats.wxml
  31. 75 0
      unpackage/dist/dev/mp-weixin/subpkg/home/clockStats.wxss
  32. 2 0
      unpackage/dist/dev/mp-weixin/subpkg/mine/childInfo.js
  33. 9 0
      unpackage/dist/dev/mp-weixin/subpkg/mine/childInfo.json
  34. 1 0
      unpackage/dist/dev/mp-weixin/subpkg/mine/childInfo.wxml
  35. 95 0
      unpackage/dist/dev/mp-weixin/subpkg/mine/childInfo.wxss
  36. 2 0
      unpackage/dist/dev/mp-weixin/subpkg/mine/parentInfo.js
  37. 8 0
      unpackage/dist/dev/mp-weixin/subpkg/mine/parentInfo.json
  38. 1 0
      unpackage/dist/dev/mp-weixin/subpkg/mine/parentInfo.wxml
  39. 133 0
      unpackage/dist/dev/mp-weixin/subpkg/mine/parentInfo.wxss
  40. 2 0
      unpackage/dist/dev/mp-weixin/subpkg/swap/swapStats.js
  41. 9 0
      unpackage/dist/dev/mp-weixin/subpkg/swap/swapStats.json
  42. 1 0
      unpackage/dist/dev/mp-weixin/subpkg/swap/swapStats.wxml
  43. 88 0
      unpackage/dist/dev/mp-weixin/subpkg/swap/swapStats.wxss
  44. 2 0
      unpackage/dist/dev/mp-weixin/subpkg/work/workStats.js
  45. 8 0
      unpackage/dist/dev/mp-weixin/subpkg/work/workStats.json
  46. 1 0
      unpackage/dist/dev/mp-weixin/subpkg/work/workStats.wxml
  47. 43 0
      unpackage/dist/dev/mp-weixin/subpkg/work/workStats.wxss

BIN
.vs/slnx.sqlite


BIN
.vs/teammodelwxapp/v17/.suo


+ 106 - 0
subpkg/datalist/examList.vue

@@ -0,0 +1,106 @@
+<template>
+	<view class="page-view">
+		<top-return :color="'#FFF'" text="评测列表"></top-return>
+
+		<view class="bg-box2"></view>
+		<!-- 页面标题内容 -->
+		<view class="top-box">
+			<view class="flex-baseline">
+				<view class="info-title" style="margin-left: 0;">{{dayTime.split('月')[0]}}</view>
+				<view class="info-subtitle">月</view>
+				<view class="info-title">{{dayTime.split('月')[1]}}</view>
+				<view class="info-subtitle">日</view>
+				<view class="info-subtitle" style="margin-left: 20rpx;">已完成</view>
+				<view class="info-title">{{value}}%</view>
+			</view>
+			<view class="flex-baseline">
+				<view class="data-subtitle" style="margin-left: 0;">孩子今日共</view>
+				<view class="data-title">{{examData.length}}</view>
+				<view class="data-subtitle">例评测</view>
+			</view>
+		</view>
+		<!-- 卡片内容 -->
+		<view class="card-view">
+			<view class="card-item" v-for="(item,index) in examData" :key="index"
+				@click="navExamReport(index)">
+				<view class="card-title">
+					<view class="t-icon t-icon-examicon"></view>
+					<view class="YS-title" style="font-size: 45rpx;">{{item.examInfo.name}}</view>
+					<view
+						:class="[item.examInfo.progress === 'finish'?'t-icon t-icon-yiwancheng1':'t-icon t-icon-jinhangzhong','state-seal']">
+					</view>
+				</view>
+				<view class="card-info">
+					<view class="flex-row">
+						<view class="tag-fill"
+							:style="{backgroundColor: item.examInfo.progress === 'finish'? '#23b46c': '#ff8caf' }">
+							<view class="tag-text">{{item.examInfo.subjects[0].name}}</view>
+						</view>
+						<view class="tag-fill" style="margin-left: 20rpx;"
+							:style="{backgroundColor: item.examInfo.progress === 'finish'? '#23b46c': '#ff8caf' }">
+							<view class="tag-text">{{item.examInfo.examType.name}}</view>
+						</view>
+					</view>
+					<view class="flex-baseline" style="margin-top: 20rpx;">
+						<view class="info-type">布置老师:</view>
+						<view class="YS-title" style="margin-left: 10rpx;">{{item.examInfo.creatorId}}
+						</view>
+						<view class="info-type" style="margin-left: 20rpx;">截止时间:</view>
+						<view class="YS-title" style="margin-left: 10rpx;">
+							{{$timeStampToTime(item.examInfo.endTime)}}
+						</view>
+					</view>
+				</view>
+				<view class="content-box">
+					<view class="title-box"
+						:style="{backgroundColor: item.examInfo.progress === 'finish'? '#23b46c': '#ff8caf' }">
+						<view class="title-text">{{item.examInfo.papers[0].name}}</view>
+					</view>
+					<view class="content-detail"></view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	export default {
+		computed: {
+			...mapState('m_children', ['examData'])
+		},
+		data() {
+			return {
+				// tabList: [{
+				// 	name: '已完成'
+				// }, {
+				// 	name: '未完成'
+				// }],
+				value: '',
+				dayTime: ''
+			}
+		},
+		onLoad(parameter) {
+			this.value = parameter.value
+			this.dayTime = (new Date()).format('M-d').replace('-', '月')
+		},
+		methods: {
+			navExamReport(index) {
+				uni.navigateTo({
+					url: `/subpkg/datalist/examReport?index=${index}`
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import 'data_pages.scss';
+	@import 'top_info.scss';
+	.tag-fill {
+		background-color: $color-pink;
+	}
+</style>

+ 131 - 0
subpkg/datalist/swapList.vue

@@ -0,0 +1,131 @@
+<template>
+	<view class="page-view">
+		<top-return :color="'#FFF'" text="活动列表"></top-return>
+
+		<view class="bg-box2"></view>
+
+		<!-- 页面标题内容 -->
+		<view class="top-box">
+			<view class="flex-baseline">
+				<view class="info-title" style="margin-left: 0;">{{dayTime.split('月')[0]}}</view>
+				<view class="info-subtitle">月</view>
+				<view class="info-title">{{dayTime.split('月')[1]}}</view>
+				<view class="info-subtitle">日</view>
+				<view class="info-subtitle" style="margin-left: 20rpx;">已完成</view>
+				<view class="info-title">{{value}}%</view>
+			</view>
+			<view class="flex-baseline">
+				<view class="data-subtitle" style="margin-left: 0;">当前共</view>
+				<view class="data-title">{{swapData.length}}</view>
+				<view class="data-subtitle">场活动</view>
+			</view>
+		</view>
+
+		<view class="card-view">
+			<view class="card-item" v-for="(item,index) in swapData" :key="index" @click="navSwapReport(index)">
+				<view class="card-title">
+					<view class="t-icon t-icon-swapfont"></view>
+					<view class="YS-title" style="font-size: 45rpx;">{{item.survey.name||item.vote.name}}</view>
+					<view
+						:class="[item.survey.progress === 'finish'||item.vote.progress === 'finish'?'t-icon t-icon-yiwancheng1':'t-icon t-icon-jinhangzhong-copy','state-seal']"
+						style="width: 55px;height: 55px;margin-left: auto;margin-right: -20rpx;"></view>
+				</view>
+				<view class="card-info">
+					<view class="flex-baseline">
+						<view class="info-type">布置老师:</view>
+						<view class="YS-title" style="margin-left: 10rpx;">
+							{{item.survey.creatorId||item.vote.creatorId}}</view>
+						<view class="info-type" style="margin-left: 20rpx;">截至时间:</view>
+						<view class="YS-title" style="margin-left: 10rpx;" v-if="item.survey">
+							{{$timeStampToTime(item.survey.endTime)}}</view>
+						<view class="YS-title" style="margin-left: 10rpx;" v-if="item.vote">
+							{{$timeStampToTime(item.vote.endTime)}}</view>
+					</view>
+					<view class="flex-row" style="margin-top: 20rpx;">
+						<u-parse class="YS-title" style="font-size: 30rpx;"
+							:content="item.survey.description||item.vote.description" :selectable="true"></u-parse>
+					</view>
+				</view>
+				<!-- 正文 -->
+				<view class="content-box">
+					<!-- 问卷 -->
+					<view class="title-box"
+						:style="{backgroundColor: item.survey.progress === 'finish'? '#23b46c': '#FF6D31' }"
+						v-if="item.survey">
+						<view class="title-text">问卷详情</view>
+					</view>
+					<view class="flex-row" style="justify-content: space-around;">
+						<view class="option-box"
+							:style="{backgroundColor: item.survey.progress === 'finish'? '#23b46c': '#FF6D31' }"
+							v-for="(option,i) in item.survey.answers[0]" :key="i">
+							<view class="content-subtitle">{{option}}</view>
+						</view>
+					</view>
+					<!-- 投票 -->
+					<view class="title-box"
+						:style="{backgroundColor: item.vote.progress === 'finish'? '#23b46c': '#FF6D31' }"
+						v-if="item.vote">
+						<view class="title-text">{{item.vote.secret ? '匿名投票':'普通投票'}}</view>
+					</view>
+					<view class="flex-row" style="justify-content: space-around;">
+						<view class="flex-column" style="align-items: center;" v-for="(option,j) in item.vote.options"
+							:key="j">
+							<u-parse class="title" style="font-size: 30rpx;margin-bottom: 15rpx;"
+								:content="option.value"></u-parse>
+							<view class="option-box"
+								:style="{backgroundColor: item.vote.progress === 'finish'? '#23b46c': '#FF6D31' }">
+								<view class="content-subtitle">{{option.code}}</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	export default {
+		computed: {
+			...mapState('m_children', ['swapData'])
+		},
+		data() {
+			return {
+				value: '',
+				dayTime: ''
+			}
+		},
+		onLoad(parameter) {
+			this.value = parameter.value
+			this.dayTime = (new Date()).format('M-d').replace('-', '月')
+		},
+		methods: {
+			fixNum(num) {
+				return num.toFixed(2)
+			},
+			navSwapReport(index) {
+				uni.navigateTo({
+					url: `/subpkg/datalist/swapReport?index=${index}`
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import 'data_pages.scss';
+	@import 'top_info.scss';
+	.option-box {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 120rpx;
+		height: 50rpx;
+		border-radius: 10rpx;
+		padding: 5rpx;
+	}
+</style>

+ 128 - 0
subpkg/datalist/workList.vue

@@ -0,0 +1,128 @@
+<template>
+	<view class="page-view">
+		<top-return :color="'#FFF'" text="作业列表"></top-return>
+
+		<view class="bg-box2"></view>
+
+		<!-- 页面标题内容 -->
+		<view class="top-box">
+			<view class="flex-baseline">
+				<view class="info-title" style="margin-left: 0;">{{dayTime.split('月')[0]}}</view>
+				<view class="info-subtitle">月</view>
+				<view class="info-title">{{dayTime.split('月')[1]}}</view>
+				<view class="info-subtitle">日</view>
+				<view class="info-subtitle" style="margin-left: 20rpx;">已完成</view>
+				<view class="info-title">{{value}}%</view>
+			</view>
+			<view class="flex-baseline">
+				<view class="data-subtitle" style="margin-left: 0;">孩子今日共</view>
+				<view class="data-title">{{workData.length}}</view>
+				<view class="data-subtitle">份作业</view>
+			</view>
+		</view>
+
+		<view class="card-view">
+			<view class="card-item" v-for="(item,index) in workData" :key="index" @click="navWorkReport(index)">
+				<view class="card-title">
+					<view class="t-icon t-icon-workicon">
+					</view>
+					<view class="YS-title" style="font-size: 45rpx;">{{item.work.name}}</view>
+					<view
+						:class="[item.work.progress === 'finish'?'t-icon t-icon-yiwancheng1':'t-icon t-icon-jinhangzhong-copy1','state-seal']">
+					</view>
+				</view>
+				<view class="card-info">
+					<view class="flex-baseline">
+						<view class="info-type">布置老师:</view>
+						<view class="YS-title" style="margin-left: 10rpx;">{{item.work.creatorId}}</view>
+						<view class="info-type" style="margin-left: 20rpx;">截止时间:</view>
+						<view class="YS-title" style="margin-left: 10rpx;">
+							{{$timeStampToTime(item.work.endTime)}}
+						</view>
+					</view>
+					<view class="flex-row" style="margin-top: 20rpx;">
+						<u-parse class="YS-title" style="font-size: 30rpx;" :content="item.work.description"
+							:selectable="true"></u-parse>
+					</view>
+				</view>
+				<!-- 正文 -->
+				<view class="content-box">
+					<view class="title-box"
+						:style="{backgroundColor: item.work.progress === 'finish'? '#23b46c': '#f9c752' }">
+						<view class="title-text">作业附件</view>
+					</view>
+					<view v-for="(attachment,i) in item.work.attachments" :key="i">
+						<view class="attachment-box">
+							<view v-if="attachment.type == 'word'" class="t-icon t-icon-WORD"></view>
+							<view v-if="attachment.type == 'excel'" class="t-icon t-icon-ECEL"></view>
+							<view v-if="attachment.type == 'pdf'" class="t-icon t-icon-PDF"></view>
+							<view v-if="attachment.type == 'image'" class="t-icon t-icon-tupianziliao"></view>
+							<view v-if="attachment.type == 'ppt'" class="t-icon t-icon-PPT"></view>
+							<view class="attachment-info" style="margin-left: 20rpx;">
+								<view class="content-detail">文件名: {{attachment.name}}</view>
+								<view class="content-subtitle">文件大小: {{fixNum(attachment.size/8/1024)}}KB</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	export default {
+		computed: {
+			...mapState('m_children', ['workData'])
+		},
+		data() {
+			return {
+				value: '',
+				dayTime: ''
+			}
+		},
+		onLoad(parameter) {
+			this.value = parameter.value
+			this.dayTime = (new Date()).format('M-d').replace('-', '月')
+		},
+		methods: {
+			fixNum(num) {
+				return num.toFixed(2)
+			},
+			navWorkReport(index) {
+				uni.navigateTo({
+					url: `/subpkg/datalist/workReport?index=${index}`
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import 'data_pages.scss';
+	@import 'top_info.scss';
+
+	.attachment-box {
+		display: flex;
+		margin-bottom: 20rpx;
+		align-items: center;
+		padding: 6rpx 20rpx;
+		background-color: #FFF;
+		border-radius: 10rpx;
+
+		.t-icon {
+			width: 60rpx;
+			height: 60rpx;
+		}
+
+		.attachment-info {
+			display: flex;
+			flex-direction: column;
+			margin: 20rpx 50rpx;
+		}
+	}
+</style>

+ 286 - 0
subpkg/home/classList.vue

@@ -0,0 +1,286 @@
+<template>
+	<view class="page-view">
+		<top-return color="#FFF" text="课程详情"></top-return>
+		<!-- 背景 -->
+		<view class="bg-box2"></view>
+		<!-- 页面标题内容 -->
+		<view class="top-box">
+			<view class="flex-baseline">
+				<view class="info-title" style="margin-left: 0;">{{dayTime.split('月')[0]}}</view>
+				<view class="info-subtitle">月</view>
+				<view class="info-title">{{dayTime.split('月')[1]}}
+				</view>
+				<view class="info-subtitle">日</view>
+				<view class="info-title" style="margin-left: 20rpx;">{{weekTime}}</view>
+			</view>
+			<view class="flex-baseline">
+				<view class="data-subtitle" style="margin-left: 0;">孩子今日共</view>
+				<view class="data-title">
+					{{classList.length}}
+				</view>
+				<view class="data-subtitle">节课程</view>
+			</view>
+		</view>
+		<!-- 天数选择 -->
+		<scroll-view class="week-view" scroll-x="true">
+			<view style="margin-top:20rpx;">
+				<view v-for="(item,index) in weekList" :key="index"
+					:class="isactive == index ? 'week-item-select' : 'week-item' " @click='chooseDay(index,item)'>
+					<view class="item-box">
+						<view class="item-title">{{item.weekNum}}</view>
+						<view class="item-day">{{item.dayNum}}</view>
+						<view class="tag-fill" v-if="isactive == index">
+							<view class="tag-text" v-if="isactive == index && currentClassList.length != 0">
+								{{currentClassList.length}} 节课
+							</view>
+							<view class="tag-text" v-if="isactive == index && currentClassList.length === 0">无课程</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+
+		<!-- 课程表 -->
+		<view class="card-view">
+			<view class="card-item" style="width: 100%;">
+				<view class="card-title">
+					<view class="front-tag"></view>
+					<view class="title">{{weekList[isactive].weekNum}}课程表</view>
+				</view>
+				<view class="class-list">
+					<view class="class-item"
+						:style="{borderImage: index == current&& isactive == 0?'linear-gradient(to right, #4169E1, #FFF) 1': none}"
+						v-for="(item,index) in currentClassList" :key="index">
+						<view class="flex-row" style="justify-content: space-around;">
+							<view class="t-icon t-icon-shuji2"></view>
+							<view class="item-title"
+								:style="{color: index == current && isactive == 0?'#4169E1':'#303133'}">{{item.name}}
+							</view>
+							<view class="tag" style="margin: 0;">
+								<view class="tag-text">{{item.teacher}}</view>
+							</view>
+							<view class="item-subtitle"
+								:style="{color: index == current && isactive == 0?'#4169E1':'#909399',fontSize: 24 + 'rpx'}">
+								{{index == current && isactive == 0?'课程进行中':item.timeFrame}}</view>
+							<view class="item-title"
+								:style="{color: index == current && isactive == 0?'#4169E1':'#303133'}">{{item.time}}
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="image-box" v-if="!currentClassList">
+					<view class="detail-image1" :style="{backgroundImage:`url(${image1})`}"></view>
+					<view class="subtitle">当前选中日期孩子暂无课程</view>
+					<view class="subtitle" style="margin-top: 20rpx;">注意劳逸结合</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import MockData from '@/common/global_js/MockData.js'
+	import {
+		mapState
+	} from 'vuex'
+	export default {
+		computed: {
+			...mapState('m_children', ['classList'])
+		},
+		data() {
+			return {
+				dayTime: '',
+				weekTime: '',
+				isactive: 0,
+				weekList: [{
+					weekNum: '',
+					dayNum: '',
+				}, {
+					weekNum: '',
+					dayNum: '',
+				}, {
+					weekNum: '',
+					dayNum: '',
+				}, {
+					weekNum: '',
+					dayNum: '',
+				}, {
+					weekNum: '',
+					dayNum: '',
+				}, {
+					weekNum: '',
+					dayNum: '',
+				}, {
+					weekNum: '',
+					dayNum: '',
+				}],
+				currentClassList: '',
+				weekClassData: MockData.classData,
+				image1: 'https://ouch-cdn2.icons8.com/kO20yenejB3M-ElZUGZMtv3FCQ4fbFa7TbOKX5dGf0w/rs:fit:456:456/czM6Ly9pY29uczgu/b3VjaC1wcm9kLmFz/c2V0cy9zdmcvNDY4/LzU4OWMzZTZkLWQz/OTAtNGQ0My04NTgx/LTY4NDkzMGZiNWRk/ZC5zdmc.png',
+				current: '',
+			};
+		},
+		onLoad(parameter) {
+			this.getPageData()
+			this.current = parameter.index - 1
+		},
+		methods: {
+			getPageData() {
+				this.dayTime = (new Date()).format('M-d').replace('-', '月')
+				this.weekTime = "星期" + "日一二三四五六".charAt(new Date().getDay());
+				this.currentClassList = this.classList
+				// 课程选择查看列表
+				this.weekList.forEach(function(item, index) {
+					var dateTime = new Date();
+					dateTime = dateTime.setDate(dateTime.getDate() + index);
+					let weekDateStr = "周" + "日一二三四五六".charAt(new Date(dateTime).getDay());
+					item.weekNum = weekDateStr
+					// if (index === 0) {
+					// 	item.weekNum = '今日'
+					// }
+					item.dayNum = new Date(dateTime).format('d') + ' 号'
+				});
+			},
+			//选中日期
+			chooseDay(index, item) {
+				this.isactive = index
+				for (const key in this.weekClassData) {
+					if (key === item.weekNum) {
+						this.currentClassList = this.weekClassData[key]
+					}
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import '@/subpkg/datalist/top_info.scss';
+	.week-view {
+		white-space: nowrap;
+
+		.week-item {
+			display: inline-block;
+			vertical-align: top;
+			height: 140rpx;
+			width: 120rpx;
+			margin: 20rpx;
+			padding: 20rpx;
+			border-radius: $border-radius;
+			background-color: #FFF;
+
+			.item-box {
+				width: 100%;
+				height: 100%;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: space-around;
+
+				.item-title {
+					font-size: 30rpx;
+					color: #898b91;
+				}
+
+				.item-day {
+					font-size: 40rpx;
+					font-weight: bold;
+					color: #505155;
+				}
+			}
+		}
+
+		.week-item-select {
+			display: inline-block;
+			vertical-align: top;
+			height: 160rpx;
+			width: 140rpx;
+			margin: 20rpx;
+			padding: 20rpx;
+			border-radius: $border-radius;
+			background-color: #FFF;
+			border: 3px solid $title;
+
+			.item-box {
+				width: 100%;
+				height: 100%;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: space-between;
+
+				.tag-fill {
+					border-radius: 6rpx;
+					background-color: $title;
+					padding: 5rpx 20rpx;
+
+					.tag-text {
+						font-size: 28rpx;
+						color: #FFF;
+					}
+				}
+
+				.item-title {
+					font-size: 34rpx;
+					color: $title;
+				}
+
+				.item-day {
+					font-size: 50rpx;
+					font-weight: bold;
+					color: $title;
+				}
+			}
+		}
+	}
+
+	.class-list {
+		display: flex;
+		flex-direction: column;
+		justify-content: space-between;
+		margin: 0 30rpx 20rpx 30rpx;
+
+		.class-item {
+			display: flex;
+			flex-direction: column;
+			justify-content: space-around;
+			margin: 10rpx 0;
+			padding: 10rpx 0;
+			height: 100rpx;
+			border-bottom: 4rpx solid #f3f4f9;
+			border-top: 4rpx solid #f3f4f9;
+			border-image: linear-gradient(to right, #FFF, #d5d5d5) 1;
+
+			.item-title {
+				font-size: 32rpx;
+				font-weight: bold;
+				color: $title;
+			}
+
+			.item-subtitle {
+				font-size: 30rpx;
+				font-weight: bold;
+				color: $subtitle;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+			}
+		}
+	}
+
+	.image-box {
+		display: flex;
+		flex-direction: column;
+		height: 100%;
+		align-items: center;
+		margin-bottom: 70rpx;
+	}
+
+	.detail-image1 {
+		width: 500rpx;
+		height: 600rpx;
+		background-size: 100%;
+		background-repeat: no-repeat;
+		z-index: 51;
+	}
+</style>

+ 319 - 0
subpkg/home/clockStats.vue

@@ -0,0 +1,319 @@
+<template>
+	<view class="page-view">
+		<top-return text="打卡详情" color="#FFF"></top-return>
+		<!-- 背景 -->
+		<view class="bg-box2"></view>
+		<!-- 月统计卡片信息 -->
+		<view class="card-view" style="margin-top: 140rpx;">
+			<view class="card-item" style="width: 100%;">
+				<view class="card-title" style="margin:10rpx 0 0 10rpx;">
+					<view class="title">{{currentTodayData.month}}月 打卡汇总</view>
+				</view>
+				<view class="clock-stats">
+					<view class="flex-column" style="align-items: center;">
+						<view class="number" style="color: #4169E1;">{{isClockStats}}</view>
+						<view class="number-detail">打卡次数</view>
+					</view>
+					<view class="flex-column" style="align-items: center;">
+						<view class="number" style="color: #ff5959;">{{noClockStats}}</view>
+						<view class="number-detail">缺卡次数</view>
+					</view>
+					<view class="flex-column" style="align-items: center;">
+						<view class="number"
+							:style="{color: clockStatsQuality==='优秀'?'#4169E1':(clockStatsQuality === '较差'?'#ff5959':'#f9c752')}">
+							{{clockStatsQuality}}
+						</view>
+						<view class="number-detail">出勤质量</view>
+					</view>
+				</view>
+			</view>
+			<!-- 打卡记录日历 -->
+			<view class="card-item" style="width: 100%;">
+				<view class="calendar-container">
+					<zsyCalendar :sundayIndex="6" @chooseDate="chooseDate" @change="change" />
+				</view>
+				<view class="state-box">
+					<view class="state"
+						:style="{backgroundColor: clockState==='已打卡'?'#4169E1':(clockState === '未打卡'?'#ff5959':'#bebebe')}">
+						<view class="state-text">{{clockState}}</view>
+					</view>
+					<view class="msg-box">
+						<view class="flex">
+							<text class="msg-text" style="font-weight: normal;font-size: 28rpx;">打卡时间:</text>
+							<text class="msg-text">{{clockTime.replace('0','')}}</text>
+						</view>
+						<view class="flex">
+							<text class="msg-text" style="font-weight: normal;font-size: 28rpx;">出勤效率:</text>
+							<text class="msg-text"
+								:style="{color: clockQuality==='优秀'?'#4169E1':(clockQuality === '良好'?'#f9c752':'#3B4144')}">{{clockQuality}}</text>
+						</view>
+					</view>
+					<!-- 图片信息 -->
+					<view class="image" v-if="currentTodayData.isAttend === 1"
+						:style="{backgroundImage:`url(${imageWorkday})`}"></view>
+					<view class="image" v-if="currentTodayData.isAttend === 7"
+						:style="{backgroundImage:`url(${imageWeekend})`}"></view>
+					<view class="image" v-if="currentTodayData.isAttend === 0"
+						:style="{backgroundImage:`url(${imageNoAttend})`}"></view>
+					<view class="image" v-if="currentTodayData.isAttend === -1"
+						:style="{backgroundImage:`url(${imageNoArrive})`}"></view>
+				</view>
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState
+	} from 'vuex'
+	import zsyCalendar from '@/components/z-calendar/zsy-calendar.vue'
+	export default {
+		name: 'Calendar',
+		components: {
+			zsyCalendar
+		},
+		computed: {
+			...mapState('m_children', ['clockData']),
+		},
+		data() {
+			return {
+				//月打卡统计数据
+				isClockStats: '',
+				noClockStats: '',
+				clockStatsQuality: '',
+				//日打卡数据
+				clockState: '',
+				clockTime: '',
+				clockQuality: '',
+				//日历月份
+				calendarMonth: '',
+				//点击当日信息
+				currentTodayData: '',
+				//控制事件参数
+				isFirst: false,
+				//当日时间参数
+				todayData: '',
+				//图片
+				imageWorkday: 'https://ouch-cdn2.icons8.com/z39mAYlsJUS2hKCBbkK_ktOIjma_qhkc5J0ANdyfiKU/rs:fit:912:912/czM6Ly9pY29uczgu/b3VjaC1wcm9kLmFz/c2V0cy9zdmcvMTA3/L2FlZjQ4NmM4LTAz/NTYtNGRhNS04ZWQ2/LTBhMGIzMzdhZjNm/Mi5zdmc.png',
+				imageWeekend: 'https://ouch-cdn2.icons8.com/NJDdGibHzZkGZzgqe55ESzJ6_BrcgHO2bkz_vFG6PoY/rs:fit:912:912/czM6Ly9pY29uczgu/b3VjaC1wcm9kLmFz/c2V0cy9zdmcvNTg2/L2RlMmJhZDI4LTAz/NTQtNDMwNS1hNmQ2/LTU3Y2Y1ODJjNjc3/YS5zdmc.png',
+				imageNoAttend: 'https://ouch-cdn2.icons8.com/ehPeP69ypvrLonk6YkqIzV_WfKM1G-Ls9J7PuZvxRr8/rs:fit:912:912/czM6Ly9pY29uczgu/b3VjaC1wcm9kLmFz/c2V0cy9zdmcvMzY3/L2QzZGNmODA5LTY3/ODUtNGFkOC1hOWVi/LWI4OWYyM2ZiMzNi/Yi5zdmc.png',
+				imageNoArrive: 'https://ouch-cdn2.icons8.com/WfSBIzy4iTGDtprvhW0wA2S8lPNRoqeZqvFsNbKsraw/rs:fit:912:912/czM6Ly9pY29uczgu/b3VjaC1wcm9kLmFz/c2V0cy9zdmcvODQ3/LzI1NDY1ZDdhLTVj/NDEtNGIzMy1iN2Q1/LTRhYjgwOGU2NDk5/OS5zdmc.png'
+			}
+		},
+		watch: {
+			calendarMonth() {
+				this.getClockStatsQuality()
+			}
+		},
+		onLoad() {
+			this.init()
+		},
+		methods: {
+			init() {
+				this.getClockStatsQuality()
+				this.getTodayAttendance()
+			},
+			//判断本月出勤质量
+			getClockStatsQuality() {
+				this.clockStatsQuality = this.noClockStats / 30 <= 0.1 ? '优秀' : (this.noClockStats / 30 <= 0.2 ? '良好' :
+					'较差')
+				if (this.noClockStats === '暂无' && this.isClockStats === '暂无') {
+					this.clockStatsQuality = '暂无'
+				}
+			},
+			//今日打卡
+			getTodayAttendance() {
+				//获得当前时间时间戳
+				let timeArr = (new Date()).format("yyyy-M-dd").split("-")
+				let val = this.clockData.filter(x => x.year == timeArr[0] && x.month == timeArr[1] && x.date == timeArr[2])
+				if (val.length === 0) {
+					//出勤状况
+					this.clockState = '未打卡',
+						//打卡时间
+						this.clockTime = '无记录',
+						//出勤质量
+						this.clockQuality = '无记录'
+				} else {
+					this.clockState = '已打卡'
+					this.clockTime = val[0].time
+					this.clockQuality = val[0].time <= '08:15' ? '优秀' : (val[0].time <= '08:25' ? '良好' : '较差')
+				}
+			},
+			//选择日期
+			chooseDate(dateInfo, dateIndex) {
+				if (dateInfo.isAttend === 1) {
+					this.clockState = '已打卡'
+					this.clockTime = this.clockData.filter(x => x.date === dateInfo.date && x.month === dateInfo
+						.month && x.year === x.year)[0].time
+					this.clockQuality = this.clockTime <= '08:15' ? '优秀' : (this.clockTime <= '08:25' ?
+						'良好' : '较差')
+				}
+				if (dateInfo.isAttend === 0) {
+					this.clockState = '未打卡'
+					this.clockTime = '无记录'
+					this.clockQuality = '无记录'
+				}
+				if (dateInfo.isAttend === -1) {
+					this.clockState = '时间未到'
+					this.clockTime = '无记录'
+					this.clockQuality = '无记录'
+				}
+				if (dateInfo.isAttend === 7) {
+					this.clockState = '周末休息'
+					this.clockTime = '无记录'
+					this.clockQuality = '无记录'
+				}
+			},
+			//选中日期改变回调
+			change(e) {
+				//存入当前时间
+				if (this.isFirst === false) {
+					this.todayData = e
+					this.isFirst = true
+				}
+				//点击当日信息
+				this.currentTodayData = e
+				console.log("日历点击",this.currentTodayData);
+				//日历月份
+				this.calendarMonth = e.month
+				//当前日历月份打卡数
+				this.isClockStats = this.clockData.filter(x => x.month === e.month && x.year === e.year).length
+				// 当前日历月天数
+				let monthDays = new Date(e.year, e.month, 0).getDate()
+				//在本年当前月之前
+				if (e.year === this.todayData.year && e.month < this.todayData.month) {
+					let weekendDates = 0
+					for (let i = 1; i <= monthDays; i++) {
+						if (new Date(`${e.year}-${e.month}-${i}`).getDay() === 0 ||
+							new Date(`${e.year}-${e.month}-${i}`).getDay() === 6) {
+							weekendDates++
+						}
+					}
+					//当前日历月份未打卡数
+					this.noClockStats = monthDays - this.isClockStats - weekendDates
+				}
+				//之前年份
+				if (e.year < this.todayData.year) {
+					let weekendDates = 0
+					for (let i = 1; i <= monthDays; i++) {
+						if (new Date(`${e.year}-${e.month}-${i}`).getDay() === 0 ||
+							new Date(`${e.year}-${e.month}-${i}`).getDay() === 6) {
+							weekendDates++
+						}
+					}
+					//当前日历月份未打卡数
+					this.noClockStats = monthDays - this.isClockStats - weekendDates
+				}
+				//在本月
+				if (e.year === this.todayData.year && e.month === this.todayData.month) {
+					let weekendDates = 0
+					for (let i = 1; i <= this.todayData.date; i++) {
+						if (new Date(`${e.year}-${e.month}-${i}`).getDay() === 0 ||
+							new Date(`${e.year}-${e.month}-${i}`).getDay() === 6) {
+							weekendDates++
+						}
+					}
+					this.noClockStats = this.todayData.date - this.isClockStats - weekendDates
+				}
+				//在本年当月之后
+				if (e.year === this.todayData.year && e.month > this.todayData.month) {
+					this.noClockStats = '暂无'
+					this.isClockStats = '暂无'
+				}
+				//之后年份
+				if (e.year > this.todayData.year) {
+					this.noClockStats = '暂无'
+					this.isClockStats = '暂无'
+				}
+			},
+			
+		}
+	}
+</script>
+
+<style lang="scss">
+	.number {
+		font-size: 50rpx;
+		font-weight: bold;
+		color: $title;
+	}
+
+	.number-detail {
+		margin-top: 10rpx;
+		font-size: 30rpx;
+		color: $subtitle;
+	}
+
+	.state-box {
+		display: flex;
+		align-items: center;
+		height: 200rpx;
+		width: 100%;
+
+		.state {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			border-radius: 100%;
+			margin: 20rpx;
+			height: 150rpx;
+			width: 150rpx;
+
+			.state-text {
+				font-size: 32rpx;
+				font-weight: bold;
+				color: #FFF;
+			}
+		}
+
+		.msg-box {
+			display: flex;
+			flex-direction: column;
+			justify-content: space-around;
+			height: 150rpx;
+			width: auto;
+
+			.msg-text {
+				color: $title;
+				font-weight: bold;
+				font-size: 36rpx;
+				margin-left: 15rpx;
+			}
+		}
+	}
+
+	.calendar-container {
+		height: 100%;
+		width: 100%;
+		background-color: #FFF;
+		margin: 0 auto;
+		box-sizing: border-box;
+		border-radius: $border-radius;
+	}
+
+	.image {
+		margin-left: auto;
+		margin-right: 20rpx;
+		width: 200rpx;
+		height: 200rpx;
+		border-radius: $border-radius;
+		background-size: 100%;
+		background-repeat: no-repeat;
+	}
+	.box_tag{
+		margin-right: 20rpx;
+		height: 100%;
+		width: 10rpx;
+		background-color: $title;
+		z-index: 99;
+	}
+	.clock-stats{
+		display: flex;
+		align-items: center;
+		justify-content: space-around;
+		height: 180rpx;
+		margin-bottom: 20rpx;
+	}
+</style>

+ 211 - 0
subpkg/mine/childInfo.vue

@@ -0,0 +1,211 @@
+<template>
+	<view class="page-view" style="width: 100vw;height: 100vh;">
+		<top-return text="孩子名片" color="#FFF"></top-return>
+		<view class="detail-image"
+			:style="{backgroundImage:`linear-gradient(to top, #f3f4f9, rgba(255, 255, 255, 0) 60%),url(${image})`}"></view>
+		<!-- 孩子头部信息 -->
+		<view class="top-info">
+			<image class="avatar" :src="childInfo.gender==='M'?'/static/default_icons/boy_avatar.svg':childInfo.gender===null?'/static/default_icons/boy_avatar.svg':'/static/default_icons/girl_avatar.svg'"></image>
+			<view class="top-name">
+				<view class="flex-baseline">
+					<text class="name">{{childInfo.name}}</text>
+					<view class="tag-fill"
+						style="margin-left: 30rpx;">
+						<view class="t-icon t-icon-xueshengziliao"></view>
+						<view class="tag-text" style="color: #4169E1;font-size: 28rpx;">{{childInfo.gender===null?'性别保密':childInfo.gender==='M'?'男孩':'女孩'}}</view>
+					</view>
+				</view>
+				<view class="flex-row">
+					<view class="tag-fill">
+						<view class="t-icon t-icon-xuewei1"></view>
+						<view class="tag-text" style="color: #4169E1;font-size: 28rpx;">{{childInfo.periodName}}学段</view>
+					</view>
+					<view class="tag-fill"
+						style="margin-left: 10rpx;">
+						<view class="t-icon t-icon-nongyekeji2">
+						</view>
+						<view class="tag-text" style="color: #4169E1;font-size: 28rpx;">{{childInfo.stuYear}}入学</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 卡片信息 -->
+		<view class="main-card">
+			<view class="flex-row">
+				<view class="t-icon t-icon-biaoqian"></view>
+				<view class="flex-column">
+					<view class="subtitle">就读学校</view>
+					<view class="title" style="margin-top: 10rpx;">{{childInfo.schoolName}}</view>
+				</view>
+			</view>
+			<view class="flex-row" style="margin-top: 50rpx;">
+				<view class="t-icon t-icon-fenlei1"></view>
+				<view class="flex-column">
+					<view class="subtitle">所在班级</view>
+					<view class="title">{{childInfo.className}}</view>
+				</view>
+			</view>
+			<view class="flex-row" style="margin-top: 50rpx;">
+				<view class="t-icon t-icon-jiaoyu"></view>
+				<view class="flex-column">
+					<view class="subtitle">主任老师</view>
+					<view class="title">{{childInfo.teacherName}}</view>
+				</view>
+			</view>
+
+			<view class="card-view" style="margin-top: 40rpx;">
+				<view class="flex-column-box" style="margin:0 auto 0 -40rpx;">
+					<view class="column-title">勋章卡片</view>
+					<view class="bottom-tag"></view>
+				</view>
+			</view>
+
+			<u-avatar-group :urls="medals" size="40" gap="0.2"></u-avatar-group>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState
+	} from 'vuex'
+	export default {
+		computed: {
+			...mapState('m_parent', ['childrenData']),
+		},
+		data() {
+			return {
+				image: 'https://image.meiye.art/pic_1628493302098',
+				medals: [
+
+				],
+				childInfo: ''
+			};
+		},
+		onLoad(param) {
+			this.childInfo = this.childrenData[param.index]
+		},
+		methods: {
+			updateAvatar() {
+				uni.chooseImage({
+					count: 1, //默认1个图片
+					sourceType: ['album'], //从相册选择
+					success: function(res) {
+						console.log(JSON.stringify(res.tempFilePaths));
+					}
+				})
+			},
+
+
+		},
+	}
+</script>
+
+<style lang="scss">
+	.flex-column {
+		height: 80rpx;
+		justify-content: space-between;
+	}
+
+	.detail-image {
+		position: fixed;
+		width: 100%;
+		height: 800rpx;
+	}
+
+	.top-info {
+		display: flex;
+		align-items: center;
+		margin-top: 180rpx;
+
+		.avatar {
+			margin-left: 50rpx;
+			width: 140rpx;
+			height: 140rpx;
+			border-radius: 100%;
+			border: 6rpx solid #FFF;
+			box-shadow: 0 10rpx 20rpx rgba(0, 0, 0, 0.2);
+			z-index: 55;
+		}
+
+		.top-name {
+			margin-left: 50rpx;
+			height: 130rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: space-around;
+			font-weight: bold;
+
+			.name {
+				color: $title;
+				font-size: 45rpx;
+				font-weight: bold;
+				z-index: 55;
+			}
+			.t-icon{
+				width: 32rpx;
+				height: 32rpx;
+				margin-right: 5rpx;
+			}
+		}
+	}
+
+	.main-card {
+		display: flex;
+		flex-direction: column;
+		padding: 80rpx 80rpx 0 80rpx;
+		position: relative;
+		background-color: #FFF;
+		height: 100%;
+		top: 80rpx;
+		left: 50rpx;
+		border-radius: 50rpx;
+		border-bottom-left-radius: 0;
+		z-index: 55;
+
+		.title {
+			line-height: 32rpx;
+			font-size: 32rpx;
+			font-weight: 400;
+			color: $title;
+		}
+
+		.subtitle {
+			line-height: 28rpx;
+			font-size: 28rpx;
+			color: $subtitle;
+			font-weight: 400;
+		}
+
+		.t-icon {
+			margin-right: 30rpx;
+			width: 80rpx;
+			height: 80rpx;
+		}
+	}
+
+	.box_title {
+		line-height: 35rpx;
+		font-size: 35rpx;
+		font-weight: bold;
+		color: $title;
+	}
+
+	.flex-column-box {
+		display: flex;
+		flex-direction: column;
+
+		.column-title {
+			line-height: 35rpx;
+			font-size: 32rpx;
+			font-weight: bold;
+			color: $title;
+		}
+	}
+	.tag-fill{
+		background-color: #d8deff;
+		width:fit-content;
+		z-index: 99;
+	}
+</style>

+ 246 - 0
subpkg/mine/parentInfo.vue

@@ -0,0 +1,246 @@
+<template>
+	<view class="page-view" style="width: 100vw;height: 100vh;">
+		<top-return text="个人信息" color="#FFF"></top-return>
+		<view class="detail-image"
+			:style="{backgroundImage:`linear-gradient(to top, #f3f4f9, rgba(255, 255, 255, 0) 60%),url(${image})`}">
+		</view>
+		<!-- 个人头部信息 -->
+		<view class="top-info">
+			<image class="top-avatar" :src="parentInfo.avatarUrl"></image>
+			<view class="top-name">
+				<text class="name">{{parentInfo.nickName}}</text>
+				<view class="tag-fill">
+					<view class="t-icon t-icon-lianmengzhuanjia"></view>
+					<view class="tag-text" style="color: #4169E1;font-size: 28rpx;">{{phoneNumber}} 绑定手机</view>
+				</view>
+			</view>
+		</view>
+		<!-- 卡片信息 -->
+		<view class="main-card">
+			<view class="flex-row">
+				<view class="t-icon t-icon-huangguan"></view>
+				<view class="flex-column">
+					<view class="subtitle">我的订阅</view>
+					<view class="title">{{userData.subscribeLevel}}</view>
+				</view>
+			</view>
+			<view class="flex-row" style="margin-top: 50rpx;">
+				<view class="t-icon t-icon-jiesuo"></view>
+				<view class="flex-column">
+					<view class="subtitle">订阅时间</view>
+					<view class="title">{{userData.subscribeTime}}</view>
+				</view>
+			</view>
+			<view class="flex-row" style="margin-top: 50rpx;">
+				<view class="t-icon t-icon-quanxian"></view>
+				<view class="flex-column">
+					<view class="subtitle">订阅权益</view>
+					<view class="title">{{userData.subscribePrivilege}}</view>
+				</view>
+			</view>
+
+			<view class="card-view" style="margin-top: 40rpx;">
+				<view class="flex-column-box" style="margin:0 auto 0 -40rpx;">
+					<view class="column-title">孩子名片</view>
+					<view class="bottom-tag"></view>
+				</view>
+			</view>
+
+			<view class="card-box">
+				<view class="card" v-for="(item,index) in childrenData" :key="index" @click="navChildInfo(index)">
+					<image class="avatar" :src="item.gender==='M'?'/static/default_icons/boy_avatar.svg':item.gender===null?'/static/default_icons/boy_avatar.svg':'/static/default_icons/girl_avatar.svg'"></image>
+					<view class="card-info">
+						<view class="flex-baseline">
+							<view class="YS-title">{{item.name}}</view>
+							<view class="card-title">{{item.periodName}}学段</view>
+						</view>
+						<view class="flex-row">
+							<view class="t-icon t-icon-xuewei1"></view>
+							<view class="card-subtitle">{{item.schoolName}}</view>
+							<view class="t-icon t-icon-zhengceguizhang2" style="margin-left: 20rpx;"></view>
+							<view class="card-subtitle">{{item.className}}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState
+	} from 'vuex'
+	export default {
+		computed: {
+			...mapState('m_parent', ['parentInfo', 'phoneNumber', 'userData', 'childrenData']),
+		},
+		data() {
+			return {
+				image: 'https://image.meiye.art/pic_1628493294944',
+			};
+		},
+		methods: {
+			//孩子名片
+			navChildInfo(index) {
+				uni.navigateTo({
+					url: `/subpkg/mine/childInfo?index=${index}`
+				})
+			},
+		},
+	}
+</script>
+
+<style lang="scss">
+	.flex-column {
+		display: flex;
+		flex-direction: column;
+		height: 80rpx;
+		justify-content: space-between;
+	}
+
+	.detail-image {
+		position: fixed;
+		width: 100%;
+		height: 800rpx;
+	}
+
+	.top-info {
+		display: flex;
+		align-items: center;
+		margin-top: 180rpx;
+
+		.top-avatar {
+			margin-left: 50rpx;
+			width: 140rpx;
+			height: 140rpx;
+			border-radius: 100%;
+			border: 6rpx solid #FFF;
+			box-shadow: 0 10rpx 20rpx rgba(0, 0, 0, 0.2);
+			z-index: 55;
+		}
+
+		.top-name {
+			margin-left: 50rpx;
+			height: 130rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: space-around;
+			font-weight: bold;
+
+			.name {
+				color: $title;
+				font-size: 45rpx;
+				font-weight: bold;
+				z-index: 55;
+			}
+
+			.t-icon {
+				width: 32rpx;
+				height: 32rpx;
+				margin-right: 5rpx;
+			}
+		}
+	}
+
+	.main-card {
+		display: flex;
+		flex-direction: column;
+		padding: 80rpx 80rpx 0 80rpx;
+		position: relative;
+		background-color: #FFF;
+		height: 100%;
+		top: 80rpx;
+		left: 50rpx;
+		border-radius: 50rpx;
+		border-bottom-left-radius: 0;
+		z-index: 55;
+
+		.title {
+			line-height: 32rpx;
+			font-size: 32rpx;
+			font-weight: 400;
+			color: $title;
+		}
+
+		.subtitle {
+			line-height: 28rpx;
+			font-size: 28rpx;
+			color: $subtitle;
+			font-weight: 400;
+		}
+
+		.t-icon {
+			margin-right: 30rpx;
+			width: 80rpx;
+			height: 80rpx;
+		}
+	}
+
+	.flex-column-box {
+		display: flex;
+		flex-direction: column;
+
+		.column-title {
+			line-height: 35rpx;
+			font-size: 32rpx;
+			font-weight: bold;
+			color: $title;
+		}
+	}
+
+	.card-box {
+		display: flex;
+		align-items: center;
+		flex-wrap: wrap; //元素换行
+
+		.card {
+			width: 100%;
+			margin: 10rpx 0 10rpx 0;
+			padding: 20rpx;
+			display: flex;
+			align-items: center;
+			border: 2rpx solid #f3f4f9;
+			background-color: #FFFFFF;
+			border-radius: $border-radius;
+			z-index: 99;
+
+			.card-title {
+				margin-left: 20rpx;
+				font-size: 28rpx;
+				color: $title;
+			}
+
+			.card-subtitle {
+				line-height: 26rpx;
+				font-size: 26rpx;
+				color: $subtitle;
+			}
+
+			.avatar {
+				width: 100rpx;
+				height: 100rpx;
+			}
+		}
+	}
+
+	.tag-fill {
+		background-color: #d8deff;
+		width: fit-content;
+		z-index: 99;
+	}
+
+	.card-info {
+		display: flex;
+		flex-direction: column;
+		margin-left: 30rpx;
+		height: 100rpx;
+		justify-content: space-around;
+
+		.t-icon {
+			width: 32rpx;
+			height: 32rpx;
+			margin-right: 5rpx;
+		}
+	}
+</style>

+ 452 - 0
subpkg/swap/swapStats.vue

@@ -0,0 +1,452 @@
+<template>
+	<view class="page-view">
+		<top-return color="#FFF" text="日常记录" refresh="true"></top-return>
+		<!-- 背景 -->
+		<view class="bg-box1"></view>
+		<!-- 页面标题内容 -->
+		<view class="top-box">
+			<view class="flex-baseline">
+				<view class="info-title" style="margin-left: 0;">{{dayTime.split('月')[0]}}</view>
+				<view class="info-subtitle">月</view>
+				<view class="info-title">{{dayTime.split('月')[1]}}
+				</view>
+				<view class="info-subtitle">日</view>
+				<view class="info-title" style="margin-left: 20rpx;">{{weekTime}}</view>
+			</view>
+			<view class="flex-baseline">
+				<view class="data-subtitle" style="margin-left: 0;">记录今日孩子表现吧</view>
+			</view>
+		</view>
+		<!-- 记录模块 -->
+		<view class="module-box" style="margin-top: 20rpx;">
+			<view class="module-item" v-for="(item,index) in moduleData" :key="index" :style="item.color"
+				@click="setTime(index)">
+				<view class="module-item-subtext" style="margin-left: 30rpx;">{{item.text}}</view>
+
+				<view class="flex-baseline" style="margin-left: 30rpx;" v-if="item.numData === ''">
+					<text class="module-item-text">记录</text>
+					<text class="module-item-subtext" style="margin-left: 8rpx;opacity:0.8;">今日时长</text>
+				</view>
+				<view class="flex-baseline" style="margin-left: 30rpx;"
+					v-if="item.numData.includes('小时') && item.numData != ''">
+					<text class="module-item-text">{{item.numData.split('小时')[0]}}</text>
+					<text class="module-item-subtext" style="margin-left: 8rpx;opacity:0.8;">小时</text>
+					<text class="module-item-text"
+						style="margin-left: 8rpx;">{{item.numData.split('小时')[1].replace('分','')}}</text>
+					<text class="module-item-subtext" style="margin-left: 8rpx;opacity:0.8;">分钟</text>
+				</view>
+				<view class="flex-baseline" style="margin-left: 30rpx;"
+					v-if="item.numData.includes('小时') === false && item.numData != ''">
+					<text class="module-item-text" style="margin-left: 8rpx;">{{item.numData.replace('分','')}}</text>
+					<text class="module-item-subtext" style="margin-left: 8rpx;opacity:0.8;">分钟</text>
+				</view>
+				<view :class="item.icon"></view>
+			</view>
+		</view>
+		<!-- 时间选择器 -->
+		<u-picker :show="setTimePicker" :columns="pickerList" @confirm="pickerConfirm" @cancel="cancel">
+		</u-picker>
+		<!-- 统计列表 -->
+		<view class="card-view" style="margin-top: 0;">
+			<!-- 统计列表 -->
+			<view class="flex-column-box" style="margin-left: 20rpx;">
+				<view class="title" style="font-size: 32rpx;">近期统计</view>
+				<view class="bottom-tag"
+					style="background-image: linear-gradient(to right, #4169E1, rgba(255, 255, 255, 0.01));"></view>
+			</view>
+			<!-- 总成绩对比 -->
+			<view class="card-item" style="width: 100%;">
+				<view class="card-title">
+					<view class="front-tag"></view>
+					<view class="title">学习娱乐时长对比</view>
+				</view>
+				<view class="chart-box">
+					<qiun-data-charts type="column" ontouch="true" :chartData="swapChartData[0]"
+						tooltipFormat='tooltipHourColum' :canvas2d="true" canvasId="swap_chart1" />
+				</view>
+			</view>
+			<!-- 单科与平均对比 -->
+			<view class="card-item">
+				<view class="card-title">
+					<view class="front-tag"></view>
+					<view class="title">近期运动记录</view>
+				</view>
+				<view class="chart-box" style="height: 350rpx;">
+					<qiun-data-charts type="pie" :chartData="swapChartData[1]" tooltipFormat='pieMinute'
+						:canvas2d="true" canvasId="swap_chart2" />
+				</view>
+			</view>
+			<view class="card-item">
+				<view class="card-title">
+					<view class="front-tag"></view>
+					<view class="title">近期睡眠记录</view>
+				</view>
+				<view class="chart-box" style="height: 350rpx;">
+					<qiun-data-charts type="ring" :chartData="swapChartData[2]" tooltipFormat='pieHour' :canvas2d="true"
+						canvasId="swap_chart3" :opts="ringOpts" />
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	export default {
+		computed: {
+			...mapState('m_chart', ['swapChartData'])
+		},
+		data() {
+			return {
+				//记录卡片
+				moduleData: [{
+						text: '学习时长',
+						color: 'background-color: #4169E1;',
+						icon: 't-icon t-icon-bianjibi',
+						numData: '',
+					},
+					{
+						text: '娱乐时长',
+						color: 'background-color: #ff5959;',
+						icon: 't-icon t-icon-leimucuyule',
+						numData: '',
+					},
+					{
+						text: '运动时长',
+						color: 'background-color: #ff8caf;',
+						icon: 't-icon t-icon-yundong',
+						numData: '',
+					},
+					{
+						text: '睡眠时长',
+						color: 'background-color: #f9c752;',
+						icon: 't-icon t-icon-a-icon_wananyueliangshuimian',
+						numData: '',
+					}
+				],
+				//标题配置
+				ringOpts: {},
+				//当前记录卡片
+				cardCurrent: 5,
+				//选择器
+				setTimePicker: false,
+				//时间表
+				pickerList: [
+					['0小时', '1小时', '2小时', '3小时', '4小时', '5小时', '6小时', '7小时', '8小时', '9小时', '10小时'],
+					['5分', '10分', '15分', '20分', '25分', '30分', '35分', '40分', '45分', '50分', '55分']
+				],
+				//历史数据
+				dayTime: '',
+				weekTime: '',
+				//是否重新记录
+				setTimeRecord: false
+			}
+		},
+		onLoad() {
+			this.init()
+		},
+		methods: {
+			...mapMutations('m_chart', ['updateSwapChartData']),
+			...mapMutations('m_parent', ['updateChildDailyData']),
+			init() {
+				this.getToday()
+				this.getData()
+				this.getRingOpts()
+			},
+			getToday() {
+				this.dayTime = (new Date()).format('M-d').replace('-', '月')
+				this.weekTime = "星期" + "日一二三四五六".charAt(new Date().getDay());
+			},
+			//记录信息初始化
+			getData() {
+				if (uni.getStorageSync('moduleData'))
+					this.moduleData = JSON.parse(uni.getStorageSync('moduleData'));
+				if (uni.getStorageSync('childDailyData'))
+					this.historyData = JSON.parse(uni.getStorageSync('childDailyData'));
+				this.saveToStudyChart()
+			},
+			
+			//睡眠记录统计
+			getRingOpts() {
+				let sleepData = ''
+				if (uni.getStorageSync('childDailyData'))
+				sleepData = JSON.parse(uni.getStorageSync('childDailyData')).sleep;
+				let sum = 0
+				for (let i = 0; i < sleepData.length; i++) {
+					sum += sleepData[i]
+				}
+				let sleepAvg = (sum / sleepData.length).toFixed(1)
+				let opt = {
+					title: {
+						name: '平均睡眠',
+						color: '#909399'
+					},
+					subtitle: {
+						name: sleepAvg + ' 小时',
+						color: '#4169E1'
+					},
+				}
+				this.ringOpts = opt
+			},
+			//点击卡片唤起picker
+			setTime(index) {
+				if (this.moduleData[index].numData === '') {
+					this.cardCurrent = index
+					this.setTimePicker = true
+				}
+				if (this.moduleData[index].numData != '') {
+					let that = this;
+					uni.showModal({
+						title: `今日${that.moduleData[index].text}已记录`,
+						content: '需要重新记录吗?',
+						success: function(res) {
+							if (res.confirm) {
+								that.cardCurrent = index
+								that.setTimePicker = true
+								that.setTimeRecord = true
+							} else if (res.cancel) {
+								console.log('取消记录');
+							}
+						}
+					})
+				}
+			},
+			//记录数据
+			pickerConfirm(e) {
+				if (this.setTimeRecord) {
+					if (e.value[0] === '0小时') {
+						this.moduleData[this.cardCurrent].numData = e.value[1]
+					} else {
+						this.moduleData[this.cardCurrent].numData = e.value[0] + e.value[1]
+					}
+					//转换为数据记录到图表中
+					if (this.moduleData[this.cardCurrent].numData.includes('小时') === false) {
+						let timeData = parseFloat((parseInt(this.moduleData[this.cardCurrent].numData.replace('分', '')) /
+								60)
+							.toFixed(1))
+						switch (this.cardCurrent) {
+							case 0:
+								this.historyData.study[6] = timeData
+								break
+							case 1:
+								this.historyData.rest[6] = timeData
+								break
+							case 2:
+								let numExercise = parseInt(this.moduleData[this.cardCurrent].numData.replace('分', ''))
+								this.historyData.exercise[6] = numExercise
+								break
+							case 3:
+								this.historyData.sleep[6] = timeData
+								break
+						}
+						uni.setStorageSync('moduleData', JSON.stringify(this.moduleData))
+						this.updateChildDailyData(this.historyData)
+						this.saveToStudyChart()
+					} else {
+						let timeTemp = this.moduleData[this.cardCurrent].numData.replace('小时', '.').replace('分', '').split(
+							'.')
+						let timeData = parseInt(timeTemp[0]) + parseFloat((timeTemp[1] / 60).toFixed(1))
+						switch (this.cardCurrent) {
+							case 0:
+								this.historyData.study[6] = timeData
+								break
+							case 1:
+								this.historyData.rest[6] = timeData
+								break
+							case 2:
+								let numExerciseData = parseInt(timeTemp[0] * 60) + parseFloat((timeTemp[1]))
+								this.historyData.exercise[6] = numExerciseData
+								break
+							case 3:
+								this.historyData.sleep[6] = timeData
+								break
+						}
+						uni.setStorageSync('moduleData', JSON.stringify(this.moduleData))
+						this.updateChildDailyData(this.historyData)
+						this.saveToStudyChart()
+					}
+					this.setTimePicker = false
+					this.setTimeRecord = false
+				} else {
+					if (e.value[0] === '0小时') {
+						this.moduleData[this.cardCurrent].numData = e.value[1]
+					} else {
+						this.moduleData[this.cardCurrent].numData = e.value[0] + e.value[1]
+					}
+					//转换为数据记录到图表中
+					if (this.moduleData[this.cardCurrent].numData.includes('小时') === false) {
+						let timeData = parseFloat((parseInt(this.moduleData[this.cardCurrent].numData.replace('分', '')) /
+								60)
+							.toFixed(1))
+						switch (this.cardCurrent) {
+							case 0:
+								this.historyData.study.push(timeData)
+								this.historyData.study.shift()
+								break
+							case 1:
+								this.historyData.rest.push(timeData)
+								this.historyData.rest.shift()
+								break
+							case 2:
+								let numExercise = parseInt(this.moduleData[this.cardCurrent].numData.replace('分', ''))
+								this.historyData.exercise.push(numExercise)
+								this.historyData.exercise.shift()
+								break
+							case 3:
+								this.historyData.sleep.push(timeData)
+								this.historyData.sleep.shift()
+								break
+						}
+						uni.setStorageSync('moduleData', JSON.stringify(this.moduleData))
+						this.updateChildDailyData(this.historyData)
+						this.saveToStudyChart()
+					} else {
+						let timeTemp = this.moduleData[this.cardCurrent].numData.replace('小时', '.').replace('分', '').split(
+							'.')
+						let timeData = parseInt(timeTemp[0]) + parseFloat((timeTemp[1] / 60).toFixed(1))
+						switch (this.cardCurrent) {
+							case 0:
+								this.historyData.study.push(timeData)
+								this.historyData.study.shift()
+								break
+							case 1:
+								this.historyData.rest.push(timeData)
+								this.historyData.rest.shift()
+								break
+							case 2:
+								let numExerciseData = parseInt(timeTemp[0] * 60) + parseFloat((timeTemp[1]))
+								this.historyData.exercise.push(numExerciseData)
+								this.historyData.exercise.shift()
+								break
+							case 3:
+								this.historyData.sleep.push(timeData)
+								this.historyData.sleep.shift()
+								break
+						}
+						uni.setStorageSync('moduleData', JSON.stringify(this.moduleData))
+						this.updateChildDailyData(this.historyData)
+						this.saveToStudyChart()
+					}
+					this.setTimePicker = false
+				}
+			},
+			//取消
+			cancel() {
+				this.setTimePicker = false
+			},
+			//存储到图表
+			saveToStudyChart() {
+				let swapChartData = []
+				let studyColumn = {
+					categories: [],
+					series: [{
+							name: '自主学习',
+							data: this.historyData.study
+						},
+						{
+							name: '娱乐放松',
+							data: this.historyData.rest
+						}
+					]
+				}
+				//时间
+				studyColumn.categories = this.$getRecentDateArray(this.historyData.study.length)
+				//学习记录表数据记录
+				switch (this.cardCurrent) {
+					case 0:
+						studyColumn.series[0].data = this.historyData.study
+						break
+					case 1:
+						studyColumn.series[1].data = this.historyData.rest
+						break
+				}
+				//运动记录表
+				let exercisePie = {
+					series: [{
+						data: [{}, {}, {}, {}, {}, {}, {}]
+					}]
+				}
+				//睡眠记录表
+				let sleepRing = {
+					series: [{
+						data: [{}, {}, {}, {}, {}, {}, {}]
+					}]
+				}
+				studyColumn.categories.forEach((value, index) => {
+					exercisePie.series[0].data[index].name = value
+					exercisePie.series[0].data[index].value = parseFloat((this.historyData.exercise[index])
+						.toFixed(1))
+					sleepRing.series[0].data[index].name = value
+					sleepRing.series[0].data[index].value = this.historyData.sleep[index]
+				})
+				swapChartData.push(studyColumn)
+				swapChartData.push(exercisePie)
+				swapChartData.push(sleepRing)
+				this.updateSwapChartData(swapChartData)
+				this.getRingOpts()
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import '@/subpkg/datalist/top_info.scss';
+	.chart-box {
+		width: 100%;
+		height: 500rpx;
+	}
+
+	.flex-column-box {
+		margin: 20rpx 0;
+		display: flex;
+		flex-direction: column;
+		z-index: 55;
+	}
+
+	.module-box {
+		display: flex;
+		flex-flow: row wrap;
+		margin: 0 20rpx;
+		justify-content: space-between;
+
+		.module-item {
+			margin: 2% 0;
+			width: 48%;
+			height: auto;
+			display: flex;
+			flex-direction: column;
+			padding: 24rpx 0 20rpx 0;
+			background-color: #FFF;
+			border-radius: 20rpx;
+			justify-content: space-between;
+			overflow: hidden;
+			z-index: 3;
+
+			.module-item-text {
+				line-height: 80rpx;
+				color: #FFF;
+				font-size: 50rpx;
+				font-family: YSfont;
+				z-index: 5;
+			}
+
+			.module-item-subtext {
+				line-height: 80rpx;
+				color: #FFF;
+				font-size: 30rpx;
+				font-weight: bold;
+				z-index: 5;
+			}
+		}
+
+		.t-icon {
+			width: 250rpx;
+			height: 250rpx;
+			margin: -250rpx 0 0 160rpx;
+			z-index: 1;
+		}
+	}
+</style>

+ 82 - 0
subpkg/work/workStats.vue

@@ -0,0 +1,82 @@
+<template>
+	<view class="page-view">
+		<top-return color="#FFF" text="作业统计"></top-return>
+		<!-- 背景 -->
+		<view class="bg-box1"></view>
+		<!-- 页面标题内容 -->
+		<view class="top-box">
+			<view class="flex-baseline">
+				<view class="info-title" style="margin-left: 0;">{{dayTime.split('月')[0]}}</view>
+				<view class="info-subtitle">月</view>
+				<view class="info-title">{{dayTime.split('月')[1]}}
+				</view>
+				<view class="info-subtitle">日</view>
+				<view class="info-title" style="margin-left: 20rpx;">{{weekTime}}</view>
+			</view>
+			<view class="flex-baseline">
+				<view class="data-subtitle" style="margin-left: 0;">孩子今日共</view>
+				<view class="data-title">{{workData.length}}</view>
+				<view class="data-subtitle">份作业</view>
+			</view>
+		</view>
+		<!-- 统计列表 -->
+		<view class="card-view">
+			<view class="card-item" style="width: 100%;">
+				<view class="card-title">
+					<view class="front-tag"></view>
+					<view class="title">近期作业完成率</view>
+				</view>
+				<view class="chart-box">
+					<qiun-data-charts type="column" ontouch="true" :chartData="workChartData[0]"
+						tooltipFormat='HomeworkPercent' :canvas2d="true" canvasId="work_chart1" />
+				</view>
+			</view>
+
+			<view class="card-item" style="width: 100%;">
+				<view class="card-title">
+					<view class="front-tag"></view>
+					<view class="title">近期作业得分率</view>
+				</view>
+				<view class="chart-box">
+					<qiun-data-charts type="area" ontouch="true" :chartData="workChartData[1]"
+						tooltipFormat='HomeworkPercent' :canvas2d="true" canvasId="work_chart2" />
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState
+	} from 'vuex'
+	export default {
+		computed: {
+			...mapState('m_children', ['workData']),
+			...mapState('m_chart', ['workChartData']),
+		},
+		data() {
+			return {
+				dayTime: '',
+				weekTime: ''
+			};
+		},
+		onLoad() {
+			this.getToday()
+		},
+		methods: {
+			getToday() {
+				this.dayTime = (new Date()).format('M-d').replace('-', '月')
+				this.weekTime = "星期" + "日一二三四五六".charAt(new Date().getDay());
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import '@/subpkg/datalist/top_info.scss';
+	.chart-box {
+		width: 100%;
+		height: 500rpx;
+	}
+</style>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/examList.js


+ 7 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/examList.json

@@ -0,0 +1,7 @@
+{
+  "enablePullDownRefresh": false,
+  "navigationStyle": "custom",
+  "usingComponents": {
+    "top-return": "/components/top-return/top-return"
+  }
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/examList.wxml


+ 118 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/examList.wxss

@@ -0,0 +1,118 @@
+.card-view .card-item {
+  width: 100%;
+}
+.card-view .card-item .card-title {
+  display: flex;
+  align-items: center;
+  padding: 40rpx;
+  height: 40rpx;
+}
+.card-view .card-item .card-title .t-icon {
+  height: 40rpx;
+  width: 40rpx;
+  margin-right: 10rpx;
+}
+.card-view .card-item .card-title .state-seal {
+  width: 55px;
+  height: 55px;
+  margin-left: auto;
+  margin-right: -20rpx;
+}
+.card-view .card-item .card-info {
+  display: flex;
+  flex-direction: column;
+  margin: 0	40rpx 40rpx 40rpx;
+}
+.card-view .card-item .card-info .info-type {
+  font-size: 26rpx;
+  line-height: 30rpx;
+  color: #909399;
+}
+.card-view .card-item .content-box {
+  margin: 20rpx;
+  padding: 0 20rpx;
+  background-color: #f6f6f6;
+  border-radius: 10rpx;
+}
+.card-view .card-item .content-box .title-box {
+  position: relative;
+  top: -20rpx;
+  width: -webkit-fit-content;
+  width: fit-content;
+  height: 36rpx;
+  border-radius: 6rpx;
+  padding: 5rpx 20rpx;
+}
+.card-view .card-item .content-box .title-box .title-text {
+  font-size: 25rpx;
+  font-weight: bold;
+  color: #FFF;
+}
+.card-view .card-item .content-box .content-detail {
+  font-size: 30rpx;
+  font-weight: bold;
+  color: #303133;
+  word-break: break-all;
+}
+.card-view .card-item .content-box .content-subtitle {
+  font-size: 25rpx;
+  font-weight: bold;
+  color: #909399;
+}
+.report-title {
+  font-size: 75rpx;
+  line-height: 75rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 99;
+}
+.report-subtitle {
+  font-size: 40rpx;
+  font-family: YSfont;
+  margin-top: 40rpx;
+  margin-bottom: 20rpx;
+  color: #FFF;
+  z-index: 99;
+}
+.top-box {
+  display: flex;
+  flex-direction: column;
+  margin: 140rpx 0 0 50rpx;
+  height: 170rpx;
+  justify-content: space-around;
+}
+.top-box .info-title {
+  margin-left: 10rpx;
+  font-size: 70rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .info-subtitle {
+  margin-left: 10rpx;
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .data-title {
+  font-size: 60rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  margin-left: 20rpx;
+}
+.top-box .data-subtitle {
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  opacity: 0.8;
+  margin-left: 20rpx;
+}
+.tag-fill {
+  background-color: #ff8caf;
+}
+

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/swapList.js


+ 8 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/swapList.json

@@ -0,0 +1,8 @@
+{
+  "enablePullDownRefresh": false,
+  "navigationStyle": "custom",
+  "usingComponents": {
+    "top-return": "/components/top-return/top-return",
+    "u-parse": "/uni_modules/uview-ui/components/u-parse/u-parse"
+  }
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/swapList.wxml


+ 124 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/swapList.wxss

@@ -0,0 +1,124 @@
+.card-view .card-item {
+  width: 100%;
+}
+.card-view .card-item .card-title {
+  display: flex;
+  align-items: center;
+  padding: 40rpx;
+  height: 40rpx;
+}
+.card-view .card-item .card-title .t-icon {
+  height: 40rpx;
+  width: 40rpx;
+  margin-right: 10rpx;
+}
+.card-view .card-item .card-title .state-seal {
+  width: 55px;
+  height: 55px;
+  margin-left: auto;
+  margin-right: -20rpx;
+}
+.card-view .card-item .card-info {
+  display: flex;
+  flex-direction: column;
+  margin: 0	40rpx 40rpx 40rpx;
+}
+.card-view .card-item .card-info .info-type {
+  font-size: 26rpx;
+  line-height: 30rpx;
+  color: #909399;
+}
+.card-view .card-item .content-box {
+  margin: 20rpx;
+  padding: 0 20rpx;
+  background-color: #f6f6f6;
+  border-radius: 10rpx;
+}
+.card-view .card-item .content-box .title-box {
+  position: relative;
+  top: -20rpx;
+  width: -webkit-fit-content;
+  width: fit-content;
+  height: 36rpx;
+  border-radius: 6rpx;
+  padding: 5rpx 20rpx;
+}
+.card-view .card-item .content-box .title-box .title-text {
+  font-size: 25rpx;
+  font-weight: bold;
+  color: #FFF;
+}
+.card-view .card-item .content-box .content-detail {
+  font-size: 30rpx;
+  font-weight: bold;
+  color: #303133;
+  word-break: break-all;
+}
+.card-view .card-item .content-box .content-subtitle {
+  font-size: 25rpx;
+  font-weight: bold;
+  color: #909399;
+}
+.report-title {
+  font-size: 75rpx;
+  line-height: 75rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 99;
+}
+.report-subtitle {
+  font-size: 40rpx;
+  font-family: YSfont;
+  margin-top: 40rpx;
+  margin-bottom: 20rpx;
+  color: #FFF;
+  z-index: 99;
+}
+.top-box {
+  display: flex;
+  flex-direction: column;
+  margin: 140rpx 0 0 50rpx;
+  height: 170rpx;
+  justify-content: space-around;
+}
+.top-box .info-title {
+  margin-left: 10rpx;
+  font-size: 70rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .info-subtitle {
+  margin-left: 10rpx;
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .data-title {
+  font-size: 60rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  margin-left: 20rpx;
+}
+.top-box .data-subtitle {
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  opacity: 0.8;
+  margin-left: 20rpx;
+}
+.option-box {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 120rpx;
+  height: 50rpx;
+  border-radius: 10rpx;
+  padding: 5rpx;
+}
+

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/workList.js


+ 8 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/workList.json

@@ -0,0 +1,8 @@
+{
+  "enablePullDownRefresh": false,
+  "navigationStyle": "custom",
+  "usingComponents": {
+    "top-return": "/components/top-return/top-return",
+    "u-parse": "/uni_modules/uview-ui/components/u-parse/u-parse"
+  }
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/workList.wxml


+ 132 - 0
unpackage/dist/dev/mp-weixin/subpkg/datalist/workList.wxss

@@ -0,0 +1,132 @@
+.card-view .card-item {
+  width: 100%;
+}
+.card-view .card-item .card-title {
+  display: flex;
+  align-items: center;
+  padding: 40rpx;
+  height: 40rpx;
+}
+.card-view .card-item .card-title .t-icon {
+  height: 40rpx;
+  width: 40rpx;
+  margin-right: 10rpx;
+}
+.card-view .card-item .card-title .state-seal {
+  width: 55px;
+  height: 55px;
+  margin-left: auto;
+  margin-right: -20rpx;
+}
+.card-view .card-item .card-info {
+  display: flex;
+  flex-direction: column;
+  margin: 0	40rpx 40rpx 40rpx;
+}
+.card-view .card-item .card-info .info-type {
+  font-size: 26rpx;
+  line-height: 30rpx;
+  color: #909399;
+}
+.card-view .card-item .content-box {
+  margin: 20rpx;
+  padding: 0 20rpx;
+  background-color: #f6f6f6;
+  border-radius: 10rpx;
+}
+.card-view .card-item .content-box .title-box {
+  position: relative;
+  top: -20rpx;
+  width: -webkit-fit-content;
+  width: fit-content;
+  height: 36rpx;
+  border-radius: 6rpx;
+  padding: 5rpx 20rpx;
+}
+.card-view .card-item .content-box .title-box .title-text {
+  font-size: 25rpx;
+  font-weight: bold;
+  color: #FFF;
+}
+.card-view .card-item .content-box .content-detail {
+  font-size: 30rpx;
+  font-weight: bold;
+  color: #303133;
+  word-break: break-all;
+}
+.card-view .card-item .content-box .content-subtitle {
+  font-size: 25rpx;
+  font-weight: bold;
+  color: #909399;
+}
+.report-title {
+  font-size: 75rpx;
+  line-height: 75rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 99;
+}
+.report-subtitle {
+  font-size: 40rpx;
+  font-family: YSfont;
+  margin-top: 40rpx;
+  margin-bottom: 20rpx;
+  color: #FFF;
+  z-index: 99;
+}
+.top-box {
+  display: flex;
+  flex-direction: column;
+  margin: 140rpx 0 0 50rpx;
+  height: 170rpx;
+  justify-content: space-around;
+}
+.top-box .info-title {
+  margin-left: 10rpx;
+  font-size: 70rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .info-subtitle {
+  margin-left: 10rpx;
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .data-title {
+  font-size: 60rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  margin-left: 20rpx;
+}
+.top-box .data-subtitle {
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  opacity: 0.8;
+  margin-left: 20rpx;
+}
+.attachment-box {
+  display: flex;
+  margin-bottom: 20rpx;
+  align-items: center;
+  padding: 6rpx 20rpx;
+  background-color: #FFF;
+  border-radius: 10rpx;
+}
+.attachment-box .t-icon {
+  width: 60rpx;
+  height: 60rpx;
+}
+.attachment-box .attachment-info {
+  display: flex;
+  flex-direction: column;
+  margin: 20rpx 50rpx;
+}
+

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
unpackage/dist/dev/mp-weixin/subpkg/home/classList.js


+ 7 - 0
unpackage/dist/dev/mp-weixin/subpkg/home/classList.json

@@ -0,0 +1,7 @@
+{
+  "enablePullDownRefresh": true,
+  "navigationStyle": "custom",
+  "usingComponents": {
+    "top-return": "/components/top-return/top-return"
+  }
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
unpackage/dist/dev/mp-weixin/subpkg/home/classList.wxml


+ 150 - 0
unpackage/dist/dev/mp-weixin/subpkg/home/classList.wxss

@@ -0,0 +1,150 @@
+.top-box {
+  display: flex;
+  flex-direction: column;
+  margin: 140rpx 0 0 50rpx;
+  height: 170rpx;
+  justify-content: space-around;
+}
+.top-box .info-title {
+  margin-left: 10rpx;
+  font-size: 70rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .info-subtitle {
+  margin-left: 10rpx;
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .data-title {
+  font-size: 60rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  margin-left: 20rpx;
+}
+.top-box .data-subtitle {
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  opacity: 0.8;
+  margin-left: 20rpx;
+}
+.week-view {
+  white-space: nowrap;
+}
+.week-view .week-item {
+  display: inline-block;
+  vertical-align: top;
+  height: 140rpx;
+  width: 120rpx;
+  margin: 20rpx;
+  padding: 20rpx;
+  border-radius: 12rpx;
+  background-color: #FFF;
+}
+.week-view .week-item .item-box {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: space-around;
+}
+.week-view .week-item .item-box .item-title {
+  font-size: 30rpx;
+  color: #898b91;
+}
+.week-view .week-item .item-box .item-day {
+  font-size: 40rpx;
+  font-weight: bold;
+  color: #505155;
+}
+.week-view .week-item-select {
+  display: inline-block;
+  vertical-align: top;
+  height: 160rpx;
+  width: 140rpx;
+  margin: 20rpx;
+  padding: 20rpx;
+  border-radius: 12rpx;
+  background-color: #FFF;
+  border: 3px solid #303133;
+}
+.week-view .week-item-select .item-box {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: space-between;
+}
+.week-view .week-item-select .item-box .tag-fill {
+  border-radius: 6rpx;
+  background-color: #303133;
+  padding: 5rpx 20rpx;
+}
+.week-view .week-item-select .item-box .tag-fill .tag-text {
+  font-size: 28rpx;
+  color: #FFF;
+}
+.week-view .week-item-select .item-box .item-title {
+  font-size: 34rpx;
+  color: #303133;
+}
+.week-view .week-item-select .item-box .item-day {
+  font-size: 50rpx;
+  font-weight: bold;
+  color: #303133;
+}
+.class-list {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  margin: 0 30rpx 20rpx 30rpx;
+}
+.class-list .class-item {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-around;
+  margin: 10rpx 0;
+  padding: 10rpx 0;
+  height: 100rpx;
+  border-bottom: 4rpx solid #f3f4f9;
+  border-top: 4rpx solid #f3f4f9;
+  border-image: linear-gradient(to right, #FFF, #d5d5d5) 1;
+}
+.class-list .class-item .item-title {
+  font-size: 32rpx;
+  font-weight: bold;
+  color: #303133;
+}
+.class-list .class-item .item-subtitle {
+  font-size: 30rpx;
+  font-weight: bold;
+  color: #909399;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.image-box {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+  align-items: center;
+  margin-bottom: 70rpx;
+}
+.detail-image1 {
+  width: 500rpx;
+  height: 600rpx;
+  background-size: 100%;
+  background-repeat: no-repeat;
+  z-index: 51;
+}
+

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
unpackage/dist/dev/mp-weixin/subpkg/home/clockStats.js


+ 9 - 0
unpackage/dist/dev/mp-weixin/subpkg/home/clockStats.json

@@ -0,0 +1,9 @@
+{
+  "enablePullDownRefresh": false,
+  "navigationStyle": "custom",
+  "disableScroll": true,
+  "usingComponents": {
+    "top-return": "/components/top-return/top-return",
+    "zsy-calendar": "/components/z-calendar/zsy-calendar"
+  }
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
unpackage/dist/dev/mp-weixin/subpkg/home/clockStats.wxml


+ 75 - 0
unpackage/dist/dev/mp-weixin/subpkg/home/clockStats.wxss

@@ -0,0 +1,75 @@
+.number {
+  font-size: 50rpx;
+  font-weight: bold;
+  color: #303133;
+}
+.number-detail {
+  margin-top: 10rpx;
+  font-size: 30rpx;
+  color: #909399;
+}
+.state-box {
+  display: flex;
+  align-items: center;
+  height: 200rpx;
+  width: 100%;
+}
+.state-box .state {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: 100%;
+  margin: 20rpx;
+  height: 150rpx;
+  width: 150rpx;
+}
+.state-box .state .state-text {
+  font-size: 32rpx;
+  font-weight: bold;
+  color: #FFF;
+}
+.state-box .msg-box {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-around;
+  height: 150rpx;
+  width: auto;
+}
+.state-box .msg-box .msg-text {
+  color: #303133;
+  font-weight: bold;
+  font-size: 36rpx;
+  margin-left: 15rpx;
+}
+.calendar-container {
+  height: 100%;
+  width: 100%;
+  background-color: #FFF;
+  margin: 0 auto;
+  box-sizing: border-box;
+  border-radius: 12rpx;
+}
+.image {
+  margin-left: auto;
+  margin-right: 20rpx;
+  width: 200rpx;
+  height: 200rpx;
+  border-radius: 12rpx;
+  background-size: 100%;
+  background-repeat: no-repeat;
+}
+.box_tag {
+  margin-right: 20rpx;
+  height: 100%;
+  width: 10rpx;
+  background-color: #303133;
+  z-index: 99;
+}
+.clock-stats {
+  display: flex;
+  align-items: center;
+  justify-content: space-around;
+  height: 180rpx;
+  margin-bottom: 20rpx;
+}
+

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
unpackage/dist/dev/mp-weixin/subpkg/mine/childInfo.js


+ 9 - 0
unpackage/dist/dev/mp-weixin/subpkg/mine/childInfo.json

@@ -0,0 +1,9 @@
+{
+  "enablePullDownRefresh": true,
+  "navigationStyle": "custom",
+  "disableScroll": true,
+  "usingComponents": {
+    "top-return": "/components/top-return/top-return",
+    "u-avatar-group": "/uni_modules/uview-ui/components/u-avatar-group/u-avatar-group"
+  }
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
unpackage/dist/dev/mp-weixin/subpkg/mine/childInfo.wxml


+ 95 - 0
unpackage/dist/dev/mp-weixin/subpkg/mine/childInfo.wxss

@@ -0,0 +1,95 @@
+.flex-column {
+  height: 80rpx;
+  justify-content: space-between;
+}
+.detail-image {
+  position: fixed;
+  width: 100%;
+  height: 800rpx;
+}
+.top-info {
+  display: flex;
+  align-items: center;
+  margin-top: 180rpx;
+}
+.top-info .avatar {
+  margin-left: 50rpx;
+  width: 140rpx;
+  height: 140rpx;
+  border-radius: 100%;
+  border: 6rpx solid #FFF;
+  box-shadow: 0 10rpx 20rpx rgba(0, 0, 0, 0.2);
+  z-index: 55;
+}
+.top-info .top-name {
+  margin-left: 50rpx;
+  height: 130rpx;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-around;
+  font-weight: bold;
+}
+.top-info .top-name .name {
+  color: #303133;
+  font-size: 45rpx;
+  font-weight: bold;
+  z-index: 55;
+}
+.top-info .top-name .t-icon {
+  width: 32rpx;
+  height: 32rpx;
+  margin-right: 5rpx;
+}
+.main-card {
+  display: flex;
+  flex-direction: column;
+  padding: 80rpx 80rpx 0 80rpx;
+  position: relative;
+  background-color: #FFF;
+  height: 100%;
+  top: 80rpx;
+  left: 50rpx;
+  border-radius: 50rpx;
+  border-bottom-left-radius: 0;
+  z-index: 55;
+}
+.main-card .title {
+  line-height: 32rpx;
+  font-size: 32rpx;
+  font-weight: 400;
+  color: #303133;
+}
+.main-card .subtitle {
+  line-height: 28rpx;
+  font-size: 28rpx;
+  color: #909399;
+  font-weight: 400;
+}
+.main-card .t-icon {
+  margin-right: 30rpx;
+  width: 80rpx;
+  height: 80rpx;
+}
+.box_title {
+  line-height: 35rpx;
+  font-size: 35rpx;
+  font-weight: bold;
+  color: #303133;
+}
+.flex-column-box {
+  display: flex;
+  flex-direction: column;
+}
+.flex-column-box .column-title {
+  line-height: 35rpx;
+  font-size: 32rpx;
+  font-weight: bold;
+  color: #303133;
+}
+.tag-fill {
+  background-color: #d8deff;
+  width: -webkit-fit-content;
+  width: fit-content;
+  z-index: 99;
+}
+

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
unpackage/dist/dev/mp-weixin/subpkg/mine/parentInfo.js


+ 8 - 0
unpackage/dist/dev/mp-weixin/subpkg/mine/parentInfo.json

@@ -0,0 +1,8 @@
+{
+  "enablePullDownRefresh": true,
+  "navigationStyle": "custom",
+  "disableScroll": true,
+  "usingComponents": {
+    "top-return": "/components/top-return/top-return"
+  }
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
unpackage/dist/dev/mp-weixin/subpkg/mine/parentInfo.wxml


+ 133 - 0
unpackage/dist/dev/mp-weixin/subpkg/mine/parentInfo.wxss

@@ -0,0 +1,133 @@
+.flex-column {
+  display: flex;
+  flex-direction: column;
+  height: 80rpx;
+  justify-content: space-between;
+}
+.detail-image {
+  position: fixed;
+  width: 100%;
+  height: 800rpx;
+}
+.top-info {
+  display: flex;
+  align-items: center;
+  margin-top: 180rpx;
+}
+.top-info .top-avatar {
+  margin-left: 50rpx;
+  width: 140rpx;
+  height: 140rpx;
+  border-radius: 100%;
+  border: 6rpx solid #FFF;
+  box-shadow: 0 10rpx 20rpx rgba(0, 0, 0, 0.2);
+  z-index: 55;
+}
+.top-info .top-name {
+  margin-left: 50rpx;
+  height: 130rpx;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-around;
+  font-weight: bold;
+}
+.top-info .top-name .name {
+  color: #303133;
+  font-size: 45rpx;
+  font-weight: bold;
+  z-index: 55;
+}
+.top-info .top-name .t-icon {
+  width: 32rpx;
+  height: 32rpx;
+  margin-right: 5rpx;
+}
+.main-card {
+  display: flex;
+  flex-direction: column;
+  padding: 80rpx 80rpx 0 80rpx;
+  position: relative;
+  background-color: #FFF;
+  height: 100%;
+  top: 80rpx;
+  left: 50rpx;
+  border-radius: 50rpx;
+  border-bottom-left-radius: 0;
+  z-index: 55;
+}
+.main-card .title {
+  line-height: 32rpx;
+  font-size: 32rpx;
+  font-weight: 400;
+  color: #303133;
+}
+.main-card .subtitle {
+  line-height: 28rpx;
+  font-size: 28rpx;
+  color: #909399;
+  font-weight: 400;
+}
+.main-card .t-icon {
+  margin-right: 30rpx;
+  width: 80rpx;
+  height: 80rpx;
+}
+.flex-column-box {
+  display: flex;
+  flex-direction: column;
+}
+.flex-column-box .column-title {
+  line-height: 35rpx;
+  font-size: 32rpx;
+  font-weight: bold;
+  color: #303133;
+}
+.card-box {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+}
+.card-box .card {
+  width: 100%;
+  margin: 10rpx 0 10rpx 0;
+  padding: 20rpx;
+  display: flex;
+  align-items: center;
+  border: 2rpx solid #f3f4f9;
+  background-color: #FFFFFF;
+  border-radius: 12rpx;
+  z-index: 99;
+}
+.card-box .card .card-title {
+  margin-left: 20rpx;
+  font-size: 28rpx;
+  color: #303133;
+}
+.card-box .card .card-subtitle {
+  line-height: 26rpx;
+  font-size: 26rpx;
+  color: #909399;
+}
+.card-box .card .avatar {
+  width: 100rpx;
+  height: 100rpx;
+}
+.tag-fill {
+  background-color: #d8deff;
+  width: -webkit-fit-content;
+  width: fit-content;
+  z-index: 99;
+}
+.card-info {
+  display: flex;
+  flex-direction: column;
+  margin-left: 30rpx;
+  height: 100rpx;
+  justify-content: space-around;
+}
+.card-info .t-icon {
+  width: 32rpx;
+  height: 32rpx;
+  margin-right: 5rpx;
+}
+

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
unpackage/dist/dev/mp-weixin/subpkg/swap/swapStats.js


+ 9 - 0
unpackage/dist/dev/mp-weixin/subpkg/swap/swapStats.json

@@ -0,0 +1,9 @@
+{
+  "enablePullDownRefresh": false,
+  "navigationStyle": "custom",
+  "usingComponents": {
+    "top-return": "/components/top-return/top-return",
+    "u-picker": "/uni_modules/uview-ui/components/u-picker/u-picker",
+    "qiun-data-charts": "/uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts"
+  }
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
unpackage/dist/dev/mp-weixin/subpkg/swap/swapStats.wxml


+ 88 - 0
unpackage/dist/dev/mp-weixin/subpkg/swap/swapStats.wxss

@@ -0,0 +1,88 @@
+.top-box {
+  display: flex;
+  flex-direction: column;
+  margin: 140rpx 0 0 50rpx;
+  height: 170rpx;
+  justify-content: space-around;
+}
+.top-box .info-title {
+  margin-left: 10rpx;
+  font-size: 70rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .info-subtitle {
+  margin-left: 10rpx;
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .data-title {
+  font-size: 60rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  margin-left: 20rpx;
+}
+.top-box .data-subtitle {
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  opacity: 0.8;
+  margin-left: 20rpx;
+}
+.chart-box {
+  width: 100%;
+  height: 500rpx;
+}
+.flex-column-box {
+  margin: 20rpx 0;
+  display: flex;
+  flex-direction: column;
+  z-index: 55;
+}
+.module-box {
+  display: flex;
+  flex-flow: row wrap;
+  margin: 0 20rpx;
+  justify-content: space-between;
+}
+.module-box .module-item {
+  margin: 2% 0;
+  width: 48%;
+  height: auto;
+  display: flex;
+  flex-direction: column;
+  padding: 24rpx 0 20rpx 0;
+  background-color: #FFF;
+  border-radius: 20rpx;
+  justify-content: space-between;
+  overflow: hidden;
+  z-index: 3;
+}
+.module-box .module-item .module-item-text {
+  line-height: 80rpx;
+  color: #FFF;
+  font-size: 50rpx;
+  font-family: YSfont;
+  z-index: 5;
+}
+.module-box .module-item .module-item-subtext {
+  line-height: 80rpx;
+  color: #FFF;
+  font-size: 30rpx;
+  font-weight: bold;
+  z-index: 5;
+}
+.module-box .t-icon {
+  width: 250rpx;
+  height: 250rpx;
+  margin: -250rpx 0 0 160rpx;
+  z-index: 1;
+}
+

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
unpackage/dist/dev/mp-weixin/subpkg/work/workStats.js


+ 8 - 0
unpackage/dist/dev/mp-weixin/subpkg/work/workStats.json

@@ -0,0 +1,8 @@
+{
+  "enablePullDownRefresh": false,
+  "navigationStyle": "custom",
+  "usingComponents": {
+    "top-return": "/components/top-return/top-return",
+    "qiun-data-charts": "/uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts"
+  }
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
unpackage/dist/dev/mp-weixin/subpkg/work/workStats.wxml


+ 43 - 0
unpackage/dist/dev/mp-weixin/subpkg/work/workStats.wxss

@@ -0,0 +1,43 @@
+.top-box {
+  display: flex;
+  flex-direction: column;
+  margin: 140rpx 0 0 50rpx;
+  height: 170rpx;
+  justify-content: space-around;
+}
+.top-box .info-title {
+  margin-left: 10rpx;
+  font-size: 70rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .info-subtitle {
+  margin-left: 10rpx;
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  text-shadow: 1px -1px 0px #c0c0c0, 2px -2px 0px #b0b0b0, 1px -1px 0px #a0a0a0, 2px -2px 0px #909090;
+}
+.top-box .data-title {
+  font-size: 60rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  margin-left: 20rpx;
+}
+.top-box .data-subtitle {
+  font-size: 40rpx;
+  font-family: YSfont;
+  color: #FFF;
+  z-index: 2;
+  opacity: 0.8;
+  margin-left: 20rpx;
+}
+.chart-box {
+  width: 100%;
+  height: 500rpx;
+}
+