瀏覽代碼

持续优化

wenningning 2 年之前
父節點
當前提交
ac3cd7ec06
共有 57 個文件被更改,包括 374 次插入15346 次删除
  1. 4 4
      sleep/api/doctor_advert.js
  2. 6 6
      sleep/api/sleep_report.js
  3. 47 0
      sleep/api/vitalSignsLook.js
  4. 0 221
      sleep/components/Mark-Tab/ScrollNav.vue
  5. 0 192
      sleep/components/Mark-Tab/Tab.vue
  6. 1 1
      sleep/manifest.json
  7. 1 41
      sleep/pages.json
  8. 84 101
      sleep/pages/home/index.vue
  9. 0 135
      sleep/pages/index/components/musicList.vue
  10. 0 55
      sleep/pages/index/components/singerList.vue
  11. 0 98
      sleep/pages/index/components/songList.vue
  12. 18 18
      sleep/pages/my/index.vue
  13. 0 399
      sleep/pages/play/index.vue
  14. 68 73
      sleep/pages/report/report.vue
  15. 0 58
      sleep/pages/search/components/historySearch.vue
  16. 0 94
      sleep/pages/search/components/hotSearch.vue
  17. 0 52
      sleep/pages/search/index.vue
  18. 0 181
      sleep/pages/searchList/index.vue
  19. 144 18
      sleep/pages/shareUser/shareUser.vue
  20. 0 233
      sleep/pages/singer/index.vue
  21. 0 283
      sleep/pages/singerPlayList/index.vue
  22. 0 276
      sleep/pages/songDetail/index.vue
  23. 0 266
      sleep/pages/songList/index.vue
  24. 二進制
      sleep/static/NO1.png
  25. 二進制
      sleep/static/NO2.png
  26. 二進制
      sleep/static/NO3.png
  27. 二進制
      sleep/static/familyBg.png
  28. 二進制
      sleep/static/home/homeBg2.png
  29. 二進制
      sleep/static/home/homeBgHeart.png
  30. 二進制
      sleep/static/home/homeHead.png
  31. 二進制
      sleep/static/home/homeReportBg.png
  32. 二進制
      sleep/static/music.png
  33. 二進制
      sleep/static/musicImg.png
  34. 0 8
      sleep/uni_modules/luyj-steps/changelog.md
  35. 0 264
      sleep/uni_modules/luyj-steps/components/luyj-steps/luyj-steps.vue
  36. 0 79
      sleep/uni_modules/luyj-steps/package.json
  37. 0 43
      sleep/uni_modules/luyj-steps/readme.md
  38. 0 320
      sleep/uni_modules/qiun-data-charts/changelog.md
  39. 0 1618
      sleep/uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue
  40. 0 46
      sleep/uni_modules/qiun-data-charts/components/qiun-error/qiun-error.vue
  41. 0 162
      sleep/uni_modules/qiun-data-charts/components/qiun-loading/loading1.vue
  42. 0 170
      sleep/uni_modules/qiun-data-charts/components/qiun-loading/loading2.vue
  43. 0 173
      sleep/uni_modules/qiun-data-charts/components/qiun-loading/loading3.vue
  44. 0 222
      sleep/uni_modules/qiun-data-charts/components/qiun-loading/loading4.vue
  45. 0 229
      sleep/uni_modules/qiun-data-charts/components/qiun-loading/loading5.vue
  46. 0 36
      sleep/uni_modules/qiun-data-charts/components/qiun-loading/qiun-loading.vue
  47. 0 422
      sleep/uni_modules/qiun-data-charts/js_sdk/u-charts/config-echarts.js
  48. 0 606
      sleep/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js
  49. 0 5
      sleep/uni_modules/qiun-data-charts/js_sdk/u-charts/readme.md
  50. 0 7706
      sleep/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js
  51. 0 18
      sleep/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.min.js
  52. 0 201
      sleep/uni_modules/qiun-data-charts/license.md
  53. 0 81
      sleep/uni_modules/qiun-data-charts/package.json
  54. 0 84
      sleep/uni_modules/qiun-data-charts/readme.md
  55. 0 23
      sleep/uni_modules/qiun-data-charts/static/app-plus/echarts.min.js
  56. 0 23
      sleep/uni_modules/qiun-data-charts/static/h5/echarts.min.js
  57. 1 2
      sleep/utils/request.js

+ 4 - 4
sleep/api/doctor_advert.js

