318 lines
6.1 KiB
Vue
318 lines
6.1 KiB
Vue
<template>
|
||
<view class="container">
|
||
<!-- 轮播图 -->
|
||
<swiper class="swiper-container" autoplay circular indicator-dots>
|
||
<swiper-item v-for="(item, index) in swiperList" :key="index">
|
||
<image :src="item.image" mode="aspectFill" class="swiper-image"></image>
|
||
</swiper-item>
|
||
</swiper>
|
||
<!-- 用户信息栏 -->
|
||
<!-- <view class="user-card">
|
||
<view class="user-info">
|
||
<view class="user-info-left">
|
||
<image class="avatar" src="/static/images/user.png"></image>
|
||
</view>
|
||
<text class="name">{{ currentPatient.name }}</text>
|
||
<text class="switch" @click="switchPatient">切换就诊人 ></text>
|
||
</view>
|
||
<text class="patient-id">就诊号:{{ currentPatient.id }}</text>
|
||
</view> -->
|
||
<view class="user-card">
|
||
<view class="user-info-left">
|
||
<image class="avatar" src="/static/images/user.png"></image>
|
||
<text class="name">{{ currentPatient.name }}</text>
|
||
<text class="switch-patient" @click="switchPatient">切换就诊人 ></text>
|
||
</view>
|
||
<text class="patient-id">就诊号:{{ currentPatient.id }}</text>
|
||
</view>
|
||
|
||
<!-- 功能宫格区域 -->
|
||
<scroll-view scroll-y class="main-content">
|
||
<view class="grid-container">
|
||
<view class="section-title">医院服务</view>
|
||
<view class="grid-row">
|
||
<view v-for="(item, index) in firstRow" :key="index" class="grid-item"
|
||
@click="handleFunction(item)">
|
||
<image class="icon" :src="item.icon" mode="aspectFit" />
|
||
<text class="label">{{ item.label }}</text>
|
||
</view>
|
||
</view>
|
||
<view class="grid-row">
|
||
<view v-for="(item, index) in secondRow" :key="index" class="grid-item"
|
||
@click="handleFunction(item)">
|
||
<image class="icon" :src="item.icon" mode="aspectFit" />
|
||
<text class="label">{{ item.label }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="section">
|
||
<view class="service-grid">
|
||
<view v-for="(item, index) in hospitalServices" :key="index" class="service-item">
|
||
<text>{{ item }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
|
||
</view>
|
||
</template>
|
||
<script setup>
|
||
import {
|
||
ref,
|
||
reactive
|
||
} from 'vue';
|
||
|
||
// 轮播图数据
|
||
const swiperList = ref([{
|
||
image: '/static/shouye/lunbotu1.png'
|
||
},
|
||
{
|
||
image: '/static/shouye/lunbotu2.png'
|
||
},
|
||
{
|
||
image: '/static/shouye/lunbotu1.png'
|
||
}
|
||
]);
|
||
// 当前就诊人信息
|
||
const currentPatient = reactive({
|
||
name: '张三',
|
||
id: '123456'
|
||
});
|
||
|
||
|
||
// 功能配置(示例数据)
|
||
const firstRow = ref([{
|
||
label: '健康码',
|
||
icon: '/static/icons/health-code.png',
|
||
path: '/pages/health-code'
|
||
},
|
||
{
|
||
label: '预约挂号',
|
||
icon: '/static/icons/appointment.png',
|
||
path: '/pages/appointment'
|
||
},
|
||
{
|
||
label: '当日挂号',
|
||
icon: '/static/icons/today-reg.png',
|
||
path: '/pages/today-reg'
|
||
},
|
||
{
|
||
label: '门诊缴费',
|
||
icon: '/static/icons/payment.png',
|
||
path: '/pages/payment'
|
||
}
|
||
]);
|
||
|
||
const secondRow = ref([{
|
||
label: '查看报告',
|
||
icon: '/static/icons/report.png',
|
||
path: '/pages/report'
|
||
},
|
||
{
|
||
label: '就诊记录',
|
||
icon: '/static/icons/record.png',
|
||
path: '/pages/records'
|
||
},
|
||
{
|
||
label: '科室查询',
|
||
icon: '/static/icons/department.png',
|
||
path: '/pages/department'
|
||
},
|
||
{
|
||
label: '医生查询',
|
||
icon: '/static/icons/doctor.png',
|
||
path: '/pages/doctor'
|
||
}
|
||
]);
|
||
|
||
// 医院服务
|
||
const hospitalServices = ref([
|
||
'医院介绍',
|
||
'国粹中医',
|
||
'惠民政策',
|
||
'特色疗法'
|
||
]);
|
||
|
||
// 底部导航
|
||
const tabItems = ref([{
|
||
text: '首页',
|
||
icon: '/static/tabs/home.png',
|
||
selectedIcon: '/static/tabs/home-active.png'
|
||
},
|
||
{
|
||
text: '健康卡',
|
||
icon: '/static/tabs/health-card.png',
|
||
selectedIcon: '/static/tabs/health-card-active.png'
|
||
},
|
||
{
|
||
text: '个人中心',
|
||
icon: '/static/tabs/profile.png',
|
||
selectedIcon: '/static/tabs/profile-active.png'
|
||
}
|
||
]);
|
||
|
||
const activeTab = ref(0);
|
||
|
||
// 切换就诊人
|
||
const switchPatient = () => {
|
||
uni.navigateTo({
|
||
url: '/pages/patient/switch'
|
||
});
|
||
};
|
||
|
||
// 处理功能点击
|
||
const handleFunction = (item) => {
|
||
if (item.path) {
|
||
uni.navigateTo({
|
||
url: item.path
|
||
});
|
||
}
|
||
};
|
||
|
||
// 切换底部导航
|
||
const switchTab = (index) => {
|
||
activeTab.value = index;
|
||
// 实际项目应使用路由跳转
|
||
};
|
||
</script>
|
||
<style scoped>
|
||
.swiper-container {
|
||
width: 100%;
|
||
height: 300rpx;
|
||
}
|
||
|
||
.swiper-image {
|
||
width: 100%;
|
||
height: 100%;
|
||
object-fit: cover;
|
||
border-radius: 15rpx;
|
||
}
|
||
|
||
.container {
|
||
height: 100vh;
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.user-card {
|
||
/* background: linear-gradient(135deg, #6eb4ff, #007aff); */
|
||
padding: 30rpx;
|
||
color: black;
|
||
}
|
||
|
||
.user-info {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
padding-bottom: 20rpx;
|
||
}
|
||
|
||
.name {
|
||
font-size: 36rpx;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.switch {
|
||
padding-left: 10rpx;
|
||
font-size: 28rpx;
|
||
/* text-decoration: underline; */
|
||
}
|
||
|
||
.patient-id {
|
||
font-size: 28rpx;
|
||
}
|
||
|
||
.main-content {
|
||
flex: 1;
|
||
background-color: #f5f5f5;
|
||
}
|
||
|
||
.grid-container {
|
||
padding-top: 1vh;
|
||
}
|
||
|
||
.grid-row {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
margin-bottom: 1vh;
|
||
}
|
||
|
||
.grid-item {
|
||
width: 23%;
|
||
background: white;
|
||
border-radius: 16rpx;
|
||
padding: 20rpx;
|
||
text-align: center;
|
||
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
|
||
}
|
||
|
||
.icon {
|
||
width: 80rpx;
|
||
height: 80rpx;
|
||
margin-bottom: 15rpx;
|
||
}
|
||
|
||
.label {
|
||
font-size: 24rpx;
|
||
color: #333;
|
||
}
|
||
|
||
.section {
|
||
background: white;
|
||
margin: 20rpx;
|
||
border-radius: 16rpx;
|
||
padding: 30rpx;
|
||
}
|
||
|
||
.section-title {
|
||
font-size: 32rpx;
|
||
font-weight: bold;
|
||
margin-bottom: 30rpx;
|
||
}
|
||
|
||
.service-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(2, 1fr);
|
||
gap: 20rpx;
|
||
}
|
||
|
||
.service-item {
|
||
background: #f8f8f8;
|
||
padding: 30rpx;
|
||
border-radius: 12rpx;
|
||
text-align: center;
|
||
}
|
||
|
||
.tabbar {
|
||
height: 100rpx;
|
||
background: white;
|
||
display: flex;
|
||
justify-content: space-around;
|
||
align-items: center;
|
||
box-shadow: 0 -4rpx 12rpx rgba(0, 0, 0, 0.05);
|
||
}
|
||
|
||
.tab-item {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
}
|
||
|
||
.tab-icon {
|
||
width: 48rpx;
|
||
height: 48rpx;
|
||
margin-bottom: 8rpx;
|
||
}
|
||
|
||
.active {
|
||
color: #007aff;
|
||
}
|
||
|
||
.avatar {
|
||
width: 120rpx;
|
||
height: 120rpx;
|
||
border-radius: 50%;
|
||
margin-right: 30rpx;
|
||
}
|
||
</style> |