Browse Source

报警设置及其他优化

wenningning 2 năm trước cách đây
mục cha
commit
1680309c9a

+ 13 - 0
sleep/api/device_member_bind.js

@@ -0,0 +1,13 @@
+/**
+ * 用户设备API
+ */
+import request, { Method } from '@/utils/request'
+
+// 获取根据设备类型用户绑定的设备
+export function getDeviceByDtypeAndMemberId(params){
+    return request({
+        url: `care/care_device_member_bind/get_devices_by_dtype_member_id`,
+        config: {method: Method.GET, needToken: true, loading: false},
+        params
+    })
+}

+ 8 - 0
sleep/api/sleep_report.js

@@ -30,3 +30,11 @@ export function pushSleepWarn(params){
         params
     })
 }
+
+// 获取睡眠预警参数
+export function getWarnResult(imei){
+    return request({
+        url: `xiaomian/get_warn_result/${imei}`,
+        config: {method: Method.GET, needToken: true, loading: true}
+    })
+}

+ 0 - 2
sleep/components/mpvue-echarts/src/echarts.vue

@@ -26,7 +26,6 @@ export default {
 	},
 	// #ifdef H5
 	mounted() {
-	  console.log('22222222222222222222222222')
 		if (!this.lazyLoad) this.init();
 	},
 	// #endif
