Compare commits
	
		
			9 Commits
		
	
	
		
			7c6e881e03
			...
			2fa219cfe0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2fa219cfe0 | |||
| 6dcbf07b54 | |||
| 8733d995ec | |||
| 5c7d95a2be | |||
| 40bf8f8433 | |||
| e31e6d8fc5 | |||
| eef9377e02 | |||
| 3579868cc7 | |||
| dc946ec669 | 
							
								
								
									
										2
									
								
								App.vue
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								App.vue
									
									
									
									
									
								
							@@ -34,6 +34,8 @@
 | 
				
			|||||||
		 		// sHeight.value = res.screenHeight
 | 
							 		// sHeight.value = res.screenHeight
 | 
				
			||||||
		 	}
 | 
							 	}
 | 
				
			||||||
		 })
 | 
							 })
 | 
				
			||||||
 | 
							 // 获取测试结果背景图
 | 
				
			||||||
 | 
							store.getBgList()
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<style lang="scss">
 | 
					<style lang="scss">
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								api/index.js
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								api/index.js
									
									
									
									
									
								
							@@ -7,18 +7,24 @@ const API = {
 | 
				
			|||||||
	wx_login: (data,userId) => net.POST('/user/binding/wechat',data,true,{"userId":userId}), // 微信登录
 | 
						wx_login: (data,userId) => net.POST('/user/binding/wechat',data,true,{"userId":userId}), // 微信登录
 | 
				
			||||||
	// upload: (data) => net.POST('/user/upload',data), // 文件上传
 | 
						// upload: (data) => net.POST('/user/upload',data), // 文件上传
 | 
				
			||||||
	userinfoUpdae:data => net.PUT('/user/info',data,true,{"Content-Type":"application/x-www-form-urlencoded"}), // 更新用户信息
 | 
						userinfoUpdae:data => net.PUT('/user/info',data,true,{"Content-Type":"application/x-www-form-urlencoded"}), // 更新用户信息
 | 
				
			||||||
 | 
						// ai 客服
 | 
				
			||||||
 | 
						getAikefuList:data => net.GET('/akefu/list',data), // 获取获取客服列表
 | 
				
			||||||
 | 
						getReply:data => net.POST('/ai',data), // 获取客服回复
 | 
				
			||||||
	// 首页
 | 
						// 首页
 | 
				
			||||||
	getHospitalList:data => net.GET('/hospital/list',data), // 获取医院信息
 | 
						getHospitalList:data => net.GET('/hospital/list',data), // 获取医院信息
 | 
				
			||||||
	saveVision:data => net.POST("/vision",data),// 保存视力测试结果
 | 
						saveVision:data => net.POST("/vision",data),// 保存视力测试结果
 | 
				
			||||||
	getLbtList:data => net.GET("/banner/list",data),// 获取轮播图
 | 
						getLbtList:data => net.GET("/banner/list",data),// 获取轮播图
 | 
				
			||||||
	hospital:data => net.PUT("/user/hospital",data),// 修改医院信息
 | 
						hospital:data => net.PUT("/user/hospital",data),// 修改医院信息
 | 
				
			||||||
	getHospitalInfo:id => net.GET("/hospital/"+id),// 根据ID获取医院信息
 | 
						getHospitalInfo:id => net.GET("/hospital/"+id),// 根据ID获取医院信息
 | 
				
			||||||
	getTodoist:data => net.GET("/user/todo",data),// 获取待办事项
 | 
						getHospitalInfo2:data => net.GET("/hospital/notes",data),// 根据ID获取医院信息222
 | 
				
			||||||
 | 
						getTodoist:(data,userId) => net.GET("/user/todo",data,true,{"userId":userId}),// 获取待办事项
 | 
				
			||||||
	getVisionList:data => net.GET("/vision/list",data),// 获取测试记录
 | 
						getVisionList:data => net.GET("/vision/list",data),// 获取测试记录
 | 
				
			||||||
	todoFinished:data => net.PUT("/user/todo",data),// 修改待办列表状态
 | 
						todoFinished:data => net.PUT("/user/todo",data),// 修改待办列表状态
 | 
				
			||||||
	// 百科
 | 
						// 百科
 | 
				
			||||||
	getArticleList:data => net.GET("/article/list",data),// 百科列表
 | 
						getArticleList:data => net.GET("/article/list",data),// 百科列表
 | 
				
			||||||
	getArticleDetail:data => net.GET("/article/"+data.id),// 文章详情
 | 
						getArticleDetail:(data,userId) => net.GET("/article/"+data.id,null,true,{"userId":userId}),// 文章详情
 | 
				
			||||||
 | 
						getArticleFavorite:(data,userId) => net.POST("/favorite",data,true,{"userId":userId}),// 收藏文章
 | 
				
			||||||
 | 
						delArticleFavorite:(data,userId) => net.DELETE("/favorite",data,true,{"userId":userId}),// 取消收藏文章
 | 
				
			||||||
	// 我的
 | 
						// 我的
 | 
				
			||||||
	getStarList:data => net.GET("/favorite/list",data),// 收藏列表
 | 
						getStarList:data => net.GET("/favorite/list",data),// 收藏列表
 | 
				
			||||||
	/* 
 | 
						/* 
 | 
				
			||||||
@@ -37,6 +43,7 @@ const API = {
 | 
				
			|||||||
	getCategoryList:data => net.GET('/api/goods_category/lists'), // 获取商品分类
 | 
						getCategoryList:data => net.GET('/api/goods_category/lists'), // 获取商品分类
 | 
				
			||||||
	getCategory:data => net.GET('/api/goods/category',data), // 根据分类Id获取分类商品
 | 
						getCategory:data => net.GET('/api/goods/category',data), // 根据分类Id获取分类商品
 | 
				
			||||||
	getCartList:data => net.GET('/api/cart/lists',data), // 获取购物车列表
 | 
						getCartList:data => net.GET('/api/cart/lists',data), // 获取购物车列表
 | 
				
			||||||
 | 
						getBgList:data => net.GET('/poster/list',data), // 获取测试结果背景图列表
 | 
				
			||||||
	addCart:data => net.POST('/api/cart/add',data), // 加入购物车
 | 
						addCart:data => net.POST('/api/cart/add',data), // 加入购物车
 | 
				
			||||||
	delCart:data => net.POST('/api/cart/delete',data), // 删除购物车
 | 
						delCart:data => net.POST('/api/cart/delete',data), // 删除购物车
 | 
				
			||||||
	updateCart:data => net.POST('/api/cart/edit',data), // 更新购物车
 | 
						updateCart:data => net.POST('/api/cart/edit',data), // 更新购物车
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,8 @@
 | 
				
			|||||||
import config from '../config'
 | 
					import config from '../config'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// import store from '../store'
 | 
					// import {useStore} from '@/store/index.js'
 | 
				
			||||||
 | 
					// console.log(useStore)
 | 
				
			||||||
 | 
					// const store = useStore()
 | 
				
			||||||
const loginUrl = 'pages/user/login';
 | 
					const loginUrl = 'pages/user/login';
 | 
				
			||||||
// function JSON_to_URLEncoded(element,key,list){
 | 
					// function JSON_to_URLEncoded(element,key,list){
 | 
				
			||||||
//   var list = list || [];
 | 
					//   var list = list || [];
 | 
				
			||||||
@@ -75,6 +76,20 @@ export default {
 | 
				
			|||||||
						});
 | 
											});
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
									// if(res.data.code === 7) { // 登录失败
 | 
				
			||||||
 | 
									// 	uni.showToast({
 | 
				
			||||||
 | 
									// 		title:res.msg,
 | 
				
			||||||
 | 
									// 		icon:"error",
 | 
				
			||||||
 | 
									// 		duration:2000,
 | 
				
			||||||
 | 
									// 		mask:true,
 | 
				
			||||||
 | 
									// 		success() {
 | 
				
			||||||
 | 
									// 			if(res.code === 7) // 登录失败
 | 
				
			||||||
 | 
									// 			{
 | 
				
			||||||
 | 
									// 				store.afterFailLogin(2000)
 | 
				
			||||||
 | 
									// 			}
 | 
				
			||||||
 | 
									// 		}
 | 
				
			||||||
 | 
									// 	})
 | 
				
			||||||
 | 
									// }	
 | 
				
			||||||
				return res.data;
 | 
									return res.data;
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				const reg = /abort/;
 | 
									const reg = /abort/;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										47
									
								
								components/aikefu.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								components/aikefu.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<view class="aikefuBox">
 | 
				
			||||||
 | 
							<!-- 这是ai客服!!!! -->
 | 
				
			||||||
 | 
							<unFab ref="fab" :pattern="pattern"  horizontal="left" vertical="bottom"
 | 
				
			||||||
 | 
										direction="horizontal" @fabClick="fabClick" />
 | 
				
			||||||
 | 
						</view>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script setup>
 | 
				
			||||||
 | 
						import unFab from '@/uni_modules/uni-fab/components/uni-fab/uni-fab.vue' 
 | 
				
			||||||
 | 
						import { onLoad } from "@dcloudio/uni-app"
 | 
				
			||||||
 | 
						// import mySwiper from "@/components/mySwiper.vue"
 | 
				
			||||||
 | 
						import {ref,onMounted,nextTick,computed} from "vue"
 | 
				
			||||||
 | 
						// import unCombox from '@/uni_modules/uni-combox/components/uni-combox/uni-combox.vue' 
 | 
				
			||||||
 | 
						import {useStore} from '@/store/index.js'
 | 
				
			||||||
 | 
						const store = useStore()
 | 
				
			||||||
 | 
						import api from "@/api/index.js"
 | 
				
			||||||
 | 
						const pattern = ref({
 | 
				
			||||||
 | 
							color: '#7A7E83',
 | 
				
			||||||
 | 
							backgroundColor: '#fff',
 | 
				
			||||||
 | 
							selectedColor: '#26758d',
 | 
				
			||||||
 | 
							buttonColor: '#26758d',
 | 
				
			||||||
 | 
							iconColor: '#fff',
 | 
				
			||||||
 | 
							icon:'headphones'
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						// const content = ref([{
 | 
				
			||||||
 | 
						// 		iconPath: '/static/image.png',
 | 
				
			||||||
 | 
						// 		selectedIconPath: '/static/image-active.png',
 | 
				
			||||||
 | 
						// 		text: '相册',
 | 
				
			||||||
 | 
						// 		active: false
 | 
				
			||||||
 | 
						// 	}])
 | 
				
			||||||
 | 
						function fabClick() {
 | 
				
			||||||
 | 
							// uni.showToast({
 | 
				
			||||||
 | 
							// 	title: '点击了悬浮按钮',
 | 
				
			||||||
 | 
							// 	icon: 'none'
 | 
				
			||||||
 | 
							// })
 | 
				
			||||||
 | 
							uni.navigateTo({
 | 
				
			||||||
 | 
								url:"/pages/index/aikefu"
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style scoped lang="scss">
 | 
				
			||||||
 | 
						.aikefuBox{
 | 
				
			||||||
 | 
							margin-top: 200rpx;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
// isdev 为 true 表示开发环境 false 表示发布环境
 | 
					// isdev 为 true 表示开发环境 false 表示发布环境
 | 
				
			||||||
const isdev = true;
 | 
					const isdev = true;
 | 
				
			||||||
const baseUrl = isdev ? 'http://4ca5004.r15.cpolar.top' : 'http://eb467b6.r19.cpolar.top';// 办公室接口 & 测试环境
 | 
					const baseUrl = isdev ? 'https://api.jimingyiliao.com' : 'http://eb467b6.r19.cpolar.top';// 办公室接口 & 测试环境
 | 
				
			||||||
 | 
					// const baseUrl = isdev ? 'http://707788f2.r1.cpolar.top' : 'http://eb467b6.r19.cpolar.top';// 办公室接口 & 测试环境
 | 
				
			||||||
// const baseUrl = isdev ? 'http://192.168.1.133:8899' : 'https://api.gwkjxb.com';// 办公室接口 & 正式环境
 | 
					// const baseUrl = isdev ? 'http://192.168.1.133:8899' : 'https://api.gwkjxb.com';// 办公室接口 & 正式环境
 | 
				
			||||||
// const baseUrl = 'https://api.gwkjxb.com';// 正式环境(由于本地测试后台没有启动,暂时通用正式服)
 | 
					// const baseUrl = 'https://api.gwkjxb.com';// 正式环境(由于本地测试后台没有启动,暂时通用正式服)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								pages.json
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								pages.json
									
									
									
									
									
								
							@@ -110,7 +110,17 @@
 | 
				
			|||||||
			"style": {
 | 
								"style": {
 | 
				
			||||||
				"navigationBarTitleText": "关于我们"
 | 
									"navigationBarTitleText": "关于我们"
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},{
 | 
				
			||||||
 | 
								"path": "pages/index/aikefu",
 | 
				
			||||||
 | 
								"style": {
 | 
				
			||||||
 | 
									"navigationBarTitleText": "客服中心"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},{
 | 
				
			||||||
 | 
								"path": "pages/index/result",
 | 
				
			||||||
 | 
								"style": {
 | 
				
			||||||
 | 
									"navigationBarTitleText": "测试结果"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	],
 | 
						],
 | 
				
			||||||
	"globalStyle": {
 | 
						"globalStyle": {
 | 
				
			||||||
		"navigationBarTextStyle": "white",
 | 
							"navigationBarTextStyle": "white",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										203
									
								
								pages/index/aikefu.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										203
									
								
								pages/index/aikefu.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,203 @@
 | 
				
			|||||||
 | 
					<script setup>
 | 
				
			||||||
 | 
						// 引入依赖
 | 
				
			||||||
 | 
						import uniDatetimePicker from '@/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue' 
 | 
				
			||||||
 | 
						import uniEasyinput from '@/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue' 
 | 
				
			||||||
 | 
						// import unCombox from '@/uni_modules/uni-combox/components/uni-combox/uni-combox.vue' 
 | 
				
			||||||
 | 
						import { onLoad,onShow  } from "@dcloudio/uni-app"
 | 
				
			||||||
 | 
						import mySwiper from "@/components/mySwiper.vue"
 | 
				
			||||||
 | 
						import aikefu from "@/components/aikefu.vue"
 | 
				
			||||||
 | 
						import {ref,onMounted,nextTick,watch,getCurrentInstance} from "vue"
 | 
				
			||||||
 | 
						import api from '@/api/index.js'
 | 
				
			||||||
 | 
						import {useStore} from '@/store/index.js'
 | 
				
			||||||
 | 
						// import uniIcons from '@/uni_modules/uni-icons/components/uni-icons/uni-icons.vue' 
 | 
				
			||||||
 | 
						const store = useStore()
 | 
				
			||||||
 | 
						onLoad((e) => {
 | 
				
			||||||
 | 
							uni.createSelectorQuery().in(instance).select('.show-part').boundingClientRect((res)=>{
 | 
				
			||||||
 | 
								w_h.value = res.height
 | 
				
			||||||
 | 
								// console.log(res)
 | 
				
			||||||
 | 
							}).exec()
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						// 变量
 | 
				
			||||||
 | 
						const w_h = ref(0)
 | 
				
			||||||
 | 
						const records = ref([
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								content:'您好,很高兴为您服务!',
 | 
				
			||||||
 | 
								type:1,//1-客服;2-我
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						])
 | 
				
			||||||
 | 
						const scrollContainer = ref()
 | 
				
			||||||
 | 
						const in_content = ref('')
 | 
				
			||||||
 | 
						const scrollTop = ref(0.01) //注意:不要设置成0,不然无效
 | 
				
			||||||
 | 
						const instance = getCurrentInstance(); // 获取组件实例
 | 
				
			||||||
 | 
						const is_loading = ref(false)
 | 
				
			||||||
 | 
						// 函数
 | 
				
			||||||
 | 
						async function sendFunc() {
 | 
				
			||||||
 | 
							if(is_loading.value) {
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							is_loading.value = true
 | 
				
			||||||
 | 
							if(!in_content.value) {
 | 
				
			||||||
 | 
								uni.showToast({
 | 
				
			||||||
 | 
									title:"请填写内容",
 | 
				
			||||||
 | 
									icon:'error',
 | 
				
			||||||
 | 
									duration:2000,
 | 
				
			||||||
 | 
									mask:true
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								is_loading.value = false
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							records.value.push({
 | 
				
			||||||
 | 
								content:in_content.value,
 | 
				
			||||||
 | 
								type:2
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							const res = await api.getReply({msg:in_content.value})
 | 
				
			||||||
 | 
							is_loading.value = false
 | 
				
			||||||
 | 
							if(res.code === 0) {
 | 
				
			||||||
 | 
								in_content.value = ''
 | 
				
			||||||
 | 
								// 判断用户输入的关键字是否有效
 | 
				
			||||||
 | 
								if(res.data.content) {
 | 
				
			||||||
 | 
									records.value.push({
 | 
				
			||||||
 | 
										content:res.data.content,
 | 
				
			||||||
 | 
										type:1
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else{
 | 
				
			||||||
 | 
									records.value.push({
 | 
				
			||||||
 | 
										content:'请输入正确的关键词',
 | 
				
			||||||
 | 
										type:-1
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else{
 | 
				
			||||||
 | 
								uni.showToast({
 | 
				
			||||||
 | 
									title:res.msg,
 | 
				
			||||||
 | 
									icon:"error",
 | 
				
			||||||
 | 
									duration:2000
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// 滚动条设置
 | 
				
			||||||
 | 
							uni.createSelectorQuery().in(instance).select('#scroll-view-content').boundingClientRect((res)=>{
 | 
				
			||||||
 | 
								let top = res.height-w_h.value+100;
 | 
				
			||||||
 | 
								if(top>0){
 | 
				
			||||||
 | 
									scrollTop.value = top;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// console.log(res.height,w_h.value)
 | 
				
			||||||
 | 
							}).exec()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<view class="aikefuBox page-box page-bg-gray" style="height: 100%;">
 | 
				
			||||||
 | 
							<!-- 信息展示区域 -->
 | 
				
			||||||
 | 
							<!-- <view class="ac-part show-part" id="show-part" ref="scrollContainer" :style="{scrollTop:scrollTop}"> -->
 | 
				
			||||||
 | 
									<scroll-view :scroll-with-animation="true" :scroll-y="true" class="ac-part show-part" scroll-y="true" :scroll-top="scrollTop">
 | 
				
			||||||
 | 
										<view class="ac-listt-box" id="scroll-view-content">
 | 
				
			||||||
 | 
											<view class="r_list-card" v-for="(item,i) in records">
 | 
				
			||||||
 | 
												<view v-if="item.type!=-1" class="r-row" :class="item.type === 1?'row-left':'row-right'">
 | 
				
			||||||
 | 
													<view class="r-avatar" v-if="item.type === 1">
 | 
				
			||||||
 | 
														<image src="../../static/kefu.png" mode="widthFix"></image>
 | 
				
			||||||
 | 
													</view>
 | 
				
			||||||
 | 
													<view class="r-content" :class="{'r-content-right':item.type==2}">{{item.content}}</view>
 | 
				
			||||||
 | 
												</view>
 | 
				
			||||||
 | 
												<!-- 错误提示 -->
 | 
				
			||||||
 | 
												<view class="r-row wrong-text" v-if="item.type==-1" style="color: #bfbfbf;text-align: center">
 | 
				
			||||||
 | 
													{{item.content}}
 | 
				
			||||||
 | 
												</view>
 | 
				
			||||||
 | 
											</view>
 | 
				
			||||||
 | 
										</view>
 | 
				
			||||||
 | 
									</scroll-view>
 | 
				
			||||||
 | 
							<!-- </view> -->
 | 
				
			||||||
 | 
							<!-- 输入区域 -->
 | 
				
			||||||
 | 
							<view class="as-part input-part">
 | 
				
			||||||
 | 
								<view class="input-box">
 | 
				
			||||||
 | 
									<view class="ib-left">
 | 
				
			||||||
 | 
										<input v-model="in_content" type="text" placeholder="输入您想咨询的内容">
 | 
				
			||||||
 | 
									</view>
 | 
				
			||||||
 | 
									<view class="ib-right">
 | 
				
			||||||
 | 
										<view class="send_btn" @tap="sendFunc">发送</view>
 | 
				
			||||||
 | 
									</view>
 | 
				
			||||||
 | 
								</view>
 | 
				
			||||||
 | 
							</view>
 | 
				
			||||||
 | 
						</view>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					<style scoped lang="scss">
 | 
				
			||||||
 | 
						.aikefuBox{
 | 
				
			||||||
 | 
							height: 100%;
 | 
				
			||||||
 | 
							.show-part{
 | 
				
			||||||
 | 
								height: 88%;
 | 
				
			||||||
 | 
								// overflow-y: auto;
 | 
				
			||||||
 | 
								.ac-listt-box{
 | 
				
			||||||
 | 
									padding: 20rpx;
 | 
				
			||||||
 | 
									.r_list-card{
 | 
				
			||||||
 | 
										margin: 40rpx 0;
 | 
				
			||||||
 | 
										.r-row{
 | 
				
			||||||
 | 
											overflow: hidden;
 | 
				
			||||||
 | 
											.r-avatar{
 | 
				
			||||||
 | 
												float: left;
 | 
				
			||||||
 | 
												width: 80rpx;
 | 
				
			||||||
 | 
												height: 80rpx;
 | 
				
			||||||
 | 
												image{
 | 
				
			||||||
 | 
													width: 100%;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												margin-right: 10rpx;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											.r-content{
 | 
				
			||||||
 | 
												background-color: white;
 | 
				
			||||||
 | 
												display: inline-block;
 | 
				
			||||||
 | 
												padding: 20rpx;
 | 
				
			||||||
 | 
												border-radius:0 20rpx 20rpx 20rpx;
 | 
				
			||||||
 | 
												box-shadow: 10rpx 10rpx 10rpx #efefef;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											.r-content-right{
 | 
				
			||||||
 | 
												float: right;
 | 
				
			||||||
 | 
												border-radius: 20rpx 0 20rpx 20rpx;
 | 
				
			||||||
 | 
												background-color: #26758d;
 | 
				
			||||||
 | 
												color: white;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							.input-part{
 | 
				
			||||||
 | 
								height: 12%;
 | 
				
			||||||
 | 
								background: white;
 | 
				
			||||||
 | 
								position: fixed;
 | 
				
			||||||
 | 
								bottom: 0px;
 | 
				
			||||||
 | 
								width: 100%;
 | 
				
			||||||
 | 
								.input-box{
 | 
				
			||||||
 | 
									padding: 20rpx;
 | 
				
			||||||
 | 
									display: flex;
 | 
				
			||||||
 | 
									align-content: center;
 | 
				
			||||||
 | 
									.ib-left{
 | 
				
			||||||
 | 
										width: 88%;
 | 
				
			||||||
 | 
										margin-right: 20rpx;
 | 
				
			||||||
 | 
										input{
 | 
				
			||||||
 | 
											width: 100%;
 | 
				
			||||||
 | 
											border: 2rpx solid #c3c3c3;
 | 
				
			||||||
 | 
											padding: 10rpx 8rpx;
 | 
				
			||||||
 | 
											border-radius: 20rpx;
 | 
				
			||||||
 | 
											box-sizing: border-box;
 | 
				
			||||||
 | 
											display: block;
 | 
				
			||||||
 | 
											height: 100%;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									.ib-right{
 | 
				
			||||||
 | 
										width: 12%;
 | 
				
			||||||
 | 
										display: flex;
 | 
				
			||||||
 | 
										align-items: center;
 | 
				
			||||||
 | 
										.send_btn{
 | 
				
			||||||
 | 
											padding: 10rpx;
 | 
				
			||||||
 | 
											background: #26758d;
 | 
				
			||||||
 | 
											color: white;
 | 
				
			||||||
 | 
											border-radius: 10rpx;
 | 
				
			||||||
 | 
											width: 100%;
 | 
				
			||||||
 | 
											text-align: center;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							.ac-part{
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@@ -11,8 +11,12 @@
 | 
				
			|||||||
	import uniIcons from '@/uni_modules/uni-icons/components/uni-icons/uni-icons.vue' 
 | 
						import uniIcons from '@/uni_modules/uni-icons/components/uni-icons/uni-icons.vue' 
 | 
				
			||||||
	import ccNewsTabs from '@/uni_modules/cc-newsTabs/components/cc-newsTabs/cc-newsTabs.vue' 
 | 
						import ccNewsTabs from '@/uni_modules/cc-newsTabs/components/cc-newsTabs/cc-newsTabs.vue' 
 | 
				
			||||||
	const store = useStore()
 | 
						const store = useStore()
 | 
				
			||||||
 | 
						import emptyCard from "@/components/emptyCard.vue"
 | 
				
			||||||
	// 生命周期
 | 
						// 生命周期
 | 
				
			||||||
	onLoad((e) => {
 | 
						onLoad((e) => {
 | 
				
			||||||
 | 
							if(uni.getStorageSync('userInfo')) {
 | 
				
			||||||
 | 
								user_info.value = JSON.parse(uni.getStorageSync('userInfo'))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		c_index.value = parseInt(e.state_index)
 | 
							c_index.value = parseInt(e.state_index)
 | 
				
			||||||
		list_box.value[c_index.value].queryParams.isFinish = c_index.value?0:1	
 | 
							list_box.value[c_index.value].queryParams.isFinish = c_index.value?0:1	
 | 
				
			||||||
		if(store.systemInfo) {
 | 
							if(store.systemInfo) {
 | 
				
			||||||
@@ -29,6 +33,7 @@
 | 
				
			|||||||
		getList()
 | 
							getList()
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	// 变量
 | 
						// 变量
 | 
				
			||||||
 | 
						const user_info = ref(null)
 | 
				
			||||||
	const inputDialog = ref()
 | 
						const inputDialog = ref()
 | 
				
			||||||
	const state_index = ref(0)
 | 
						const state_index = ref(0)
 | 
				
			||||||
	const swiper_h = ref(0)
 | 
						const swiper_h = ref(0)
 | 
				
			||||||
@@ -85,12 +90,13 @@
 | 
				
			|||||||
		uni.showLoading({
 | 
							uni.showLoading({
 | 
				
			||||||
			mask:true
 | 
								mask:true
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		const res = await api.getTodoist(list_box.value[c_index.value].queryParams)
 | 
							list_box.value[c_index.value].queryParams.userId = user_info.value?.userId || 0
 | 
				
			||||||
 | 
							const res = await api.getTodoist(list_box.value[c_index.value].queryParams,user_info.value?.userId || 0)
 | 
				
			||||||
		uni.hideLoading();
 | 
							uni.hideLoading();
 | 
				
			||||||
		if(res.code === 0) {
 | 
							if(res.code === 0) {
 | 
				
			||||||
			if(res.data && res.data.length > 0) {
 | 
								if(res.data && res.data.length > 0) {
 | 
				
			||||||
				// list.value.push(...res.data)
 | 
									// list_box.value[c_index.value].list.push(...res.data)
 | 
				
			||||||
				list_box.value[c_index.value].list.push(...res.data)
 | 
									list_box.value[c_index.value].list = res.data
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else{
 | 
								else{
 | 
				
			||||||
				list_box.value[c_index.value].queryParams.page--
 | 
									list_box.value[c_index.value].queryParams.page--
 | 
				
			||||||
@@ -168,7 +174,7 @@
 | 
				
			|||||||
		<swiper :current="c_index" @change="scroll_func" :style="{'--size':swiper_h+'px'}" class="swiper" circular :indicator-dots="false" :autoplay="false" >
 | 
							<swiper :current="c_index" @change="scroll_func" :style="{'--size':swiper_h+'px'}" class="swiper" circular :indicator-dots="false" :autoplay="false" >
 | 
				
			||||||
			<swiper-item v-for="(item1,i1) in list_box">
 | 
								<swiper-item v-for="(item1,i1) in list_box">
 | 
				
			||||||
				<view class="todoBox">
 | 
									<view class="todoBox">
 | 
				
			||||||
					<view v-for="(item,i) in item1.list" @tap="handle_func(item,i)" class="td-item swiper-item uni-bg-green">
 | 
										<view v-for="(item,i) in item1.list" v-if="item1.list.length>0" @tap="handle_func(item,i)" class="td-item swiper-item uni-bg-green">
 | 
				
			||||||
						<view class="td-content text-ellipsis-2">
 | 
											<view class="td-content text-ellipsis-2">
 | 
				
			||||||
							{{item.content}}
 | 
												{{item.content}}
 | 
				
			||||||
						</view>
 | 
											</view>
 | 
				
			||||||
@@ -176,6 +182,7 @@
 | 
				
			|||||||
							{{util.timestampToDate(item.CreatedAt)}}
 | 
												{{util.timestampToDate(item.CreatedAt)}}
 | 
				
			||||||
						</view>
 | 
											</view>
 | 
				
			||||||
					</view>
 | 
										</view>
 | 
				
			||||||
 | 
										<emptyCard v-else></emptyCard>
 | 
				
			||||||
				</view>
 | 
									</view>
 | 
				
			||||||
			</swiper-item>
 | 
								</swiper-item>
 | 
				
			||||||
		</swiper>
 | 
							</swiper>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,23 +5,29 @@
 | 
				
			|||||||
	import unCombox from '@/uni_modules/uni-combox/components/uni-combox/uni-combox.vue' 
 | 
						import unCombox from '@/uni_modules/uni-combox/components/uni-combox/uni-combox.vue' 
 | 
				
			||||||
	import { onLoad,onShow } from "@dcloudio/uni-app"
 | 
						import { onLoad,onShow } from "@dcloudio/uni-app"
 | 
				
			||||||
	import mySwiper from "@/components/mySwiper.vue"
 | 
						import mySwiper from "@/components/mySwiper.vue"
 | 
				
			||||||
 | 
						import aikefu from "@/components/aikefu.vue"
 | 
				
			||||||
	import {ref,onMounted,nextTick,watch} from "vue"
 | 
						import {ref,onMounted,nextTick,watch} from "vue"
 | 
				
			||||||
	import api from '@/api/index.js'
 | 
						import api from '@/api/index.js'
 | 
				
			||||||
	import {useStore} from '@/store/index.js'
 | 
						import {useStore} from '@/store/index.js'
 | 
				
			||||||
	// import uniIcons from '@/uni_modules/uni-icons/components/uni-icons/uni-icons.vue' 
 | 
						// import uniIcons from '@/uni_modules/uni-icons/components/uni-icons/uni-icons.vue' 
 | 
				
			||||||
	const store = useStore()
 | 
						const store = useStore()
 | 
				
			||||||
 | 
						const h_index = ref(0)
 | 
				
			||||||
	onShow((e) => {
 | 
						onShow((e) => {
 | 
				
			||||||
		getLbtList()
 | 
							getLbtList()
 | 
				
			||||||
		if(store.userInfo && !store.operation_info) { //登录过 且 未填写手术信息
 | 
							if(store.userInfo && !store.operation_info) { //登录过 且 未填写手术信息
 | 
				
			||||||
			// getHospitalList()		
 | 
								getHospitalList()		
 | 
				
			||||||
			setTimeout(()=>{
 | 
								setTimeout(()=>{
 | 
				
			||||||
				inputDialog.value.open()
 | 
									inputDialog.value.open()
 | 
				
			||||||
			},0)
 | 
								},0)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							let s = `$http({code:'1s'});if`
 | 
				
			||||||
 | 
							// // let arr = /\$http\((\S*)\)\;if/.exec(s);
 | 
				
			||||||
 | 
							let arr = s.match(/\$http\((.*)\)\;if/)
 | 
				
			||||||
 | 
							console.log(arr[1])
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// 变量
 | 
						// 变量
 | 
				
			||||||
	const hospitals = ref(null)
 | 
						const hospitals = ref([])
 | 
				
			||||||
	// const hospitals_show = ref(false)
 | 
						// const hospitals_show = ref(false)
 | 
				
			||||||
	const inputDialog = ref()
 | 
						const inputDialog = ref()
 | 
				
			||||||
	const inputClose = ref()
 | 
						const inputClose = ref()
 | 
				
			||||||
@@ -47,6 +53,7 @@
 | 
				
			|||||||
		const res = await api.getHospitalList(h_queryParams.value)
 | 
							const res = await api.getHospitalList(h_queryParams.value)
 | 
				
			||||||
		if(res.code == 0) {
 | 
							if(res.code == 0) {
 | 
				
			||||||
			hospitals.value = res.data.list
 | 
								hospitals.value = res.data.list
 | 
				
			||||||
 | 
								console.log(hospitals.value )
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	async function getLbtList() { // 获取轮播图
 | 
						async function getLbtList() { // 获取轮播图
 | 
				
			||||||
@@ -92,7 +99,7 @@
 | 
				
			|||||||
		// blur_h.value = 0
 | 
							// blur_h.value = 0
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	function toBlur(){
 | 
						function toBlur(){
 | 
				
			||||||
		hospitals.value = null
 | 
							// hospitals.value = null
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	async function toSave() {
 | 
						async function toSave() {
 | 
				
			||||||
		if(isSurgery.value == -1) {
 | 
							if(isSurgery.value == -1) {
 | 
				
			||||||
@@ -101,15 +108,17 @@
 | 
				
			|||||||
		if(!surgery_time.value) {
 | 
							if(!surgery_time.value) {
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if(!choosed_h.value || !choosed_h.value.ID) {
 | 
							// if(!choosed_h.value || !choosed_h.value.ID) {
 | 
				
			||||||
			return
 | 
							// 	return
 | 
				
			||||||
		}
 | 
							// }
 | 
				
			||||||
		let user_info = JSON.parse(uni.getStorageSync('userInfo'))
 | 
							let user_info = JSON.parse(uni.getStorageSync('userInfo'))
 | 
				
			||||||
		let h_query = {
 | 
							let h_query = {
 | 
				
			||||||
			isSurgery:parseInt(isSurgery.value),
 | 
								isSurgery:parseInt(isSurgery.value),
 | 
				
			||||||
			surgery_time:surgery_time.value,
 | 
								surgery_time:surgery_time.value,
 | 
				
			||||||
			userId:user_info.userId,
 | 
								userId:user_info.userId,
 | 
				
			||||||
			hospitalId:choosed_h.value?.ID
 | 
								// hospitalId:choosed_h.value?.ID
 | 
				
			||||||
 | 
								hospitalId:hospitals.value[h_index.value]?.ID
 | 
				
			||||||
 | 
								
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// console.log(h_query);return
 | 
							// console.log(h_query);return
 | 
				
			||||||
		const res = await api.hospital(h_query)
 | 
							const res = await api.hospital(h_query)
 | 
				
			||||||
@@ -164,6 +173,11 @@
 | 
				
			|||||||
			url:"/pages/index/note_list?index="+index
 | 
								url:"/pages/index/note_list?index="+index
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						function bindPickerChange(e) {
 | 
				
			||||||
 | 
							console.log(hospitals.value )
 | 
				
			||||||
 | 
							h_index.value = e.detail.value
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
	<view class="content page-box">
 | 
						<view class="content page-box">
 | 
				
			||||||
@@ -249,7 +263,10 @@
 | 
				
			|||||||
									 {{item.name}}
 | 
														 {{item.name}}
 | 
				
			||||||
								 </view>
 | 
													 </view>
 | 
				
			||||||
							 </view> -->
 | 
												 </view> -->
 | 
				
			||||||
							 <uni-combox @input="onClickH" :candidates="hospitals" placeholder="请选择医院" @choosed="toChooseH" v-model="hValue"></uni-combox>
 | 
												 <!-- <uni-combox @input="onClickH" :candidates="hospitals" placeholder="请选择医院" @choosed="toChooseH" v-model="hValue"></uni-combox> -->
 | 
				
			||||||
 | 
												 <picker @change="bindPickerChange" :value="h_index" :range="hospitals" range-key="name">
 | 
				
			||||||
 | 
													<view class="uni-input">{{hospitals[h_index]?.name}}</view>
 | 
				
			||||||
 | 
												 </picker>
 | 
				
			||||||
						</view>
 | 
											</view>
 | 
				
			||||||
					</view>
 | 
										</view>
 | 
				
			||||||
					<view class="pb-item pb-item-btn" @tap="toSave">提交</view>
 | 
										<view class="pb-item pb-item-btn" @tap="toSave">提交</view>
 | 
				
			||||||
@@ -261,6 +278,7 @@
 | 
				
			|||||||
			<!-- <uni-popup-dialog ref="inputClose" mode="input" title="输入内容" value="对话框预置提示内容!"
 | 
								<!-- <uni-popup-dialog ref="inputClose" mode="input" title="输入内容" value="对话框预置提示内容!"
 | 
				
			||||||
				placeholder="请输入内容" @confirm="dialogInputConfirm"></uni-popup-dialog> -->
 | 
									placeholder="请输入内容" @confirm="dialogInputConfirm"></uni-popup-dialog> -->
 | 
				
			||||||
		</uni-popup>
 | 
							</uni-popup>
 | 
				
			||||||
 | 
							<aikefu />
 | 
				
			||||||
	</view>
 | 
						</view>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<style scoped lang="scss">
 | 
					<style scoped lang="scss">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,31 +99,39 @@
 | 
				
			|||||||
		uni.showLoading({
 | 
							uni.showLoading({
 | 
				
			||||||
			mask:true
 | 
								mask:true
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		const res = await api.getTodoist(list_box.value[c_index.value].queryParams)
 | 
							let operation_info = JSON.parse(uni.getStorageSync('operation_info'))
 | 
				
			||||||
		uni.hideLoading();
 | 
							if(operation_info && operation_info.hospitalId) {
 | 
				
			||||||
		if(res.code === 0) {
 | 
								const res = await api.getHospitalInfo2({
 | 
				
			||||||
			if(res.data && res.data.length > 0) {
 | 
									hospitalId:operation_info.hospitalId,
 | 
				
			||||||
				// list.value.push(...res.data)
 | 
									timeNum:list_box.value[c_index.value].queryParams.statet
 | 
				
			||||||
				list_box.value[c_index.value].list.push(...res.data)
 | 
								})
 | 
				
			||||||
 | 
								// return 
 | 
				
			||||||
 | 
								// const res = await api.getTodoist(list_box.value[c_index.value].queryParams)
 | 
				
			||||||
 | 
								if(res.code === 0) {
 | 
				
			||||||
 | 
									if(res.data && res.data.length > 0) {
 | 
				
			||||||
 | 
										// list_box.value[c_index.value].list.push(...res.data)
 | 
				
			||||||
 | 
										list_box.value[c_index.value].list = res.data
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else{
 | 
				
			||||||
 | 
										list_box.value[c_index.value].queryParams.page--
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else{
 | 
								else{
 | 
				
			||||||
				list_box.value[c_index.value].queryParams.page--
 | 
									uni.showToast({
 | 
				
			||||||
 | 
										title:res.msg,
 | 
				
			||||||
 | 
										icon:"error",
 | 
				
			||||||
 | 
										duration:2000,
 | 
				
			||||||
 | 
										mask:true,
 | 
				
			||||||
 | 
										success() {
 | 
				
			||||||
 | 
											if(res.code === 7) // 登录失败
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												store.afterFailLogin(2000)
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else{
 | 
							uni.hideLoading();
 | 
				
			||||||
			uni.showToast({
 | 
					 | 
				
			||||||
				title:res.msg,
 | 
					 | 
				
			||||||
				icon:"error",
 | 
					 | 
				
			||||||
				duration:2000,
 | 
					 | 
				
			||||||
				mask:true,
 | 
					 | 
				
			||||||
				success() {
 | 
					 | 
				
			||||||
					if(res.code === 7) // 登录失败
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						store.afterFailLogin(2000)
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	function tabChange(currentIndex) {
 | 
						function tabChange(currentIndex) {
 | 
				
			||||||
		c_index.value = currentIndex
 | 
							c_index.value = currentIndex
 | 
				
			||||||
@@ -182,7 +190,7 @@
 | 
				
			|||||||
		<swiper :current="c_index" @change="scroll_func" :style="{'--size':swiper_h+'px'}" class="swiper" circular :indicator-dots="false" :autoplay="false" >
 | 
							<swiper :current="c_index" @change="scroll_func" :style="{'--size':swiper_h+'px'}" class="swiper" circular :indicator-dots="false" :autoplay="false" >
 | 
				
			||||||
			<swiper-item v-for="(item1,i1) in list_box">
 | 
								<swiper-item v-for="(item1,i1) in list_box">
 | 
				
			||||||
				<view class="todoBox">
 | 
									<view class="todoBox">
 | 
				
			||||||
					<view v-for="(item,i) in item1.list" @tap="handle_func(item,i)" class="td-item swiper-item uni-bg-green">
 | 
										<view v-for="(item,i) in item1.list" v-if="item1.list.length>0" @tap="handle_func(item,i)" class="td-item swiper-item uni-bg-green">
 | 
				
			||||||
						<view class="td-content text-ellipsis-2">
 | 
											<view class="td-content text-ellipsis-2">
 | 
				
			||||||
							{{item.content}}
 | 
												{{item.content}}
 | 
				
			||||||
						</view>
 | 
											</view>
 | 
				
			||||||
@@ -190,6 +198,7 @@
 | 
				
			|||||||
							{{util.timestampToDate(item.CreatedAt)}}
 | 
												{{util.timestampToDate(item.CreatedAt)}}
 | 
				
			||||||
						</view>
 | 
											</view>
 | 
				
			||||||
					</view>
 | 
										</view>
 | 
				
			||||||
 | 
										<emptyCard v-else></emptyCard>
 | 
				
			||||||
				</view>
 | 
									</view>
 | 
				
			||||||
			</swiper-item>
 | 
								</swiper-item>
 | 
				
			||||||
		</swiper>
 | 
							</swiper>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										168
									
								
								pages/index/result.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								pages/index/result.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,168 @@
 | 
				
			|||||||
 | 
					<script setup>
 | 
				
			||||||
 | 
						// 引入依赖
 | 
				
			||||||
 | 
						import uniDatetimePicker from '@/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue' 
 | 
				
			||||||
 | 
						import uniEasyinput from '@/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue' 
 | 
				
			||||||
 | 
						import { onLoad } from "@dcloudio/uni-app"
 | 
				
			||||||
 | 
						// import mySwiper from "@/components/mySwiper.vue"
 | 
				
			||||||
 | 
						import {ref,onMounted,nextTick} from "vue"
 | 
				
			||||||
 | 
						import {useStore} from '@/store/index.js'
 | 
				
			||||||
 | 
						import api from "@/api/index.js"
 | 
				
			||||||
 | 
						const store = useStore()
 | 
				
			||||||
 | 
						onLoad((e) => {
 | 
				
			||||||
 | 
							res_.value = JSON.parse(decodeURIComponent(e.res))
 | 
				
			||||||
 | 
							console.log(res_.value)
 | 
				
			||||||
 | 
							console.log(store.bgList)
 | 
				
			||||||
 | 
							if(store.bgList.length>0) {
 | 
				
			||||||
 | 
								bg_imgs.value = store.bgList
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							randomFunc()
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						// 变量
 | 
				
			||||||
 | 
						const res_ = ref(null)
 | 
				
			||||||
 | 
						const userInfo = ref(null)
 | 
				
			||||||
 | 
						const bg_imgs = ref([
 | 
				
			||||||
 | 
							{url:'/static/result1.jpg'},
 | 
				
			||||||
 | 
							{url:'/static/result2.jpg'},
 | 
				
			||||||
 | 
							{url:'/static/result3.jpg'},
 | 
				
			||||||
 | 
						]) 
 | 
				
			||||||
 | 
						const bg_index = ref(0)
 | 
				
			||||||
 | 
						const avatarUrl = ref(null)
 | 
				
			||||||
 | 
						const info = ref({left:'',right:''})
 | 
				
			||||||
 | 
						const show_ = ref(false)
 | 
				
			||||||
 | 
						// 函数
 | 
				
			||||||
 | 
						function randomFunc() {
 | 
				
			||||||
 | 
							bg_index.value = parseInt((Math.random()*3))
 | 
				
			||||||
 | 
							uni.getImageInfo({
 | 
				
			||||||
 | 
								// src:bg_imgs.value[bg_index.value],
 | 
				
			||||||
 | 
								src:bg_imgs.value[bg_index.value].url,
 | 
				
			||||||
 | 
								success:function(res) {
 | 
				
			||||||
 | 
									avatarUrl.value = uni.getStorageSync('avatarUrl')
 | 
				
			||||||
 | 
									info.value.left = res_.value.leftEyeVision
 | 
				
			||||||
 | 
									info.value.right = res_.value.rightEyeVision
 | 
				
			||||||
 | 
									show_.value = true
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								fail(err) {
 | 
				
			||||||
 | 
									console.log(err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<view class="visionTestBox page-box">
 | 
				
			||||||
 | 
							<!-- <view class="actionBox" :style="{background:`url(${bg_imgs[bg_index]})`}">
 | 
				
			||||||
 | 
								测试
 | 
				
			||||||
 | 
							</view> -->
 | 
				
			||||||
 | 
							<view class="actionBox">
 | 
				
			||||||
 | 
								<view class="img-box">
 | 
				
			||||||
 | 
									<image style="width: 100%;" :src="bg_imgs[bg_index].url" mode="widthFix"></image>
 | 
				
			||||||
 | 
									<view v-if="show_" class="avatar-box">
 | 
				
			||||||
 | 
										<image :src="avatarUrl" mode="widthFix"></image>
 | 
				
			||||||
 | 
									</view>
 | 
				
			||||||
 | 
									<view v-if="show_" class="res-text-row">
 | 
				
			||||||
 | 
										<view class="rtr-left">{{info.left}}</view>
 | 
				
			||||||
 | 
										<view class="rtr-right">{{info.right}}</view>
 | 
				
			||||||
 | 
									</view>
 | 
				
			||||||
 | 
								</view>
 | 
				
			||||||
 | 
							</view>
 | 
				
			||||||
 | 
						</view>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					<style scoped lang="scss">
 | 
				
			||||||
 | 
						.avatar-box{
 | 
				
			||||||
 | 
							width: 100%;
 | 
				
			||||||
 | 
							position: absolute;
 | 
				
			||||||
 | 
							top:280rpx;
 | 
				
			||||||
 | 
							image{
 | 
				
			||||||
 | 
								width: 260rpx;
 | 
				
			||||||
 | 
								margin: 0px auto;
 | 
				
			||||||
 | 
								display: block;
 | 
				
			||||||
 | 
								border-radius: 50%;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.img-box{
 | 
				
			||||||
 | 
							position: relative;
 | 
				
			||||||
 | 
							.res-text-row{
 | 
				
			||||||
 | 
								width: 100%;
 | 
				
			||||||
 | 
								display: flex;
 | 
				
			||||||
 | 
								justify-content: space-around;
 | 
				
			||||||
 | 
								align-items: center;
 | 
				
			||||||
 | 
								position: absolute;
 | 
				
			||||||
 | 
								top: 47%;
 | 
				
			||||||
 | 
								font-weight: 900;
 | 
				
			||||||
 | 
								color:gray;
 | 
				
			||||||
 | 
								.rtr-left{
 | 
				
			||||||
 | 
									margin-left: 20%;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.visionTestBox,.actionBox{
 | 
				
			||||||
 | 
							height: 100%;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.actionBox{
 | 
				
			||||||
 | 
							.ab-show-box{
 | 
				
			||||||
 | 
								// width: 100%;
 | 
				
			||||||
 | 
								height: 50%;
 | 
				
			||||||
 | 
								border: 2rpx solid #d0d0d0;
 | 
				
			||||||
 | 
								margin: 10rpx;
 | 
				
			||||||
 | 
								margin-top: 0px;
 | 
				
			||||||
 | 
								display: flex;
 | 
				
			||||||
 | 
								align-items: center;
 | 
				
			||||||
 | 
								justify-content: center;
 | 
				
			||||||
 | 
								image{
 | 
				
			||||||
 | 
									height: auto;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							.ab-action-box{
 | 
				
			||||||
 | 
								.ac-row{
 | 
				
			||||||
 | 
									display: flex;
 | 
				
			||||||
 | 
									align-items: center;
 | 
				
			||||||
 | 
									justify-content: center;
 | 
				
			||||||
 | 
									.ac-row-card-text{
 | 
				
			||||||
 | 
										padding: 10rpx !important;
 | 
				
			||||||
 | 
										width: 80rpx !important;
 | 
				
			||||||
 | 
										height: 80rpx !important;
 | 
				
			||||||
 | 
										display: flex;
 | 
				
			||||||
 | 
										align-items: center;
 | 
				
			||||||
 | 
										justify-content: center;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									.ac-row-card{
 | 
				
			||||||
 | 
										// white-space: nowrap;
 | 
				
			||||||
 | 
										margin: 20rpx;
 | 
				
			||||||
 | 
										font-size: 24rpx;
 | 
				
			||||||
 | 
										border-radius: 50%;
 | 
				
			||||||
 | 
										width: 40rpx;
 | 
				
			||||||
 | 
										height: 40rpx;
 | 
				
			||||||
 | 
										padding: 30rpx;
 | 
				
			||||||
 | 
										box-shadow: 2rpx 20rpx 40rpx #dfdfdf;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.content-text{
 | 
				
			||||||
 | 
							margin-bottom: 20rpx;
 | 
				
			||||||
 | 
							.ct-title{
 | 
				
			||||||
 | 
								text-align: center;
 | 
				
			||||||
 | 
								font-size: 34px;
 | 
				
			||||||
 | 
								color: #26758d;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.okBtn{
 | 
				
			||||||
 | 
							width: 100%;
 | 
				
			||||||
 | 
							color: white;
 | 
				
			||||||
 | 
							background-color: #26758d;
 | 
				
			||||||
 | 
							padding: 20rpx;
 | 
				
			||||||
 | 
							text-align: center;
 | 
				
			||||||
 | 
							box-sizing: border-box;
 | 
				
			||||||
 | 
							border-radius: 20rpx;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.pop-box{
 | 
				
			||||||
 | 
							.pb-title{
 | 
				
			||||||
 | 
								text-align: center;
 | 
				
			||||||
 | 
								margin-bottom: 40rpx;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							background-color: white;
 | 
				
			||||||
 | 
							padding: 20rpx;
 | 
				
			||||||
 | 
							width: 80%;
 | 
				
			||||||
 | 
							margin: 0 auto;
 | 
				
			||||||
 | 
							border-radius: 20rpx;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@@ -56,21 +56,28 @@
 | 
				
			|||||||
				duration:2000
 | 
									duration:2000
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						function toResult(params) {
 | 
				
			||||||
 | 
							console.log(params)
 | 
				
			||||||
 | 
							uni.redirectTo({
 | 
				
			||||||
 | 
								url:"/pages/index/result?res="+encodeURIComponent(JSON.stringify(params))
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// encodeURIComponent(JSON.stringify(params))
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
	<view class="visinoListBox page-box">
 | 
						<view class="visinoListBox page-box">
 | 
				
			||||||
		<view class="vl-item-box" v-if="list.length > 0">
 | 
							<view class="vl-item-box" v-if="list.length > 0">
 | 
				
			||||||
			<view class="vl-item" v-for="(item,i) in list">
 | 
								<view class="vl-item" v-for="(item,i) in list" @tap="toResult(item)">
 | 
				
			||||||
				<view class="vl-title">{{util.timestampToDate(item.CreatedAt)}}</view>
 | 
									<view class="vl-title">{{util.timestampToDate(item.CreatedAt)}}</view>
 | 
				
			||||||
				<view class="vl-row-box">
 | 
									<view class="vl-row-box">
 | 
				
			||||||
					<view class="vl-row">
 | 
										<view class="vl-row">
 | 
				
			||||||
						<view class="vlr-left">右眼</view>
 | 
											<view class="vlr-left">右眼</view>
 | 
				
			||||||
						<view class="vlr-left">{{item.rightEyeVision}}</view>
 | 
											<view class="vlr-right">{{item.rightEyeVision}}</view>
 | 
				
			||||||
					</view>
 | 
										</view>
 | 
				
			||||||
					<view class="vl-row">
 | 
										<view class="vl-row">
 | 
				
			||||||
						<view class="vlr-left">左眼</view>
 | 
											<view class="vlr-left">左眼</view>
 | 
				
			||||||
						<view class="vlr-left">{{item.leftEyeVision}}</view>
 | 
											<view class="vlr-right">{{item.leftEyeVision}}</view>
 | 
				
			||||||
					</view>
 | 
										</view>
 | 
				
			||||||
				</view>
 | 
									</view>
 | 
				
			||||||
			</view>
 | 
								</view>
 | 
				
			||||||
@@ -83,15 +90,23 @@
 | 
				
			|||||||
		.vl-item-box{
 | 
							.vl-item-box{
 | 
				
			||||||
			padding: 20rpx;
 | 
								padding: 20rpx;
 | 
				
			||||||
			.vl-item{
 | 
								.vl-item{
 | 
				
			||||||
 | 
									margin-bottom: 20rpx;
 | 
				
			||||||
 | 
									padding: 20rpx;
 | 
				
			||||||
 | 
									/* border: 1px solid #eaeaea; */
 | 
				
			||||||
 | 
									border-radius: 20rpx;
 | 
				
			||||||
 | 
									box-shadow: 5px 5px 5px #f3f3f3;
 | 
				
			||||||
				.vl-title{
 | 
									.vl-title{
 | 
				
			||||||
					border-left: 4rpx solid red;
 | 
										border-left: 10rpx solid #26758d;
 | 
				
			||||||
 | 
										padding-left: 5px;
 | 
				
			||||||
 | 
										margin-bottom: 10px;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				.vl-row-box{
 | 
									.vl-row-box{
 | 
				
			||||||
					.vl-row{
 | 
										.vl-row{
 | 
				
			||||||
						display: flex;
 | 
											display: flex;
 | 
				
			||||||
						align-items: center;
 | 
											align-items: center;
 | 
				
			||||||
						.vlr-left{
 | 
											.vlr-left{
 | 
				
			||||||
							
 | 
												margin-right:20rpx
 | 
				
			||||||
 | 
												;color: gray;
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
						.vlr-right{
 | 
											.vlr-right{
 | 
				
			||||||
							margin-left: 20rpx;
 | 
												margin-left: 20rpx;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,6 @@
 | 
				
			|||||||
	const store = useStore()
 | 
						const store = useStore()
 | 
				
			||||||
	onLoad((e) => {
 | 
						onLoad((e) => {
 | 
				
			||||||
		userInfo.value = JSON.parse(store.userInfo)
 | 
							userInfo.value = JSON.parse(store.userInfo)
 | 
				
			||||||
		console.log(userInfo.value)
 | 
					 | 
				
			||||||
		countDown.value = countDown_init
 | 
							countDown.value = countDown_init
 | 
				
			||||||
		// if(!store.userInfo?.has_operation) { // 未填写手术信息
 | 
							// if(!store.userInfo?.has_operation) { // 未填写手术信息
 | 
				
			||||||
		// 	setTimeout(()=>{
 | 
							// 	setTimeout(()=>{
 | 
				
			||||||
@@ -74,8 +73,14 @@
 | 
				
			|||||||
		left:4,
 | 
							left:4,
 | 
				
			||||||
		right:4
 | 
							right:4
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
						const is_test = ref(true)
 | 
				
			||||||
	// 函数
 | 
						// 函数
 | 
				
			||||||
	function toStart() { // 开始测试
 | 
						function toStart() { // 开始测试
 | 
				
			||||||
 | 
							// if(is_test.value) {
 | 
				
			||||||
 | 
							// 	uni.navigateTo({
 | 
				
			||||||
 | 
							// 		url:'/pages/index/result'
 | 
				
			||||||
 | 
							// 	})
 | 
				
			||||||
 | 
							// }
 | 
				
			||||||
		inputDialog.value.close()
 | 
							inputDialog.value.close()
 | 
				
			||||||
		inputDialog2.value.open()
 | 
							inputDialog2.value.open()
 | 
				
			||||||
		let s = setInterval(() => {
 | 
							let s = setInterval(() => {
 | 
				
			||||||
@@ -141,19 +146,23 @@
 | 
				
			|||||||
		uni.showLoading({
 | 
							uni.showLoading({
 | 
				
			||||||
			mask:true
 | 
								mask:true
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		const res = await api.saveVision({
 | 
							const params = {
 | 
				
			||||||
			leftEyeVision:vision_info.value.left+'',
 | 
								leftEyeVision:vision_info.value.left+'',
 | 
				
			||||||
			rightEyeVision:vision_info.value.right+'',
 | 
								rightEyeVision:vision_info.value.right+'',
 | 
				
			||||||
			userId:userInfo.value.userId
 | 
								userId:userInfo.value.userId
 | 
				
			||||||
		})
 | 
							}
 | 
				
			||||||
 | 
							const res = await api.saveVision(params)
 | 
				
			||||||
		uni.hideLoading()
 | 
							uni.hideLoading()
 | 
				
			||||||
		if(res.code == 0) {
 | 
							if(res.code == 0) {
 | 
				
			||||||
			uni.showToast({
 | 
								uni.showToast({
 | 
				
			||||||
				title:"保存成功",
 | 
									title:"保存成功",
 | 
				
			||||||
				icon:"success",
 | 
									icon:"success",
 | 
				
			||||||
				duration:2000,
 | 
									duration:2000,
 | 
				
			||||||
				success: function (res){
 | 
									success: function (res1){
 | 
				
			||||||
					uni.navigateBack()
 | 
										// uni.navigateBack()
 | 
				
			||||||
 | 
										uni.redirectTo({
 | 
				
			||||||
 | 
											url:"/pages/index/result?res="+encodeURIComponent(JSON.stringify(params))
 | 
				
			||||||
 | 
										})
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -163,7 +163,7 @@
 | 
				
			|||||||
			</view>
 | 
								</view>
 | 
				
			||||||
		</view>
 | 
							</view>
 | 
				
			||||||
		<view class="row-box" v-else>
 | 
							<view class="row-box" v-else>
 | 
				
			||||||
			  <view class="rb-card" @tap="toDetail(1)" style="margin-bottom: 10px;">
 | 
								  <view class="rb-card" @tap="toDetail(1)" style="margin-bottom: 10px;display: none;">
 | 
				
			||||||
				  <!-- <view class="rbc-title">手术历程</view> -->
 | 
									  <!-- <view class="rbc-title">手术历程</view> -->
 | 
				
			||||||
				  <view class="rbc-content rbc-content-box">
 | 
									  <view class="rbc-content rbc-content-box">
 | 
				
			||||||
					  <view class="rbc-content-row rbc-content-left">
 | 
										  <view class="rbc-content-row rbc-content-left">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,9 +71,9 @@
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	function toDetail(item) {
 | 
						function toDetail(item) {
 | 
				
			||||||
		let info = encodeURIComponent(JSON.stringify(item))
 | 
							let info = encodeURIComponent(JSON.stringify(item))
 | 
				
			||||||
		// console.log(info)
 | 
							console.log(item)
 | 
				
			||||||
		uni.navigateTo({
 | 
							uni.navigateTo({
 | 
				
			||||||
			url:"/pages/wikipedia/detail?info="+info+"&id="+item.id
 | 
								url:"/pages/wikipedia/detail?info="+info+"&id="+item.ID
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
@@ -82,11 +82,11 @@
 | 
				
			|||||||
		<view class="list-box">
 | 
							<view class="list-box">
 | 
				
			||||||
			<view class="lb-card" v-if="list.length > 0" v-for="(item,i) in list" @tap="toDetail(item)">
 | 
								<view class="lb-card" v-if="list.length > 0" v-for="(item,i) in list" @tap="toDetail(item)">
 | 
				
			||||||
				<view class="lb-left">
 | 
									<view class="lb-left">
 | 
				
			||||||
					<image :src="item.cover_img" mode="aspectFill"></image>
 | 
										<image :src="item.cover" mode="aspectFill"></image>
 | 
				
			||||||
				</view>
 | 
									</view>
 | 
				
			||||||
				<view class="lb-right">
 | 
									<view class="lb-right">
 | 
				
			||||||
					<view class="lb-title">{{item.title}}</view>
 | 
										<view class="lb-title">{{item.title}}</view>
 | 
				
			||||||
					<view class="lb-content text-ellipsis-1 small-text">{{item.content}}</view>
 | 
										<view class="lb-content text-ellipsis-1 small-text">{{item.introduction}}</view>
 | 
				
			||||||
				</view>
 | 
									</view>
 | 
				
			||||||
			</view>
 | 
								</view>
 | 
				
			||||||
			<emptyCard v-else></emptyCard>
 | 
								<emptyCard v-else></emptyCard>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,9 @@
 | 
				
			|||||||
	import {useStore} from '@/store/index.js'
 | 
						import {useStore} from '@/store/index.js'
 | 
				
			||||||
	const store = useStore()
 | 
						const store = useStore()
 | 
				
			||||||
	import api from "@/api/index.js"
 | 
						import api from "@/api/index.js"
 | 
				
			||||||
 | 
						const h_index = ref(0)
 | 
				
			||||||
	onLoad(() => {
 | 
						onLoad(() => {
 | 
				
			||||||
 | 
							getHospitalList()
 | 
				
			||||||
		// console.log(useStore.userInfo)
 | 
							// console.log(useStore.userInfo)
 | 
				
			||||||
		userinfo.value = JSON.parse(uni.getStorageSync('userInfo'))
 | 
							userinfo.value = JSON.parse(uni.getStorageSync('userInfo'))
 | 
				
			||||||
		console.log(userinfo.value)
 | 
							console.log(userinfo.value)
 | 
				
			||||||
@@ -42,7 +44,8 @@
 | 
				
			|||||||
			hospitals.value = res.data.list
 | 
								hospitals.value = res.data.list
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	function onClickH() {
 | 
						function onInputH() {
 | 
				
			||||||
 | 
							console.log(hValue.value)
 | 
				
			||||||
		h_queryParams.value.key = hValue.value
 | 
							h_queryParams.value.key = hValue.value
 | 
				
			||||||
		getHospitalList()
 | 
							getHospitalList()
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@@ -112,7 +115,7 @@
 | 
				
			|||||||
		// hospitals.value = null
 | 
							// hospitals.value = null
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	async function sumbmitFunc() {
 | 
						async function sumbmitFunc() {
 | 
				
			||||||
		console.log(choosed_h.value,h_info.value,userinfo.value)
 | 
							// console.log(choosed_h.value,h_info.value,userinfo.value)
 | 
				
			||||||
		let obj = {
 | 
							let obj = {
 | 
				
			||||||
			id: userinfo.value.userId,
 | 
								id: userinfo.value.userId,
 | 
				
			||||||
			// isSurgery: 1, //是否已经手术 0为手术,1已经手术
 | 
								// isSurgery: 1, //是否已经手术 0为手术,1已经手术
 | 
				
			||||||
@@ -123,6 +126,7 @@
 | 
				
			|||||||
			hospitalId:choosed_h.value?.ID
 | 
								hospitalId:choosed_h.value?.ID
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		const res = await api.userinfoUpdae(obj)
 | 
							const res = await api.userinfoUpdae(obj)
 | 
				
			||||||
 | 
							// console.log('res is ',res)
 | 
				
			||||||
		if(res.code === 0) {
 | 
							if(res.code === 0) {
 | 
				
			||||||
			uni.showToast({
 | 
								uni.showToast({
 | 
				
			||||||
				title:res.msg,
 | 
									title:res.msg,
 | 
				
			||||||
@@ -161,6 +165,10 @@
 | 
				
			|||||||
		else{
 | 
							else{
 | 
				
			||||||
			uni.clearStorage();
 | 
								uni.clearStorage();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						function bindPickerChange(e) {
 | 
				
			||||||
 | 
							console.log(hospitals.value )
 | 
				
			||||||
 | 
							h_index.value = e.detail.value
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -214,8 +222,11 @@
 | 
				
			|||||||
					  手术医院</view>
 | 
										  手术医院</view>
 | 
				
			||||||
				  <view class="rbc-content-row rbc-content-right">
 | 
									  <view class="rbc-content-row rbc-content-right">
 | 
				
			||||||
					  <!-- {{h_info?.name}} -->
 | 
										  <!-- {{h_info?.name}} -->
 | 
				
			||||||
					  <uni-combox @input="onClickH" :candidates="hospitals" placeholder="请选择医院" @choosed="toChooseH" v-model="hValue"></uni-combox>
 | 
										  <!-- <uni-combox :border="false" @input="onInputH" :candidates="hospitals" placeholder="请选择医院" @choosed="toChooseH" v-model="userinfo.HospitalId"></uni-combox> -->
 | 
				
			||||||
					  <uni-icons type="forward" color="gray" size="20"></uni-icons>
 | 
										  <!-- <uni-icons type="forward" color="gray" size="20"></uni-icons> -->
 | 
				
			||||||
 | 
										  <picker @change="bindPickerChange" :value="h_index" :range="hospitals" range-key="name">
 | 
				
			||||||
 | 
										  	<view class="uni-input">{{hospitals[h_index]?.name}}</view>
 | 
				
			||||||
 | 
										  </picker>
 | 
				
			||||||
				  </view>
 | 
									  </view>
 | 
				
			||||||
			  </view>
 | 
								  </view>
 | 
				
			||||||
			</view>
 | 
								</view>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,11 @@
 | 
				
			|||||||
	import emptyCard from "@/components/emptyCard.vue"
 | 
						import emptyCard from "@/components/emptyCard.vue"
 | 
				
			||||||
	import api from "@/api/index.js"
 | 
						import api from "@/api/index.js"
 | 
				
			||||||
	import util from "@/utils"
 | 
						import util from "@/utils"
 | 
				
			||||||
 | 
						const store = useStore()
 | 
				
			||||||
	onLoad((e) => {
 | 
						onLoad((e) => {
 | 
				
			||||||
 | 
							if(uni.getStorageSync('userInfo')) {
 | 
				
			||||||
 | 
								userInfo.value = JSON.parse( uni.getStorageSync('userInfo'))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		// console.log(e)
 | 
							// console.log(e)
 | 
				
			||||||
		// a_info.value = JSON.parse(decodeURIComponent(e.info))
 | 
							// a_info.value = JSON.parse(decodeURIComponent(e.info))
 | 
				
			||||||
		if(!e.id) {
 | 
							if(!e.id) {
 | 
				
			||||||
@@ -24,6 +28,7 @@
 | 
				
			|||||||
		getDetail(e.id)
 | 
							getDetail(e.id)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	// 变量
 | 
						// 变量
 | 
				
			||||||
 | 
						const userInfo = ref(null)
 | 
				
			||||||
	// const content = ref(null)
 | 
						// const content = ref(null)
 | 
				
			||||||
	const a_info = ref(null)
 | 
						const a_info = ref(null)
 | 
				
			||||||
	// 函数
 | 
						// 函数
 | 
				
			||||||
@@ -41,7 +46,27 @@
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	async function starFunc(type) { // 点击收藏
 | 
						async function starFunc(type) { // 点击收藏
 | 
				
			||||||
		a_info.value.isStar = type
 | 
							if(!userInfo.value) {
 | 
				
			||||||
 | 
								store.afterFailLogin(2000)
 | 
				
			||||||
 | 
								return 
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							console.log(a_info.value)
 | 
				
			||||||
 | 
							if(type) { // 添加收藏
 | 
				
			||||||
 | 
								const res = await api.getArticleFavorite({
 | 
				
			||||||
 | 
									wz_id:a_info.value.ID,
 | 
				
			||||||
 | 
									userId:userInfo.value.userId,
 | 
				
			||||||
 | 
									cover:a_info.value.cover_img,
 | 
				
			||||||
 | 
									title:a_info.value.title,
 | 
				
			||||||
 | 
									introductions:''
 | 
				
			||||||
 | 
								},userInfo.value.userId)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else{ // 取消收藏
 | 
				
			||||||
 | 
								const res = await api.delArticleFavorite({
 | 
				
			||||||
 | 
									id:a_info.value.ID,
 | 
				
			||||||
 | 
								},userInfo.value.userId)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							a_info.value.is_favorite = type
 | 
				
			||||||
 | 
							
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -57,7 +82,7 @@
 | 
				
			|||||||
				<view style="color: gray;">{{a_info?.reading_num}}</view>
 | 
									<view style="color: gray;">{{a_info?.reading_num}}</view>
 | 
				
			||||||
			</view>
 | 
								</view>
 | 
				
			||||||
			<view class="ab-item">
 | 
								<view class="ab-item">
 | 
				
			||||||
				<uni-icons color="#26758d" @tap="starFunc(0)" v-if="a_info?.isStar" type="star-filled" size="30"></uni-icons>
 | 
									<uni-icons color="#26758d" @tap="starFunc(0)" v-if="a_info?.is_favorite" type="star-filled" size="30"></uni-icons>
 | 
				
			||||||
				<uni-icons color="gray" @tap="starFunc(1)" v-else type="star" size="30"></uni-icons>
 | 
									<uni-icons color="gray" @tap="starFunc(1)" v-else type="star" size="30"></uni-icons>
 | 
				
			||||||
			</view>
 | 
								</view>
 | 
				
			||||||
		</view>
 | 
							</view>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@
 | 
				
			|||||||
	import {ref,onMounted,nextTick} from "vue"
 | 
						import {ref,onMounted,nextTick} from "vue"
 | 
				
			||||||
	import {useStore} from '@/store/index.js'
 | 
						import {useStore} from '@/store/index.js'
 | 
				
			||||||
	import api from "@/api/index"
 | 
						import api from "@/api/index"
 | 
				
			||||||
 | 
						import emptyCard from "@/components/emptyCard.vue"
 | 
				
			||||||
	// 生命周期
 | 
						// 生命周期
 | 
				
			||||||
	onLoad(() => {
 | 
						onLoad(() => {
 | 
				
			||||||
		getList()
 | 
							getList()
 | 
				
			||||||
@@ -55,7 +56,7 @@
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	function toDetail(item) {
 | 
						function toDetail(item) {
 | 
				
			||||||
		let info = encodeURIComponent(JSON.stringify(item))
 | 
							// let info = encodeURIComponent(JSON.stringify(item))
 | 
				
			||||||
		// console.log(info)
 | 
							// console.log(info)
 | 
				
			||||||
		uni.navigateTo({
 | 
							uni.navigateTo({
 | 
				
			||||||
			url:"./detail?id="+item.ID
 | 
								url:"./detail?id="+item.ID
 | 
				
			||||||
@@ -68,7 +69,7 @@
 | 
				
			|||||||
			
 | 
								
 | 
				
			||||||
		</view>
 | 
							</view>
 | 
				
			||||||
		<view class="list-box">
 | 
							<view class="list-box">
 | 
				
			||||||
			<view class="lb-card" v-for="(item,i) in list" @tap="toDetail(item)">
 | 
								<view v-if="list.length>0" class="lb-card" v-for="(item,i) in list" @tap="toDetail(item)">
 | 
				
			||||||
				<view class="lb-left">
 | 
									<view class="lb-left">
 | 
				
			||||||
					<image :src="item.cover_img" mode="aspectFill"></image>
 | 
										<image :src="item.cover_img" mode="aspectFill"></image>
 | 
				
			||||||
				</view>
 | 
									</view>
 | 
				
			||||||
@@ -77,6 +78,7 @@
 | 
				
			|||||||
					<view class="lb-content text-ellipsis-1 small-text" v-html="item.content"></view>
 | 
										<view class="lb-content text-ellipsis-1 small-text" v-html="item.content"></view>
 | 
				
			||||||
				</view>
 | 
									</view>
 | 
				
			||||||
			</view>
 | 
								</view>
 | 
				
			||||||
 | 
								<emptyCard v-else></emptyCard>
 | 
				
			||||||
		</view>
 | 
							</view>
 | 
				
			||||||
	</view>
 | 
						</view>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								static/kefu.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/kefu.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 9.9 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								static/result1.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/result1.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 2.8 MiB  | 
							
								
								
									
										
											BIN
										
									
								
								static/result2.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/result2.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 2.8 MiB  | 
							
								
								
									
										
											BIN
										
									
								
								static/result3.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/result3.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 2.7 MiB  | 
@@ -25,6 +25,7 @@ export const useStore = defineStore('main2', {
 | 
				
			|||||||
		remark_text:'',
 | 
							remark_text:'',
 | 
				
			||||||
		address:'',
 | 
							address:'',
 | 
				
			||||||
		operation_info:null, // 手术信息
 | 
							operation_info:null, // 手术信息
 | 
				
			||||||
 | 
							bgList:[], // 测试结果背景图
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
	actions:{
 | 
						actions:{
 | 
				
			||||||
@@ -63,6 +64,7 @@ export const useStore = defineStore('main2', {
 | 
				
			|||||||
				this.access_token = access_token
 | 
									this.access_token = access_token
 | 
				
			||||||
				this.isLogin = true
 | 
									this.isLogin = true
 | 
				
			||||||
				this.userInfo = uni.getStorageSync('userInfo')
 | 
									this.userInfo = uni.getStorageSync('userInfo')
 | 
				
			||||||
 | 
									this.operation_info = uni.getStorageSync('operation_info')
 | 
				
			||||||
				// this.getUserInfo()
 | 
									// this.getUserInfo()
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else{
 | 
								else{
 | 
				
			||||||
@@ -157,6 +159,16 @@ export const useStore = defineStore('main2', {
 | 
				
			|||||||
				// }
 | 
									// }
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							async getBgList(){
 | 
				
			||||||
 | 
								const res = await api.getBgList({page:1,pageSize:100})
 | 
				
			||||||
 | 
								// console.log(res)
 | 
				
			||||||
 | 
								if(res.code == 0) {
 | 
				
			||||||
 | 
									if(res.data && res.data.list && res.data.list.length>0 ) {
 | 
				
			||||||
 | 
										this.bgList = res.data.list
 | 
				
			||||||
 | 
										// console.log(this.bgList)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		afterFailLogin(duration){
 | 
							afterFailLogin(duration){
 | 
				
			||||||
			setTimeout(()=>{
 | 
								setTimeout(()=>{
 | 
				
			||||||
				uni.removeStorageSync('userInfo');
 | 
									uni.removeStorageSync('userInfo');
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										23
									
								
								uni_modules/uni-fab/changelog.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								uni_modules/uni-fab/changelog.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					## 1.2.5(2023-03-29)
 | 
				
			||||||
 | 
					- 新增 pattern.icon 属性,可自定义图标
 | 
				
			||||||
 | 
					## 1.2.4(2022-09-07)
 | 
				
			||||||
 | 
					小程序端由于 style 使用了对象导致报错,[详情](https://ask.dcloud.net.cn/question/152790?item_id=211778&rf=false)
 | 
				
			||||||
 | 
					## 1.2.3(2022-09-05)
 | 
				
			||||||
 | 
					- 修复 nvue 环境下,具有 tabBar 时,fab 组件下部位置无法正常获取 --window-bottom 的bug,详见:[https://ask.dcloud.net.cn/question/110638?notification_id=826310](https://ask.dcloud.net.cn/question/110638?notification_id=826310)
 | 
				
			||||||
 | 
					## 1.2.2(2021-12-29)
 | 
				
			||||||
 | 
					- 更新 组件依赖
 | 
				
			||||||
 | 
					## 1.2.1(2021-11-19)
 | 
				
			||||||
 | 
					- 修复 阴影颜色不正确的bug
 | 
				
			||||||
 | 
					## 1.2.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-fab](https://uniapp.dcloud.io/component/uniui/uni-fab)
 | 
				
			||||||
 | 
					## 1.1.1(2021-11-09) 
 | 
				
			||||||
 | 
					- 新增 提供组件设计资源,组件样式调整
 | 
				
			||||||
 | 
					## 1.1.0(2021-07-30)
 | 
				
			||||||
 | 
					- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
 | 
				
			||||||
 | 
					## 1.0.7(2021-05-12)
 | 
				
			||||||
 | 
					- 新增 组件示例地址
 | 
				
			||||||
 | 
					## 1.0.6(2021-02-05)
 | 
				
			||||||
 | 
					- 调整为uni_modules目录规范
 | 
				
			||||||
 | 
					- 优化 按钮背景色调整
 | 
				
			||||||
 | 
					- 优化 兼容pc端
 | 
				
			||||||
							
								
								
									
										491
									
								
								uni_modules/uni-fab/components/uni-fab/uni-fab.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										491
									
								
								uni_modules/uni-fab/components/uni-fab/uni-fab.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,491 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<view class="uni-cursor-point">
 | 
				
			||||||
 | 
							<view v-if="popMenu && (leftBottom||rightBottom||leftTop||rightTop) && content.length > 0" :class="{
 | 
				
			||||||
 | 
					        'uni-fab--leftBottom': leftBottom,
 | 
				
			||||||
 | 
					        'uni-fab--rightBottom': rightBottom,
 | 
				
			||||||
 | 
					        'uni-fab--leftTop': leftTop,
 | 
				
			||||||
 | 
					        'uni-fab--rightTop': rightTop
 | 
				
			||||||
 | 
					      }" class="uni-fab"
 | 
				
			||||||
 | 
									:style="nvueBottom"
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
								<view :class="{
 | 
				
			||||||
 | 
					          'uni-fab__content--left': horizontal === 'left',
 | 
				
			||||||
 | 
					          'uni-fab__content--right': horizontal === 'right',
 | 
				
			||||||
 | 
					          'uni-fab__content--flexDirection': direction === 'vertical',
 | 
				
			||||||
 | 
					          'uni-fab__content--flexDirectionStart': flexDirectionStart,
 | 
				
			||||||
 | 
					          'uni-fab__content--flexDirectionEnd': flexDirectionEnd,
 | 
				
			||||||
 | 
							  'uni-fab__content--other-platform': !isAndroidNvue
 | 
				
			||||||
 | 
					        }" :style="{ width: boxWidth, height: boxHeight, backgroundColor: styles.backgroundColor }"
 | 
				
			||||||
 | 
									class="uni-fab__content" elevation="5">
 | 
				
			||||||
 | 
									<view v-if="flexDirectionStart || horizontalLeft" class="uni-fab__item uni-fab__item--first" />
 | 
				
			||||||
 | 
									<view v-for="(item, index) in content" :key="index" :class="{ 'uni-fab__item--active': isShow }"
 | 
				
			||||||
 | 
										class="uni-fab__item" @click="_onItemClick(index, item)">
 | 
				
			||||||
 | 
										<image :src="item.active ? item.selectedIconPath : item.iconPath" class="uni-fab__item-image"
 | 
				
			||||||
 | 
											mode="aspectFit" />
 | 
				
			||||||
 | 
										<text class="uni-fab__item-text"
 | 
				
			||||||
 | 
											:style="{ color: item.active ? styles.selectedColor : styles.color }">{{ item.text }}</text>
 | 
				
			||||||
 | 
									</view>
 | 
				
			||||||
 | 
									<view v-if="flexDirectionEnd || horizontalRight" class="uni-fab__item uni-fab__item--first" />
 | 
				
			||||||
 | 
								</view>
 | 
				
			||||||
 | 
							</view>
 | 
				
			||||||
 | 
							<view :class="{
 | 
				
			||||||
 | 
							  'uni-fab__circle--leftBottom': leftBottom,
 | 
				
			||||||
 | 
							  'uni-fab__circle--rightBottom': rightBottom,
 | 
				
			||||||
 | 
							  'uni-fab__circle--leftTop': leftTop,
 | 
				
			||||||
 | 
							  'uni-fab__circle--rightTop': rightTop,
 | 
				
			||||||
 | 
							  'uni-fab__content--other-platform': !isAndroidNvue
 | 
				
			||||||
 | 
							}" class="uni-fab__circle uni-fab__plus" :style="{ 'background-color': styles.buttonColor, 'bottom': nvueBottom }" @click="_onClick">
 | 
				
			||||||
 | 
								<uni-icons class="fab-circle-icon" :type="styles.icon" :color="styles.iconColor" size="32"
 | 
				
			||||||
 | 
									:class="{'uni-fab__plus--active': isShow && content.length > 0}"></uni-icons>
 | 
				
			||||||
 | 
								<!-- <view class="fab-circle-v"  :class="{'uni-fab__plus--active': isShow && content.length > 0}"></view>
 | 
				
			||||||
 | 
								<view class="fab-circle-h" :class="{'uni-fab__plus--active': isShow  && content.length > 0}"></view> -->
 | 
				
			||||||
 | 
							</view>
 | 
				
			||||||
 | 
						</view>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
						let platform = 'other'
 | 
				
			||||||
 | 
						// #ifdef APP-NVUE
 | 
				
			||||||
 | 
						platform = uni.getSystemInfoSync().platform
 | 
				
			||||||
 | 
						// #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Fab 悬浮按钮
 | 
				
			||||||
 | 
						 * @description 点击可展开一个图形按钮菜单
 | 
				
			||||||
 | 
						 * @tutorial https://ext.dcloud.net.cn/plugin?id=144
 | 
				
			||||||
 | 
						 * @property {Object} pattern 可选样式配置项
 | 
				
			||||||
 | 
						 * @property {Object} horizontal = [left | right] 水平对齐方式
 | 
				
			||||||
 | 
						 * 	@value left 左对齐
 | 
				
			||||||
 | 
						 * 	@value right 右对齐
 | 
				
			||||||
 | 
						 * @property {Object} vertical = [bottom | top] 垂直对齐方式
 | 
				
			||||||
 | 
						 * 	@value bottom 下对齐
 | 
				
			||||||
 | 
						 * 	@value top 上对齐
 | 
				
			||||||
 | 
						 * @property {Object} direction = [horizontal | vertical] 展开菜单显示方式
 | 
				
			||||||
 | 
						 * 	@value horizontal 水平显示
 | 
				
			||||||
 | 
						 * 	@value vertical 垂直显示
 | 
				
			||||||
 | 
						 * @property {Array} content 展开菜单内容配置项
 | 
				
			||||||
 | 
						 * @property {Boolean} popMenu 是否使用弹出菜单
 | 
				
			||||||
 | 
						 * @event {Function} trigger 展开菜单点击事件,返回点击信息
 | 
				
			||||||
 | 
						 * @event {Function} fabClick 悬浮按钮点击事件
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						export default {
 | 
				
			||||||
 | 
							name: 'UniFab',
 | 
				
			||||||
 | 
							emits: ['fabClick', 'trigger'],
 | 
				
			||||||
 | 
							props: {
 | 
				
			||||||
 | 
								pattern: {
 | 
				
			||||||
 | 
									type: Object,
 | 
				
			||||||
 | 
									default () {
 | 
				
			||||||
 | 
										return {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								horizontal: {
 | 
				
			||||||
 | 
									type: String,
 | 
				
			||||||
 | 
									default: 'left'
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								vertical: {
 | 
				
			||||||
 | 
									type: String,
 | 
				
			||||||
 | 
									default: 'bottom'
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								direction: {
 | 
				
			||||||
 | 
									type: String,
 | 
				
			||||||
 | 
									default: 'horizontal'
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								content: {
 | 
				
			||||||
 | 
									type: Array,
 | 
				
			||||||
 | 
									default () {
 | 
				
			||||||
 | 
										return []
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								show: {
 | 
				
			||||||
 | 
									type: Boolean,
 | 
				
			||||||
 | 
									default: false
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								popMenu: {
 | 
				
			||||||
 | 
									type: Boolean,
 | 
				
			||||||
 | 
									default: true
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							data() {
 | 
				
			||||||
 | 
								return {
 | 
				
			||||||
 | 
									fabShow: false,
 | 
				
			||||||
 | 
									isShow: false,
 | 
				
			||||||
 | 
									isAndroidNvue: platform === 'android',
 | 
				
			||||||
 | 
									styles: {
 | 
				
			||||||
 | 
										color: '#3c3e49',
 | 
				
			||||||
 | 
										selectedColor: '#007AFF',
 | 
				
			||||||
 | 
										backgroundColor: '#fff',
 | 
				
			||||||
 | 
										buttonColor: '#007AFF',
 | 
				
			||||||
 | 
										iconColor: '#fff',
 | 
				
			||||||
 | 
										icon: 'plusempty'
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							computed: {
 | 
				
			||||||
 | 
								contentWidth(e) {
 | 
				
			||||||
 | 
									return (this.content.length + 1) * 55 + 15 + 'px'
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								contentWidthMin() {
 | 
				
			||||||
 | 
									return '55px'
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								// 动态计算宽度
 | 
				
			||||||
 | 
								boxWidth() {
 | 
				
			||||||
 | 
									return this.getPosition(3, 'horizontal')
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								// 动态计算高度
 | 
				
			||||||
 | 
								boxHeight() {
 | 
				
			||||||
 | 
									return this.getPosition(3, 'vertical')
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								// 计算左下位置
 | 
				
			||||||
 | 
								leftBottom() {
 | 
				
			||||||
 | 
									return this.getPosition(0, 'left', 'bottom')
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								// 计算右下位置
 | 
				
			||||||
 | 
								rightBottom() {
 | 
				
			||||||
 | 
									return this.getPosition(0, 'right', 'bottom')
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								// 计算左上位置
 | 
				
			||||||
 | 
								leftTop() {
 | 
				
			||||||
 | 
									return this.getPosition(0, 'left', 'top')
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								rightTop() {
 | 
				
			||||||
 | 
									return this.getPosition(0, 'right', 'top')
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								flexDirectionStart() {
 | 
				
			||||||
 | 
									return this.getPosition(1, 'vertical', 'top')
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								flexDirectionEnd() {
 | 
				
			||||||
 | 
									return this.getPosition(1, 'vertical', 'bottom')
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								horizontalLeft() {
 | 
				
			||||||
 | 
									return this.getPosition(2, 'horizontal', 'left')
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								horizontalRight() {
 | 
				
			||||||
 | 
									return this.getPosition(2, 'horizontal', 'right')
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								// 计算 nvue bottom
 | 
				
			||||||
 | 
								nvueBottom() {
 | 
				
			||||||
 | 
									const safeBottom = uni.getSystemInfoSync().windowBottom;
 | 
				
			||||||
 | 
									// #ifdef APP-NVUE
 | 
				
			||||||
 | 
									return 30 + safeBottom
 | 
				
			||||||
 | 
									// #endif
 | 
				
			||||||
 | 
									// #ifndef APP-NVUE
 | 
				
			||||||
 | 
									return 30
 | 
				
			||||||
 | 
									// #endif
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							watch: {
 | 
				
			||||||
 | 
								pattern: {
 | 
				
			||||||
 | 
									handler(val, oldVal) {
 | 
				
			||||||
 | 
										this.styles = Object.assign({}, this.styles, val)
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									deep: true
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							created() {
 | 
				
			||||||
 | 
								this.isShow = this.show
 | 
				
			||||||
 | 
								if (this.top === 0) {
 | 
				
			||||||
 | 
									this.fabShow = true
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// 初始化样式
 | 
				
			||||||
 | 
								this.styles = Object.assign({}, this.styles, this.pattern)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							methods: {
 | 
				
			||||||
 | 
								_onClick() {
 | 
				
			||||||
 | 
									this.$emit('fabClick')
 | 
				
			||||||
 | 
									if (!this.popMenu) {
 | 
				
			||||||
 | 
										return
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									this.isShow = !this.isShow
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								open() {
 | 
				
			||||||
 | 
									this.isShow = true
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								close() {
 | 
				
			||||||
 | 
									this.isShow = false
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								/**
 | 
				
			||||||
 | 
								 * 按钮点击事件
 | 
				
			||||||
 | 
								 */
 | 
				
			||||||
 | 
								_onItemClick(index, item) {
 | 
				
			||||||
 | 
									if (!this.isShow) {
 | 
				
			||||||
 | 
										return
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									this.$emit('trigger', {
 | 
				
			||||||
 | 
										index,
 | 
				
			||||||
 | 
										item
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								/**
 | 
				
			||||||
 | 
								 * 获取 位置信息
 | 
				
			||||||
 | 
								 */
 | 
				
			||||||
 | 
								getPosition(types, paramA, paramB) {
 | 
				
			||||||
 | 
									if (types === 0) {
 | 
				
			||||||
 | 
										return this.horizontal === paramA && this.vertical === paramB
 | 
				
			||||||
 | 
									} else if (types === 1) {
 | 
				
			||||||
 | 
										return this.direction === paramA && this.vertical === paramB
 | 
				
			||||||
 | 
									} else if (types === 2) {
 | 
				
			||||||
 | 
										return this.direction === paramA && this.horizontal === paramB
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										return this.isShow && this.direction === paramA ? this.contentWidth : this.contentWidthMin
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" >
 | 
				
			||||||
 | 
						$uni-shadow-base:0 1px 5px 2px rgba($color: #000000, $alpha: 0.3) !default;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab {
 | 
				
			||||||
 | 
							position: fixed;
 | 
				
			||||||
 | 
							/* #ifndef APP-NVUE */
 | 
				
			||||||
 | 
							display: flex;
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
							justify-content: center;
 | 
				
			||||||
 | 
							align-items: center;
 | 
				
			||||||
 | 
							z-index: 10;
 | 
				
			||||||
 | 
							border-radius: 45px;
 | 
				
			||||||
 | 
							box-shadow: $uni-shadow-base;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-cursor-point {
 | 
				
			||||||
 | 
							/* #ifdef H5 */
 | 
				
			||||||
 | 
							cursor: pointer;
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab--active {
 | 
				
			||||||
 | 
							opacity: 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab--leftBottom {
 | 
				
			||||||
 | 
							left: 15px;
 | 
				
			||||||
 | 
							bottom: 30px;
 | 
				
			||||||
 | 
							/* #ifdef H5 */
 | 
				
			||||||
 | 
							left: calc(15px + var(--window-left));
 | 
				
			||||||
 | 
							bottom: calc(30px + var(--window-bottom));
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
							// padding: 10px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab--leftTop {
 | 
				
			||||||
 | 
							left: 15px;
 | 
				
			||||||
 | 
							top: 30px;
 | 
				
			||||||
 | 
							/* #ifdef H5 */
 | 
				
			||||||
 | 
							left: calc(15px + var(--window-left));
 | 
				
			||||||
 | 
							top: calc(30px + var(--window-top));
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
							// padding: 10px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab--rightBottom {
 | 
				
			||||||
 | 
							right: 15px;
 | 
				
			||||||
 | 
							bottom: 30px;
 | 
				
			||||||
 | 
							/* #ifdef H5 */
 | 
				
			||||||
 | 
							right: calc(15px + var(--window-right));
 | 
				
			||||||
 | 
							bottom: calc(30px + var(--window-bottom));
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
							// padding: 10px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab--rightTop {
 | 
				
			||||||
 | 
							right: 15px;
 | 
				
			||||||
 | 
							top: 30px;
 | 
				
			||||||
 | 
							/* #ifdef H5 */
 | 
				
			||||||
 | 
							right: calc(15px + var(--window-right));
 | 
				
			||||||
 | 
							top: calc(30px + var(--window-top));
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
							// padding: 10px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__circle {
 | 
				
			||||||
 | 
							position: fixed;
 | 
				
			||||||
 | 
							/* #ifndef APP-NVUE */
 | 
				
			||||||
 | 
							display: flex;
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
							justify-content: center;
 | 
				
			||||||
 | 
							align-items: center;
 | 
				
			||||||
 | 
							width: 55px;
 | 
				
			||||||
 | 
							height: 55px;
 | 
				
			||||||
 | 
							background-color: #3c3e49;
 | 
				
			||||||
 | 
							border-radius: 45px;
 | 
				
			||||||
 | 
							z-index: 11;
 | 
				
			||||||
 | 
							// box-shadow: $uni-shadow-base;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__circle--leftBottom {
 | 
				
			||||||
 | 
							left: 15px;
 | 
				
			||||||
 | 
							bottom: 30px;
 | 
				
			||||||
 | 
							/* #ifdef H5 */
 | 
				
			||||||
 | 
							left: calc(15px + var(--window-left));
 | 
				
			||||||
 | 
							bottom: calc(30px + var(--window-bottom));
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__circle--leftTop {
 | 
				
			||||||
 | 
							left: 15px;
 | 
				
			||||||
 | 
							top: 30px;
 | 
				
			||||||
 | 
							/* #ifdef H5 */
 | 
				
			||||||
 | 
							left: calc(15px + var(--window-left));
 | 
				
			||||||
 | 
							top: calc(30px + var(--window-top));
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__circle--rightBottom {
 | 
				
			||||||
 | 
							right: 15px;
 | 
				
			||||||
 | 
							bottom: 30px;
 | 
				
			||||||
 | 
							/* #ifdef H5 */
 | 
				
			||||||
 | 
							right: calc(15px + var(--window-right));
 | 
				
			||||||
 | 
							bottom: calc(30px + var(--window-bottom));
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__circle--rightTop {
 | 
				
			||||||
 | 
							right: 15px;
 | 
				
			||||||
 | 
							top: 30px;
 | 
				
			||||||
 | 
							/* #ifdef H5 */
 | 
				
			||||||
 | 
							right: calc(15px + var(--window-right));
 | 
				
			||||||
 | 
							top: calc(30px + var(--window-top));
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__circle--left {
 | 
				
			||||||
 | 
							left: 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__circle--right {
 | 
				
			||||||
 | 
							right: 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__circle--top {
 | 
				
			||||||
 | 
							top: 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__circle--bottom {
 | 
				
			||||||
 | 
							bottom: 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__plus {
 | 
				
			||||||
 | 
							font-weight: bold;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// .fab-circle-v {
 | 
				
			||||||
 | 
						// 	position: absolute;
 | 
				
			||||||
 | 
						// 	width: 2px;
 | 
				
			||||||
 | 
						// 	height: 24px;
 | 
				
			||||||
 | 
						// 	left: 0;
 | 
				
			||||||
 | 
						// 	top: 0;
 | 
				
			||||||
 | 
						// 	right: 0;
 | 
				
			||||||
 | 
						// 	bottom: 0;
 | 
				
			||||||
 | 
						// 	/* #ifndef APP-NVUE */
 | 
				
			||||||
 | 
						// 	margin: auto;
 | 
				
			||||||
 | 
						// 	/* #endif */
 | 
				
			||||||
 | 
						// 	background-color: white;
 | 
				
			||||||
 | 
						// 	transform: rotate(0deg);
 | 
				
			||||||
 | 
						// 	transition: transform 0.3s;
 | 
				
			||||||
 | 
						// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// .fab-circle-h {
 | 
				
			||||||
 | 
						// 	position: absolute;
 | 
				
			||||||
 | 
						// 	width: 24px;
 | 
				
			||||||
 | 
						// 	height: 2px;
 | 
				
			||||||
 | 
						// 	left: 0;
 | 
				
			||||||
 | 
						// 	top: 0;
 | 
				
			||||||
 | 
						// 	right: 0;
 | 
				
			||||||
 | 
						// 	bottom: 0;
 | 
				
			||||||
 | 
						// 	/* #ifndef APP-NVUE */
 | 
				
			||||||
 | 
						// 	margin: auto;
 | 
				
			||||||
 | 
						// 	/* #endif */
 | 
				
			||||||
 | 
						// 	background-color: white;
 | 
				
			||||||
 | 
						// 	transform: rotate(0deg);
 | 
				
			||||||
 | 
						// 	transition: transform 0.3s;
 | 
				
			||||||
 | 
						// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.fab-circle-icon {
 | 
				
			||||||
 | 
							transform: rotate(0deg);
 | 
				
			||||||
 | 
							transition: transform 0.3s;
 | 
				
			||||||
 | 
							font-weight: 200;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__plus--active {
 | 
				
			||||||
 | 
							transform: rotate(135deg);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__content {
 | 
				
			||||||
 | 
							/* #ifndef APP-NVUE */
 | 
				
			||||||
 | 
							box-sizing: border-box;
 | 
				
			||||||
 | 
							display: flex;
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
							flex-direction: row;
 | 
				
			||||||
 | 
							border-radius: 55px;
 | 
				
			||||||
 | 
							overflow: hidden;
 | 
				
			||||||
 | 
							transition-property: width, height;
 | 
				
			||||||
 | 
							transition-duration: 0.2s;
 | 
				
			||||||
 | 
							width: 55px;
 | 
				
			||||||
 | 
							border-color: #DDDDDD;
 | 
				
			||||||
 | 
							border-width: 1rpx;
 | 
				
			||||||
 | 
							border-style: solid;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__content--other-platform {
 | 
				
			||||||
 | 
							border-width: 0px;
 | 
				
			||||||
 | 
							box-shadow: $uni-shadow-base;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__content--left {
 | 
				
			||||||
 | 
							justify-content: flex-start;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__content--right {
 | 
				
			||||||
 | 
							justify-content: flex-end;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__content--flexDirection {
 | 
				
			||||||
 | 
							flex-direction: column;
 | 
				
			||||||
 | 
							justify-content: flex-end;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__content--flexDirectionStart {
 | 
				
			||||||
 | 
							flex-direction: column;
 | 
				
			||||||
 | 
							justify-content: flex-start;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__content--flexDirectionEnd {
 | 
				
			||||||
 | 
							flex-direction: column;
 | 
				
			||||||
 | 
							justify-content: flex-end;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__item {
 | 
				
			||||||
 | 
							/* #ifndef APP-NVUE */
 | 
				
			||||||
 | 
							display: flex;
 | 
				
			||||||
 | 
							/* #endif */
 | 
				
			||||||
 | 
							flex-direction: column;
 | 
				
			||||||
 | 
							justify-content: center;
 | 
				
			||||||
 | 
							align-items: center;
 | 
				
			||||||
 | 
							width: 55px;
 | 
				
			||||||
 | 
							height: 55px;
 | 
				
			||||||
 | 
							opacity: 0;
 | 
				
			||||||
 | 
							transition: opacity 0.2s;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__item--active {
 | 
				
			||||||
 | 
							opacity: 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__item-image {
 | 
				
			||||||
 | 
							width: 20px;
 | 
				
			||||||
 | 
							height: 20px;
 | 
				
			||||||
 | 
							margin-bottom: 4px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__item-text {
 | 
				
			||||||
 | 
							color: #FFFFFF;
 | 
				
			||||||
 | 
							font-size: 12px;
 | 
				
			||||||
 | 
							line-height: 12px;
 | 
				
			||||||
 | 
							margin-top: 2px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.uni-fab__item--first {
 | 
				
			||||||
 | 
							width: 55px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										84
									
								
								uni_modules/uni-fab/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								uni_modules/uni-fab/package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "id": "uni-fab",
 | 
				
			||||||
 | 
					  "displayName": "uni-fab 悬浮按钮",
 | 
				
			||||||
 | 
					  "version": "1.2.5",
 | 
				
			||||||
 | 
					  "description": "悬浮按钮 fab button ,点击可展开一个图标按钮菜单。",
 | 
				
			||||||
 | 
					  "keywords": [
 | 
				
			||||||
 | 
					    "uni-ui",
 | 
				
			||||||
 | 
					    "uniui",
 | 
				
			||||||
 | 
					    "按钮",
 | 
				
			||||||
 | 
					    "悬浮按钮",
 | 
				
			||||||
 | 
					    "fab"
 | 
				
			||||||
 | 
					],
 | 
				
			||||||
 | 
					  "repository": "https://github.com/dcloudio/uni-ui",
 | 
				
			||||||
 | 
					  "engines": {
 | 
				
			||||||
 | 
					    "HBuilderX": ""
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "directories": {
 | 
				
			||||||
 | 
					    "example": "../../temps/example_temps"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					"dcloudext": {
 | 
				
			||||||
 | 
					    "sale": {
 | 
				
			||||||
 | 
					      "regular": {
 | 
				
			||||||
 | 
					        "price": "0.00"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "sourcecode": {
 | 
				
			||||||
 | 
					        "price": "0.00"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "contact": {
 | 
				
			||||||
 | 
					      "qq": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "declaration": {
 | 
				
			||||||
 | 
					      "ads": "无",
 | 
				
			||||||
 | 
					      "data": "无",
 | 
				
			||||||
 | 
					      "permissions": "无"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
 | 
				
			||||||
 | 
					    "type": "component-vue"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "uni_modules": {
 | 
				
			||||||
 | 
					    "dependencies": ["uni-scss","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"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										9
									
								
								uni_modules/uni-fab/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								uni_modules/uni-fab/readme.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					## Fab 悬浮按钮
 | 
				
			||||||
 | 
					> **组件名:uni-fab**
 | 
				
			||||||
 | 
					> 代码块: `uFab`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					点击可展开一个图形按钮菜单
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fab)
 | 
				
			||||||
 | 
					#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
 | 
				
			||||||
		Reference in New Issue
	
	Block a user