@@ -7,8 +7,8 @@ import request, { Method } from '@/utils/request'
  */
 export function getDoctorAdvertList(params) {
   return request({
-    url: 'care/care_device_member_bind/pageList', // 先写死
-    // url: 'care/health_advert/pageList',
+    // url: 'care/care_device_member_bind/pageList', // 先写死
+    url: 'care/health_advert/pageList',
     config: {method: Method.POST, needToken: false, loading: true},
     params
   })
@@ -17,8 +17,8 @@ export function getDoctorAdvertList(params) {
 /** 查询单个健康宣教 列表编辑按钮进入编辑页面时调用 */
 export function getDoctorAdvert(id, params) {
   return request({
-    url: `care/care_device_member_bind/health_advert/${id}`, // 先写死
-    // url: `care/health_advert/${id}`,
+    // url: `care/care_device_member_bind/health_advert/${id}`, // 先写死
+    url: `care/health_advert/${id}`,
     config: {method: Method.GET, needToken: false, loading: true},
     params
   })

+ 6 - 6
sleep/api/sleep_report.js

@@ -7,8 +7,8 @@ import request, { Method,API } from '@/utils/request'
 // 获取最近一天的睡眠报告
 export function getNewListByUnionId(params){
     return request({
-        // url: `care/sleep_report/get_new_list_by_union_id`,
-        url: `${API.base}/xiaomian/get_new_list_by_union_id`,  // 先写死
+        url: `care/sleep_report/get_new_list_by_union_id`,
+        // url: `${API.base}/xiaomian/get_new_list_by_union_id`,  // 先写死
         config: {method: Method.POST, needToken: true, loading: true},
         params
     })
@@ -17,8 +17,8 @@ export function getNewListByUnionId(params){
 // 获取日历上有值的天数
 export function getSleepReportDaysTag(params){
     return request({
-        url: `${API.base}/xiaomian/get_sleep_report_days_tag`,  // 先写死
-        // url: `care/sleep_report/get_sleep_report_days_tag`,
+        // url: `${API.base}/xiaomian/get_sleep_report_days_tag`,  // 先写死
+        url: `care/sleep_report/get_sleep_report_days_tag`,
         config: {method: Method.POST, needToken: true, loading: true},
         params
     })
@@ -44,8 +44,8 @@ export function getWarnResult(imei){
 // 根据imei与用户unionId获取最新报告
 export function getNewReportBySn(params){
     return request({
-        url: `xiaomian/get_new_report_by_sn`, // 先写死
-        // url: `care/sleep_report/get_new_report_by_sn`,
+        // url: `xiaomian/get_new_report_by_sn`, // 先写死
+        url: `care/sleep_report/get_new_report_by_sn`,
         config: {method: Method.GET, needToken: true, loading: true},
         params
     })

+ 47 - 0
sleep/api/vitalSignsLook.js

@@ -0,0 +1,47 @@
+/**
+ * 亲友体征API
+ */
+
+import request, {Method} from '@/utils/request'
+
+//================ /care/carolie_item
+/**
+ * @param {Object} params page_no,page_size
+ */
+export function getList(params) {
+    return request({
+        url: `care/carolie_log_look/page`,
+        config: {method: Method.POST, needToken: true, loading: true},
+        params
+    })
+}
+
+
+/** 删除 */
+export function deleteLogLook(params) {
+    const ids = params.toString()
+    return request({
+        url: `care/carolie_log_look/${ids}`,
+        config: {method: Method.DELETE, needToken: true, loading: true},
+        params
+    })
+}
+
+/** 新增 */
+export function addLogLook(params) {
+    return request({
+        url: `care/carolie_log_look`,
+        config: {method: Method.POST, needToken: true, loading: true},
+        params
+    })
+}
+
+/** 新增 */
+export function addByMobile(params) {
+    return request({
+        url: `care/carolie_log_look/add_by_mobile`,
+        config: {method: Method.POST, needToken: true, loading: true},
+        params
+    })
+}
+

+ 0 - 221
sleep/components/Mark-Tab/ScrollNav.vue

@@ -1,221 +0,0 @@
-<template>
-    <view class="component-view-scroll-nav" :style="[{position:tabStyle.position,left:tabStyle.left,top:tabStyle.top,bottom:tabStyle.bottom,right:tabStyle.right}]">
-		<scroll-view scroll-x :scroll-with-animation="animate" enable-flex class="navbar" :scroll-left="navStyle.scrollLeft" :skip-hidden-item-layout="true" :style="{height,background}">
-			<view class="nav-wrapper">
-				<view @click="changeTab(key)" :class="['nav-item',{'active':key === modelKey}]" v-for="(item,key) in scrollData" :key="key" :style="{background:fontStyle[key === modelKey?'active':'default']['background']}">
-					<text :class="['item-label',{animate}]" v-text="item.label" :style="[{fontSize:fontStyle[key === modelKey?'active':'default']['fontSize'],color:fontStyle[key === modelKey?'active':'default']['color']}]"></text>
-				</view>
-				<view :class="['line',{animate}]" :style="[{'width':navStyle.width+'px','left':navStyle.left+'px','height':lineStyle.height}]">
-					<view class="s" :style="[{width:lineStyle.width,'backgroundColor':lineStyle.backgroundColor}]"></view>
-				</view>
-			</view>	
-		</scroll-view>
-	</view>
-</template>
-<script>
-const propStyleMap = {
-	line:{
-		color:'backgroundColor',
-		height:'height',
-		width:'width'
-	},
-	font:{
-		default:{
-			defaultColor:'color',
-			defaultSize:'fontSize',
-			defaultBackground:'background'
-		},
-		active:{
-			activeColor:'color',
-			activeSize:'fontSize',
-			activeBackground:'background'
-		}
-	},
-	fixed:{
-		top:'top',
-		left:'left',
-		bottom:'bottom',
-		right:'right'
-	}
-};
-export default {
-    components: {},
-    props: {
-		scrollData:{
-			default:[],
-			type:Array
-		},
-		activeKey:{
-			default:0,
-			type:Number
-		},
-		animate:{
-			default:true,
-			type:Boolean
-		},
-		height:{
-			default:'70rpx',
-			type:String
-		},
-		line:{
-			default:()=>({}),
-			type:Object
-		},
-		font:{
-			default:()=>({}),
-			type:Object
-		},
-		background:{
-			default:'transparent',
-			type:String
-		},
-		fixed:{
-			default:()=>({}),
-			type:Object
-		}
-	},
-	emits:['tabClick','change','update:activeKey','rendered'],
-    // mixins: [require('@/components/mixins/Component').default],
-    data() {
-        return {
-			modelKey:null,
-			navStyle:{
-				width:0,
-				left:0,
-				scrollLeft:0
-			}
-		};
-    },
-    created() {
-	},
-    mounted() {},
-    unmounted() {},
-    computed: {
-		lineStyle:{
-			get(){
-				return this.formatProp('line');
-			}
-		},
-		fontStyle:{
-			get(){
-				const font = this.font;
-				var style = {};
-				for(var key in propStyleMap.font){
-					style[key] = {};
-					var cfg = propStyleMap.font[key];
-					for(var ck in font){
-						ck in cfg && (style[key][cfg[ck]] = font[ck]);
-					}
-				}
-				return style;
-			}
-		},
-		tabStyle:{
-			get(){
-				const formated = this.formatProp('fixed');
-				Object.keys(formated).length && Object.assign(formated,{
-					position:'fixed'
-				});
-				return formated;
-			}
-		}
-	},
-    watch: {
-		activeKey:{
-			handler(n){
-				n !== this.modelKey && this.render(n);
-			},
-			deep:true,
-			immediate:true
-		}
-	},
-    methods: {
-		init(){
-
-		},
-		load(){
-
-		},
-		formatProp(prop){
-			const oThis = this[prop];
-			var props = {};
-			for(var key in oThis){
-				key in propStyleMap[prop] && (props[propStyleMap[prop][key]] = oThis[key]);
-			}
-			return props;
-		},
-		$document(self, select, cfg) {
-			return new Promise((res, rej) => {
-				if (!self || !select) rej('$document:params error');
-				uni.createSelectorQuery().in(self).select(select).fields(Object.assign({
-					id: true,
-					dataset: true,
-					rect:true,
-					size: true,
-					scrollOffset: true,
-					context:true
-				},cfg),data=>res(data)).exec();
-			})
-		},
-		async render(e){
-			this.move = true;
-			this.modelKey = e;
-			await this.$nextTick();
-			await this.changeStyle(e);
-			await new Promise(r=>setTimeout(r,300));
-			this.move = false;
-		},
-		async changeTab(e){
-			!this.move && (async()=>{
-				this.$emit('tabClick',e);
-				if(this.modelKey !== e){
-					this.$emit('update:activeKey',e);
-					this.$emit('change',e);
-					await this.render(e);
-				}
-			})();
-		},
-		async changeStyle(e){
-			var active = await this.$document(this,'.nav-item.active'),
-				scroll = await this.$document(this,'.navbar');
-			if(active && scroll){
-				var left = active.left+scroll.scrollLeft;
-				Object.assign(this.navStyle,{
-					width:active.width,
-					left,
-					...(this.animate ? {scrollLeft:left - scroll.width/2 + active.width/2} : null)
-				});
-			}
-		}
-	},
-    directives: {},
-    errorCaptured() {},
-    renderTracked() {},
-    renderTriggered() {},
-	
-};
-</script>
-<style lang='stylus'>
-$animate = {transition:all .3s linear};
-.component-view-scroll-nav
-	width 100%;z-index 999;
-	.navbar
-		overflow auto;display flex;width 100%;height 70rpx;position relative;background-color #fff;
-		.nav-wrapper
-			display flex;position relative;width 100%;
-			.line
-				position absolute;bottom 0;height 4rpx;
-				&.animate
-					transition all .3s linear;
-				.s
-					width 100%;height 100%;margin 0 auto;background-color #02c4c7;border-radius 2rpx;max-width:100%;transition @transition;
-		.nav-item
-			display flex;align-items center;padding 0 30rpx;white-space nowrap;width 100%;justify-content center;
-			&.active
-				.item-label
-					color #02c4c7;
-					&.animate
-						transition color .3s linear;
-			.item-label
-				font-size 24rpx;color #333;
-</style>

+ 0 - 192
sleep/components/Mark-Tab/Tab.vue

@@ -1,192 +0,0 @@
-<template>
-    <view class="component-view-tab">
-		<scroll-nav :fixed="tabFix" ref="scrollNav" :background="background" :scrollData="scrollData" :activeKey.sync="activeKey" @change="changeTab" @tabClick="tabClick" :animate="animate" :height="height" :line="line" :font="font"></scroll-nav>
-		<view class="scroll-view">
-			<view :class="['tab-wrapper',{animate}]" :style="[{left:tabview.left+'px'}]">
-				<view class="tab" v-for="(item,key) in scrollData" :key="key">
-					<view v-if="forceRender ? true :activeKey === key" class="tab-content" @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd($event,key)">
-						<slot name="{{item.slot}}"/>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-<script>
-import scrollNav from './ScrollNav';
-export default {
-    components: {scrollNav},
-    props: {
-		navData:{
-			default:()=>[],
-			type:Array
-		},
-		value:{
-			default:0,
-			type:Number
-		},
-		animate:{
-			default:true,
-			type:Boolean
-		},
-		scrollThreshold:{
-			default:50,
-			type:Number
-		},
-		height:{
-			default:'70rpx',
-			type:String
-		},
-		line:Object,
-		font:Object,
-		background:String,
-		forceRender:{
-			default:false,
-			type:Boolean
-		},
-		tabFix:Object
-	},
-    // mixins: [require('@/components/mixins/Component').default],
-    data() {
-        return {
-			tabview:{
-				left:0
-			},
-			scrollData:[],												
-            activeKey:0
-		};
-    },
-	emits:['change','update:value','tabClick','rendered'],
-    created() {
-	},
-    mounted() {},
-    unmounted() {},
-    computed: {
-	},
-    watch: {
-		navData:{
-			handler(n){
-				this.scrollData = n;
-				this.$nextTick(this.resizeStyle);
-			},
-			deep:true,
-			immediate:true
-		},
-		value:{
-			handler(n){
-				this.setPosition(n,'set');
-			},
-			deep:true,
-			immediate:true
-		}
-	},
-    methods: {
-		async init(){
-		},
-		load(){},
-		$document(self, select, cfg) {
-			return new Promise((res, rej) => {
-				if (!self || !select) rej('$document:params error');
-				uni.createSelectorQuery().in(self).select(select).fields(Object.assign({
-					id: true,
-					dataset: true,
-					rect:true,
-					size: true,
-					scrollOffset: true,
-					context:true
-				},cfg),data=>res(data)).exec();
-			})
-		},
-		async changeTab(e){
-			await this.setPosition(e);
-        },
-		tabClick(e){
-			this.$emit('tabClick',this.handleItem(e));
-		},
-		handleItem(e){
-			return {
-				index:e,
-				item:this.scrollData[e]
-			}
-		},
-		touchStart(e){
-			if(this.locked) return;
-			var client = e.touches[0];
-			Object.assign(this,{
-				client,
-				position:[client]
-			});
-		},
-		touchMove(e){
-			if(!this.position) return;
-			var client = e.touches[0];
-			if(Math.abs(client.clientY - this.client.clientY) < 25){
-				this.position.push(client);
-				const 
-					positions = this.position.map(item=>Object.assign({},item)),
-					sorted = positions.sort((a,b)=>a.clientX - b.clientX);
-				if(sorted[0].clientX !== client.clientX && sorted.slice(-1)[0].clientX !== client.clientX){
-					this.clearPosition();
-				}
-			}else{
-				this.clearPosition();
-			}
-		},
-		async touchEnd(e,key){
-			var 
-				positions = this.position,
-				act;
-			if(positions){
-				var move = positions.slice(-1)[0].clientX - positions[0].clientX;
-				if(Math.abs(move) < this.scrollThreshold) return;
-				act = move > 0 ? 1 : -1;
-				var changeKey = key - act;
-				if(changeKey < 0 || changeKey > this.navData.length - 1) return;
-				await this.setPosition(changeKey);
-				this.clearPosition();
-			}
-		},
-		async setPosition(key,act){
-			this.locked = true;
-			switch(act){
-				case 'set':
-					break;
-				default:
-					this.$emit('update:value',key);
-					this.$emit('change',this.handleItem(key));
-			}
-			this.activeKey = key;
-			try{
-				!this.itemWidth && (this.itemWidth = (await this.$document(this,'.tab')).width);
-				this.tabview.left = -key * this.itemWidth;
-			}catch(e){}
-			await new Promise(r=>setTimeout(r,300));
-			this.locked && (this.locked = false);
-		},
-		clearPosition(){
-			this.position = null;
-		},
-		resizeStyle(){
-			this.$refs.scrollNav.changeStyle(this.activeKey);
-		}
-	},
-    directives: {},
-    errorCaptured() {},
-    renderTracked() {},
-    renderTriggered() {},
-};
-</script>
-<style lang='stylus'>
-.component-view-tab
-	width 100%;overflow auto;
-	.scroll-view
-		overflow hidden;width 100%;max-width 100%;
-		.tab-wrapper
-			width 100%;display flex;felx-wrap:nowrap;position relative;
-			&.animate
-				transition all .3s;
-			.tab
-				min-width 100%;max-width 100%;
-				.tab-content
-					overflow hidden;width 100%;height 100%;
-</style>

+ 1 - 1
sleep/manifest.json

@@ -85,7 +85,7 @@
     },
     "quickapp" : {},
     "mp-weixin" : {
-        "appid" : "wx39e390ff4635fc8e",
+        "appid" : "wx97a109e5a40588dc",
         "requiredBackgroundModes" : [ "audio" ],
         "setting" : {
             "urlCheck" : true,

+ 1 - 41
sleep/pages.json

@@ -43,46 +43,12 @@
 			}
 		},
 		{
-			"path": "pages/search/index",
-			"style": {
-				"enablePullDownRefresh": false
-			}
-		},
-		{
-			"path": "pages/searchList/index",
-			"style": {
-				"enablePullDownRefresh": false
-			}
-		},
-		{
-			"path": "pages/play/index",
-			"style": {
-				"enablePullDownRefresh": false
-			}
-		},
-		{
-			"path": "pages/songDetail/index",
-			"style": {
-				"enablePullDownRefresh": false
-			}
-		},
-		{
 			"path": "pages/dayRecommend/index",
 			"style": {
 				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path": "pages/songList/index",
-			"style": {
-				"enablePullDownRefresh": false
-			}
-		},{
-			"path": "pages/singer/index",
-			"style": {
-				"enablePullDownRefresh": false
-			}
-		},{
 			"path": "pages/index/index",
 			"style": {
 				"enablePullDownRefresh": false
@@ -94,13 +60,7 @@
 				"enablePullDownRefresh": false
 			}
 		},
-		{
-			"path": "pages/singerPlayList/index",
-			"style": {
-				"enablePullDownRefresh": false
-			}
-		}
-        ,{
+        {
             "path" : "pages/auth/auth",
             "style" :
             {

+ 84 - 101
sleep/pages/home/index.vue

@@ -123,7 +123,7 @@
 
 						<view class="flex-row items-center section_5 space-x-4">
 							<image class="shrink-0 image_8"	src="../../static/home/homeIconChange.png"/>
-							<text class="font_3">切换</text>
+							<text class="font_3" @click="modalName = 'RadioModal'">切换</text>
 						</view>
 					</view>
 
@@ -133,6 +133,11 @@
 					</view>
 
 <!--					<view>-->
+<!--&lt;!&ndash;            <view class="cu-steps">&ndash;&gt;-->
+<!--&lt;!&ndash;              <view class="cu-item" :class="index>basics?'':'text-orange'" v-for="(item, index) in list1" :key="index">&ndash;&gt;-->
+<!--&lt;!&ndash;                <text :class="index>basics ?'cuIcon-title':'cuIcon-radioboxfill'"></text> {{item.name}}&ndash;&gt;-->
+<!--&lt;!&ndash;              </view>&ndash;&gt;-->
+<!--&lt;!&ndash;            </view>&ndash;&gt;-->
 <!--						<uni-steps :options="list1" :active="active" />-->
 <!--					</view>-->
 
@@ -166,38 +171,6 @@
 
 <!--				</view>-->
 
-				<!-- <view class="flex-col space-y-40 home-data">
-					<view class="flex-row group_6 equal-division">
-						<view class="flex-row group_7 space-x-6 home-data-item equal-division-item">
-							<view class="flex-col shrink-0 self-stretch group_9 space-y-20">
-								<view class="flex-row items-center space-x-4">
-									<image
-										class="shrink-0 image_10"
-										src="../../static/home/homeIconHeart.png"
-									/>
-									<text class="font_1">心率</text>
-								</view>
-								<text class="self-center font_6">73</text>
-							</view>
-							<text class="self-start font_7 text_14">次/分</text>
-						</view>
-
-						<view class="flex-row justify-center group_8 space-x-6 home-data-item equal-division-item">
-							<view class="flex-col space-y-20">
-								<view class="flex-row space-x-4">
-									<image
-										class="shrink-0 image_4"
-										src="../../static/home/homeIconBreath.png"
-									/>
-									<text class="font_1 text_12">呼吸</text>
-								</view>
-								<text class="self-center font_6 text_13">24</text>
-							</view>
-							<text class="self-start font_7 text_15">次/分</text>
-						</view>
-					</view>
-				</view> -->
-
 		<view class="flex-row home-data space-x-6">
 		  <view class="flex-col flex-auto home-data-left">
 		    <view class="flex-row space-x-4 home-data-left-title">
@@ -236,28 +209,6 @@
 		  </view>
 		</view>
 
-        <!-- <view class="cu-card article">
-          <view class="cu-item shadow chartsBgColor">
-            <view class="title"><view class="text-cut text-lg text-gray">心率 <text class="text-green margin-left">{{ pjxl }} 分钟/次</text></view></view>
-            <view class="content">
-              <view class="echarts-wrap">
-                <mpvue-echarts class="ec-canvas" canvasId="canvasChart-1" ref="xinlvRefChart" @onInit="onInit1"></mpvue-echarts>
-              </view>
-            </view>
-          </view>
-        </view>
-
-        <view class="cu-card article">
-          <view class="cu-item shadow chartsBgColor">
-            <view class="title"><view class="text-cut text-lg text-white">呼吸<text class="text-orange margin-left">{{ pjhx }} 分钟/次</text></view></view>
-            <view class="content">
-              <view class="echarts-wrap">
-                <mpvue-echarts class="ec-canvas" canvasId="canvasChart-2" ref="huxiRefChart" @onInit="onInit2"></mpvue-echarts>
-              </view>
-            </view>
-          </view>
-        </view> -->
-
 		<view class="home-btns flex-row  self-center">
 			<view @click="handleShareClick" class="btn-home-btns btn-home-btns1 items-center">
 				<image class="shrink-0 image_btn" src="../../static/home/homeIconHeart.png" />
@@ -333,6 +284,25 @@
       </view>
     </view>
 
+    <view class="cu-modal" :class="modalName=='RadioModal'?'show':''" @tap="hideModal">
+      <view class="cu-dialog" @tap.stop="">
+        <view class="cu-bar bg-white justify-end">
+          <view style="color: black" class="content">设备切换</view>
+        </view>
+        <radio-group class="block" @change="RadioChange">
+          <view class="cu-list menu text-left">
+            <view class="cu-item" v-for="(item, index) in deviceList" :key="index">
+              <label class="flex justify-between align-center flex-sub">
+                <view class="flex-sub">{{ item.imei }}</view>
+                <radio class="round" :class="homeFrom.nowDevice===item.imei?'checked':''" :checked="homeFrom.nowDevice === item.imei"
+                       :value="item.imei"></radio>
+              </label>
+            </view>
+          </view>
+        </radio-group>
+      </view>
+    </view>
+
 	  <!-- <tab-bar currentPage="home" /> -->
 
 	</view>
@@ -385,62 +355,63 @@ export default {
       lastMsgTime: 0, // 最后一次设备消息时间
       memberId: '',
       bindSn: '',
-      bindShow: false
+      bindShow: false,
+      modalName: false
 		};
 	},
-  onLoad() {
-    this.memberId = 50289
-    this.API_getDeviceList()
-  },
   // onLoad() {
-  //   wx.getSetting({
-  //     complete: (res) => {
-  //       if (!res.authSetting['scope.userInfo']) {
-  //         return
-  //       }
-  //       console.log('222222222222222222222222222')
-  //       const memberId = Storage.getItem('uid')
-  //       if (memberId) {
-  //         this.memberId = memberId
-  //         console.log('this.memberId===', this.memberId)
-  //         this.API_getDeviceList()
-  //       } else {
-  //         this.checkHasLogin()
-  //         const _this = this
-  //         let initTimer = setInterval(function () {
-  //           const memberId = Storage.getItem('uid')
-  //           if (memberId) {
-  //             _this.memberId = memberId
-  //             clearInterval(initTimer)
-  //             _this.API_getDeviceList()
-  //           }
-  //         }, 500)
-  //       }
-  //     }
-  //   })
-  //
+  //   this.memberId = 50289
+  //   this.API_getDeviceList()
   // },
+  onLoad() {
+    wx.getSetting({
+      complete: (res) => {
+        if (!res.authSetting['scope.userInfo']) {
+          return
+        }
+        console.log('222222222222222222222222222')
+        const memberId = Storage.getItem('uid')
+        if (memberId) {
+          this.memberId = memberId
+          console.log('this.memberId===', this.memberId)
+          this.API_getDeviceList()
+        } else {
+          this.checkHasLogin()
+          const _this = this
+          let initTimer = setInterval(function () {
+            const memberId = Storage.getItem('uid')
+            if (memberId) {
+              _this.memberId = memberId
+              clearInterval(initTimer)
+              _this.API_getDeviceList()
+            }
+          }, 500)
+        }
+      }
+    })
+
+  },
   beforeDestroy() {
     this.closeWebsocket()
   },
-  onShow() {
-    const imei = Storage.getItem('nowChangeDevice')
-    if (imei) {
-      this.homeFrom.nowDevice = imei
-    }
-  },
   // onShow() {
   //   const imei = Storage.getItem('nowChangeDevice')
   //   if (imei) {
   //     this.homeFrom.nowDevice = imei
-  //     this.deviceAdded = true
-  //     if (!this.connected && this.memberId) {
-  //       this.init()
-  //     }
-  //   } else {
-  //     this.deviceAdded = false
   //   }
   // },
+  onShow() {
+    const imei = Storage.getItem('nowChangeDevice')
+    if (imei) {
+      this.homeFrom.nowDevice = imei
+      this.deviceAdded = true
+      if (!this.connected && this.memberId) {
+        this.init()
+      }
+    } else {
+      this.deviceAdded = false
+    }
+  },
 	methods: {
 		handleShareClick() {
 			uni.navigateTo({
@@ -477,8 +448,8 @@ export default {
       this.connecting = true
       let wsUrl = API.base.replace('http', 'ws')
       this.mySocketTask = uni.connectSocket({
-        // url: wsUrl + '/sleep_report/monitor/' + this.memberId,
-        url: 'ws://wdkl.natapp1.cc/sleep_report/monitor/' + this.memberId,
+        url: wsUrl + '/sleep_report/monitor/' + this.memberId,
+        // url: 'ws://wdkl.natapp1.cc/sleep_report/monitor/' + this.memberId,
         success(res) {
           // 这里是接口调用成功的回调,不是连接成功的回调,请注意
         },
@@ -538,6 +509,8 @@ export default {
             default:
               break;
           }
+        } else if (msg.length === 7) {
+          Storage.setItem('refreshSleepReport', true)
         } else {
           const data =  JSON.parse(res.data)
           console.log('收到消息为:', data)
@@ -823,6 +796,15 @@ export default {
           }
         })
       }
+    },
+    hideModal(e) {
+      this.modalName = null
+    },
+    RadioChange(e) {
+		  console.log('1111111==', e.detail.value)
+      this.homeFrom.nowDevice = e.detail.value
+      Storage.setItem("nowChangeDevice",  e.detail.value)
+
     }
 	}
 };
@@ -1123,7 +1105,8 @@ export default {
 
     .home-device {
       margin: 1rem 1.25rem;
-      padding-bottom: 2rem;
+      padding-bottom: 1rem;
+      //padding-bottom: 2rem;
       background-color: #0233c699;
       border-radius: 1rem;
       backdrop-filter: blur(0.63rem);

+ 0 - 135
sleep/pages/index/components/musicList.vue

@@ -1,135 +0,0 @@
-<template>
-	<scroll-view class="music-list-wrapper">
-		<swiper class="swiper-list" next-margin="30px">
-			<swiper-item class="music-swiper-item" v-for="(item, index) in songList" :key="index">
-				<view class="song-item flex align-center" @click="addPlayed(k)" v-for="(k, i) in item" :key="k.id">
-					<image :src="getImgUrl(k)" mode="scaleToFill" class="music-song-item-image"></image>
-					<view class="flex-col music-text" :class="{ active: k.id == playInfo.id }">
-						<text class="music-song-item-name">{{ k.name }}</text>
-						<text class="music-song-item-author">{{ getAuthor(k) }}</text>
-					</view>
-					<text class="iconfont startIcon" :class="!paused && playInfo.id == k.id ? 'icon-stop' : 'icon-kaishi3'"></text>
-				</view>
-			</swiper-item>
-		</swiper>
-	</scroll-view>
-</template>
-
-<script>
-import { getImage, getName } from '@/utils/index.js';
-import { mapState } from 'vuex';
-export default {
-	props: {
-		currentList: {
-			type: Array
-		}
-	},
-	data() {
-		return {
-		};
-	},
-
-	computed: {
-		songList() {
-			let list = [];
-			for (let i = 0; i < this.currentList.length; i += 3) {
-				let endVal = i + 3;
-				if (endVal > this.currentList.length) {
-					endVal = this.currentList.length;
-				}
-				list.push(this.currentList.slice(i, endVal));
-			}
-			return list;
-		},
-		...mapState({
-			playInfo: state => state.playInfo,
-			paused: state => state.paused
-		})
-	},
-	methods: {
-		getImgUrl(val) {
-			return getImage(val);
-		},
-		getAuthor(val) {
-			return getName(val);
-		},
-		//点击播放
-		async addPlayed(val) {
-			//如果当前播放 重复点击,就跳转到歌曲播放页面
-			if (this.playInfo.id == val.id) {
-				uni.navigateTo({
-					url: '../play/index'
-				});
-				return;
-			}
-			this.$store.dispatch('playMusic', {
-				src: '',
-				title: val.name,
-				singer: this.getAuthor(val),
-				coverImgUrl: this.getImgUrl(val),
-				id: val.id
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.music-list-wrapper {
-	margin-top: 6px;
-	width: 100%;
-	
-	.swiper-list {
-		margin-top: 4px;
-		height: 190px;
-		.music-swiper-item {
-			padding-left: 5px;
-			box-sizing: border-box;
-			
-			.song-item {
-				width: 100%;
-				.music-song-item-image {
-					width: 50px;
-					height: 50px;
-					border-radius: 7px;
-					margin: 7px 10px 0 0;
-				}
-
-				.music-text {
-					width: calc(100% - 120px);
-					display: inline-block;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					white-space: nowrap;
-					&.active {
-						.music-song-item-name {
-							color: #f84e51;
-						}
-						.music-song-item-author {
-							color: #f84e51;
-						}
-					}
-
-					.music-song-item-name {
-						color: #ffffff;
-						font-size: 30rpx;
-						margin-right: 5px;
-					}
-
-					.music-song-item-author {
-						display: block;
-						font-size: 12px;
-						color: rgba(22, 125, 242, 1);
-					}
-				}
-
-				.startIcon {
-					margin-left: 15px;
-					font-size: 40rpx;
-					color: #f84e51;
-				}
-			}
-		}
-	}
-}
-</style>

+ 0 - 55
sleep/pages/index/components/singerList.vue

@@ -1,55 +0,0 @@
-<template>
-	<view class="flex flex-direction" style="margin-top: 10px;">
-		<scroll-view scroll-x class="music-list-wrapper" scroll-with-animation>
-			<view class="singer-list-item" v-for="item in currentList" :key="item.id" @click="searchDetailSinger(item.id)">
-				<image :src="item.picUrl + '?param=100y100'" mode="scaleToFill" class="music-singer-item-image"></image>
-				<view class="music-singer-item-text">{{ item.name }}</view>
-			</view>
-		</scroll-view>
-	</view>
-</template>
-
-<script>
-export default {
-	props: {
-		currentList: {
-			type: Array
-		}
-	},
-	methods: {
-		searchDetailSinger(id) {
-			uni.navigateTo({
-				url: '../singerPlayList/index?id=' + id
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.music-list-wrapper {
-	width: 100%;
-	white-space: nowrap;
-
-	.singer-list-item {
-		width: 20%;
-		margin: 0 6px;
-		display: inline-block;
-		overflow: hidden;
-		position: relative;
-		border-radius: 7px;
-		text-align: center;
-
-		.music-singer-item-image {
-			width: 70px;
-			height: 70px;
-			border-radius: 50%;
-		}
-		.music-singer-item-text{
-			font-size: 14px;
-			color: #000;
-			margin-top: 3px;
-		}
-	}
-}
-</style>

+ 0 - 98
sleep/pages/index/components/songList.vue

@@ -1,98 +0,0 @@
-<template>
-	<scroll-view scroll-x class="music-list-wrapper" scroll-with-animation>
-		<view class="list-item" v-for="item in currentList" :key="item.id">
-			<!-- <view class="hotCount" v-if="item.playCount > 0 || item.playcount > 0"> -->
-				<!-- <text class="iconfont icon-kaishi" style="margin-right: 3.5px;"></text> -->
-				<!-- <text>{{ playCount(item.playCount || item.playcount) }}</text> -->
-			<!-- </view> -->
-			<view
-				class="bg-img flex align-end list-item-image"
-				:style="'background-image:url(' + (item.picUrl || item.coverImgUrl) + '?param=230y230)'"
-				@click="toPlayListDetail(item)"
-			>
-				<view class="bg-shadeBottom padding-top-xl radioName" v-if="type">{{ item.name }}</view>
-			</view>
-			<view class="list-item-text">{{ type ? item.rcmdtext : item.name }}</view>
-		</view>
-	</scroll-view>
-</template>
-
-<script>
-import { filterPlayCount } from '@/utils/index.js';
-export default {
-	props: {
-		currentList: {
-			type: Array
-		},
-		type: {
-			type: String,
-			default: ''
-		}
-	},
-	methods: {
-		playCount(val) {
-			return filterPlayCount(val);
-		},
-		toPlayListDetail(val) {
-			uni.navigateTo({
-				url: '../songDetail/index?id=' + val.id
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.music-list-wrapper {
-	white-space: nowrap;
-	margin-top: 10px;
-	
-	.list-item {
-		width: 130px;
-		margin: 0 6px;
-		display: inline-block;
-		overflow: hidden;
-		position: relative;
-
-		.hotCount {
-			position: absolute;
-			width: 100%;
-			height: 40px;
-			padding: 3px 6px 0 0;
-			text-align: right;
-			color: #fff;
-			z-index: 10;
-			font-size: 12px;
-			background-image: linear-gradient(rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0));
-			border-radius: 6px;
-		}
-
-		.list-item-image {
-			height: 130px;
-			border-radius: 6px;
-		}
-
-		.list-item-text {
-			width: 100%;
-			margin-top: 4px;
-			white-space: normal;
-			color: #ffffff;
-			font-size: 14px;
-			height: 18px;
-			line-height: 18px;
-			opacity: 0.8;
-			
-		}
-
-		.radioName {
-			width: 100%;
-			color: #fff;
-			font-size: 12px;
-			overflow: hidden;
-			text-overflow: ellipsis;
-			white-space: nowrap;
-			padding: 0 0 8px 8px;
-		}
-	}
-}
-</style>

+ 18 - 18
sleep/pages/my/index.vue

@@ -289,27 +289,27 @@ export default {
       userInfo: null
     };
   },
-  // mounted() {
-  //   this.memberId = Storage.getItem('uid')
-  //   if (this.memberId) {
-  //     this.userInfo = Storage.getItem('userInfo')
-  //     this.deviceList = Storage.getItem('myBindDevices')
-  //     this.unionId = this.userInfo.union_id
-  //     if (this.deviceList) {
-  //       console.log('this.deviceList===', this.deviceList)
-  //       this.API_getNewReport()
-  //     }
-  //   }
-  // },
   mounted() {
-    this.unionId = '6291d3bde21b840008ae7842'
-    this.memberId = 50289
-    this.deviceList = Storage.getItem('myBindDevices')
-    if (this.deviceList) {
-      console.log('this.deviceList===', this.deviceList)
-      this.API_getNewReport()
+    this.memberId = Storage.getItem('uid')
+    if (this.memberId) {
+      this.userInfo = Storage.getItem('userInfo')
+      this.deviceList = Storage.getItem('myBindDevices')
+      this.unionId = this.userInfo.union_id
+      if (this.deviceList) {
+        console.log('this.deviceList===', this.deviceList)
+        this.API_getNewReport()
+      }
     }
   },
+  // mounted() {
+  //   this.unionId = '6291d3bde21b840008ae7842'
+  //   this.memberId = 50289
+  //   this.deviceList = Storage.getItem('myBindDevices')
+  //   if (this.deviceList) {
+  //     console.log('this.deviceList===', this.deviceList)
+  //     this.API_getNewReport()
+  //   }
+  // },
   methods: {
     API_getNewReport() {
       const _this = this

+ 0 - 399
sleep/pages/play/index.vue

@@ -1,399 +0,0 @@
-<template>
-  <div class="play-container">
-    <div
-      class="mask-container"
-      :style="{ 'background-image': 'url(' + playInfo.coverImgUrl + ')' }"
-    >
-      <!-- <div
-        class="album-cover"
-        :style="{ 'background-image': 'url(' + playInfo.coverImgUrl + ')' }"
-      ></div> -->
-      <div class="cover-mask" style="opacity: 0.6"></div>
-    </div>
-    <cu-custom style="color: #fff" :isBack="true">
-      <block slot="content" class="musicName">{{ playInfo.title }}</block>
-    </cu-custom>
-    <view class="author" :style="{ top: CustomBar + 'px' }">{{
-      playInfo.singer
-    }}</view>
-    <view
-      class="img-container"
-      :style="{ transform: 'translate(-50%, -50%) rotate(' + rotate + 'deg)' }"
-      v-show="!lyricShow"
-    >
-      <image
-        :src="playInfo.coverImgUrl"
-        class="authorImg"
-        @click="getLyric"
-      ></image>
-    </view>
-    <scroll-view
-      scroll-y
-      v-if="lyricShow"
-      @click="lyricShow = false"
-      :scroll-top="scrollTop"
-      class="lyric-container"
-      :style="{ top: CustomBar + 35 + 'px' }"
-    >
-      <view v-if="lyricList.length > 0">
-        <view
-          class="lyric-item"
-          :class="{ active: index == currentLyricIndex }"
-          v-for="(item, index) in lyricList"
-          :key="index"
-          style="text-align: center"
-        >
-          {{ item.content }}
-        </view>
-      </view>
-      <p v-else class="noLyric">暂无歌词</p>
-    </scroll-view>
-
-    <view class="bottom-control">
-      <view class="progress">
-        <view class="audio-number">{{ playDetailInfo.current }}</view>
-        <slider
-          class="audio-slider"
-          activeColor="rgb(248, 78, 81)"
-          block-size="8"
-          :value="playDetailInfo.current_value"
-          :max="playDetailInfo.duration_value"
-          @change="handleChange"
-        ></slider>
-        <view class="audio-number">{{ playDetailInfo.duration }}</view>
-      </view>
-      <view class="iconList flex">
-        <text
-          class="iconfont"
-          :class="
-            likeList.includes(playInfo.id)
-              ? 'icon-like lighIcon'
-              : 'icon-unlike'
-          "
-          @click="likeMusic()"
-          style="margin-right: 65rpx"
-        ></text>
-        <text
-          class="iconfont icon-play-left"
-          @click="handleChangePlay(-1)"
-        ></text>
-        <text
-          class="iconfont"
-          :class="!paused ? 'icon-play' : 'icon-pause'"
-          style="font-size: 90rpx; margin: 0 35px"
-          @click="playMusic"
-        ></text>
-        <text
-          class="iconfont icon-play-right"
-          @click="handleChangePlay(1)"
-        ></text>
-        <text
-          class="iconfont icon-liebiao"
-          style="margin-left: 65rpx; font-size: 56rpx"
-          @click.stop="modelShow = true"
-        ></text>
-      </view>
-    </view>
-    <play-list v-model="modelShow" @backHome="backHome"></play-list>
-  </div>
-</template>
-
-<script>
-import playList from "../../components/musicControl/playList.vue";
-import { mapState } from "vuex";
-export default {
-  data() {
-    return {
-      modelShow: false,
-      scrollTop: 0,
-      currentLyricIndex: 0,
-      //歌词
-      lyricList: [],
-      //旋转角度
-      rotate: 0,
-      //喜欢音乐list
-      likeList: [],
-      //是否显示歌词
-      lyricShow: false,
-      //定时器
-      timer: null,
-      playDetailInfo: {
-        current: "00:00",
-        duration: "00:00",
-        current_value: 0,
-        duration_value: 0,
-      },
-	  CustomBar:this.CustomBar
-    };
-  },
-  components: { playList },
-  computed: {
-    ...mapState({
-      playInfo: (state) => state.playInfo,
-      paused: (state) => state.paused,
-      userInfo: (state) => state.userInfo,
-    }),
-  },
-  onShow() {
-    if (!this.paused) {
-      this.initRotate();
-    } else {
-      clearInterval(this.timer);
-    }
-    this.getLikeData();
-    this.playDetailInfo = this.$audio.playinfo;
-    this.initLyric();
-    this.$audio.syncStateOn("page-index-get-state", ({ playinfo }) => {
-      this.playDetailInfo = { ...playinfo };
-      this.initLyric();
-    });
-  },
-  methods: {
-    initLyric() {
-      if (this.lyricList.length == 0) return;
-      let timeStamp = this.playDetailInfo.current;
-      this.currentLyricIndex = this.lyricList.findIndex((item, index) => {
-        return item.time < timeStamp && this.lyricList[index + 1]
-          ? this.lyricList[index + 1].time > timeStamp
-          : true;
-      });
-      this.scrollTop = this.currentLyricIndex * 36;
-    },
-    //获取喜欢音乐列表
-    async getLikeData() {
-      const uid = this.userInfo.id;
-      const timestamp = new Date().getTime();
-      const data = await this.$api.likeData({ uid, timestamp });
-      this.$nextTick(() => {
-        this.likeList = data.ids || [];
-      });
-    },
-
-    //喜欢或取消喜音乐
-    async likeMusic() {
-      let bool = this.likeList.includes(this.playInfo.id);
-      const timestamp = new Date().getTime();
-      const data = await this.$api.likeMusic({
-        id: this.playInfo.id,
-        timestamp,
-        like: !bool,
-      });
-      this.getLikeData();
-    },
-
-    //拖动 完成
-    handleChange(event) {
-      this.$audio.seek(event.target.value);
-    },
-
-    //播放或暂停
-    playMusic() {
-      if (this.paused) {
-        this.initRotate();
-      } else {
-        clearInterval(this.timer);
-      }
-      let list = this.$audio.audiolist;
-      let index = list.findIndex((item) => item.id == this.playInfo.id);
-      this.$audio.operate(index);
-      this.$store.commit("SET_PASUED", !this.paused);
-    },
-
-    //旋转
-    initRotate() {
-      this.timer = setInterval(() => {
-        this.rotate += 9;
-      }, 1000);
-    },
-
-    //获取歌词
-    async getLyric(bool) {
-      this.lyricShow = true;
-      let data = [];
-      const id = this.playInfo.id;
-      const res = await this.$api.getLyric({ id });
-      data = (res.lrc.lyric || "").split("\n");
-      let timeReg = /^\[.*\]/;
-      let json = [];
-      data.forEach((item) => {
-        if (item.match(timeReg)) {
-          let time = item.match(timeReg)[0].substr(1, 8);
-          let minute = time.substr(0, 2);
-          let second = time.substr(3, 2);
-          let ms = time.substr(6, 2);
-          json.push({
-            time,
-            ms:
-              parseInt(minute) * 60 * 1000 +
-              parseInt(second) * 1000 +
-              parseInt(ms) * 10,
-            content: item.substr(11),
-          });
-        }
-      });
-      this.lyricList = json;
-    },
-
-    //切换歌曲  --上一首或下一首
-    handleChangePlay(count) {
-      this.$store.dispatch("changePlay", count);
-    },
-
-    backHome() {
-      uni.switchTab({
-        url: "/pages/index/index",
-      });
-    },
-  },
-  onHide() {
-    //卸载page-index-get-state,提高页面性能
-    this.$audio.syncStateOff("page-index-get-state");
-  },
-  watch: {
-    playInfo: {
-      handler() {
-        this.scrollTop = 0;
-        this.getLyric(true);
-      },
-      deep: true,
-    },
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-.play-container {
-  position: relative;
-  width: 100%;
-  height: 100%;
-  .author {
-    position: absolute;
-    left: 50%;
-    transform: translateX(-50%);
-    color: rgba(255, 255, 255, 0.9);
-    font-size: 28rpx;
-  }
-  .mask-container {
-    overflow: hidden;
-    position: absolute;
-    left: 0;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    z-index: 0;
-    background-size: cover;
-    background-position: center;
-    &:after {
-      content: "";
-      position: absolute;
-      width: 130%;
-      height: 130%;
-      left: 0;
-      top: 0;
-      z-index: 1;
-      filter: blur(15px);
-      transform: translate(-3rem, -3rem);
-      background: inherit;
-      background-size: 100% 100%;
-    }
-    // .album-cover {
-    //   position: absolute;
-    //   top: 0;
-    //   bottom: 0;
-    //   left: 0;
-    //   z-index: 2;
-    //   width: 100%;
-    //   height: 100%;
-    //   background-size: cover;
-    //   background-position: center;
-    //   filter: blur(20px);
-    // }
-    .cover-mask {
-      position: absolute;
-      top: 0;
-      bottom: 0;
-      left: 0;
-      z-index: 3;
-      width: 100%;
-      height: 100%;
-      background-color: rgba(0, 0, 0, 0.8);
-    }
-  }
-  .img-container {
-    position: absolute;
-    top: 35%;
-    left: 50%;
-    transform: translate(-50%, -50%);
-    width: 450rpx;
-    height: 450rpx;
-    background: url("http://wdklmall.oss-cn-shenzhen.aliyuncs.com/mallgoods/goods/9B904D3FBDB84F2AABA6F6B2011C9E5C.png") no-repeat;
-    background-size: 100% 100%;
-    border-radius: 50%;
-    border: 2px solid rgba(255, 255, 255, 0.3);
-    transition: all 1s linear;
-    .authorImg {
-      border-radius: 50%;
-      width: 315rpx;
-      height: 315rpx;
-      position: absolute;
-      left: 50%;
-      top: 50%;
-      transform: translate(-50%, -50%);
-    }
-  }
-  .lighIcon {
-    color: rgb(248, 78, 81) !important;
-  }
-  .lyric-container {
-    position: absolute;
-    bottom: calc(10% + 100px);
-    .lyric-item {
-      color: #e1d7f0;
-      height: 40px;
-      line-height: 40px;
-      &.active {
-        color: rgb(248, 78, 81);
-      }
-    }
-    .noLyric {
-      position: absolute;
-      top: 50%;
-      left: 50%;
-      color: #fff;
-      transform: translate(-50%, -50%);
-    }
-  }
-
-  .bottom-control {
-    position: absolute;
-    bottom: 10%;
-    left: 10px;
-    right: 10px;
-    .progress {
-      width: 100%;
-      display: flex;
-      align-items: center;
-      .audio-number {
-        width: 120upx;
-        font-size: 24upx;
-        line-height: 1;
-        color: #fff;
-        text-align: center;
-      }
-      .audio-slider {
-        flex: 1;
-        margin: 0;
-      }
-    }
-    .iconList {
-      justify-content: center;
-      align-items: center;
-      margin-top: 26rpx;
-      .iconfont {
-        color: #fff;
-        font-size: 48rpx;
-      }
-    }
-  }
-}
-</style>

+ 68 - 73
sleep/pages/report/report.vue

@@ -70,7 +70,8 @@
 <!--								/>-->
 <!--								<text class="font_2 text_5">+25</text>-->
 <!--							</view>-->
-							<text class="self-center text_6">{{ sleepReportFrom.report_content.score.value }}</text>
+							<text class="self-center text_6" :class="sleepReportFrom.report_content.score.state === 3 ?
+							'text-green' : sleepReportFrom.report_content.score.state === 2 ? 'text-yellow' : 'text-red'">{{ sleepReportFrom.report_content.score.value }}</text>
 							<text class="self-center font_2 text_7">香睡指数</text>
 						</view>
 
@@ -114,20 +115,14 @@
 							<view class="flex-col equal-division-item">
 								<view class="flex-col section_6 space-y-12 bg-gradual-blue">
 									<view class="flex-row space-x-10">
-										<image
-											class="image_7"
-											src="../../static/report/reportIconRed.png"
-										/>
+										<image class="image_7" src="../../static/report/reportIconGreen.png"/>
 										<text class="font_3">上床时间</text>
 									</view>
 									<text class="self-start font_4 text_9">{{ sleepReportFrom.gobed_time }}</text>
 								</view>
 								<view class="flex-col section_6 view space-y-12">
 									<view class="flex-row items-center space-x-12">
-										<image
-											class="image_7"
-											src="../../static/report/reportIconGreen.png"
-										/>
+										<image class="image_7" src="../../static/report/reportIconGreen.png"/>
 										<text class="font_3">深睡时长</text>
 									</view>
 									<view class="flex-row items-baseline group_6 space-x-6">
@@ -136,10 +131,8 @@
 								</view>
                 <view class="flex-col section_6 view space-y-12">
                   <view class="flex-row items-center space-x-12">
-                    <image
-                        class="image_7"
-                        src="../../static/report/reportIconGreen.png"
-                    />
+                    <image class="image_7" :src="sleepReportFrom.report_content.avg_hx.state === 3 ? '../../static/report/reportIconGreen.png' :
+                     sleepReportFrom.report_content.avg_hx.state === 2 ? '../../static/report/reportIconYellow.png' : '../../static/report/reportIconRed.png'"/>
                     <text class="font_3">平均呼吸率</text>
                   </view>
                   <view class="flex-row items-baseline group_6 space-x-6">
@@ -149,14 +142,11 @@
                 </view>
 								<view class="flex-col items-left group_7 space-x-10">
 									<view>
-										<image
-											class="image_7"
-											src="../../static/report/reportIconGreen.png"
-										/>
+										<image class="image_7" src="../../static/report/reportIconGreen.png"/>
 										<text class="font_3">温馨提示</text>
 									</view>
 
-									<text class="font_2 text_10">本次睡眠,您有1项指标不及格。</text>
+									<text class="font_2 text_10">本次睡眠,您有{{ errCount }}项指标不及格。</text>
 								</view>
 							</view>
 
@@ -177,23 +167,19 @@
 
                 <view class="flex-col section_7 space-y-12">
                   <view class="flex-row space-x-10">
-                    <image
-                        class="image_7"
-                        src="../../static/report/reportIconGreen.png"
-                    />
+                    <image class="image_7" :src="sleepReportFrom.report_content.sleep_eff.state === 3 ? '../../static/report/reportIconGreen.png' :
+                     sleepReportFrom.report_content.sleep_eff.state === 2 ? '../../static/report/reportIconYellow.png' : '../../static/report/reportIconRed.png'"/>
                     <text class="font_3">睡眠效率</text>
                   </view>
-                  <view class="flex-row justify-evenly items-baseline group_5">
+                  <view class="flex-row items-baseline group_5">
                     <text class="font_4">{{ sleepReportFrom.report_content.sleep_eff.value }}</text>
                   </view>
                 </view>
 
 								<view class="flex-col section_7 space-y-12">
 									<view class="flex-row space-x-10">
-										<image
-											class="image_7"
-											src="../../static/report/reportIconGreen.png"
-										/>
+                    <image class="image_7" :src="sleepReportFrom.report_content.avg_rh.state === 3 ? '../../static/report/reportIconGreen.png' :
+                     sleepReportFrom.report_content.avg_rh.state === 2 ? '../../static/report/reportIconYellow.png' : '../../static/report/reportIconRed.png'"/>
 										<text class="font_3">平均心率</text>
 									</view>
 									<view class="flex-row items-baseline group_6 space-x-4">
@@ -204,10 +190,8 @@
 
                 <view class="flex-row shrink-0 justify-between section_8 space-x-34">
                   <view class="flex-row items-center space-x-8">
-                    <image
-                        class="shrink-0 image_7"
-                        src="../../static/report/reportIconGreen.png"
-                    />
+                    <image class="image_7" :src="sleepReportFrom.report_content.move_count.state === 3 ? '../../static/report/reportIconGreen.png' :
+                     sleepReportFrom.report_content.move_count.state === 2 ? '../../static/report/reportIconYellow.png' : '../../static/report/reportIconRed.png'"/>
                     <text class="font_3">体动次数</text>
                   </view>
                   <view class="flex-row items-baseline space-x-6">
@@ -217,10 +201,8 @@
                 </view>
                 <view class="flex-row shrink-0 justify-between section_8 space-x-34">
                   <view class="flex-row items-center space-x-8">
-                    <image
-                        class="shrink-0 image_7"
-                        src="../../static/report/reportIconGreen.png"
-                    />
+                    <image class="image_7" :src="sleepReportFrom.report_content.outbed_count.state === 3 ? '../../static/report/reportIconGreen.png' :
+                     sleepReportFrom.report_content.outbed_count.state === 2 ? '../../static/report/reportIconYellow.png' : '../../static/report/reportIconRed.png'"/>
                     <text class="font_3">离床次数</text>
                   </view>
                   <view class="flex-row items-baseline space-x-6">
@@ -230,10 +212,8 @@
                 </view>
 								<view class="flex-row justify-between section_8">
 									<view class="flex-row items-center space-x-8">
-										<image
-											class="shrink-0 image_7"
-											src="../../static/report/reportIconGreen.png"
-										/>
+                    <image class="image_7" :src="sleepReportFrom.report_content.snoring_count.state === 3 ? '../../static/report/reportIconGreen.png' :
+                     sleepReportFrom.report_content.snoring_count.state === 2 ? '../../static/report/reportIconYellow.png' : '../../static/report/reportIconRed.png'"/>
 										<text class="font_3">打鼾次数</text>
 									</view>
 									<view class="flex-row items-baseline space-x-6">
@@ -472,10 +452,10 @@
       </view>
     </view>
 
-    <view class="cu-load load-modal" v-if="disabled">
-      <view class="cuIcon-emojifill text-orange"></view>
-      <view class="gray-text">正在获取</view>
-    </view>
+<!--    <view class="cu-load load-modal" v-if="disabled">-->
+<!--      <view class="cuIcon-emojifill text-orange"></view>-->
+<!--      <view class="gray-text">正在获取</view>-->
+<!--    </view>-->
 	</view>
 </template>
 
@@ -530,27 +510,33 @@
         bindShow: false,
         bindSn: '',
         memberId: '',
-        userInfo: null
+        userInfo: null,
+        errCount: 0
 			}
 		},
-    mounted() {
-      this.memberId = 50289
-      this.params.unionId = '6291d3bde21b840008ae7842' // 先写死
-      this.getNewSleepReport()
-    },
-    // onShow() {
-    //   this.memberId = Storage.getItem('uid')
-    //   if (this.memberId) {
-    //     if (!this.isDeviceAdded) {
-    //       this.user = Storage.getItem('userInfo')
-    //       this.params.unionId = this.user.union_id
-    //       console.log('user===', this.user, this.user.union_id)
-    //       this.getNewSleepReport()
-    //     }
-    //   } else {
-    //     this.isDeviceAdded = false
-    //   }
+    // mounted() {
+    //   this.memberId = 50289
+    //   this.params.unionId = '6291d3bde21b840008ae7842' // 先写死
+    //   this.getNewSleepReport()
     // },
+    onShow() {
+      this.memberId = Storage.getItem('uid')
+      if (this.memberId) {
+        if (!this.isDeviceAdded) {
+          this.user = Storage.getItem('userInfo')
+          this.params.unionId = this.user.union_id
+          console.log('user===', this.user, this.user.union_id)
+          this.getNewSleepReport()
+        } else {
+          if (Storage.getItem('refreshSleepReport')) {
+            Storage.removeItem('refreshSleepReport')
+            this.getNewSleepReport()
+          }
+        }
+      } else {
+        this.isDeviceAdded = false
+      }
+    },
     methods: {
       // 获取睡眠报告
       getNewSleepReport() {
@@ -577,6 +563,7 @@
             if (_this.params.reportTime === -1) {
               _this.getDaysTag()
             }
+            _this.qualifiedCount(_this.sleepReportFrom.report_content)
             _this.initAllChar(_this.sleepReportFrom)
           } else {
             this.isDeviceAdded = false
@@ -622,24 +609,31 @@
           })
         })
       },
-      // 获取最新睡眠报告
-      getLastLog() {
-        console.log("获取最新睡眠报告。。。")
-        this.disabled = true
-        const _this = this
-        setTimeout(() => {
-          _this.params.reportTime = -1
-          _this.getNewSleepReport()
-        }, 2000)
-
-      },
       // 时间选择
       PickerChange(e) {
         this.index = e.detail.value
         this.sleepReportFrom = Object.assign({}, this.sleepReportList[this.index])
         this.sleepReportFrom.report_content = JSON.parse(this.sleepReportFrom.report_content)
+        this.qualifiedCount(this.sleepReportFrom.report_content)
         this.initAllChar(this.sleepReportFrom)
       },
+      qualifiedCount(data) {
+        let count = 0
+        if (data.avg_hx.state === 1) {
+          count ++
+        } else if (data.sleep_eff.state === 1) {
+          count ++
+        } else if (data.avg_rh.state === 1) {
+          count ++
+        } else if (data.move_count.state === 1) {
+          count ++
+        } else if (data.outbed_count.state === 1) {
+          count ++
+        } else if (data.snoring_count.state === 1) {
+          count ++
+        }
+        this.errCount = count
+      },
       initAllChar(data) {
         const _this = this
         setTimeout(() => {
@@ -747,6 +741,7 @@
             show: false, // 是否显示分隔线
           },
           axisLine: {
+            show: false, // 是否显示坐标轴轴线
             lineStyle:{
               color:'#FFFFFF',
               width:1, //x轴线的宽度
@@ -1681,7 +1676,7 @@
 	          }
 	          .text_6 {
 	            margin-top: 1rem;
-	            color: #ffffff;
+	            //color: #ffffff;
 	            font-size: 3.38rem;
 	            font-family: PingFangSC;
 	            line-height: 2.47rem;

+ 0 - 58
sleep/pages/search/components/historySearch.vue

@@ -1,58 +0,0 @@
-<template>
-	<div class="history-container flex" v-if="tagList.length > 0">
-		<div class="title-wrapper historyTitle">历史</div>
-			
-		<scroll-view scroll-x class="historyList" scroll-with-animation scroll-left="0">
-			<view class="cu-tag round" style="padding:0 24rpx" v-for="(item, index) in tagList" :key="index" @click="handleClick(item)">{{ item }}</view>
-		</scroll-view>
-
-		<text class="cuIcon-delete closeIcon" @click="clearHistory"></text>
-	</div>
-</template>
-
-<script>
-export default {
-	data() {
-		return {};
-	},
-	computed: {
-		tagList() {
-			return this.$store.state.historyList;
-		}
-	},
-	methods: {
-		handleClick(val) {
-			this.$store.dispatch('addHistoryList', val);
-			this.$emit('chooseMusic', val);
-		},
-
-		//清空
-		clearHistory() {
-			this.$store.dispatch('clearHistoryList');
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.history-container {
-	height: 35px;
-	width: 100%;
-	position: relative;
-	align-items: center;
-	.historyTitle {
-		width: 85rpx;
-		font-size: 28rpx;
-		color: #000;
-	}
-	.historyList {
-	   width: calc(100% - 160rpx);
-		white-space: nowrap;
-	}
-	.closeIcon {
-		font-size: 38rpx;
-		width: 75rpx;
-		text-align: right;
-	}
-}
-</style>

+ 0 - 94
sleep/pages/search/components/hotSearch.vue

@@ -1,94 +0,0 @@
-<template>
-	<div class="hotSearch-container">
-		<p style="font-weight: 600;font-size: 28rpx;margin-bottom: 10px;">热搜榜</p>
-		<div class="hotList">
-			<div class="hot-item flex" v-for="(item, index) in hotList" :key="index" :class="{ topThree: index <= 2 }" @click="handleClick(item.searchWord)">
-				<span class="index">{{ index + 1 }}</span>
-				<span class="searchLabel">{{ item.searchWord }}</span>
-				<image v-if="item.iconUrl" :src="item.iconUrl" mode="" class="iconImg" :class="item.iconType == 5 ? 'topImg' : 'hotImg'"></image>
-			</div>
-		</div>
-	</div>
-</template>
-
-<script>
-export default {
-	data() {
-		return {
-			hotList: []
-		};
-	},
-	created() {
-		this.getDetailSearch();
-	},
-	methods: {
-		//获取热门搜索详细列表
-		getDetailSearch() {
-			this.$api.getHotDetailSearch().then(res => {
-				this.hotList = res.data || [];
-			});
-		},
-
-		handleClick(val) {
-			this.$store.dispatch('addHistoryList', val);
-			this.$emit('chooseMusic', val);
-		},
-	}
-};
-</script>
-
-<style lang="scss">
-.hotSearch-container {
-	width: 100%;
-	position: relative;
-	margin-top: 20rpx;
-	.hotList {
-		margin-top: 15rpx;
-		width: 100%;
-		flex-wrap: wrap;
-		.hot-item {
-			width: 50%;
-			margin-bottom: 30rpx;
-			display: inline-block;
-			&.topThree {
-				.index {
-					color: rgb(248, 78, 81);
-				}
-				.word {
-					font-family: 'Microsoft Yahei', Arial, Helvetica, sans-serif;
-					font-weight: 600;
-					color: rgba(0,0,0,0.5);
-				}
-			}
-			.index {
-				width: 44rpx;
-				display: inline-block;
-			}
-			.searchLabel {
-				max-width: calc(100% - 125rpx);
-				display: inline-block;
-				white-space: nowrap;
-				vertical-align: middle;
-				overflow: hidden;
-				text-overflow:ellipsis;
-				color: rgb(0,0,0);
-			}
-
-			.iconImg {
-				margin-left: 15rpx;
-				vertical-align: middle;
-
-				&.topImg {
-					width: 30rpx;
-					height: 32rpx;
-					vertical-align: text-bottom;
-				}
-				&.hotImg {
-					width: 60rpx;
-					height: 30rpx;
-				}
-			}
-		}
-	}
-}
-</style>

+ 0 - 52
sleep/pages/search/index.vue

@@ -1,52 +0,0 @@
-<template>
-	<div class="search-container">
-		<cu-custom bgColor="#fff" :isBack="true"><view slot="content" style="color: #000">搜索</view></cu-custom>
-		<search @handleSearch="searchMusic" :text="text"></search>
-		<scroll-view scroll-y class="content-list" scroll-with-animation>
-			<history-search @chooseMusic="chooseMusic"></history-search>
-			<hot-search @chooseMusic="chooseMusic"></hot-search>
-		</scroll-view>
-		<music-control v-if="playInfo.id" />
-	</div>
-</template>
-
-<script>
-import search from '@/components/search/index.vue';
-import historySearch from './components/historySearch.vue';
-import hotSearch from './components/hotSearch.vue';
-import { mapState } from 'vuex';
-export default {
-	data() {
-		return {
-			text: ''
-		};
-	},
-	components: { historySearch, hotSearch, search },
-	computed: mapState({
-		playInfo: state => state.playInfo
-	}),
-	methods: {
-		//点击搜索
-		searchMusic(val) {
-			uni.navigateTo({
-				url: '../searchList/index?keywords=' + val
-			});
-		},
-
-		//点击热搜列表
-		chooseMusic(val) {
-			this.text = val;
-			this.searchMusic(val);
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.content-list {
-	padding: 0 15px;
-	box-sizing: border-box;
-	width: 100%;
-	margin-top: 5px;
-}
-</style>

+ 0 - 181
sleep/pages/searchList/index.vue

@@ -1,181 +0,0 @@
-<template>
-	<div class="searchList-container">
-		<cu-custom bgColor="#fff" :isBack="true"><view slot="content" style="color: #000">搜索结果</view></cu-custom>
-		<search :text="keywords" @handleSearch="handleSearch"></search>
-		<div class="musicList">
-			<box-title title="单曲" buttonName="播放全部" iconName="kaishi2" @handlePlay="handlePlayAllMusic"></box-title>
-			<scroll-view scroll-y scroll-with-animation @scrolltolower="reachBottom()" :style="{ height: height, 'margin-top': '10px' }">
-				<view class="music-item flex" :class="{ active: item.id == playInfo.id }" v-for="(item, index) in musicList" :key="index" @click="handlePlayMusic(item)">
-					<image :src="item.al.picUrl + '?param=60y60'" mode="widthFix" class="music-img"></image>
-					<view class="music-info">
-						<view class="music-name text-overflow">{{ item.name }}</view>
-						<view class="music-singer text-overflow flex">
-							<span class="small-icon">{{ item.id % 2 == 0 ? 'SQ' : 'HD' }}</span>
-							{{ item.ar ? item.ar.map(item => item.name).join('/') : '' }} - {{ item.al.name }}
-						</view>
-					</view>
-				</view>
-				<view class="loading" v-if="status == 'loading' || status == 'notMore'">{{ status == 'notMore' ? '没有更多了' : '努力加载中...' }}</view>
-			</scroll-view>
-		</div>
-		<music-control v-if="playInfo.id"/>
-	</div>
-</template>
-
-<script>
-import search from '@/components/search/index.vue';
-import boxTitle from '@/components/boxTitle/index.vue';
-import { getImage, getName } from '@/utils/index.js';
-import { mapState } from 'vuex';
-export default {
-	data() {
-		return {
-			musicList: [],
-			offset: 0,
-			status: null,
-			keywords: '',
-			total: 0
-		};
-	},
-	components: { search, boxTitle },
-	computed: {
-		...mapState({
-			playInfo: state => state.playInfo
-		}),
-		height() {
-			let height = this.CustomBar / (uni.upx2px(this.CustomBar) / this.CustomBar) + 190;
-			if (this.playInfo.id) {
-				height += 110;
-			}
-			return `calc(100vh  - ${height}rpx)`;
-		}
-	},
-	onLoad(options) {
-		const { keywords } = options;
-		this.keywords = keywords;
-		this.getMusicList();
-	},
-
-	methods: {
-		//加载更多
-		reachBottom() {
-			this.status = 'loading';
-			if (this.offset >= this.total) {
-				this.status = 'notMore';
-				return;
-			}
-			this.offset += 30;
-			if (this.offset > this.total) {
-				this.offset = this.total;
-			}
-			this.getMusicList();
-		},
-
-		//点击查询
-		handleSearch(val) {
-			this.keywords = val;
-			this.status = null;
-			this.offset = 0;
-			this.total=0
-			this.musicList = [];
-			this.getMusicList();
-		},
-
-		getMusicList() {
-			const { keywords, offset } = this;
-			this.$api.getSearchList({ keywords, offset, type: 1 }).then(res => {
-				const list = res.result.songs || [];
-				this.musicList.push(...list);
-				this.total = res.result.songCount || 0;
-				this.status = null;
-			});
-		},
-
-		//播放全部
-		handlePlayAllMusic() {
-			const list = this.musicList.map(item => {
-				return {
-					src: '',
-					title: item.name,
-					singer: getName(item),
-					coverImgUrl: getImage(item),
-					id: item.id
-				};
-			});
-			this.$store.dispatch('playAllMUsic', list);
-		},
-
-		//点击播放
-		handlePlayMusic(val) {
-			if (this.playInfo.id == val.id) {
-				uni.navigateTo({
-					url: '../play/index'
-				});
-				return;
-			}
-			this.$store.dispatch('playMusic', {
-				src: '',
-				title: val.name,
-				singer: getName(val),
-				coverImgUrl: getImage(val),
-				id: val.id
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.musicList {
-	width: 100%;
-	position: relative;
-	margin-top: 20rpx;
-	.music-item {
-		height: 70px;
-		box-sizing: border-box;
-		padding: 0 20px;
-		align-items: center;
-		margin-bottom: 10px;
-		&:last-of-type {
-			margin-bottom: 0;
-		}
-		&.active {
-			.music-info {
-				.music-name,
-				.small-icon,
-				.music-singer {
-					color: #f84e51 !important;
-				}
-			}
-		}
-		.music-img {
-			width: 58px;
-			border-radius: 6px;
-		}
-		.music-info {
-			margin-left: 15px;
-			max-width: calc(100% - 80px);
-			.music-name {
-				font-size: 30rpx;
-				margin-bottom: 7px;
-				color: #000;
-			}
-			.music-singer {
-				color: rgba(0, 0, 0, 0.5);
-				font-size: 24rpx;
-				align-items: center;
-				width: 100%;
-				.small-icon {
-					margin-right: 6px;
-					transform: scale(0.9);
-					color: rgba(0, 0, 0, 0.5);
-					font-size: 12px;
-					padding: 1px 3px;
-					border: 1px solid rgba(0, 0, 0, 0.2);
-					border-radius: 4px;
-				}
-			}
-		}
-	}
-}
-</style>

+ 144 - 18
sleep/pages/shareUser/shareUser.vue

@@ -7,47 +7,173 @@
 	      <view class="flex-col">
 	        <text class="self-start font_1 text_2">共享用户</text>
 	        <view class="flex-col group_3 space-y-10">
-	          <view class="flex-row justify-between items-center section_6">
+
+	          <view class="flex-row justify-between items-center section_6" v-for="(item, index) in tableData" :key="index">
 	            <view class="flex-row">
-	              <image
-	                class="image_6"
-	                src="http://wdklmall.oss-cn-shenzhen.aliyuncs.com/mallgoods/goods/7F70B5FF967F44BC97BD7CD8786A70B4.png"
-	              />
+	              <image v-if="item.face === null || item.face === ''" class="image_6" src="http://wdklmall.oss-cn-shenzhen.aliyuncs.com/mallgoods/goods/7F70B5FF967F44BC97BD7CD8786A70B4.png"/>
+                <image v-else class="image_6" :src="item.face"/>
 	              <view class="flex-col items-start group_4 space-y-10">
-	                <text class="font_1 text_3">弘枫琬</text>
-	                <text class="text_5">14872220394</text>
-	                <text class="text_6 text_7">2020-09-19 03:22:34</text>
+	                <text class="font_1 text_3">{{ item.nickname }}</text>
+	                <text class="text_5">{{ item.mobile }}</text>
+	                <text class="text_6 text_7">{{ formatTime(item.create_time) }}</text>
 	              </view>
 	            </view>
-	            <view class="flex-col justify-start items-center text-wrapper"><text class="text_4">删除</text></view>
+	            <view class="flex-col justify-start items-center text-wrapper" @click="deleteById(item.id)"><text class="text_4">删除</text></view>
 	          </view>
-	          <view class="flex-row justify-center items-center section_7 space-x-10">
-	            <image
-	              class="image_7"
-	              src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/649415135a7e3f0310661c1e/649415b654fe0000116ae544/16874414496441492308.png"
-	            />
+
+	          <view class="flex-row justify-center items-center section_7 space-x-10" @click="modalName ='DialogModal'">
+	            <image class="image_7" src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/649415135a7e3f0310661c1e/649415b654fe0000116ae544/16874414496441492308.png"/>
 	            <text class="text_8">添加用户</text>
 	          </view>
 	        </view>
 	      </view>
 	      <view class="flex-row justify-center items-center relative group_5">
-	        <view class="flex-col justify-start items-center button"><text class="font_2">完成</text></view>
-	        <text class="font_2 text_6 pos_2">跳过</text>
+	        <view class="flex-col justify-start items-center button"><text class="font_2" @click="back">完成</text></view>
+<!--	        <text class="font_2 text_6 pos_2">跳过</text>-->
 	      </view>
 	    </view>
 	  </view>
+    <view class="cu-modal" :class="modalName ==='DialogModal'?'show':''">
+      <view class="cu-dialog">
+        <view class="cu-bar bg-white justify-end">
+          <view style="color: black" class="content">共享用户</view>
+          <view class="action" @tap="hideModal">
+            <text class="cuIcon-close text-red"></text>
+          </view>
+        </view>
+        <view class="padding-xl">
+          <input v-model="searchPhone" placeholder="请输入对方手机号" name="input" />
+        </view>
+        <view class="cu-bar bg-white justify-end">
+          <view class="action">
+            <button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
+            <button class="cu-btn bg-green margin-left" @tap="addLook">申请查看</button>
+          </view>
+        </view>
+      </view>
+    </view>
 	</view>
 </template>
 
 <script>
+import Storage from '@/utils/storage'
+import { unixToDate } from '@/ui-utils/Foundation'
+import * as API_vitalSignsLook from '@/api/vitalSignsLook'
+import {addByMobile} from "../../api/vitalSignsLook";
 	export default {
 		data() {
 			return {
-
+        page_size: 20,
+        page_no: 1,
+        tableData: [],
+        finishedLoad: false,
+        uid: '',
+        modalName: false,
+        searchPhone: ''
 			}
 		},
+    onShow() {
+		  this.uid = Storage.getItem('uid')
+      if (this.uid) {
+        this.sx()
+      }
+    },
+    onPullDownRefresh() {
+      this.sx()
+    },
+    onReachBottom() {
+      if (!this.finishedLoad) {
+        this.page_no += 1;
+        this.GET_MemberList()
+      }
+    },
 		methods: {
-
+      sx() {
+        this.page_no = 1
+        this.finishedLoad = false
+        this.tableData = []
+        this.GET_MemberList()
+      },
+      /** 加载用户列表 */
+      GET_MemberList() {
+        const params = {
+          page_no: this.page_no,
+          page_size: this.page_size,
+        }
+        params.fixedCondition = ' ccll.status=1 and ccll.friend_id=' + this.uid + ' and ccll.member_id = em.member_id'
+        let _this = this
+        API_vitalSignsLook.getList(params).then(res => {
+          console.log('res====', res)
+          if (res.data.length > 0) {
+            _this.tableData.push(...res.data);
+          } else {
+            _this.finishedLoad = true;
+          }
+        }).catch(() => {
+          _this.loading = false
+        })
+      },
+      back() {
+        uni.navigateBack()
+      },
+      formatTime(value) {
+        return unixToDate(value, '')
+      },
+      deleteById(id) {
+        let _this = this
+        uni.showModal({
+          title: '警告',
+          content: '删除操作后数据不可复原,您确定要删除此数据?',
+          success: function (res) {
+            if (res.confirm) {
+              API_vitalSignsLook.deleteLogLook(id).then(
+                  res => {
+                    _this.sx()
+                    uni.showToast({
+                      title: '已删除!'
+                    })
+                  }
+              )
+            }
+          }
+        })
+      },
+      hideModal(e) {
+        this.modalName = null
+      },
+      addLook() {
+        if (this.searchPhone === '') {
+          uni.showModal({
+            content: '请输入对方手机号',
+            showCancel: false
+          })
+          return
+        }
+        let params = {
+          friend_id: this.uid,
+          type: 0,
+          add_member_id: this.uid,
+          status: 1,
+          phone: this.searchPhone
+        }
+        const _this = this
+        API_vitalSignsLook.addByMobile(params).then(res => {
+          if (!res.success) {
+            uni.showModal({
+              content: res.message,
+              showCancel: false
+            })
+          } else {
+            uni.showToast({
+              title: '操作成功',
+              icon: 'none'
+            })
+            _this.modalName = null
+            _this.searchPhone = ''
+            _this.sx()
+          }
+        })
+      }
 		}
 	}
 </script>

+ 0 - 233
sleep/pages/singer/index.vue

@@ -1,233 +0,0 @@
-<template>
-	<view class="singer-container">
-		<cu-custom bgColor="#fff" :isBack="true"><view slot="content" style="color: #000">热门歌手</view></cu-custom>
-		<scroll-view scroll-y class="indexes" :scroll-into-view="'indexes-' + listCurID" :style="[{ height: height }]" :scroll-with-animation="true" :enable-back-to-top="true">
-			<block v-for="(item, index) in list" :key="index">
-				<view :class="'indexItem-' + item.name" :id="'indexes-' + item.name" :data-index="item.name">
-					<view class="padding">{{ item.name }}</view>
-					<view class="cu-list page-background menu-avatar no-padding">
-						<view class="cu-item bg-white" v-for="val in item.value" :key="val.id" @click="searchDetailSinger(val)">
-							<view class="cu-avatar round lg" :style="'background-image:url(' + val.picUrl + '?param=100y100)'"></view>
-							<view class="content">
-								<view class="singer-name text-overflow">{{ val.name }}</view>
-								<view class="singer-count" v-if="val.musicSize">{{ val.musicSize }}首</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</block>
-		</scroll-view>
-		<view class="indexBar" :style="[{ height: 'calc(' + height + ' - 50px)' }]">
-			<view class="indexBar-box" @touchstart="tStart" @touchend="tEnd" @touchmove.stop="tMove">
-				<view
-					class="indexBar-item"
-					:class="{ active: item.name === listCur }"
-					v-for="(item, index) in list"
-					:key="index"
-					:id="index"
-					@touchstart="getCur"
-					@touchend="setCur"
-				>
-					{{ item.name }}
-				</view>
-			</view>
-		</view>
-		<!--选择显示-->
-		<view v-show="!hidden" class="indexToast">{{ listCur }}</view>
-		<music-control v-if="playInfo.id" />
-	</view>
-</template>
-
-<script>
-import { getGroupByPinyin } from '../../plugins/pinyin/utils.js';
-export default {
-	data() {
-		return {
-			hidden: true,
-			listCurID: '',
-			list: [],
-			listCur: ''
-		};
-	},
-	computed: {
-		height() {
-			let height = this.CustomBar / (uni.upx2px(this.CustomBar) / this.CustomBar);
-			if (this.playInfo.id) {
-				height += 110;
-			}
-			return `calc(100vh  - ${height}rpx)`;
-		},
-		playInfo() {
-			return this.$store.state.playInfo;
-		}
-	},
-	created() {
-		this.getSingerList();
-	},
-	onReady() {
-		let that = this;
-		uni.createSelectorQuery()
-			.select('.indexBar-box')
-			.boundingClientRect(function(res) {
-				that.boxTop = res.top;
-			})
-			.exec();
-		uni.createSelectorQuery()
-			.select('.indexes')
-			.boundingClientRect(function(res) {
-				that.barTop = res.top;
-			})
-			.exec();
-	},
-	methods: {
-		async getSingerList() {
-			const data = await this.$api.getSingerList();
-			let list = data.list.artists;
-
-			this.list = getGroupByPinyin(list);
-			this.listCur = this.list[0];
-		},
-		searchDetailSinger(val) {
-			uni.navigateTo({
-				url: '../singerPlayList/index?id=' + val.id
-			});
-		},
-		//获取文字信息
-		getCur(e) {
-			this.hidden = false;
-			this.listCur = this.list[e.target.id].name;
-		},
-		setCur(e) {
-			this.hidden = true;
-		},
-		//滑动选择Item
-		tMove(e) {
-			let y = e.touches[0].clientY,
-				offsettop = this.boxTop,
-				that = this;
-			//判断选择区域,只有在选择区才会生效
-			if (y > offsettop) {
-				let num = parseInt((y - offsettop) / 20);
-				this.listCur = that.list[num].name;
-			}
-		},
-		//触发全部开始选择
-		tStart() {
-			this.hidden = false;
-		},
-		//触发结束选择
-		tEnd() {
-			this.hidden = true;
-			this.listCurID = this.listCur;
-		},
-		indexSelect(e) {
-			let that = this;
-			let barHeight = this.barHeight;
-			let list = this.list;
-			let scrollY = Math.ceil((list.length * e.detail.y) / barHeight);
-			for (let i = 0; i < list.length; i++) {
-				if (scrollY < i + 1) {
-					that.listCur = list[i].name;
-					that.movableY = i * 20;
-					return false;
-				}
-			}
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.singer-container {
-	width: 100%;
-	height: 100%;
-	position: relative;
-	.indexes {
-		position: relative;
-		.cu-item {
-			margin-bottom: 1px;
-			.singer-name {
-				font-size: 30rpx;
-				color: #000;
-			}
-			.singer-count {
-				margin-top: 2px;
-				color: rgba(0, 0, 0, 0.5);
-				font-size: 24rpx;
-			}
-		}
-
-		.cu-list.menu-avatar > .cu-item:after {
-			display: none !important;
-		}
-	}
-	.indexBar {
-		position: fixed;
-		right: 0px;
-		padding: 20upx 20upx 20upx 60upx;
-		display: flex;
-		top: 50%;
-		transform: translateY(-50%);
-		align-items: center;
-		.indexBar-box {
-			width: 40upx;
-			height: auto;
-			background: #fff;
-			display: flex;
-			flex-direction: column;
-			box-shadow: 0 0 20upx rgba(0, 0, 0, 0.1);
-			border-radius: 10upx;
-			.indexBar-item {
-				flex: 1;
-				width: 40upx;
-				height: 40upx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				font-size: 24upx;
-				color: rgba(0, 0, 0, 0.5);
-				margin-top: 3px;
-				&:last-of-type {
-					margin-bottom: 3px;
-				}
-				&.active {
-					color: rgb(248, 78, 81) !important;
-					font-weight: 600;
-					font-size: 28upx;
-				}
-			}
-			movable-view.indexBar-item {
-				width: 40upx;
-				height: 40upx;
-				z-index: 9;
-				position: relative;
-			}
-			movable-view.indexBar-item::before {
-				content: '';
-				display: block;
-				position: absolute;
-				left: 0;
-				top: 10upx;
-				height: 20upx;
-				width: 4upx;
-				background-color: #f37b1d;
-			}
-		}
-	}
-	.indexToast {
-		position: fixed;
-		top: 0;
-		right: 80upx;
-		bottom: 0;
-		background: rgba(0, 0, 0, 0.5);
-		width: 100upx;
-		height: 100upx;
-		border-radius: 10upx;
-		margin: auto;
-		color: #fff;
-		line-height: 100upx;
-		text-align: center;
-		font-size: 48upx;
-	}
-}
-</style>

+ 0 - 283
sleep/pages/singerPlayList/index.vue

@@ -1,283 +0,0 @@
-<template>
-	<view class="singerInfo-container">
-		<view class="vague-wrapper bg-img bg-mask flex align-center" :style="{ 'background-image': 'url(' + singerInfo.cover + ')' }">
-			<cu-custom class="head-title" :isBack="true" bgColor="unset"></cu-custom>
-			<view class="day-recommend-info" :style="{ 'padding-top': '40px'}">
-				<view class="description-wrapper">
-					<view class="title">{{ singerInfo.name }}</view>
-					<view class="tags flex">
-						<view class="cu-capsule round" style="margin-right: 20px;">
-							<view class="cu-tag tag-text">歌曲</view>
-							<view class="cu-tag ">{{ singerInfo.musicSize }}</view>
-						</view>
-						<view class="cu-capsule round ">
-							<view class="cu-tag tag-text">MV</view>
-							<view class="cu-tag ">{{ singerInfo.mvSize }}</view>
-						</view>
-					</view>
-					<view class="description" v-if="singerInfo.briefDesc">简介:{{ singerInfo.briefDesc }}</view>
-				</view>
-			</view>
-		</view>
-		<view class="recommend-main" :class="{ hasPlayInfo: playInfo.id }">
-			<view class="recommend-list">
-				<view class="music-title" @click="handlePlayAllMusic">
-					<text class="iconfont icon-kaishi3 basic-icon-color playIcon"></text>
-					全部播放
-					<text class="light-text">(共{{ total }}首)</text>
-				</view>
-				<scroll-view scroll-y scroll-with-animation style="height: calc(100% - 55px)" @scrolltolower="reachBottom()">
-					<view class="music-item flex" :class="{ active: item.id == playInfo.id }" v-for="(item, index) in musicList" :key="item.id" @click="handlePlayMusic(item)">
-						<view class="index">{{ index + 1 }}</view>
-						<view class="music-info">
-							<view class="music-name text-overflow">{{ item.name }}</view>
-							<view class="music-singer text-overflow flex">
-								<span class="small-icon">{{ item.id % 2 == 0 ? 'SQ' : 'HD' }}</span>
-								{{ item.ar ? item.ar.map(item => item.name).join('/') : '' }}
-							</view>
-						</view>
-					</view>
-				</scroll-view>
-			</view>
-		</view>
-		<music-control v-if="playInfo.id" />
-	</view>
-</template>
-
-<script>
-import { getImage, getName } from '@/utils/index.js';
-import { mapState } from 'vuex';
-export default {
-	data() {
-		return {
-			singerInfo: {},
-			musicList: [],
-			status: null,
-			total: 0,
-			offset: 0,
-			limit: 30,
-			id: ''
-		};
-	},
-	onLoad(val) {
-		this.id = val.id;
-		this.getDetail();
-		this.getSingerSong();
-	},
-	computed: mapState({
-		playInfo: state => state.playInfo
-	}),
-	methods: {
-		async getDetail() {
-			const { id } = this;
-			const { data } = await this.$api.getSingerInfo({ id });
-			this.singerInfo = data.artist || {};
-		},
-
-		async getSingerSong() {
-			uni.showLoading({
-				title: '加载中...'
-			});
-			const { id, offset, limit } = this;
-			const list = await this.$api.getSingerAllMusic({ id, order: 'hot', offset, limit });
-			this.total = list.total || 0;
-			this.musicList.push(...list.songs);
-			this.status = null;
-			uni.hideLoading();
-		},
-
-		//加载更多
-		reachBottom() {
-			this.status = 'loading';
-			if (this.offset >= this.total) {
-				this.status = 'notMore';
-				return;
-			}
-			this.offset += 50;
-			if (this.offset > this.total) {
-				this.offset = this.total;
-			}
-			this.getSingerSong();
-		},
-		//点击播放
-		handlePlayMusic(val) {
-			if (this.playInfo.id == val.id) {
-				uni.navigateTo({
-					url: '../play/index'
-				});
-				return;
-			}
-			this.$store.dispatch('playMusic', {
-				src: '',
-				title: val.name,
-				singer: getName(val),
-				coverImgUrl: this.singerInfo.cover + '?param=300y300',
-				id: val.id
-			});
-		},
-		handlePlayAllMusic() {
-			const list = this.musicList.map(item => {
-				return {
-					src: '',
-					title: item.name,
-					singer: getName(item),
-					coverImgUrl:this.singerInfo.cover + '?param=300y300' ,
-					id: item.id
-				};
-			});
-			this.$store.dispatch('playAllMUsic', list);
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.singerInfo-container {
-	width: 100%;
-	height: 100%;
-	.vague-wrapper {
-		height: 30%;
-		width: 100%;
-		position: relative;
-		.head-title {
-			color: #fff;
-			position: absolute;
-			top: 0;
-			width: 100%;
-			z-index: 9999;
-		}
-		.day-recommend-info {
-			box-sizing: border-box;
-			height: 100%;
-			display: flex;
-			align-items: center;
-			// justify-content: center;
-			width: 100%;
-			.bgImg {
-				width: 200rpx;
-				border-radius: 8px;
-				margin-right: 20px;
-			}
-			.description-wrapper {
-				box-sizing: border-box;
-				padding: 0 15px;
-				.title {
-					font-size: 40rpx;
-					color: #fff;
-				}
-				.tags {
-					margin: 15px 0;
-					.tag-text {
-						background-color: rgb(248, 78, 81);
-						color: #fff;
-					}
-				}
-				.description {
-					font-size: 24rpx;
-					color: #e1d7f0;
-					margin-top: 17rpx;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					display: -webkit-box;
-					-webkit-box-orient: vertical;
-					-webkit-line-clamp: 2;
-					line-height: 18px;
-				}
-			}
-		}
-	}
-	.recommend-main {
-		height: 70%;
-		width: 100%;
-		position: relative;
-		&.hasPlayInfo {
-			height: calc(70% - 110rpx);
-		}
-		.recommend-list {
-			position: absolute;
-			top: -5%;
-			left: 0;
-			right: 0;
-			bottom: 0;
-			background: #fff;
-			border-top-left-radius: 26px;
-			border-top-right-radius: 26px;
-			.music-title {
-				padding-left: 20px;
-				margin: 15px 0;
-				box-sizing: border-box;
-				color: #000;
-				font-size: 32rpx;
-				font-weight: 600;
-				.playIcon {
-					margin-right: 8px;
-					font-size: 40rpx;
-				}
-				.light-text {
-					font-size: 24rpx;
-					margin-left: 6px;
-					color: rgba(0, 0, 0, 0.5);
-				}
-			}
-			.music-item {
-				height: 70px;
-				box-sizing: border-box;
-				padding: 0 20px;
-				align-items: center;
-				margin-bottom: 10px;
-				&:last-of-type {
-					margin-bottom: 0;
-				}
-				&.active {
-					background-image: linear-gradient(to right, rgba(247, 73, 79, 0.1), rgba(247, 73, 79, 0.05));
-					.music-info {
-						.music-name,
-						.small-icon,
-						.music-singer {
-							color: #f84e51 !important;
-						}
-						&::before {
-							content: '';
-							width: 4px;
-							height: 65px;
-							background-image: linear-gradient(to bottom, rgb(253, 117, 102), rgb(247, 73, 79));
-							position: absolute;
-							left: 0px;
-							top: 3px;
-						}
-					}
-				}
-				.index {
-					color: #000;
-					margin-right: 3px;
-				}
-				.music-info {
-					margin-right: 15px;
-					margin-left: 15px;
-					width: calc(100vw - 135px);
-					text-align: left;
-					.music-name {
-						font-size: 30rpx;
-						margin-bottom: 7px;
-						color: #000;
-					}
-					.music-singer {
-						color: rgba(0, 0, 0, 0.5);
-						font-size: 24rpx;
-						align-items: center;
-						.small-icon {
-							margin-right: 6px;
-							transform: scale(0.9);
-							color: rgba(0, 0, 0, 0.5);
-							font-size: 12px;
-							padding: 1px 3px;
-							border: 1px solid rgba(0, 0, 0, 0.2);
-							border-radius: 4px;
-						}
-					}
-				}
-			}
-		}
-	}
-}
-</style>

+ 0 - 276
sleep/pages/songDetail/index.vue

@@ -1,276 +0,0 @@
-<template>
-	<view class="song-detail-container">
-		<view class="vague-wrapper  flex align-center">
-			<!-- <image src="../../static/background.png" class="background-img"></image> -->
-			<view class="absolve-wrapper">
-			<cu-custom class="head-title" :isBack="true" bgColor="unset"><block slot="content">歌单详情</block></cu-custom>
-			<view class="day-recommend-info" :style="{ 'padding-top': CustomBar + 'px' }">
-				<image :src="bgImg" mode="widthFix" class="bgImg"></image>
-				<view class="song-info">
-					<view class="name text-overflow">{{ currentPlayList.name }}</view>
-					<view class="content" v-if="currentPlayList.creator">
-						<image :src="currentPlayList.creator.avatarUrl + '?param45y45'" mode="" class="avatar"></image>
-						{{ currentPlayList.creator.nickname }}
-					</view>
-					<view class="description" v-if="currentPlayList.description">简介:{{ currentPlayList.description }}</view>
-				</view>
-			</view>
-		</view>
-		</view>
-		<view class="recommend-main" :class="{ hasPlayInfo: playInfo.id }">
-			<view class="recommend-list">
-				<view class="music-title" @click="handlePlayAllMusic">
-					<text class="iconfont icon-kaishi3 basic-icon-color playIcon"></text>
-					全部播放
-					<text class="light-text">(共{{ musicList.length }}首)</text>
-				</view>
-				<scroll-view scroll-y scroll-with-animation style="height: calc(100% - 55px)">
-					<view class="music-item flex" :class="{ active: item.id == playInfo.id }" v-for="(item, index) in musicList" :key="item.id" @click="handlePlayMusic(item)">
-						<image :src="item.al.picUrl + '?param=60y60'" mode="widthFix" class="music-img"></image>
-						<view class="music-info">
-							<view class="music-name text-overflow">{{ item.name }}</view>
-							<view class="music-singer text-overflow flex">
-								<span class="small-icon">{{ item.id % 2 == 0 ? 'SQ' : 'HD' }}</span>
-								{{ item.ar ? item.ar.map(item => item.name).join('/') : '' }}
-							</view>
-						</view>
-					</view>
-				</scroll-view>
-			</view>
-		</view>
-		<music-control v-if="playInfo.id" />
-	</view>
-</template>
-
-<script>
-import { getImage, getName } from '@/utils/index.js';
-import { mapState } from 'vuex';
-export default {
-	data() {
-		return {
-			currentPlayList: {},
-			musicList: [],
-			bgImg: '',
-			CustomBar:this.CustomBar-15
-		};
-	},
-	onLoad(val) {
-		this.getPlayDetail(val.id);
-	},
-	computed: mapState({
-		playInfo: state => state.playInfo
-	}),
-	methods: {
-		async getPlayDetail(id) {
-			uni.showLoading({
-				title: '加载中...'
-			});
-			const data = await this.$api.getPlayListData({ id });
-			this.currentPlayList = data.playlist || [];
-			this.bgImg = this.currentPlayList.coverImgUrl + 'param?300y300';
-			const arr = data.playlist.trackIds.map(item => item.id).join(',');
-			const list = await this.$api.getPlayDetail({ ids: arr });
-			this.musicList = list.songs || [];
-			uni.hideLoading();
-		},
-		//点击播放
-		handlePlayMusic(val) {
-			if (this.playInfo.id == val.id) {
-				uni.navigateTo({
-					url: '../play/index'
-				});
-				return;
-			}
-			this.$store.dispatch('playMusic', {
-				src: '',
-				title: val.name,
-				singer: getName(val),
-				coverImgUrl: getImage(val),
-				id: val.id
-			});
-		},
-
-		//播放全部
-		handlePlayAllMusic() {
-			const list = this.musicList.map(item => {
-				return {
-					src: '',
-					title: item.name,
-					singer: getName(item),
-					coverImgUrl: getImage(item),
-					id: item.id
-				};
-			});
-			this.$store.dispatch('playAllMUsic', list);
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.song-detail-container {
-	width: 100%;
-	height: 100%;
-	.vague-wrapper {
-		height: 30%;
-		width: 100%;
-		position: relative;
-		.background-img{
-		   width: 100%;
-		   height: 100%;
-		}
-		.absolve-wrapper{
-			position: absolute;
-			left: 0;
-			right: 0;
-			bottom: 0;
-			top: 0;
-			width: 100%;
-			height: 100%;
-			background-color: rgba(0,0,0,0.5);
-		}
-		.head-title {
-			color: #fff;
-			position: absolute;
-			top: 0;
-			width: 100%;
-			z-index: 9999;
-		}
-		.day-recommend-info {
-			box-sizing: border-box;
-			height: 100%;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			width: 100%;
-			.bgImg {
-				width: 200rpx;
-				border-radius: 8px;
-				margin-right: 20px;
-			}
-			.song-info {
-				margin-bottom: 12rpx;
-				color: #fff;
-				max-width: calc(100% - 175px);
-				.name {
-					font-size: 32rpx;
-				}
-				.content {
-					margin: 15rpx 0;
-					color: #fff;
-					.avatar {
-						width: 25px;
-						height: 25px;
-						border-radius: 50%;
-						display: inline-block;
-						vertical-align: middle;
-						margin-right: 6px;
-					}
-				}
-				.description {
-					font-size: 24rpx;
-					color: #e1d7f0;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					display: -webkit-box;
-					-webkit-box-orient: vertical;
-					-webkit-line-clamp: 2;
-					line-height: 18px;
-				}
-			}
-		}
-	}
-	.recommend-main {
-		height: 70%;
-		width: 100%;
-		position: relative;
-		&.hasPlayInfo {
-			height: calc(70% - 110rpx);
-		}
-		.recommend-list {
-			position: absolute;
-			top: -5%;
-			left: 0;
-			right: 0;
-			bottom: 0;
-			background: #fff;
-			border-top-left-radius: 26px;
-			border-top-right-radius: 26px;
-			.music-title {
-				padding-left: 20px;
-				margin: 15px 0;
-				box-sizing: border-box;
-				color: #000;
-				font-size: 32rpx;
-				font-weight: 600;
-				.playIcon {
-					margin-right: 8px;
-					font-size: 40rpx;
-				}
-				.light-text {
-					font-size: 24rpx;
-					margin-left: 6px;
-					color: rgba(0, 0, 0, 0.5);
-				}
-			}
-			.music-item {
-				height: 70px;
-				box-sizing: border-box;
-				padding: 0 20px;
-				align-items: center;
-				margin-bottom: 10px;
-				width: 100%;
-				&:last-of-type {
-					margin-bottom: 0;
-				}
-				&.active {
-					background-image: linear-gradient(to right, rgba(247, 73, 79, 0.1), rgba(247, 73, 79, 0.05));
-					.music-info {
-						.music-name,
-						.small-icon,
-						.music-singer {
-							color: #f84e51 !important;
-						}
-						&::before {
-							content: '';
-							width: 4px;
-							height: 65px;
-							background-image: linear-gradient(to bottom, rgb(253, 117, 102), rgb(247, 73, 79));
-							position: absolute;
-							left: 0px;
-							top: 3px;
-						}
-					}
-				}
-				.music-img {
-					width: 58px;
-					border-radius: 6px;
-				}
-				.music-info {
-					margin-left: 15px;
-					max-width: calc(100% - 75px);
-					.music-name {
-						font-size: 30rpx;
-						margin-bottom: 7px;
-						color: #000;
-					}
-					.music-singer {
-						color: rgba(0, 0, 0, 0.5);
-						font-size: 24rpx;
-						align-items: center;
-						.small-icon {
-							margin-right: 6px;
-							transform: scale(0.9);
-							color: rgba(0, 0, 0, 0.5);
-							font-size: 12px;
-							padding: 1px 3px;
-							border: 1px solid rgba(0, 0, 0, 0.2);
-							border-radius: 4px;
-						}
-					}
-				}
-			}
-		}
-	}
-}
-</style>

+ 0 - 266
sleep/pages/songList/index.vue

@@ -1,266 +0,0 @@
-<template>
-	<div class="playList-container">
-		<cu-custom bgColor="#fff" :isBack="true"><view slot="content" style="color: #000">歌单</view></cu-custom>
-		<scroll-view scroll-x class="bg-white nav" scroll-with-animation :scroll-left="scrollLeft">
-			<view class="cu-item" :class="item.name == currentName ? 'basic-icon-color cur' : ''" v-for="(item, index) in tagList" :key="index" @click="tabSelect(item, index)">
-				{{ item.name }}
-			</view>
-		</scroll-view>
-		<scroll-view scroll-y scroll-with-animation @scrolltolower="reachBottom()" :style="{ height: height, 'margin-top': '20rpx' }">
-			<box-title title="热门歌单" style="margin-top: 10px;"></box-title>
-			<view class="tower-swiper" @touchmove="TowerMove" @touchstart="TowerStart" @touchend="TowerEnd">
-				<view
-					class="tower-item"
-					:class="item.zIndex == 1 ? 'none' : ''"
-					v-for="(item, index) in swiperList"
-					:key="index"
-					:style="[{ '--index': item.zIndex, '--left': item.mLeft }]"
-					:data-direction="direction"
-					@click="toPlayListDetail(item)"
-				>
-					<view class="swiper-item">
-						<image :src="item.coverImgUrl + '?param=200y200'" mode="aspectFill" class="swiper-item-img">
-							<view class="title" v-if="item.mLeft == 0">{{ item.name }}</view>
-						</image>
-					</view>
-				</view>
-			</view>
-			<box-title title="歌单列表" style="margin-top: 30px;"></box-title>
-			<div class="musicList">
-				<view class="list-item" v-for="item in recommendList" :key="item.id">
-					<view class="hotCount" v-if="item.playCount > 0 || item.playcount > 0">
-						<text class="iconfont icon-kaishi" style="margin-right: 3.5px;"></text>
-						<text>{{ playCount(item.playCount || item.playcount) }}</text>
-					</view>
-					<view class="bg-img flex align-end list-item-image" :style="'background-image:url(' + item.coverImgUrl + '?param=230y230)'" @click="toPlayListDetail(item)">
-						<view class="bg-shadeBottom padding-top-xl radioName">{{ item.name }}</view>
-					</view>
-					<view class="list-item-text">{{ item.name }}</view>
-				</view>
-				<view class="loading" v-if="status == 'loading' || status == 'notMore'">{{ status == 'notMore' ? '没有更多了' : '努力加载中...' }}</view>
-			</div>
-		</scroll-view>
-		<music-control v-if="playInfo.id" />
-	</div>
-</template>
-
-<script>
-import { filterPlayCount } from '@/utils/index.js';
-export default {
-	data() {
-		return {
-			recommendList: [],
-			direction: '',
-			swiperList: [],
-			currentName: '全部',
-			scrollLeft: 0,
-			tagList: [],
-			status: null,
-			total: 0,
-			offset: 0
-		};
-	},
-	created() {
-		this.getSongTagList();
-		this.getRecommendData();
-	},
-	computed: {
-		height() {
-			let height = this.CustomBar / (uni.upx2px(this.CustomBar) / this.CustomBar)
-			if (this.playInfo.id) {
-				height += 110;
-			}
-			return `calc(100%  - ${height}rpx)`;
-		},
-		playInfo() {
-			return this.$store.state.playInfo;
-		}
-	},
-	methods: {
-		//获取歌单分类
-		async getSongTagList() {
-			const data = await this.$api.getSongTagList();
-			let list = data.sub || [];
-			if (list.length > 0) {
-				list = list.slice(0, 10);
-			}
-			this.tagList = [{ name: '全部' }, ...list];
-		},
-
-		//加载更多
-		reachBottom() {
-			this.status = 'loading';
-			if (this.offset >= this.total) {
-				this.status = 'notMore';
-				return;
-			}
-			this.offset += 30;
-			if (this.offset > this.total) {
-				this.offset = this.total;
-			}
-
-			this.getRecommendData(true);
-		},
-
-		//获取对应歌单
-		async getRecommendData(bool) {
-			const cat = this.currentName;
-			const offset = this.offset;
-			const data = await this.$api.getSongList({ cat, offset, limit: 30, order: 'hot' });
-			this.total = data.total || 0;
-			let list = data.playlists || [];
-			if (bool) {
-				this.recommendList.push(...list);
-				this.status = null;
-			} else {
-				let swiperList = list.slice(0, 6);
-				swiperList.forEach((item, index) => {
-					item.zIndex = parseInt(swiperList.length / 2) + 1 - Math.abs(index - parseInt(swiperList.length / 2));
-					item.mLeft = index - parseInt(swiperList.length / 2);
-				});
-				this.swiperList = swiperList;
-				this.recommendList = list.slice(6);
-			}
-		},
-
-		playCount(val) {
-			return filterPlayCount(val);
-		},
-
-		tabSelect(val, index) {
-			this.currentName = val.name;
-			this.scrollLeft = (index - 1) * 60;
-			this.offset = 0;
-			this.total = 0;
-			this.swiperList = [];
-			this.recommendList = [];
-			this.getRecommendData();
-		},
-		// towerSwiper触摸开始
-		TowerStart(e) {
-			this.towerStart = e.touches[0].pageX;
-		},
-		// towerSwiper计算方向
-		TowerMove(e) {
-			this.direction = e.touches[0].pageX - this.towerStart > 0 ? 'right' : 'left';
-		},
-		// towerSwiper计算滚动
-		TowerEnd(e) {
-			let direction = this.direction;
-			let list = this.swiperList;
-			if (direction == 'right') {
-				let mLeft = list[0].mLeft;
-				let zIndex = list[0].zIndex;
-				for (let i = 1; i < this.swiperList.length; i++) {
-					this.swiperList[i - 1].mLeft = this.swiperList[i].mLeft;
-					this.swiperList[i - 1].zIndex = this.swiperList[i].zIndex;
-				}
-				this.swiperList[list.length - 1].mLeft = mLeft;
-				this.swiperList[list.length - 1].zIndex = zIndex;
-			} else {
-				let mLeft = list[list.length - 1].mLeft;
-				let zIndex = list[list.length - 1].zIndex;
-				for (let i = this.swiperList.length - 1; i > 0; i--) {
-					this.swiperList[i].mLeft = this.swiperList[i - 1].mLeft;
-					this.swiperList[i].zIndex = this.swiperList[i - 1].zIndex;
-				}
-				this.swiperList[0].mLeft = mLeft;
-				this.swiperList[0].zIndex = zIndex;
-			}
-			this.direction = '';
-			this.swiperList = this.swiperList;
-		},
-
-		toPlayListDetail(val) {
-			uni.navigateTo({
-				url: '../songDetail/index?id=' + val.id
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.playList-container {
-	width: 100%;
-	height: 100%;
-	.tower-swiper {
-		height: 400rpx !important;
-		overflow: unset;
-		.tower-item {
-			width: 330rpx;
-			transform: scale(calc(0.5 + var(--index) / 10));
-			margin-left: calc(var(--left) * 100upx - 150upx);
-			z-index: var(--index);
-			.swiper-item {
-				.swiper-item-img {
-					border-radius: 6px;
-				}
-				.title {
-					text-align: center;
-					margin-top: 10px;
-					position: absolute;
-					color: rgba(0, 0, 0, 0.5);
-					font-size: 14px;
-				}
-			}
-		}
-	}
-	.musicList {
-		padding-left: 15px;
-		width: 100%;
-		position: relative;
-		box-sizing: border-box;
-		margin-top: 15px;
-		.list-item {
-			width: calc(100% / 3 - 15px);
-			margin-right: 15px;
-			margin-bottom: 7px;
-			display: inline-block;
-			overflow: hidden;
-			position: relative;
-
-			.hotCount {
-				position: absolute;
-				width: 100%;
-				height: 50px;
-				padding: 3px 6px 0 0;
-				text-align: right;
-				color: #fff;
-				z-index: 10;
-				font-size: 12px;
-				background-image: linear-gradient(rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0));
-				border-radius: 6px;
-			}
-
-			.list-item-image {
-				height: 115px;
-				border-radius: 6px;
-			}
-
-			.list-item-text {
-				height: 35px;
-				width: 100%;
-				padding-top: 2px;
-				white-space: normal;
-				color: rgba(0, 0, 0, 0.5);
-				font-size: 12px;
-				display: -webkit-box;
-				-webkit-box-orient: vertical;
-				-webkit-line-clamp: 2;
-				overflow: hidden;
-			}
-
-			.radioName {
-				width: 100%;
-				color: #fff;
-				font-size: 12px;
-				overflow: hidden;
-				text-overflow: ellipsis;
-				white-space: nowrap;
-				padding: 0 0 8px 8px;
-			}
-		}
-	}
-}
-</style>

二進制
sleep/static/NO1.png


二進制
sleep/static/NO2.png


二進制
sleep/static/NO3.png


二進制
sleep/static/familyBg.png


二進制
sleep/static/home/homeBg2.png


二進制
sleep/static/home/homeBgHeart.png


二進制
sleep/static/home/homeHead.png


二進制
sleep/static/home/homeReportBg.png


二進制
sleep/static/music.png


二進制
sleep/static/musicImg.png


+ 0 - 8
sleep/uni_modules/luyj-steps/changelog.md

@@ -1,8 +0,0 @@
-## 1.0.3(2021-08-05)
-更新说明文件
-## 1.0.2(2021-07-17)
-发布示例项目
-## 1.0.1(2021-07-14)
-修改一些必要的说明
-## 1.0.0(2021-07-14)
-在官方uni-steps步骤条组件的基础上,添加纵向组件是否包含分割线参数

+ 0 - 264
sleep/uni_modules/luyj-steps/components/luyj-steps/luyj-steps.vue

@@ -1,264 +0,0 @@
-<template>
-	<view class="uni-steps">
-		<view :class="[direction==='column'?'uni-steps__column':'uni-steps__row']">
-			<view :class="[direction==='column'?'uni-steps__column-text-container':'uni-steps__row-text-container']">
-				<view v-for="(item,index) in options" :key="index" :class="[direction==='column'?'uni-steps__column-text':'uni-steps__row-text' , columnLine ? 'line' : '']">
-					<text :style="{color:index<=active?activeColor:deactiveColor}" :class="[direction==='column'?'uni-steps__column-title':'uni-steps__row-title']">{{item.title}}</text>
-					<text :style="{color:index<=active?activeColor:deactiveColor}" :class="[direction==='column'?'uni-steps__column-desc':'uni-steps__row-desc']">{{item.desc}}</text>
-				</view>
-			</view>
-			<view :class="[direction==='column'?'uni-steps__column-container':'uni-steps__row-container']">
-				<view :class="[direction==='column'?'uni-steps__column-line-item':'uni-steps__row-line-item']" v-for="(item,index) in options"
-				 :key="index">
-					<view :class="[direction==='column'?'uni-steps__column-line':'uni-steps__row-line',direction==='column'?'uni-steps__column-line--before':'uni-steps__row-line--before']"
-					 :style="{backgroundColor:index<=active&&index!==0?activeColor:index===0?'transparent':deactiveColor}"></view>
-					<view :class="[direction==='column'?'uni-steps__column-check':'uni-steps__row-check']" v-if="index === active">
-						<uni-icons :color="activeColor" type="checkbox-filled" size="14"></uni-icons>
-					</view>
-					<view :class="[direction==='column'?'uni-steps__column-circle':'uni-steps__row-circle']" v-else :style="{backgroundColor:index<active?activeColor:deactiveColor}"></view>
-					<view :class="[direction==='column'?'uni-steps__column-line':'uni-steps__row-line',direction==='column'?'uni-steps__column-line--after':'uni-steps__row-line--after']"
-					 :style="{backgroundColor:index<active&&index!==options.length-1?activeColor:index===options.length-1?'transparent':deactiveColor}"></view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-
-	/**
-	 * Steps 步骤条
-	 * @description 步骤条组件,提供横向和纵向布局格式
-	 * @tutorial https://ext.dcloud.net.cn/plugin?name=luyj-steps
-	 * @property {Number} active 当前步骤
-	 * @property {String} direction = [row|column] 排列方式
-	 * 	@value row 横向
-	 * 	@value column 纵向
-	 * @property {Boolean} columnLine 竖直排列时是否包含下划线 
-	 * @property {String} activeColor 选中状态的颜色
-	 * @property {Array} options 数据源,格式为:[{title:'xxx',desc:'xxx'},{title:'xxx',desc:'xxx'}]
-	 */
-
-	export default {
-		name: 'luyjSteps',
-		props: {
-			direction: {
-				// 排列方向 row column
-				type: String,
-				default: 'row'
-			},
-			// 竖直排列时是否包含下部的线(默认true)
-			columnLine :{
-				type: Boolean,
-				default: true,
-			},
-			activeColor: {
-				// 激活状态颜色
-				type: String,
-				default: '#1aad19'
-			},
-			deactiveColor: {
-				// 未激活状态颜色
-				type: String,
-				default: '#999999'
-			},
-			active: {
-				// 当前步骤
-				type: Number,
-				default: 0
-			},
-			options: {
-				type: Array,
-				default () {
-					return []
-				}
-			} ,// 数据
-		},
-		data() {
-			return {}
-		}		
-	}
-</script>
-
-<style lang="scss" scoped>
-	.uni-steps {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		width: 100%;
-		/* #endif */
-		/* #ifdef APP-NVUE */
-		flex: 1;
-		/* #endif */
-		flex-direction: column;
-	}
-
-	.uni-steps__row {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-	}
-
-	.uni-steps__column {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row-reverse;
-	}
-
-	.uni-steps__row-text-container {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		align-items: flex-end;
-		margin-bottom: 8px;
-	}
-
-	.uni-steps__column-text-container {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		flex: 1;
-	}
-
-	.uni-steps__row-text {
-		/* #ifndef APP-NVUE */
-		display: inline-flex;
-		/* #endif */
-		flex: 1;
-		flex-direction: column;
-	}
-
-	.uni-steps__column-text {
-		padding: 6px 0px;
-		border-bottom-width: 1px;
-		border-bottom-color: $uni-border-color;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-	}
-	
-	// 步骤条含有线(仅对垂直步骤条有效)
-	.uni-steps__column .line{
-		border-bottom-style: solid; 
-	}
-	
-	.uni-steps__row-title {
-		font-size: $uni-font-size-base;
-		line-height: 16px;
-		text-align: center;
-	}
-
-	.uni-steps__column-title {
-		font-size: $uni-font-size-base;
-		text-align: left;
-		line-height: 18px;
-	}
-
-	.uni-steps__row-desc {
-		font-size: 12px;
-		line-height: 14px;
-		text-align: center;
-	}
-
-	.uni-steps__column-desc {
-		font-size: $uni-font-size-sm;
-		text-align: left;
-		line-height: 18px;
-	}
-
-	.uni-steps__row-container {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-	}
-
-	.uni-steps__column-container {
-		/* #ifndef APP-NVUE */
-		display: inline-flex;
-		/* #endif */
-		width: 30px;
-		flex-direction: column;
-	}
-
-	.uni-steps__row-line-item {
-		/* #ifndef APP-NVUE */
-		display: inline-flex;
-		/* #endif */
-		flex-direction: row;
-		flex: 1;
-		height: 14px;
-		line-height: 14px;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.uni-steps__column-line-item {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		flex: 1;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.uni-steps__row-line {
-		flex: 1;
-		height: 1px;
-		background-color: $uni-text-color-grey;
-	}
-
-	.uni-steps__column-line {
-		width: 1px;
-		background-color: $uni-text-color-grey;
-	}
-
-	.uni-steps__row-line--after {
-		transform: translateX(1px);
-	}
-
-	.uni-steps__column-line--after {
-		flex: 1;
-		transform: translate(0px, 1px);
-	}
-
-	.uni-steps__row-line--before {
-		transform: translateX(-1px);
-	}
-
-	.uni-steps__column-line--before {
-		height: 6px;
-		transform: translate(0px, -1px);
-	}
-
-	.uni-steps__row-circle {
-		width: 5px;
-		height: 5px;
-		border-radius: 100px;
-		background-color: $uni-text-color-grey;
-		margin: 0px 3px;
-	}
-
-	.uni-steps__column-circle {
-		width: 5px;
-		height: 5px;
-		border-radius: 100px;
-		background-color: $uni-text-color-grey;
-		margin: 4px 0px 5px 0px;
-	}
-
-	.uni-steps__row-check {
-		margin: 0px 6px;
-	}
-
-	.uni-steps__column-check {
-		height: 14px;
-		line-height: 14px;
-		margin: 2px 0px;
-	}
-</style>

+ 0 - 79
sleep/uni_modules/luyj-steps/package.json

@@ -1,79 +0,0 @@
-{
-  "id": "luyj-steps",
-  "displayName": "luyj-steps 步骤条",
-  "version": "1.0.3",
-  "description": "步骤条组件,提供横向或者纵向两种布局格式",
-  "keywords": [
-    "uni-ui",
-    "uniui",
-    "步骤条",
-    "时间轴"
-],
-  "repository": "",
-  "engines": {
-    "HBuilderX": "^3.1.0"
-  },
-  "dcloudext": {
-    "category": [
-        "前端组件",
-        "通用组件"
-    ],
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "插件不采集任何数据",
-      "permissions": "无"
-    },
-    "npmurl": ""
-  },
-  "uni_modules": {
-    "dependencies": [],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
-      },
-      "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "y"
-        },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y"
-        },
-        "快应用": {
-          "华为": "y",
-          "联盟": "y"
-        }
-      }
-    }
-  }
-}

+ 0 - 43
sleep/uni_modules/luyj-steps/readme.md

@@ -1,43 +0,0 @@
-# luyj-steps 步骤条
-> **组件名:luyj-steps**
-> 代码块: `luyjSteps`
-
-### 说明
-本组件基于官方的步骤条组件uni-steps,添加了纵向步骤条是否显示分割线的参数。以下文档基本上在官方文档的基础上进行了修改。官方文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=34)
-
-### 安装方式
-
-本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
-
-如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
-
-### 基本用法
-
-在 ``template`` 中的使用
-
-```html
-<!-- 基本用法 -->
-<luyj-steps :options="[{title: '事件一'}, {title: '事件二'}, {title: '事件三'}, {title: '事件四'}]" :active="1"></luyj-steps>
-
-<!-- 纵向排列 -->
-<luyj-steps :options="[{title:'买家下单',desc:'2018-11-11'},{title:'卖家发货',desc:'2018-11-12'},{title:'买家签收',desc:'2018-11-13'},{title:'交易完成',desc:'2018-11-14'}]" direction="column" :columnLine="false" :active="2"></luyj-steps>
-```
-
-
-## API
-
-### Steps Props
-
-|属性名					|类型		|	可选值				|默认值	|说明																|
-|:-:						|:-:		|	:-:					|:-:		|:-:																|
-|active					|Number	|	-						|0			|当前步骤															|
-|**direction**	|String	|	row/column	|row		|排列方向|
-|**columnLine**	|Boolean	|	true/false	|true		|是否包含分割线(只对排列方式为column有效)|
-|active-color		|String	|	-						|#1aad19|选中状态的颜色														|
-|options				|Array	|	-						| - 		|数据源,格式为:[{title:'xxx',desc:'xxx'},{title:'xxx',desc:'xxx'}]|
-
-#### Direction Options
-| 属性名		| 说明		|
-| :-:			| :-:		|
-| row			| 横向		|
-| column	| 纵向		|

+ 0 - 320
sleep/uni_modules/qiun-data-charts/changelog.md

@@ -1,320 +0,0 @@
-## 2.5.0-20230101(2023-01-01)
-- 秋云图表组件 修改条件编译顺序,确保uniapp的cli方式的项目依赖不完整时可以正常显示
-- 秋云图表组件 恢复props属性directory的使用,以修复vue3项目中,开启echarts后,echarts目录识别错误的bug
-- uCharts.js 修复区域图、混合图只有一个数据时图表显示不正确的bug
-- uCharts.js 修复折线图、区域图中时间轴类别图表tooltip指示点显示不正确的bug
-- uCharts.js 修复x轴使用labelCount时,并且boundaryGap = 'justify' 并且关闭Y轴显示的时候,最后一个坐标值不显示的bug
-- uCharts.js 修复折线图只有一组数据时 ios16 渲染颜色不正确的bug
-- uCharts.js 修复玫瑰图半径显示不正确的bug
-- uCharts.js 柱状图、山峰图增加正负图功能,y轴网格如果需要显示0轴则由 min max 及 splitNumber 确定,后续版本优化自动显示0轴
-- uCharts.js 柱状图column增加 opts.extra.column.labelPosition,数据标签位置,有效值为 outside外部, insideTop内顶部, center内中间, bottom内底部
-- uCharts.js 雷达图radar增加 opts.extra.radar.labelShow,否显示各项标识文案是,默认true
-- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.boxPadding,提示窗边框填充距离,默认3px
-- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.fontSize,提示窗字体大小配置,默认13px
-- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.lineHeight,提示窗文字行高,默认20px
-- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.legendShow,是否显示左侧图例,默认true
-- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.legendShape,图例形状,图例标识样式,有效值为 auto自动跟随图例, diamond◆, circle●, triangle▲, square■, rect▬, line-
-- uCharts.js 标记线markLine增加 opts.extra.markLine.labelFontSize,字体大小配置,默认13px
-- uCharts.js 标记线markLine增加 opts.extra.markLine.labelPadding,标签边框内填充距离,默认6px
-- uCharts.js 折线图line增加 opts.extra.line.linearType,渐变色类型,可选值 none关闭渐变色,custom 自定义渐变色。使用自定义渐变色时请赋值serie.linearColor作为颜色值
-- uCharts.js 折线图line增加 serie.linearColor,渐变色数组,格式为2维数组[起始位置,颜色值],例如[[0,'#0EE2F8'],[0.3,'#2BDCA8'],[0.6,'#1890FF'],[1,'#9A60B4']]
-- uCharts.js 折线图line增加 opts.extra.line.onShadow,是否开启折线阴影,开启后请赋值serie.setShadow阴影设置
-- uCharts.js 折线图line增加 serie.setShadow,阴影配置,格式为4位数组:[offsetX,offsetY,blur,color]
-- uCharts.js 折线图line增加 opts.extra.line.animation,动画效果方向,可选值为vertical 垂直动画效果,horizontal 水平动画效果
-- uCharts.js X轴xAxis增加 opts.xAxis.lineHeight,X轴字体行高,默认20px
-- uCharts.js X轴xAxis增加 opts.xAxis.marginTop,X轴文字距离轴线的距离,默认0px
-- uCharts.js X轴xAxis增加 opts.xAxis.title,当前X轴标题
-- uCharts.js X轴xAxis增加 opts.xAxis.titleFontSize,标题字体大小,默认13px
-- uCharts.js X轴xAxis增加 opts.xAxis.titleOffsetY,标题纵向偏移距离,负数为向上偏移,正数向下偏移
-- uCharts.js X轴xAxis增加 opts.xAxis.titleOffsetX,标题横向偏移距离,负数为向左偏移,正数向右偏移
-- uCharts.js X轴xAxis增加 opts.xAxis.titleFontColor,标题字体颜色,默认#666666
-
-## 报错TypeError: Cannot read properties of undefined (reading 'length')
-- 如果是uni-modules版本组件,请先登录HBuilderX账号;
-- 在HBuilderX中的manifest.json,点击重新获取uniapp的appid,或者删除appid重新粘贴,重新运行;
-- 如果是cli项目请使用码云上的非uniCloud版本组件;
-- 或者添加uniCloud的依赖;
-- 或者使用原生uCharts;
-## 2.4.5-20221130(2022-11-30)
-- uCharts.js 优化tooltip当文字很多变为左侧显示时,如果画布仍显显示不下,提示框错位置变为以左侧0位置起画
-- uCharts.js 折线图修复特殊情况下只有单点数据,并改变线宽后点变为圆形的bug
-- uCharts.js 修复Y轴disabled启用后无效并报错的bug
-- uCharts.js 修复仪表盘起始结束角度特殊情况下显示不正确的bug
-- uCharts.js 雷达图新增参数 opts.extra.radar.radius , 自定义雷达图半径
-- uCharts.js 折线图、区域图增加tooltip指示点,opts.extra.line.activeType/opts.extra.area.activeType,可选值"none"不启用激活指示点,"hollow"空心点模式,"solid"实心点模式
-## 2.4.4-20221102(2022-11-02)
-- 秋云图表组件 修复使用echarts时reload、reshow无法调用重新渲染的bug,[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/40)
-- 秋云图表组件 修复使用echarts时,初始化时宽高不正确的bug,[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/42)
-- 秋云图表组件 修复uniapp的h5使用history模式时,无法加载echarts的bug
-- 秋云图表组件 小程序端@complete、@scrollLeft、@scrollRight、@getTouchStart、@getTouchMove、@getTouchEnd事件增加opts参数传出,方便一些特殊需求的交互获取数据。
-
-- uCharts.js 修复calTooltipYAxisData方法内formatter格式化方法未与y轴方法同步的问题,[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/43)
-- uCharts.js 地图新增参数opts.series[i].fillOpacity,以透明度方式来设置颜色过度效果,[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/38)
-- uCharts.js 地图新增参数opts.extra.map.active,是否启用点击激活变色
-- uCharts.js 地图新增参数opts.extra.map.activeTextColor,是否启用点击激活变色
-- uCharts.js 地图新增渲染完成事件renderComplete
-- uCharts.js 漏斗图修复当部分数据相同时tooltip提示窗点击错误的bug
-- uCharts.js 漏斗图新增参数series.data[i].centerText 居中标签文案
-- uCharts.js 漏斗图新增参数series.data[i].centerTextSize 居中标签文案字体大小,默认opts.fontSize
-- uCharts.js 漏斗图新增参数series.data[i].centerTextColor 居中标签文案字体颜色,默认#FFFFFF
-- uCharts.js 漏斗图新增参数opts.extra.funnel.minSize 最小值的最小宽度,默认0
-- uCharts.js 进度条新增参数opts.extra.arcbar.direction,动画方向,可选值为cw顺时针、ccw逆时针
-- uCharts.js 混合图新增参数opts.extra.mix.line.width,折线的宽度,默认2
-- uCharts.js 修复tooltip开启horizentalLine水平横线标注时,图表显示错位的bug
-- uCharts.js 优化tooltip当文字很多变为左侧显示时,如果画布仍显显示不下,提示框错位置变为以左侧0位置起画
-- uCharts.js 修复开启滚动条后X轴文字超出绘图区域后的隐藏逻辑
-- uCharts.js 柱状图、条状图修复堆叠模式不能通过{value,color}赋值单个柱子颜色的问题
-- uCharts.js 气泡图修复不识别series.textSize和series.textColor的bug
-
-## 报错TypeError: Cannot read properties of undefined (reading 'length')
-1. 如果是uni-modules版本组件,请先登录HBuilderX账号;
-2. 在HBuilderX中的manifest.json,点击重新获取uniapp的appid,或者删除appid重新粘贴,重新运行;
-3. 如果是cli项目请使用码云上的非uniCloud版本组件;
-4. 或者添加uniCloud的依赖;
-5. 或者使用原生uCharts;
-## 2.4.3-20220505(2022-05-05)
-- 秋云图表组件 修复开启canvas2d后将series赋值为空数组显示加载图标时,再次赋值后画布闪动的bug
-- 秋云图表组件 修复升级hbx最新版后ECharts的highlight方法报错的bug
-- uCharts.js 雷达图新增参数opts.extra.radar.gridEval,数据点位网格抽希,默认1
-- uCharts.js 雷达图新增参数opts.extra.radar.axisLabel,	是否显示刻度点值,默认false
-- uCharts.js 雷达图新增参数opts.extra.radar.axisLabelTofix,刻度点值小数位数,默认0
-- uCharts.js 雷达图新增参数opts.extra.radar.labelPointShow,是否显示末端刻度圆点,默认false
-- uCharts.js 雷达图新增参数opts.extra.radar.labelPointRadius,刻度圆点的半径,默认3
-- uCharts.js 雷达图新增参数opts.extra.radar.labelPointColor,刻度圆点的颜色,默认#cccccc
-- uCharts.js 雷达图新增参数opts.extra.radar.linearType,渐变色类型,可选值"none"关闭渐变,"custom"开启渐变
-- uCharts.js 雷达图新增参数opts.extra.radar.customColor,自定义渐变颜色,数组类型对应series的数组长度以匹配不同series颜色的不同配色方案,例如["#FA7D8D", "#EB88E2"]
-- uCharts.js 雷达图优化支持series.textColor、series.textSize属性
-- uCharts.js 柱状图中温度计式图标,优化支持全圆角类型,修复边框有缝隙的bug,详见官网【演示】中的温度计图表
-- uCharts.js 柱状图新增参数opts.extra.column.activeWidth,当前点击柱状图的背景宽度,默认一个单元格单位
-- uCharts.js 混合图增加opts.extra.mix.area.gradient 区域图是否开启渐变色
-- uCharts.js 混合图增加opts.extra.mix.area.opacity 区域图透明度,默认0.2
-- uCharts.js 饼图、圆环图、玫瑰图、漏斗图,增加opts.series[0].data[i].labelText,自定义标签文字,避免formatter格式化的繁琐,详见官网【演示】中的饼图
-- uCharts.js 饼图、圆环图、玫瑰图、漏斗图,增加opts.series[0].data[i].labelShow,自定义是否显示某一个指示标签,避免因饼图类别太多导致标签重复或者居多导致图形变形的问题,详见官网【演示】中的饼图
-- uCharts.js 增加opts.series[i].legendText/opts.series[0].data[i].legendText(与series.name同级)自定义图例显示文字的方法
-- uCharts.js 优化X轴、Y轴formatter格式化方法增加形参,统一为fromatter:function(value,index,opts){}
-- uCharts.js 修复横屏模式下无法使用双指缩放方法的bug
-- uCharts.js 修复当只有一条数据或者多条数据值相等的时候Y轴自动计算的最大值错误的bug
-- 【官网模板】增加外部自定义图例与图表交互的例子,[点击跳转](https://www.ucharts.cn/v2/#/layout/info?id=2)
-
-## 注意:非unimodules 版本如因更新 hbx 至 3.4.7 导致报错如下,请到码云更新非 unimodules 版本组件,[点击跳转](https://gitee.com/uCharts/uCharts/tree/master/uni-app/uCharts-%E7%BB%84%E4%BB%B6)
-> Error in callback for immediate watcher "uchartsOpts": "SyntaxError: Unexpected token u in JSON at position 0"
-## 2.4.2-20220421(2022-04-21)
-- 秋云图表组件 修复HBX升级3.4.6.20220420版本后echarts报错的问题
-## 2.4.2-20220420(2022-04-20)
-## 重要!此版本uCharts新增了很多功能,修复了诸多已知问题
-- 秋云图表组件 新增onzoom开启双指缩放功能(仅uCharts),前提需要直角坐标系类图表类型,并且ontouch为true、opts.enableScroll为true,详见实例项目K线图
-- 秋云图表组件 新增optsWatch是否监听opts变化,关闭optsWatch后,动态修改opts不会触发图表重绘
-- 秋云图表组件 修复开启canvas2d功能后,动态更新数据后画布闪动的bug
-- 秋云图表组件 去除directory属性,改为自动获取echarts.min.js路径(升级不受影响)
-- 秋云图表组件 增加getImage()方法及@getImage事件,通过ref调用getImage()方法获,触发@getImage事件获取当前画布的base64图片文件流。
-- 秋云图表组件 支付宝、字节跳动、飞书、快手小程序支持开启canvas2d同层渲染设置。
-- 秋云图表组件 新增加【非uniCloud】版本组件,避免有些不需要uniCloud的使用组件发布至小程序需要提交隐私声明问题,请到码云[【非uniCloud版本】](https://gitee.com/uCharts/uCharts/tree/master/uni-app/uCharts-%E7%BB%84%E4%BB%B6),或npm[【非uniCloud版本】](https://www.npmjs.com/package/@qiun/uni-ucharts)下载使用。
-- uCharts.js 新增dobuleZoom双指缩放功能
-- uCharts.js 新增山峰图type="mount",数据格式为饼图类格式,不需要传入categories,具体详见新版官网在线演示
-- uCharts.js 修复折线图当数据中存在null时tooltip报错的bug
-- uCharts.js 修复饼图类当画布比较小时自动计算的半径是负数报错的bug
-- uCharts.js 统一各图表类型的series.formatter格式化方法的形参为(val, index, series, opts),方便格式化时有更多参数可用
-- uCharts.js 标记线功能增加labelText自定义显示文字,增加labelAlign标签显示位置(左侧或右侧),增加标签显示位置微调labelOffsetX、labelOffsetY
-- uCharts.js 修复条状图当数值很小时开启圆角后样式错误的bug
-- uCharts.js 修复X轴开启disabled后,X轴仍占用空间的bug
-- uCharts.js 修复X轴开启滚动条并且开启rotateLabel后,X轴文字与滚动条重叠的bug
-- uCharts.js 增加X轴rotateAngle文字旋转自定义角度,取值范围(-90至90)
-- uCharts.js 修复地图文字标签层级显示不正确的bug
-- uCharts.js 修复饼图、圆环图、玫瑰图当数据全部为0的时候不显示数据标签的bug
-- uCharts.js 修复当opts.padding上边距为0时,Y轴顶部刻度标签位置不正确的bug
-
-## 另外我们还开发了各大原生小程序组件,已发布至码云和npm
-[https://gitee.com/uCharts/uCharts](https://gitee.com/uCharts/uCharts)
-[https://www.npmjs.com/~qiun](https://www.npmjs.com/~qiun)
-
-## 对于原生uCharts文档我们已上线新版官方网站,详情点击下面链接进入官网
-[https://www.uCharts.cn/v2/](https://www.ucharts.cn/v2/)
-## 2.3.7-20220122(2022-01-22)
-## 重要!使用vue3编译,请使用cli模式并升级至最新依赖,HbuilderX编译需要使用3.3.8以上版本
-- uCharts.js 修复uni-app平台组件模式使用vue3编译到小程序报错的bug。
-## 2.3.7-20220118(2022-01-18)
-## 注意,使用vue3的前提是需要3.3.8.20220114-alpha版本的HBuilder!
-## 2.3.67-20220118(2022-01-18)
-- 秋云图表组件 组件初步支持vue3,全端编译会有些问题,具体详见下面修改:
-1. 小程序端运行时,在uni_modules文件夹的qiun-data-charts.js中搜索 new uni_modules_qiunDataCharts_js_sdk_uCharts_uCharts.uCharts,将.uCharts去掉。
-2. 小程序端发行时,在uni_modules文件夹的qiun-data-charts.js中搜索 new e.uCharts,将.uCharts去掉,变为 new e。
-3. 如果觉得上述步骤比较麻烦,如果您的项目只编译到小程序端,可以修改u-charts.js最后一行导出方式,将 export default uCharts;变更为 export default { uCharts: uCharts }; 这样变更后,H5和App端的renderjs会有问题,请开发者自行选择。(此问题非组件问题,请等待DC官方修复Vue3的小程序端)
-## 2.3.6-20220111(2022-01-11)
-- 秋云图表组件 修改组件 props 属性中的 background 默认值为 rgba(0,0,0,0)
-## 2.3.6-20211201(2021-12-01)
-- uCharts.js 修复bar条状图开启圆角模式时,值很小时圆角渲染错误的bug
-## 2.3.5-20211014(2021-10-15)
-- uCharts.js 增加vue3的编译支持(仅原生uCharts,qiun-data-charts组件后续会支持,请关注更新)
-## 2.3.4-20211012(2021-10-12)
-- 秋云图表组件 修复 mac os x 系统 mouseover 事件丢失的 bug
-## 2.3.3-20210706(2021-07-06)
-- uCharts.js 增加雷达图开启数据点值(opts.dataLabel)的显示
-## 2.3.2-20210627(2021-06-27)
-- 秋云图表组件 修复tooltipCustom个别情况下传值不正确报错TypeError: Cannot read property 'name' of undefined的bug
-## 2.3.1-20210616(2021-06-16)
-- uCharts.js 修复圆角柱状图使用4角圆角时,当数值过大时不正确的bug
-## 2.3.0-20210612(2021-06-12)
-- uCharts.js 【重要】uCharts增加nvue兼容,可在nvue项目中使用gcanvas组件渲染uCharts,[详见码云uCharts-demo-nvue](https://gitee.com/uCharts/uCharts)
-- 秋云图表组件 增加tapLegend属性,是否开启图例点击交互事件
-- 秋云图表组件 getIndex事件中增加返回uCharts实例中的opts参数,以便在页面中调用参数
-- 示例项目 pages/other/other.vue增加app端自定义tooltip的方法,详见showOptsTooltip方法
-## 2.2.1-20210603(2021-06-03)
-- uCharts.js 修复饼图、圆环图、玫瑰图,当起始角度不为0时,tooltip位置不准确的bug
-- uCharts.js 增加温度计式柱状图开启顶部半圆形的配置
-## 2.2.0-20210529(2021-05-29)
-- uCharts.js 增加条状图type="bar"
-- 示例项目 pages/ucharts/ucharts.vue增加条状图的demo
-## 2.1.7-20210524(2021-05-24)
-- uCharts.js 修复大数据量模式下曲线图不平滑的bug
-## 2.1.6-20210523(2021-05-23)
-- 秋云图表组件 修复小程序端开启滚动条更新数据后滚动条位置不符合预期的bug
-## 2.1.5-2021051702(2021-05-17)
-- uCharts.js 修复自定义Y轴min和max值为0时不能正确显示的bug
-## 2.1.5-20210517(2021-05-17)
-- uCharts.js 修复Y轴自定义min和max时,未按指定的最大值最小值显示坐标轴刻度的bug
-## 2.1.4-20210516(2021-05-16)
-- 秋云图表组件 优化onWindowResize防抖方法
-- 秋云图表组件 修复APP端uCharts更新数据时,清空series显示loading图标后再显示图表,图表抖动的bug
-- uCharts.js 修复开启canvas2d后,x轴、y轴、series自定义字体大小未按比例缩放的bug
-- 示例项目 修复format-e.vue拼写错误导致app端使用uCharts渲染图表
-## 2.1.3-20210513(2021-05-13)
-- 秋云图表组件 修改uCharts变更chartData数据为updateData方法,支持带滚动条的数据动态打点
-- 秋云图表组件 增加onWindowResize防抖方法 fix by ど誓言,如尘般染指流年づ 
-- 秋云图表组件 H5或者APP变更chartData数据显示loading图表时,原数据闪现的bug
-- 秋云图表组件 props增加errorReload禁用错误点击重新加载的方法
-- uCharts.js 增加tooltip显示category(x轴对应点位)标题的功能,opts.extra.tooltip.showCategory,默认为false
-- uCharts.js 修复mix混合图只有柱状图时,tooltip的分割线显示位置不正确的bug
-- uCharts.js 修复开启滚动条,图表在拖动中动态打点,滚动条位置不正确的bug
-- uCharts.js 修复饼图类数据格式为echarts数据格式,series为空数组报错的bug
-- 示例项目 修改uCharts.js更新到v2.1.2版本后,@getIndex方法获取索引值变更为e.currentIndex.index
-- 示例项目 pages/updata/updata.vue增加滚动条拖动更新(数据动态打点)的demo
-- 示例项目 pages/other/other.vue增加errorReload禁用错误点击重新加载的demo
-## 2.1.2-20210509(2021-05-09)
-秋云图表组件 修复APP端初始化时就传入chartData或lacaldata不显示图表的bug
-## 2.1.1-20210509(2021-05-09)
-- 秋云图表组件 变更ECharts的eopts配置在renderjs内执行,支持在config-echarts.js配置文件内写function配置。
-- 秋云图表组件 修复APP端报错Prop being mutated: "onmouse"错误的bug。
-- 秋云图表组件 修复APP端报错Error: Not Found:Page[6][-1,27] at view.umd.min.js:1的bug。
-## 2.1.0-20210507(2021-05-07)
-- 秋云图表组件 修复初始化时就有数据或者数据更新的时候loading加载动画闪动的bug
-- uCharts.js 修复x轴format方法categories为字符串类型时返回NaN的bug
-- uCharts.js 修复series.textColor、legend.fontColor未执行全局默认颜色的bug
-## 2.1.0-20210506(2021-05-06)
-- 秋云图表组件 修复极个别情况下报错item.properties undefined的bug
-- 秋云图表组件 修复极个别情况下关闭加载动画reshow不起作用,无法显示图表的bug
-- 示例项目 pages/ucharts/ucharts.vue 增加时间轴折线图(type="tline")、时间轴区域图(type="tarea")、散点图(type="scatter")、气泡图demo(type="bubble")、倒三角形漏斗图(opts.extra.funnel.type="triangle")、金字塔形漏斗图(opts.extra.funnel.type="pyramid")
-- 示例项目 pages/format-u/format-u.vue 增加X轴format格式化示例
-- uCharts.js 升级至v2.1.0版本
-- uCharts.js 修复 玫瑰图面积模式点击tooltip位置不正确的bug
-- uCharts.js 修复 玫瑰图点击图例,只剩一个类别显示空白的bug
-- uCharts.js 修复 饼图类图点击图例,其他图表tooltip位置某些情况下不准的bug
-- uCharts.js 修复 x轴为矢量轴(时间轴)情况下,点击tooltip位置不正确的bug
-- uCharts.js 修复 词云图获取点击索引偶尔不准的bug
-- uCharts.js 增加 直角坐标系图表X轴format格式化方法(原生uCharts.js用法请使用formatter)
-- uCharts.js 增加 漏斗图扩展配置,倒三角形(opts.extra.funnel.type="triangle"),金字塔形(opts.extra.funnel.type="pyramid")
-- uCharts.js 增加 散点图(opts.type="scatter")、气泡图(opts.type="bubble")
-- 后期计划 完善散点图、气泡图,增加markPoints标记点,增加横向条状图。
-## 2.0.0-20210502(2021-05-02)
-- uCharts.js 修复词云图获取点击索引不正确的bug
-## 2.0.0-20210501(2021-05-01)
-- 秋云图表组件 修复QQ小程序、百度小程序在关闭动画效果情况下,v-for循环使用图表,显示不正确的bug
-## 2.0.0-20210426(2021-04-26)
-- 秋云图表组件 修复QQ小程序不支持canvas2d的bug
-- 秋云图表组件 修复钉钉小程序某些情况点击坐标计算错误的bug
-- uCharts.js 增加 extra.column.categoryGap 参数,柱状图类每个category点位(X轴点)柱子组之间的间距
-- uCharts.js 增加 yAxis.data[i].titleOffsetY 参数,标题纵向偏移距离,负数为向上偏移,正数向下偏移
-- uCharts.js 增加 yAxis.data[i].titleOffsetX 参数,标题横向偏移距离,负数为向左偏移,正数向右偏移
-- uCharts.js 增加 extra.gauge.labelOffset 参数,仪表盘标签文字径向便宜距离,默认13px
-## 2.0.0-20210422-2(2021-04-22)
-秋云图表组件 修复 formatterAssign 未判断 args[key] == null 的情况导致栈溢出的 bug
-## 2.0.0-20210422(2021-04-22)
-- 秋云图表组件 修复H5、APP、支付宝小程序、微信小程序canvas2d模式下横屏模式的bug
-## 2.0.0-20210421(2021-04-21)
-- uCharts.js 修复多行图例的情况下,图例在上方或者下方时,图例float为左侧或者右侧时,第二行及以后的图例对齐方式不正确的bug
-## 2.0.0-20210420(2021-04-20)
-- 秋云图表组件 修复微信小程序开启canvas2d模式后,windows版微信小程序不支持canvas2d模式的bug
-- 秋云图表组件 修改非uni_modules版本为v2.0版本qiun-data-charts组件
-## 2.0.0-20210419(2021-04-19)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件,请重启HBuilderX,如仍不好用,请重启电脑;
-## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。
-## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。
-## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
-## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! </font> 
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- uCharts.js 修复混合图中柱状图单独设置颜色不生效的bug
-- uCharts.js 修复多Y轴单独设置fontSize时,开启canvas2d后,未对应放大字体的bug
-## 2.0.0-20210418(2021-04-18)
-- 秋云图表组件 增加directory配置,修复H5端history模式下如果发布到二级目录无法正确加载echarts.min.js的bug
-## 2.0.0-20210416(2021-04-16)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件,请重启HBuilderX,如仍不好用,请重启电脑;
-## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。
-## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。
-## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
-## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! </font> 
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- 秋云图表组件 修复APP端某些情况下报错`Not Found Page`的bug,fix by 高级bug开发技术员
-- 示例项目 修复APP端v-for循环某些情况下报错`Not Found Page`的bug,fix by 高级bug开发技术员
-- uCharts.js 修复非直角坐标系tooltip提示窗右侧超出未变换方向显示的bug
-## 2.0.0-20210415(2021-04-15)
-- 秋云图表组件 修复H5端发布到二级目录下echarts无法加载的bug
-- 秋云图表组件 修复某些情况下echarts.off('finished')移除监听事件报错的bug
-## 2.0.0-20210414(2021-04-14)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件,请重启HBuilderX,如仍不好用,请重启电脑;
-## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。
-## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。
-## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
-## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! </font> 
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- 秋云图表组件 修复H5端在cli项目下ECharts引用地址错误的bug
-- 示例项目 增加ECharts的formatter用法的示例(详见示例项目format-e.vue)
-- uCharts.js 增加圆环图中心背景色的配置extra.ring.centerColor
-- uCharts.js 修复微信小程序安卓端柱状图开启透明色后显示不正确的bug
-## 2.0.0-20210413(2021-04-13)
-- 秋云图表组件 修复百度小程序多个图表真机未能正确获取根元素dom尺寸的bug
-- 秋云图表组件 修复百度小程序横屏模式方向不正确的bug
-- 秋云图表组件 修改ontouch时,@getTouchStart@getTouchMove@getTouchEnd的触发条件
-- uCharts.js 修复饼图类数据格式series属性不生效的bug
-- uCharts.js 增加时序区域图 详见示例项目中ucharts.vue
-## 2.0.0-20210412-2(2021-04-12)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件,请重启HBuilderX。如仍不好用,请重启电脑,此问题已于DCloud官方确认,HBuilderX下个版本会修复。
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [图表组件在uniCloudAdmin中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- 秋云图表组件 修复uCharts在APP端横屏模式下不能正确渲染的bug
-- 示例项目 增加ECharts柱状图渐变色、圆角柱状图、横向柱状图(条状图)的示例
-## 2.0.0-20210412(2021-04-12)
-- 秋云图表组件 修复created中判断echarts导致APP端无法识别,改回mounted中判断echarts初始化
-- uCharts.js 修复2d模式下series.textOffset未乘像素比的bug
-## 2.0.0-20210411(2021-04-11)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX,并清空小程序开发者工具缓存。
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [图表组件在uniCloudAdmin中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- uCharts.js 折线图区域图增加connectNulls断点续连的功能,详见示例项目中ucharts.vue
-- 秋云图表组件 变更初始化方法为created,变更type2d默认值为true,优化2d模式下组件初始化后dom获取不到的bug
-- 秋云图表组件 修复左右布局时,右侧图表点击坐标错误的bug,修复tooltip柱状图自定义颜色显示object的bug
-## 2.0.0-20210410(2021-04-10)
-- 修复左右布局时,右侧图表点击坐标错误的bug,修复柱状图自定义颜色tooltip显示object的bug
-- 增加标记线及柱状图自定义颜色的demo
-## 2.0.0-20210409(2021-04-08)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧【使用HBuilderX导入插件】即可体验,DEMO演示及在线生成工具(v2.0文档)[https://demo.ucharts.cn](https://demo.ucharts.cn)
-## 图表组件在uniCloudAdmin中的应用 [UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- uCharts.js 修复钉钉小程序百度小程序measureText不准确的bug,修复2d模式下饼图类activeRadius为按比例放大的bug
-- 修复组件在支付宝小程序端点击位置不准确的bug
-## 2.0.0-20210408(2021-04-07)
-- 修复组件在支付宝小程序端不能显示的bug(目前支付宝小程不能点击交互,后续修复)
-- uCharts.js 修复高分屏下柱状图类,圆弧进度条 自定义宽度不能按比例放大的bug
-## 2.0.0-20210407(2021-04-06)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧【使用HBuilderX导入插件】即可体验,DEMO演示及在线生成工具(v2.0文档)[https://demo.ucharts.cn](https://demo.ucharts.cn)
-## 增加 通过tofix和unit快速格式化y轴的demo add by `howcode`
-## 增加 图表组件在uniCloudAdmin中的应用 [UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-## 2.0.0-20210406(2021-04-05)
-# 秋云图表组件+uCharts v2.0版本同步上线,使用方法详见https://demo.ucharts.cn帮助页
-## 2.0.0(2021-04-05)
-# 秋云图表组件+uCharts v2.0版本同步上线,使用方法详见https://demo.ucharts.cn帮助页

文件差異過大導致無法顯示
+ 0 - 1618
sleep/uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue


文件差異過大導致無法顯示
+ 0 - 46
sleep/uni_modules/qiun-data-charts/components/qiun-error/qiun-error.vue


+ 0 - 162
sleep/uni_modules/qiun-data-charts/components/qiun-loading/loading1.vue

@@ -1,162 +0,0 @@
-<template>
-	 <view class="container loading1">
-		<view class="shape shape1"></view>
-		<view class="shape shape2"></view>
-		<view class="shape shape3"></view>
-		<view class="shape shape4"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'loading1',
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-
-<style scoped="true">
-.container {
-  width: 30px;
-  height: 30px;
-  position: relative;
-}
-.container.loading1 {
-  -webkit-transform: rotate(45deg);
-          transform: rotate(45deg);
-}
-
-.container .shape {
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  border-radius: 1px;
-}
-.container .shape.shape1 {
-  left: 0;
-  background-color: #1890FF;
-}
-.container .shape.shape2 {
-  right: 0;
-  background-color: #91CB74;
-}
-.container .shape.shape3 {
-  bottom: 0;
-  background-color: #FAC858;
-}
-.container .shape.shape4 {
-  bottom: 0;
-  right: 0;
-  background-color: #EE6666;
-}
-
-.loading1 .shape1 {
-  -webkit-animation: animation1shape1 0.5s ease 0s infinite alternate;
-          animation: animation1shape1 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation1shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(16px, 16px);
-            transform: translate(16px, 16px);
-  }
-}
-
-@keyframes animation1shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(16px, 16px);
-            transform: translate(16px, 16px);
-  }
-}
-.loading1 .shape2 {
-  -webkit-animation: animation1shape2 0.5s ease 0s infinite alternate;
-          animation: animation1shape2 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation1shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-16px, 16px);
-            transform: translate(-16px, 16px);
-  }
-}
-
-@keyframes animation1shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-16px, 16px);
-            transform: translate(-16px, 16px);
-  }
-}
-.loading1 .shape3 {
-  -webkit-animation: animation1shape3 0.5s ease 0s infinite alternate;
-          animation: animation1shape3 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation1shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(16px, -16px);
-            transform: translate(16px, -16px);
-  }
-}
-
-@keyframes animation1shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(16px, -16px);
-            transform: translate(16px, -16px);
-  }
-}
-.loading1 .shape4 {
-  -webkit-animation: animation1shape4 0.5s ease 0s infinite alternate;
-          animation: animation1shape4 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation1shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-16px, -16px);
-            transform: translate(-16px, -16px);
-  }
-}
-
-@keyframes animation1shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-16px, -16px);
-            transform: translate(-16px, -16px);
-  }
-}
-
-
-</style>

+ 0 - 170
sleep/uni_modules/qiun-data-charts/components/qiun-loading/loading2.vue

@@ -1,170 +0,0 @@
-<template>
-	 <view class="container loading2">
-		<view class="shape shape1"></view>
-		<view class="shape shape2"></view>
-		<view class="shape shape3"></view>
-		<view class="shape shape4"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'loading2',
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-
-<style scoped="true">
-.container {
-  width: 30px;
-  height: 30px;
-  position: relative;
-}
-
-.container.loading2 {
-  -webkit-transform: rotate(10deg);
-          transform: rotate(10deg);
-}
-.container.loading2 .shape {
-  border-radius: 5px;
-}
-.container.loading2{
-  -webkit-animation: rotation 1s infinite;
-          animation: rotation 1s infinite;
-}
-
-.container .shape {
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  border-radius: 1px;
-}
-.container .shape.shape1 {
-  left: 0;
-  background-color: #1890FF;
-}
-.container .shape.shape2 {
-  right: 0;
-  background-color: #91CB74;
-}
-.container .shape.shape3 {
-  bottom: 0;
-  background-color: #FAC858;
-}
-.container .shape.shape4 {
-  bottom: 0;
-  right: 0;
-  background-color: #EE6666;
-}
-
-
-.loading2 .shape1 {
-  -webkit-animation: animation2shape1 0.5s ease 0s infinite alternate;
-          animation: animation2shape1 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation2shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(20px, 20px);
-            transform: translate(20px, 20px);
-  }
-}
-
-@keyframes animation2shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(20px, 20px);
-            transform: translate(20px, 20px);
-  }
-}
-.loading2 .shape2 {
-  -webkit-animation: animation2shape2 0.5s ease 0s infinite alternate;
-          animation: animation2shape2 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation2shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-20px, 20px);
-            transform: translate(-20px, 20px);
-  }
-}
-
-@keyframes animation2shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-20px, 20px);
-            transform: translate(-20px, 20px);
-  }
-}
-.loading2 .shape3 {
-  -webkit-animation: animation2shape3 0.5s ease 0s infinite alternate;
-          animation: animation2shape3 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation2shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(20px, -20px);
-            transform: translate(20px, -20px);
-  }
-}
-
-@keyframes animation2shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(20px, -20px);
-            transform: translate(20px, -20px);
-  }
-}
-.loading2 .shape4 {
-  -webkit-animation: animation2shape4 0.5s ease 0s infinite alternate;
-          animation: animation2shape4 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation2shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-20px, -20px);
-            transform: translate(-20px, -20px);
-  }
-}
-
-@keyframes animation2shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-20px, -20px);
-            transform: translate(-20px, -20px);
-  }
-}
-
-</style>

+ 0 - 173
sleep/uni_modules/qiun-data-charts/components/qiun-loading/loading3.vue

@@ -1,173 +0,0 @@
-<template>
-	 <view class="container loading3">
-		<view class="shape shape1"></view>
-		<view class="shape shape2"></view>
-		<view class="shape shape3"></view>
-		<view class="shape shape4"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'loading3',
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-
-<style scoped="true">
-.container {
-  width: 30px;
-  height: 30px;
-  position: relative;
-}
-
- .container.loading3 {
-  -webkit-animation: rotation 1s infinite;
-          animation: rotation 1s infinite;
-}
-.container.loading3 .shape1 {
-  border-top-left-radius: 10px;
-}
-.container.loading3 .shape2 {
-  border-top-right-radius: 10px;
-}
-.container.loading3 .shape3 {
-  border-bottom-left-radius: 10px;
-}
-.container.loading3 .shape4 {
-  border-bottom-right-radius: 10px;
-}
-
-.container .shape {
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  border-radius: 1px;
-}
-.container .shape.shape1 {
-  left: 0;
-  background-color: #1890FF;
-}
-.container .shape.shape2 {
-  right: 0;
-  background-color: #91CB74;
-}
-.container .shape.shape3 {
-  bottom: 0;
-  background-color: #FAC858;
-}
-.container .shape.shape4 {
-  bottom: 0;
-  right: 0;
-  background-color: #EE6666;
-}
-
-.loading3 .shape1 {
-  -webkit-animation: animation3shape1 0.5s ease 0s infinite alternate;
-          animation: animation3shape1 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation3shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(5px, 5px);
-            transform: translate(5px, 5px);
-  }
-}
-
-@keyframes animation3shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(5px, 5px);
-            transform: translate(5px, 5px);
-  }
-}
-.loading3 .shape2 {
-  -webkit-animation: animation3shape2 0.5s ease 0s infinite alternate;
-          animation: animation3shape2 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation3shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-5px, 5px);
-            transform: translate(-5px, 5px);
-  }
-}
-
-@keyframes animation3shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-5px, 5px);
-            transform: translate(-5px, 5px);
-  }
-}
-.loading3 .shape3 {
-  -webkit-animation: animation3shape3 0.5s ease 0s infinite alternate;
-          animation: animation3shape3 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation3shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(5px, -5px);
-            transform: translate(5px, -5px);
-  }
-}
-
-@keyframes animation3shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(5px, -5px);
-            transform: translate(5px, -5px);
-  }
-}
-.loading3 .shape4 {
-  -webkit-animation: animation3shape4 0.5s ease 0s infinite alternate;
-          animation: animation3shape4 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation3shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-5px, -5px);
-            transform: translate(-5px, -5px);
-  }
-}
-
-@keyframes animation3shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-5px, -5px);
-            transform: translate(-5px, -5px);
-  }
-}
-</style>

+ 0 - 222
sleep/uni_modules/qiun-data-charts/components/qiun-loading/loading4.vue

@@ -1,222 +0,0 @@
-<template>
-	 <view class="container loading5">
-		<view class="shape shape1"></view>
-		<view class="shape shape2"></view>
-		<view class="shape shape3"></view>
-		<view class="shape shape4"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'loading5',
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-
-<style scoped="true">
-.container {
-  width: 30px;
-  height: 30px;
-  position: relative;
-}
-
-.container.loading5 .shape {
-  width: 15px;
-  height: 15px;
-}
-
-.container .shape {
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  border-radius: 1px;
-}
-.container .shape.shape1 {
-  left: 0;
-  background-color: #1890FF;
-}
-.container .shape.shape2 {
-  right: 0;
-  background-color: #91CB74;
-}
-.container .shape.shape3 {
-  bottom: 0;
-  background-color: #FAC858;
-}
-.container .shape.shape4 {
-  bottom: 0;
-  right: 0;
-  background-color: #EE6666;
-}
-
-.loading5 .shape1 {
-  animation: animation5shape1 2s ease 0s infinite reverse;
-}
-
-@-webkit-keyframes animation5shape1 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, 15px);
-            transform: translate(0, 15px);
-  }
-  50% {
-    -webkit-transform: translate(15px, 15px);
-            transform: translate(15px, 15px);
-  }
-  75% {
-    -webkit-transform: translate(15px, 0);
-            transform: translate(15px, 0);
-  }
-}
-
-@keyframes animation5shape1 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, 15px);
-            transform: translate(0, 15px);
-  }
-  50% {
-    -webkit-transform: translate(15px, 15px);
-            transform: translate(15px, 15px);
-  }
-  75% {
-    -webkit-transform: translate(15px, 0);
-            transform: translate(15px, 0);
-  }
-}
-.loading5 .shape2 {
-  animation: animation5shape2 2s ease 0s infinite reverse;
-}
-
-@-webkit-keyframes animation5shape2 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(-15px, 0);
-            transform: translate(-15px, 0);
-  }
-  50% {
-    -webkit-transform: translate(-15px, 15px);
-            transform: translate(-15px, 15px);
-  }
-  75% {
-    -webkit-transform: translate(0, 15px);
-            transform: translate(0, 15px);
-  }
-}
-
-@keyframes animation5shape2 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(-15px, 0);
-            transform: translate(-15px, 0);
-  }
-  50% {
-    -webkit-transform: translate(-15px, 15px);
-            transform: translate(-15px, 15px);
-  }
-  75% {
-    -webkit-transform: translate(0, 15px);
-            transform: translate(0, 15px);
-  }
-}
-.loading5 .shape3 {
-  animation: animation5shape3 2s ease 0s infinite reverse;
-}
-
-@-webkit-keyframes animation5shape3 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(15px, 0);
-            transform: translate(15px, 0);
-  }
-  50% {
-    -webkit-transform: translate(15px, -15px);
-            transform: translate(15px, -15px);
-  }
-  75% {
-    -webkit-transform: translate(0, -15px);
-            transform: translate(0, -15px);
-  }
-}
-
-@keyframes animation5shape3 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(15px, 0);
-            transform: translate(15px, 0);
-  }
-  50% {
-    -webkit-transform: translate(15px, -15px);
-            transform: translate(15px, -15px);
-  }
-  75% {
-    -webkit-transform: translate(0, -15px);
-            transform: translate(0, -15px);
-  }
-}
-.loading5 .shape4 {
-  animation: animation5shape4 2s ease 0s infinite reverse;
-}
-
-@-webkit-keyframes animation5shape4 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, -15px);
-            transform: translate(0, -15px);
-  }
-  50% {
-    -webkit-transform: translate(-15px, -15px);
-            transform: translate(-15px, -15px);
-  }
-  75% {
-    -webkit-transform: translate(-15px, 0);
-            transform: translate(-15px, 0);
-  }
-}
-
-@keyframes animation5shape4 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, -15px);
-            transform: translate(0, -15px);
-  }
-  50% {
-    -webkit-transform: translate(-15px, -15px);
-            transform: translate(-15px, -15px);
-  }
-  75% {
-    -webkit-transform: translate(-15px, 0);
-            transform: translate(-15px, 0);
-  }
-}
-
-</style>

