You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

596 lines
13 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<script setup>
/**
* name
* usersa0ChunLuyu
* date2023年4月11日 17:56:51
*/
import {
onMounted,
ref
} from 'vue'
import {
ConfigGetAction,
CarouselListAction,
HospitalCountAction,
HospitalExtraInfoAction,
$image,
$response
} from '@/api'
import {
onShow
} from '@dcloudio/uni-app'
import CheckLogin from '@/components/check_login/check_login.vue'
import {
useStore
} from '@/store'
const $store = useStore()
onMounted(() => {
ConfigGet()
getHospitalInfo()
setComboItemOpenFunc()
setOrderChooseTypeFunc()
setActivityPackageFunc()
getUserInfo()
})
const user_info = ref(false)
const getUserInfo = () => {
uni.$lu.user((info) => {
user_info.value = info
if (!!user_info.value.id) {
HospitalCount()
} else {
$store.buy_info = {
hospital: 0,
combo: 0,
items: [],
group: '',
person: [],
time: 0
}
}
})
}
const hospital_info = ref(false)
const getHospitalInfo = () => {
uni.$lu.hospital((info) => {
hospital_info.value = info
uni.setNavigationBarTitle({
title: hospital_info.value.name
})
CarouselList(1)
CarouselList(2)
CarouselList(3)
CarouselList(4)
})
}
const choose_type_show = ref(false)
const setOrderChooseTypeFunc = () => {
uni.$lu.open.order_choose_type = () => {
if (!!user_info.value && user_info.value.person.id) {
uni.navigateTo({
url: '/pages/buy/person/person?type=choose'
})
} else {
uni.$lu.toast("请先添加体检人")
}
}
}
const setActivityPackageFunc = () => {
uni.$lu.open.activity_package = (id) => {
$store.activity_package = Number(id);
uni.switchTab({
url: '/pages/main/combo/combo'
})
}
}
const setComboItemOpenFunc = () => {
uni.$lu.open.combo_item_open = (combo, items, time) => {
let items_ids = !!items ? items.split(',') : []
time = JSON.parse(time)
$store.buy_info.hospital = hospital_info.value.id
$store.buy_info.combo = combo
$store.buy_info.items = items_ids
$store.buy_info.group = ''
$store.buy_info.time = time
if ($store.buy_info.person.length === 0) {
uni.navigateTo({
url: '/pages/buy/person/person?type=choose'
})
} else {
uni.navigateTo({
url: '/pages/buy/info/info'
})
}
}
}
const hospital_count = ref(0)
const HospitalCount = async () => {
const response = await HospitalCountAction()
$response(response, () => {
hospital_count.value = response.data.count
})
}
const carouse_list = ref([])
const ad_list = ref([])
const button_list = ref([])
const h5_list = ref([])
const CarouselList = async (type) => {
const response = await CarouselListAction({
type,
hospital: hospital_info.value.id
})
$response(response, () => {
switch (type) {
case 1:
carouse_list.value = response.data.list
break;
case 2:
ad_list.value = response.data.list
break;
case 3:
button_list.value = response.data.list
break;
case 4:
h5_list.value = response.data.list
break;
}
})
}
const cover_image = ref('')
const record_number = ref('')
const ConfigGet = async () => {
const response = await ConfigGetAction({
label_arr: ['小程序默认封面图', '小程序备案']
})
$response(response, () => {
cover_image.value = response.data['小程序默认封面图']
record_number.value = response.data['小程序备案']
})
}
const actionClick = (info) => {
uni.$lu.jump(info)
}
const loginCallback = () => {
getHospitalInfo()
getUserInfo()
}
const changeHospitalClick = () => {
uni.$lu.jump({
jump_type: 2,
jump_path: '/pages/hospital/choose_list/choose_list',
login_type: 1
})
}
const addPersonClick = () => {
uni.$lu.jump({
jump_type: 2,
jump_path: '/pages/user/edit/edit?id=0',
login_type: 1
})
}
const mapClick = (info) => {
uni.openLocation({
type: 'wgs84',
latitude: Number(hospital_info.value.latitude),
longitude: Number(hospital_info.value.longitude),
scale: 18,
name: hospital_info.value.hospital_name,
address: hospital_info.value.address
})
}
</script>
<template>
<view>
<view @click="addPersonClick()" v-if="!!user_info && !user_info.person.id" class="user_status_wrapper">
<view class="user_status_text_wrapper" v-if="!user_info.id">您还没有登录,<text>点击登录</text></view>
<view class="user_status_text_wrapper" v-if="!!user_info.id && !user_info.person.id">您还没有添加体检人,<text>点击添加</text>
</view>
</view>
<CheckLogin @callback="loginCallback()" ></CheckLogin>
<view class="carousel_wrapper">
<swiper v-if="carouse_list.length > 0" class="swiper_wrapper" circular :autoplay="true" :duration="500">
<swiper-item v-for="(i,k) in carouse_list" :key="k">
<view @click="actionClick(i)" class="swiper_item_wrapper">
<image mode="aspectFill" :src="$image(i.image)"></image>
</view>
</swiper-item>
</swiper>
<view v-else class="cover_image_wrapper">
<image v-if="!!cover_image" mode="aspectFill" :src="$image(cover_image)"></image>
</view>
</view>
<view class="hospital_info_wrapper">
<view class="hospital_info_box_wrapper">
<view @click="mapClick()" class="hospital_info_logo_wrapper">
<image mode="aspectFill" :src="$image(hospital_info.logo)"></image>
</view>
<view @click="mapClick()" class="hospital_info_info_wrapper">
<view class="hospital_info_info_name_wrapper">{{ hospital_info.name }}</view>
<view class="hospital_info_info_address_wrapper">
<view class="hospital_info_info_address_icon_wrapper">
<image :src="$image('/storage/assets/mp/home/医院地址@2x.png')"></image>
</view>
<view class="hospital_info_info_address_text_wrapper">
{{ hospital_info.address }}
</view>
</view>
</view>
<view @click="changeHospitalClick()" v-if="hospital_count > 1" class="hospital_info_button_wrapper">
<view class="hospital_info_button_icon_wrapper">
<image :src="$image('/storage/assets/mp/home/切换医院@2x.png')"></image>
</view>
<view class="hospital_info_button_text_wrapper">切换医院</view>
</view>
</view>
</view>
<view class="button_wrapper">
<view v-for="(i,k) in button_list" :key="k">
<view @click="actionClick(i)" class="button_item_wrapper">
<view class="button_item_icon_wrapper">
<image mode="aspectFill" :src="$image(i.image)"></image>
</view>
<view class="button_item_info_wrapper">
<view class="button_item_info_name_wrapper">{{ i.name }}</view>
<view v-if="!!i.desc" class="button_item_info_desc_wrapper">{{ i.desc }}</view>
</view>
</view>
<view v-if="k!==button_list.length - 1" class="button_item_line_wrapper"></view>
</view>
</view>
<view class="ad_wrapper" v-if="ad_list.length > 0">
<swiper class="ad_swiper_wrapper" circular :autoplay="true" :duration="500">
<swiper-item v-for="(i,k) in ad_list" :key="k">
<view @click="actionClick(i)" class="ad_swiper_item_wrapper">
<image mode="aspectFill" :src="$image(i.image)"></image>
</view>
</swiper-item>
</swiper>
</view>
<view class="h5_wrapper">
<view class="h5_title_wrapper">常用功能</view>
<view class="h5_list_wrapper">
<uni-grid :column="2" :showBorder="false" :square="false">
<uni-grid-item v-for="(i,k) in h5_list" :key="k">
<view @click="actionClick(i)" class="h5_item_wrapper">
<view class="h5_item_info_wrapper">
<view class="h5_item_info_name_wrapper">{{ i.name }}</view>
<view class="h5_item_info_desc_wrapper">{{ i.desc }}</view>
</view>
<view class="h5_item_icon_wrapper">
<image mode="aspectFill" :src="$image(i.image)"></image>
</view>
</view>
</uni-grid-item>
</uni-grid>
</view>
</view>
<view class="home_blank_wrapper"></view>
</view>
</template>
<style>
page {
background: #ffffff;
}
</style>
<style scoped>
.user_status_text_wrapper {
margin-left: 41rpx;
}
.user_status_text_wrapper text {
color: #F69C44;
}
.user_status_wrapper {
position: fixed;
width: 750rpx;
height: 60rpx;
background: #f2f7f7;
top: 0;
z-index: 1;
font-size: 22rpx;
font-weight: 400;
color: #019AA7;
line-height: 60rpx;
}
.h5_item_info_wrapper {
margin-left: 10rpx;
}
.h5_item_info_desc_wrapper {
font-size: 23rpx;
font-weight: 500;
color: #999A9A;
line-height: 1;
margin-top: 15rpx;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
width: 160rpx;
}
.h5_item_info_name_wrapper {
width: 160rpx;
font-size: 27rpx;
font-weight: 500;
color: #222222;
line-height: 1;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.h5_item_icon_wrapper image {
width: 131rpx;
height: 120rpx;
}
.h5_item_icon_wrapper {
position: absolute;
width: 131rpx;
height: 120rpx;
top: 0;
right: 14rpx;
}
.home_blank_wrapper {
height: 30rpx;
}
.h5_list_wrapper {
margin-top: 20rpx;
}
.h5_item_wrapper {
width: 338rpx;
height: 120rpx;
background: #F6F8F8;
border-radius: 10rpx;
margin: 10rpx auto;
position: relative;
display: flex;
align-items: center;
}
.h5_title_wrapper {
font-size: 32rpx;
font-weight: 500;
color: #222222;
line-height: 1;
margin-top: 40rpx;
margin-left: 29rpx;
}
.ad_swiper_item_wrapper image {
height: 150rpx;
width: 690rpx;
display: block;
}
.ad_swiper_item_wrapper {
height: 150rpx;
width: 690rpx;
}
.ad_wrapper {
height: 150rpx;
width: 690rpx;
margin: 30rpx auto 0;
border-radius: 10rpx;
overflow: hidden;
}
.ad_swiper_wrapper {
height: 150rpx;
width: 690rpx;
}
.button_item_line_wrapper {
width: 654rpx;
height: 1rpx;
margin: 0 auto;
background: #E8E8E8;
box-shadow: 0rpx 0rpx 0rpx 1rpx #FFFFFF;
}
.button_item_info_wrapper {
margin-left: 26rpx;
}
.button_item_info_desc_wrapper {
font-size: 23rpx;
font-weight: 500;
color: #999A9A;
line-height: 1;
margin-top: 14rpx;
}
.button_item_info_name_wrapper {
font-size: 30rpx;
font-weight: 500;
color: #222222;
line-height: 1;
}
.button_item_icon_wrapper image {
width: 70rpx;
height: 70rpx;
display: block;
}
.button_item_icon_wrapper {
width: 70rpx;
height: 70rpx;
}
.button_item_wrapper {
height: 137rpx;
width: 654rpx;
margin: 0 auto;
display: flex;
align-items: center;
}
.button_wrapper {
width: 690rpx;
background: #EEF5F5;
border-radius: 10rpx;
margin: 45rpx auto 0;
overflow: hidden;
}
.hospital_info_button_text_wrapper {
font-size: 22rpx;
font-weight: 500;
color: #FFFFFF;
line-height: 1;
margin-left: 6rpx;
}
.hospital_info_button_icon_wrapper image {
width: 20rpx;
height: 18rpx;
display: block;
}
.hospital_info_button_icon_wrapper {
width: 20rpx;
height: 18rpx;
}
.hospital_info_button_wrapper {
width: 140rpx;
height: 40rpx;
background: linear-gradient(90deg, #23D3AF, #0DC5CF);
border: 2px solid #D0EEEF;
border-radius: 20rpx;
display: flex;
align-items: center;
line-height: 40rpx;
justify-content: center;
}
.hospital_info_info_address_text_wrapper {
font-size: 22rpx;
font-weight: 500;
color: #AFB0B1;
line-height: 24rpx;
margin-left: 11rpx;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.hospital_info_info_name_wrapper {
font-size: 28rpx;
font-weight: 500;
color: #2C2C2C;
line-height: 1;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.hospital_info_info_wrapper {
margin-left: 24rpx;
width: 413rpx;
}
.hospital_info_info_address_wrapper {
display: flex;
align-items: center;
margin-top: 17rpx;
}
.hospital_info_info_address_icon_wrapper image {
width: 20rpx;
height: 24rpx;
display: block;
}
.hospital_info_info_address_icon_wrapper {
width: 20rpx;
height: 24rpx;
}
.hospital_info_logo_wrapper image {
width: 82rpx;
height: 82rpx;
display: block;
border: 6rpx;
}
.hospital_info_logo_wrapper {
width: 82rpx;
height: 82rpx;
margin-left: 12rpx;
}
.hospital_info_box_wrapper {
width: 690rpx;
height: 150rpx;
background: linear-gradient(0deg, #EBFAFB, #F9FEFE);
border: 2px solid rgba(255, 255, 255, 0.38);
box-shadow: 0rpx 4rpx 6rpx 4rpx rgba(32, 211, 179, 0.16);
border-radius: 10rpx;
position: absolute;
top: -20rpx;
display: flex;
align-items: center;
left: 0;
right: 0;
}
.hospital_info_wrapper {
height: 130rpx;
width: 690rpx;
margin: 0 auto;
position: relative;
}
.swiper_item_wrapper image {
width: 750rpx;
height: 389rpx;
display: block;
}
.swiper_wrapper {
width: 750rpx;
height: 389rpx;
}
.swiper_item_wrapper {
width: 750rpx;
height: 389rpx;
}
.cover_image_wrapper image {
width: 750rpx;
height: 389rpx;
display: block;
}
.cover_image_wrapper {
width: 750rpx;
height: 389rpx;
}
.carousel_wrapper {
width: 750rpx;
height: 389rpx;
}
</style>