<template>
|
<view class="guide-container">
|
<!-- 搜索栏 -->
|
<view class="search-bar">
|
<view class="search-box">
|
<text class="iconfont icon-search"></text>
|
<input
|
type="text"
|
v-model="searchKey"
|
placeholder="搜索科室名称、疾病名称"
|
/>
|
</view>
|
</view>
|
|
<!-- 科室分类导航 -->
|
<view class="category-section">
|
<view class="section-title">按科室查找</view>
|
<view class="category-grid">
|
<view
|
class="category-item"
|
v-for="(category, index) in categories"
|
:key="index"
|
@tap="selectCategory(category)"
|
>
|
<image :src="category.icon" mode="aspectFit" class="icon" />
|
<text class="name">{{ category.name }}</text>
|
<text class="count">{{ category.count }}个科室</text>
|
</view>
|
</view>
|
</view>
|
|
<!-- 常见病症 -->
|
<view class="disease-section">
|
<view class="section-title">常见病症</view>
|
<view class="disease-tags">
|
<view
|
class="tag"
|
v-for="(disease, index) in commonDiseases"
|
:key="index"
|
@tap="searchDisease(disease)"
|
>
|
{{ disease }}
|
</view>
|
</view>
|
</view>
|
|
<!-- 热门科室 -->
|
<view class="hot-section">
|
<view class="section-title">热门科室</view>
|
<view class="hot-list">
|
<view
|
class="hot-item"
|
v-for="(dept, index) in hotDepartments"
|
:key="index"
|
@tap="navigateToDepartment(dept)"
|
>
|
<view class="rank-num" :class="{ top: index < 3 }">{{
|
index + 1
|
}}</view>
|
<view class="info">
|
<text class="name">{{ dept.name }}</text>
|
<text class="desc">{{ dept.description }}</text>
|
</view>
|
<view class="stats">
|
<text class="count">{{ dept.appointmentCount }}人预约</text>
|
<text class="rating">{{ dept.rating }}分</text>
|
</view>
|
</view>
|
</view>
|
</view>
|
</view>
|
</template>
|
|
<script setup>
|
import { ref } from "vue";
|
|
const searchKey = ref("");
|
|
// 科室分类
|
const categories = [
|
{
|
name: "内科",
|
icon: "/static/department/internal.png",
|
count: 8,
|
departments: ["心内科", "消化内科", "呼吸内科", "神经内科"],
|
},
|
{
|
name: "外科",
|
icon: "/static/department/surgery.png",
|
count: 6,
|
departments: ["普通外科", "骨科", "神经外科"],
|
},
|
{
|
name: "儿科",
|
icon: "/static/department/pediatrics.png",
|
count: 4,
|
departments: ["儿科门诊", "儿童保健科"],
|
},
|
{
|
name: "妇产科",
|
icon: "/static/department/gynecology.png",
|
count: 3,
|
departments: ["妇科", "产科", "计划生育"],
|
},
|
{
|
name: "五官科",
|
icon: "/static/department/ent.png",
|
count: 5,
|
departments: ["耳鼻喉科", "眼科", "口腔科"],
|
},
|
{
|
name: "中医科",
|
icon: "",
|
// icon: '/static/department/tcm.png',
|
count: 4,
|
departments: ["中医内科", "针灸科", "推拿科"],
|
},
|
];
|
|
// 常见病症
|
const commonDiseases = [
|
"感冒发烧",
|
"高血压",
|
"糖尿病",
|
"颈椎病",
|
"胃炎",
|
"失眠",
|
"头痛",
|
"咳嗽",
|
];
|
|
// 热门科室
|
const hotDepartments = [
|
{
|
name: "心内科",
|
description: "心血管疾病诊治",
|
appointmentCount: 2580,
|
rating: 4.9,
|
},
|
{
|
name: "儿科门诊",
|
description: "儿童疾病诊治",
|
appointmentCount: 2145,
|
rating: 4.8,
|
},
|
{
|
name: "骨科",
|
description: "骨关节疾病诊治",
|
appointmentCount: 1980,
|
rating: 4.8,
|
},
|
{
|
name: "消化内科",
|
description: "消化系统疾病诊治",
|
appointmentCount: 1860,
|
rating: 4.7,
|
},
|
{
|
name: "妇产科",
|
description: "妇科疾病诊治",
|
appointmentCount: 1750,
|
rating: 4.7,
|
},
|
];
|
|
// 选择科室分类
|
const selectCategory = (category) => {
|
uni.navigateTo({
|
url: `/pages/department/list?category=${category.name}`,
|
});
|
};
|
|
// 搜索疾病
|
const searchDisease = (disease) => {
|
searchKey.value = disease;
|
// 执行搜索逻辑
|
};
|
|
// 跳转到科室详情
|
const navigateToDepartment = (dept) => {
|
uni.navigateTo({
|
url: `/pages/department/detail?name=${dept.name}`,
|
});
|
};
|
</script>
|
|
<style lang="scss">
|
.guide-container {
|
min-height: 100vh;
|
background: $bg-color;
|
|
.search-bar {
|
position: sticky;
|
top: 0;
|
z-index: 100;
|
background: #fff;
|
padding: 20rpx 30rpx;
|
box-shadow: $shadow-sm;
|
}
|
|
.category-section {
|
background: #fff;
|
margin: 20rpx;
|
padding: 30rpx;
|
border-radius: $radius-lg;
|
box-shadow: $shadow-sm;
|
|
.category-grid {
|
display: grid;
|
grid-template-columns: repeat(3, 1fr);
|
gap: 30rpx;
|
|
.category-item {
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
padding: 20rpx;
|
background: $bg-color;
|
border-radius: $radius-md;
|
transition: all 0.3s;
|
|
&:active {
|
transform: scale(0.95);
|
}
|
|
.icon {
|
width: 80rpx;
|
height: 80rpx;
|
margin-bottom: 16rpx;
|
}
|
|
.name {
|
font-size: 28rpx;
|
color: $text-primary;
|
font-weight: bold;
|
margin-bottom: 8rpx;
|
}
|
|
.count {
|
font-size: 22rpx;
|
color: $text-secondary;
|
}
|
}
|
}
|
}
|
|
.disease-section {
|
background: #fff;
|
margin: 20rpx;
|
padding: 30rpx;
|
border-radius: $radius-lg;
|
box-shadow: $shadow-sm;
|
|
.disease-tags {
|
display: flex;
|
flex-wrap: wrap;
|
gap: 20rpx;
|
|
.tag {
|
font-size: 26rpx;
|
color: $text-regular;
|
padding: 12rpx 24rpx;
|
background: $bg-color;
|
border-radius: $radius-xl;
|
transition: all 0.3s;
|
|
&:active {
|
transform: scale(0.95);
|
background: $primary-light;
|
color: $primary-color;
|
}
|
}
|
}
|
}
|
|
.hot-section {
|
background: #fff;
|
margin: 20rpx;
|
padding: 30rpx;
|
border-radius: $radius-lg;
|
box-shadow: $shadow-sm;
|
|
.hot-list {
|
.hot-item {
|
display: flex;
|
align-items: center;
|
padding: 20rpx 0;
|
border-bottom: 1rpx solid #eee;
|
|
&:last-child {
|
border-bottom: none;
|
}
|
|
.rank-num {
|
width: 40rpx;
|
height: 40rpx;
|
line-height: 40rpx;
|
text-align: center;
|
font-size: 24rpx;
|
color: $text-secondary;
|
margin-right: 20rpx;
|
|
&.top {
|
background: $primary-gradient;
|
color: #fff;
|
border-radius: 8rpx;
|
font-weight: bold;
|
}
|
}
|
|
.info {
|
flex: 1;
|
|
.name {
|
font-size: 28rpx;
|
color: $text-primary;
|
font-weight: bold;
|
margin-bottom: 6rpx;
|
display: block;
|
}
|
|
.desc {
|
font-size: 24rpx;
|
color: $text-secondary;
|
}
|
}
|
|
.stats {
|
text-align: right;
|
|
.count {
|
font-size: 24rpx;
|
color: $primary-color;
|
margin-bottom: 4rpx;
|
display: block;
|
}
|
|
.rating {
|
font-size: 24rpx;
|
color: $warning;
|
}
|
}
|
}
|
}
|
}
|
|
.section-title {
|
font-size: 32rpx;
|
color: $text-primary;
|
font-weight: bold;
|
margin-bottom: 20rpx;
|
display: flex;
|
align-items: center;
|
|
&::before {
|
content: "";
|
width: 6rpx;
|
height: 30rpx;
|
background: $primary-color;
|
border-radius: 3rpx;
|
margin-right: 16rpx;
|
}
|
}
|
}
|
</style>
|