+ 0 - 229
sleep/uni_modules/qiun-data-charts/components/qiun-loading/loading5.vue

@@ -1,229 +0,0 @@
-<template>
-	 <view class="container loading6">
-		<view class="shape shape1"></view>
-		<view class="shape shape2"></view>
-		<view class="shape shape3"></view>
-		<view class="shape shape4"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'loading6',
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-<style scoped="true">
-.container {
-  width: 30px;
-  height: 30px;
-  position: relative;
-}
-
-.container.loading6 {
-  -webkit-animation: rotation 1s infinite;
-          animation: rotation 1s infinite;
-}
-.container.loading6 .shape {
-  width: 12px;
-  height: 12px;
-  border-radius: 2px;
-}
-.container .shape {
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  border-radius: 1px;
-}
-.container .shape.shape1 {
-  left: 0;
-  background-color: #1890FF;
-}
-.container .shape.shape2 {
-  right: 0;
-  background-color: #91CB74;
-}
-.container .shape.shape3 {
-  bottom: 0;
-  background-color: #FAC858;
-}
-.container .shape.shape4 {
-  bottom: 0;
-  right: 0;
-  background-color: #EE6666;
-}
-
-
-.loading6 .shape1 {
-  -webkit-animation: animation6shape1 2s linear 0s infinite normal;
-          animation: animation6shape1 2s linear 0s infinite normal;
-}
-
-@-webkit-keyframes animation6shape1 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, 18px);
-            transform: translate(0, 18px);
-  }
-  50% {
-    -webkit-transform: translate(18px, 18px);
-            transform: translate(18px, 18px);
-  }
-  75% {
-    -webkit-transform: translate(18px, 0);
-            transform: translate(18px, 0);
-  }
-}
-
-@keyframes animation6shape1 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, 18px);
-            transform: translate(0, 18px);
-  }
-  50% {
-    -webkit-transform: translate(18px, 18px);
-            transform: translate(18px, 18px);
-  }
-  75% {
-    -webkit-transform: translate(18px, 0);
-            transform: translate(18px, 0);
-  }
-}
-.loading6 .shape2 {
-  -webkit-animation: animation6shape2 2s linear 0s infinite normal;
-          animation: animation6shape2 2s linear 0s infinite normal;
-}
-
-@-webkit-keyframes animation6shape2 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(-18px, 0);
-            transform: translate(-18px, 0);
-  }
-  50% {
-    -webkit-transform: translate(-18px, 18px);
-            transform: translate(-18px, 18px);
-  }
-  75% {
-    -webkit-transform: translate(0, 18px);
-            transform: translate(0, 18px);
-  }
-}
-
-@keyframes animation6shape2 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(-18px, 0);
-            transform: translate(-18px, 0);
-  }
-  50% {
-    -webkit-transform: translate(-18px, 18px);
-            transform: translate(-18px, 18px);
-  }
-  75% {
-    -webkit-transform: translate(0, 18px);
-            transform: translate(0, 18px);
-  }
-}
-.loading6 .shape3 {
-  -webkit-animation: animation6shape3 2s linear 0s infinite normal;
-          animation: animation6shape3 2s linear 0s infinite normal;
-}
-
-@-webkit-keyframes animation6shape3 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(18px, 0);
-            transform: translate(18px, 0);
-  }
-  50% {
-    -webkit-transform: translate(18px, -18px);
-            transform: translate(18px, -18px);
-  }
-  75% {
-    -webkit-transform: translate(0, -18px);
-            transform: translate(0, -18px);
-  }
-}
-
-@keyframes animation6shape3 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(18px, 0);
-            transform: translate(18px, 0);
-  }
-  50% {
-    -webkit-transform: translate(18px, -18px);
-            transform: translate(18px, -18px);
-  }
-  75% {
-    -webkit-transform: translate(0, -18px);
-            transform: translate(0, -18px);
-  }
-}
-.loading6 .shape4 {
-  -webkit-animation: animation6shape4 2s linear 0s infinite normal;
-          animation: animation6shape4 2s linear 0s infinite normal;
-}
-
-@-webkit-keyframes animation6shape4 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, -18px);
-            transform: translate(0, -18px);
-  }
-  50% {
-    -webkit-transform: translate(-18px, -18px);
-            transform: translate(-18px, -18px);
-  }
-  75% {
-    -webkit-transform: translate(-18px, 0);
-            transform: translate(-18px, 0);
-  }
-}
-
-@keyframes animation6shape4 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, -18px);
-            transform: translate(0, -18px);
-  }
-  50% {
-    -webkit-transform: translate(-18px, -18px);
-            transform: translate(-18px, -18px);
-  }
-  75% {
-    -webkit-transform: translate(-18px, 0);
-            transform: translate(-18px, 0);
-  }
-}
-</style>