@@ -40,7 +39,6 @@ export default {
 			this.chart = chart
 		},
 		init() {
-		  console.log('1111111111111111111')
 			const { canvasId } = this;
 			this.ctx = uni.createCanvasContext(canvasId, this);
 

+ 1 - 2
sleep/components/musicControl/playList.vue

@@ -20,7 +20,6 @@
 </template>
 
 <script>
-import { getCache } from '@/utils/cache.js';
 import { mapState } from 'vuex';
 export default {
 	props: {
@@ -93,7 +92,7 @@ export default {
 			align-items: center;
 			margin-bottom: 5px;
 			position: relative;
-		
+
 			&.active {
 				background-image: linear-gradient(to right, rgba(247, 73, 79, 0.1), rgba(247, 73, 79, 0.05));
 				.music-info {

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 519 - 331
sleep/pages/alertSetting/alertSetting.vue


+ 132 - 54
sleep/pages/home/index.vue

@@ -104,27 +104,27 @@
 				<!-- home device -->
 				<view class="flex-col home-device space-y-15">
 					<view class="flex-row home-device-header">
-<!--						<view class="flex-row justify-between flex-auto equal-division">-->
-<!--							<view class="flex-row equal-division-item space-x-4">-->
-<!--								<text class="font_3 text_5">场景</text>-->
-<!--								<text class="font_3">老人房</text>-->
-<!--							</view>-->
-<!--							<view class="flex-row equal-division-item space-x-14">-->
-<!--								<view class="flex-row space-x-4">-->
-<!--									<image class="shrink-0 image_6" src="../../static/home/homeIconWifi.png" />-->
-<!--									<text class="font_3">在线</text>-->
-<!--								</view>-->
+						<view class="flex-row justify-between flex-auto equal-division">
+							<view class="flex-row equal-division-item space-x-4">
+								<text class="font_3 text_5">当前设备</text>
+								<text class="font_3">{{ homeFrom.nowDevice }}</text>
+							</view>
+							<view class="flex-row equal-division-item space-x-14">
+								<view class="flex-row space-x-4 margin-left-xl">
+									<image class="shrink-0 image_6" src="../../static/home/homeIconWifi.png" />
+									<text class="font_3">{{ homeFrom.status }}</text>
+								</view>
 <!--								<view class="flex-row items-center space-x-6">-->
 <!--									<text class="font_3 text_6">45%</text>-->
 <!--									<image class="shrink-0 image_7" src="../../static/home/homeIconPower.png" />-->
 <!--								</view>-->
-<!--							</view>-->
-<!--						</view>-->
+							</view>
+						</view>
 
-<!--						<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>-->
-<!--						</view>-->
+						<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>
+						</view>
 					</view>
 
 					<view class="flex-row justify-center self-center home-device-status space-x-8">
@@ -132,17 +132,17 @@
 						<text class="font_4">{{ sleepStatus }}</text>
 					</view>
 
-					<view>
-						<uni-steps :options="list1" :active="active" />
-					</view>
+<!--					<view>-->
+<!--						<uni-steps :options="list1" :active="active" />-->
+<!--					</view>-->
 
-					<view class="flex-row self-center items-center home-device-setting">
-						<image
-							class="shrink-0 image_8"
-							src="../../static/home/homeIconSet.png"
-						/>
-						<text>设置目标</text>
-					</view>
+<!--					<view class="flex-row self-center items-center home-device-setting">-->
+<!--						<image-->
+<!--							class="shrink-0 image_8"-->
+<!--							src="../../static/home/homeIconSet.png"-->
+<!--						/>-->
+<!--						<text>设置目标</text>-->
+<!--					</view>-->
 				</view>
 
 				<view class="home-report flex-col group_5 space-y-40">
@@ -221,28 +221,36 @@
         </view>
 
 				<view class="flex-col home-alert space-y-4">
-					<view @click="jumpToAlertSetting" class="flex-row items-center space-x-4 home-alert-header">
+					<view class="flex-row items-center space-x-4 home-alert-header">
 						<image
 							class="image_10"
 							src="../../static/home/homeIconHeart.png"
 						/>
 						<text class="font_1">实时预警</text>
 					</view>
-
-					<view @click="handleAlertSetting" class="flex-col home-alert-list">
+          <view v-if="list_alerts.length === 0"  @click="handleAlertSetting" class="flex-row items-center home_blank_alert space-x-16">
+            <image
+                class="image_8"
+                src="../../static/home/homeIconGift.png"
+            />
+            <view class="flex-col items-start flex-auto space-y-4">
+              <text class="font_5">昨晚您的睡眠质量很好</text>
+              <text class="font_5">暂时没有预警信息</text>
+            </view>
+          </view>
+					<view v-else @click="handleAlertSetting" class="flex-col home-alert-list">
 						<view class="flex-row justify-between items-center list-item" :key="i" v-for="(item, i) in list_alerts">
 							<view class="flex-row items-center space-x-6">
 								<image
 									class="shrink-0 image_11"
 									src="../../static/home/homeIconAlert.png"
 								/>
-								<text class="font_8">心率警报</text>
-								<text class="font_9 text_16">2:25</text>
+								<text class="font_8">{{ formatSosType(item.warn_type) }}</text>
+								<text class="font_9 text_16">{{ formatSosTime(item.warn_time) }}</text>
 							</view>
 
 							<view class="flex-row items-baseline space-x-4">
-								<text class="font_10">102</text>
-								<text class="font_8">次/分</text>
+								<text class="font_10">{{ item.warn_desc }}</text>
 							</view>
 						</view>
 					</view>
@@ -258,14 +266,17 @@
 <script>
 import echarts from '@/static/echarts.min.js'
 import mpvueEcharts from '@/components/mpvue-echarts/src/echarts.vue'
+
+import Storage from '@/utils/storage'
+import * as API_deviceMemberBind  from '@/api/device_member_bind'
 export default {
   components: {
     mpvueEcharts
   },
 	data() {
 		return {
-			deviceAdded: true,
-			list_alerts: [null, null],
+			deviceAdded: false,
+			list_alerts: [],
 			active: 4,
 			list1: [{
 				title: '昨日就寝 11:24PM'
@@ -289,21 +300,48 @@ export default {
       sleepStatus: '离床',
       connecting: false,
       connected: false,
-      mySocketTask: null
+      mySocketTask: null,
+      homeFrom: {
+        nowDevice: '', // 当前设备
+        status: '离线'
+      },
+      deviceList: [], // 设备列表
+      lastMsgTime: 0, // 最后一次设备消息时间
+      memberId: 50289 // 先写死
 		};
 	},
-	created() {
-
-	},
   onLoad() {
-    const _this = this
-    setTimeout(() => {
-      _this.nowChart1()
-      _this.nowChart2()
-      _this.connect()
-    }, 800)
+    this.API_getDeviceList()
+  },
+  onUnload() {
+    this.mySocketTask.onClose(res => {
+      this.connected = false
+      clearInterval(this.timer)
+    })
   },
 	methods: {
+    API_getDeviceList() {
+      const _this = this
+      API_deviceMemberBind.getDeviceByDtypeAndMemberId({dtype: '睡眠床垫', memberId: this.memberId}).then(res => {
+        if (res.length === 0) {
+          _this.deviceAdded = false
+        } else {
+          _this.deviceAdded = true
+          _this.deviceList = res
+          _this.homeFrom.nowDevice = res[0].imei
+          Storage.setItem("nowChangeDevice", _this.homeFrom.nowDevice)
+          _this.init()
+        }
+      })
+    },
+    init() {
+      const _this = this
+      setTimeout(() => {
+        _this.nowChart1()
+        _this.nowChart2()
+        _this.connect()
+      }, 800)
+    },
     connect() {
       let _this = this
       if (this.connected || this.connecting) {
@@ -316,7 +354,7 @@ export default {
       this.connecting = true
       // let wsUrl = api.base.replace('http', 'ws')
       this.mySocketTask = uni.connectSocket({
-        url: 'ws://wdkl.natapp1.cc/sleep_report/monitor/50289', // 先写死
+        url: 'ws://wdkl.natapp1.cc/sleep_report/monitor/' + this.memberId,
         success(res) {
           // 这里是接口调用成功的回调,不是连接成功的回调,请注意
         },
@@ -330,6 +368,12 @@ export default {
         uni.hideLoading()
         let _this = this
         this.timer = setInterval(function () { //每隔5秒钟发送一次心跳,避免websocket连接因超时而自动断开
+          if (Date.parse(new Date()) - _this.lastMsgTime > 5000) { // 5秒没有收到新消息,则判断为离线
+            _this.homeFrom.status = '离线'
+            _this.sleepStatus = '离线'
+            _this.pjxl = '-'
+            _this.pjhx = '-'
+          }
           _this.mySocketTask.send({data: 'ping'})
         }, 30000) // 30秒的心跳包
       })
@@ -345,8 +389,13 @@ export default {
       })
       this.mySocketTask.onMessage(res => {
         let msg = res.data
-        console.log('收到消息:', msg)
+        // console.log('收到消息:', msg)
         if (msg.length === 30) {
+          if (this.homeFrom.nowDevice !== msg.substring(2, 14)) {
+            return
+          }
+          this.homeFrom.status = '在线'
+          this.lastMsgTime = Date.parse(new Date())
           this.getValue1(parseInt(msg.substring(22, 24), 16))
           this.getValue2(parseInt(msg.substring(24, 26), 16))
           switch (msg.substring(26, 28)) {
@@ -365,6 +414,12 @@ export default {
             default:
               break;
           }
+        } else {
+          const data =  JSON.parse(res.data)
+          console.log('收到消息为:', data)
+          if (data.sn && this.homeFrom.nowDevice === data.sn) {
+            this.list_alerts.push(data)
+          }
         }
       })
       this.mySocketTask.onClose(res => {
@@ -470,7 +525,7 @@ export default {
       }
     },
     getValue1(value) {
-      console.log("心率是", value)
+      // console.log("心率是", value)
       this.pjxl = value
       if (this.myData1.length > 60) {
         this.myData1.splice(0,5)
@@ -484,7 +539,7 @@ export default {
       } else {
         for (let i = 0; i < 5; i++) {
           this.myCount1 ++;
-          value = 410
+          value = 410 + parseInt(Math.random() * 10 - 5)
           this.myData1.push([this.myCount1, value])
         }
       }
@@ -492,7 +547,7 @@ export default {
       this.myChart1.setOption(this.options1)
     },
     getValue2(value) {
-      console.log("呼吸值是", value)
+      // console.log("呼吸值是", value)
       this.pjhx = value
       if (this.myData2.length > 60) {
         this.myData2.splice(0,5)
@@ -500,7 +555,7 @@ export default {
       if (value === 0) {
         for (let i = 0; i < 5; i++) {
           this.myCount2 ++;
-          value = 220
+          value = 220 +  parseInt(Math.random() * 10 - 5)
           this.myData2.push([this.myCount2, value])
         }
       } else {
@@ -516,9 +571,32 @@ export default {
     },
 		handleAlertSetting() {
 			uni.navigateTo({
-				url: "/pages/alertSetting/alertSetting"
+				url: "/pages/alertSetting/alertSetting?imei=" + this.homeFrom.nowDevice
 			});
-		}
+		},
+    formatSosType(value) {
+      switch (value) {
+        case 1:
+          return  '心率过速'
+        case 2:
+          return '心率过缓'
+        case 3:
+          return '呼吸过速'
+        case 4:
+          return '呼吸过缓'
+        case 5:
+          return '离床预警'
+        case 6:
+          return '一键预警'
+        case 7:
+          return '离线预警'
+        default:
+          break;
+      }
+    },
+    formatSosTime(value) {
+      return value.substring(10, value.length - 3)
+    }
 	}
 };
 </script>
@@ -1039,7 +1117,7 @@ export default {
         font-size: 0.88rem;
         font-family: PingFangSC;
         line-height: 0.69rem;
-        color: #167df2;
+        color: #ced5dc;
       }
       .text_16 {
         line-height: 0.63rem;

+ 2 - 2
sleep/plugins/audio/index.js

@@ -1,12 +1,12 @@
 import ZAudio from "./zaudio.js"
-import {getCache} from '@/utils/cache.js'
+import Storage from '@/utils/storage'
 
 let audio = new ZAudio({
 	continuePlay: false, //续播
 	autoPlay: false, //自动播放 部分浏览器不支持
 });
 
-audio.setAudio(getCache('PLAY_LIST'))
+audio.setAudio(Storage.getItem('PLAY_LIST'))
 
 module.exports={
   audio

+ 0 - 22
sleep/uni_modules/uni-transition/changelog.md

@@ -1,22 +0,0 @@
-## 1.3.2(2023-05-04)
-- 修复 NVUE 平台报错的问题
-## 1.3.1(2021-11-23)
-- 修复 init 方法初始化问题
-## 1.3.0(2021-11-19)
-- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
-- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition)
-## 1.2.1(2021-09-27)
-- 修复 init 方法不生效的 Bug
-## 1.2.0(2021-07-30)
-- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
-## 1.1.1(2021-05-12)
-- 新增 示例地址
-- 修复 示例项目缺少组件的 Bug
-## 1.1.0(2021-04-22)
-- 新增 通过方法自定义动画
-- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式
-- 优化 动画触发逻辑,使动画更流畅
-- 优化 支持单独的动画类型
-- 优化 文档示例
-## 1.0.2(2021-02-05)
-- 调整为 uni_modules 目录规范

+ 0 - 131
sleep/uni_modules/uni-transition/components/uni-transition/createAnimation.js

@@ -1,131 +0,0 @@
-// const defaultOption = {
-// 	duration: 300,
-// 	timingFunction: 'linear',
-// 	delay: 0,
-// 	transformOrigin: '50% 50% 0'
-// }
-// #ifdef APP-NVUE
-const nvueAnimation = uni.requireNativePlugin('animation')
-// #endif
-class MPAnimation {
-	constructor(options, _this) {
-		this.options = options
-		// 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误
-		this.animation = uni.createAnimation({
-			...options
-		})
-		this.currentStepAnimates = {}
-		this.next = 0
-		this.$ = _this
-
-	}
-
-	_nvuePushAnimates(type, args) {
-		let aniObj = this.currentStepAnimates[this.next]
-		let styles = {}
-		if (!aniObj) {
-			styles = {
-				styles: {},
-				config: {}
-			}
-		} else {
-			styles = aniObj
-		}
-		if (animateTypes1.includes(type)) {
-			if (!styles.styles.transform) {
-				styles.styles.transform = ''
-			}
-			let unit = ''
-			if(type === 'rotate'){
-				unit = 'deg'
-			}
-			styles.styles.transform += `${type}(${args+unit}) `
-		} else {
-			styles.styles[type] = `${args}`
-		}
-		this.currentStepAnimates[this.next] = styles
-	}
-	_animateRun(styles = {}, config = {}) {
-		let ref = this.$.$refs['ani'].ref
-		if (!ref) return
-		return new Promise((resolve, reject) => {
-			nvueAnimation.transition(ref, {
-				styles,
-				...config
-			}, res => {
-				resolve()
-			})
-		})
-	}
-
-	_nvueNextAnimate(animates, step = 0, fn) {
-		let obj = animates[step]
-		if (obj) {
-			let {
-				styles,
-				config
-			} = obj
-			this._animateRun(styles, config).then(() => {
-				step += 1
-				this._nvueNextAnimate(animates, step, fn)
-			})
-		} else {
-			this.currentStepAnimates = {}
-			typeof fn === 'function' && fn()
-			this.isEnd = true
-		}
-	}
-
-	step(config = {}) {
-		// #ifndef APP-NVUE
-		this.animation.step(config)
-		// #endif
-		// #ifdef APP-NVUE
-		this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
-		this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
-		this.next++
-		// #endif
-		return this
-	}
-
-	run(fn) {
-		// #ifndef APP-NVUE
-		this.$.animationData = this.animation.export()
-		this.$.timer = setTimeout(() => {
-			typeof fn === 'function' && fn()
-		}, this.$.durationTime)
-		// #endif
-		// #ifdef APP-NVUE
-		this.isEnd = false
-		let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
-		if(!ref) return
-		this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
-		this.next = 0
-		// #endif
-	}
-}
-
-
-const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
-	'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
-	'translateZ'
-]
-const animateTypes2 = ['opacity', 'backgroundColor']
-const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
-animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
-	MPAnimation.prototype[type] = function(...args) {
-		// #ifndef APP-NVUE
-		this.animation[type](...args)
-		// #endif
-		// #ifdef APP-NVUE
-		this._nvuePushAnimates(type, args)
-		// #endif
-		return this
-	}
-})
-
-export function createAnimation(option, _this) {
-	if(!_this) return
-	clearTimeout(_this.timer)
-	return new MPAnimation(option, _this)
-}

+ 0 - 286
sleep/uni_modules/uni-transition/components/uni-transition/uni-transition.vue

@@ -1,286 +0,0 @@
-<template>
-  <!-- #ifndef APP-NVUE -->
-  <view v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
-  <!-- #endif -->
-  <!-- #ifdef APP-NVUE -->
-  <view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
-  <!-- #endif -->
-</template>
-
-<script>
-import { createAnimation } from './createAnimation'
-
-/**
- * Transition 过渡动画
- * @description 简单过渡动画组件
- * @tutorial https://ext.dcloud.net.cn/plugin?id=985
- * @property {Boolean} show = [false|true] 控制组件显示或隐藏
- * @property {Array|String} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
- *  @value fade 渐隐渐出过渡
- *  @value slide-top 由上至下过渡
- *  @value slide-right 由右至左过渡
- *  @value slide-bottom 由下至上过渡
- *  @value slide-left 由左至右过渡
- *  @value zoom-in 由小到大过渡
- *  @value zoom-out 由大到小过渡
- * @property {Number} duration 过渡动画持续时间
- * @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`
- */
-export default {
-	name: 'uniTransition',
-	emits:['click','change'],
-	props: {
-		show: {
-			type: Boolean,
-			default: false
-		},
-		modeClass: {
-			type: [Array, String],
-			default() {
-				return 'fade'
-			}
-		},
-		duration: {
-			type: Number,
-			default: 300
-		},
-		styles: {
-			type: Object,
-			default() {
-				return {}
-			}
-		},
-		customClass:{
-			type: String,
-			default: ''
-		},
-		onceRender:{
-			type:Boolean,
-			default:false
-		},
-	},
-	data() {
-		return {
-			isShow: false,
-			transform: '',
-			opacity: 1,
-			animationData: {},
-			durationTime: 300,
-			config: {}
-		}
-	},
-	watch: {
-		show: {
-			handler(newVal) {
-				if (newVal) {
-					this.open()
-				} else {
-					// 避免上来就执行 close,导致动画错乱
-					if (this.isShow) {
-						this.close()
-					}
-				}
-			},
-			immediate: true
-		}
-	},
-	computed: {
-		// 生成样式数据
-		stylesObject() {
-			let styles = {
-				...this.styles,
-				'transition-duration': this.duration / 1000 + 's'
-			}
-			let transform = ''
-			for (let i in styles) {
-				let line = this.toLine(i)
-				transform += line + ':' + styles[i] + ';'
-			}
-			return transform
-		},
-		// 初始化动画条件
-		transformStyles() {
-			return 'transform:' + this.transform + ';' + 'opacity:' + this.opacity + ';' + this.stylesObject
-		}
-	},
-	created() {
-		// 动画默认配置
-		this.config = {
-			duration: this.duration,
-			timingFunction: 'ease',
-			transformOrigin: '50% 50%',
-			delay: 0
-		}
-		this.durationTime = this.duration
-	},
-	methods: {
-		/**
-		 *  ref 触发 初始化动画
-		 */
-		init(obj = {}) {
-			if (obj.duration) {
-				this.durationTime = obj.duration
-			}
-			this.animation = createAnimation(Object.assign(this.config, obj),this)
-		},
-		/**
-		 * 点击组件触发回调
-		 */
-		onClick() {
-			this.$emit('click', {
-				detail: this.isShow
-			})
-		},
-		/**
-		 * ref 触发 动画分组
-		 * @param {Object} obj
-		 */
-		step(obj, config = {}) {
-			if (!this.animation) return
-			for (let i in obj) {
-				try {
-					if(typeof obj[i] === 'object'){
-						this.animation[i](...obj[i])
-					}else{
-						this.animation[i](obj[i])
-					}
-				} catch (e) {
-					console.error(`方法 ${i} 不存在`)
-				}
-			}
-			this.animation.step(config)
-			return this
-		},
-		/**
-		 *  ref 触发 执行动画
-		 */
-		run(fn) {
-			if (!this.animation) return
-			this.animation.run(fn)
-		},
-		// 开始过度动画
-		open() {
-			clearTimeout(this.timer)
-			this.transform = ''
-			this.isShow = true
-			let { opacity, transform } = this.styleInit(false)
-			if (typeof opacity !== 'undefined') {
-				this.opacity = opacity
-			}
-			this.transform = transform
-			// 确保动态样式已经生效后,执行动画,如果不加 nextTick ,会导致 wx 动画执行异常
-			this.$nextTick(() => {
-				// TODO 定时器保证动画完全执行,目前有些问题,后面会取消定时器
-				this.timer = setTimeout(() => {
-					this.animation = createAnimation(this.config, this)
-					this.tranfromInit(false).step()
-					this.animation.run()
-					this.$emit('change', {
-						detail: this.isShow
-					})
-				}, 20)
-			})
-		},
-		// 关闭过度动画
-		close(type) {
-			if (!this.animation) return
-			this.tranfromInit(true)
-				.step()
-				.run(() => {
-					this.isShow = false
-					this.animationData = null
-					this.animation = null
-					let { opacity, transform } = this.styleInit(false)
-					this.opacity = opacity || 1
-					this.transform = transform
-					this.$emit('change', {
-						detail: this.isShow
-					})
-				})
-		},
-		// 处理动画开始前的默认样式
-		styleInit(type) {
-			let styles = {
-				transform: ''
-			}
-			let buildStyle = (type, mode) => {
-				if (mode === 'fade') {
-					styles.opacity = this.animationType(type)[mode]
-				} else {
-					styles.transform += this.animationType(type)[mode] + ' '
-				}
-			}
-			if (typeof this.modeClass === 'string') {
-				buildStyle(type, this.modeClass)
-			} else {
-				this.modeClass.forEach(mode => {
-					buildStyle(type, mode)
-				})
-			}
-			return styles
-		},
-		// 处理内置组合动画
-		tranfromInit(type) {
-			let buildTranfrom = (type, mode) => {
-				let aniNum = null
-				if (mode === 'fade') {
-					aniNum = type ? 0 : 1
-				} else {
-					aniNum = type ? '-100%' : '0'
-					if (mode === 'zoom-in') {
-						aniNum = type ? 0.8 : 1
-					}
-					if (mode === 'zoom-out') {
-						aniNum = type ? 1.2 : 1
-					}
-					if (mode === 'slide-right') {
-						aniNum = type ? '100%' : '0'
-					}
-					if (mode === 'slide-bottom') {
-						aniNum = type ? '100%' : '0'
-					}
-				}
-				this.animation[this.animationMode()[mode]](aniNum)
-			}
-			if (typeof this.modeClass === 'string') {
-				buildTranfrom(type, this.modeClass)
-			} else {
-				this.modeClass.forEach(mode => {
-					buildTranfrom(type, mode)
-				})
-			}
-
-			return this.animation
-		},
-		animationType(type) {
-			return {
-				fade: type ? 1 : 0,
-				'slide-top': `translateY(${type ? '0' : '-100%'})`,
-				'slide-right': `translateX(${type ? '0' : '100%'})`,
-				'slide-bottom': `translateY(${type ? '0' : '100%'})`,
-				'slide-left': `translateX(${type ? '0' : '-100%'})`,
-				'zoom-in': `scaleX(${type ? 1 : 0.8}) scaleY(${type ? 1 : 0.8})`,
-				'zoom-out': `scaleX(${type ? 1 : 1.2}) scaleY(${type ? 1 : 1.2})`
-			}
-		},
-		// 内置动画类型与实际动画对应字典
-		animationMode() {
-			return {
-				fade: 'opacity',
-				'slide-top': 'translateY',
-				'slide-right': 'translateX',
-				'slide-bottom': 'translateY',
-				'slide-left': 'translateX',
-				'zoom-in': 'scale',
-				'zoom-out': 'scale'
-			}
-		},
-		// 驼峰转中横线
-		toLine(name) {
-			return name.replace(/([A-Z])/g, '-$1').toLowerCase()
-		}
-	}
-}
-</script>
-
-<style></style>

+ 0 - 84
sleep/uni_modules/uni-transition/package.json

@@ -1,84 +0,0 @@
-{
-  "id": "uni-transition",
-  "displayName": "uni-transition 过渡动画",
-  "version": "1.3.2",
-  "description": "元素的简单过渡动画",
-  "keywords": [
-    "uni-ui",
-    "uniui",
-    "动画",
-    "过渡",
-    "过渡动画"
-],
-  "repository": "https://github.com/dcloudio/uni-ui",
-  "engines": {
-    "HBuilderX": ""
-  },
-  "directories": {
-    "example": "../../temps/example_temps"
-  },
-"dcloudext": {
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
-    "type": "component-vue"
-  },
-  "uni_modules": {
-    "dependencies": ["uni-scss"],
-    "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"
-        },
-        "快应用": {
-          "华为": "u",
-          "联盟": "u"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
-        }
-      }
-    }
-  }
-}

+ 0 - 11
sleep/uni_modules/uni-transition/readme.md

@@ -1,11 +0,0 @@
-
-
-## Transition 过渡动画
-> **组件名:uni-transition**
-> 代码块: `uTransition`
-
-
-元素过渡动画
-
-### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition)
-#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 0 - 11
sleep/utils/cache.js

@@ -1,11 +0,0 @@
-export const setCache = (key, data) => {
-	uni.setStorageSync(key, data)
-}
-
-export const getCache = (key) => {
-	return uni.getStorageSync(key)
-}
-
-export const removeCache = (key) => {
-	uni.removeStorageSync(key)
-}

+ 11 - 0
sleep/utils/storage.js

@@ -0,0 +1,11 @@
+export default {
+  setItem: (key, value) => {
+    uni.setStorageSync(key, value)
+  },
+  getItem: (key) => {
+    return uni.getStorageSync(key)
+  },
+  removeItem: (key, options = {}) => {
+    uni.removeStorageSync(key)
+  }
+}