Browse Source

On main: 2023-07-26

wenningning 1 year ago
parent
commit
06a782d4a1
80 changed files with 1154 additions and 5568 deletions
  1. 16 3
      sleep/App.vue
  2. 18 0
      sleep/api/vitalSignsLook.js
  3. 0 15
      sleep/api/warn_log.js
  4. 1 0
      sleep/colorui/main.css
  5. 0 71
      sleep/components/boxTitle/index.vue
  6. 0 117
      sleep/components/musicControl/index.vue
  7. 0 141
      sleep/components/musicControl/playList.vue
  8. 0 148
      sleep/components/search/index.vue
  9. 0 284
      sleep/components/wanghexu-timeslot/wanghexu-timeslot.vue
  10. 0 15
      sleep/main.js
  11. 7 1
      sleep/manifest.json
  12. 60 33
      sleep/pages.json
  13. 22 119
      sleep/pages/alertSetting/alertSetting.vue
  14. 0 0
      sleep/pages/articles/components/parser/libs/CssHandler.js
  15. 0 0
      sleep/pages/articles/components/parser/libs/MpHtmlParser.js
  16. 0 0
      sleep/pages/articles/components/parser/libs/config.js
  17. 0 0
      sleep/pages/articles/components/parser/libs/handler.sjs
  18. 0 0
      sleep/pages/articles/components/parser/libs/handler.wxs
  19. 0 0
      sleep/pages/articles/components/parser/libs/trees.vue
  20. 0 0
      sleep/pages/articles/components/parser/parser.vue
  21. 1 1
      sleep/pages/healthAdvert/careHealthAdvertLook.vue
  22. 0 0
      sleep/pages/articles/healthAdvert/webview.vue
  23. 16 0
      sleep/pages/articles/index.js
  24. 51 0
      sleep/pages/articles/index.vue
  25. 0 272
      sleep/pages/dayRecommend/index.vue
  26. 33 5
      sleep/pages/home/index.vue
  27. 9 13
      sleep/pages/index/index.vue
  28. 25 25
      sleep/pages/monthReport/monthReport.vue
  29. 50 0
      sleep/pages/log/packageBuy/index.js
  30. 202 0
      sleep/pages/log/packageBuy/index.vue
  31. 59 0
      sleep/pages/log/packageBuy/payResult.vue
  32. 25 1
      sleep/pages/log/smsVoice/index.js
  33. 2 2
      sleep/pages/log/smsVoice/index.vue
  34. 338 0
      sleep/pages/log/smsVoice/package.vue
  35. 28 28
      sleep/pages/weekReport/weekReport.vue
  36. 46 98
      sleep/pages/my/index.vue
  37. 2 2
      sleep/pages/report/report.vue
  38. 139 136
      sleep/pages/shareUser/shareUser.vue
  39. 0 13
      sleep/plugins/audio/index.js
  40. 0 74
      sleep/plugins/audio/util.js
  41. 0 597
      sleep/plugins/audio/zaudio.js
  42. 0 403
      sleep/plugins/pinyin/pinyin.js
  43. 0 77
      sleep/plugins/pinyin/toPinyin.js
  44. 0 40
      sleep/plugins/pinyin/utils.js
  45. BIN
      sleep/preview/╬ó╨┼═╝╞¼_20220117173118.png
  46. BIN
      sleep/preview/╬ó╨┼═╝╞¼_20220117173402.png
  47. BIN
      sleep/preview/╬ó╨┼═╝╞¼_20220117173412.png
  48. BIN
      sleep/preview/╬ó╨┼═╝╞¼_20220117173428.png
  49. BIN
      sleep/preview/╬ó╨┼═╝╞¼_20220117173448.png
  50. BIN
      sleep/preview/╬ó╨┼═╝╞¼_20220117173510.png
  51. BIN
      sleep/preview/╬ó╨┼═╝╞¼_20220117173526.png
  52. BIN
      sleep/preview/╬ó╨┼═╝╞¼_20220117173539.png
  53. BIN
      sleep/preview/╬ó╨┼═╝╞¼_20220117174715.png
  54. BIN
      sleep/static/mine/myIconAdd.png
  55. BIN
      sleep/static/mine/myIconBuy.png
  56. BIN
      sleep/static/mine/myIconDefault.png
  57. BIN
      sleep/static/mine/myIconEdit.png
  58. BIN
      sleep/static/mine/myIconMoney.png
  59. BIN
      sleep/static/mine/myIconNotDefault.png
  60. BIN
      sleep/static/mine/myIconPhone.png
  61. BIN
      sleep/static/report/reportAlertBg.png
  62. BIN
      sleep/static/report/reportBG.png
  63. BIN
      sleep/static/tabBar/recommend.png
  64. BIN
      sleep/static/tabBar/recommendHL.png
  65. 0 2
      sleep/uni_modules/cc-swiperTabs/changelog.md
  66. 0 146
      sleep/uni_modules/cc-swiperTabs/components/cc-swiperTabs/cc-swiperTabs.vue
  67. 0 85
      sleep/uni_modules/cc-swiperTabs/package.json
  68. 0 166
      sleep/uni_modules/cc-swiperTabs/readme.md
  69. 0 22
      sleep/uni_modules/uni-icons/changelog.md
  70. 0 1169
      sleep/uni_modules/uni-icons/components/uni-icons/icons.js
  71. 0 96
      sleep/uni_modules/uni-icons/components/uni-icons/uni-icons.vue
  72. 0 663
      sleep/uni_modules/uni-icons/components/uni-icons/uniicons.css
  73. BIN
      sleep/uni_modules/uni-icons/components/uni-icons/uniicons.ttf
  74. 0 86
      sleep/uni_modules/uni-icons/package.json
  75. 0 8
      sleep/uni_modules/uni-icons/readme.md
  76. 0 16
      sleep/uni_modules/uni-steps/changelog.md
  77. 0 269
      sleep/uni_modules/uni-steps/components/uni-steps/uni-steps.vue
  78. 0 89
      sleep/uni_modules/uni-steps/package.json
  79. 0 13
      sleep/uni_modules/uni-steps/readme.md
  80. 4 4
      sleep/utils/request.js

+ 16 - 3
sleep/App.vue

@@ -1,8 +1,9 @@
 <script>
 import Vue from "vue";