+ 0 - 36
sleep/uni_modules/qiun-data-charts/components/qiun-loading/qiun-loading.vue

@@ -1,36 +0,0 @@
-<template>
-	<view>
-	 <Loading1 v-if="loadingType==1"/>
-	 <Loading2 v-if="loadingType==2"/>
-	 <Loading3 v-if="loadingType==3"/>
-	 <Loading4 v-if="loadingType==4"/>
-	 <Loading5 v-if="loadingType==5"/>
-	</view>
-</template>
-
-<script>
-	import Loading1 from "./loading1.vue";
-	import Loading2 from "./loading2.vue";
-	import Loading3 from "./loading3.vue";
-	import Loading4 from "./loading4.vue";
-	import Loading5 from "./loading5.vue";
-	export default {
-		components:{Loading1,Loading2,Loading3,Loading4,Loading5},
-		name: 'qiun-loading',
-		props: {
-			loadingType: {
-				type: Number,
-				default: 2
-			},
-		},
-		data() {
-			return {
-				
-			};
-		},
-	}
-</script>
-
-<style>
-
-</style>

+ 0 - 422
sleep/uni_modules/qiun-data-charts/js_sdk/u-charts/config-echarts.js

@@ -1,422 +0,0 @@
-/*
- * uCharts®
- * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)、Vue、Taro等支持canvas的框架平台
- * Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved.
- * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- * 复制使用请保留本段注释,感谢支持开源!
- * 
- * uCharts®官方网站
- * https://www.uCharts.cn
- * 
- * 开源地址:
- * https://gitee.com/uCharts/uCharts
- * 
- * uni-app插件市场地址:
- * http://ext.dcloud.net.cn/plugin?id=271
- * 
- */
-
-// 通用配置项
-
-// 主题颜色配置:如每个图表类型需要不同主题,请在对应图表类型上更改color属性
-const color = ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'];
-
-const cfe = {
-  //demotype为自定义图表类型
-	"type": ["pie", "ring", "rose", "funnel", "line", "column", "area", "radar", "gauge","candle","demotype"],
-  //增加自定义图表类型,如果需要categories,请在这里加入您的图表类型例如最后的"demotype"
-	"categories": ["line", "column", "area", "radar", "gauge", "candle","demotype"],
-  //instance为实例变量承载属性,option为eopts承载属性,不要删除
-	"instance": {},
-	"option": {},
-  //下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换
-  "formatter":{
-    "tooltipDemo1":function(res){
-      let result = ''
-      for (let i in res) {
-      	if (i == 0) {
-      		result += res[i].axisValueLabel + '年销售额'
-      	}
-      	let value = '--'
-      	if (res[i].data !== null) {
-      		value = res[i].data
-      	}
-      	// #ifdef H5
-      	result += '\n' + res[i].seriesName + ':' + value + ' 万元'
-      	// #endif
-      	
-      	// #ifdef APP-PLUS
-      	result += '<br/>' + res[i].marker + res[i].seriesName + ':' + value + ' 万元'
-      	// #endif
-      }
-      return result;
-    },
-    legendFormat:function(name){
-      return "自定义图例+"+name;
-    },
-    yAxisFormatDemo:function (value, index) {
-      return value + '元';
-    },
-    seriesFormatDemo:function(res){
-      return res.name + '年' + res.value + '元';
-    }
-  },
-  //这里演示了自定义您的图表类型的option,可以随意命名,之后在组件上 type="demotype" 后,组件会调用这个花括号里的option,如果组件上还存在eopts参数,会将demotype与eopts中option合并后渲染图表。
-  "demotype":{
-    "color": color,
-    //在这里填写echarts的option即可
-    
-  },
-  //下面是自定义配置,请添加项目所需的通用配置
-	"column": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'axis'
-		},
-		"grid": {
-			"top": 30,
-			"bottom": 50,
-			"right": 15,
-			"left": 40
-		},
-		"legend": {
-			"bottom": 'left',
-		},
-		"toolbox": {
-			"show": false,
-		},
-		"xAxis": {
-			"type": 'category',
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-			"boundaryGap": true,
-			"data": []
-		},
-		"yAxis": {
-			"type": 'value',
-			"axisTick": {
-				"show": false,
-			},
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'bar',
-			"data": [],
-			"barwidth": 20,
-			"label": {
-				"show": true,
-        "color": "#666666",
-				"position": 'top',
-			},
-		},
-	},
-	"line": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'axis'
-		},
-		"grid": {
-			"top": 30,
-			"bottom": 50,
-			"right": 15,
-			"left": 40
-		},
-		"legend": {
-			"bottom": 'left',
-		},
-		"toolbox": {
-			"show": false,
-		},
-		"xAxis": {
-			"type": 'category',
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-			"boundaryGap": true,
-			"data": []
-		},
-		"yAxis": {
-			"type": 'value',
-			"axisTick": {
-				"show": false,
-			},
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'line',
-			"data": [],
-			"barwidth": 20,
-			"label": {
-				"show": true,
-        "color": "#666666",
-				"position": 'top',
-			},
-		},
-	},
-	"area": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'axis'
-		},
-		"grid": {
-			"top": 30,
-			"bottom": 50,
-			"right": 15,
-			"left": 40
-		},
-		"legend": {
-			"bottom": 'left',
-		},
-		"toolbox": {
-			"show": false,
-		},
-		"xAxis": {
-			"type": 'category',
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-			"boundaryGap": true,
-			"data": []
-		},
-		"yAxis": {
-			"type": 'value',
-			"axisTick": {
-				"show": false,
-			},
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'line',
-			"data": [],
-			"areaStyle": {},
-			"label": {
-				"show": true,
-        "color": "#666666",
-				"position": 'top',
-			},
-		},
-	},
-	"pie": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'item'
-		},
-		"grid": {
-			"top": 40,
-			"bottom": 30,
-			"right": 15,
-			"left": 15
-		},
-		"legend": {
-			"bottom": 'left',
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'pie',
-			"data": [],
-			"radius": '50%',
-			"label": {
-				"show": true,
-        "color": "#666666",
-				"position": 'top',
-			},
-		},
-	},
-	"ring": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'item'
-		},
-		"grid": {
-			"top": 40,
-			"bottom": 30,
-			"right": 15,
-			"left": 15
-		},
-		"legend": {
-			"bottom": 'left',
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'pie',
-			"data": [],
-			"radius": ['40%', '70%'],
-			"avoidLabelOverlap": false,
-			"label": {
-				"show": true,
-        "color": "#666666",
-				"position": 'top',
-			},
-			"labelLine": {
-				"show": true
-			},
-		},
-	},
-	"rose": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'item'
-		},
-		"legend": {
-			"top": 'bottom'
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'pie',
-			"data": [],
-			"radius": "55%",
-			"center": ['50%', '50%'],
-			"roseType": 'area',
-		},
-	},
-	"funnel": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'item',
-			"formatter": "{b} : {c}%"
-		},
-		"legend": {
-			"top": 'bottom'
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'funnel',
-			"left": '10%',
-			"top": 60,
-			"bottom": 60,
-			"width": '80%',
-			"min": 0,
-			"max": 100,
-			"minSize": '0%',
-			"maxSize": '100%',
-			"sort": 'descending',
-			"gap": 2,
-			"label": {
-				"show": true,
-				"position": 'inside'
-			},
-			"labelLine": {
-				"length": 10,
-				"lineStyle": {
-					"width": 1,
-					"type": 'solid'
-				}
-			},
-			"itemStyle": {
-				"bordercolor": '#fff',
-				"borderwidth": 1
-			},
-			"emphasis": {
-				"label": {
-					"fontSize": 20
-				}
-			},
-			"data": [],
-		},
-	},
-	"gauge": {
-		"color": color,
-		"tooltip": {
-        "formatter": '{a} <br/>{b} : {c}%'
-    },
-		"seriesTemplate": {
-			"name": '业务指标',
-      "type": 'gauge',
-      "detail": {"formatter": '{value}%'},
-      "data": [{"value": 50, "name": '完成率'}]
-		},
-	},
-	"candle": {
-		"xAxis": {
-			"data": []
-		},
-		"yAxis": {},
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"dataZoom": [{
-				"type": 'inside',
-				"xAxisIndex": [0, 1],
-				"start": 10,
-				"end": 100
-			},
-			{
-				"show": true,
-				"xAxisIndex": [0, 1],
-				"type": 'slider',
-				"bottom": 10,
-				"start": 10,
-				"end": 100
-			}
-		],
-		"seriesTemplate": {
-			"name": '',
-			"type": 'k',
-			"data": [],
-		},
-	}
-}
-
-export default cfe;

+ 0 - 606
sleep/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js

@@ -1,606 +0,0 @@
-/*
- * uCharts®
- * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)、Vue、Taro等支持canvas的框架平台
- * Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved.
- * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- * 复制使用请保留本段注释,感谢支持开源!
- * 
- * uCharts®官方网站
- * https://www.uCharts.cn
- * 
- * 开源地址:
- * https://gitee.com/uCharts/uCharts
- * 
- * uni-app插件市场地址:
- * http://ext.dcloud.net.cn/plugin?id=271
- * 
- */
-
-// 主题颜色配置:如每个图表类型需要不同主题,请在对应图表类型上更改color属性
-const color = ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'];
-
-//事件转换函数,主要用作格式化x轴为时间轴,根据需求自行修改
-const formatDateTime = (timeStamp, returnType)=>{
-  var date = new Date();
-  date.setTime(timeStamp * 1000);
-  var y = date.getFullYear();
-  var m = date.getMonth() + 1;
-  m = m < 10 ? ('0' + m) : m;
-  var d = date.getDate();
-  d = d < 10 ? ('0' + d) : d;
-  var h = date.getHours();
-  h = h < 10 ? ('0' + h) : h;
-  var minute = date.getMinutes();
-  var second = date.getSeconds();
-  minute = minute < 10 ? ('0' + minute) : minute;
-  second = second < 10 ? ('0' + second) : second;
-  if(returnType == 'full'){return y + '-' + m + '-' + d + ' '+ h +':' + minute + ':' + second;}
-  if(returnType == 'y-m-d'){return y + '-' + m + '-' + d;}
-  if(returnType == 'h:m'){return  h +':' + minute;}
-  if(returnType == 'h:m:s'){return  h +':' + minute +':' + second;}
-  return [y, m, d, h, minute, second];
-}
-
-const cfu = {
-  //demotype为自定义图表类型,一般不需要自定义图表类型,只需要改根节点上对应的类型即可
-	"type":["pie","ring","rose","word","funnel","map","arcbar","line","column","mount","bar","area","radar","gauge","candle","mix","tline","tarea","scatter","bubble","demotype"],
-	"range":["饼状图","圆环图","玫瑰图","词云图","漏斗图","地图","圆弧进度条","折线图","柱状图","山峰图","条状图","区域图","雷达图","仪表盘","K线图","混合图","时间轴折线","时间轴区域","散点图","气泡图","自定义类型"],
-  //增加自定义图表类型,如果需要categories,请在这里加入您的图表类型,例如最后的"demotype"
-  //自定义类型时需要注意"tline","tarea","scatter","bubble"等时间轴(矢量x轴)类图表,没有categories,不需要加入categories
-	"categories":["line","column","mount","bar","area","radar","gauge","candle","mix","demotype"],
-  //instance为实例变量承载属性,不要删除
-  "instance":{},
-  //option为opts及eopts承载属性,不要删除
-  "option":{},
-  //下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换
-  "formatter":{
-    "yAxisDemo1":function(val, index, opts){return val+'元'},
-    "yAxisDemo2":function(val, index, opts){return val.toFixed(2)},
-    "xAxisDemo1":function(val, index, opts){return val+'年';},
-    "xAxisDemo2":function(val, index, opts){return formatDateTime(val,'h:m')},
-    "seriesDemo1":function(val, index, series, opts){return val+'元'},
-    "tooltipDemo1":function(item, category, index, opts){
-      if(index==0){
-      	return '随便用'+item.data+'年'
-      }else{
-      	return '其他我没改'+item.data+'天'
-      }
-    },
-    "pieDemo":function(val, index, series, opts){
-      if(index !== undefined){
-        return series[index].name+':'+series[index].data+'元'
-      }
-    },
-  },
-  //这里演示了自定义您的图表类型的option,可以随意命名,之后在组件上 type="demotype" 后,组件会调用这个花括号里的option,如果组件上还存在opts参数,会将demotype与opts中option合并后渲染图表。
-  "demotype":{
-    //我这里把曲线图当做了自定义图表类型,您可以根据需要随意指定类型或配置
-    "type": "line",
-    "color": color,
-    "padding": [15,10,0,15],
-    "xAxis": {
-      "disableGrid": true,
-    },
-    "yAxis": {
-      "gridType": "dash",
-      "dashLength": 2,
-    },
-    "legend": {
-    },
-    "extra": {
-    	"line": {
-    		"type": "curve",
-    		"width": 2
-    	},
-    }
-  },
-  //下面是自定义配置,请添加项目所需的通用配置
-	"pie":{
-		"type": "pie",
-    "color": color,
-		"padding": [5,5,5,5],
-		"extra": {
-			"pie": {
-				"activeOpacity": 0.5,
-				"activeRadius": 10,
-				"offsetAngle": 0,
-				"labelWidth": 15,
-				"border": true,
-				"borderWidth": 3,
-				"borderColor": "#FFFFFF"
-			},
-		}
-	},
-	"ring":{
-		"type": "ring",
-    "color": color,
-		"padding": [5,5,5,5],
-		"rotate": false,
-		"dataLabel": true,
-		"legend": {
-			"show": true,
-			"position": "right",
-      "lineHeight": 25,
-		},
-		"title": {
-			"name": "收益率",
-			"fontSize": 15,
-			"color": "#666666"
-		},
-		"subtitle": {
-			"name": "70%",
-			"fontSize": 25,
-			"color": "#7cb5ec"
-		},
-		"extra": {
-			"ring": {
-				"ringWidth":30,
-				"activeOpacity": 0.5,
-				"activeRadius": 10,
-				"offsetAngle": 0,
-				"labelWidth": 15,
-				"border": true,
-				"borderWidth": 3,
-				"borderColor": "#FFFFFF"
-			},
-		},
-	},
-	"rose":{
-		"type": "rose",
-    "color": color,
-		"padding": [5,5,5,5],
-		"legend": {
-			"show": true,
-			"position": "left",
-      "lineHeight": 25,
-		},
-		"extra": {
-			"rose": {
-				"type": "area",
-				"minRadius": 50,
-				"activeOpacity": 0.5,
-				"activeRadius": 10,
-				"offsetAngle": 0,
-				"labelWidth": 15,
-				"border": false,
-				"borderWidth": 2,
-				"borderColor": "#FFFFFF"
-			},
-		}
-	},
-	"word":{
-		"type": "word",
-    "color": color,
-		"extra": {
-			"word": {
-				"type": "normal",
-				"autoColors": false
-			}
-		}
-	},
-	"funnel":{
-		"type": "funnel",
-    "color": color,
-		"padding": [15,15,0,15],
-		"extra": {
-			"funnel": {
-				"activeOpacity": 0.3,
-				"activeWidth": 10,
-				"border": true,
-				"borderWidth": 2,
-				"borderColor": "#FFFFFF",
-				"fillOpacity": 1,
-				"labelAlign": "right"
-			},
-		}
-	},
-	"map":{
-		"type": "map",
-    "color": color,
-		"padding": [0,0,0,0],
-    "dataLabel": true,
-		"extra": {
-			"map": {
-				"border": true,
-				"borderWidth": 1,
-				"borderColor": "#666666",
-				"fillOpacity": 0.6,
-				"activeBorderColor": "#F04864",
-				"activeFillColor": "#FACC14",
-				"activeFillOpacity": 1
-			},
-		}
-	},
-	"arcbar":{
-		"type": "arcbar",
-    "color": color,
-		"title": {
-			"name": "百分比",
-			"fontSize": 25,
-			"color": "#00FF00"
-		},
-		"subtitle": {
-			"name": "默认标题",
-			"fontSize": 15,
-			"color": "#666666"
-		},
-		"extra": {
-			"arcbar": {
-				"type": "default",
-				"width": 12,
-				"backgroundColor": "#E9E9E9",
-				"startAngle": 0.75,
-				"endAngle": 0.25,
-				"gap": 2
-			}
-		}
-	},
-	"line":{
-		"type": "line",
-    "color": color,
-		"padding": [15,10,0,15],
-		"xAxis": {
-      "disableGrid": true,
-		},
-		"yAxis": {
-      "gridType": "dash",
-      "dashLength": 2,
-		},
-		"legend": {
-		},
-		"extra": {
-			"line": {
-				"type": "straight",
-				"width": 2,
-        "activeType": "hollow"
-			},
-		}
-	},
-  "tline":{
-  	"type": "line",
-    "color": color,
-  	"padding": [15,10,0,15],
-  	"xAxis": {
-      "disableGrid": false,
-      "boundaryGap":"justify",
-  	},
-  	"yAxis": {
-      "gridType": "dash",
-      "dashLength": 2,
-      "data":[
-        {
-          "min":0,
-          "max":80
-        }
-      ]
-  	},
-  	"legend": {
-  	},
-  	"extra": {
-  		"line": {
-  			"type": "curve",
-  			"width": 2,
-        "activeType": "hollow"
-  		},
-  	}
-  },
-  "tarea":{
-  	"type": "area",
-    "color": color,
-  	"padding": [15,10,0,15],
-  	"xAxis": {
-      "disableGrid": true,
-      "boundaryGap":"justify",
-  	},
-  	"yAxis": {
-      "gridType": "dash",
-      "dashLength": 2,
-      "data":[
-        {
-          "min":0,
-          "max":80
-        }
-      ]
-  	},
-  	"legend": {
-  	},
-  	"extra": {
-  		"area": {
-  			"type": "curve",
-  			"opacity": 0.2,
-  			"addLine": true,
-  			"width": 2,
-  			"gradient": true,
-        "activeType": "hollow"
-  		},
-  	}
-  },
-	"column":{
-		"type": "column",
-    "color": color,
-		"padding": [15,15,0,5],
-		"xAxis": {
-      "disableGrid": true,
-		},
-		"yAxis": {
-      "data":[{"min":0}]
-		},
-		"legend": {
-		},
-		"extra": {
-			"column": {
-				"type": "group",
-				"width": 30,
-				"activeBgColor": "#000000",
-				"activeBgOpacity": 0.08
-			},
-		}
-	},
-  "mount":{
-  	"type": "mount",
-    "color": color,
-  	"padding": [15,15,0,5],
-  	"xAxis": {
-      "disableGrid": true,
-  	},
-  	"yAxis": {
-      "data":[{"min":0}]
-  	},
-  	"legend": {
-  	},
-  	"extra": {
-  		"mount": {
-  			"type": "mount",
-  			"widthRatio": 1.5,
-  		},
-  	}
-  },
-  "bar":{
-  	"type": "bar",
-    "color": color,
-  	"padding": [15,30,0,5],
-  	"xAxis": {
-      "boundaryGap":"justify",
-      "disableGrid":false,
-      "min":0,
-      "axisLine":false
-  	},
-  	"yAxis": {
-  	},
-  	"legend": {
-  	},
-  	"extra": {
-  		"bar": {
-  			"type": "group",
-  			"width": 30,
-  			"meterBorde": 1,
-  			"meterFillColor": "#FFFFFF",
-  			"activeBgColor": "#000000",
-  			"activeBgOpacity": 0.08
-  		},
-  	}
-  },
-	"area":{
-		"type": "area",
-		"color": color,
-		"padding": [15,15,0,15],
-		"xAxis": {
-      "disableGrid": true,
-		},
-		"yAxis": {
-      "gridType": "dash",
-      "dashLength": 2,
-		},
-		"legend": {
-		},
-		"extra": {
-			"area": {
-				"type": "straight",
-				"opacity": 0.2,
-				"addLine": true,
-				"width": 2,
-				"gradient": false,
-        "activeType": "hollow"
-			},
-		}
-	},
-	"radar":{
-		"type": "radar",
-		"color": color,
-		"padding": [5,5,5,5],
-    "dataLabel": false,
-		"legend": {
-			"show": true,
-			"position": "right",
-      "lineHeight": 25,
-		},
-		"extra": {
-			"radar": {
-				"gridType": "radar",
-				"gridColor": "#CCCCCC",
-				"gridCount": 3,
-				"opacity": 0.2,
-				"max": 200,
-				"labelShow": true
-			},
-		}
-	},
-	"gauge":{
-		"type": "gauge",
-		"color": color,
-		"title": {
-			"name": "66Km/H",
-			"fontSize": 25,
-			"color": "#2fc25b",
-			"offsetY": 50
-		},
-		"subtitle": {
-			"name": "实时速度",
-			"fontSize": 15,
-			"color": "#1890ff",
-			"offsetY": -50
-		},
-		"extra": {
-			"gauge": {
-				"type": "default",
-				"width": 30,
-				"labelColor": "#666666",
-				"startAngle": 0.75,
-				"endAngle": 0.25,
-				"startNumber": 0,
-				"endNumber": 100,
-				"labelFormat": "",
-				"splitLine": {
-					"fixRadius": 0,
-					"splitNumber": 10,
-					"width": 30,
-					"color": "#FFFFFF",
-					"childNumber": 5,
-					"childWidth": 12
-				},
-				"pointer": {
-					"width": 24,
-					"color": "auto"
-				}
-			}
-		}
-	},
-	"candle":{
-		"type": "candle",
-		"color": color,
-		"padding": [15,15,0,15],
-		"enableScroll": true,
-		"enableMarkLine": true,
-		"dataLabel": false,
-		"xAxis": {
-			"labelCount": 4,
-			"itemCount": 40,
-			"disableGrid": true,
-			"gridColor": "#CCCCCC",
-			"gridType": "solid",
-			"dashLength": 4,
-			"scrollShow": true,
-			"scrollAlign": "left",
-			"scrollColor": "#A6A6A6",
-			"scrollBackgroundColor": "#EFEBEF"
-		},
-		"yAxis": {
-		},
-		"legend": {
-		},
-		"extra": {
-			"candle": {
-				"color": {
-					"upLine": "#f04864",
-					"upFill": "#f04864",
-					"downLine": "#2fc25b",
-					"downFill": "#2fc25b"
-				},
-				"average": {
-					"show": true,
-					"name": ["MA5","MA10","MA30"],
-					"day": [5,10,20],
-					"color": ["#1890ff","#2fc25b","#facc14"]
-				}
-			},
-			"markLine": {
-				"type": "dash",
-				"dashLength": 5,
-				"data": [
-					{
-						"value": 2150,
-						"lineColor": "#f04864",
-						"showLabel": true
-					},
-					{
-						"value": 2350,
-						"lineColor": "#f04864",
-						"showLabel": true
-					}
-				]
-			}
-		}
-	},
-	"mix":{
-		"type": "mix",
-		"color": color,
-		"padding": [15,15,0,15],
-		"xAxis": {
-      "disableGrid": true,
-		},
-		"yAxis": {
-			"disabled": false,
-			"disableGrid": false,
-			"splitNumber": 5,
-			"gridType": "dash",
-			"dashLength": 4,
-			"gridColor": "#CCCCCC",
-			"padding": 10,
-			"showTitle": true,
-			"data": []
-		},
-		"legend": {
-		},
-		"extra": {
-			"mix": {
-				"column": {
-					"width": 20
-				}
-			},
-		}
-	},
-	"scatter":{
-		"type": "scatter",
-		"color":color,
-		"padding":[15,15,0,15],
-    "dataLabel":false,
-    "xAxis": {
-      "disableGrid": false,
-      "gridType":"dash",
-      "splitNumber":5,
-      "boundaryGap":"justify",
-      "min":0
-    },
-    "yAxis": {
-      "disableGrid": false,
-      "gridType":"dash",
-    },
-    "legend": {
-    },
-    "extra": {
-    	"scatter": {
-    	},
-    }
-	},
-	"bubble":{
-		"type": "bubble",
-		"color":color,
-		"padding":[15,15,0,15],
-    "xAxis": {
-      "disableGrid": false,
-      "gridType":"dash",
-      "splitNumber":5,
-      "boundaryGap":"justify",
-      "min":0,
-      "max":250
-    },
-    "yAxis": {
-      "disableGrid": false,
-      "gridType":"dash",
-      "data":[{
-        "min":0,
-        "max":150
-      }]
-    },
-    "legend": {
-    },
-    "extra": {
-    	"bubble": {
-        "border":2,
-        "opacity": 0.5,
-    	},
-    }
-	}
-}
-
-export default cfu;

