Merge remote-tracking branch 'origin/jihan_0223_个人中心和客服功能会员APP开发分支'

# Conflicts:
#	pages.json
#	pages/Personal/Personal.vue
#	pages/classification/classification.vue
#	pages/shopping/shopping.vue
This commit is contained in:
曹辉 2023-04-20 15:41:05 +08:00
commit acdd67ea30
61 changed files with 2596 additions and 1241 deletions

View File

@ -0,0 +1,8 @@
import request from "../request.js"
export function getHeathHousingList(pageNum, pageSize) {
return request({
url: `/nurseApplet/nearbyNursingStation/getHeathHousingList?pageNum=${pageNum}&pageSize=${pageSize}&informationCategoryType=HEALTH_NOUS`,
method: 'get',
})
}

View File

@ -2,7 +2,7 @@ import request from "../request.js"
export function getAppStationItemInfo(stationId, stationItemId, stationItemPriceId) {
return request({
url: `/nurseApp/login/getAppStationItemInfo?stationId=${stationId}&stationItemId=${stationItemId}&stationItemPriceId=${stationItemPriceId}`,
url: `/nurseApplet/login/getStationItemInfo?stationId=${stationId}&stationItemId=${stationItemId}&stationItemPriceId=${stationItemPriceId}`,
method: 'GET'
})
}

View File

@ -22,4 +22,14 @@ export function submitAppointment(data) {
data
})
}
// 小程序预约服务支付接口
export function appletAppointmentOrderPay(data) {
return request({
url: `/nurseApp/weChatPayment/appletAppointmentOrderPay`,
method: 'post',
data
})
}

View File

@ -1,4 +1,4 @@
// var baseurl = "http://192.168.16.30:8080";
var baseurl = "http://192.168.16.49:8081";
var baseurl = "http://192.168.16.30:8088";
// var baseurl = "http://192.168.16.76:8080";
export default baseurl

9
api/homepage/index.js Normal file
View File

@ -0,0 +1,9 @@
import request from "../request.js"
export function getPoserInfoListByType() {
return request({
url: `/nurseApplet/nearbyNursingStation/getPoserInfoListByType?moduleType=HOME_PAGE_MODULE`,
method: 'GET'
})
}

View File

