183 lines
4.6 KiB
Vue
183 lines
4.6 KiB
Vue
<template>
|
||
<view class="consult-header" :class="{ 'consult-header--elder': elderMode }">
|
||
<view class="consult-header-left">
|
||
<!-- 普通模式:医生姓名和职称在同一行 -->
|
||
<view v-if="!elderMode" class="doctor-info">
|
||
<text class="doctor-name" :class="{ 'doctor-name--elder': elderMode }">{{ displayDoctorName }}</text>
|
||
<text class="doctor-title" :class="{ 'doctor-title--elder': elderMode }">{{ consult.doctorTitle }}</text>
|
||
</view>
|
||
<!-- 长辈模式:医生姓名和职称分行显示 -->
|
||
<template v-else>
|
||
<view class="doctor-info">
|
||
<text class="doctor-name" :class="{ 'doctor-name--elder': elderMode }">{{ displayDoctorName }}</text>
|
||
</view>
|
||
<view class="doctor-info" :class="{ 'doctor-info--elder': elderMode }">
|
||
<text class="doctor-title" :class="{ 'doctor-title--elder': elderMode }">{{ consult.doctorTitle }}</text>
|
||
</view>
|
||
</template>
|
||
<!-- 医院和科室信息 -->
|
||
<view class="doctor-info" :class="{ 'doctor-info--elder': elderMode }">
|
||
<text class="doctor-hos" :class="{ 'doctor-hos--elder': elderMode }">震元堂中医院</text>
|
||
<text v-if="consult.deptName" class="doctor-dept" :class="{ 'doctor-dept--elder': elderMode }">
|
||
| {{ consult.deptName }}
|
||
</text>
|
||
</view>
|
||
</view>
|
||
<view class="summary-btn" :class="{ 'summary-btn--elder': elderMode }" @click.stop="viewSummary">病情概要</view>
|
||
</view>
|
||
</template>
|
||
<script setup>
|
||
import { ref, onMounted, onUnmounted, computed } from 'vue';
|
||
|
||
const props = defineProps({
|
||
consult: {
|
||
type: Object,
|
||
default: () => ({})
|
||
}
|
||
});
|
||
|
||
// 规范化医生展示名称,避免显示类似 30127 这样的纯工号
|
||
const displayDoctorName = computed(() => {
|
||
const raw = (props.consult && props.consult.doctorName) || "";
|
||
const name = String(raw).trim();
|
||
if (!name) return "互联网医院医生";
|
||
// 纯数字视为工号,使用友好文案替代
|
||
if (/^\d+$/.test(name)) return "互联网医院医生";
|
||
return name;
|
||
});
|
||
|
||
// 长辈模式状态
|
||
const elderMode = ref(false);
|
||
|
||
// 处理长辈模式变化
|
||
const handleElderModeChange = () => {
|
||
try {
|
||
const storedElderMode = uni.getStorageSync('elderMode');
|
||
elderMode.value = storedElderMode === 'true' || storedElderMode === true;
|
||
|
||
// 同步到全局数据
|
||
const app = getApp();
|
||
if (app && app.globalData) {
|
||
app.globalData.elderMode = elderMode.value;
|
||
}
|
||
} catch (error) {
|
||
console.error('获取长辈模式状态失败:', error);
|
||
elderMode.value = false;
|
||
}
|
||
};
|
||
|
||
onMounted(() => {
|
||
handleElderModeChange();
|
||
// 监听长辈模式变化事件
|
||
uni.$on('elderModeChanged', handleElderModeChange);
|
||
});
|
||
|
||
onUnmounted(() => {
|
||
// 移除事件监听
|
||
uni.$off('elderModeChanged', handleElderModeChange);
|
||
});
|
||
|
||
const emits = defineEmits(['viewSummary']);
|
||
|
||
function viewSummary() {
|
||
emits('viewSummary');
|
||
}
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
.consult-header {
|
||
display: flex;
|
||
flex-direction: initial;
|
||
align-items: center;
|
||
padding: 24rpx 30rpx;
|
||
background: #fff;
|
||
|
||
@at-root &-left {
|
||
flex: 1;
|
||
min-width: 0;
|
||
overflow: hidden;
|
||
margin-right: 20rpx;
|
||
}
|
||
|
||
// 长辈模式样式
|
||
@at-root &.consult-header--elder {
|
||
padding: 32rpx 36rpx; // 增加内边距
|
||
}
|
||
|
||
.summary-btn {
|
||
width: 160rpx;
|
||
height: 46rpx;
|
||
line-height: 46rpx;
|
||
text-align: center;
|
||
color: $theme-brown-primary;
|
||
font-size: 26rpx;
|
||
border-radius: 32rpx;
|
||
border: 1px solid $theme-brown-primary;
|
||
|
||
// 长辈模式样式
|
||
@at-root &.summary-btn--elder {
|
||
width: 200rpx; // 按钮稍微放大
|
||
height: 60rpx;
|
||
line-height: 60rpx;
|
||
font-size: 32rpx; // 字体放大 (26rpx → 32rpx)
|
||
border-radius: 40rpx;
|
||
}
|
||
}
|
||
|
||
.doctor-name {
|
||
font-size: 32rpx;
|
||
font-weight: bold;
|
||
|
||
// 长辈模式样式
|
||
@at-root &.doctor-name--elder {
|
||
font-size: 42rpx; // 字体放大 (32rpx → 42rpx)
|
||
}
|
||
}
|
||
|
||
.doctor-info {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-wrap: nowrap;
|
||
margin-bottom: 4rpx;
|
||
|
||
// 长辈模式样式
|
||
@at-root &.doctor-info--elder {
|
||
margin-bottom: 8rpx; // 长辈模式下增加行间距
|
||
}
|
||
}
|
||
|
||
.doctor-title {
|
||
margin-left: 10rpx;
|
||
color: #999;
|
||
|
||
// 长辈模式样式
|
||
@at-root &.doctor-title--elder {
|
||
margin-left: 0; // 长辈模式下取消左边距,因为独立成行
|
||
font-size: 30rpx; // 增加字体大小
|
||
}
|
||
}
|
||
|
||
.doctor-hos {
|
||
font-size: 30rpx;
|
||
font-weight: 600;
|
||
|
||
// 长辈模式样式
|
||
@at-root &.doctor-hos--elder {
|
||
font-size: 38rpx; // 字体放大 (30rpx → 38rpx)
|
||
}
|
||
}
|
||
|
||
.doctor-dept {
|
||
font-size: 28rpx;
|
||
margin-left: 10rpx;
|
||
color: #999;
|
||
white-space: nowrap;
|
||
|
||
// 长辈模式样式
|
||
@at-root &.doctor-dept--elder {
|
||
font-size: 36rpx; // 字体放大 (28rpx → 36rpx)
|
||
margin-left: 14rpx;
|
||
}
|
||
}
|
||
}
|
||
</style>
|