+ 0 - 5
sleep/uni_modules/qiun-data-charts/js_sdk/u-charts/readme.md

@@ -1,5 +0,0 @@
-# uCharts JSSDK说明
-1、如不使用uCharts组件,可直接引用u-charts.js,打包编译后会`自动压缩`,压缩后体积约为`120kb`。
-2、如果120kb的体积仍需压缩,请手到uCharts官网通过在线定制选择您需要的图表。
-3、config-ucharts.js为uCharts组件的用户配置文件,升级前请`自行备份config-ucharts.js`文件,以免被强制覆盖。
-4、config-echarts.js为ECharts组件的用户配置文件,升级前请`自行备份config-echarts.js`文件,以免被强制覆盖。

文件差異過大導致無法顯示
+ 0 - 7706
sleep/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js


文件差異過大導致無法顯示
+ 0 - 18
sleep/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.min.js


+ 0 - 201
sleep/uni_modules/qiun-data-charts/license.md

@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.

+ 0 - 81
sleep/uni_modules/qiun-data-charts/package.json

@@ -1,81 +0,0 @@
-{
-  "id": "qiun-data-charts",
-  "displayName": "秋云 ucharts echarts 高性能跨全端图表组件",
-  "version": "2.5.0-20230101",
-  "description": "uCharts 新增正负柱状图!支持H5及APP用 ucharts echarts 渲染图表,uniapp可视化首选组件",
-  "keywords": [
-    "ucharts",
-    "echarts",
-    "f2",
-    "图表",
-    "可视化"
-],
-  "repository": "https://gitee.com/uCharts/uCharts",
-  "engines": {
-    "HBuilderX": "^3.3.8"
-  },
-"dcloudext": {
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": "474119"
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "插件不采集任何数据",
-      "permissions": "无"
-    },
-    "npmurl": "https://www.npmjs.com/~qiun",
-    "type": "component-vue"
-  },
-  "uni_modules": {
-    "dependencies": [],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
-      },
-      "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "y"
-        },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y"
-        },
-        "快应用": {
-          "华为": "y",
-          "联盟": "y"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
-        }
-      }
-    }
-  }
-}

文件差異過大導致無法顯示
+ 0 - 84
sleep/uni_modules/qiun-data-charts/readme.md


文件差異過大導致無法顯示
+ 0 - 23
sleep/uni_modules/qiun-data-charts/static/app-plus/echarts.min.js


文件差異過大導致無法顯示
+ 0 - 23
sleep/uni_modules/qiun-data-charts/static/h5/echarts.min.js


+ 1 - 2
sleep/utils/request.js

@@ -6,7 +6,7 @@ import store from '@/store'
 import checkToken from '@/utils/checkToken'
 
 /** api 模式 */
-const api_mode = 'dev'
+const api_mode = 'prod'
 
 export const API = {
 	base: 'https://api.base.wdklian.com',
@@ -87,7 +87,6 @@ function service(options) {
 						resolve()
 						return
 					}
-					store.dispatch('cleanCartStoreAction')
 					store.dispatch('removeUserAction')
 					store.dispatch('removeAccessTokenAction')
 					store.dispatch('removeRefreshTokenAction')