-
+import * as Foundation from '@/ui-utils/Foundation'
+import Storage from '@/utils/storage'
 export default {
-  onLaunch: function () {
+  onLaunch: function (option) {
     wx.getSystemInfo({
       success: (e) => {
         // #ifndef MP
@@ -34,7 +35,19 @@ export default {
         console.log(err);
       },
     });
-
+    const { query } = option
+    console.log('query===', query)
+    if (query && query.type){
+      console.log('我是通过分享或者扫码进来的哦......')
+      let codeMsg = query
+      if (query.q) {
+        const q = decodeURIComponent(query.q)
+        console.log('q===', q)
+        codeMsg = Foundation.getQueryObject(q)
+      }
+      console.log('codeMsg===', codeMsg)
+      Storage.setItem("codeMsg", codeMsg)
+    }
   },
   onShow: function () {
     console.log("App Show");

+ 18 - 0
sleep/api/vitalSignsLook.js

@@ -45,3 +45,21 @@ export function addByMobile(params) {
     })
 }
 
+/** 修改 */
+export function editLogLook(params, id) {
+    return request({
+        url: `care/carolie_log_look/${id}`,
+        config: {method: Method.PUT, needToken: true, loading: false},
+        params
+    })
+}
+
+/** 好友分享新增 */
+export function addByShare(params) {
+    return request({
+        url: `care/carolie_log_look/addByShare`,
+        config: {method: Method.POST, needToken: true, loading: false},
+        params
+    })
+}
+

+ 0 - 15
sleep/api/warn_log.js

@@ -1,15 +0,0 @@
-import request, { Method } from '@/utils/request'
-
-/**
- * 获取预警提醒列表
- * @param params
- * @returns {Promise<any>}
- */
-export function getPage(params) {
-  return request({
-    url: 'vital_signs/warn_log/page',
-    config: {method: Method.POST, needToken: true, loading: true},
-    params
-  })
-}
-

+ 1 - 0
sleep/colorui/main.css

@@ -3920,6 +3920,7 @@ scroll-view.cu-steps .cu-item {
 	justify-content: center;
 	align-items: center;
 	padding: 30px;
+	height: 70%;
 }
 
 .word-btn-white {

+ 0 - 71
sleep/components/boxTitle/index.vue

@@ -1,71 +0,0 @@
-<template>
-	<view class="box-tile" :class="className">
-		<text class="title-wrapper">{{ title }}</text>
-		<text class="more" @click="$emit('handlePlay')" v-if="iconName">
-			<text>{{ buttonName }}</text>
-			<text :class="['iconfont icon-title icon-' + iconName]"  v-if="iconName"></text>
-		</text>
-	</view>
-</template>
-
-<script>
-export default {
-	props: {
-		title: {
-			type: String,
-			default: ''
-		},
-		iconName: {
-			type: String,
-			default: ''
-		},
-		buttonName: {
-			type: String,
-			default: ''
-		},
-		className: {
-			type: String,
-			default: ''
-		}
-	}
-};
-</script>
-<style lang="scss" scoped>
-.box-tile {
-	box-sizing: border-box;
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	padding-left: 3px;
-	
-	.title-wrapper {
-		font-size: 18px;
-		font-weight: 500;
-		line-height: 18px;
-		color: #ffffff;
-		position: relative;
-		text-indent: 2px;
-		// &:before {
-		// 	content: '';
-		// 	width: 4px;
-		// 	height: 18px;
-		// 	background-image: linear-gradient(to bottom, rgb(253, 117, 102), rgb(247, 73, 79));
-		// 	position: absolute;
-		// 	left: 0px;
-		// 	top: 3px;
-		// }
-	}
-	.more {
-		border-radius: 9px;
-		color:  rgba(22, 125, 242, 1);;
-		padding: 3px 10px 3px 13px;
-		font-size: 12px;
-		border: 1px solid rgba(22, 125, 242, 1);
-	}
-	.icon-title {
-		margin-left: 2px;
-		color: rgba(22, 125, 242, 1);;
-		font-size: 12rpx;
-	}
-}
-</style>

+ 0 - 117
sleep/components/musicControl/index.vue

@@ -1,117 +0,0 @@
-<template>
-	<view class="radius shadow fotter-container"  v-if="playInfo">
-		<view class="fixed-container" @click.stop="toSongDetail">
-			<view class="cu-avatar playImage round" :style="'background-image:url(' + playInfo.coverImgUrl + ')'"></view>
-			<view class="play-center">
-				<view class="music-name">{{ playInfo.title }}</view>
-				<!-- <view class="music-author">{{ playInfo.singer }}</view> -->
-			</view>
-			<view class="play-right">
-				<view class="play-list relative" @click.stop="changePlaying">
-					<text :class="['iconfont', !paused ? 'icon-playStop' : 'icon-playStart']" style="font-size: 28px"></text>
-				</view>
-				<text class="iconfont icon-liebiao play-list" @click.stop="modelShow = true"></text>
-			</view>
-		</view>
-		<play-list v-model="modelShow"></play-list>
-	</view>
-</template>
-
-<script>
-import playList from './playList.vue';
-import { mapState } from 'vuex';
-export default {
-	data() {
-		return {
-			modelShow: false
-		};
-	},
-	components: {
-		playList
-	},
-	computed: mapState({
-		playInfo: state => state.playInfo,
-		paused: state => state.paused
-	}),
-	methods: {
-		//修改播放状态
-		changePlaying() {
-			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);
-		},
-
-		toSongDetail() {
-			if (this.modelShow) return;
-			uni.navigateTo({
-				url: '../play/index'
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.fotter-container {
-	height: 110rpx;
-	width: 100%;
-	// position: fixed;
-	// bottom: 0px;
-	// left: 0;
-	z-index: 9999;
-
-	.fixed-container {
-		position: fixed;
-		z-index: 20;
-		width: 100%;
-		height: 110rpx;
-		bottom: 0px;
-		// box-shadow: 0 1px 2px rgb(0, 21, 0.1);
-		display: flex;
-		background: rgba(22, 125, 242, 1);;
-	}
-
-	.playImage {
-		width: 80rpx;
-		height: 80rpx;
-		margin: auto 15px auto 10px;
-	}
-
-	.play-center {
-		flex: auto;
-		display: flex;
-		flex-wrap: wrap;
-		align-content: center;
-		max-width: calc(100% - 300rpx);
-
-		.music-name {
-			color: #ffffff;
-			font-size: 32rpx;
-			margin-bottom: 4px;
-			width: 100%;
-			overflow: hidden;
-			text-overflow: ellipsis;
-			white-space: nowrap;
-		}
-
-		.music-author {
-			font-size: 24rpx;
-			color: rgba(0, 0, 0, 0.5);
-			width: 100%;
-		}
-	}
-
-	.play-right {
-		width: 92px;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-
-		.play-list {
-			font-size: 30px;
-			margin-right: 12px;
-		}
-	}
-}
-</style>

+ 0 - 141
sleep/components/musicControl/playList.vue

@@ -1,141 +0,0 @@
-<template>
-	<view class="cu-modal bottom-modal" :class="{ show: value }" @click.self="$emit('input', false)" :key="number">
-		<view class="cu-dialog play-list-dialog">
-			<view class="cu-bar bg-white list-title">
-				播放列表
-				<text class="light-text">(共{{ playList.length }}首)</text>
-			</view>
-			<scroll-view class="bg-white play-list " scroll-y style="height:65vh">
-				<view class="music-item flex" :class="{ active: item.id == playInfo.id }" v-for="(item, index) in playList" :key="item.id" @click="startPlayInfo(item)">
-					<image :src="item.coverImgUrl" class="music-img"></image>
-					<view class="music-info">
-						<view class="music-name text-overflow">{{ item.title }}</view>
-						<view class="music-singer text-overflow flex">{{ item.singer }}</view>
-					</view>
-					<text class="lg basic-icon-color cuIcon-deletefill" style="font-size: 18px;" @click.stop="removePlayList(item)"></text>
-				</view>
-			</scroll-view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { mapState } from 'vuex';
-export default {
-	props: {
-		value: {
-			type: Boolean,
-			default: false
-		}
-	},
-	data() {
-		return {
-			playList: this.$audio.audiolist,
-			number:Math.random()*100000
-		};
-	},
-	created() {
-		this.$audio.on('setAudio', 'event-a', list => {
-			this.playList = list;
-			this.number=Math.random()*100000
-		});
-	},
-	computed: mapState({
-		playInfo: state => state.playInfo,
-		paused: state => state.paused
-	}),
-	methods: {
-		async removePlayList(val) {
-			if (this.playList.length == 1) {
-				this.$audio.stop();
-				//如果是音乐详情页,那就返回首页
-				this.$emit('backHome');
-			} else {
-				//如果删除的歌曲是正在播放的歌曲
-				if (this.playInfo.id == val.id) {
-					this.$store.dispatch('changePlay', 1);
-				}
-			}
-			this.$store.dispatch('removeMusic', val);
-		},
-
-		async startPlayInfo(item) {
-			if (item.id == this.playInfo.id) return;
-			this.$store.dispatch('playMusic', item);
-		}
-	},
-	destroyed() {
-		this.$audio.off('setAudio', 'event-a');
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.play-list-dialog {
-	border-top-left-radius: 26px !important;
-	border-top-right-radius: 26px !important;
-	.list-title {
-		font-size: 32rpx;
-		color: #000;
-		justify-content: center;
-		.light-text {
-			font-size: 24rpx;
-			margin-left: 6px;
-			color: rgba(0, 0, 0, 0.5);
-		}
-	}
-	.play-list {
-		.music-item {
-			height: 60px;
-			box-sizing: border-box;
-			padding: 0 20px;
-			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 {
-					.music-name,
-					.music-singer {
-						color: #f84e51 !important;
-					}
-					&::before {
-						content: '';
-						width: 4px;
-						height: 55px;
-						background-image: linear-gradient(to bottom, rgb(253, 117, 102), rgb(247, 73, 79));
-						position: absolute;
-						left: 0px;
-						top: 3px;
-					}
-				}
-			}
-			&:last-of-type {
-				margin-bottom: 0;
-			}
-			.music-img {
-				width: 45px !important;
-				height: 45px !important;
-				border-radius: 6px;
-			}
-			.music-info {
-				margin-right: 15px;
-				margin-left: 15px;
-				width: calc(100vw - 135px);
-				text-align: left;
-				.music-name {
-					font-size: 30rpx;
-					margin-bottom: 5px;
-					color: #000;
-				}
-				.music-singer {
-					color: rgba(0, 0, 0, 0.5);
-					font-size: 24rpx;
-					align-items: center;
-				}
-			}
-		}
-	}
-}
-</style>

+ 0 - 148
sleep/components/search/index.vue

@@ -1,148 +0,0 @@
-<template>
-	<view class="cu-bar search">
-		<view class="search-form round">
-			<text class="cuIcon-search"></text>
-			<input type="text" class="input-wrapper relative" :placeholder="defaultKeywords" confirm-type="search" v-model="keywords" @input="debounceSuggest" @confirm="handleSearch"  @focus="getSuggestList" >
-			   <text class="cuIcon-close closeIcon" v-show="keywords" @click="keywords=''" ></text>
-			</input>
-		</view>
-		<view class="suggestList" v-show="keywords&&suggetShow" @click.self="handleClose">
-			<view class="suggestMain">
-				<view class="suggest-item" style="color:rgb(86,124,166)" @click="searchMusic(keywords)">
-					搜索 " {{keywords}} "
-				</view>
-				<view class="suggest-item" v-for="(item,index) in suggestList" :key="index" @click="searchMusic(item.keyword)">
-					 <text class="cuIcon-search" style="margin-right: 25rpx;"></text>
-					 {{item.keyword}}
-				</view>
-			</view>
-			
-		</view>
-	</view>
-</template>
-
-<script>
-	import {debounce} from "@/utils/index.js"
-	export default{
-		props:{
-			text:{
-				type:String,
-				default:''
-			}
-		},
-		data(){
-			return{
-				keywords:'',
-				defaultKeywords:'',
-				debounceSuggest:null,
-				suggestList:[], //搜索建议list
-				suggetShow:false
-			}
-	    },
-		created(){
-			this.debounceSuggest=debounce(() => {
-			    this.getSuggestList()
-			}, 500)
-			if(!this.text){
-				this.getDefaultSearch()
-			}else{
-				this.defaultKeywords=this.text
-			}
-			
-		},
-		methods:{
-			//获取默认搜索关键词
-			getDefaultSearch(){
-				this.$api.getDefaultSearch().then(res=>{
-					this.defaultKeywords=res.data.realkeyword||''
-				})
-			},
-			
-			//关闭搜索建议
-			handleClose(){
-				this.suggestList=[]
-				this.suggetShow=false
-			},
-			
-			//获取搜索建议
-			getSuggestList(){
-				if(!this.keywords.trim()){
-				  return 
-				}
-				this.suggetShow=true
-				this.$api.getSuggestList({keywords:this.keywords.trim()}).then(res=>{
-					 this.suggestList=res.result.allMatch||[]
-				})
-			},
-			
-			//点击搜索建议
-			searchMusic(val){
-				this.keywords=val
-				this.suggetShow=false
-				this.handleSearch()
-				
-			},
-			
-			//点击搜索
-			handleSearch(){
-				if(!this.keywords.trim()){
-				   this.keywords=this.defaultKeywords
-				} 
-				this.suggetShow=false
-				this.$store.dispatch('addHistoryList',this.keywords)
-				this.$emit('handleSearch',this.keywords)
-			}
-		},
-		watch:{
-			text(nl){
-				this.keywords=nl
-			},
-			
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-
-	.closeIcon{
-		position: absolute;
-		right: 20px;
-		top:9px;
-		font-size: 36rpx;
-		z-index: 20;
-	}
-	.suggestList{
-		background-color: rgba(255,255,255,0.1);
-		z-index: 25;
-		position: fixed;
-		left: 0;
-		right: 0;
-		top: 190rpx;
-		bottom: 0;
-		.suggestMain{
-			position: absolute;
-			left: 25px;
-			right: 25px;
-			top: 0;
-			z-index: 30;
-			background-color: #fff;
-			border: 1px solid #bebebe;
-			border-radius: 4px;
-			box-shadow: 0 4px 7px #aaa;
-			text-shadow: 0 1px 0 rgba(255, 255, 255, 0.9);
-			box-sizing: border-box;
-			padding: 0 25rpx;
-			.suggest-item{
-				padding: 24rpx 0;
-				border-bottom: 1upx solid rgba(0, 0, 0, 0.1);
-				overflow: hidden;
-				text-overflow: ellipsis;
-				white-space: nowrap;
-				box-sizing: border-box;
-				width: 95%;
-			}
-		}
-		
-
-	}
-</style>

+ 0 - 284
sleep/components/wanghexu-timeslot/wanghexu-timeslot.vue

@@ -1,284 +0,0 @@
-<template>
-    <view>
-		<view v-if="isShow" class="time_mask" :class="{'uni-timer-mask-show':timeMaskShow}"></view>
-		<view v-if="isShow" class="yx_time_slot" :class="{'fadelogIn1':timeMaskShow}">
-			<view class="time_top_box">
-				<view class="time_close" @click="close">取消</view>
-				<view class="time_text">{{title}}</view>
-				<view class="time_comfirm" @click="confirm">确认</view>
-			</view>
-			<view class="typelist">
-				<view class="typeobj" :class="{'typeobj_hover':typeIndex==index}" v-for="(item,index) in typeList" :key="index" @click="handleType(index)">
-					<view class="text">{{item}}</view>
-					<view class="line"></view>
-				</view>
-			</view>
-			<!-- 时间选择 -->
-			<view class="yx_timer_sel">
-				<swiper class="sel_swiper" :current="typeIndex">
-				    <swiper-item>
-				        <view>
-							<picker-view :value="startvalue" :indicator-style="indicatorStyle" @change="bindstartChange" class="sel_swiper-item">
-							    <picker-view-column>
-							        <view class="item" v-for="(item,index) in timeHour" :key="index">{{item}}时</view>
-							    </picker-view-column>
-							    <picker-view-column>
-							        <view class="item" v-for="(item,index) in timeMin" :key="index">{{item}}分</view>
-							    </picker-view-column>
-							</picker-view>
-						</view>
-				    </swiper-item>
-				    <swiper-item>
-				        <view>
-				    		<picker-view :value="endvalue" :indicator-style="indicatorStyle" @change="bindendChange" class="sel_swiper-item">
-				    		    <picker-view-column>
-				    		        <view class="item" v-for="(item,index) in timeHour" :key="index">{{item}}时</view>
-				    		    </picker-view-column>
-				    		    <picker-view-column>
-				    		        <view class="item" v-for="(item,index) in timeMin" :key="index">{{item}}分</view>
-				    		    </picker-view-column>
-				    		</picker-view>
-				    	</view>
-				    </swiper-item>
-				</swiper>
-			</view>
-			
-		</view>
-	</view>
-</template>
-
-<script>
-export default {
-	name:"time-slot",
-	props: {
-		title: {
-		    type: String,
-		    default: () => {
-		       return "选择时间段";
-		    }
-		},
-	},
-    data() {
-        return {
-			timeMaskShow:false,//遮罩
-			isShow:false,//显示
-			typeList:["开始时间","结束时间"],
-			typeIndex:0,//下标
-			startvalue:[14,0],//默认下标,14时 00分
-			endvalue:[15,0],//默认下标,15时 00分
-			indicatorStyle: 'height: 50px;',
-			// timeList:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],
-			timeHour:[],
-			timeMin:[],//分钟可选项
-        };
-    },
-    mounted() {
-		//获取时分
-		let timeHour = [] 
-		let timeMin = [] 
-		for (let i = 0; i < 24; i++) {
-		    timeHour.push(this.formatNumber(i))
-	    }
-		for (let i = 0; i < 60; i++) {
-		    timeMin.push(this.formatNumber(i))
-		}
-		this.timeHour = timeHour
-		this.timeMin = timeMin
-	},
-    methods: {
-		//看看是不是有两位数
-		formatNumber(n) {
-			n = n.toString()
-			return n[1] ? n : '0' + n
-		},
-		//开始选择
-		bindstartChange(e){
-			console.log(e)
-			this.startvalue = e.detail.value
-		},
-		//结束选择
-		bindendChange(e){
-			console.log(e)
-			this.endvalue = e.detail.value
-		},
-        /**
-         * 关闭弹窗
-         */
-        close() {
-        	this.timeMaskShow = false
-        	this.$nextTick(() => {
-        		setTimeout(() => {
-        			this.isShow = false
-        			this.$emit('close')
-        		}, 300)
-        	})
-        },
-        /**
-         * 确认按钮
-         */
-        confirm() {
-			if(this.typeIndex==0){
-				this.endvalue = [this.startvalue[0]+1,0]
-				this.typeIndex = 1
-			}else{
-				if(this.startvalue[0]<this.endvalue[0] || (this.startvalue[0]==this.endvalue[0]&&this.startvalue[1]<this.endvalue[1])){
-					var obj = {
-						start:{
-							hour:this.timeHour[this.startvalue[0]],
-							min:this.timeMin[this.startvalue[1]]
-						},
-						end:{
-							hour:this.timeHour[this.endvalue[0]],
-							min:this.timeMin[this.endvalue[1]]
-						}
-					}
-					this.$emit('confirm',obj)
-					this.close()
-				}else{
-					uni.showToast({
-						icon:"error",
-						title:"结束时间要大于开始时间"
-					})
-				}
-				
-			}
-        },
-		/**
-		 * 打开日历弹窗
-		 */
-		open() {
-			this.typeIndex = 0
-			this.isShow = true
-			this.$nextTick(() => {
-				setTimeout(() => {
-					this.timeMaskShow = true
-				}, 50)
-			})
-		},
-		//栏目选择
-		handleType(index){
-			if(index!=this.typeIndex){
-				if(index==1){
-					this.endvalue = [this.startvalue[0]+1,0]
-				}
-				this.typeIndex = index
-			}
-		}
-		
-    }
-};
-</script>
-
-<style lang="scss" scoped>
-.time_mask {
-	position: fixed;
-	bottom: 0;
-	top: 0;
-	left: 0;
-	right: 0;
-	background-color: $uni-bg-color-mask;
-	transition-property: opacity;
-	transition-duration: 0.3s;
-	opacity: 0;
-	/* #ifndef APP-NVUE */
-	z-index: 99;
-	/* #endif */
-}
-.yx_time_slot{
-	background-color: #FFFFFF;
-	width: 100%;
-	height: 750rpx;
-	position: fixed;
-	bottom: calc(var(--window-bottom));
-	left: 0;
-	right: 0;
-	z-index: 999;
-	transition-property: transform;
-	transition-duration: 0.3s;
-	transform: translateY(460px);
-	.time_top_box{
-		width: 100%;
-		height: 80rpx;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		.time_close,.time_comfirm{
-			width: 100rpx;
-			color: #999999;
-			font-size: 28rpx;
-			font-weight: 400;
-			text-align: center;
-		}
-		.time_comfirm{
-			color: #4360F7;
-		}
-		.time_text{
-			flex: 1;
-			font-size: 30rpx;
-			font-weight: 800;
-			text-align: center;
-		}
-	}
-}
-.uni-timer-mask-show{
-	opacity: 1;
-}
-/* 从下往上弹窗动画 */
-.fadelogIn1 {
-	// -webkit-animation: fadelogIn 0.5s;
-	// animation: fadelogIn 0.5s;
-	transform: translateY(0);
-}
-.typelist{
-	width: 100%;
-	height: 70rpx;
-	display: flex;
-	align-items: center;
-	.typeobj{
-		width: 158rpx;
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		.text{
-			height: 65rpx;
-			line-height: 65rpx;
-			font-size: 28rpx;
-			color: #333333;
-		}
-		.line{
-			width: 1rpx;
-			height: 5rpx;
-		}
-	}
-	.typeobj_hover{
-		.text{
-			font-weight: 600;
-		}
-		.line{
-			width: 88rpx;
-			transition: width .5s;
-			background-color: #4360F7;
-		}
-	}
-}
-.yx_timer_sel{
-	width: 100%;
-	margin-top: 38rpx;
-	.sel_swiper{
-		// width: 80%;
-		// margin: 0 auto;
-		height: 500rpx;
-	}
-	.sel_swiper-item{
-		height: 500rpx;
-		.item {
-		    height: 50px;
-			display: flex;
-		    align-items: center;
-		    justify-content: center;
-		    text-align: center;
-		}
-	}
-}
-</style>

+ 0 - 15
sleep/main.js

@@ -7,30 +7,15 @@ Vue.config.productionTip = false
 App.mpType = 'app'
 
 
-import musicControl from "@/components/musicControl/index.vue"
-Vue.component('music-control', musicControl)
-
-import boxTitle from "@/components/boxTitle/index.vue"
-Vue.component('box-title', boxTitle)
-
 import tabBar from "@/components/tabBar/index.vue"
 Vue.component('tab-bar', tabBar)
 
 import cuCustom from './colorui/components/cu-custom.vue'
 Vue.component('cu-custom', cuCustom)
 
-import {audio} from '@/plugins/audio/index.js'
-Vue.prototype.$audio =audio
-
-import {UniSteps} from './uni_modules/uni-steps/components/uni-steps/uni-steps.vue'
-Vue.component('uni-steps', UniSteps)
-
 import {UniSection} from './uni_modules/uni-section/components/uni-section/uni-section.vue'
 Vue.component('uni-section', UniSection)
 
-import {timeSlot} from '@/components/wanghexu-timeslot/wanghexu-timeslot.vue'
-Vue.component('time-slot', timeSlot)
-
 import mixin from './utils/vue-mixin'
 Vue.mixin(mixin)
 

+ 7 - 1
sleep/manifest.json

@@ -95,7 +95,13 @@
             "requiredBackgroundModes" : [ "audio" ]
         },
         "usingComponents" : true,
-        "permission" : {}
+        "permission" : {},
+        "plugins" : {
+            "sqb-pay" : {
+                "version" : "1.3.0", // 根据实际情况调整版本号
+                "provider" : "wx55540b288c5ce319"
+            }
+        }
     },
     "mp-alipay" : {
         "usingComponents" : true

+ 60 - 33
sleep/pages.json

@@ -8,12 +8,6 @@
       }
     },
     {
-      "path": "pages/weekReport/weekReport",
-      "style": {
-        "enablePullDownRefresh": false
-      }
-    },
-    {
       "path": "pages/alertSetting/alertSetting",
       "style": {
         "enablePullDownRefresh": false
@@ -38,12 +32,6 @@
       }
     },
     {
-      "path": "pages/dayRecommend/index",
-      "style": {
-        "enablePullDownRefresh": false
-      }
-    },
-    {
       "path": "pages/index/index",
       "style": {
         "enablePullDownRefresh": false
@@ -63,32 +51,11 @@
       }
     },
     {
-      "path": "pages/healthAdvert/careHealthAdvertLook",
-      "style": {
-        "navigationBarTitleText": "内容详情",
-        "enablePullDownRefresh": false
-      }
-    },
-    {
-      "path": "pages/healthAdvert/webview",
-      "style": {
-        "navigationBarTitleText": "内容详情",
-        "enablePullDownRefresh": false
-      }
-    },
-    {
       "path": "pages/detail/detail",
       "style": {
         "navigationBarTitleText": "",
         "enablePullDownRefresh": false
       }
-    },
-    {
-      "path": "pages/monthReport/monthReport",
-      "style": {
-        "navigationBarTitleText": "",
-        "enablePullDownRefresh": false
-      }
     }
   ],
   "subPackages": [
@@ -96,6 +63,18 @@
       "root": "pages/log",
       "pages": [
         {
+          "path": "monthReport/index",
+          "style": {
+            "navigationBarTitleText": "月报"
+          }
+        },
+        {
+          "path": "weekReport/index",
+          "style": {
+            "navigationBarTitleText": "周报"
+          }
+        },
+        {
           "path": "warn/index",
           "style": {
             "navigationBarTitleText": "预警记录",
@@ -108,6 +87,54 @@
             "navigationBarTitleText": "短信电话记录",
             "enablePullDownRefresh": false
           }
+        },
+        {
+          "path": "smsVoice/package",
+          "style": {
+            "navigationBarTitleText": "购买套餐",
+            "enablePullDownRefresh": false,
+            "mp-weixin": {
+              "usingComponents": {
+                "sqb-pay": "plugin://sqb-pay/sqb-pay"
+              }
+            }
+          }
+        },
+        {
+          "path": "packageBuy/index",
+          "style": {
+            "navigationBarTitleText": "购买记录",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "packageBuy/payResult",
+          "style": {
+            "navigationBarTitleText": "支付结果"
+          }
+        }
+      ]
+    },
+    {
+      "root": "pages/articles",
+      "pages": [
+        {
+          "path": "index",
+          "style": {
+            "navigationBarTitleText": "文章"
+          }
+        },
+        {
+          "path": "healthAdvert/careHealthAdvertLook",
+          "style": {
+            "navigationBarTitleText": "内容详情"
+          }
+        },
+        {
+          "path": "healthAdvert/webview",
+          "style": {
+            "navigationBarTitleText": "内容详情"
+          }
         }
       ]
     }

+ 22 - 119
sleep/pages/alertSetting/alertSetting.vue

@@ -184,30 +184,20 @@
           </view>
         </view>
         <view class="flex-col group_5 space-y-20">
-<!--          <view class="flex-col space-y-12">-->
-<!--            <text class="self-start font_1 text_5">语音短信提示手机号码设置</text>-->
-<!--            <view class="flex-col space-y-4">-->
-<!--              <text class="font_5 text_6">-->
-<!--                注:设置提醒手机号需注册“小U睡眠”小程序领取短信语言套餐包,才能发送短信语音提醒。-->
-<!--              </text>-->
-<!--              <view class="flex-col section_9">-->
-<!--                <view class="flex-row justify-between items-center list-item">-->
-<!--                  <text class="font_2 text_8">号码1</text>-->
-<!--                  <view class="flex-row items-center space-x-8">-->
-<!--                    <input class="uni-input" placeholder-style="color:rgba(255, 255, 255, 0.5);text-align:right"-->
-<!--                           type="number" placeholder="输入手机号码"/>-->
-<!--                  </view>-->
-<!--                </view>-->
-<!--                <view class="flex-row justify-center items-center list-item space-x-6">-->
-<!--                  <image-->
-<!--                      class="image_9"-->
-<!--                      src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/649415135a7e3f0310661c1e/649415b654fe0000116ae544/16878800827365047681.png"-->
-<!--                  />-->
-<!--                  <text class="font_2">添加手机号码</text>-->
-<!--                </view>-->
-<!--              </view>-->
-<!--            </view>-->
-<!--          </view>-->
+          <view class="flex-col space-y-12">
+            <text class="self-start font_1 text_5">语音短信提示手机号码设置</text>
+            <view class="flex-col space-y-4">
+              <text class="font_5 text_6">
+                注:设置提醒手机号需注册“UU睡眠”小程序,前往“我的”-“购买套餐”中领取短信语言套餐包,才能发送短信语音提醒。
+              </text>
+              <view class="flex-col section_9">
+                <view class="flex-row justify-center items-center list-item space-x-6" @click="handleShareClick">
+                  <image class="image_9" src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/649415135a7e3f0310661c1e/649415b654fe0000116ae544/16878800827365047681.png"/>
+                  <text class="font_2">添加推送亲友</text>
+                </view>
+              </view>
+            </view>
+          </view>
           <view class="flex-col justify-start items-center self-center button">
             <text class="text_9" @click="saveSleepWarn">保存设置</text>
           </view>
@@ -440,6 +430,11 @@ export default {
         })
       })
     },
+    handleShareClick() {
+      uni.navigateTo({
+        url: '/pages/shareUser/shareUser'
+      })
+    },
     ...mapActions({
       saveUserInfo: 'saveUserInfoAction'
     })
@@ -457,8 +452,10 @@ export default {
 
   .section {
     background-image: url('http://wdklmall.oss-cn-shenzhen.aliyuncs.com/mallgoods/goods/3C62AD507C8345D49AEB2AAD8F7584BB.png');
-    background-size: 100% 100%;
     background-repeat: no-repeat;
+    background-size: cover ;
+    background-attachment: fixed ;
+    background-position: center center;
 
     .section_2 {
       padding-bottom: 1.25rem;
@@ -695,12 +692,6 @@ export default {
           margin-left: 0.25rem;
         }
       }
-
-      .image_6 {
-        width: 1.38rem;
-        height: 0.88rem;
-      }
-
       .space-y-20 {
         & > view:not(:first-child),
         & > text:not(:first-child),
@@ -768,98 +759,10 @@ export default {
   border-radius: 5px;
 }
 
-.example-body {
-  background-color: #fff;
-  padding: 10px 0;
-}
-
-.button-text {
-  color: #fff;
-  font-size: 12px;
-}
-
-.popup-content {
-  @include flex;
-  align-items: center;
-  justify-content: center;
-  padding: 15px;
-  height: 50px;
-  background-color: #fff;
-}
-
-.popup-height {
-  @include height;
-  width: 200px;
-}
-
 .text {
   font-size: 12px;
   color: #333;
 }
 
-.popup-success {
-  color: #fff;
-  background-color: #e1f3d8;
-}
-
-.popup-warn {
-  color: #fff;
-  background-color: #faecd8;
-}
-
-.popup-error {
-  color: #fff;
-  background-color: #fde2e2;
-}
-
-.popup-info {
-  color: #fff;
-  background-color: #f2f6fc;
-}
-
-.success-text {
-  color: #09bb07;
-}
-
-.warn-text {
-  color: #e6a23c;
-}
-
-.error-text {
-  color: #f56c6c;
-}
-
-.info-text {
-  color: #909399;
-}
-
-.dialog,
-.share {
-  /* #ifndef APP-NVUE */
-  display: flex;
-  /* #endif */
-  flex-direction: column;
-}
-
-.dialog-box {
-  padding: 10px;
-}
-
-.dialog .button,
-.share .button {
-  /* #ifndef APP-NVUE */
-  width: 100%;
-  /* #endif */
-  margin: 0;
-  margin-top: 10px;
-  padding: 3px 0;
-  flex: 1;
-}
-
-.dialog-text {
-  font-size: 14px;
-  color: #333;
-}
-
 
 </style>

sleep/components/parser/libs/CssHandler.js → sleep/pages/articles/components/parser/libs/CssHandler.js


sleep/components/parser/libs/MpHtmlParser.js → sleep/pages/articles/components/parser/libs/MpHtmlParser.js


sleep/components/parser/libs/config.js → sleep/pages/articles/components/parser/libs/config.js


sleep/components/parser/libs/handler.sjs → sleep/pages/articles/components/parser/libs/handler.sjs


sleep/components/parser/libs/handler.wxs → sleep/pages/articles/components/parser/libs/handler.wxs


sleep/components/parser/libs/trees.vue → sleep/pages/articles/components/parser/libs/trees.vue


sleep/components/parser/parser.vue → sleep/pages/articles/components/parser/parser.vue


+ 1 - 1
sleep/pages/healthAdvert/careHealthAdvertLook.vue

@@ -22,7 +22,7 @@
 
 <script>
 import * as API_doctorAdvert from '@/api/doctor_advert'
-import wParse from '@/components/parser/parser.vue'
+import wParse from '../components/parser/parser.vue'
 
 export default {
   components: {

sleep/pages/healthAdvert/webview.vue → sleep/pages/articles/healthAdvert/webview.vue


+ 16 - 0
sleep/pages/articles/index.js

@@ -0,0 +1,16 @@
+/**
+ * 文章API
+ */
+
+import request, {Method, API} from '@/utils/request'
+
+/**
+ * 获取某个位置的文章
+ * @param position
+ */
+export function getArticleByPosition(position) {
+    return request({
+        url: `${API.base}/pages/${position}/articles`,
+        config: { method: Method.GET, loading: true }
+    })
+}

+ 51 - 0
sleep/pages/articles/index.vue

@@ -0,0 +1,51 @@
+<template>
+  <view style="height: 100%" class="bg-white">
+    <cu-custom isBack="true" bgColor="#000000">
+      <view slot="content" style="color: #FFFFFF">{{ name }}</view>
+    </cu-custom>
+    <view >
+      <view class="bg-white padding">
+        <w-parse v-if="agreement.content" :html="agreement.content"/>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+import * as API_ArticlesR from './index'
+import wParse from './components/parser/parser.vue'
+
+export default {
+  components: {
+    wParse
+  },
+  data() {
+    return {
+      agreement: {},
+      name: ''
+    }
+  },
+  onLoad(option) {
+    const { name, position } = option
+    console.log('====', position)
+    this.name = name
+    this.getArticleByPosition(position)
+  },
+  methods: {
+    getArticleByPosition(position) {
+      let _this = this
+      API_ArticlesR.getArticleByPosition(position).then(res => {
+        _this.agreement = res
+      })
+    }
+  },
+
+}
+</script>
+
+<style scoped>
+/deep/ video {
+  width: 100% !important;
+  height: 225px;
+}
+</style>

+ 0 - 272
sleep/pages/dayRecommend/index.vue

@@ -1,272 +0,0 @@
-<template>
-	<view class="day-recommend-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="day-info">
-						<text class="bold-text">{{ day }}</text>
-						<text class="small-text">/{{ month }}</text>
-						<view class="descript">生如蝼蚁当立鸿鹄之志,命薄似纸应有不屈之心,乾坤未定,你我皆是黑马</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">(共{{ dayRecommendList.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 dayRecommendList"
-						: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 { getMonth, getDay } from '@/utils/date.js';
-import { mapState } from 'vuex';
-export default {
-	data() {
-		return {
-			dayRecommendList: [],
-			bgImg: '',
-			day: getDay(),
-			month: getMonth(),
-			CustomBar:this.CustomBar-15
-		};
-	},
-	computed: mapState({
-		playInfo: state => state.playInfo
-	}),
-	created() {
-		this.getDayRecommendData();
-	},
-	methods: {
-		//获取猜你喜欢歌曲
-		async getDayRecommendData() {
-			const { data } = await this.$api.getDayRecommendList();
-			this.dayRecommendList = data.dailySongs || [];
-			if (data.dailySongs.length > 0) {
-				this.bgImg = this.dayRecommendList[0].al.picUrl + 'param?300y300';
-			}
-		},
-
-		//点击播放
-		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.dayRecommendList.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>
-.day-recommend-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;
-			}
-			.day-info {
-				margin-bottom: 12rpx;
-				color: #fff;
-				max-width: calc(100% - 175px);
-				.small-text {
-					font-size: 42rpx;
-				}
-				.bold-text {
-					font-size: 60rpx;
-					font-weight: bold;
-					margin-right: 3px;
-				}
-				.descript {
-					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;
-				position: relative;
-				&: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;
-					.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>

+ 33 - 5
sleep/pages/home/index.vue

@@ -315,6 +315,8 @@ import  { API } from '@/utils/request'
 
 import Storage from '@/utils/storage'
 import * as API_deviceMemberBind  from '@/api/device_member_bind'
+import { addByShare } from '@/api/vitalSignsLook'
+
 export default {
   components: {
     mpvueEcharts
@@ -384,6 +386,8 @@ export default {
               console.log('我要登录过...')
               _this.API_getDeviceList()
             }
+            // 解析二维码的内容
+            _this.handleQRCodeMsg()
           }, 1500)
         } else {
           this.checkHasLogin()
@@ -394,6 +398,8 @@ export default {
               _this.memberId = memberId
               clearInterval(initTimer)
               _this.API_getDeviceList()
+              // 解析二维码的内容
+              _this.handleQRCodeMsg()
             }
           }, 500)
         }
@@ -446,11 +452,6 @@ export default {
   },
 
 	methods: {
-		handleShareClick() {
-			uni.navigateTo({
-				url: '/pages/shareUser/shareUser'
-			})
-		},
     API_getDeviceList() {
       const _this = this
       API_deviceMemberBind.getDeviceByDtypeAndMemberId({dtype: '睡眠床垫', memberId: this.memberId}).then(res => {
@@ -890,6 +891,33 @@ export default {
       this.homeFrom.nowDevice = e.detail.value
       Storage.setItem("nowChangeDevice",  e.detail.value)
 
+    },
+    handleShareClick() {
+      uni.navigateTo({
+        url: '/pages/shareUser/shareUser'
+      })
+    },
+    async handleQRCodeMsg() {
+      const codeMsg = Storage.getItem('codeMsg')
+      if (codeMsg) {
+        Storage.removeItem('codeMsg')
+        if (codeMsg.mac) {
+          this.bindSn = codeMsg.mac
+          this.bindDevice()
+        }
+        switch (codeMsg.type) {
+          case 'VITAL_SHARE': // 亲友体征绑定
+            let memberId = Number(codeMsg.no)
+            const data = {
+              memberId: memberId,
+              type: codeMsg.lx
+            }
+            await addByShare(data)
+            break
+          default:
+            break
+        }
+      }
     }
 	}
 };

+ 9 - 13
sleep/pages/index/index.vue

@@ -33,8 +33,11 @@
 
     <view class="main-container">
       <view class="music-wrapper" v-if="healthAdvertList.length > 0">
-<!--        <box-title title="睡眠小知识" buttonName="更多" iconName="kaishi2" @handlePlay="handlePlay('dayRecommendList')"></box-title>-->
-        <box-title title="睡眠小知识"></box-title>
+        <view class="cu-bar solid-bottom margin-top">
+          <view class="action text-white">
+            睡眠小知识
+          </view>
+        </view>
 
         <view class="flex-col justify-start knowledge-list">
           <view v-for="(item, index) in healthAdvertList" :key="index" class="flex-row items-center space-x-14 knowledge-item" @click="goToDetails(item.id,item.html_url)">
@@ -74,7 +77,6 @@ import Storage from '@/utils/storage'
 // import musicList from './components/musicList.vue';
 // import { getImage, getName } from '@/utils/index.js';
 import * as API_doctorAdvert from '@/api/doctor_advert'
-import {getDoctorAdvertList} from "../../api/doctor_advert";
 export default {
   // components: {
   //   songList,
@@ -86,9 +88,9 @@ export default {
 		};
 	},
 	onLoad() {
-	  if (Storage.getItem('uid') !== 50289) {
+	  // if (Storage.getItem('uid') !== 50289) {
       this.getCareHealthAdvert()
-    }
+    // }
 	},
 	onPullDownRefresh() {
 		// this.getData();
@@ -111,11 +113,11 @@ export default {
       console.log('url====', url)
       if (url === null || url === '') {
         uni.navigateTo({
-          url: '/pages/healthAdvert/careHealthAdvertLook?id=' + id
+          url: '/pages/articles/healthAdvert/careHealthAdvertLook?id=' + id
         })
       } else {
         uni.navigateTo({
-          url: '/pages/healthAdvert/webview?url=' + url
+          url: '/pages/articles/healthAdvert/webview?url=' + url
         })
       }
 
@@ -140,12 +142,6 @@ export default {
 		// 	});
 		// },
 
-
-		toSearch() {
-			uni.navigateTo({
-				url: '../search/index'
-			});
-		}
 	}
 };
 </script>

+ 25 - 25
sleep/pages/monthReport/monthReport.vue

@@ -1,76 +1,76 @@
 <template>
 	<view class="report-container">
 		<cu-custom isBack="true" bgColor="#000000"><view slot="content" style="color: #FFFFFF">月报告</view></cu-custom>
-		
+
 		<view class="month-report-header self-center items-center">
 			<view class="flex-row header-date self-center">
 				<image class="image_1"
-					src="../../static/report/reportIconLeft.png"
+					src="../../../static/report/reportIconLeft.png"
 				/>
 				<text @click="showPop" class="text_1">{{defaultData.startTime}}</text>
 				<image class="image_2"
-					src="../../static/report/reportIconRight.png"
+					src="../../../static/report/reportIconRight.png"
 				/>
 			</view>
 		</view>
-		
+
 		<lingfeng-timepicker ref="timePop" type="year-month" :defaultData="defaultData" :minDate="minDate" :maxDate="maxDate"  @change="timeChange"></lingfeng-timepicker>
-		
+
 		<view class="month-report flex-col">
 			<view class="block-month-report flex-col">
 				<view class="header-block-report">
 					<uni-section title="睡眠习惯" type="line"></uni-section>
 				</view>
 				<view class="chart-block-report">
-					
+
 				</view>
 			</view>
 		</view>
-		
+
 		<view class="month-report flex-col">
 			<view class="block-month-report flex-col">
 				<view class="header-block-report">
 					<uni-section title="睡眠效率" type="line"></uni-section>
 				</view>
 				<view class="chart-block-report">
-					
+
 				</view>
 			</view>
 		</view>
-		
+
 		<view class="month-report flex-col">
 			<view class="block-month-report flex-col">
 				<view class="header-block-report">
 					<uni-section title="安稳度" type="line"></uni-section>
 				</view>
 				<view class="chart-block-report">
-					
+
 				</view>
 			</view>
 		</view>
-		
+
 		<view class="month-report flex-col">
 			<view class="block-month-report flex-col">
 				<view class="header-block-report">
 					<uni-section title="心脏系统" type="line"></uni-section>
 				</view>
 				<view class="chart-block-report">
-					
+
 				</view>
 			</view>
 		</view>
-		
+
 		<view class="month-report flex-col">
 			<view class="block-month-report flex-col">
 				<view class="header-block-report">
 					<uni-section title="呼吸系统" type="line"></uni-section>
 				</view>
 				<view class="chart-block-report">
-					
+
 				</view>
 			</view>
 		</view>
-		
+
 	</view>
 </template>
 
@@ -93,14 +93,14 @@
 			};
 		},
 		onReady: function() {
-			
+
 		},
 		methods: {
 			showPop(){
 			    this.$refs.timePop.show();
-			},    
+			},
 			timeChange(val){
-			    console.log(val); 
+			    console.log(val);
 				this.defaultData.startTime = val
 			}
 		}
@@ -111,22 +111,22 @@
 .report-container {
 	background-color: #000000;
 	padding-bottom: 2rem;
-	
+
 	.month-report {
 		margin-top: 1rem;
-		
+
 		.block-month-report {
 			margin: 0 1.25rem;
 			opacity: 0.8;
 			background-image: linear-gradient(180deg, #341a4b 0%, #167df2 100%);
 			border-radius: 0.5rem;
 			height: 7.81rem;
-			
+
 			.header-block-report {
-				
+
 			}
 			.chart-block-report {
-				
+
 			}
 		}
 	}
@@ -141,7 +141,7 @@
 		margin: 0 auto;
 		text-align: center;
 		margin-top: 1rem;
-		
+
 		.header-date {
 			// display: inline-block;
 		}
@@ -158,5 +158,5 @@
 			height: 0.94rem;
 		}
 	}
-}	
+}
 </style>

+ 50 - 0
sleep/pages/log/packageBuy/index.js

@@ -0,0 +1,50 @@
+import request, { Method } from '@/utils/request'
+
+/**
+ * 获取语音短信列表
+ * @param params
+ * @returns {Promise<any>}
+ */
+export function getPage(params) {
+    return request({
+        url: 'vital_signs/package_buy_log/page',
+        config: {method: Method.POST, needToken: true, loading: true},
+        params
+    })
+}
+
+/**
+ * 新增
+ * @param params
+ * @returns {Promise<any>}
+ */
+export function addLog(params) {
+    return request({
+        url: 'vital_signs/package_buy_log',
+        config: {method: Method.POST, needToken: true, loading: false},
+        params
+    })
+}
+
+/**
+ * 查询领取的免费套餐列表
+ * @param unionId
+ */
+export function getFreeLogList(unionId) {
+    return request({
+        url: `vital_signs/package_buy_log/get_free_log_list/${unionId}`,
+        config: {method: Method.GET, needToken: true, loading: true}
+    })
+}
+
+/**
+ * 领取免费的短信语音套餐
+ * @param params
+ */
+export function receiveFreePackage(params) {
+    return request({
+        url: `vital_signs/package_buy_log/receive_free_package`,
+        config: {method: Method.POST, needToken: true, loading: true},
+        params
+    })
+}

+ 202 - 0
sleep/pages/log/packageBuy/index.vue

@@ -0,0 +1,202 @@
+<template>
+  <view class="flex-col justify-start page">
+
+    <cu-custom isBack="true" bgColor="#fff">
+      <view slot="content" style="color: #FFFFFF">购买记录</view>
+    </cu-custom>
+    <view style="height: 100%">
+      <view v-if="logList.length > 0" class="flex-col justify-start section" :style="logList.length < 4 ?'height:100%':''">
+
+        <view class="flex-col section_2 space-y-32">
+          <view class="flex-col" v-for="(item, index) in logList" :key="index">
+            <text class="self-start font_1 text_2">{{ item.named }}</text>
+            <view class="flex-col section_6 view space-y-10">
+              <view class="flex-col">
+                <view class="flex-row justify-between items-center list-item">
+                  <text class="font_2 text_3">短信数量</text>
+                  <view class="flex-row items-center group_3 space-x-6">
+                    <view class="uni-input">
+                      <text class="font_3">{{ item.sms_qty }}</text>
+                      <text class="font_4">条</text>
+                    </view>
+                  </view>
+                </view>
+                <view class="flex-row justify-between items-center list-item">
+                  <text class="font_2 text_3">语音数量</text>
+                  <view class="flex-row items-center group_3 space-x-6">
+                    <view class="uni-input">
+                      <text class="font_3">{{ item.voice_qty }}</text>
+                      <text class="font_4">条</text>
+                    </view>
+                  </view>
+                </view>
+                <view class="flex-row justify-between items-center list-item">
+                  <text class="font_2 text_3">{{ formatTime(item.buying_time) }}</text>
+                  <view class="flex-row items-center group_3 space-x-6">
+                    <text v-if="item.bool_free" class="text-white">免费</text>
+                    <text v-else class="text-red">¥{{ item.package_price }}</text>
+                  </view>
+                </view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+
+      <view v-else class="noData">
+        <view class="uni-padding-wrap">
+          <text class="word-btn-white text-white">暂无记录</text>
+          <br/>
+        </view>
+      </view>
+    </view>
+
+
+  </view>
+</template>
+
+<script>
+import * as Foundation from '@/ui-utils/Foundation'
+import * as API_LOG from './index.js'
+export default {
+  name: "warnLog",
+  data() {
+    return {
+      logList: [],
+      unionId: null,
+      finishedLoad: false,
+      params: {
+        page_no: 1,
+        page_size: 20,
+        sort: 'pbl.buying_time',
+        dir: 'desc'
+      }
+    };
+  },
+  onLoad(options) {
+    const { unionId } = options
+    this.unionId = unionId
+    if (unionId) {
+      this.getList()
+    }
+
+  },
+  onReachBottom() {
+    if (!this.finishedLoad) {
+      this.params.page_no += 1
+      this.getList()
+    }
+  },
+  methods: {
+    getList() {
+      let _this = this
+      this.params.fixedCondition = " pbl.package_id = svp.id and pbl.pay_status = 1 and pbl.member_union_id='" + this.unionId +"'"
+      API_LOG.getPage(this.params).then(res => {
+        if (res.data.length > 0) {
+          _this.logList.push(...res.data)
+        } else {
+          _this.finishedLoad = true
+        }
+      })
+    },
+    formatTime(value) {
+      return Foundation.unixToDate(value, "yy-MM-dd hh:mm")
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.page {
+  background-image: url('http://wdklmall.oss-cn-shenzhen.aliyuncs.com/mallgoods/goods/3C62AD507C8345D49AEB2AAD8F7584BB.png');
+  background-size: cover ;
+  background-attachment: fixed ;
+  background-position: center center;
+  width: 100%;
+  overflow-y: auto;
+  overflow-x: hidden;
+  height: 100%;
+  .section {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+    background-image: linear-gradient(180deg, rgba(86, 86, 217, 0.95) 0%, #1dbff79c 100%);
+
+    padding-bottom: 50upx;
+    .section_2 {
+      padding-bottom: 0.25rem;
+      backdrop-filter: blur(0.19rem);
+      .font_1 {
+        font-size: 1.13rem;
+        font-family: PingFangSC;
+        line-height: 1.03rem;
+        color: #ffffff;
+      }
+      .text_2 {
+        margin-left: 1.25rem;
+        margin-top: 1.38rem;
+      }
+
+      .section_6 {
+        padding: 0.94rem 0.63rem 0.13rem;
+        background-color: #ffffff33;
+        border-radius: 1rem;
+      }
+      .view {
+        margin: 0.45rem 1.25rem 0;
+      }
+      .space-y-10 {
+        & > view:not(:first-child),
+        & > text:not(:first-child),
+        & > image:not(:first-child) {
+          margin-top: 0.63rem;
+        }
+      }
+      .font_2 {
+        font-size: 0.88rem;
+        line-height: 0.81rem;
+        color: #ffffff;
+      }
+      .text_3 {
+        opacity: 0.8;
+      }
+      .font_3 {
+        font-size: 1.13rem;
+        line-height: 0.81rem;
+        color: #ffffff;
+      }
+      .font_4 {
+        font-size: 0.75rem;
+        line-height: 0.69rem;
+        color: #ffffff;
+      }
+      .space-x-6 {
+        & > view:not(:first-child),
+        & > text:not(:first-child),
+        & > image:not(:first-child) {
+          margin-left: 0.38rem;
+        }
+      }
+      .list-item {
+        padding: 0.45rem 0;
+        border-bottom: solid 0.063rem #ffffff1a;
+        .group_3 {
+          margin-right: 0.19rem;
+        }
+
+      }
+    }
+    .space-y-32 {
+      & > view:not(:first-child),
+      & > text:not(:first-child),
+      & > image:not(:first-child) {
+        margin-top: 1.5rem;
+      }
+    }
+  }
+}
+.noData {
+  height: 100%;
+  background-image: linear-gradient(180deg, rgba(86, 86, 217, 0.95) 0%, #1dbff79c 100%);
+}
+
+</style>

+ 59 - 0
sleep/pages/log/packageBuy/payResult.vue

@@ -0,0 +1,59 @@
+<template>
+  <view style="background-color: white; height: 100%">
+    <cu-custom isBack="true" bgColor="#FFFFFF">
+      <view slot="content" style="color: #FFFFFF">订单详情</view>
+    </cu-custom>
+    <view class="solids-bottom padding-xs flex align-center myClass">
+      <view class="flex-sub text-center">
+        <view class="text-xsl padding">
+          <text :class="result.is_success ? 'cuIcon-roundcheckfill text-green' : 'cuIcon-roundclosefill text-red'"></text>
+        </view>
+        <view class="text-xl padding">
+          <text v-if="result.is_success" class="text-black text-bold">您的订单已提交成功!</text>
+          <text v-else>{{ result.error_message }}</text>
+        </view>
+        <view class="padding">
+          <button @click="bindNavigateTo" class="cu-btn bg-green margin-tb-sm lg">确定</button>
+        </view>
+      </view>
+    </view>
+
+    <view class="cu-load load-modal" v-if="loadModal">
+      <view class="cuIcon-emojifill text-orange"></view>
+      <view class="gray-text">正在加载...</view>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: "payResult",
+  data() {
+    return {
+      result: {},
+      loadModal: false
+    }
+  },
+  onLoad(option) {
+    const { result } = option
+    this.result = JSON.parse(result)
+    console.log('result===', this.result)
+  },
+  methods: {
+    bindNavigateTo() {
+      this.loadModal = true
+      setTimeout(() => {
+        uni.switchTab({
+          url: '/pages/my/index',
+        });
+      }, 2000);
+    }
+  }
+}
+</script>
+
+<style scoped>
+.myClass {
+  margin-top: 200rpx;
+}
+</style>

+ 25 - 1
sleep/pages/log/smsVoice/index.js

@@ -1,7 +1,7 @@
 import request, { Method } from '@/utils/request'
 
 /**
- * 获取语音短信列表
+ * 获取语音短信记录列表
  * @param params
  * @returns {Promise<any>}
  */
@@ -12,3 +12,27 @@ export function getPage(params) {
         params
     })
 }
+
+/**
+ * 获取语音短信套餐列表
+ * @param params
+ * @returns {Promise<any>}
+ */
+export function getPackagePage(params) {
+    return request({
+        url: 'vital_signs/sms_voice_package/page',
+        config: {method: Method.POST, needToken: true, loading: true},
+        params
+    })
+}
+
+/**
+ * 获取商户收钱吧参数
+ * @param shop_id
+ */
+export function getShouqianbaPayByShopId(shop_id) {
+    return request({
+        url: `buyer/shopshouqianbaPay/get_shouqianba_params/${shop_id}`,
+        config: {method: Method.GET, needToken: true}
+    })
+}

+ 2 - 2
sleep/pages/log/smsVoice/index.vue

@@ -8,7 +8,7 @@
       <view class="cu-card dynamic">
         <view class="cu-item shadow">
           <view class="cu-list menu-avatar comment">
-            <view v-for="(item, index) in logList" :key="index" class="cu-item myCard">
+            <view v-for="(item, index) in logList" :key="index" class="cu-item myCard" style="padding: 30rpx 30rpx 30rpx 30rpx">
               <view class="content">
                 <view class="text-white">{{ item.to_mobile }}</view>
                 <view class="text-white text-content text-df">
@@ -62,7 +62,7 @@ export default {
     const { unionId } = options
     this.unionId = unionId
     if (unionId) {
-      // this.getList()
+      this.getList()
     }
 
   },

+ 338 - 0
sleep/pages/log/smsVoice/package.vue

@@ -0,0 +1,338 @@
+<template>
+  <view class="flex-col justify-start page">
+
+    <cu-custom isBack="true" bgColor="#fff">
+      <view slot="content" style="color: #FFFFFF">购买套餐</view>
+    </cu-custom>
+    <view style="height: 100%">
+      <view v-if="logList.length > 0" :style="logList.length < 4 ?'height:100%':''" class="flex-col justify-start section">
+        <view class="flex-col section_2 space-y-32">
+          <view class="flex-col" v-for="(item, index) in logList" :key="index">
+            <text class="self-start font_1 text_2">{{ item.named }}</text>
+            <view class="flex-col section_6 view space-y-10">
+              <view class="flex-col">
+                <view class="flex-row justify-between items-center list-item">
+                  <text class="font_2 text_3">短信数量</text>
+                  <view class="flex-row items-center group_3 space-x-6">
+                    <view class="uni-input">
+                      <text class="font_3">{{ item.sms_qty }}</text>
+                      <text class="font_4">条</text>
+                    </view>
+                  </view>
+                </view>
+                <view class="flex-row justify-between items-center list-item">
+                  <text class="font_2 text_3">语音数量</text>
+                  <view class="flex-row items-center group_3 space-x-6">
+                    <view class="uni-input">
+                      <text class="font_3">{{ item.voice_qty }}</text>
+                      <text class="font_4">条</text>
+                    </view>
+                  </view>
+                </view>
+                <view class="flex-row justify-between items-center list-item">
+                  <text class="font_2 text_3"></text>
+                  <view class="flex-row items-center group_3 space-x-6">
+                    <button v-if="item.package_price === -1" disabled class="cu-btn round bg-gray">已领取</button>
+                    <button v-else-if="item.package_price === 0" :disabled="isOperate" class="cu-btn round bg-olive" @click="freeCollection(item.id, index)">免费领取</button>
+                    <button v-else class="cu-btn round bg-mauve" :disabled="isOperate" @click="openModel(item, index)">¥{{ item.package_price }} 购买</button>
+                  </view>
+                </view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+
+      <view v-else class="noData">
+        <view class="uni-padding-wrap">
+          <text class="word-btn-white text-white">暂无套餐</text>
+          <br/>
+        </view>
+      </view>
+    </view>
+
+
+    <view class="cu-modal" :class="modalName===true?'show':''">
+      <view class="cu-dialog">
+        <view class="cu-bar bg-white justify-end">
+          <view class="content" style="color: black">提示</view>
+          <view class="action" @tap="hideModal">
+            <text class="cuIcon-close text-red"></text>
+          </view>
+        </view>
+        <view class="padding-xl">
+          您正在购买<text class="text-green">{{ sqbModel.subject }}</text>,需支付<text class="text-red">¥{{ sqbModel.total_amount / 100 }}</text>元
+        </view>
+        <view class="cu-bar bg-white justify-end">
+          <view class="action">
+            <button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
+              <!--    收钱吧-->
+              <sqb-pay :return_url="sqbModel.return_url" :total_amount="sqbModel.total_amount" :terminal_sn="sqbModel.terminal_sn"
+                       :client_sn="sqbModel.client_sn" @navigateTo="bindNavigateTo" :subject="sqbModel.subject" :notify_url="sqbModel.notify_url" :sign="signStr">
+                <view class="cu-btn bg-green margin-left text-white" @click="addLog">确定购买</view>
+              </sqb-pay>
+              <!--    收钱吧-->
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+import md5 from 'js-md5'
+import * as API_PACKAGE from './index.js'
+import {addLog, getFreeLogList, receiveFreePackage} from "../packageBuy"
+export default {
+  name: "package",
+  data() {
+    return {
+      logList: [],
+      unionId: null,
+      finishedLoad: false,
+      params: {
+        page_no: 1,
+        page_size: 20,
+      },
+      isOperate: false,
+      modalName: false,
+      sqbModel: {
+        terminal_sn: null
+      },
+      terminalKey: null,
+      signStr: null,
+      packageId: null
+    };
+  },
+  onLoad(options) {
+    const { unionId } = options
+    this.unionId = unionId
+    if (unionId) {
+      this.API_getFreeLog()
+      this.API_getshouqianba()
+    }
+
+  },
+  onReachBottom() {
+    if (!this.finishedLoad) {
+      this.params.page_no += 1
+      this.getList()
+    }
+  },
+  methods: {
+    getList() {
+      let _this = this
+      this.params.fixedCondition = " package_status=1 "
+      API_PACKAGE.getPackagePage(this.params).then(res => {
+        if (res.data.length > 0) {
+          _this.freeList.forEach(item => {
+            res.data.forEach(t => {
+              if (item.package_id === t.id) {
+                t.package_price = -1
+              }
+            })
+          })
+          _this.logList.push(...res.data)
+        } else {
+          _this.finishedLoad = true
+        }
+      })
+    },
+    API_getFreeLog() {
+      const _this = this
+      getFreeLogList(this.unionId).then(res => {
+        _this.freeList = res
+        _this.getList()
+      })
+    },
+    freeCollection(id, index) {
+      this.isOperate = true
+      const _this = this
+      const data = {
+        pid: id,
+        memberUnionId: this.unionId
+      }
+      receiveFreePackage(data).then(res => {
+        _this.isOperate = false
+        uni.showToast({
+          title: res.message,
+          duration: 3000,
+          icon: 'none'
+        })
+        if (res.success) {
+          _this.$set(_this.logList[index], 'package_price', -1)
+        }
+      }).catch(err => {
+        _this.isOperate = false
+      })
+    },
+    openModel(item, index) {
+      this.packageId = item.id
+      this.sqbModel.subject = item.named
+      this.sqbModel.total_amount = parseInt(item.package_price * 100)
+      this.sqbModel.client_sn = Math.round(new Date()) + Math.random().toString(16).slice(2)
+      console.log('唯一号为', this.sqbModel.client_sn)
+      let sign = this.sortData(this.sqbModel) + '&key=' + this.terminalKey
+      console.log('未加密sign=', sign)
+      this.signStr = (md5(sign)).toUpperCase()
+      console.log('加密后sign=', this.signStr)
+      this.modalName = true
+    },
+    // 获取收钱吧参数
+    API_getshouqianba() {
+      const _this = this
+      // 写死维鼎康联官方旗舰店id
+      API_PACKAGE.getShouqianbaPayByShopId(20).then(res => {
+        console.log('获取商户收钱吧参数返回:', res)
+        if (res) {
+          this.sqbModel = {
+            // total_amount: parseInt(_this.order.need_pay_money * 100),
+            terminal_sn: res.terminal_sn,
+            // client_sn: _this.order_sn + '_' + (Date.parse(new Date()) / 1000),
+            notify_url: res.notify_url,
+            // subject: _this.skuList[0].name + "等",
+            return_url: '/pages/log/packageBuy/payResult'
+          }
+          _this.terminalKey = res.terminal_key
+          console.log(_this.sqbModel)
+
+        }
+      })
+    },
+    // 排序拼接
+    sortData (data) {
+      let objData = Object.keys(data);
+      objData.sort(function(first, two){
+        if(first < two) { return -1; }
+        if(first > two) { return 1; }
+        return 0;
+      })
+      let reqData = '';
+      objData.map(item => {
+        reqData += `&${item}=${data[item]}`;//按字符串格式化
+      });
+      reqData = reqData.slice(1);
+      return reqData;
+    },
+    hideModal() {
+      this.modalName = false
+    },
+    async addLog() {
+      const data = {
+        member_union_id: this.unionId,
+        package_id: this.packageId,
+        buying_sn: this.sqbModel.client_sn,
+        pay_status: 0,
+        bool_free: 0
+      }
+      addLog(data)
+    },
+    bindNavigateTo(e) {
+      console.log('e===', e)
+      console.log(e.detail.url)
+      uni.redirectTo({
+        url: e.detail.url,
+        fail(e) {
+          console.log(e)
+        },
+      });
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.page {
+  background-image: url('http://wdklmall.oss-cn-shenzhen.aliyuncs.com/mallgoods/goods/3C62AD507C8345D49AEB2AAD8F7584BB.png');
+  background-size: cover ;
+  background-attachment: fixed ;
+  background-position: center center;
+  width: 100%;
+  overflow-y: auto;
+  overflow-x: hidden;
+  height: 100%;
+
+  .section {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+    background-image: linear-gradient(180deg, rgba(86, 86, 217, 0.95) 0%, #1dbff79c 100%);
+    padding-bottom: 50upx;
+    //height: 100%;
+    .section_2 {
+      padding-bottom: 1.25rem;
+      backdrop-filter: blur(0.19rem);
+      .font_1 {
+        font-size: 1.13rem;
+        font-family: PingFangSC;
+        line-height: 1.03rem;
+        color: #ffffff;
+      }
+      .text_2 {
+        margin-left: 1.25rem;
+        margin-top: 1.38rem;
+      }
+
+      .section_6 {
+        padding: 0.94rem 0.63rem 0.13rem;
+        background-color: #ffffff33;
+        border-radius: 1rem;
+      }
+      .view {
+        margin: 0.45rem 1.25rem 0;
+      }
+      .space-y-10 {
+        & > view:not(:first-child),
+        & > text:not(:first-child),
+        & > image:not(:first-child) {
+          margin-top: 0.63rem;
+        }
+      }
+      .font_2 {
+        font-size: 0.88rem;
+        line-height: 0.81rem;
+        color: #ffffff;
+      }
+      .text_3 {
+        opacity: 0.8;
+      }
+      .font_3 {
+        font-size: 1.13rem;
+        line-height: 0.81rem;
+        color: #ffffff;
+      }
+      .font_4 {
+        font-size: 0.75rem;
+        line-height: 0.69rem;
+        color: #ffffff;
+      }
+      .space-x-6 {
+        & > view:not(:first-child),
+        & > text:not(:first-child),
+        & > image:not(:first-child) {
+          margin-left: 0.38rem;
+        }
+      }
+      .list-item {
+        padding: 0.45rem 0;
+        border-bottom: solid 0.063rem #ffffff1a;
+        .group_3 {
+          margin-right: 0.19rem;
+        }
+
+      }
+    }
+    .space-y-32 {
+      & > view:not(:first-child),
+      & > text:not(:first-child),
+      & > image:not(:first-child) {
+        margin-top: 1.5rem;
+      }
+    }
+  }
+}
+.noData {
+  height: 100%;
+  background-image: linear-gradient(180deg, rgba(86, 86, 217, 0.95) 0%, #1dbff79c 100%);
+}
+
+</style>

+ 28 - 28
sleep/pages/weekReport/weekReport.vue

@@ -1,87 +1,87 @@
 <template>
 	<view class="report-container">
 		<cu-custom isBack="true" bgColor="#000000"><view slot="content" style="color: #FFFFFF">周报告</view></cu-custom>
-		
+
 		<view class="month-report-header self-center items-center">
 			<view class="flex-row header-date self-center">
 				<image class="image_1"
-					src="../../static/report/reportIconLeft.png"
+					src="../../../static/report/reportIconLeft.png"
 				/>
 				<text @click="openWeek" class="text_1">2023年第22周(05-29至06-04)</text>
 				<image class="image_2"
-					src="../../static/report/reportIconRight.png"
+					src="../../../static/report/reportIconRight.png"
 				/>
 			</view>
 		</view>
-		
+
 		<uni-popup ref="popup" type="bottom">
 		    <!-- value值不传默认是当前周 -->
 		    <ccq-week-picker :value="value" @change="getWeeks"></ccq-week-picker>
 		</uni-popup>
-		
+
 		<view class="month-report flex-col">
 			<view class="block-month-report flex-col">
 				<view class="header-block-report">
 					<uni-section title="睡眠习惯" type="line"></uni-section>
 				</view>
 				<view class="chart-block-report">
-					
+
 				</view>
 			</view>
 		</view>
-		
+
 		<view class="month-report flex-col">
 			<view class="block-month-report flex-col">
 				<view class="header-block-report">
 					<uni-section title="睡眠效率" type="line"></uni-section>
 				</view>
 				<view class="chart-block-report">
-					
+
 				</view>
 			</view>
 		</view>
-		
+
 		<view class="month-report flex-col">
 			<view class="block-month-report flex-col">
 				<view class="header-block-report">
 					<uni-section title="安稳度" type="line"></uni-section>
 				</view>
 				<view class="chart-block-report">
-					
+
 				</view>
 			</view>
 		</view>
-		
+
 		<view class="month-report flex-col">
 			<view class="block-month-report flex-col">
 				<view class="header-block-report">
 					<uni-section title="心脏系统" type="line"></uni-section>
 				</view>
 				<view class="chart-block-report">
-					
+
 				</view>
 			</view>
 		</view>
-		
+
 		<view class="month-report flex-col">
 			<view class="block-month-report flex-col">
 				<view class="header-block-report">
 					<uni-section title="呼吸系统" type="line"></uni-section>
 				</view>
 				<view class="chart-block-report">
-					
+
 				</view>
 			</view>
 		</view>
-		
+
 	</view>
 </template>
 
 <script>
 	import dayjs from 'dayjs';
 	// 引入得到周信息函数
-	import weekjs from '../../components/ccq-week-picker/week.js';
-	
+	import weekjs from '@/components/ccq-week-picker/week.js';
+
 	export default {
 		data() {
 			return {
@@ -92,18 +92,18 @@
 			};
 		},
 		onReady: function() {
-			
+
 		},
 		methods: {
 			// 默认选择当前周
 			weekInit(){
 			    let y = dayjs().year();
 			    let m = dayjs().month();
-			    let res =  weekjs.getWeeksByMonth(y, m+1,this.today,1); 
+			    let res =  weekjs.getWeeksByMonth(y, m+1,this.today,1);
 			    this.setResultInfo(res);
 			},
 			getWeeks(res) {
-			    if (res) { 
+			    if (res) {
 			        this.setResultInfo(res);
 			    }
 			    this.$refs['popup'].close()
@@ -118,7 +118,7 @@
 			},
 			openWeek() {
 			    this.$refs['popup'].open()
-			}            
+			}
 		}
 	}
 </script>
@@ -127,22 +127,22 @@
 .report-container {
 	background-color: #000000;
 	padding-bottom: 2rem;
-	
+
 	.month-report {
 		margin-top: 1rem;
-		
+
 		.block-month-report {
 			margin: 0 1.25rem;
 			opacity: 0.8;
 			background-image: linear-gradient(180deg, #341a4b 0%, #167df2 100%);
 			border-radius: 0.5rem;
 			height: 7.81rem;
-			
+
 			.header-block-report {
-				
+
 			}
 			.chart-block-report {
-				
+
 			}
 		}
 	}
@@ -157,7 +157,7 @@
 		margin: 0 auto;
 		text-align: center;
 		margin-top: 1rem;
-		
+
 		.header-date {
 			// display: inline-block;
 		}
@@ -174,5 +174,5 @@
 			height: 0.94rem;
 		}
 	}
-}	
+}
 </style>

+ 46 - 98
sleep/pages/my/index.vue

@@ -19,16 +19,14 @@
                   <view class="flex-row space-x-8">
                     <text class="text_2">{{ userInfo.nickname }}</text>
                     <view class="flex-row shrink-0 section_3 space-x-4">
-                      <image class="shrink-0 image_7" src="../../static/mine/myIconEdit.png"/>
-                      <text class="font_2" @click="handleUpdateName">编辑</text>
+                      <text class="font_2" @click="handleUpdateName"><text class="cuIcon-write"></text>编辑</text>
                     </view>
                   </view>
                   <view class="flex-row items-center space-x-6">
-                    <image class="image_8" src="../../static/mine/myIconPhone.png"/>
-                    <text class="font_3 text_3">{{ userInfo.mobile }}</text>
+                    <text class="font_3 text_3"><text class="cuIcon-phone margin-right-sm"></text>{{ userInfo.mobile }}</text>
                   </view>
                 </view>
-                <image @click="getPage('/pages/log/warn/index')" class="shrink-0 self-start image_6" src="../../static/mine/myIconAlert.png"/>
+                <image @click="goPage('/pages/log/warn/index')" class="shrink-0 self-start image_6" src="../../static/mine/myIconAlert.png"/>
               </view>
               <view class="flex-row justify-between relative group_4">
                 <view class="flex-col justify-start items-center self-center text-wrapper">
@@ -70,26 +68,18 @@
             <view class="flex-row justify-between">
               <text class="font_1 text_5 pos_2">我的设备</text>
               <view class="flex-row items-center section_4 pos_3">
-                <text class="font_5" @click="addBindDevice">添加设备</text>
-                <image
-                    class="shrink-0 image_7"
-                    src="../../static/mine/myIconAdd.png"
-                />
+                <text class="font_5" @click="addBindDevice">添加设备<text class="cuIcon-add"></text></text>
               </view>
             </view>
 			<!-- device = 0 -->
-			<view v-if="deviceList.length == 0">
-				<view class="flex-row justify-center items-center home_add_devive space-x-10" @click="addBindDevice">
-				  <image
-				    class="image_4"
-					src="../../static/home/homeIconAdd.png"
-				  />
-				  <view class="text_5" @click="addBindDevice">添加设备</view>
-				</view>
-			</view>
-
-            <view v-if="deviceList.length > 0" v-for="(item, index) in deviceList" :key="index"
-                  class="flex-col my_device_default space-y-6">
+            <view v-if="deviceList.length === 0">
+              <view class="flex-row justify-center items-center home_add_devive space-x-10" @click="addBindDevice">
+                <image class="image_4" src="../../static/home/homeIconAdd.png"/>
+                <view class="text_5" @click="addBindDevice">添加设备</view>
+              </view>
+            </view>
+
+            <view v-if="deviceList.length > 0" v-for="(item, index) in deviceList" :key="index" class="flex-col my_device_default space-y-6">
               <view class="flex-row justify-between items-end">
                 <view class="flex-col space-y-16">
                   <view class="flex-row space-x-8">
@@ -110,21 +100,10 @@
               <text class="self-end font_9">{{ item.score_desc }}</text>
               <view class="flex-row items-center space-x-20">
                 <view class="flex-row items-center flex-auto">
-                  <!--		              <image-->
-                  <!--		                class="shrink-0 image_10"-->
-                  <!--		                src="../../static/mine/myIconDefault.png"-->
-                  <!--		              />-->
-                  <!--		              <text class="font_5 text_13">设为默认</text>-->
-                  <image
-                      class="shrink-0 image_10 image_11"
-                      src="../../static/mine/myIconLink.png"
-                  />
-                  <text @click="handleShareData" class="font_5 text_14">远程关爱</text>
-                  <image
-                      class="shrink-0 image_10 image_12"
-                      src="../../static/mine/myIconSetting.png"
-                  />
-                  <text class="font_5 text_15" @click="handleAlertSetting(item.imei)">报警设置</text>
+                  <image class="shrink-0 image_10 image_12" src="../../static/mine/myIconLink.png"/>
+                  <text @click="handleShareData" class="font_5 text_13">远程关爱</text>
+                  <image class="shrink-0 image_10 image_12" src="../../static/mine/myIconSetting.png"/>
+                  <text class="font_5 text_13" @click="handleAlertSetting(item.imei)">报警设置</text>
                 </view>
                 <text class="font_10 text_16">{{ item.report_time }}</text>
               </view>
@@ -134,42 +113,30 @@
           <view class="flex-col space-y-8">
             <view class="flex-row justify-between">
               <text class="font_1">语音短信</text>
-              <view class="flex-row items-center section_7">
-                <text class="font_5">购买套餐</text>
-                <image
-                  class="shrink-0 image_7"
-                  src="../../static/mine/myIconBuy.png"
-                />
+              <view class="flex-row items-center section_7" @click="goPage('/pages/log/smsVoice/package')">
+                <text class="font_5">购买套餐<text class="cuIcon-goodsnew"></text></text>
               </view>
             </view>
             <view class="flex-col space-y-30">
 
               <view class="flex-row justify-between my_record">
                 <view class="flex-col self-center space-y-14">
-                  <view class="flex-row items-center space-x-6">
-                    <image
-                      class="shrink-0 image_10"
-                      src="../../static/mine/myIconMoney.png"
-                    />
-                    <text class="font_11">消费记录</text>
+                  <view class="flex-row items-center space-x-6" @click="goPage('/pages/log/packageBuy/index')">
+                    <text class="font_11"><text class="cuIcon-rechargefill text-orange margin-right-sm"></text>购买记录</text>
                   </view>
-                  <view class="flex-row items-center space-x-6" @click="getPage('/pages/log/smsVoice/index')">
-                    <image
-                      class="shrink-0 image_10"
-                      src="../../static/mine/myIconPromt.png"
-                    />
-                    <text class="font_11">发送记录</text>
+                  <view class="flex-row items-center space-x-6" @click="goPage('/pages/log/smsVoice/index')">
+                    <text class="font_11"><text class="cuIcon-noticefill text-cyan margin-right-sm"></text>发送记录</text>
                   </view>
                 </view>
                 <view class="self-center section_9"></view>
-                <view class="flex-col self-center space-y-6">
+                <view class="flex-col self-center space-y-6" @click="goPage('/pages/log/packageBuy/index')">
                   <view class="flex-row space-x-4">
                     <text class="self-center font_12 text_25">{{ smsCount }}</text>
                     <text class="self-start font_11 text_26">次</text>
                   </view>
                   <text class="font_13">剩余短信</text>
                 </view>
-                <view class="flex-col self-start group_12 space-y-6">
+                <view class="flex-col self-start group_12 space-y-6" @click="goPage('/pages/log/packageBuy/index')">
                   <view class="flex-row group_13">
                     <text class="self-center font_12">{{ voiceCount }}</text>
                     <text class="self-start font_11 text_27">次</text>
@@ -186,41 +153,31 @@
                   <!--		                />-->
                   <!--		                <text class="font_13 text_28">WIFI连接</text>-->
                   <!--		              </view>-->
-                  <view class="flex-col items-center relative grid-item space-y-8">
-                    <image
-                        class="image_17"
-                        src="../../static/mine/myAnnouncement.png"
-                    />
+                  <view class="flex-col items-center relative grid-item space-y-8" @click="goLookArticles('用户协议','MATTRESS_USER_AGREEMENT')">
+                    <image class="image_17" src="../../static/mine/myIconPromt.png"/>
+                    <text class="font_13 text_28">播报设备</text>
+                  </view>
+                  <view class="flex-col items-center relative grid-item space-y-8" @click="goLookArticles('免责声明','MATTRESS_DISCLAIMERS')">
+                    <image class="image_17" src="../../static/mine/myAnnouncement.png"/>
                     <text class="font_13 text_28">免责声明</text>
                   </view>
-                  <view class="flex-col items-center relative grid-item space-y-8">
-                    <image
-                        class="image_17"
-                        src="../../static/mine/myProduct.png"
-                    />
+                  <view class="flex-col items-center relative grid-item space-y-8" @click="goLookArticles('产品介绍', 'MATTRESS_PRODUCT_INTRODUCTION')">
+                    <image class="image_17" src="../../static/mine/myProduct.png"/>
                     <text class="font_13 text_28">产品介绍</text>
                   </view>
-                  <view class="flex-col items-center relative grid-item space-y-8">
-                    <image
-                        class="image_17"
-                        src="../../static/mine/myHelp.png"
-                    />
+                  <view class="flex-col items-center relative grid-item space-y-8" @click="goLookArticles('使用帮助', 'MATTRESS_HELP')">
+                    <image class="image_17" src="../../static/mine/myHelp.png"/>
                     <text class="font_13 text_28">使用帮助</text>
                   </view>
-                  <view class="flex-col items-center relative grid-item space-y-8">
-                    <image
-                        class="image_17"
-                        src="../../static/mine/mySecret.png"
-                    />
+                  <view class="flex-col items-center relative grid-item space-y-8" @click="goLookArticles('隐私政策', 'MATTRESS_PRIVACY_POLICY')">
+                    <image class="image_17" src="../../static/mine/mySecret.png"/>
                     <text class="font_13 text_28">隐私政策</text>
                   </view>
-                  <view class="flex-col items-center relative grid-item space-y-8">
-                    <image
-                        class="image_17"
-                        src="../../static/mine/myUserAgree.png"
-                    />
+                  <view class="flex-col items-center relative grid-item space-y-8" @click="goLookArticles('用户协议','MATTRESS_USER_AGREEMENT')">
+                    <image class="image_17" src="../../static/mine/myUserAgree.png"/>
                     <text class="font_13 text_28">用户协议</text>
                   </view>
+
                   <!--		              <view class="flex-col items-center relative grid-item space-y-8">-->
                   <!--		                <image-->
                   <!--		                  class="image_17"-->
@@ -351,6 +308,7 @@ export default {
         console.log('this.deviceList===', this.deviceList)
         this.API_getNewReport()
       }
+      this.getSmsVoiceQty()
     }
   },
   // mounted() {
@@ -632,13 +590,17 @@ export default {
       }
       this.API_updateUser(params)
     },
-    getPage(path) {
+    goPage(path) {
       if (this.unionId) {
         uni.navigateTo({
           url: path + '?unionId=' + this.unionId
         })
       }
-
+    },
+    goLookArticles(name, position) {
+      uni.navigateTo({
+        url: '/pages/articles/index?position=' + position + '&name=' + name
+      })
     },
   ...mapActions({
       logout: 'logoutAction',
@@ -1225,23 +1187,9 @@ export default {
       .text_13 {
         margin-left: 0.13rem;
       }
-
-      .image_11 {
-        margin-left: 0.88rem;
-      }
-
-      .text_14 {
-        margin-left: 0.13rem;
-      }
-
       .image_12 {
         margin-left: 0.88rem;
       }
-
-      .text_15 {
-        margin-left: 0.13rem;
-      }
-
       .text_16 {
         margin-right: 0.13rem;
       }

+ 2 - 2
sleep/pages/report/report.vue

@@ -601,12 +601,12 @@
     methods: {
 		handleMonthClick() {
 			uni.navigateTo({
-				url: '/pages/monthReport/monthReport'
+				url: '/pages/log/monthReport/index'
 			})
 		},
 		handleWeekClick() {
 			uni.navigateTo({
-				url: '/pages/weekReport/weekReport'
+				url: '/pages/log/weekReport/index'
 			})
 		},
       // 获取睡眠报告

+ 139 - 136
sleep/pages/shareUser/shareUser.vue

@@ -1,38 +1,82 @@
 <template>
 	<view class="flex-col justify-start page">
 	  <cu-custom isBack="true" bgColor="#000000"><view slot="content" style="color: #FFFFFF">UU睡眠</view></cu-custom>
+    <scroll-view scroll-x class="nav" style="background-color: #1e1ef7e3">
+      <view class="flex text-center text-white">
+        <view class="cu-item flex-sub" :class="2===tabCur?'text-orange cur':''" @tap="tabSelect(2)" data-id="2">推送亲友列表</view>
+        <view class="cu-item flex-sub" :class="1===tabCur?'text-orange cur':''" @tap="tabSelect(1)" data-id="1">可看亲友列表</view>
+      </view>
+    </scroll-view>
+
+    <view style="height: 100%">
+      <view v-if="2===tabCur" style="height: 100%;background-image: linear-gradient(180deg, rgba(86, 86, 217, 0.95) 0%, #1dbff79c 100%);" class="flex-col justify-start section">
+        <view class="flex-col section_2 space-y-421">
+          <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" v-for="(item, index) in tableData" :key="index">
+                <view class="flex-row">
+                  <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">{{ item.nickname }}</text>
+                    <text class="text_5">{{ item.mobile }}</text>
+                    <text class="text_6 text_7">{{ formatTime(item.create_time) }}</text>
+                    <view style="margin-left: -90upx" class="text-white">
+                      <switch :checked="item.bool_sms" color="#1E09DE" style="transform:scale(0.7)" @change="changeBoosSms" :data-id="item.id" />
+                      <text class="font_2">短信提醒</text>
+                      <switch :checked="item.bool_voice" color="#1E09DE" style="transform:scale(0.7)" @change="changeBoosVoice" :data-id="item.id"/>
+                      <text class="font_2">电话语音</text>
+                    </view>
+                  </view>
+
+                </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" @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>
+      </view>
+
+      <view v-else :style="tableData.length === 0 ? 'height:100%':''" class="flex-col justify-start section">
+        <view class="flex-col section_2 space-y-421">
+          <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" v-for="(item, index) in tableData" :key="index">
+                <view class="flex-row">
+                  <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">{{ 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" @click="deleteById(item.id)"><text class="text_4">查看</text></view>-->
+              </view>
+
+              <button style="width: 100%;margin-top: 10upx" class="flex-row justify-center items-center section_7 space-x-10" open-type="share" @click="clickTz(1)">
+                <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>
+              </button>
+            </view>
+          </view>
+        </view>
+      </view>
+
+    </view>
+
 
-	  <view class="flex-col justify-start section">
-	    <view class="flex-col section_2 space-y-421">
-	      <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" v-for="(item, index) in tableData" :key="index">
-	            <view class="flex-row">
-	              <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">{{ 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" @click="deleteById(item.id)"><text class="text_4">删除</text></view>
-	          </view>
 
-	          <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" @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">
@@ -47,7 +91,8 @@
         <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>
+            <button class="cu-btn bg-blue margin-left" @tap="addLook">申请查看</button>
+            <button class="cu-btn bg-green margin-left" open-type="share" @click="clickTz(0)"><text class="cuIcon-weixin"></text>微信分享</button>
           </view>
         </view>
       </view>
@@ -59,7 +104,6 @@
 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 {
@@ -69,13 +113,16 @@ import {addByMobile} from "../../api/vitalSignsLook";
         finishedLoad: false,
         uid: '',
         modalName: false,
-        searchPhone: ''
+        searchPhone: '',
+        tabCur: 2,
+        title: '添加推送亲友'
 			}
 		},
     onShow() {
 		  this.uid = Storage.getItem('uid')
       if (this.uid) {
         this.sx()
+        this.userInfo = Storage.getItem('userInfo')
       }
     },
     onPullDownRefresh() {
@@ -100,7 +147,11 @@ import {addByMobile} from "../../api/vitalSignsLook";
           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'
+        if (this.tabCur === 1) {
+          params.fixedCondition = ' ccll.status=1 and ccll.member_id=' + this.uid + ' and ccll.friend_id = em.member_id'
+        } else if (this.tabCur === 2) {
+          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)
@@ -173,99 +224,72 @@ import {addByMobile} from "../../api/vitalSignsLook";
             _this.sx()
           }
         })
+      },
+      tabSelect(type) {
+        this.tabCur = type
+        this.sx()
+      },
+      changeBoosSms(e) {
+        console.log('e==', e)
+        const data = {
+          bool_sms: e.detail.value
+        }
+        this.API_update(data, e.currentTarget.dataset.id)
+      },
+      changeBoosVoice(e) {
+        console.log('e==', e)
+        const data = {
+          bool_voice: e.detail.value
+        }
+        this.API_update(data, e.currentTarget.dataset.id)
+      },
+
+      async API_update(data, id) {
+        console.log(data, id)
+        await API_vitalSignsLook.editLogLook(data, id)
+      },
+      clickTz(type) {
+        this.modalName = false
+        this.lx = type
       }
-		}
+		},
+    onShareAppMessage(e) {
+      wx.showShareMenu({withShareTicket: true})
+      let path = '/pages/home/index?type=VITAL_SHARE&no='+this.uid+'&lx='+this.lx
+      let title = ''
+      if (this.lx === 0) {
+        title = '你的亲友'+this.userInfo.nickname+'邀请您查看他的体征数据,互帮互爱,呵护健康!'
+      } else {
+        title = '你的亲友'+this.userInfo.nickname+'推荐你使用UU守护小程序,构筑自己的关爱互联圈,从此健康更有保障!'
+      }
+      let _this = this
+      return {
+        title: title,
+        path: path,
+        success: res => { // 转发成功 则关闭弹框 可获取转发信息
+          _this.isShow = false
+        }
+      }
+    }
 	}
 </script>
 
 <style lang="scss" scoped>
 .page {
-  background-color: #000000;
+  //background-color: #000000;
   width: 100%;
   overflow-y: auto;
   overflow-x: hidden;
   height: 100%;
+  background-image: url("http://wdklmall.oss-cn-shenzhen.aliyuncs.com/mallgoods/goods/2E8800F59CE14717A09884B811B3C608.png");
+  background-size: cover ;
+  background-attachment: fixed ;
+  background-position: center center;
+
   .section {
-    background-image: url("http://wdklmall.oss-cn-shenzhen.aliyuncs.com/mallgoods/goods/2E8800F59CE14717A09884B811B3C608.png");
-    background-size: contain;
-    background-repeat: repeat;
+    background-image: linear-gradient(180deg, rgba(86, 86, 217, 0.95) 0%, #1dbff79c 100%);
+    padding-bottom: 50upx;
     .section_2 {
-      padding-bottom: 1.25rem;
-      background-image: linear-gradient(180deg, #1e1ef7e3 0%, #1dbff59c 100%);
-      .section_3 {
-        padding: 1.13rem 0.44rem 0.38rem;
-        background-color: #ffffff4d;
-        .group {
-          padding: 0 0.5rem;
-          .image {
-            width: 1.06rem;
-            height: 0.69rem;
-          }
-          .image_2 {
-            width: 0.94rem;
-            height: 0.69rem;
-          }
-          .image_3 {
-            width: 1.5rem;
-            height: 0.72rem;
-          }
-        }
-        .space-x-6-reverse {
-          & > view:not(:last-child),
-          & > text:not(:last-child),
-          & > image:not(:last-child) {
-            margin-right: 0.38rem;
-          }
-        }
-        .group_2 {
-          padding: 0.63rem 0 0.38rem;
-          .text {
-            font-size: 1.16rem;
-          }
-          .section_4 {
-            padding: 0.38rem 0.75rem;
-            background-color: #ffffff99;
-            border-radius: 1rem;
-            border: solid 0.031rem #00000014;
-            .image-wrapper {
-              width: 1.19rem;
-              .image_5 {
-                width: 1.19rem;
-                height: 0.44rem;
-              }
-              .image_4 {
-                width: 1.13rem;
-                height: 1.06rem;
-              }
-            }
-            .section_5 {
-              background-color: #00000033;
-              width: 0.063rem;
-              height: 1.16rem;
-            }
-          }
-          .space-x-11 {
-            & > view:not(:first-child),
-            & > text:not(:first-child),
-            & > image:not(:first-child) {
-              margin-left: 0.69rem;
-            }
-          }
-          .pos {
-            position: absolute;
-            right: 0;
-            top: 50%;
-            transform: translateY(-50%);
-          }
-        }
-      }
-      .space-y-22 {
-        & > view:not(:first-child),
-        & > text:not(:first-child),
-        & > image:not(:first-child) {
-          margin-top: 1.38rem;
-        }
-      }
       .font_1 {
         font-size: 1.13rem;
         font-family: PingFangSC;
@@ -350,27 +374,6 @@ import {addByMobile} from "../../api/vitalSignsLook";
           margin-top: 0.63rem;
         }
       }
-      .group_5 {
-        padding: 0 1.75rem;
-        .button {
-          padding: 0.5rem 0;
-          background-image: linear-gradient(90deg, #5611f780 0%, #2c3ff7 100%);
-          border-radius: 1rem;
-          width: 8.69rem;
-        }
-        .font_2 {
-          font-size: 1rem;
-          font-family: PingFangSC;
-          line-height: 0.94rem;
-          color: #ffffff;
-        }
-        .pos_2 {
-          position: absolute;
-          right: 1.78rem;
-          top: 50%;
-          transform: translateY(-50%);
-        }
-      }
       .text_6 {
         opacity: 0.5;
       }
@@ -379,7 +382,7 @@ import {addByMobile} from "../../api/vitalSignsLook";
       & > view:not(:first-child),
       & > text:not(:first-child),
       & > image:not(:first-child) {
-        margin-top: 26.31rem;
+        //margin-top: 26.31rem;
       }
     }
   }

+ 0 - 13
sleep/plugins/audio/index.js

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

+ 0 - 74
sleep/plugins/audio/util.js

@@ -1,74 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.EventBus = exports.throttle = exports.formatSeconds = void 0;
-function formatSeconds(seconds) {
-    var result = typeof seconds === "string" ? parseFloat(seconds) : seconds;
-    if (isNaN(result))
-        return "";
-    let h = Math.floor(result / 3600) < 10
-        ? "0" + Math.floor(result / 3600)
-        : Math.floor(result / 3600);
-    let m = Math.floor((result / 60) % 60) < 10
-        ? "0" + Math.floor((result / 60) % 60)
-        : Math.floor((result / 60) % 60) + h * 60;
-    let s = Math.floor(result % 60) < 10
-        ? "0" + Math.floor(result % 60)
-        : Math.floor(result % 60);
-    return `${m}:${s}`;
-}
-exports.formatSeconds = formatSeconds;
-function throttle(fn, wait) {
-    let previous = 0;
-    return function (...arg) {
-        let context = this;
-        let now = Date.now();
-        //每隔一段时间执行一次;
-        if (now - previous > wait) {
-            fn.apply(context, arg);
-            previous = now;
-        }
-    };
-}
-exports.throttle = throttle;
-class EventBus {
-    constructor() {
-        this._events = new Map();
-    }
-    on(event, action, fn) {
-        let arr = this._events.get(event);
-        let hasAction = arr
-            ? arr.findIndex((i) => i.action == action)
-            : -1;
-        if (hasAction > -1) {
-            return;
-        }
-        this._events.set(event, [
-            ...(this._events.get(event) || []),
-            {
-                action,
-                fn,
-            },
-        ]);
-    }
-    has(event) {
-        return this._events.has(event);
-    }
-    emit(event, data) {
-        if (!this.has(event)) {
-            return;
-        }
-        let arr = this._events.get(event);
-        arr.forEach((i) => {
-            i.fn(data);
-        });
-    }
-    off(event, action) {
-        if (!this.has(event)) {
-            return;
-        }
-        let arr = this._events.get(event);
-        let newdata = arr.filter((i) => i.action !== action);
-        this._events.set(event, [...newdata]);
-    }
-}
-exports.EventBus = EventBus;

+ 0 - 597
sleep/plugins/audio/zaudio.js

@@ -1,597 +0,0 @@
-"use strict";
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
-    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
-    return new (P || (P = Promise))(function (resolve, reject) {
-        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-    });
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var zaudioCbName;
-(function (zaudioCbName) {
-    zaudioCbName["onWaiting"] = "waiting";
-    zaudioCbName["onError"] = "error";
-    zaudioCbName["onTimeUpdate"] = "playing";
-    zaudioCbName["onCanplay"] = "canPlay";
-    zaudioCbName["onPause"] = "pause";
-    zaudioCbName["onEnded"] = "ended";
-    zaudioCbName["setAudio"] = "setAudio";
-    zaudioCbName["updateAudio"] = "updateAudio";
-    zaudioCbName["seek"] = "seek";
-    zaudioCbName["onStop"] = "stop";
-    zaudioCbName["syncStateOn"] = "syncStateOn";
-})(zaudioCbName || (zaudioCbName = {}));
-let zaudioCbNameArr = [];
-for (const key in zaudioCbName) {
-    if (Object.prototype.hasOwnProperty.call(zaudioCbName, key)) {
-        const item = zaudioCbName[key];
-        zaudioCbNameArr.push(item);
-    }
-}
-const util_1 = require("./util");
-/**
- * ZAudio类
- * @class ZAudio
- * @constructor
- * @param    {String}    defaultCover    音频默认封面
- * @param    {Boolean}   continuePlay    继续播放,错误播放或结束播放后执行
- * @param    {Boolean}   autoPlay        自动播放,部分浏览器不支持
- * @property {Number}         renderIndex     当前渲染索引
- * @property {<audioinfo>}      renderinfo      当前渲染数据
- * @property {Array<audio>}   audiolist       音频列表数组
- * @property {<audioinfo>}      playinfo        当前播放数据
- * @property {Boolean}        paused          音频暂停状态
- * @property {Number}         playIndex       当前播放索引
- * @property {Boolean}        renderIsPlay    渲染与播放是否一致
- *
- * @method on(event, action, fn)       回调函数注册业务事件
- * @method off(event, action)          回调函数中卸载业务事件
- * @method setRender(data)             指定音频, 渲染到zaudio组件
- * @method syncRender()    						 同步并渲染当前的播放状态
- * @method operate(index)       			 播放或暂停指定索引的音频
- * @method setAudio(list)		   				 覆盖音频列表
- * @method updateAudio(list)   				 添加音频列表
- * @method stop()          						 强制暂停当前播放音频
- * @method stepPlay(count)      				快进快退
- * @method syncStateOn(action, cb)       	注册一个用于同步获取当前播放状态的事件
- * @method syncStateOff(action)     		卸载用于同步获取当前播放状态的事件
- *
- *
- * **/
-class ZAudio extends util_1.EventBus {
-    constructor(options) {
-        super();
-        this.loading = false;
-        this.renderIndex = 0;
-        this.audiolist = [];
-        this.renderinfo = {
-            current: "00:00",
-            duration: "00:00",
-            duration_value: 0,
-            current_value: 0,
-            src: "",
-            title: "",
-            singer: "",
-            coverImgUrl: "",
-        };
-        this.playinfo = {
-            current: "00:00",
-            duration: "00:00",
-            duration_value: 0,
-            current_value: 0,
-            src: "",
-            title: "",
-            singer: "",
-            coverImgUrl: "",
-        };
-        this.paused = true;
-        this.uPause = false;
-        this.autoPlay = false;
-        this.defaultCover = "";
-        this.continuePlay = true;
-        //fix: 防抖触发音频播放中事件
-        this.throttlePlaying = util_1.throttle(() => {
-            this.emit(zaudioCbName.onTimeUpdate, this.playinfo);
-            this.syncStateEmit();
-        }, 1000);
-        let { defaultCover, autoPlay, continuePlay } = options;
-        this.defaultCover = defaultCover;
-        this.autoPlay = autoPlay;
-        this.continuePlay = continuePlay;
-        this.init();
-    }
-    init() {
-        // #ifndef H5
-        var audioCtx = uni.getBackgroundAudioManager();
-        // #endif
-        // #ifdef H5
-        var audioCtx = uni.createInnerAudioContext();
-        audioCtx.autoplay = this.autoPlay;
-        // #endif
-        this.audioCtx = audioCtx;
-        this.audioCtx.onWaiting(this.onWaitingHandler.bind(this));
-        this.audioCtx.onCanplay(this.onCanplayHandler.bind(this));
-        this.audioCtx.onPlay(this.onPlayHandler.bind(this));
-        this.audioCtx.onPause(this.onPauseHandler.bind(this));
-        this.audioCtx.onStop(this.onStopHandler.bind(this));
-        this.audioCtx.onEnded(this.onEndedHandler.bind(this));
-        this.audioCtx.onTimeUpdate(this.onTimeUpdateHandler.bind(this));
-        this.audioCtx.onError(this.onErrorHandler.bind(this));
-        //fix: 修复iOS原生音频切换不起作用
-        //  #ifdef APP-PLUS
-        if (uni.getSystemInfoSync().platform == "ios") {
-            const bgMusic = plus.audio.createPlayer();
-            bgMusic.addEventListener("prev", () => {
-                this.changeplay(-1);
-            });
-            bgMusic.addEventListener("next", () => {
-                this.changeplay(1);
-            });
-        }
-        // #endif
-        // #ifndef H5
-        setTimeout(() => {
-            if (this.autoPlay) {
-                this.operate();
-            }
-        }, 500);
-        // #endif
-        this.appCheckReplay();
-    }
-    //检测on off的参数
-    checkEventParams(event, action, fn) {
-        if (zaudioCbNameArr.indexOf(event) < 0) {
-            console.error(`参数${event}错误, 必须为${zaudioCbNameArr.join(" | ")}中某一项`);
-            return false;
-        }
-        if (typeof action !== "string" && typeof action !== "symbol") {
-            console.error(`参数${action}错误, 参数必须为string或symbol类型`);
-            return false;
-        }
-        if (fn && typeof fn !== "function") {
-            console.error("fn参数错误");
-            return false;
-        }
-        return true;
-    }
-    /**
-     * @description 回调中卸载业务事件
-     * @param {<zaudioCbName>}   event     回调名称枚举值
-     * @param {Sting|Symbol}         action    业务函数名,用于区分不同业务
-     * @returns undefined
-     * **/
-    off(event, action) {
-        if (!this.checkEventParams(event, action))
-            return;
-        super.off(event, action);
-    }
-    /**
-     * @description 回调中注册业务事件
-     * @param {<zaudioCbName>}        event     回调名称枚举值
-     * @param {Sting|Symbol}              action    业务函数名,用于区分不同业务
-     * @param {function(object|string|number|undefined):undefined}      fn      业务函数, 参数或为音频状态
-     * @returns undefined
-     * **/
-    on(event, action, fn) {
-        if (!this.checkEventParams(event, action))
-            return;
-        super.on(event, action, fn);
-    }
-    /**
-     * @description 订阅触发音频回调
-     * @param {<zaudioCbName>}        event      回调名称枚举值,具体看zaudioCbName
-     * @param {object|string|number|undefined}     data        订阅触发回调时,传的音频属性
-     * @returns undefined
-     * **/
-    emit(event, data) {
-        super.emit(event, data);
-    }
-    commit(action, data) {
-        typeof this[action] === "function" && this[action](data);
-    }
-    onWaitingHandler() {
-        this.commit("setLoading", true);
-        this.emit(zaudioCbName.onWaiting, true);
-        this.syncStateEmit();
-    }
-    onCanplayHandler() {
-        this.emit(zaudioCbName.onCanplay, this.playinfo);
-        this.commit("setLoading", false);
-        this.syncStateEmit();
-    }
-    onPlayHandler() {
-        // #ifdef APP-PLUS
-        this.commit("setPlayinfo", {
-            duration: util_1.formatSeconds(this.audioCtx.duration),
-            duration_value: this.audioCtx.duration,
-        });
-        // #endif
-        this.commit("setPause", false);
-        this.commit("setUnnormalPause", false);
-    }
-    onPauseHandler() {
-        this.commit("setPause", true);
-        this.emit(zaudioCbName.onPause);
-        this.syncStateEmit();
-    }
-    onStopHandler() {
-        this.commit("setPause", true);
-        this.emit(zaudioCbName.onStop);
-        this.syncStateEmit();
-    }
-    onEndedHandler() {
-        this.commit("setPause", true);
-        this.audioCtx.startTime = 0;
-        this.commit("setPlayinfo", {
-            current: "00:00",
-            current_value: 0,
-            src: "",
-        });
-        this.emit(zaudioCbName.onEnded);
-        this.syncStateEmit();
-        //续播
-        if (this.continuePlay) {
-            this.changeplay(1);
-        }
-        else {
-            let nextkey = this.getNextKey(1);
-            this.commit("setRender", nextkey);
-        }
-    }
-    onTimeUpdateHandler() {
-        if (this.renderIsPlay) {
-            //fix: 解决播放进度大于总进度问题
-            let currentTime = this.audioCtx.currentTime > this.audioCtx.duration
-                ? this.audioCtx.duration
-                : this.audioCtx.currentTime;
-            this.commit("setPlayinfo", {
-                current: util_1.formatSeconds(currentTime),
-                current_value: currentTime,
-            });
-            // #ifndef APP-PLUS
-            //fix: 解决小程序与h5无法获取总进度的问题
-            if (this.audioCtx.duration != this.playinfo.duration_value) {
-                this.commit("setPlayinfo", {
-                    duration: util_1.formatSeconds(this.audioCtx.duration),
-                    duration_value: this.audioCtx.duration,
-                });
-            }
-            // #endif
-        }
-        this.throttlePlaying();
-    }
-    onErrorHandler() {
-        this.commit("setPause", true);
-        this.commit("setRender", {
-            src: "",
-            title: "",
-            singer: "",
-            coverImgUrl: "",
-        });
-        this.commit("setPlayinfo", {
-            current: "00:00",
-            current_value: 0,
-            duration: "00:00",
-            duration_value: 0,
-            title: "",
-            src: "",
-        });
-        this.emit(zaudioCbName.onError);
-        this.syncStateEmit();
-        if (this.continuePlay) {
-            this.changeplay(1);
-        }
-    }
-    /**
-     * @description 实时渲染当前状态
-     * @returns undefined
-     * **/
-    syncRender() {
-        this.setRender(this.playIndex);
-    }
-    /**
-     * @description 注册一个实时获取ZAudio属性的方法
-     * @param {String}        action      自定义业务名
-     * @param {Funtion}     fn        实时获取ZAudio属性回调
-     * @returns undefined
-     * **/
-    syncStateOn(action, fn) {
-        typeof fn === "function" && this.on(zaudioCbName.syncStateOn, action, fn);
-    }
-    /**
-     * @description 卸载实时获取ZAudio属性的方法
-     * @param {String}        action      自定义业务名
-     * @returns undefined
-     * **/
-    syncStateOff(action) {
-        this.off(zaudioCbName.syncStateOn, action);
-    }
-    /**
-     * @description 订阅实时获取ZAudio属性的方法
-     * @returns undefined
-     * **/
-    syncStateEmit() {
-        this.emit(zaudioCbName.syncStateOn, {
-            renderIndex: this.renderIndex,
-            audiolist: this.audiolist,
-            renderinfo: this.renderinfo,
-            playinfo: this.playinfo,
-            paused: this.paused,
-            playIndex: this.playIndex,
-            renderIsPlay: this.renderIsPlay,
-            loading: this.loading,
-        });
-    }
-    /**
-     * @description 跳转播放
-     * @param {Number}        value      跳转位置
-     * @returns undefined
-     * **/
-    seek(value) {
-        let val = value > this.audioCtx.duration ? this.audioCtx.duration : value;
-        this.audioCtx.seek(val);
-        this.commit("setPlayinfo", {
-            current: util_1.formatSeconds(val),
-            current_value: val,
-        });
-        // setTimeout(() => {
-        //   this.emit(zaudioCbName.seek, this.playinfo.current);
-        // }, 0);
-        this.emit(zaudioCbName.seek, this.playinfo.current);
-    }
-    /**
-     * @description 快进
-     * @param {Number}        value      跳转位置
-     * @returns undefined
-     * **/
-    stepPlay(value) {
-        if (this.renderIsPlay) {
-            let pos = this.playinfo.current_value + value;
-            this.seek(pos);
-        }
-    }
-    /**
-     * @description 获取下一首歌曲索引(用于渲染和播放)
-     * @param {Number}        count     切换数量
-     * @returns number
-     * **/
-    getNextKey(count) {
-        let nextkey = this.renderIndex;
-        nextkey += count;
-        nextkey =
-            nextkey < 0
-                ? this.audiolist.length - 1
-                : nextkey > this.audiolist.length - 1
-                    ? 0
-                    : nextkey;
-        return nextkey;
-    }
-    /**
-     * @description 切歌
-     * @param {Number}        count      数量
-     * @returns undefined
-     * **/
-    changeplay(count) {
-        let nextkey = this.getNextKey(count);
-        this.commit("setPause", true);
-        this.operate(nextkey);
-    }
-    /**
-     * @description 手动播放或暂停, 并渲染对应的数据
-     * @param {Number|String|<audioInfo>|undefined}        key      索引或音频对象
-     * @returns undefined
-     * **/
-    operate(key) {
-        key !== undefined && this.commit("setRender", key);
-        this.operation();
-    }
-    /**
-     * @description 强制暂停播放
-     * @returns undefined
-     * **/
-    stop() {
-        this.audioCtx.pause();
-        this.commit("setPause", true);
-        this.commit("setUnnormalPause", true);
-        this.emit(zaudioCbName.onStop);
-    }
-    //播放,暂停事件判断,
-    //播放数据与渲染数据相同时: 播放->暂停, 暂停->播放
-    //播放数据与渲染数据不相同时: 播放渲染音频
-    operation() {
-        return __awaiter(this, void 0, void 0, function* () {
-            const { duration, current, duration_value, current_value, src} = this.playinfo;
-            const { src: renderSrc, title: renderTitle, singer: renderSinger, coverImgUrl: renderCoverImgUrl, } = this.renderinfo;
-            let renderIsPlay = this.renderIsPlay;
-            let paused = this.paused;
-            if (!renderIsPlay) {
-                //渲染与播放地址 不同
-                this.audioCtx.src = renderSrc;
-                this.audioCtx.title = renderTitle;
-                this.audioCtx.singer = renderSinger;
-                this.audioCtx.coverImgUrl = renderCoverImgUrl || this.defaultCover;
-                this.audioCtx.startTime = 0;
-                this.audioCtx.seek(0);
-                this.audioCtx.play();
-                this.commit("setPause", false);
-                this.commit("setPlayinfo", {
-                    src: renderSrc,
-                    title: renderTitle,
-                    singer: renderSinger,
-                    coverImgUrl: renderCoverImgUrl,
-                });
-            }
-            else {
-                if (paused) {
-                    //渲染与播放地址相同
-                    this.audioCtx.play();
-                    this.audioCtx.startTime = current_value;
-                    // this.audioCtx.seek(current_value);
-                    this.commit("setPause", false);
-                    this.commit("setPlayinfo", {
-                        src: renderSrc,
-                        title: renderTitle,
-                        singer: renderSinger,
-                        coverImgUrl: renderCoverImgUrl,
-                    });
-                }
-                else {
-                    this.audioCtx.pause();
-                    this.commit("setPause", true);
-                    this.commit("setUnnormalPause", true);
-                }
-            }
-        });
-    }
-    /**
-     * @description 覆盖音频
-     * @param {Array<audio>} data 音频数组
-     * @returns undefined
-     * **/
-    setAudio(data) {
-        this.audiolist = [...data];
-        this.emit(zaudioCbName.setAudio, this.audiolist);
-        this.syncStateEmit();
-    }
-    /**
-     * @description 添加音频
-     * @param {Array<audio>} data 音频数组
-     * @returns undefined
-     * **/
-    updateAudio(data) {
-        this.audiolist.push(...data);
-        this.emit(zaudioCbName.updateAudio, this.audiolist);
-        this.syncStateEmit();
-    }
-    /**
-     * @description 设置当前播放信息
-     * @param {<audioInfo>} data 音频对象
-     * @returns undefined
-     * **/
-    setPlayinfo(data) {
-        for (let i in data) {
-            this.playinfo[i] = data[i];
-        }
-    }
-    /**
-     * @description 设置暂停状态
-     * @param {boolean} data 布尔值
-     * @returns undefined
-     * **/
-    setPause(data) {
-        this.paused = data;
-    }
-    /**
-     * @description 设置loading
-     * @param {boolean} data 布尔值
-     * @returns undefined
-     * **/
-    setLoading(data) {
-        this.loading = data;
-    }
-    /**
-     * @description 设置通话时暂停状态
-     * @param {boolean} data 布尔值
-     * @returns undefined
-     * **/
-    setUnnormalPause(data) {
-        this.uPause = data;
-    }
-    /**
-     * @description 设置渲染
-     * @param {number | string | audioInfo} data 索引或渲染信息
-     * @returns undefined
-     * **/
-    setRender(data) {
-        if (this.audiolist.length == 0)
-            return;
-        if (typeof data === "number" || typeof data === "string") {
-            this.renderIndex = typeof data === "string" ? parseInt(data) : data;
-            this.renderinfo = {
-                src: this.audiolist[this.renderIndex].src,
-                title: this.audiolist[this.renderIndex].title,
-                singer: this.audiolist[this.renderIndex].singer,
-                coverImgUrl: this.audiolist[this.renderIndex].coverImgUrl,
-                current: "00:00",
-                duration: "00:00",
-                current_value: 0,
-                duration_value: 100,
-            };
-        }
-        else {
-            this.renderinfo = data;
-            let renderIndex = this.audiolist.findIndex((i) => i.src == data.src);
-            if (renderIndex >= 0) {
-                this.renderIndex = renderIndex;
-            }
-        }
-        this.syncStateEmit();
-    }
-    //当前索引
-    get playIndex() {
-        let index = this.audiolist.findIndex((i) => i.src == this.playinfo.src);
-        return index <= 0 ? 0 : index;
-    }
-    //渲染与播放是否一致
-    get renderIsPlay() {
-        return this.renderinfo.src == this.playinfo.src;
-    }
-    //app端判断电话来电后, 音频意外中断之后的继续播放
-    appCheckReplay() {
-        let _t = this;
-        // #ifdef APP-PLUS
-        try {
-            if (uni.getSystemInfoSync().platform == "android") {
-                var main = plus.android.runtimeMainActivity();
-                var Context = plus.android.importClass("android.content.Context");
-                var telephonyManager = plus.android.importClass("android.telephony.TelephonyManager");
-                var telephonyManager = plus.android
-                    .runtimeMainActivity()
-                    .getSystemService(Context.TELEPHONY_SERVICE);
-                var receiver = plus.android.implements("io.dcloud.android.content.BroadcastReceiver", {
-                    onReceive: function (intent) {
-                        //实现onReceiver回调函数
-                        plus.android.importClass(intent);
-                        var telephonyManager = plus.android.importClass("android.telephony.TelephonyManager");
-                        var telephonyManager = plus.android
-                            .runtimeMainActivity()
-                            .getSystemService(Context.TELEPHONY_SERVICE);
-                        var phonetype = telephonyManager.getCallState();
-                        var phoneNumber = intent.getStringExtra(telephonyManager.EXTRA_INCOMING_NUMBER);
-                        if (phonetype == 0 && !_t.uPause) {
-                            _t.audioCtx.play();
-                        }
-                    },
-                });
-                var IntentFilter = plus.android.importClass("android.content.IntentFilter");
-                var filter = new IntentFilter();
-                filter.addAction(telephonyManager.ACTION_PHONE_STATE_CHANGED); //监听开关
-                main.registerReceiver(receiver, filter); //注册监听
-            }
-            else if (uni.getSystemInfoSync().platform == "ios") {
-                var callstatus = false;
-                var CTCall = plus.ios.importClass("CTCall");
-                var CTCallCenter = plus.ios.importClass("CTCallCenter");
-                var center = new CTCallCenter();
-                center.init();
-                center.setCallEventr(function (ctCall) {
-                    callstatus = !callstatus;
-                    if (!callstatus && !_t.uPause) {
-                        _t.audioCtx.play();
-                    }
-                    else {
-                        _t.audioCtx.pause();
-                    }
-                });
-            }
-        }
-        catch (err) {
-            console.warn(err);
-        }
-        // #endif
-    }
-}
-exports.default = ZAudio;
-ZAudio.version = "2.2.51";

File diff suppressed because it is too large
+ 0 - 403
sleep/plugins/pinyin/pinyin.js


+ 0 - 77
sleep/plugins/pinyin/toPinyin.js

@@ -1,77 +0,0 @@
-/*
- * @Autor: lieft@qq.com
- * @Date: 1970-01-01 08:00:00
- * @LastEditors: hlb
- * @LastEditTime: 2020-11-25 17:48:41
- * @description: 转拼音 
- */
-import pinyin from "./pinyin";
-
-class ToPinyin {
-    static instance;
-
-    constructor() {
-
-    }
-
-    static getInstance() {
-        if (!this.instance) {
-            this.instance = new ToPinyin();
-        }
-        return this.instance;
-    }
-
-    // 转首字母 this.chineseToInitials(this.chineseToPinYin('你好'))  this.chineseToInitials('NiHao')
-    chineseToInitials(word){
-        let SX = '';
-        for (var i = 0; i < word.length; i++) {
-          var c = word.charAt(i);
-          if (/^[A-Z]+$/.test(c)) {
-             SX += c;
-          }
-        }
-        return SX
-    }
-
-    // 转拼音
-    chineseToPinYin(l1) {
-        var l2 = l1.length;
-        var I1 = '';
-        var reg = new RegExp('[a-zA-Z0-9]');
-        for (var i = 0; i < l2; i++) {
-            var val = l1.substr(i, 1);
-            var name = this.arraySearch(val, pinyin);
-            if (reg.test(val)) {
-                I1 += val;
-            } else if (name !== false) {
-                I1 += name;
-            }
-        }
-        I1 = I1.replace(/ /g, '-');
-        while (I1.indexOf('--') > 0) {
-            I1 = I1.replace('--', '-');
-        }
-        return I1;
-    }
-
-    arraySearch(l1, l2) {
-        for (var name in pinyin) {
-            if (pinyin[name].indexOf(l1) !== -1) {
-                return this.ucfirst(name);
-            }
-        }
-        return false;
-    }
-
-    ucfirst(l1) {
-        if (l1.length > 0) {
-            var first = l1.substr(0, 1).toUpperCase();
-            var spare = l1.substr(1, l1.length);
-            return first + spare;
-        }
-    }
-   
-
-}
-const toPinyin = ToPinyin.getInstance()
-export default toPinyin;

+ 0 - 40
sleep/plugins/pinyin/utils.js

@@ -1,40 +0,0 @@
-import toPinyin from "./toPinyin";
-
-/**
- * 根据拼音首字母筛选排序分组
- * @param {Array} arr 原数组
- * @param {String} key 原数组需要筛选的字段
- * @returns {Array} 返回一个[{name: A,value: []}] 格式的二维数组
- */
-export function getGroupByPinyin(arr, key = 'name') {
-    if(!arr) return
-    
-    // 获取A-Z字母数组
-    let keys = [...Array(26).keys()].map((i) => String.fromCharCode(i + 65));
-    
-    arr = arr.map((n) => ({
-        ...n,
-        py: toPinyin.chineseToInitials(
-            toPinyin.chineseToPinYin(n[key].substr(0, 1))
-        ),
-    }));
-
-    let group = [];
-    for (const i of keys) {
-        // 新数组一级结构,可自行修改
-        let item = {
-            name: i,
-            value: [],
-        };
-        for (const j of arr) {
-            if (j.py === i) {
-                item.value.push(j);
-            }
-        }
-        if (item.value.length > 0) {
-            item.value.sort((a, b) => a[key].localeCompare(b[key]));
-            group.push(item);
-        }
-    }
-    return group;
-}

BIN
sleep/preview/╬ó╨┼═╝╞¼_20220117173118.png


BIN
sleep/preview/╬ó╨┼═╝╞¼_20220117173402.png


BIN
sleep/preview/╬ó╨┼═╝╞¼_20220117173412.png


BIN
sleep/preview/╬ó╨┼═╝╞¼_20220117173428.png


BIN
sleep/preview/╬ó╨┼═╝╞¼_20220117173448.png


BIN
sleep/preview/╬ó╨┼═╝╞¼_20220117173510.png


BIN
sleep/preview/╬ó╨┼═╝╞¼_20220117173526.png


BIN
sleep/preview/╬ó╨┼═╝╞¼_20220117173539.png


BIN
sleep/preview/╬ó╨┼═╝╞¼_20220117174715.png


BIN
sleep/static/mine/myIconAdd.png


BIN
sleep/static/mine/myIconBuy.png


BIN
sleep/static/mine/myIconDefault.png


BIN
sleep/static/mine/myIconEdit.png


BIN
sleep/static/mine/myIconMoney.png


BIN
sleep/static/mine/myIconNotDefault.png


BIN
sleep/static/mine/myIconPhone.png


BIN
sleep/static/report/reportAlertBg.png


BIN
sleep/static/report/reportBG.png


BIN
sleep/static/tabBar/recommend.png


BIN
sleep/static/tabBar/recommendHL.png


+ 0 - 2
sleep/uni_modules/cc-swiperTabs/changelog.md

@@ -1,2 +0,0 @@
-## 2.0.0(2023-06-21)
-组件优化

+ 0 - 146
sleep/uni_modules/cc-swiperTabs/components/cc-swiperTabs/cc-swiperTabs.vue

@@ -1,146 +0,0 @@
-<template>
-	<!--组件-->
-	<scroll-view class="scroll" scroll-x='false' scroll-with-animation :scroll-into-view=" 'tab-' + scrollIntoView"
-		:style="{ height:curSwiperHeight + 'rpx' }">
-		<view class="swiperTab" v-for="(item,index) in swiperTabList" :key='index'
-			:style="{ width:curSwiperWidth,lineHeight:curSwiperHeight + 'rpx' }" :id=" 'tab-' + index "
-			@tap="CurrentTab(index,item)">
-
-			<!--导航标题-->
-			<text class="textTitle" :style="{ color:swiperTabIdx == index ? swiperCurrentColor:swiperColor }">
-				{{ item }}
-			</text>
-			<!--导航标题-->
-
-			<!--线条-->
-			<view class="swiperLine" v-show="curSwiperLineShow">
-				<view class="swiperLineActive"
-					:class="[ swiperTabIdx == index && curSwiperLineAnimatie ?'currentLine':'' ]" :style="{ 
-						width:curSwiperLineActiveWidth,
-						height:curSwiperLineActiveHeight,
-						background:curSwiperLineActiveBg
-					}" v-if=" swiperTabIdx == index ">
-				</view>
-			</view>
-			<!--线条-->
-
-		</view>
-	</scroll-view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				scrollIntoView: 0,
-			}
-		},
-		onLoad() {},
-		props: {
-
-			swiperTabList: {
-				type: Array
-			}, //导航列表
-			swiperTabIdx: {
-				type: Number
-			}, //导航对应列表下标
-			swiperColor: {
-				type: String
-			}, //导航栏字体未选中前颜色
-			swiperCurrentColor: {
-				type: String
-			}, //选中当前导航栏字体颜色
-			curSwiperWidth: {
-				type: String
-			}, //当前导航的宽度 % upx rpx px
-			curSwiperHeight: {
-				type: Number
-			}, //当前导航的高度度 rpx px
-			curSwiperLineShow: {
-				type: Boolean
-			}, //是否显示线条
-			curSwiperLineActiveWidth: {
-				type: String
-			}, //当前选中的导航栏线条的宽度
-			curSwiperLineActiveHeight: {
-				type: String
-			}, //当前选中的导航栏线条的高度度
-			curSwiperLineActiveBg: {
-				type: String
-			}, //当前选中的导航栏线条颜色
-			curSwiperLineAnimatie: {
-				type: Number,
-				default: 280
-			}, //当前选中的导航栏线条过渡效果
-		},
-		methods: {
-
-			CurrentTab: function(index, item) {
-
-				this.scrollIntoView = Math.max(0, index - 1);
-				this.$emit('change', index, item);
-			},
-
-		}
-	}
-</script>
-
-<style>
-	.scroll ::-webkit-scrollbar {
-
-		display: none;
-		background-color: transparent;
-
-	}
-
-	.scroll {
-
-		display: flex !important;
-		flex-direction: row !important;
-		flex-wrap: nowrap;
-		white-space: nowrap;
-		background-color: white;
-	}
-
-	.swiperTab {
-		display: inline-flex;
-		flex-direction: column;
-		text-align: center;
-		position: relative;
-	}
-
-	.swiperLine {
-		position: absolute;
-		bottom: 6px;
-		left: 0;
-		width: 100%;
-		z-index: 10;
-	}
-
-	.swiperLineActive {
-		margin: 0 auto;
-		border-radius: 30upx;
-	}
-
-	@keyframes currentLine {
-		0% {
-			transform: scale(0.5);
-		}
-
-		100% {
-			transform: scale(1);
-		}
-	}
-
-	.currentLine {
-		animation: currentLine 300ms forwards;
-	}
-
-	.textTitle {
-
-		font-size: 32rpx;
-		font-weight: 500;
-
-
-	}
-</style>

+ 0 - 85
sleep/uni_modules/cc-swiperTabs/package.json

@@ -1,85 +0,0 @@
-{
-  "id": "cc-swiperTabs",
-  "displayName": "可以左右滚动切换的tabs tabs选项卡 滑动动画效果 自动宽度",
-  "version": "2.0.0",
-  "description": "可以左右滚动切换的tabs tabs选项卡 滑动动画效果 自动宽度, 可用于预约取号日期滑动选择等场景",
-  "keywords": [
-    "tabs",
-    "选项卡",
-    "滑动",
-    "radio",
-    "swiper"
-],
-  "repository": "",
-  "engines": {
-    "HBuilderX": "^3.8.0"
-  },
-  "dcloudext": {
-    "type": "component-vue",
-    "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": {
-        "Vue": {
-          "vue2": "y",
-          "vue3": "y"
-        },
-        "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",
-          "飞书": "y",
-          "京东": "y"
-        },
-        "快应用": {
-          "华为": "y",
-          "联盟": "y"
-        }
-      }
-    }
-  }
-}

+ 0 - 166
sleep/uni_modules/cc-swiperTabs/readme.md

@@ -1,166 +0,0 @@
-# cc-swiperTabs
-
-
-#### 使用方法 
-```使用方法
-swiperTabList: ["2023-06-10","2023-06-11","2023-06-12","2023-06-13","2023-06-14","2023-06-15"], //导航列表
-swiperTabIdx: 0,
-swiperColor: '#161616', //导航栏字体未选中前颜色
-swiperCurrentColor: '#1D63FF', //选中当前导航栏字体颜色
-curSwiperWidth: '26%', //当前导航的宽度 % upx rpx px  (导航超出可左右滑动 )
-curSwiperHeight: 96, //当前导航的高度度 rpx px
-curSwiperLineShow: true, //是否显示导航栏的线条 (线条距离标题太近的话可自行修改.swiperLine的css)
-curSwiperLineActiveBg: '#1D63FF', //当前选中的导航栏线条颜色
-curSwiperLineActiveWidth: '60%', //当前选中的导航栏线条的宽度 upx rpx px
-curSwiperLineActiveHeight: '2px', //当前选中的导航栏线条的高度度 upx rpx px
-
-<!--组件-->
-<cc-swiperTabs :swiperTabList='swiperTabList' :swiperTabIdx='swiperTabIdx' :curSwiperWidth='curSwiperWidth'
-			:curSwiperHeight='curSwiperHeight' :swiperColor='swiperColor' :swiperCurrentColor='swiperCurrentColor'
-			:curSwiperLineShow="curSwiperLineShow" :curSwiperLineActiveWidth="curSwiperLineActiveWidth"
-			:curSwiperLineActiveHeight="curSwiperLineActiveHeight" :curSwiperLineActiveBg="curSwiperLineActiveBg"
-			@change="CurrentTab">
-</cc-swiperTabs>					
-
-
-```
-
-#### HTML代码实现部分
-```html
-
-<template>
-	<view class="content">
-
-		<!--组件-->
-		<cc-swiperTabs :swiperTabList='swiperTabList' :swiperTabIdx='swiperTabIdx' :curSwiperWidth='curSwiperWidth'
-			:curSwiperHeight='curSwiperHeight' :swiperColor='swiperColor' :swiperCurrentColor='swiperCurrentColor'
-			:curSwiperLineShow="curSwiperLineShow" :curSwiperLineActiveWidth="curSwiperLineActiveWidth"
-			:curSwiperLineActiveHeight="curSwiperLineActiveHeight" :curSwiperLineActiveBg="curSwiperLineActiveBg"
-			@change="CurrentTab">
-		</cc-swiperTabs>
-
-		<!-- radioData:单选数据 curIndex:当前选择序列 @change:单选事件 -->
-		<ccRadioView :radioData="items" :curIndex="current" @change="radioChange"></ccRadioView>
-
-		<button class="submitBtn" type="primary" @click="submitAppointment">提交预约</button>
-
-
-	</view>
-</template>
-
-<script>
-	import ccRadioView from '../../components/ccRadioView.vue'
-
-	export default {
-		components: {
-
-			ccRadioView
-		},
-		data() {
-			return {
-
-				swiperTabList: ["2023-06-10", "2023-06-11", "2023-06-12", "2023-06-13", "2023-06-14", "2023-06-15"], //导航列表
-				swiperTabIdx: 0,
-
-				swiperColor: '#161616', //导航栏字体未选中前颜色
-				swiperCurrentColor: '#1D63FF', //选中当前导航栏字体颜色
-				curSwiperWidth: '26%', //当前导航的宽度 % upx rpx px  (导航超出可左右滑动 )
-				curSwiperHeight: 96, //当前导航的高度度 rpx px
-
-				curSwiperLineShow: true, //是否显示导航栏的线条 (线条距离标题太近的话可自行修改.swiperLine的css)
-				curSwiperLineActiveBg: '#1D63FF', //当前选中的导航栏线条颜色
-				curSwiperLineActiveWidth: '60%', //当前选中的导航栏线条的宽度 upx rpx px
-				curSwiperLineActiveHeight: '2px', //当前选中的导航栏线条的高度度 upx rpx px
-
-
-				items: [{
-						value: '1',
-						name: '上午9:00-10:00'
-					},
-					{
-						value: '2',
-						name: '上午10:00-11:00',
-						checked: ''
-					},
-					{
-						value: '3',
-						name: '上午11:00-12:00',
-					},
-					{
-						value: '4',
-						name: '下午13:00-14:00',
-					},
-					{
-						value: '5',
-						name: '下午14:00-15:00',
-					},
-					{
-						value: '6',
-						name: '下午15:00-16:00',
-					},
-					{
-						value: '7',
-						name: '下午16:00-17:00',
-					},
-					{
-						value: '8',
-						name: '下午17:00-18:00',
-					},
-
-				],
-				current: 0,
-
-			}
-		},
-		onLoad() {
-
-		},
-		methods: {
-
-			submitAppointment() {
-
-				uni.showModal({
-					title: '预约数据',
-					content: "日期选择 = " + this.swiperTabList[this.swiperTabIdx] + "  时间段选择 = " + this.items[this
-						.current].name
-				})
-			},
-			//tab点击事件 自行完善需要的代码
-			CurrentTab: function(index, item) {
-				this.swiperTabIdx = index;
-
-
-				console.log('日期选择' + item + '\n序列' + index)
-			},
-			radioChange: function(evt) {
-				for (let i = 0; i < this.items.length; i++) {
-					if (this.items[i].value === evt.target.value) {
-						this.current = i;
-						break;
-					}
-				}
-
-			},
-
-		}
-	}
-</script>
-
-<style>
-	.content {
-		display: flex;
-		flex-direction: column;
-
-
-	}
-
-
-	.submitBtn {
-
-		width: 90%;
-		margin-top: 86rpx;
-	}
-</style>
-
-
-```

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

@@ -1,22 +0,0 @@
-## 1.3.5(2022-01-24)
-- 优化 size 属性可以传入不带单位的字符串数值
-## 1.3.4(2022-01-24)
-- 优化 size 支持其他单位
-## 1.3.3(2022-01-17)
-- 修复 nvue 有些图标不显示的bug,兼容老版本图标
-## 1.3.2(2021-12-01)
-- 优化 示例可复制图标名称
-## 1.3.1(2021-11-23)
-- 优化 兼容旧组件 type 值
-## 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-icons](https://uniapp.dcloud.io/component/uniui/uni-icons)
-## 1.1.7(2021-11-08)
-## 1.2.0(2021-07-30)
-- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
-## 1.1.5(2021-05-12)
-- 新增 组件示例地址
-## 1.1.4(2021-02-05)
-- 调整为uni_modules目录规范

File diff suppressed because it is too large
+ 0 - 1169
sleep/uni_modules/uni-icons/components/uni-icons/icons.js


+ 0 - 96
sleep/uni_modules/uni-icons/components/uni-icons/uni-icons.vue

@@ -1,96 +0,0 @@
-<template>
-	<!-- #ifdef APP-NVUE -->
-	<text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" @click="_onClick">{{unicode}}</text>
-	<!-- #endif -->
-	<!-- #ifndef APP-NVUE -->
-	<text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick"></text>
-	<!-- #endif -->
-</template>
-
-<script>
-	import icons from './icons.js';
-	const getVal = (val) => {
-		const reg = /^[0-9]*$/g
-		return (typeof val === 'number' || reg.test(val) )? val + 'px' : val;
-	} 
-	// #ifdef APP-NVUE
-	var domModule = weex.requireModule('dom');
-	import iconUrl from './uniicons.ttf'
-	domModule.addRule('fontFace', {
-		'fontFamily': "uniicons",
-		'src': "url('"+iconUrl+"')"
-	});
-	// #endif
-
-	/**
-	 * Icons 图标
-	 * @description 用于展示 icons 图标
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=28
-	 * @property {Number} size 图标大小
-	 * @property {String} type 图标图案,参考示例
-	 * @property {String} color 图标颜色
-	 * @property {String} customPrefix 自定义图标
-	 * @event {Function} click 点击 Icon 触发事件
-	 */
-	export default {
-		name: 'UniIcons',
-		emits:['click'],
-		props: {
-			type: {
-				type: String,
-				default: ''
-			},
-			color: {
-				type: String,
-				default: '#333333'
-			},
-			size: {
-				type: [Number, String],
-				default: 16
-			},
-			customPrefix:{
-				type: String,
-				default: ''
-			}
-		},
-		data() {
-			return {
-				icons: icons.glyphs
-			}
-		},
-		computed:{
-			unicode(){
-				let code = this.icons.find(v=>v.font_class === this.type)
-				if(code){
-					return unescape(`%u${code.unicode}`)
-				}
-				return ''
-			},
-			iconSize(){
-				return getVal(this.size)
-			}
-		},
-		methods: {
-			_onClick() {
-				this.$emit('click')
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	/* #ifndef APP-NVUE */
-	@import './uniicons.css';
-	@font-face {
-		font-family: uniicons;
-		src: url('./uniicons.ttf') format('truetype');
-	}
-
-	/* #endif */
-	.uni-icons {
-		font-family: uniicons;
-		text-decoration: none;
-		text-align: center;
-	}
-
-</style>

+ 0 - 663
sleep/uni_modules/uni-icons/components/uni-icons/uniicons.css

@@ -1,663 +0,0 @@
-.uniui-color:before {
-  content: "\e6cf";
-}
-
-.uniui-wallet:before {
-  content: "\e6b1";
-}
-
-.uniui-settings-filled:before {
-  content: "\e6ce";
-}
-
-.uniui-auth-filled:before {
-  content: "\e6cc";
-}
-
-.uniui-shop-filled:before {
-  content: "\e6cd";
-}
-
-.uniui-staff-filled:before {
-  content: "\e6cb";
-}
-
-.uniui-vip-filled:before {
-  content: "\e6c6";
-}
-
-.uniui-plus-filled:before {
-  content: "\e6c7";
-}
-
-.uniui-folder-add-filled:before {
-  content: "\e6c8";
-}
-
-.uniui-color-filled:before {
-  content: "\e6c9";
-}
-
-.uniui-tune-filled:before {
-  content: "\e6ca";
-}
-
-.uniui-calendar-filled:before {
-  content: "\e6c0";
-}
-
-.uniui-notification-filled:before {
-  content: "\e6c1";
-}
-
-.uniui-wallet-filled:before {
-  content: "\e6c2";
-}
-
-.uniui-medal-filled:before {
-  content: "\e6c3";
-}
-
-.uniui-gift-filled:before {
-  content: "\e6c4";
-}
-
-.uniui-fire-filled:before {
-  content: "\e6c5";
-}
-
-.uniui-refreshempty:before {
-  content: "\e6bf";
-}
-
-.uniui-location-filled:before {
-  content: "\e6af";
-}
-
-.uniui-person-filled:before {
-  content: "\e69d";
-}
-
-.uniui-personadd-filled:before {
-  content: "\e698";
-}
-
-.uniui-back:before {
-  content: "\e6b9";
-}
-
-.uniui-forward:before {
-  content: "\e6ba";
-}
-
-.uniui-arrow-right:before {
-  content: "\e6bb";
-}
-
-.uniui-arrowthinright:before {
-  content: "\e6bb";
-}
-
-.uniui-arrow-left:before {
-  content: "\e6bc";
-}
-
-.uniui-arrowthinleft:before {
-  content: "\e6bc";
-}
-
-.uniui-arrow-up:before {
-  content: "\e6bd";
-}
-
-.uniui-arrowthinup:before {
-  content: "\e6bd";
-}
-
-.uniui-arrow-down:before {
-  content: "\e6be";
-}
-
-.uniui-arrowthindown:before {
-  content: "\e6be";
-}
-
-.uniui-bottom:before {
-  content: "\e6b8";
-}
-
-.uniui-arrowdown:before {
-  content: "\e6b8";
-}
-
-.uniui-right:before {
-  content: "\e6b5";
-}
-
-.uniui-arrowright:before {
-  content: "\e6b5";
-}
-
-.uniui-top:before {
-  content: "\e6b6";
-}
-
-.uniui-arrowup:before {
-  content: "\e6b6";
-}
-
-.uniui-left:before {
-  content: "\e6b7";
-}
-
-.uniui-arrowleft:before {
-  content: "\e6b7";
-}
-
-.uniui-eye:before {
-  content: "\e651";
-}
-
-.uniui-eye-filled:before {
-  content: "\e66a";
-}
-
-.uniui-eye-slash:before {
-  content: "\e6b3";
-}
-
-.uniui-eye-slash-filled:before {
-  content: "\e6b4";
-}
-
-.uniui-info-filled:before {
-  content: "\e649";
-}
-
-.uniui-reload:before {
-  content: "\e6b2";
-}
-
-.uniui-micoff-filled:before {
-  content: "\e6b0";
-}
-
-.uniui-map-pin-ellipse:before {
-  content: "\e6ac";
-}
-
-.uniui-map-pin:before {
-  content: "\e6ad";
-}
-
-.uniui-location:before {
-  content: "\e6ae";
-}
-
-.uniui-starhalf:before {
-  content: "\e683";
-}
-
-.uniui-star:before {
-  content: "\e688";
-}
-
-.uniui-star-filled:before {
-  content: "\e68f";
-}
-
-.uniui-calendar:before {
-  content: "\e6a0";
-}
-
-.uniui-fire:before {
-  content: "\e6a1";
-}
-
-.uniui-medal:before {
-  content: "\e6a2";
-}
-
-.uniui-font:before {
-  content: "\e6a3";
-}
-
-.uniui-gift:before {
-  content: "\e6a4";
-}
-
-.uniui-link:before {
-  content: "\e6a5";
-}
-
-.uniui-notification:before {
-  content: "\e6a6";
-}
-
-.uniui-staff:before {
-  content: "\e6a7";
-}
-
-.uniui-vip:before {
-  content: "\e6a8";
-}
-
-.uniui-folder-add:before {
-  content: "\e6a9";
-}
-
-.uniui-tune:before {
-  content: "\e6aa";
-}
-
-.uniui-auth:before {
-  content: "\e6ab";
-}
-
-.uniui-person:before {
-  content: "\e699";
-}
-
-.uniui-email-filled:before {
-  content: "\e69a";
-}
-
-.uniui-phone-filled:before {
-  content: "\e69b";
-}
-
-.uniui-phone:before {
-  content: "\e69c";
-}
-
-.uniui-email:before {
-  content: "\e69e";
-}
-
-.uniui-personadd:before {
-  content: "\e69f";
-}
-
-.uniui-chatboxes-filled:before {
-  content: "\e692";
-}
-
-.uniui-contact:before {
-  content: "\e693";
-}
-
-.uniui-chatbubble-filled:before {
-  content: "\e694";
-}
-
-.uniui-contact-filled:before {
-  content: "\e695";
-}
-
-.uniui-chatboxes:before {
-  content: "\e696";
-}
-
-.uniui-chatbubble:before {
-  content: "\e697";
-}
-
-.uniui-upload-filled:before {
-  content: "\e68e";
-}
-
-.uniui-upload:before {
-  content: "\e690";
-}
-
-.uniui-weixin:before {
-  content: "\e691";
-}
-
-.uniui-compose:before {
-  content: "\e67f";
-}
-
-.uniui-qq:before {
-  content: "\e680";
-}
-
-.uniui-download-filled:before {
-  content: "\e681";
-}
-
-.uniui-pyq:before {
-  content: "\e682";
-}
-
-.uniui-sound:before {
-  content: "\e684";
-}
-
-.uniui-trash-filled:before {
-  content: "\e685";
-}
-
-.uniui-sound-filled:before {
-  content: "\e686";
-}
-
-.uniui-trash:before {
-  content: "\e687";
-}
-
-.uniui-videocam-filled:before {
-  content: "\e689";
-}
-
-.uniui-spinner-cycle:before {
-  content: "\e68a";
-}
-
-.uniui-weibo:before {
-  content: "\e68b";
-}
-
-.uniui-videocam:before {
-  content: "\e68c";
-}
-
-.uniui-download:before {
-  content: "\e68d";
-}
-
-.uniui-help:before {
-  content: "\e679";
-}
-
-.uniui-navigate-filled:before {
-  content: "\e67a";
-}
-
-.uniui-plusempty:before {
-  content: "\e67b";
-}
-
-.uniui-smallcircle:before {
-  content: "\e67c";
-}
-
-.uniui-minus-filled:before {
-  content: "\e67d";
-}
-
-.uniui-micoff:before {
-  content: "\e67e";
-}
-
-.uniui-closeempty:before {
-  content: "\e66c";
-}
-
-.uniui-clear:before {
-  content: "\e66d";
-}
-
-.uniui-navigate:before {
-  content: "\e66e";
-}
-
-.uniui-minus:before {
-  content: "\e66f";
-}
-
-.uniui-image:before {
-  content: "\e670";
-}
-
-.uniui-mic:before {
-  content: "\e671";
-}
-
-.uniui-paperplane:before {
-  content: "\e672";
-}
-
-.uniui-close:before {
-  content: "\e673";
-}
-
-.uniui-help-filled:before {
-  content: "\e674";
-}
-
-.uniui-paperplane-filled:before {
-  content: "\e675";
-}
-
-.uniui-plus:before {
-  content: "\e676";
-}
-
-.uniui-mic-filled:before {
-  content: "\e677";
-}
-
-.uniui-image-filled:before {
-  content: "\e678";
-}
-
-.uniui-locked-filled:before {
-  content: "\e668";
-}
-
-.uniui-info:before {
-  content: "\e669";
-}
-
-.uniui-locked:before {
-  content: "\e66b";
-}
-
-.uniui-camera-filled:before {
-  content: "\e658";
-}
-
-.uniui-chat-filled:before {
-  content: "\e659";
-}
-
-.uniui-camera:before {
-  content: "\e65a";
-}
-
-.uniui-circle:before {
-  content: "\e65b";
-}
-
-.uniui-checkmarkempty:before {
-  content: "\e65c";
-}
-
-.uniui-chat:before {
-  content: "\e65d";
-}
-
-.uniui-circle-filled:before {
-  content: "\e65e";
-}
-
-.uniui-flag:before {
-  content: "\e65f";
-}
-
-.uniui-flag-filled:before {
-  content: "\e660";
-}
-
-.uniui-gear-filled:before {
-  content: "\e661";
-}
-
-.uniui-home:before {
-  content: "\e662";
-}
-
-.uniui-home-filled:before {
-  content: "\e663";
-}
-
-.uniui-gear:before {
-  content: "\e664";
-}
-
-.uniui-smallcircle-filled:before {
-  content: "\e665";
-}
-
-.uniui-map-filled:before {
-  content: "\e666";
-}
-
-.uniui-map:before {
-  content: "\e667";
-}
-
-.uniui-refresh-filled:before {
-  content: "\e656";
-}
-
-.uniui-refresh:before {
-  content: "\e657";
-}
-
-.uniui-cloud-upload:before {
-  content: "\e645";
-}
-
-.uniui-cloud-download-filled:before {
-  content: "\e646";
-}
-
-.uniui-cloud-download:before {
-  content: "\e647";
-}
-
-.uniui-cloud-upload-filled:before {
-  content: "\e648";
-}
-
-.uniui-redo:before {
-  content: "\e64a";
-}
-
-.uniui-images-filled:before {
-  content: "\e64b";
-}
-
-.uniui-undo-filled:before {
-  content: "\e64c";
-}
-
-.uniui-more:before {
-  content: "\e64d";
-}
-
-.uniui-more-filled:before {
-  content: "\e64e";
-}
-
-.uniui-undo:before {
-  content: "\e64f";
-}
-
-.uniui-images:before {
-  content: "\e650";
-}
-
-.uniui-paperclip:before {
-  content: "\e652";
-}
-
-.uniui-settings:before {
-  content: "\e653";
-}
-
-.uniui-search:before {
-  content: "\e654";
-}
-
-.uniui-redo-filled:before {
-  content: "\e655";
-}
-
-.uniui-list:before {
-  content: "\e644";
-}
-
-.uniui-mail-open-filled:before {
-  content: "\e63a";
-}
-
-.uniui-hand-down-filled:before {
-  content: "\e63c";
-}
-
-.uniui-hand-down:before {
-  content: "\e63d";
-}
-
-.uniui-hand-up-filled:before {
-  content: "\e63e";
-}
-
-.uniui-hand-up:before {
-  content: "\e63f";
-}
-
-.uniui-heart-filled:before {
-  content: "\e641";
-}
-
-.uniui-mail-open:before {
-  content: "\e643";
-}
-
-.uniui-heart:before {
-  content: "\e639";
-}
-
-.uniui-loop:before {
-  content: "\e633";
-}
-
-.uniui-pulldown:before {
-  content: "\e632";
-}
-
-.uniui-scan:before {
-  content: "\e62a";
-}
-
-.uniui-bars:before {
-  content: "\e627";
-}
-
-.uniui-cart-filled:before {
-  content: "\e629";
-}
-
-.uniui-checkbox:before {
-  content: "\e62b";
-}
-
-.uniui-checkbox-filled:before {
-  content: "\e62c";
-}
-
-.uniui-shop:before {
-  content: "\e62f";
-}
-
-.uniui-headphones:before {
-  content: "\e630";
-}
-
-.uniui-cart:before {
-  content: "\e631";
-}

BIN
sleep/uni_modules/uni-icons/components/uni-icons/uniicons.ttf


+ 0 - 86
sleep/uni_modules/uni-icons/package.json

@@ -1,86 +0,0 @@
-{
-  "id": "uni-icons",
-  "displayName": "uni-icons 图标",
-  "version": "1.3.5",
-  "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
-  "keywords": [
-    "uni-ui",
-    "uniui",
-    "icon",
-    "图标"
-],
-  "repository": "https://github.com/dcloudio/uni-ui",
-  "engines": {
-    "HBuilderX": "^3.2.14"
-  },
-  "directories": {
-    "example": "../../temps/example_temps"
-  },
-  "dcloudext": {
-    "category": [
-      "前端组件",
-      "通用组件"
-    ],
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
-  },
-  "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 - 8
sleep/uni_modules/uni-icons/readme.md

@@ -1,8 +0,0 @@
-## Icons 图标
-> **组件名:uni-icons**
-> 代码块: `uIcons`
-
-用于展示 icons 图标 。
-
-### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons)
-#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 0 - 16
sleep/uni_modules/uni-steps/changelog.md

@@ -1,16 +0,0 @@
-## 1.1.1(2021-11-22)
-- 修复 vue3中某些scss变量无法找到的问题
-## 1.1.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-steps](https://uniapp.dcloud.io/component/uniui/uni-steps)
-## 1.0.8(2021-05-12)
-- 新增 项目示例地址
-## 1.0.7(2021-05-06)
-- 修复 uni-steps 横向布局时,多行文字高度不合理的 bug
-## 1.0.6(2021-04-21)
-- 优化 添加依赖 uni-icons, 导入后自动下载依赖
-## 1.0.5(2021-02-05)
-- 优化 组件引用关系,通过uni_modules引用组件
-
-## 1.0.4(2021-02-05)
-- 调整为uni_modules目录规范

+ 0 - 269
sleep/uni_modules/uni-steps/components/uni-steps/uni-steps.vue

@@ -1,269 +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']">
-					<text :style="{color:index === active?activeColor:deactiveColor}"
-						:class="[direction==='column'?'uni-steps__column-title':'uni-steps__row-title']">{{item.title}}</text>
-					<text :style="{color: 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="activeIcon" size="14"></uni-icons>
-					</view>
-					<view v-else :class="[direction==='column'?'uni-steps__column-circle':'uni-steps__row-circle']"
-						: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?id=34
-	 * @property {Number} active 当前步骤
-	 * @property {String} direction = [row|column] 当前步骤
-	 * 	@value row 横向
-	 * 	@value column 纵向
-	 * @property {String} activeColor 选中状态的颜色
-	 * @property {Array} options 数据源,格式为:[{title:'xxx',desc:'xxx'},{title:'xxx',desc:'xxx'}]
-	 */
-
-	export default {
-		name: 'UniSteps',
-		props: {
-			direction: {
-				// 排列方向 row column
-				type: String,
-				default: 'row'
-			},
-			activeColor: {
-				// 激活状态颜色
-				type: String,
-				default: '#2979FF'
-			},
-			deactiveColor: {
-				// 未激活状态颜色
-				type: String,
-				default: '#B7BDC6'
-			},
-			active: {
-				// 当前步骤
-				type: Number,
-				default: 0
-			},
-			activeIcon: {
-				// 当前步骤
-				type: String,
-				default: 'checkbox-filled'
-			},
-			options: {
-				type: Array,
-				default () {
-					return []
-				}
-			} // 数据
-		},
-		data() {
-			return {}
-		}
-	}
-</script>
-
-<style lang="scss">
-	$uni-primary: #2979ff !default;
-	$uni-border-color:#EDEDED;
-	.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-style: solid;
-		border-bottom-width: 1px;
-		border-bottom-color: $uni-border-color;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-	}
-
-	.uni-steps__row-title {
-		font-size: 14px;
-		line-height: 16px;
-		text-align: center;
-	}
-
-	.uni-steps__column-title {
-		font-size: 14px;
-		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: 12px;
-		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: #B7BDC6;
-	}
-
-	.uni-steps__column-line {
-		width: 1px;
-		background-color: #B7BDC6;
-	}
-
-	.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, -13px);
-	}
-
-	.uni-steps__row-circle {
-		width: 5px;
-		height: 5px;
-		border-radius: 50%;
-		background-color: #B7BDC6;
-		margin: 0px 3px;
-	}
-
-	.uni-steps__column-circle {
-		width: 5px;
-		height: 5px;
-		border-radius: 50%;
-		background-color: #B7BDC6;
-		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 - 89
sleep/uni_modules/uni-steps/package.json

@@ -1,89 +0,0 @@
-{
-  "id": "uni-steps",
-  "displayName": "uni-steps 步骤条",
-  "version": "1.1.1",
-  "description": "步骤条组件,提供横向和纵向两种布局格式。",
-  "keywords": [
-    "uni-ui",
-    "uniui",
-    "步骤条",
-    "时间轴"
-],
-  "repository": "https://github.com/dcloudio/uni-ui",
-  "engines": {
-    "HBuilderX": ""
-  },
-  "directories": {
-    "example": "../../temps/example_temps"
-  },
-  "dcloudext": {
-    "category": [
-      "前端组件",
-      "通用组件"
-    ],
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
-  },
-  "uni_modules": {
-    "dependencies": [
-			"uni-scss",
-			"uni-icons"
-		],
-    "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 - 13
sleep/uni_modules/uni-steps/readme.md

@@ -1,13 +0,0 @@
-
-
-## Steps 步骤条
-> **组件名:uni-steps**
-> 代码块: `uSteps`
-
-
-步骤条,常用于显示进度
-
-### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-steps)
-#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
-
-

+ 4 - 4
sleep/utils/request.js

@@ -9,10 +9,10 @@ import checkToken from '@/utils/checkToken'
 const api_mode = 'prod'
 
 export const API = {
-	base: 'https://api.base.wdklian.com',
-	buyer: 'https://api.buyer.wdklian.com',
-	// base: 'http://192.168.1.199:7000',
-	// buyer: 'http://192.168.1.199:7002'
+	// base: 'https://api.base.wdklian.com',
+	// buyer: 'https://api.buyer.wdklian.com',
+	base: 'http://192.168.1.199:7000',
+	buyer: 'http://192.168.1.199:7002'
 }
 
 const config = {