@ -9,9 +9,9 @@ export function introductionList(id) {
}
export function itemList(id,pageSize,pageNum) {
export function itemList(id,pageSize,pageNum,nurseClassifyInfoId) {
return request({
url: `/nurseApplet/nearbyNursingStation/itemList?pageSize=${pageSize}&pageNum=${pageNum}&nurseStationId=${id}`,
url: `/nurseApplet/nearbyNursingStation/itemList?pageSize=${pageSize}&pageNum=${pageNum}&nurseStationId=${id}&nurseClassifyInfoId=${nurseClassifyInfoId}`,
method: 'GET'
})
}

View File

@ -1,14 +1,12 @@
import request from "../request.js"
export function nearbyList(pageSize,pageNum,longitude, latitude) {
export function nearbyList(pageSize, pageNum, longitude, latitude,ClassifyInfoId,itemClassId,searchName) {
return request({
url: `/nurseApplet/nearbyNursingStation/nearbyList?pageSize=${pageSize}&pageNum=${pageNum}&homeLongitude=${longitude}&homeLatitude=${latitude}`,
url: `/nurseApplet/nearbyNursingStation/nearbyList?pageSize=${pageSize}&pageNum=${pageNum}&homeLongitude=${longitude}&homeLatitude=${latitude}&nurseClassifyInfoId=${ClassifyInfoId}&nurseItemClassifyInfoId=${itemClassId}&searchName=${searchName}`,
method: 'GET'
})
}
//被护理人信息 经纬度
export function getPatientInfo(id) {
return request({
@ -16,3 +14,11 @@ export function getPatientInfo(id) {
method: 'GET'
})
}
//护理站和护理项目分类
export function getNurseClassifyList() {
return request({
url: `/nurseApplet/nearbyNursingStation/getNurseClassifyList?moduleType=NURSE_AGENCY_INTRODUCE_MODULE`,
method: 'GET'
})
}

View File

@ -9,15 +9,7 @@
"navigationBarTitleText": "",
"navigationStyle": "custom"
}
}, {
"path": "pages/information/information",
"style": {
"navigationBarTitleText": "完善个人信息",
"navigationBarBackgroundColor": "#ffffff", //
"enablePullDownRefresh": false
}
},
{
},{
"path": "pages/forgotPassword/forgotPassword",
"style": {
"navigationBarTitleText": "忘记密码",
@ -30,6 +22,27 @@
"navigationBarTitleText": "注册账号",
"navigationBarBackgroundColor": "#ffffff"
}
}, {
"path": "pages/ProjectDetails/ProjectDetails",
"style": {
"navigationBarTitleText": "护理项目详情",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
}, {
"path": "pages/modifyAddress/modifyAddress",
"style": {
"navigationBarTitleText": "修改地址",
"navigationBarBackgroundColor": "#ffffff", //
"enablePullDownRefresh": true //true
}
}, {
"path": "pages/information/information",
"style": {
"navigationBarTitleText": "完善个人信息",
"navigationBarBackgroundColor": "#ffffff", //
"enablePullDownRefresh": false
}
},
{
"path": "pages/lookrate/lookrate",
@ -38,23 +51,13 @@
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
}
}, {
"path": "pages/ServiceDetails/ServiceDetails",
"style": {
"navigationBarTitleText": "服务详情",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
}, {
"path": "pages/ProjectDetails/ProjectDetails",
"style": {
"navigationBarTitleText": "护理项目详情",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
}, {
"path": "pages/goodsorderRate/goodsorderRate",
"style": {
@ -62,13 +65,6 @@
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
}, {
"path": "pages/Bodysatelliteintegration/Bodysatelliteintegration",
"style": {
"navigationBarTitleText": "体卫融合",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
},
{
"path": "pages/modify/modify",
@ -116,7 +112,6 @@
"enablePullDownRefresh": true //true
}
},
{
"path": "pages/user/user",
"style": {
@ -149,13 +144,13 @@
"navigationBarBackgroundColor": "#ffffff"
}
},
{
"path": "pages/login/login",
"style": {
"navigationBarTitleText": "登录",
"navigationStyle": "custom",
"enablePullDownRefresh": false
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
},
{
@ -166,11 +161,10 @@
"navigationBarBackgroundColor": "#ffffff" //
}
},
{
"path": "pages/Nursingstationserviceorder/Nursingstationserviceorder",
"style": {
"navigationBarTitleText": "护理服务订单",
"navigationBarTitleText": "护理机构服务订单",
"navigationBarBackgroundColor": "#ffffff", //
"onReachBottomDistance": 40, // px
"enablePullDownRefresh": true //true
@ -209,7 +203,6 @@
"enablePullDownRefresh": false
}
},
{
"path": "pages/order/order",
"style": {
@ -224,17 +217,16 @@
"navigationBarTitleText": "预约详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/homepage/homepage",
"style": {
"navigationBarTitleText": "泉医到家",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
"navigationStyle": "custom",
"navigationBarBackgroundColor": "#ffffff",
"enablePullDownRefresh": false
}
},
{
"path": "pages/confirmOrder/confirmOrder",
"style": {
@ -265,7 +257,6 @@
"path": "pages/ProductList/ProductList", //
"style": {
"navigationBarTitleText": "医路优品",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff",
"onReachBottomDistance": 40, // px
"enablePullDownRefresh": true //true
@ -282,76 +273,86 @@
{
"path": "pages/nursestation/nursestation",
"style": {
"navigationBarTitleText": "护理详情",
"navigationBarTitleText": "护理机构详情",
"navigationBarBackgroundColor": "#ffffff",
"onReachBottomDistance": 100, // px
"enablePullDownRefresh": true //true
}
},
{
"path": "pages/site/site",
"style": {
"navigationBarTitleText": "附近护理站",
"navigationBarTitleText": "护理机构",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff", //
"onReachBottomDistance": 40, // px
"onReachBottomDistance": 100, // px
"enablePullDownRefresh": true //true
}
},
{
"path": "pages/detail/detail",
"style": {
"navigationBarTitleText": "护理站简介",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
},
{
"path": "pages/medicine/medicine",
"style": {
"navigationBarTitleText": "就医",
"navigationBarTitleText": "健康咨询",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
}
},
{
"path": "pages/modifyAddress/modifyAddress",
"style": {
"navigationBarTitleText": "修改地址",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
},
{
"path": "pages/Doctordetails/Doctordetails",
"style": {
"navigationBarTitleText": "医生信息",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
}
}, {
"path": "pages/Geriatricdisease/Geriatricdisease",
"style": {
"navigationBarTitleText": "老年病中心",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
}
}, {
"path": "pages/diseasemanagement/diseasemanagement",
"style": {
"navigationBarTitleText": "专病管理",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
}
}, {
},
{
"path": "pages/utabs/u-tabs",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
}
},
{
"path": "pages/classification/classification",
"style": {
"navigationBarTitleText": "分类",
"enablePullDownRefresh": false
// "disableScroll": true
"enablePullDownRefresh": false,
"disableScroll": true
// "navigationBarBackgroundColor": "#ffffff",
// "onReachBottomDistance": 50 // px
// "enablePullDownRefresh": true //true
}
}, {
"path": "pages/Healthknowledge/Healthknowledge",
"style": {
"navigationBarTitleText": "健康常识",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
}
}, {
"path": "pages/Healthitem/Healthitem",
"style": {
"navigationBarTitleText": "健康常识",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
}
},
{
"path": "pages/customerservice/customerservice",
"style": {
"navigationBarTitleText": "在线客服",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
}
}, {
"path": "pages/materialbenefits/materialbenefits",
"style": {
"navigationBarTitleText": "新人福利",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff"
}
}
@ -369,10 +370,16 @@
"borderStyle": "black",
"backgroundColor": "#ffffff",
"list": [{
"pagePath": "pages/homepage/homepage",
"iconPath": "static/homepagew.png",
"selectedIconPath": "static/homepagews.png",
"text": "首页"
"pagePath": "pages/homepage/homepage",
"iconPath": "static/homepagew.png",
"selectedIconPath": "static/homepagews.png",
"text": "首页"
},
{
"pagePath": "pages/shopping/shopping",
"iconPath": "static/shoping.png",
"selectedIconPath": "static/shopingw.png",
"text": "商城"
},
{
"pagePath": "pages/Personal/Personal",

View File

@ -1,104 +0,0 @@
<template>
<view class="app">
<view class="info">
<view class="image">
</view>
<view class="name">
某某某
</view>
<view class="position">
主任医师
</view>
<view class="border">
</view>
<view class="text">
熟悉呼吸系统疾病的诊治尤其擅 长肺栓塞肺动脉高压和慢性气道疾 病的研究
</view>
</view>
<view class="price">
</view>
</view>
</template>
<script>
export default {
data() {
return {
};
}
}
</script>
<style lang="scss">
.app {
padding-top: 20rpx;
.price {
width: 94%;
height: 105rpx;
background: #FFFFFF;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
margin: 0 auto;
margin-top: 15rpx;
}
.info {
width: 94%;
height: 651rpx;
margin: 0 auto;
background: #FFFFFF;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
position: relative;
font-size: 36rpx;
.text {
width: 90%;
line-height: 67rpx;
position: absolute;
left: 5%;
top: 263rpx;
text-indent: 1em;
}
.border {
width: 90%;
margin: 0 auto;
height: 1rpx;
background: #D8D4D4;
position: absolute;
left: 5%;
top: 209rpx;
}
.position {
font-size: 35rpx;
color: #969394;
position: absolute;
left: 264rpx;
top: 122rpx;
}
.name {
position: absolute;
left: 264rpx;
top: 68rpx;
}
.image {
width: 147rpx;
height: 150rpx;
background: #BFBFBF;
border-radius: 25rpx;
position: absolute;
left: 74rpx;
top: 32rpx;
}
}
}
</style>

View File

@ -0,0 +1,50 @@
<template>
<view class="app">
<view class="title">
{{item.informationTitle}}
</view>
<view class="text" v-html="item.informationContent">
</view>
</view>
</template>
<script>
export default {
data() {
return {
item: null,
};
},
onLoad(options) { //
this.item = JSON.parse(decodeURIComponent(options.item))
this.item.informationContent = this.item.informationContent.replace(/\<img/gi,
"<br/> <img class='richPic'")
},
onReady() { //
},
}
</script>
<style lang="scss">
.title {
padding-left: 3%;
font-size: 38rpx;
font-weight: bold;
white-space: normal;
word-break: break-all;
margin-bottom: 20rpx;
}
.text {
width: 96%;
margin: 0 auto;
background-color: #fff;
padding: 20rpx;
border-radius: 10rpx;
}
/deep/ .richPic {
width: 100% !important;
height: 100% !important;
}
</style>

View File

@ -0,0 +1,174 @@
<template>
<view class="app">
<u-tabs :list="tabList" :current="tabcurrent" @change="change"></u-tabs>
<view class="Healthknowledge" v-if="informationCategoryVOList.length>0">
<!-- <view class="title">
健康常识
</view> -->
<view class="list">
<view class="item" v-for="(item,index) in informationCategoryVOList" :key="index"
@tap='gohealthitem(item)'>
<view class="text">
{{item.informationTitle}}
</view>
<view class="author"></view>
<image :src="item.leadThumbnailUrl" mode=""></image>
</view>
</view>
</view>
<view class="noorder" v-else>
<image src="../../static/noorder.png" mode=""></image>
<view class="">
暂无内容
</view>
</view>
<u-back-top :scroll-top="scrollTop"></u-back-top>
</view>
</template>
<script>
import {
getHeathHousingList
} from '@/api/Healthknowledge/index.js'
import baseurl from '@/api/baseurl.js'
export default {
data() {
return {
tabcurrent: 0,
tabList: [{
name: '健康常识'
}],
pageNum: 1,
pageSize: 10,
informationCategoryVOList: [],
total: 0,
scrollTop: 0,
};
},
onShow() {},
onLoad() {
this.pageNum = 1
this.getHeathHousing();
},
methods: {
//item
gohealthitem(item) {
uni.navigateTo({
url: `/pages/Healthitem/Healthitem?item=${encodeURIComponent(JSON.stringify(item))}`
})
},
getHeathHousing() {
getHeathHousingList(this.pageNum, this.pageSize).then(res => {
res.rows.forEach(e => {
e.leadThumbnailUrl = baseurl + e.leadThumbnailUrl
})
this.informationCategoryVOList = res.rows
this.total = res.total
})
},
change() {},
},
onPageScroll(e) {
this.scrollTop = e.scrollTop;
},
onReachBottom() { //
if (this.informationCategoryVOList.length >= this.total) {} else {
this.pageNum++
getHeathHousingList(this.pageNum, this.pageSize).then(res => {
if (res.rows) {
res.rows.forEach(e => {
e.leadThumbnailUrl = baseurl + e.leadThumbnailUrl
this.informationCategoryVOList.push(e)
})
}
})
}
},
onPullDownRefresh() { //
this.pageNum = 1;
this.getHeathHousing();
setTimeout(function() {
uni.stopPullDownRefresh();
}, 1000);
},
}
</script>
<style lang="scss">
.app {
padding: 0;
.noorder {
margin-top: 20%;
image {
display: block;
margin: 0 auto;
width: 200rpx;
height: 240rpx;
}
view {
margin-top: 100rpx;
text-align: center;
font-size: 36rpx;
color: #BFBFBF;
}
}
.Healthknowledge {
width: 94%;
margin: 20rpx auto;
padding: 0 50rpx 50rpx;
background-color: #fff;
position: relative;
line-height: 46rpx;
.list {
width: 100%;
margin: 20rpx auto 0;
.item {
width: 100%;
height: 200rpx;
position: relative;
border-bottom: 2rpx solid #CDC9C9;
image {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
width: 253rpx;
height: 164rpx;
border-radius: 10rpx;
}
.author {
position: absolute;
bottom: 20rpx;
left: 0;
font-size: 20rpx;
color: #969494;
}
.text {
position: absolute;
top: 20rpx;
left: 0;
width: 50%;
font-size: 30rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
.title {
font-size: 38rpx;
font-weight: bold;
}
}
}
</style>

View File

@ -13,12 +13,6 @@
我的订单
</view>
</view>
<!-- <view class="item" style="background-color: #00C176 ;">
<image src="../../static/home.png" mode=""></image>
<view class="title" style="font-size: 42rpx;">
我的家庭
</view>
</view> -->
<view class="item">
</view>
<view class="item">

View File

@ -1,9 +1,25 @@
.app {
height: 100%;
padding: 2% 2% 150rpx 2%;
padding: 0 0 0 0;
padding-top: 10rpx;
font-size: 34rpx;
position: relative;
.swiper-box {
width: 100%;
height: 500rpx;
}
.swiper-item {
height: 500rpx;
text-align: center;
image{
width: 100%;
height: 500rpx !important;
}
}
video{
height: 100%;
width: 100%;
}
.mask {
.information {
width: 70%;
@ -49,101 +65,69 @@
}
}
}
.appointment {
width: 120rpx;
height: 70rpx;
background: #4C7BC9;
border-radius: 26rpx;
color: #ffffff;
text-align: center;
line-height: 70rpx;
position: absolute;
bottom:20rpx;
right:5%;
.bottomcontent{
position: fixed;
width: 100%;
height: 100rpx;
bottom: 0;
background-color: #FFFFFF;
.appoinprice{
padding-left: 20rpx;
font-size: 48rpx;
color: #F44B2F;
line-height: 70rpx;
}
.appointment {
width: 200rpx;
height: 70rpx;
background: #F44B2F;
border-radius: 30rpx;
color: #ffffff;
text-align: center;
line-height: 70rpx;
position: absolute;
bottom:20rpx;
right:5%;
}
}
.detailtitle {
position: relative;
width: 94%;
width: 100%;
height: 100%;
margin: 0 auto;
background: #FFFFFF;
border-radius: 20rpx;
margin-top: 3%;
font-size: 31rpx;
padding: 3%;
padding-bottom: 50rpx;
padding-bottom: 150rpx;
.textInfo {
word-break:break-all;
font-size: 29rpx;
text-indent: 2rem;
line-height: 42rpx;
color: #666666;
padding-top: 30rpx;
/deep/ .richPic {
width: 100% !important;
height: 100% !important;
}
}
.Introduction {
font-size: 31rpx;
color: #333333;
line-height: 12rpx;
margin-left: -3%;
padding: 3%;
padding: 3% 3% 3% 0;
font-size: 32rpx;
}
}
.item {
width: 95%;
height: 100%;
margin: 0 auto;
width: 100%;
height: 200rpx;
background: #FFFFFF;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
margin: 20rpx auto 0;
padding: 3% 3% 40rpx 3%;
line-height: 60rpx;
position: relative;
image {
width: 170rpx;
height: 170rpx;
margin-left: 3%;
}
.servicetime {
color: #999999;
line-height: 37rpx;
font-size: 30rpx;
position: absolute;
top: 35%;
left: 35%;
}
.price {
color: red;
font-size: 32rpx;
position: absolute;
top: 65%;
left: 35%;
}
.product {
color: #000000;
width: 60%;
position: absolute;
top: 14%;
left: 32%;
font-size: 28rpx;
}
.huanyao {
color: #000000;
position: absolute;
top: 10%;
left: 35%;
width: 60%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
.text{
padding: 40rpx 20% 0 40rpx;
width: 100%;
height: 81rpx;
font-size: 38rpx;
font-weight: 500;
}
}

View File

@ -1,28 +1,55 @@
<template>
<view class="app">
<view class="container">
<view>
<!-- 轮播图 -->
<swiper indicator-dots="true" indicator-color='#fff' indicator-active-color='#0086d6'
:autoplay="autoplay" interval="3000" duration="1500" show-center-play-btn="true" class="swiper-box"
circular='true' @change="swiperChange">
<swiper-item v-for="(item ,index) in lbinfo" :key="index">
<view class="swiper-item" v-show="!splits(item)" wx-if="{item}">
<image v-if="item" :src="item" mode="widthFix"></image>
</view>
<view class="swiper-item" v-show="splits(item)" v-if="item">
<video :id="'myVideo'+index" :autoplay="false" :src="item" controls show-fullscreen-btn
object-fit="fill" @play="play" @pause="pause" @ended="ended" auto-pause-if-navigate
show-play-btn :enable-progress-gesture='true' :show-center-play-btn='true'
enable-play-gesture auto-pause-if-open-native show-mute-btn></video>
</view>
</swiper-item>
</swiper>
</view>
</view>
<!-- <u-swiper v-if="lbinfo" :list="lbinfo" height="350" style='background-size: 100%;' mode='none'></u-swiper> -->
<view class="item">
<image :src="list.itemPictureUrl"></image>
<view class="huanyao">{{list.nurseItemName}}
<view class="text" v-if='list.nurseItemName'>{{list.nurseItemName}}
</view>
<view class="text" v-else>暂无
</view>
<view class="classtype">
</view>
<!-- <view class="pingfen">
<u-rate :count="5" value="2"></u-rate>
</view> -->
<view class="servicetime">服务时长:{{list.serveDurationUnit?list.serveDurationUnit:'0'}}</view>
<view class="price">{{list.nurseItemPrice==null?'0':list.nurseItemPrice}}</view>
</view>
<view class="Consumablespackage" v-if='list.itemConsumableList'>耗材包详情:
<!-- <view class="Consumablespackage" v-if='list.itemConsumableList'>耗材包详情:
<span>{{list.consumableTotalPrice==null?'0':list.consumableTotalPrice}}</span>
<view class="detail" v-for='(item,index) in list.itemConsumableList' :key="index">
·{{item.consumableDetail}}
<span>{{item.consumableCount}}{{item.consumableUnit}}/{{item.consumablePrice}}</span>
</view>
</view>
</view> -->
<view class="detailtitle">
<view class="Introduction">服务详情:</view>
<view class="textInfo" v-html="list.nurseItemContent">
<view class="textInfo" v-if="list.nurseItemContent" v-html="list.nurseItemContent">
</view>
</view>
<view class="appointment" @tap.stop='goappointments(item)'>预约</view>
<view class="bottomcontent">
<view class="appoinprice" v-if="list.totalPrice">
{{list.totalPrice}}
</view>
<view class="appointment" @tap.stop='goappointments(item)'>立即预约</view>
</view>
<u-toast ref="uToast" />
<u-mask :show="usershow" class='mask'>
<view class="information">
@ -51,65 +78,116 @@
export default {
data() {
return {
lbinfo: [], //
autoplay: true, //
videoContext: '',
baseurl: '',
list: {},
orderNo: '',
usershow: false, //
list: [], //list
list: {}, //list
timer: null,
stationId: null,
stationItemId: null,
stationItemPriceId: null,
}
},
onLoad(options) {
//
this.getlist(options.stationId, options.stationItemId, options.stationItemPriceId)
this.stationId = options.stationId
this.stationItemId = options.stationItemId
this.stationItemPriceId = options.stationItemPriceId
},
onShow() {
this.baseurl = baseurl
this.usershow = false
//
this.getlist(this.stationId, this.stationItemId, this.stationItemPriceId)
},
methods: {
swiperChange(e) {
let {
current,
source
} = e.detail
this.videoContext = uni.createVideoContext('myVideo' + (current - 1));
//
if (source === 'touch') {
this.videoContext.pause(); //
this.autoplay = true
}
},
//
GetBanner() {},
// banner
splits(url) {
if (url.indexOf('.') != -1) {
var ext = url.substring(url.lastIndexOf('.') + 1);
return ['mp4', 'webm', 'mpeg4', 'ogg'].indexOf(ext) != -1
}
},
// /
play() {
this.autoplay = false
// this.videoContext.requestFullScreen()
},
//
pause() {
this.autoplay = true
},
//
ended() {
this.autoplay = true
},
//
goappointments() {
let that = this
const value = uni.getStorageSync('patientId');
if (value) {
AppIdentification(value).then(res => {
if (res.code == 200) {
if (res.data.loginFlag) {
that.usershow = false
uni.navigateTo({
url: `/pages/appointmenttime/appointmenttime?stationId=${this.list.stationId}&stationItemId=${this.list.stationItemId}&stationItemPriceId=${this.list.stationItemPriceId}`,
})
try {
const value2 = uni.getStorageSync('patientId');
if (value2) {
AppIdentification(value2).then(res => {
if (res.code == 200) {
if (res.data.loginFlag) {
that.usershow = false
uni.navigateTo({
url: `/pages/appointmenttime/appointmenttime?stationId=${this.stationId}&stationItemId=${this.stationItemId}&stationItemPriceId=${this.stationItemPriceId}`,
})
} else {
that.usershow = true
}
} else if (res.code == 9999) {
} else {
that.usershow = true
}
} else {
that.$refs.uToast.show({
title: res.msg,
type: 'error'
})
if (that.timer) {
clearTimeout(that.timer)
}
that.timer = setTimeout(e => {
uni.navigateTo({
url: '/pages/login/login'
that.$refs.uToast.show({
title: res.msg,
type: 'error'
})
}, 1500)
}
})
} else {
that.$refs.uToast.show({
title: '未登录,请先登录',
type: 'error'
})
if (that.timer) {
clearTimeout(that.timer)
}
that.timer = setTimeout(e => {
uni.navigateTo({
url: '/pages/login/login'
if (that.timer) {
clearTimeout(that.timer)
}
that.timer = setTimeout(e => {
uni.navigateTo({
url: '/pages/login/login'
})
}, 1500)
}
})
}, 1500)
} else {
that.$refs.uToast.show({
title: '未登录,请先登录',
type: 'error'
})
if (that.timer) {
clearTimeout(that.timer)
}
that.timer = setTimeout(e => {
uni.navigateTo({
url: '/pages/login/login'
})
}, 1500)
}
} catch (e) {
uni.navigateTo({
url: '/pages/login/login'
})
}
},
//
@ -121,16 +199,46 @@
},
//
getlist(stationId, stationItemId, stationItemPriceId) {
this.lbinfo = []
getAppStationItemInfo(stationId, stationItemId, stationItemPriceId).then(res => {
if (res.data.nurseItemContent) {
res.data.nurseItemContent = res.data.nurseItemContent.replace(/\<img/gi,
"<br/> <img class='richPic'")
}
res.data.itemPictureUrl = baseurl + res.data.itemPictureUrl
if (res.data.poserInfoList.length >= 1) {
res.data.poserInfoList.forEach(e => {
e.image = baseurl + e.posterPictureUrl
this.lbinfo.push(e.image)
})
if (res.data.poserInfoList[0].video) {
res.data.poserInfoList[0].video = baseurl + res.data.poserInfoList[0].posterVideoUrl
this.lbinfo.push(res.data.poserInfoList[0].video)
}
} else {
this.lbinfo.push(this.baseurl + res.data.itemPictureUrl)
}
this.list = res.data
})
},
}
},
//1.
onShareAppMessage(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
//2.
onShareTimeline(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
}
</script>

View File

@ -1,9 +1,7 @@
.app {
.app {
font-size: 34rpx;
padding-top: 10rpx;
height: 100%;
.mask {
.Agreement {
width: 100%;
@ -99,31 +97,64 @@
border-radius: 20rpx;
line-height: 93rpx;
.selecttime {
height: 93rpx;
margin-left: 3%;
position: relative;
text {
font-size: 34rpx;
color: #878987;
}
image {
width: 18rpx;
height: 27rpx;
position: absolute;
right: 5%;
top: 50%;
transform: translateY(-50%);
}
.addition {
color: #666666;
line-height: 30rpx;
.timeyear{
.bottomtext{
width: 96%;
margin: 0 auto;
.items{
display: flex;
justify-content:flex-start;
flex-wrap: wrap;
text-align: center;
.timeitem{
width: 21%;
margin: 0 2% 20rpx;
height: 86rpx;
border-radius: 5rpx;
font-size: 28rpx;
line-height: 86rpx;
border: 2rpx solid #DADADA;
}
.timeitemtap{
width: 21%;
margin: 0 2% 20rpx;
height: 86rpx;
border: 2rpx solid #F44B2F;
border-radius: 5rpx;
font-size: 28rpx;
color: #F44B2F;
line-height: 86rpx;
}
}
}
.toptext{
padding-top: 10rpx;
display: flex;
justify-content:space-around;
height: 50rpx;
color: #000000;
line-height: 27rpx;
margin-bottom: 30rpx;
text-align: center;
.Soonerorlater{
width: 200rpx;
font-size: 36rpx;
height: 50rpx;
}
.Soonerorlaterclass{
font-size: 36rpx;
color: #F44B2F;
width: 200rpx;
height: 50rpx;
}
view:nth-child(2){
width: 4rpx;
height: 27rpx;
background: #C5C3C3;
border-radius: 2rpx;
}
}
}
.item {
width: 97%;
@ -140,7 +171,6 @@
.remarks {
width: 94%;
height: 382rpx;
margin: 10rpx auto;
padding: 3%;
font-size: 34rpx;
@ -152,7 +182,13 @@
span {
display: inline-block;
width: 20%;
width: 60%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
position: absolute;
top:50%;
transform: translateY(-50%);
}
input {
@ -249,10 +285,9 @@
}
}
.Consumablespackage .money {
.Consumablespackage .money {
top: 8%;
}
/* 耗材包 */
.Consumablespackage {
width: 94%;
@ -264,28 +299,43 @@
margin-top: 20rpx;
position: relative;
padding-bottom: 40rpx;
::v-deep .u-checkbox__label{
width: 100% !important;
}
.detail {
width: 100%;
line-height: 100rpx;
// padding: 20rpx 0 0 40rpx;
/deep/ .u-checkbox {
margin: 40rpx 0 0;
position: relative;
.itemConsumabletitle{
width:55%;
position: absolute;
top:50%;
transform: translateY(-50%);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-block;
font-size: 28rpx;
}
/deep/ .u-checkbox-group {
width: 100% !important;
}
/deep/ .u-checkbox{
width: 100% !important;
margin: 40rpx 0 0;
position: relative;
}
/deep/ .u-checkbox-group{
span{
width: 100%;
}
/deep/ .u-checkbox__label{
width: 100%;
}
span {
display: inline-block;
font-size: 30rpx;
font-size: 28rpx;
color: #D43953;
text-align: right;
float: right;
position: absolute;
right:5%;
top:50%;
transform: translateY(-50%);
}
}
}
@ -303,6 +353,9 @@
position: relative;
.detail {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 31rpx;
font-size: 32rpx;
color: #666666;
@ -310,6 +363,7 @@
position: absolute;
left: 10%;
top: 60%;
width: 90%;
}
}

View File

@ -9,27 +9,45 @@
<span>电话</span>
<span class='addition'>{{personInfo.phone}}</span>
</view>
<view class="item">
<span>地址</span>
<span class='addition'>{{personInfo.address}}</span>
<view class="addressitem">
<view class="leftaddress">地址</view>
<view class='addition'>{{personInfo.address}}</view>
</view>
<view class="item" style="border: 0;">
<span></span>
<span class='addition'>请您选择希望护理员到达的时间区间</span>
<span>上门时间</span>
<span class='addition'>请您选择希望护理员到达的时间</span>
</view>
<view class="selecttime" @tap='yearshow=true'>
<span>日期</span>
<text v-if="yeartime==''" class='addition'>请选择日期
<image src="../../static/jiantou.png"></image>
</text>
<text v-else class='addition'>{{yeartime}}</text>
</view>
<view class="selecttime" @tap='timeshow=true'>
<span>时间</span>
<text v-if="usertime==''" class='addition'>请选择时间区间
<image src="../../static/jiantou.png"></image>
</text>
<text v-else class='addition'>{{usertime}}</text>
<tabs :list="orderlist.appointmentTimeList" :current="timecurrent" @change="timechange">
</tabs>
<view class="timeyear" v-if="orderlist.appointmentTimeList">
<view class="toptext">
<view :class="Soonerorlater=='morning'?'Soonerorlaterclass':'Soonerorlater'"
@tap="tapSoonerorlater('morning')">
上午
</view>
<view class="">
</view>
<view :class="Soonerorlater=='after'?'Soonerorlaterclass':'Soonerorlater'"
@tap="tapSoonerorlater('after')">
下午
</view>
</view>
<view class="bottomtext">
<view class="items" v-if="Soonerorlater=='morning'">
<view @tap='taptime(item,index)'
v-for="(item ,index) in orderlist.appointmentTimeList[timecurrent].morningList"
:class="timeindex==index?'timeitemtap':'timeitem'">
{{item}}
</view>
</view>
<view class="items" v-if="Soonerorlater=='after'">
<view @tap='taptime(item,index)'
v-for="(item ,index) in orderlist.appointmentTimeList[timecurrent].afternoonList"
:class="timeindex==index?'timeitemtap':'timeitem'">
{{item}}
</view>
</view>
</view>
</view>
</view>
<view class="remarks">
@ -39,17 +57,17 @@
<view class="Package">套餐信息
<text class="money">{{orderlist.nurseItemPrice}}</text>
<text class="detail">
·<span style='padding-left: 10rpx;'>{{orderlist.nurseItemName}}</span>
{{orderlist.nurseItemName}}
</text>
</view>
<view class="Consumablespackage">耗材包详情
<text class="money">{{consumableTotalPrice}}</text>
<view class="detail">
<u-checkbox-group @change="checkboxGroupChange">
<u-checkbox-group @change="checkboxGroupChange" :wrap='true'>
<u-checkbox @change="checkboxChange(item)" v-model="item.radio"
v-for="(item, index) in orderlist.itemConsumableList" :key="index"
:name="item.consumableDetail">
<view style='display: inline-block;'> {{item.consumableDetail}}</view>
<view class='itemConsumabletitle'> {{item.consumableDetail}}</view>
<span>{{item.consumableCount}}{{item.consumableUnit}}/{{item.consumablePrice}}</span>
</u-checkbox>
</u-checkbox-group>
@ -74,16 +92,13 @@
<view class="queren" @tap='updata'>确认预约</view>
</view>
<u-toast ref="uToast" />
<u-picker v-model="yearshow" mode="time" start-year='2022' :params="yearparams" @confirm='yeartimeconfirm'>
</u-picker>
<upicker v-model="timeshow" mode="time" :params="timeparams" @confirm='timeconfirm'></upicker>
<!-- // -->
<u-mask :show="maskshow" class='mask' @click='maskshow=false'>
<view class="Agreement">
<view class="title">
护理站上门服务知情同意书
</view>
<scroll-view scroll-y="true" class="scroll-Y">
<scroll-view scroll-y="true" class="scroll-Y" style="">
<appointmenttext></appointmenttext>
</scroll-view>
<view class="cancel" @tap='maskshow=false'>
@ -100,45 +115,28 @@
import {
getAppStationItemInfo,
getAppPatientList,
submitAppointment
submitAppointment,
appletAppointmentOrderPay
} from '@/api/appointmenttime/appointmenttime.js'
import baseurl from '@/api/baseurl.js'
import upicker from '../picker/picker.vue'
import appointmenttext from './text.vue'
import tabs from '../utabs/u-tabs.vue'
export default {
components: {
upicker,
appointmenttext
appointmenttext,
tabs
},
data() {
return {
timeparams: { //picker
year: false,
month: false,
day: false,
hour: true,
endhour: true,
minute: true,
endminute: true,
},
timeshow: false, //
usertime: '', //
yearparams: { //picker
year: true,
month: true,
day: true,
hour: false,
minute: false,
second: false
},
yearshow: false, //
yeartime: '', //
Soonerorlater: 'morning',
timecurrent: 0, //
openid: '',
maskshow: false, //
radio: 1, //
personInfo: [], //
personInfo: {}, //
patientId: null,
usertime: '', //
consumableTotalPrice: null, //
useritem: null, //optionsuser
consumableTotalPrice: 0, //
orderlist: {
orderCount: 1,
patientId: '',
@ -147,7 +145,7 @@
stationItemPriceId: '',
serviceAddress: "",
serviceDate: "",
serviceStartTime: "",
serviceStartTime: null,
serviceEndTime: "",
nurseItemName: "",
nurseItemPrice: '',
@ -156,7 +154,9 @@
totalPrice: '',
remark: "",
orderConsumableList: [],
orderChannel: '',
},
timeindex: 0,
}
},
onShow() {
@ -173,17 +173,166 @@
that.personInfo.address = that.useritem.address
} else {}
})
setTimeout(e => {
if (!that.useritem) {
that.userinfo();
}
}, 500)
},
onLoad(options) {
var that = this
try {
const value = uni.getStorageSync('openid');
if (value) {
that.openid = value
}
} catch (e) {}
//
this.getPatientInfo(options.stationId, options.stationItemId, options.stationItemPriceId)
this.userinfo();
},
methods: {
//
tapSoonerorlater(item) {
this.Soonerorlater = item
this.timeindex = 0
if (item == 'morning') {
this.orderlist.serviceStartTime = this.orderlist.appointmentTimeList[this.timecurrent].morningList[0]
} else if (item == 'after') {
this.orderlist.serviceStartTime = this.orderlist.appointmentTimeList[this.timecurrent].afternoonList[0]
}
},
//
taptime(item, index) {
this.orderlist.serviceStartTime = item
this.timeindex = index
},
userinfo() {
//patientId
var that = this
try {
const value = uni.getStorageSync('patientId');
if (value) {
that.patientId = value
//
getAppPatientList(that.patientId).then(response => {
that.personInfo = response.data
that.personInfo.address = response.data.areaName + response.data.address
})
}
} catch (e) {}
},
timechange(index) {
this.orderlist.serviceDate = this.orderlist.appointmentTimeList[index].date
this.timecurrent = index
},
//
getPatientInfo(stationId, stationItemId, stationItemPriceId) {
getAppStationItemInfo(stationId, stationItemId, stationItemPriceId).then(res => {
res.data.nurseItemContent = ''
if (res.code == 200) {
if (res.data.itemConsumableList) {
res.data.itemConsumableList.forEach(e => {
e.radio = true
})
}
res.data.appointmentTimeList.forEach(e => {
e.dates = e.date.slice(5, 10)
e.name = e.week
})
this.orderlist = res.data
this.orderlist.serviceStartTime = res.data.appointmentTimeList[0].morningList[0]
this.orderlist.serviceDate = res.data.appointmentTimeList[0].date
this.consumableTotalPrice = res.data.consumableTotalPrice
}
})
},
//
updata() {
var that = this
console.log(this.orderlist)
this.orderlist.consumableTotalPrice = null
this.orderlist.orderChannel = 'WECHAT_APPLET'
if (this.radio == 1) {
this.$refs.uToast.show({
title: '请阅读用户协议并同意',
type: 'error',
})
} else {
this.orderlist.orderCount = 1;
this.orderlist.orderConsumableList = []
if (this.orderlist.itemConsumableList) {
this.orderlist.itemConsumableList.forEach(e => {
if (e.radio) {
this.orderlist.orderConsumableList.push(e)
}
})
}
this.orderlist.afternoonOpenEndTime = this.orderlist.afternoonOpenEndTime.slice(0, 5)
this.orderlist.afternoonOpenStartTime = this.orderlist.afternoonOpenStartTime.slice(0, 5)
this.orderlist.morningOpenEndTime = this.orderlist.morningOpenEndTime.slice(0, 5)
this.orderlist.morningOpenStartTime = this.orderlist.morningOpenStartTime.slice(0, 5)
this.orderlist.patientId = this.patientId
this.orderlist.serviceAddress = this.personInfo.areaName + this.personInfo.address
submitAppointment(this.orderlist).then(res => {
if (res.code == 500) {
that.$refs.uToast.show({
title: res.msg,
type: 'error',
})
} else if (res.code == 200) {
let obj = {
patientId: res.data.patientId,
openid: that.openid,
orderNo: res.data.orderNo,
orderChannel: res.data.orderChannel,
paymentPrice: res.data.totalPrice,
payType: "WECHAT_PAY",
buySource: "NURSE_STATION",
}
appletAppointmentOrderPay(obj).then(response => {
if (response.code == 200) {
uni.requestPayment({
timeStamp: response.data.timeStamp,
nonceStr: response.data.nonceStr,
package: response.data.prepayId,
signType: response.data.signType,
paySign: response.data.paySign,
success: function(res) {
that.$refs.uToast.show({
title: '预约成功',
type: 'success',
duration: 1500,
url: `/pages/paysuccess/paysuccess`
})
},
fail: function(err) {
that.$refs.uToast.show({
title: '取消预约',
type: 'error',
duration: 1500,
url: `/pages/menttimeorder/menttimeorder?list=${JSON.stringify(obj)}`
})
}
});
} else {
that.$refs.uToast.show({
title: response.msg,
type: 'error',
duration: 2000
})
}
})
}
})
}
},
changeRadio() {
if (this.radio == 1) {
this.radio = 2;
} else {
this.radio = 1;
}
},
tapradio() {
this.radio = 2;
this.maskshow = false
},
checkboxChange(e) {
if (e.radio) {
this.orderlist.totalPrice = this.argSubtr(this.orderlist.totalPrice, e.consumablePrice)
@ -251,109 +400,13 @@
r2 = Number(arg2.toString().replace(".", ""))
return _this.argMul((r1 / r2), Math.pow(10, t2 - t1));
},
userinfo() {
//patientId
var that = this
try {
const value = uni.getStorageSync('patientId');
if (value) {
that.patientId = value
//
getAppPatientList(value).then(response => {
that.personInfo = response.data
that.personInfo.address = response.data.areaName + response.data.address
that.orderlist.patientId = response.data.patientId
that.orderlist.serviceAddress = response.data.areaName + response.data.address
})
}
} catch (e) {
// error
}
},
//
getPatientInfo(stationId, stationItemId, stationItemPriceId) {
getAppStationItemInfo(stationId, stationItemId, stationItemPriceId).then(res => {
res.data.nurseItemContent = ''
if (res.code == 200) {
if (res.data.itemConsumableList) {
res.data.itemConsumableList.forEach(e => {
e.radio = true
})
}
this.consumableTotalPrice = res.data.consumableTotalPrice
this.orderlist = res.data
}
})
},
//
updata() {
if (this.radio == 1) {
this.$refs.uToast.show({
title: '请阅读用户协议并同意',
type: 'error',
})
} else {
this.orderlist.consumableTotalPrice = null
this.orderlist.orderChannel = "MOBILE_APP"
this.orderlist.buySource = "NURSE_STATION"
this.orderlist.orderCount = 1;
this.orderlist.orderConsumableList = []
if (this.orderlist.itemConsumableList) {
this.orderlist.itemConsumableList.forEach(e => {
if (e.radio) {
this.orderlist.orderConsumableList.push(e)
}
})
}
// submitAppointment(this.orderlist).then(res => {
// if (res.code == 500) {
// this.$refs.uToast.show({
// title: res.msg,
// type: 'error',
// })
// } else if (res.code == 200) {
// this.$refs.uToast.show({
// title: '',
// type: 'success',
// url: '/pages/paysuccess/paysuccess',
// duration: 1500
// })
// }
// })
}
},
changeRadio() {
if (this.radio == 1) {
this.radio = 2;
} else {
this.radio = 1;
}
},
// checkboxcheckbox-group
checkboxGroupChange(e) {},
//
checkedAll() {},
//
timeconfirm(e) {
this.orderlist.serviceStartTime = e.hour + ":" + e.minute
this.usertime = e.hour + ":" + e.minute + '--' + e.endhour + ":" + e.endminute
this.orderlist.serviceEndTime = e.endhour + ":" + e.endminute
this.orderlist.patientId = this.personInfo.patientId
this.orderlist.serviceAddress = this.personInfo.address
},
yeartimeconfirm(e) {
this.orderlist.serviceDate = e.year + '-' + e.month + '-' + e.day
this.yeartime = e.year + '年' + e.month + '月' + e.day + "日"
},
goaddress() {
uni.navigateTo({
url: `/pages/modifyAddress/modifyAddress?url=${'appointmenttime'}&updata=${JSON.stringify(this.orderlist)}`
url: `/pages/modifyAddress/modifyAddress?updata=${JSON.stringify(this.orderlist)}`
})
},
tapradio() {
this.radio = 2;
this.maskshow = false;
},
}
}
</script>

View File

@ -125,7 +125,7 @@
this.startData.pageY = e.changedTouches[0].pageY; //Y
},
end(e) { //@touchend
if ((this.startData.pageY - this.touch.pageY) > 100) { //
if ((this.startData.pageY - this.touch.pageY) > 200) { //
if (this.goodsList.length >= this.total) {} else {
this.pageNum++;
goodsList(this.pageSize, this.pageNum, this.GoodsCategorychildrenid, this.goodsName).then(res => {
@ -318,6 +318,7 @@
.productlist {
padding-bottom: 40rpx;
overflow: scroll;
-webkit-overflow-scrolling: touch;
width: 100%;
height: 100%;
margin: 0 auto;
@ -384,6 +385,7 @@
.lefttabbarlist {
overflow: scroll;
-webkit-overflow-scrolling: touch;
height: 100%;
}

View File

@ -0,0 +1,67 @@
<template>
<view class="app">
<view class="title">
长按识别二维码
</view>
<image src="../../static/kefuzx.jpg" mode="" :show-menu-by-longpress="true"></image>
</view>
</template>
<script>
export default {
data() {
return {
imageUrl: [
'../../static/kefuzx.jpg'
]
};
},
methods: {
previewImage(e) {
uni.previewImage({
// urls
urls: this.imageUrl,
// /
current: 0,
//
indicator: 'default',
//
loop: false,
//
// longPressActions:{
// itemList:[this.l(''),this.l]
// },
success: res => {
console.log('previewImage res', res);
},
fail: err => {
console.log('previewImage err', err);
}
});
},
}
}
</script>
<style lang="scss">
.app {
width: 100%;
height: 100vh;
padding: 0;
background-color: #000000;
position: relative;
.title {
color: #fff;
width: 100%;
text-align: center;
position: absolute;
top: 50rpx;
}
image {
width: 100%;
height: 1300rpx;
}
}
</style>

View File

@ -1,115 +0,0 @@
.app {
// font-size: 36rpx;
padding-top: 10rpx;
.concent {
width: 701rpx;
height: 811rpx;
background: #4C7BC9;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
margin-top: 5%;
// left: 50%;
// transform: translateX(-50%);
margin: 0 auto;
margin-bottom: 20px;
.background {
position: relative;
// display: flex;
width: 657rpx;
height: 727rpx;
background: #FFFFFF;
border-radius: 25rpx;
background-color: white;
margin: 0 auto;
top: 50%;
transform: translateY(-50%);
image {
width: 178rpx;
height: 84rpx;
background: #FFFFFF;
border-radius: 25px;
// float: right;
margin-left: 68%;
margin-top: 5%;
}
// text-align:center;
}
}
}
.life {
// margin: 0 auto;
width: 162rpx;
height: 40rpx;
font-size: 42rpx;
margin-left: 35%;
color: #ffffff;
}
.lifeserve image {
width: 639rpx;
height: 739rpx;
margin-left: 5%;
padding-bottom: 20rpx;
// height: rpx;
// background: #E1AE3C;
// box-shadow: 0px 9px 31px 9px rgba(0,0,0,0.03);
// border-radius: 20px;
}
.concenta {
margin: 0 auto;
margin-bottom: 20px;
// position: absolute;
width: 701rpx;
height: 811rpx;
background: #E1AE3C;
// margin-top: 118%;
// margin-left: 2.55%;
border-radius: 25rpx;
// margin-bottom: 30rpx;
}
.concentb {
margin: 0 auto;
margin-bottom: 20px;
// position: absolute;
width: 701rpx;
height: 811rpx;
background: #00C176;
// margin-top: 118%;
// margin-left: 2.55%;
border-radius: 25rpx;
// margin-bottom: 30rpx;
}
.detailed {
// font-size: 29rpx;
width: 657rpx;
height: 727rpx;
padding: 0 42rpx;
line-height: 56rpx;
}
.detailed view {
// height: 100%;
text-indent: 2em;
}

View File

@ -1,168 +0,0 @@
<template>
<view class="app">
<view class="concent">
<view class="background">
<image src="/static/logo.png" mode=""></image>
<view>
<view class="detailed">
<view>护理站是以维护社区人群健康满足社区 人群基本医疗护理需求为宗旨以护士为核心 的各类护理人员组成的团队在一定社区范围 为长期卧床老人患者残疾人临终患
者和其他需要护理服务者提供基础护理专科 护理临终护理消毒隔离技术指导营养指导社区康复指导健康宣教和其他护理服务 的医疗机构</view>
<view>护理站以遵医嘱的上门护理服务为主包括生活护理和医疗护理详情如下</view>
</view>
</view>
</view>
</view>
<view class="concenta">
<text class="life">生活护理 </text>
<view class="lifeserve">
<image src="/static/lifeserve.png" mode=""></image>
</view>
</view>
<view class="concentb">
<text class="life">医疗护理 </text>
<view class="lifeserve">
<image src="/static/yiliaohuli.png" mode=""></image>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style lang="scss">
.app {
// font-size: 36rpx;
padding-top: 10rpx;
.concent {
width: 701rpx;
height: 811rpx;
background: #4C7BC9;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
margin-top: 5%;
// left: 50%;
// transform: translateX(-50%);
margin: 0 auto;
margin-bottom: 20px;
.background {
position: relative;
// display: flex;
width: 657rpx;
height: 727rpx;
background: #FFFFFF;
border-radius: 25rpx;
background-color: white;
margin: 0 auto;
top: 50%;
transform: translateY(-50%);
image {
width: 178rpx;
height: 84rpx;
background: #FFFFFF;
border-radius: 25px;
// float: right;
margin-left: 68%;
margin-top: 5%;
}
// text-align:center;
}
}
}
.life {
// margin: 0 auto;
width: 162rpx;
height: 40rpx;
font-size: 42rpx;
margin-left: 35%;
color: #ffffff;
}
.lifeserve image {
width: 639rpx;
height: 739rpx;
margin-left: 5%;
padding-bottom: 20rpx;
// height: rpx;
// background: #E1AE3C;
// box-shadow: 0px 9px 31px 9px rgba(0,0,0,0.03);
// border-radius: 20px;
}
.concenta {
margin: 0 auto;
margin-bottom: 20px;
// position: absolute;
width: 701rpx;
height: 811rpx;
background: #E1AE3C;
// margin-top: 118%;
// margin-left: 2.55%;
border-radius: 25rpx;
// margin-bottom: 30rpx;
}
.concentb {
margin: 0 auto;
margin-bottom: 20px;
// position: absolute;
width: 701rpx;
height: 811rpx;
background: #00C176;
// margin-top: 118%;
// margin-left: 2.55%;
border-radius: 25rpx;
// margin-bottom: 30rpx;
}
.detailed {
// font-size: 29rpx;
width: 657rpx;
height: 727rpx;
padding: 0 42rpx;
line-height: 56rpx;
}
.detailed view {
// height: 100%;
text-indent: 2em;
}
</style>

View File

@ -31,7 +31,7 @@
.concent {
width: 701rpx;
height: 850rpx;
height: 950rpx;
background: #4C7BC9;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
@ -40,7 +40,7 @@
.background {
position: relative;
width: 657rpx;
height: 800rpx;
height: 900rpx;
background: #FFFFFF;
border-radius: 25rpx;
background-color: white;
@ -50,11 +50,10 @@
image {
width: 178rpx;
height: 84rpx;
height: 200rpx;
background: #FFFFFF;
border-radius: 25px;
margin-left: 68%;
margin-top: 5%;
}
}
}

View File

@ -1,40 +1,81 @@
<template>
<view class="app">
<view class="cards">
<view class="nursing item" @tap="gosite">
<image src="../../static/jjhl.png" mode=""></image>
<!-- <u-swiper :list="swiperImgUrls" effect3d='true' height='400' interval='5000' duration='2000'></u-swiper> -->
<!-- <swiper class="swiper-block" :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000"
:circular='true' previous-margin='90rpx' next-margin='90rpx' current='0' @change="swiperChange">
<swiper-item class="swiper-item" v-for="(item,index) in swiperImgUrls">
<image :src="item" :class="['slide-image', currentIndex === index?'active':'']" mode="aspectFill">
</image>
</swiper-item>
</swiper> -->
<view class="container">
<view>
<swiper :indicator-dots="true" :current="currentIndex" :circular="true" previous-margin="80rpx"
next-margin="80rpx" :autoplay="autoplay" interval="3000" duration="1000" show-center-play-btn="true"
class="swiper-block" circular='true' @change="swiperChange">
<swiper-item v-for="(item ,index) in swiperImgUrls" :key="index" class="swiper-item">
<view v-show="!splits(item)" wx-if="{item}">
<image v-if="item" :src="item" :class="['slide-image', currentIndex === index?'active':'']"
mode="aspectFill">
</image>
</view>
<view v-show="splits(item)" v-if="item">
<video :id="'myVideo'+index" :autoplay="false" :src="item" controls show-fullscreen-btn
object-fit="fill" @play="play" @pause="pause" @ended="ended" auto-pause-if-navigate
show-play-btn :enable-progress-gesture='true' :show-center-play-btn='true'
enable-play-gesture auto-pause-if-open-native show-mute-btn :poster='poster'
:class="['slide-image', currentIndex === index?'active':'']"></video>
</view>
</swiper-item>
</swiper>
</view>
</view>
<view class="items">
<view class="item" @tap="gosite">
<image src="../../static/hlz.png" mode=""></image>
<view class="title">
护理站
护理机构
</view>
</view>
<view class="expert item" @tap='gomedicine'>
<image src="../../static/zhuanjia.png" mode=""></image>
<view class="item" @tap="gomedicine">
<image src="../../static/jkzx.png" mode=""></image>
<view class="title">
就医
健康咨询
</view>
</view>
<view class="elderly item" @tap='goGeriatricdisease'>
<image src="../../static/ylfw.png" mode=""></image>
<view class="title" style="font-size: 40rpx;">
国家老年病中心
</view>
</view>
<view class="item Bodyguard" @tap='goBodysatelliteintegration'>
<image src="../../static/pb.png" mode=""></image>
<view class="title">
体卫融合
</view>
</view>
<view class="item knowledge" @tap='godiseasemanagement'>
<image src="../../static/zs.png" mode=""></image>
<view class="item" @tap='godiseasemanagement'>
<image src="../../static/zbgl.png" mode=""></image>
<view class="title">
专病管理
</view>
</view>
<view class='item shopping' @tap="goshopping">
<image src="../../static/shopping.png" mode=""></image>
</view>
<view class="Welfarecustomerservice">
<image src="../../static/fuli.png" mode="" @tap='gomaterialbenefits'></image>
<image src="../../static/kefu.png" mode="" @tap='gocustomerservice'></image>
</view>
<view class="Healthknowledge">
<view class="title">
健康常识
</view>
<view class="more" @tap='gohealth'>
<view class="title">
商城
查看更多
</view>
<image src="../../static/huijiantou.png" mode=""></image>
</view>
<view class="list">
<view class="item" v-for="(item,index) in informationCategoryVOList" :key="index"
@tap='gohealthitem(item)'>
<view class="text">
{{item.informationTitle}}
</view>
<view class="author"></view>
<image :src="item.leadThumbnailUrl" mode=""></image>
</view>
</view>
</view>
@ -43,78 +84,346 @@
</template>
<script>
import {
getPoserInfoListByType
} from '@/api/homepage/index.js'
import {
getHeathHousingList
} from '@/api/Healthknowledge/index.js'
import baseurl from '../../api/baseurl';
export default {
data() {
return {};
return {
swiperImgUrls: [],
autoplay: true, //
videoContext: '',
currentIndex: 0,
informationCategoryVOList: [], //
informationCategorytotal: 0,
pageNum: 1,
pageSize: 5,
poster: '' //
};
},
onShow() {
this.pageNum = 1
this.swiperImgUrls = []
this.getPoserInfo();
},
methods: {
swiperChange(e) {
this.currentIndex = event.detail.current
let {
current,
source
} = e.detail
this.videoContext = uni.createVideoContext('myVideo' + (current - 1));
//
if (source === 'touch') {
this.videoContext.pause(); //
this.autoplay = true
}
},
//
GetBanner() {},
// banner
splits(url) {
if (url.indexOf('.') != -1) {
var ext = url.substring(url.lastIndexOf('.') + 1);
return ['mp4', 'webm', 'mpeg4', 'ogg'].indexOf(ext) != -1
}
},
// /
play() {
this.autoplay = false
// this.videoContext.requestFullScreen()
},
//
pause() {
this.autoplay = true
},
//
ended() {
this.autoplay = true
},
//item
gohealthitem(item) {
uni.navigateTo({
url: `/pages/Healthitem/Healthitem?item=${encodeURIComponent(JSON.stringify(item))}`
})
},
//
getHeathHousing() {
getHeathHousingList(this.pageNum, this.pageSize).then(res => {
if (res.rows) {
res.rows.forEach(e => {
e.leadThumbnailUrl = baseurl + e.leadThumbnailUrl
})
}
this.informationCategoryVOList = res.rows
this.informationCategorytotal = res.total
})
},
//
getPoserInfo() {
getPoserInfoListByType().then(res => {
if (res.code == 200) {
if (res.data.poserInfoList) {
res.data.poserInfoList.forEach(e => {
e.image = baseurl + e.posterPictureUrl
this.swiperImgUrls.push(e.image)
})
if(res.data.poserInfoList[0].video){
res.data.poserInfoList[0].video = baseurl + res.data.poserInfoList[0].posterVideoUrl
this.swiperImgUrls.push(res.data.poserInfoList[0].video)
}
}
this.getHeathHousing();
}
})
},
swiperChange(event) {
this.currentIndex = event.detail.current
},
//
godiseasemanagement() {
uni.navigateTo({
url: '/pages/diseasemanagement/diseasemanagement'
})
},
//
goGeriatricdisease() {
uni.navigateTo({
url: '/pages/Geriatricdisease/Geriatricdisease'
})
},
//
goBodysatelliteintegration() {
uni.navigateTo({
url: "/pages/Bodysatelliteintegration/Bodysatelliteintegration"
})
},
//
//
gomedicine() {
uni.navigateTo({
url: '/pages/medicine/medicine'
})
},
//
gocustomerservice() {
uni.navigateTo({
url: '/pages/customerservice/customerservice'
})
},
//
gosite() {
uni.navigateTo({
url: '/pages/site/site'
})
},
//
goshopping() {
//
gohealth() {
uni.navigateTo({
url: '/pages/shopping/shopping'
url: '/pages/Healthknowledge/Healthknowledge'
})
},
}
//
gomaterialbenefits() {
uni.navigateTo({
url: '/pages/materialbenefits/materialbenefits'
})
},
},
// onReachBottom() { //
// if (this.informationCategoryVOList.length >= this.informationCategorytotal) {} else {
// this.pageNum++
// getHeathHousingList(this.pageNum, this.pageSize).then(res => {
// if (res.rows) {
// res.rows.forEach(e => {
// e.leadThumbnailUrl = baseurl + e.leadThumbnailUrl
// this.informationCategoryVOList.push(e)
// })
// }
// })
// }
// },
// onPullDownRefresh() { //
// this.pageNum = 1;
// this.getHeathHousing();
// setTimeout(function() {
// uni.stopPullDownRefresh();
// }, 1000);
// },
//1.
onShareAppMessage(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
//2.
onShareTimeline(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
}
</script>
<style lang="scss">
.app {
.cards {
padding: 22px 0 20px 0;
padding: 100rpx 0 0 0;
-webkit-overflow-scrolling: touch;
.swiper-block {
height: 500rpx;
width: 100%;
}
.shopping {
background: #F58540;
.swiper-item {
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
overflow: unset;
}
.slide-image {
height: 300rpx;
width: 520rpx;
border-radius: 9rpx;
box-shadow: 0px 0px 30rpx rgba(0, 0, 0, 0.2);
margin: 0rpx 30rpx;
z-index: 1;
}
.active {
transform: scale(1.2);
transition: all 0.2s ease-in 0s;
z-index: 20;
}
video {
// height: 100%;
// width: 100%;
}
.Healthknowledge {
width: 100%;
padding: 40rpx 50rpx 50rpx;
background-color: #fff;
position: relative;
line-height: 46rpx;
.more {
position: absolute;
right: 20rpx;
top: 40rpx;
height: 46rpx;
width: 30%;
.title {
position: absolute;
right: 30rpx;
top: 50%;
text-align: right;
transform: translateY(-50%);
font-size: 26rpx;
font-family: Adobe Heiti Std;
font-weight: normal;
color: #969494;
}
image {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
width: 15rpx;
height: 25rpx;
}
}
.Bodyguard {
background-color: #00C176;
.list {
width: 100%;
margin: 20rpx auto 0;
.item {
width: 100%;
height: 250rpx;
position: relative;
border-bottom: 2rpx solid #CDC9C9;
image {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
width: 200rpx;
height: 200rpx;
border-radius: 10rpx;
}
.author {
position: absolute;
bottom: 20rpx;
left: 0;
font-size: 20rpx;
color: #969494;
}
.text {
position: absolute;
top: 20rpx;
left: 0;
width: 50%;
font-size: 30rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
.knowledge {
background: #9E4DD0;
.title {
font-size: 38rpx;
font-weight: bold;
}
}
.Welfarecustomerservice {
display: flex;
justify-content: center;
background-color: #fff;
width: 100%;
padding: 30rpx 0;
margin-bottom: 20rpx;
image:nth-child(1) {
margin: 0 5rpx 0 0;
}
.elderly {
background-color: #E1AE3C;
image:nth-child(2) {
margin: 0 0 0 5rpx;
}
.expert {
background-color: #D43953;
image {
width: 350rpx;
height: 200rpx;
}
}
.nursing {
background: #4C7BC9;
.items {
background-color: #fff;
padding: 30rpx 80rpx 20px;
display: flex;
justify-content: space-between;
margin-bottom: 20rpx;
.item {
image {
width: 150rpx;
height: 150rpx;
display: block;
margin: 0 auto 20rpx;
}
.title {
font-size: 40rpx;
font-weight: 550;
text-align: center;
}
}
}
}

View File

@ -0,0 +1,83 @@
<template>
<view class="app">
<view class="concent">
<view class="background">
<image src="/static/logo.png" mode=""></image>
<view class="detailed">
敬请期待
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
};
},
//1.
onShareAppMessage(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
//2.
onShareTimeline(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
}
</script>
<style lang="scss">
.app {
padding-top: 10rpx;
font-size: 34rpx;
.concent {
width: 701rpx;
height: 440rpx;
background: #4C7BC9;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
margin: 5% auto 20px;
.background {
position: relative;
width: 657rpx;
height: 400rpx;
background: #FFFFFF;
border-radius: 25rpx;
background-color: white;
margin: 0 auto;
top: 50%;
transform: translateY(-50%);
image {
width: 178rpx;
height: 160rpx;
background: #FFFFFF;
border-radius: 25px;
margin-left: 68%;
margin-top: 0;
}
}
}
}
.detailed {
padding: 0 20rpx;
line-height: 56rpx;
text-align: center;
}
</style>

View File

@ -1,23 +1,5 @@
<template>
<view class="app">
<!-- <view class="cards">
<view class="item" style="background: #4C7BC9;" @tap='godoctorslist'>
<image src="../../static/yuyue.png" mode=""></image>
<view class="title" style="font-size: 42rpx;">
预约医生
</view>
</view>
<view class="item" style="background-color: #E1AE3C;">
<image src="../../static/chaxun.png" mode=""></image>
<view class="title" style="font-size: 42rpx;">
查看结果
</view>
</view>
</view> -->
<view class="concent">
<view class="background">
<image src="/static/logo.png" mode=""></image>
@ -47,6 +29,24 @@
// })
},
},
//1.
onShareAppMessage(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
//2.
onShareTimeline(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
}
</script>
@ -84,11 +84,10 @@
image {
width: 178rpx;
height: 84rpx;
height: 160rpx;
background: #FFFFFF;
border-radius: 25px;
margin-left: 68%;
margin-top: 5%;
}
}
}

View File

@ -1,6 +1,25 @@
.app{
padding:10rpx 0 0 0;
-webkit-overflow-scrolling: touch;
}
.swiper-box {
width: 100%;
height: 500rpx;
}
.swiper-item {
height: 500rpx;
text-align: center;
image{
width: 100%;
height: 500rpx !important;
}
}
video{
height: 100%;
width: 100%;
}
.mask {
.information {
width: 70%;
@ -48,11 +67,16 @@
}
.content {
font-size: 36rpx;
font-size: 34rpx;
padding-bottom: 10rpx;
// margin-top: -80rpx;
z-index: 999;
::v-deep .u-tabs{
padding-bottom: 10rpx;
border-radius: 20rpx;
}
.tive {
width: 94%;
background-color: #ffffff;
margin: 20rpx auto;
border-radius: 11rpx;
padding-bottom: 60rpx;
@ -74,74 +98,92 @@
width: 100%;
height: 100%;
position: relative;
padding: 30rpx 30rpx;
background-color: #fff;
padding: 30rpx 0;
margin: 10rpx auto;
border-radius: 20rpx;
color: #000000;
image {
width: 170rpx;
height: 170rpx;
margin-left: 3%;
}
.servicetime {
color: #999999;
line-height: 37rpx;
font-size: 30rpx;
position: absolute;
top:35%;
left:35%;
}
// .servicetime {
// color: #999999;
// line-height: 37rpx;
// font-size: 30rpx;
// position: absolute;
// top:35%;
// left:35%;
// }
.appointment {
font-size: 30rpx;
width: 120rpx;
height: 70rpx;
background: #4C7BC9;
height: 52rpx;
border-radius: 26rpx;
color: #ffffff;
background: #F44B2F;
text-align: center;
line-height: 70rpx;
line-height: 52rpx;
position: absolute;
top:40%;
top:70%;
right:5%;
}
.buy{
position: absolute;
top: 55%;
}
.price {
color: red;
font-size: 32rpx;
height: 52rpx;
color: #F44B2F;
line-height: 52rpx;
font-size: 36rpx;
position: absolute;
top:65%;
top:70%;
left:35%;
}
.product {
color: #000000;
width: 60%;
position: absolute;
top:14%;
left:32%;
font-size: 28rpx;
overflow: hidden;white-space: nowrap;text-overflow: ellipsis;
}
.huanyao {
color: #000000;
position: absolute;
top:10%;
top:15%;
left:35%;
width: 60%;
width: 65%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.day{
font-size: 24rpx;
position: absolute;
top:53%;
left:35%;
width: 65%;
}
.huanyao {
position: absolute;
top:10%;
left:35%;
width: 45%;
line-height: 50rpx;
height: 100rpx;
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
white-space:normal;
word-break:break-all;
}
.pingfen {
float: right;
}
}
.tab-box {
display: flex;
font-weight: 600;
.tab-item {
flex-shrink: 0;
padding: 3%;
position: relative;
transition: all 0.2s linear;
font-size: 31rpx;
font-size: 36rpx;
&::after {
transition: all 0.2s linear;
transform: translateX(-50%) scaleX(0);
@ -150,10 +192,10 @@
position: absolute;
left: 50%;
bottom: 10rpx;
border-bottom: 6rpx solid #D43953;
border-radius: 4rpx;
}
&.active {
color: #2979ff;
&::after {
content: '';
width: 50%;
@ -161,36 +203,25 @@
left: 50%;
transform: translateX(-50%) scaleX(1);
bottom: 10rpx;
border-bottom: 6rpx solid red;
}
}
}
}
}
.Nursestationconfiguration {
width: 94%;
height: 100%;
background: #FFFFFF;
border-radius: 20rpx;
padding-bottom: 30rpx;
margin: 20rpx auto;
.configuration {
font-size: 31rpx;
color: #333333;
padding: 3%;
margin:20rpx 30rpx 0;
padding-bottom: 30rpx;
border-bottom: 1rpx solid #CDC9C9;
.text {
margin-top: 10rpx;
background: #F8D7D1;
border-radius: 15rpx;
display: inline-block;
padding: 10rpx 20rpx;
margin-right: 18rpx;
line-height: 40rpx;
background-color: #f6f6f6;
border-radius: 34rpx;
margin-right: 10rpx;
font-size: 24rpx;
color: #666666;
color: #F44B2F;
}
}
}
.detail {
position: relative;
width: 94%;
@ -228,76 +259,65 @@
background-color: #ffffff;
border-radius: 20rpx;
margin: 10px auto;
padding-bottom: 20rpx;
.picture {
position: absolute;
width: 170rpx;
height: 170rpx;
margin-left: 5%;
margin-top: 5%;
padding-bottom: 30rpx;
.time{
font-size: 30rpx;
margin: 10rpx 0;
color: #666666;
.timeday{
display: inline-block;
}
.text{
margin:0 10rpx 0 30rpx;
display: inline-block;
}
.texttime{
margin:0 20rpx 0 30rpx;
view{
display: inline-block;
margin-right: 20rpx;
}
}
}
.title {
margin-left: 35%;
line-height: 49px;
font-size: 33rpx;
padding-top: 40rpx;
margin:0 0 0 30rpx;
font-size: 40rpx;
line-height: 59rpx;
font-weight: 700;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.call {
// display: flex;
.Navigation {
width: 103rpx;
height: 48rpx;
background: #00C176;
border-radius: 24px;
font-size: 21rpx;
color: #ffffff;
line-height: 48rpx;
margin-left: 5%;
text-align: center;
margin-top: 3%;
image {
width: 24rpx;
height: 24rpx;
}
}
.callme {
width: 150rpx;
height: 48rpx;
background: #D43953;
border-radius: 24px;
font-size: 21rpx;
color: #ffffff;
line-height: 48rpx;
margin-left: 35%;
margin-top: 3%;
text-align: center;
position: relative;
.icon{
position: absolute;
left:10%;
top:50%;
transform: translateY(-50%);
}
.text{
position: absolute;
top:50%;
right:10%;
transform: translateY(-50%);
}
}
}
.address {
font-size: 25rpx;
margin-left: 35%;
color: #999999;
line-height: 37rpx;
font-size: 30rpx;
color: #666666;
margin:40rpx 0 20rpx 30rpx;
word-break:break-all;
line-height: 50rpx;
// overflow: hidden;
// text-overflow: ellipsis;
// white-space: nowrap;
position: relative;
.distance{
// position: absolute;
// right:30rpx;
// top:50%;
float: right;
display: inline-block;
padding-right: 10rpx;
}
.text{
padding-left: 40rpx;
display: inline-block;
}
image{
position: absolute;
top:50%;
transform: translateY(-50%);
width: 28rpx;
height: 35rpx;
}
}
}
}

View File

@ -1,55 +1,122 @@
<template>
<view class="app">
<view class="container">
<view>
<!-- 轮播图 -->
<swiper indicator-dots="true" indicator-color='#fff' indicator-active-color='#0086d6'
:autoplay="autoplay" interval="2000" duration="1000" show-center-play-btn="true" class="swiper-box"
circular='true' @change="swiperChange">
<swiper-item v-for="(item ,index) in Banners" :key="index">
<view class="swiper-item" v-show="!splits(item)" wx-if="{item}">
<image v-if="item" :src="item" mode="widthFix"></image>
</view>
<view class="swiper-item" v-show="splits(item)" v-if="item">
<video :id="'myVideo'+index" :autoplay="false" :src="item" controls show-fullscreen-btn
object-fit="fill" @play="play" @pause="pause" @ended="ended" auto-pause-if-navigate
show-play-btn :enable-progress-gesture='true' :show-center-play-btn='true'
enable-play-gesture auto-pause-if-open-native show-mute-btn></video>
</view>
</swiper-item>
</swiper>
</view>
</view>
<!-- <swiper class="swiper" circular>
<swiper-item>
<view class="swiper-item ">A</view>
</swiper-item>
<swiper-item>
<view class="swiper-item">B</view>
</swiper-item>
<swiper-item>
<video @play = 'videoplay'
src="http://192.168.16.30:8088/profile/posterVideoUrl/2023/02/21/QQ录屏20221019175958_20230221170920A01781ba346416.mp4"></video>
</swiper-item>
</swiper> -->
<!-- <u-swiper v-if="lbinfo" :list="lbinfo" height="450" style='background-size: 100%;' mode='none'></u-swiper> -->
<view class="content">
<view class="righttext">
<image class="picture" :src="list.stationIntroducePcitureUrl"></image>
<view class="title">
<view class="title" v-if="list.nurseStationName">
{{list.nurseStationName}}
</view>
<view class="address">{{list.address}} </view>
<view class="call">
<view class="callme" @tap="gophone()">
<u-icon class='icon' name="phone-fill" color="#ffffff" size="30"></u-icon>
<view class="text">联系我们</view>
<view class="title" v-else>
暂无
</view>
<view class="time">
<view class="text">
{{list.businessStatus}}
</view>
<!-- <view class="Navigation">
<image src="/static/daohang.png" mode="">导航</image>
</view> -->
</view>
</view>
<view class="detail">
<view class="Introduction">机构简介</view>
<view class="textInfo" v-html="list.agencyIntroduce">
</view>
</view>
<view class="Nursestationconfiguration">
<view class="configuration">
护理站配置
<view class="" style="margin-top: 30rpx;">
<view class="text" v-for="(item,index) in nurseStationLabelList" :key="index">
{{item.labelDescription}}
<view class="timeday" v-if="list.openingHoursDescribe">
{{list.openingHoursDescribe}}
</view>
<view class="texttime">
<view class="">
上午{{list.morningOpenStartTime}}-{{list.morningOpenEndTime}}
</view>
<view class="">
下午{{list.afternoonOpenStartTime}}-{{list.afternoonOpenEndTime}}
</view>
</view>
</view>
<view class="configuration">
<view class="text" v-for="(item,index) in nurseStationLabelList" :key="index">
{{item.labelDescription}}
</view>
</view>
<view class="address" v-if="list.address" @tap="goMap">
<image src="../../static/locatinsmall.png" mode=""></image>
<view class="text">
{{list.address}}
</view>
<view class="distance">
{{distance}}KM
</view>
</view>
<view class="address" v-else>
<image src="../../static/locatinsmall.png" mode=""></image>
<view class="text">
暂无
</view>
<view class="distance">
{{distance}}KM
</view>
</view>
<view class="address" v-if="list.dutyPhone" style="margin: 20rpx 0 0 33rpx;" @tap='gophone'>
<image src="../../static/phone.png" mode=""></image>
<view class="text">
{{list.dutyPhone}}
</view>
</view>
<view class="address" v-else style="margin: 20rpx 0 0 33rpx">
<image src="../../static/phone.png" mode=""></image>
<view class="text">
暂无
</view>
</view>
</view>
<view class="tive">
<view class="tab-box">
<view class="tab-item" @tap="testTabClick(index)" v-for="(item,index) in tabList" :key="index"
<view class="tab-item" @tap="testTabClick(item)" v-for="(item,index) in tabLists" :key="index"
:class="tabIndex == index?'active':''">
{{item.name}}
</view>
</view>
<view class="" v-if="servelist.length>0&&choicetab==false">
<u-tabs v-if="choicetab==false" :list="tabList" :current="classifycurrent" @change="change">
</u-tabs>
<view class="" v-if="servelist.length>0&&choicetab==false" style="margin:0">
<view class="item" v-for="item in servelist" :key="" v-show='choicetab==false'
@click.stop='goProjectDetails(item)'>
<image :src="item.itemPictureUrl"></image>
<view class="huanyao">{{item.nurseItemName}}
</view>
<view class="day">
{{item.advanceAppointDuration=='HALF_DAY'?'提前预约时长:半天':''}}
{{item.advanceAppointDuration=='ONE_DAY'?'提前预约时长:一天':''}}
</view>
<!-- <view class="pingfen">
<u-rate :count="5" value="2"></u-rate>
</view> -->
<view class="servicetime">服务时长:{{item.serveDurationUnit?item.serveDurationUnit:'0'}}</view>
<view class="appointment" @tap.stop='goappointments(item)'>预约</view>
<!-- <view class="servicetime">服务时长:{{item.serveDurationUnit?item.serveDurationUnit:'0'}}</view> -->
<view class="appointment" @click.stop='goappointments(item)'>预约</view>
<view class="price">{{item.nurseItemPrice==null?'0':item.nurseItemPrice}}</view>
</view>
</view>
@ -63,11 +130,11 @@
<view class="item" v-show='choicetab' v-for="(item,index) in productlist" :key="index">
<image :src="item.goodsPictureUrl"></image>
<view class="product">{{item.goodsName}}</view>
<view class="product" style="top:38%;font-size: 24rpx;color: #999999;">
<!-- <view class="product" style="top:38%;font-size: 24rpx;color: #999999;">
{{item.attributeDetailsName}}
</view>
<view class="buy appointment" @tap="goCommodityDetails(item)">购买</view>
<view class="price" style="left:32%">{{item.goodsPrice==null?'0':item.goodsPrice}}</view>
</view> -->
<view class="appointment" @tap="goCommodityDetails(item)">购买</view>
<view class="price">{{item.goodsPrice==null?'0':item.goodsPrice}}</view>
</view>
</view>
<view class="noorder" v-if="productlist.length==0&&choicetab">
@ -92,6 +159,8 @@
</view>
</view>
</u-mask>
<u-toast ref="uToast" />
<u-back-top :scroll-top="scrollTop"></u-back-top>
</view>
</template>
@ -108,7 +177,10 @@
export default {
data() {
return {
patientId: '', //
Banners: [], //
autoplay: true, //
videoContext: '',
baseurl: '',
usershow: false, //
choicetab: false, //
list: [], //list
@ -122,59 +194,190 @@
nurseStationId: '',
pageNum: 1,
pageSize: 10,
tabIndex: 0,
timer: null,
tabList: [{
name: "服务项目"
}, {
name: "产品"
}, ]
name: '全部',
id: ''
}], //
tabIndex: 0,
tabLists: [{
name: '服务项目',
id: 0,
},
{
name: '产品',
id: 1,
}
],
classifycurrent: 0, //
distance: null, //
nurseClassifyInfoId: '', //id
scrollTop: 0,
}
},
onShow() {
this.baseurl = baseurl
this.usershow = false
this.getInfo()
this.serveinfo()
this.productinfo()
},
onLoad(options) {
let that = this
this.GetBanner()
this.nurseStationId = options.nurseStationId
this.distance = options.distance
},
methods: {
//
goMap() {
uni.openLocation({
latitude: Number(this.list.latitude),
longitude: Number(this.list.longitude),
})
},
swiperChange(e) {
let {
current,
source
} = e.detail
this.videoContext = uni.createVideoContext('myVideo' + (current - 1));
//
if (source === 'touch') {
this.videoContext.pause(); //
this.autoplay = true
}
},
//
GetBanner() {},
// banner
splits(url) {
if (url.indexOf('.') != -1) {
var ext = url.substring(url.lastIndexOf('.') + 1);
return ['mp4', 'webm', 'mpeg4', 'ogg'].indexOf(ext) != -1
}
},
// /
play() {
this.autoplay = false
// this.videoContext.requestFullScreen()
},
//
pause() {
this.autoplay = true
},
//
ended() {
this.autoplay = true
},
testTabClick(item) {
this.tabIndex = item.id
if (item.id == 0) {
this.choicetab = false
} else {
this.choicetab = true
}
},
//
change(index) {
this.classifycurrent = index;
this.nurseClassifyInfoId = this.tabList[index].id
this.serveinfo()
},
//
goappointments(item) {
let that = this
try {
const value = uni.getStorageSync('patientId');
if (value) {
that.patientId = value
AppIdentification(this.patientId).then(res => {
if (res.data.loginFlag) {
uni.navigateTo({
url: `/pages/appointmenttime/appointmenttime?stationId=${item.stationId}&stationItemId=${item.stationItemId}&stationItemPriceId=${item.stationItemPriceId}`,
const value2 = uni.getStorageSync('patientId');
if (value2) {
AppIdentification(value2).then(res => {
if (res.code == 200) {
if (res.data.loginFlag) {
that.usershow = false
uni.navigateTo({
url: `/pages/appointmenttime/appointmenttime?stationId=${item.stationId}&stationItemId=${item.stationItemId}&stationItemPriceId=${item.stationItemPriceId}`,
})
} else {
that.usershow = true
}
} else if (res.code == 9999) {} else {
that.$refs.uToast.show({
title: res.msg,
type: 'error'
})
this.usershow = false
} else {
this.usershow = true
if (that.timer) {
clearTimeout(that.timer)
}
that.timer = setTimeout(e => {
uni.navigateTo({
url: '/pages/login/login'
})
}, 1500)
}
})
} else {
that.$refs.uToast.show({
title: '未登录,请先登录',
type: 'error'
})
if (that.timer) {
clearTimeout(that.timer)
}
that.timer = setTimeout(e => {
uni.navigateTo({
url: '/pages/login/login'
})
}, 1500)
}
} catch (e) {}
} catch (e) {
uni.navigateTo({
url: '/pages/login/login'
})
}
},
getInfo() {
introductionList(this.nurseStationId).then(res => {
res.data.stationIntroducePcitureUrl = baseurl + res.data.stationIntroducePcitureUrl
if (res.data.agencyIntroduce) {
res.data.agencyIntroduce = res.data.agencyIntroduce.replace(/\<img/gi,
"<br/><img class='richPic'")
}
this.list = res.data
if (res.data.nurseStationLabelList) {
this.nurseStationLabelList = res.data.nurseStationLabelList
if (res.code == 200) {
this.Banners = []
this.serveinfo()
this.productinfo()
res.data.morningOpenStartTime = res.data.morningOpenStartTime.slice(0, 5)
res.data.morningOpenEndTime = res.data.morningOpenEndTime.slice(0, 5)
res.data.afternoonOpenStartTime = res.data.afternoonOpenStartTime.slice(0, 5)
res.data.afternoonOpenEndTime = res.data.afternoonOpenEndTime.slice(0, 5)
res.data.stationIntroducePcitureUrl = baseurl + res.data.stationIntroducePcitureUrl
res.data.stationPictureUrl = baseurl + res.data.stationPictureUrl
if (res.data.agencyIntroduce) {
res.data.agencyIntroduce = res.data.agencyIntroduce.replace(/\<img/gi,
"<br/><img class='richPic'")
}
res.data.nurseClassifyInfoList.forEach(e => {
e.name = e.classifyName
this.tabList.push(e)
})
this.list = res.data
if (res.data.poserInfoList.length >= 1) {
res.data.poserInfoList.forEach(e => {
e.image = baseurl + e.posterPictureUrl
this.Banners.push(e.image)
})
if (res.data.poserInfoList[0].video) {
res.data.poserInfoList[0].video = baseurl + res.data.poserInfoList[0]
.posterVideoUrl
this.Banners.push(res.data.poserInfoList[0].video)
}
} else {
this.Banners.push(res.data.stationPictureUrl)
this.Banners.push(res.data.stationIntroducePcitureUrl)
}
if (res.data.nurseStationLabelList) {
this.nurseStationLabelList = res.data.nurseStationLabelList
}
}
})
},
serveinfo() {
this.pageNum = 1
itemList(this.nurseStationId, this.pageSize, this.pageNum).then(res => {
itemList(this.nurseStationId, this.pageSize, this.pageNum, this.nurseClassifyInfoId).then(res => {
uni.removeStorageSync('Refresh');
res.rows.forEach(e => {
e.itemPictureUrl = baseurl + e.itemPictureUrl
})
@ -185,6 +388,7 @@
productinfo() {
this.pageNum = 1
productInformation(this.nurseStationId, this.pageNum, this.pageSize).then(res => {
uni.removeStorageSync('Refresh');
res.rows.forEach(e => {
e.goodsPictureUrl = baseurl + e.goodsPictureUrl
})
@ -192,10 +396,6 @@
this.producttotal = res.total
})
},
testTabClick(index) {
this.tabIndex = index
this.choicetab = this.tabIndex
},
//
goCommodityDetails(item) {
uni.navigateTo({
@ -204,6 +404,7 @@
},
//
goinformation() {
this.usershow = false
uni.navigateTo({
url: '/pages/information/information'
})
@ -236,13 +437,13 @@
}
}
});
},
}
},
onReachBottom() { //
if (this.choicetab == 0) {
onReachBottom() { //
if (!this.choicetab) {
if (this.servelist.length >= this.servetotal) {} else {
this.pageNum++
itemList(this.nurseStationId, this.pageSize, this.pageNum).then(res => {
itemList(this.nurseStationId, this.pageSize, this.pageNum, this.nurseClassifyInfoId).then(res => {
res.rows.forEach(e => {
e.itemPictureUrl = baseurl + e.itemPictureUrl
this.servelist.push(e)
@ -263,7 +464,7 @@
},
onPullDownRefresh() { //
this.pageNum = 1;
if (this.choicetab == 0) {
if (!this.choicetab) {
itemList(this.nurseStationId, this.pageSize, this.pageNum).then(res => {
res.rows.forEach(e => {
e.itemPictureUrl = baseurl + e.itemPictureUrl
@ -282,9 +483,30 @@
uni.stopPullDownRefresh();
}, 1000);
},
//1.
onShareAppMessage(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
//2.
onShareTimeline(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
onPageScroll(e) {
this.scrollTop = e.scrollTop;
},
}
</script>
<style lang="scss">
@import './nursestation.scss'
@import './nursestation.scss';
</style>

View File

@ -25,20 +25,9 @@
pageSize: 10, //
total: 0, //list
goodsCategoryList: [], //list
listimg: [{
img: '../../static/sp.png',
},
{
img: '../../static/yyss.png',
},
{
img: '../../static/znsb.png',
},
{
img: '../../static/cp.png',
},
],
listcolor: ['#00C176', '#D43953', '#E1AE3C', '#4C7BC9', '#9e4dd0'], //
listcolor: ['#00C176', '#D43953', '#E1AE3C', '#4C7BC9', '#9e4dd0', '#00C176', '#D43953', '#E1AE3C',
'#4C7BC9', '#9e4dd0',
], //
};
},
onLoad(options) { //

View File

@ -1,54 +1,173 @@
//护理站列表
.app{
padding: 0 0 5rpx 0;
.map{
padding-top: 100rpx;
z-index: 1;
.map{
z-index: 1;
padding: 0;
background-color: #fff;
}
::v-deep .u-swiper-item{
}
::v-deep .u-swiper-image {
}
::v-deep .u-tabs{
background-color: #F4F5F7 !important;
padding-bottom: 20rpx;
}
.Classificationlist{
margin: 30rpx 0 0;
width: 100%;
display: flex;
justify-content: flex-start;
flex-wrap: wrap;
text-align: center;
.itemclass{
color: #4C7BC9;
width: 25%;
height: 190rpx;
image{
display: block;
margin: 0 auto;
width: 100rpx;
height: 100rpx;
}
.title{
padding: 0 10rpx;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 30rpx;
font-weight: 600;
line-height: 70rpx;
}
}
.item{
width: 25%;
height: 190rpx;
image{
display: block;
margin: 0 auto;
width: 100rpx;
height: 100rpx;
}
.title{
padding: 0 10rpx;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 30rpx;
font-weight: 500;
line-height: 70rpx;
}
}
}
.inputs {
border: 1px solid #f0f0f0;
width: 90%;
height: 65rpx;
margin: 0 0 10rpx 50%;
transform: translateX(-50%);
border-radius: 20rpx;
background-color: #F4F5F7;
z-index: 999;
.input {
margin: 0 auto;
position: absolute;
height: 65rpx;
// top: 8%;
left: 10%;
width: 90%;
font-size: 26rpx;
color: #000000;
}
.icon {
background: url(@/static/sousuo.png) no-repeat;
width: 30rpx;
height: 28rpx;
background-size: cover;
position: absolute;
top: 30%;
left: 3%;
}
}
.conNew {
width: 96%;
// z-index: 999;
// position: fixed;
// top: 450rpx;
background-color: #F4F5F7;
width: 100%;
padding: 30rpx 0 50rpx;
margin: 0 auto;
// left: 2%;
height: 100%;
.noorder{
margin-top: 90rpx;
image{
display: block;
margin: 0 auto;
width: 100rpx;
height: 120rpx;
}
view{
text-align: center;
font-size: 36rpx;
color: #BFBFBF;
}
}
.title{
font-size: 32rpx;
font-weight: bold;
padding-left: 2%;
}
.addressContent {
width: 100%;
width: 96%;
background-color: #ffffff;
margin: 0 auto;
}
.lists {
background-color: #ffffff;
width: 100%;
height: 240rpx;
height: 300rpx;
margin-bottom: 14rpx;
border-radius: 20rpx;
position: relative;
.nurse {
font-size: 28rpx;
background-color: #ffffff;
.tags{
display: flex;
position: absolute;
top: 15%;
top: 55%;
left: 35%;
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
width: 65%;
flex-wrap: wrap;
.tag{
background: #F8D7D1;
opacity: 0.8;
margin: 0 10rpx 10rpx 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding: 0 10rpx;
height: 50rpx;
line-height: 50rpx;
text-align: center;
border-radius: 10rpx;
font-size: 22rpx;
color: #F44B2F;
}
}
.nurse {
font-size: 32rpx;
position: absolute;
top: 12%;
left: 35%;
width: 63%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.distance {
position: absolute;
bottom: 20%;
font-size: 24rpx;
left: 35%;
top: 32%;
left:35%;
font-size: 27rpx;
color: #666666;
}
@ -82,20 +201,6 @@
display: block;
margin: 10% auto;
}
.understand {
font-size: 28rpx;
color: #ffffff;
width: 160rpx;
height: 60rpx;
line-height: 60rpx;
text-align: center;
background-color: #4C7BC9;
position: absolute;
bottom: 10%;
right: 1%;
border-radius: 35rpx;
}
}
}

View File

@ -1,24 +1,58 @@
<template>
<view class="app">
<view class="nursetation" @tap='detailed()'>
<text class="what">什么是护理站</text>
<u-icon class="icon" name="arrow-right"></u-icon>
<view class="inputs">
<i class="icon"></i>
<input v-model="searchName" type="text" name="" id="" class="input" placeholder="请输入">
</view>
<view class="map" style="height:35vh;">
<map style="width:100%; height:100%" scale="17" :latitude="latitude" :longitude="longitude"
:markers="markers"></map>
<view class="Classificationlist">
<view v-for="(item,index) in nurseItemClassifyInfoList" :key="index" @tap='tapitemclass(item)'
:class="item.id == itemClassId?'itemclass':'item'">
<image :src="item.classifyPictureUrl" mode=""></image>
<view class="title">
{{item.classifyName}}
</view>
</view>
<view class="item" v-if='nurseItemClassifyInfoList.length==7&&lengthlistshow' @tap='lengthlist(true)'>
<image src="../../static/gd.png" mode=""></image>
<view class="title">
更多
</view>
</view>
<view class="item" v-if='nurseItemClassifyInfoList.length>7&&!lengthlistshow' @tap='lengthlist(false)'>
<image src="../../static/gd.png" mode=""></image>
<view class="title">
收起
</view>
</view>
</view>
<u-swiper :list="lbinfo" height='200' interval='3000' duration='1500' mode='none'></u-swiper>
<view class="conNew">
<view class="addressContent" v-for="(item,index) in nursestationlist" :key="index">
<view class="lists">
<view class="nurse">{{item.nurseStationName}}</view>
<view class="distance">距离您{{item.distance}}KM</view>
<image class="background" :src="item.stationPictureUrl" mode=""></image>
<view class="understand" @tap='godetails(item)'>
点击了解
<view class="title">
周边医养机构
</view>
<u-tabs :list="nurseAgencyClassifyInfoList" :current="conNewcurrent" @change="change"></u-tabs>
<view class="" v-if="nursestationlist.length>0">
<view class="addressContent" v-for="(item,index) in nursestationlist" :key="index">
<view class="lists" @tap='godetails(item)'>
<view class="nurse">{{item.nurseStationName}}</view>
<view class="distance"
v-show="homeLatitudeLongitude.homeLatitude&&homeLatitudeLongitude.homeLongitude">
距离您{{item.distance}}KM</view>
<image class="background" :src="item.stationPictureUrl" mode=""></image>
<view class="tags">
<view class="tag" v-for="uitem in item.classifyInfoList">
{{uitem.classifyName}}
</view>
</view>
</view>
</view>
</view>
<view class="noorder" v-else>
<image src="../../static/noorder.png" mode=""></image>
<view class="">
暂无护理站
</view>
</view>
</view>
<view class="masks" style="" v-if="mask">
<view class="mask">
@ -34,99 +68,130 @@
</view>
</view>
</view>
<u-back-top :scroll-top="scrollTop"></u-back-top>
</view>
</template>
<script>
import {
nearbyList,
getPatientInfo
getPatientInfo,
getNurseClassifyList
} from '@/api/site/site.js';
import baseurl from '@/api/baseurl.js'
export default {
data() {
return {
nurseAgencyClassifyInfoList: [], //
conNewcurrent: 0,
nurseItemClassifyInfoList: [], //
nurseItemClassifyInfolength: 0,
nurseItemClassifyInfolistlength: [],
lengthlistshow: true,
lbinfo: [], //list
nursestationlist: [],
mask: false,
pageNum: 1,
pageSize: 10,
total: 0,
//map
id: 0, // 使 marker id
// latitude: 39.909,
// longitude: 116.39742,
latitude: 36.649372,
longitude: 116.977102,
nurseTypeCode: '',
markers: [],
covers: [],
latitude: 39.90374,
longitude: 116.397827,
homeLatitudeLongitude: null,
nurseClassId: '', //id
itemClassId: '', //id
searchName: '', //
scrollTop: 0,
}
},
methods: {
getlocation() {
lengthlist(item) {
uni.showLoading({
title: '',
duration: 1000
});
setTimeout((e) => {
this.lengthlistshow = !this.lengthlistshow
if (item) {
this.nurseItemClassifyInfoList = this.nurseItemClassifyInfolistlength
} else {
this.nurseItemClassifyInfoList = this.nurseItemClassifyInfolistlength.slice(0, 7)
}
uni.hideLoading();
}, 1000)
},
//
tapitemclass(item) {
if (this.itemClassId == item.id) {
this.itemClassId = ''
} else {
this.itemClassId = item.id
}
this.requestinfo()
},
//
getNurseClassifyinfo() {
getNurseClassifyList().then(res => {
this.nurseAgencyClassifyInfoList.push({
name: '全部',
id: '',
})
res.data.nurseAgencyClassifyInfoList.forEach(e => {
e.name = e.classifyName
this.nurseAgencyClassifyInfoList.push(e)
})
res.data.nurseItemClassifyInfoList.forEach(e => {
e.classifyPictureUrl = baseurl + e.classifyPictureUrl
})
res.data.poserInfoList.forEach(e => {
e.image = baseurl + e.posterPictureUrl
})
this.nurseItemClassifyInfolength = res.data.nurseItemClassifyInfoList.length
this.nurseItemClassifyInfolistlength = res.data.nurseItemClassifyInfoList
this.lbinfo = res.data.poserInfoList
this.nurseItemClassifyInfoList = res.data.nurseItemClassifyInfoList.slice(0, 7)
})
},
change(index) {
this.conNewcurrent = index;
this.nurseClassId = this.nurseAgencyClassifyInfoList[index].id
this.requestinfo()
},
getlocation(value) {
var that = this
uni.getLocation({
type: 'wgs84',
success: res => {
that.latitude = res.latitude
that.longitude = res.longitude
that.markers.push({
id: 3,
latitude: res.latitude,
longitude: res.longitude,
width: 20,
height: 25,
iconPath: "../../static/locatinsmall.png"
})
that.requestinfo();
},
fail: error => {
uni.showModal({
title: '提示',
content: '获取定位失败,是否授权打开定位',
success: (res) => {
if (res.confirm) {
uni.getSystemInfo({
success: (sys) => {
if (sys.platform == 'ios') {
plus.runtime.openURL(
"app-settings://");
} else {
var main = plus.android
.runtimeMainActivity();
var Intent = plus.android.importClass(
"android.content.Intent");
//=> android.settings.APPLICATION_SETTINGS
var mIntent = new Intent(
'android.settings.LOCATION_SOURCE_SETTINGS'
);
main.startActivity(mIntent);
}
}
})
}
}
})
uni.openSetting({
success(res) {
if (res.authSetting['scope.userLocation']) {
// uni.getLocation({
// type: 'wgs84',
// success: function(res) {
// that.latitude = res.latitude
// that.longitude = res.longitude
// that.mask = false
// }
// });
}
}
});
},
requestinfo() {
nearbyList(this.pageSize, this.pageNum, this.longitude, this.latitude, this.nurseTypeCode).then(res => {
res.rows.forEach(e => {
e.stationPictureUrl = baseurl + e.stationPictureUrl
this.pageNum = 1;
nearbyList(this.pageSize, this.pageNum, this.longitude, this.latitude, this.nurseClassId, this.itemClassId,
this.searchName)
.then(res => {
uni.removeStorageSync('Refresh');
res.rows.forEach(e => {
e.stationPictureUrl = baseurl + e.stationPictureUrl
if (e.classifyInfoList && e.classifyInfoList.length >= 1) {
e.classifyInfoList = e.classifyInfoList.slice(0, 2)
}
})
this.nursestationlist = res.rows
this.mask = false
this.total = res.total
})
this.nursestationlist = res.rows
this.mask = false
this.total = res.total
})
},
godetails(item) {
uni.navigateTo({
url: `/pages/nursestation/nursestation?nurseStationId=${item.nurseStationId}`
})
},
detailed() {
uni.navigateTo({
url: `/pages/detail/detail`
url: `/pages/nursestation/nursestation?nurseStationId=${item.nurseStationId}&distance=${item.distance}`
})
},
cancel() {
@ -136,13 +201,17 @@
})
},
},
onReachBottom() {
onReachBottom() { //
if (this.nursestationlist.length >= this.total) {} else {
this.pageNum++;
nearbyList(this.pageSize, this.pageNum, this.longitude, this.latitude, this.nurseTypeCode)
nearbyList(this.pageSize, this.pageNum, this.longitude, this.latitude, this.nurseClassId, this.itemClassId,
this.searchName)
.then(res => {
res.rows.forEach(e => {
e.stationPictureUrl = baseurl + e.stationPictureUrl
if (e.classifyInfoList && e.classifyInfoList.length >= 1) {
e.classifyInfoList = e.classifyInfoList.slice(0, 2)
}
this.nursestationlist.push(e)
})
})
@ -150,54 +219,89 @@
},
onPullDownRefresh() { //
this.pageNum = 1;
nearbyList(this.pageSize, this.pageNum, this.longitude, this.latitude, this.nurseTypeCode, this.iptVal)
.then(res => {
res.rows.forEach(e => {
e.stationPictureUrl = baseurl + e.stationPictureUrl
})
this.nursestationlist = res.rows
})
// this.requestinfo()
setTimeout(function() {
uni.stopPullDownRefresh();
}, 1000);
},
watch: {
iptVal() {
// this.requestinfo()
searchName() {
this.itemClassId = ''
this.nurseClassId = ''
this.conNewcurrent = 0
this.requestinfo()
},
},
onShow() {
this.nurseClassId = ''
this.itemClassId = ''
var that = this
try {
const value = uni.getStorageSync('patientId');
if (value) {
getPatientInfo(value).then(res => {
if (res.code == 200) {
if (res.data.homeLatitude && res.data.homeLongitude) {
that.latitude = res.data.homeLatitude
that.longitude = res.data.homeLongitude
that.markers.push({
id: 3,
latitude: res.data.homeLatitude,
longitude: res.data.homeLongitude,
width: 20,
height: 25,
iconPath: "../../static/locatinsmall.png"
})
that.requestinfo();
} else {
that.getlocation()
}
const value = uni.getStorageSync('patientId');
if (value) {
getPatientInfo(value).then(res => {
if (res.code == 200) {
this.homeLatitudeLongitude = res.data
if (res.data.homeLatitude && res.data.homeLongitude) {
that.latitude = res.data.homeLatitude
that.longitude = res.data.homeLongitude
that.requestinfo();
} else {
that.getlocation()
that.requestinfo();
// uni.getLocation({
// type: 'wgs84',
// success: function(resp) {
// that.latitude = resp.latitude
// that.longitude = resp.longitude
// that.requestinfo();
// },
// fail(err) {
// that.mask = true;
// }
// });
}
})
} else {
that.getlocation()
}
} catch (e) {}
} else if (res.code == 9999) {} else {
that.requestinfo();
}
})
} else {
that.requestinfo();
// uni.getLocation({
// type: 'wgs84',
// success: function(res) {
// that.latitude = res.latitude
// that.longitude = res.longitude
// that.requestinfo();
// },
// fail(err) {
// that.mask = true;
// }
// });
}
},
onLoad() {
this.getNurseClassifyinfo();
},
//1.
onShareAppMessage(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
//2.
onShareTimeline(res) {
let pages = getCurrentPages();
let url = pages[pages.length - 1].$page.fullPath
return {
title: '泉医到家',
path: url,
}
},
onPageScroll(e) {
this.scrollTop = e.scrollTop;
},
onLoad() {},
}
</script>
<style lang="scss">

View File

@ -75,11 +75,12 @@
<style lang="scss">
.app {
height: 100vh;
background-color: #fff;
}
image {
width: 50%;
height: 200rpx;
height: 400rpx;
position: absolute;
left: 25%;
top: 28%;

385
pages/utabs/u-tabs.vue Normal file
View File

@ -0,0 +1,385 @@
<template>
<view class="u-tabs" :style="{
background: bgColor
}">
<!-- $u.getRect()对组件根节点无效因为写了.in(this)故这里获取内层接点尺寸 -->
<view :id="id">
<scroll-view scroll-x class="u-scroll-view" :scroll-left="scrollLeft" scroll-with-animation>
<view class="u-scroll-box" :class="{'u-tabs-scorll-flex': !isScroll}">
<view class="u-tab-item u-line-1" :id="'u-tab-item-' + index" v-for="(item, index) in list"
:key="index" @tap="clickTab(index)" :style="[tabItemStyle(index)]">
<view class="">
{{item.dates}}
</view>
<u-badge :count="item[count] || item['count'] || 0" :offset="offset" size="mini"></u-badge>
{{ item[name] || item['name']}}
</view>
<view v-if="showBar" class="u-tab-bar" :style="[tabBarStyle]"></view>
</view>
</scroll-view>
</view>
</view>
</template>
<script>
/**
* tabs 标签
* @description 该组件是一个tabs标签组件在标签多的时候可以配置为左右滑动标签少的时候可以禁止滑动 该组件的一个特点是配置为滚动模式时激活的tab会自动移动到组件的中间位置
* @tutorial https://www.uviewui.com/components/tabs.html
* @property {Boolean} is-scroll tabs是否可以左右拖动默认true
* @property {Array} list 标签数组元素为对象[{name: '推荐'}]
* @property {String Number} current 指定哪个tab为激活状态默认0
* @property {String Number} height 导航栏的高度单位rpx默认80
* @property {String Number} font-size tab文字大小单位rpx默认30
* @property {String Number} duration 滑块移动一次所需的时间单位秒默认0.5
* @property {String} active-color 滑块和激活tab文字的颜色默认#2979ff
* @property {String} inactive-color tabs文字颜色默认#303133
* @property {String Number} bar-width 滑块宽度单位rpx默认40
* @property {Object} active-item-style 活动tabs item的样式对象形式
* @property {Object} bar-style 底部滑块的样式对象形式
* @property {Boolean} show-bar 是否显示底部的滑块默认true
* @property {String Number} bar-height 滑块高度单位rpx默认6
* @property {String Number} item-width 标签的宽度默认auto
* @property {String Number} gutter 单个tab标签的左右内边距之和单位rpx默认40
* @property {String} bg-color tabs导航栏的背景颜色默认#ffffff
* @property {String} name 组件内部读取的list参数中的属性名tab名称见官网说明默认name
* @property {String} count 组件内部读取的list参数中的属性名badge徽标数同name属性的使用见官网说明默认count
* @property {Array} offset 设置badge徽标数的位置偏移格式为 [x, y]也即设置的为top和right的值单位rpx默认[5, 20]
* @property {Boolean} bold 激活选项的字体是否加粗默认true
* @event {Function} change 点击标签时触发
* @example <u-tabs ref="tabs" :list="list" :is-scroll="false"></u-tabs>
*/
export default {
name: "u-tabs",
props: {
// 23使flextab
isScroll: {
type: Boolean,
default: true
},
//
list: {
type: Array,
default () {
return [];
}
},
// tab
current: {
type: [Number, String],
default: 0
},
//
height: {
type: [String, Number],
default: 80
},
//
fontSize: {
type: [String, Number],
default: 28
},
// , ms
duration: {
type: [String, Number],
default: 0.5
},
//
activeColor: {
type: String,
default: '#F44B2F;'
},
//
inactiveColor: {
type: String,
default: '#303133'
},
// barrpx
barWidth: {
type: [String, Number],
default: 40
},
// bar
barHeight: {
type: [String, Number],
default: 6
},
// tab
gutter: {
type: [String, Number],
default: 30
},
//
bgColor: {
type: String,
default: '#ffffff'
},
// (tab)
name: {
type: String,
default: 'name'
},
// ()
count: {
type: String,
default: 'count'
},
//
offset: {
type: Array,
default: () => {
return [5, 20]
}
},
// tab
bold: {
type: Boolean,
default: true
},
// tab item
activeItemStyle: {
type: Object,
default () {
return {}
}
},
//
showBar: {
type: Boolean,
default: true
},
//
barStyle: {
type: Object,
default () {
return {}
}
},
//
itemWidth: {
type: [Number, String],
default: 'auto'
}
},
data() {
return {
scrollLeft: 0, // scroll-view
tabQueryInfo: [], // tab
componentWidth: 0, // px
scrollBarLeft: 0, // bartranslateX()
parentLeft: 0, // (tabs)
id: this.$u.guid(), // id
currentIndex: this.current,
barFirstTimeMove: true, // ()
};
},
watch: {
// tabtab使
// applist
list(n, o) {
// list
if (n.length !== o.length) this.currentIndex = 0;
// $nextTicktabtab
this.$nextTick(() => {
this.init();
});
},
current: {
immediate: true,
handler(nVal, oVal) {
//
this.$nextTick(() => {
this.currentIndex = nVal;
this.scrollByIndex();
});
}
},
},
computed: {
// bar
tabBarStyle() {
let style = {
width: this.barWidth + 'rpx',
transform: `translate(${this.scrollBarLeft}px, -100%)`,
//
'transition-duration': `${this.barFirstTimeMove ? 0 : this.duration }s`,
'background-color': this.activeColor,
height: this.barHeight + 'rpx',
opacity: this.barFirstTimeMove ? 0 : 1,
//
'border-radius': `${this.barHeight / 2}px`
};
Object.assign(style, this.barStyle);
return style;
},
// tab
tabItemStyle() {
return (index) => {
let style = {
height: this.height + 'rpx',
'line-height': '33rpx',
'font-size': this.fontSize + 'rpx',
'transition-duration': `${this.duration}s`,
padding: this.isScroll ? `0 ${this.gutter}rpx` : '',
flex: this.isScroll ? 'auto' : '1',
width: this.$u.addUnit(this.itemWidth)
};
//
if (index == this.currentIndex && this.bold) style.fontWeight = 'bold';
if (index == this.currentIndex) {
style.color = this.activeColor;
// tab item
style = Object.assign(style, this.activeItemStyle);
} else {
style.color = this.inactiveColor;
}
return style;
}
}
},
methods: {
// init便
async init() {
// tabs
let tabRect = await this.$uGetRect('#' + this.id);
// tabs
this.parentLeft = tabRect.left;
// tabs
this.componentWidth = tabRect.width;
this.getTabRect();
},
// tab
clickTab(index) {
// tab
if (index == this.currentIndex) return;
//
this.$emit('change', index);
},
// tab
getTabRect() {
//
let query = uni.createSelectorQuery().in(this);
// tab使exec()
for (let i = 0; i < this.list.length; i++) {
// sizerect
query.select(`#u-tab-item-${i}`).fields({
size: true,
rect: true
});
}
//
query.exec(
function(res) {
this.tabQueryInfo = res;
// bar
this.scrollByIndex();
}.bind(this)
);
},
// scroll-viewtab
scrollByIndex() {
// tabtabwidthleft()
let tabInfo = this.tabQueryInfo[this.currentIndex];
if (!tabInfo) return;
// tab
let tabWidth = tabInfo.width;
// itemtabsitemlefttabsleft
let offsetLeft = tabInfo.left - this.parentLeft;
// tabs-itemscroll-view
let scrollLeft = offsetLeft - (this.componentWidth - tabWidth) / 2;
this.scrollLeft = scrollLeft < 0 ? 0 : scrollLeft;
// item
let left = tabInfo.left + tabInfo.width / 2 - this.parentLeft;
// item
this.scrollBarLeft = left - uni.upx2px(this.barWidth) / 2;
// barFirstTimeMovetruefalse
// scrollBarLeftcomputed
if (this.barFirstTimeMove == true) {
setTimeout(() => {
this.barFirstTimeMove = false;
}, 100)
}
}
},
mounted() {
this.init();
}
};
</script>
<style lang="scss" scoped>
// nvueflexnvuedisplay
@mixin vue-flex($direction: row) {
/* #ifndef APP-NVUE */
display: flex;
flex-direction: $direction;
/* #endif */
}
.u-tabs {
padding: 20rpx 0;
-webkit-overflow-scrolling: touch;
}
view,
scroll-view {
box-sizing: border-box;
}
/* #ifndef APP-NVUE */
::-webkit-scrollbar,
::-webkit-scrollbar,
::-webkit-scrollbar {
display: none;
width: 0 !important;
height: 0 !important;
-webkit-appearance: none;
background: transparent;
}
/* #endif */
.u-scroll-box {
position: relative;
/* #ifdef MP-TOUTIAO */
white-space: nowrap;
/* #endif */
}
/* #ifdef H5 */
// 穿H5scroll-view
scroll-view ::v-deep ::-webkit-scrollbar {
display: none;
width: 0 !important;
height: 0 !important;
-webkit-appearance: none;
background: transparent;
}
/* #endif */
.u-scroll-view {
width: 100%;
white-space: nowrap;
position: relative;
}
.u-tab-item {
position: relative;
/* #ifndef APP-NVUE */
display: inline-block;
/* #endif */
text-align: center;
transition-property: background-color, color;
}
.u-tab-bar {
position: absolute;
bottom: 0;
}
.u-tabs-scorll-flex {
@include vue-flex;
justify-content: space-between;
}
</style>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 368 B

BIN
static/fuli.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
static/gd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
static/hlz.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

BIN
static/huijiantou.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

BIN
static/jkzx.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
static/kefu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
static/kefuzx.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 990 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

BIN
static/phone.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

BIN
static/shoping.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
static/shopingw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 834 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

BIN
static/zbgl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB