调整室外导览面板视觉规范

This commit is contained in:
lyf
2026-06-29 00:37:56 +08:00
parent ba4decb5b5
commit f4de24fad8

View File

@@ -14,7 +14,7 @@
<view v-if="isCollapsed" class="panel-collapsed" @tap="expandPanel"> <view v-if="isCollapsed" class="panel-collapsed" @tap="expandPanel">
<view class="panel-collapsed-copy"> <view class="panel-collapsed-copy">
<text class="panel-title">室外导</text> <text class="panel-title">室外导</text>
<text class="panel-summary">{{ collapsedSummary }}</text> <text class="panel-summary">{{ collapsedSummary }}</text>
</view> </view>
<view class="panel-expand"> <view class="panel-expand">
@@ -25,7 +25,7 @@
<template v-else> <template v-else>
<view class="panel-header"> <view class="panel-header">
<view class="panel-title-group"> <view class="panel-title-group">
<text class="panel-title">室外导</text> <text class="panel-title">室外导</text>
<text v-if="routeSummary" class="panel-summary">{{ routeSummary }}</text> <text v-if="routeSummary" class="panel-summary">{{ routeSummary }}</text>
</view> </view>
<view class="panel-actions"> <view class="panel-actions">
@@ -46,7 +46,9 @@
:class="{ active: effectiveStartMode === 'gps' }" :class="{ active: effectiveStartMode === 'gps' }"
@tap="handleGpsStart" @tap="handleGpsStart"
> >
<text class="start-btn-icon">📍</text> <view class="start-btn-icon icon-gps">
<view class="icon-gps-dot"></view>
</view>
<text class="start-btn-text">GPS定位</text> <text class="start-btn-text">GPS定位</text>
</view> </view>
<view <view
@@ -54,7 +56,9 @@
:class="{ active: effectiveStartMode === 'manual' }" :class="{ active: effectiveStartMode === 'manual' }"
@tap="handleManualStart" @tap="handleManualStart"
> >
<text class="start-btn-icon"></text> <view class="start-btn-icon icon-manual">
<view class="icon-manual-line"></view>
</view>
<text class="start-btn-text">手动选择</text> <text class="start-btn-text">手动选择</text>
</view> </view>
</view> </view>
@@ -102,10 +106,10 @@
v-for="mode in travelModes" v-for="mode in travelModes"
:key="mode.type" :key="mode.type"
class="travel-mode-item" class="travel-mode-item"
:class="{ active: selectedTravelMode === mode.type }" :class="[{ active: selectedTravelMode === mode.type }, `mode-${mode.type}`]"
@tap="handleTravelModeChange(mode.type)" @tap="handleTravelModeChange(mode.type)"
> >
<text class="travel-mode-icon">{{ mode.icon }}</text> <view class="travel-mode-icon"></view>
<text class="travel-mode-label">{{ mode.label }}</text> <text class="travel-mode-label">{{ mode.label }}</text>
</view> </view>
</view> </view>
@@ -240,7 +244,7 @@ const collapsedSummary = computed(() => {
if (effectiveStartMode.value === 'gps') { if (effectiveStartMode.value === 'gps') {
return '使用 GPS 定位' return '使用 GPS 定位'
} }
return '室外导航到博物馆' return '室外导览到馆'
}) })
const formatStartPointName = () => { const formatStartPointName = () => {
@@ -405,29 +409,29 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
<style scoped lang="scss"> <style scoped lang="scss">
.outdoor-nav-panel { .outdoor-nav-panel {
position: absolute; position: absolute;
left: 12px; left: 15px;
right: 12px; right: 15px;
bottom: calc(env(safe-area-inset-bottom) + 30px); bottom: calc(env(safe-area-inset-bottom) + 24px);
padding: 10px 14px 14px; padding: 12px 15px 15px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
box-sizing: border-box; box-sizing: border-box;
background: rgba(255, 255, 255, 0.97); background: var(--museum-bg-surface);
border: 1px solid #e5e6de; border: 1px solid #d9d9d9;
border-radius: 8px; border-radius: var(--radius-card);
box-shadow: 0 10px 24px rgba(36, 49, 42, 0.12); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
z-index: 1003; z-index: 1003;
} }
.outdoor-nav-panel.collapsed { .outdoor-nav-panel.collapsed {
padding: 8px 10px 10px; padding: 10px 12px 12px;
} }
.panel-handle { .panel-handle {
width: 38px; width: 38px;
height: 4px; height: 4px;
margin: 0 auto 10px; margin: 0 auto 12px;
background: #d8dbd2; background: #d9d9d9;
border-radius: 999px; border-radius: 999px;
} }
@@ -449,12 +453,12 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
.panel-expand { .panel-expand {
flex: 0 0 auto; flex: 0 0 auto;
height: 30px; height: 30px;
padding: 0 10px; padding: 0 12px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
background: #151713; background: #000000;
border-radius: 8px; border-radius: var(--radius-button);
} }
.panel-expand-text { .panel-expand-text {
@@ -479,16 +483,16 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
} }
.panel-title { .panel-title {
font-size: 17px; font-size: 18px;
line-height: 24px; line-height: 25px;
font-weight: 700; font-weight: 500;
color: #151713; color: var(--museum-text-primary);
} }
.panel-summary { .panel-summary {
font-size: 12px; font-size: 12px;
line-height: 18px; line-height: 18px;
color: #696962; color: var(--museum-text-tertiary);
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -508,20 +512,20 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
box-sizing: border-box; box-sizing: border-box;
background: #f5f7f2; background: var(--museum-bg-surface);
border: 1px solid #e4e5df; border: 1px solid #d9d9d9;
border-radius: 8px; border-radius: var(--radius-button);
} }
.panel-light-action-text { .panel-light-action-text {
font-size: 12px; font-size: 12px;
line-height: 16px; line-height: 16px;
font-weight: 500; font-weight: 500;
color: #545861; color: var(--museum-text-secondary);
} }
.start-point-section { .start-point-section {
margin-top: 14px; margin-top: 16px;
} }
.section-label { .section-label {
@@ -532,12 +536,12 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
font-size: 13px; font-size: 13px;
line-height: 18px; line-height: 18px;
font-weight: 600; font-weight: 600;
color: #545861; color: var(--museum-text-secondary);
} }
.start-point-buttons { .start-point-buttons {
display: flex; display: flex;
gap: 8px; gap: 10px;
} }
.start-btn { .start-btn {
@@ -548,26 +552,97 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
justify-content: center; justify-content: center;
gap: 6px; gap: 6px;
box-sizing: border-box; box-sizing: border-box;
background: #f6f7f4; background: var(--museum-bg-surface);
border: 1px solid #e5e6de; border: 1px solid #d9d9d9;
border-radius: 8px; border-radius: var(--radius-button);
transition: all 0.2s; transition: all 0.2s;
} }
.start-btn.active { .start-btn.active {
background: #151713; background: #000000;
border-color: #151713; border-color: #000000;
} }
.start-btn-icon { .start-btn-icon {
font-size: 16px; position: relative;
width: 18px;
height: 18px;
flex-shrink: 0;
color: var(--museum-text-primary);
box-sizing: border-box;
}
.start-btn.active .start-btn-icon {
color: var(--museum-accent);
}
.icon-gps {
border: 1.8px solid currentColor;
border-radius: 50%;
}
.icon-gps::before,
.icon-gps::after {
content: '';
position: absolute;
background: currentColor;
}
.icon-gps::before {
left: 8px;
top: -4px;
width: 1.8px;
height: 24px;
}
.icon-gps::after {
left: -4px;
top: 8px;
width: 24px;
height: 1.8px;
}
.icon-gps-dot {
position: absolute;
left: 5px;
top: 5px;
width: 6px;
height: 6px;
background: currentColor;
border-radius: 50%;
}
.icon-manual {
border-left: 2px solid currentColor;
border-bottom: 2px solid currentColor;
transform: rotate(-45deg);
}
.icon-manual::before {
content: '';
position: absolute;
right: 0;
bottom: -2px;
width: 7px;
height: 7px;
border-right: 2px solid currentColor;
border-bottom: 2px solid currentColor;
}
.icon-manual-line {
position: absolute;
left: 3px;
bottom: 5px;
width: 15px;
height: 2px;
background: currentColor;
} }
.start-btn-text { .start-btn-text {
font-size: 14px; font-size: 14px;
line-height: 20px; line-height: 20px;
font-weight: 500; font-weight: 500;
color: #151713; color: var(--museum-text-primary);
} }
.start-btn.active .start-btn-text { .start-btn.active .start-btn-text {
@@ -577,15 +652,15 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
.start-hint { .start-hint {
margin-top: 8px; margin-top: 8px;
padding: 10px 12px; padding: 10px 12px;
background: #f9fafb; background: var(--museum-bg-light);
border: 1px solid #ecede7; border: 1px solid var(--museum-border-light);
border-radius: 6px; border-radius: var(--radius-button);
} }
.start-hint-text { .start-hint-text {
font-size: 12px; font-size: 12px;
line-height: 17px; line-height: 17px;
color: #8b8b84; color: var(--museum-text-disabled);
} }
.start-search-container { .start-search-container {
@@ -603,9 +678,10 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
height: 40px; height: 40px;
padding: 0 12px; padding: 0 12px;
font-size: 14px; font-size: 14px;
background: #ffffff; color: var(--museum-text-primary);
border: 1px solid #e4e5df; background: var(--museum-bg-cream);
border-radius: 8px; border: 1px solid #adb0b4;
border-radius: var(--radius-button);
box-sizing: border-box; box-sizing: border-box;
} }
@@ -619,20 +695,20 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
.loading-text { .loading-text {
font-size: 12px; font-size: 12px;
color: #8b8b84; color: var(--museum-text-disabled);
} }
.start-search-results { .start-search-results {
margin-top: 8px; margin-top: 8px;
background: #ffffff; background: var(--museum-bg-surface);
border: 1px solid #e4e5df; border: 1px solid #d9d9d9;
border-radius: 8px; border-radius: var(--radius-button);
overflow: hidden; overflow: hidden;
} }
.search-result-item { .search-result-item {
padding: 12px; padding: 12px;
border-bottom: 1px solid #f0f1ee; border-bottom: 1px solid #d9d9d9;
cursor: pointer; cursor: pointer;
} }
@@ -644,14 +720,14 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
display: block; display: block;
font-size: 14px; font-size: 14px;
font-weight: 500; font-weight: 500;
color: #151713; color: var(--museum-text-primary);
margin-bottom: 4px; margin-bottom: 4px;
} }
.result-address { .result-address {
display: block; display: block;
font-size: 12px; font-size: 12px;
color: #8b8b84; color: var(--museum-text-disabled);
} }
.start-point-display { .start-point-display {
@@ -661,9 +737,9 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 10px; gap: 10px;
background: #f6f7f4; background: var(--museum-bg-light);
border: 1px solid #e5e6de; border: 1px solid #d9d9d9;
border-radius: 8px; border-radius: var(--radius-button);
} }
.point-dot { .point-dot {
@@ -677,7 +753,7 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
} }
.point-dot.start { .point-dot.start {
background: #1fbf6b; background: #2c854f;
} }
.point-name { .point-name {
@@ -685,7 +761,7 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
font-size: 14px; font-size: 14px;
line-height: 20px; line-height: 20px;
font-weight: 600; font-weight: 600;
color: #1f2329; color: var(--museum-text-primary);
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -698,27 +774,27 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
background: #ffffff; background: var(--museum-bg-surface);
border: 1px solid #d7dad3; border: 1px solid #d9d9d9;
border-radius: 6px; border-radius: var(--radius-button);
} }
.point-change-text { .point-change-text {
font-size: 12px; font-size: 12px;
line-height: 16px; line-height: 16px;
font-weight: 500; font-weight: 500;
color: #545861; color: var(--museum-text-secondary);
} }
.travel-mode-section { .travel-mode-section {
margin-top: 14px; margin-top: 16px;
} }
.travel-mode-list { .travel-mode-list {
margin-top: 8px; margin-top: 8px;
display: grid; display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 8px; gap: 10px;
} }
.travel-mode-item { .travel-mode-item {
@@ -729,26 +805,97 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
justify-content: center; justify-content: center;
gap: 4px; gap: 4px;
box-sizing: border-box; box-sizing: border-box;
background: #f6f7f4; background: var(--museum-bg-surface);
border: 1px solid #e5e6de; border: 1px solid #d9d9d9;
border-radius: 8px; border-radius: var(--radius-button);
transition: all 0.2s; transition: all 0.2s;
} }
.travel-mode-item.active { .travel-mode-item.active {
background: #151713; background: #000000;
border-color: #151713; border-color: #000000;
} }
.travel-mode-icon { .travel-mode-icon {
font-size: 18px; position: relative;
width: 22px;
height: 18px;
color: var(--museum-text-primary);
box-sizing: border-box;
}
.travel-mode-item.active .travel-mode-icon {
color: var(--museum-accent);
}
.mode-walking .travel-mode-icon::before {
content: '';
position: absolute;
left: 8px;
top: 0;
width: 6px;
height: 6px;
background: currentColor;
border-radius: 50%;
}
.mode-walking .travel-mode-icon::after {
content: '';
position: absolute;
left: 6px;
top: 7px;
width: 10px;
height: 10px;
border-left: 2px solid currentColor;
border-bottom: 2px solid currentColor;
transform: skewX(-18deg);
}
.mode-driving .travel-mode-icon {
border: 2px solid currentColor;
border-radius: 4px 4px 3px 3px;
}
.mode-driving .travel-mode-icon::before,
.mode-driving .travel-mode-icon::after {
content: '';
position: absolute;
bottom: -5px;
width: 5px;
height: 5px;
background: currentColor;
border-radius: 50%;
}
.mode-driving .travel-mode-icon::before {
left: 2px;
}
.mode-driving .travel-mode-icon::after {
right: 2px;
}
.mode-transit .travel-mode-icon {
border: 2px solid currentColor;
border-radius: 3px;
}
.mode-transit .travel-mode-icon::before {
content: '';
position: absolute;
left: 4px;
right: 4px;
top: 4px;
height: 5px;
border-top: 2px solid currentColor;
border-bottom: 2px solid currentColor;
} }
.travel-mode-label { .travel-mode-label {
font-size: 12px; font-size: 12px;
line-height: 16px; line-height: 16px;
font-weight: 500; font-weight: 500;
color: #151713; color: var(--museum-text-primary);
} }
.travel-mode-item.active .travel-mode-label { .travel-mode-item.active .travel-mode-label {
@@ -763,11 +910,11 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
.panel-status-text { .panel-status-text {
font-size: 12px; font-size: 12px;
line-height: 18px; line-height: 18px;
color: #696962; color: var(--museum-text-tertiary);
} }
.panel-status-text.error { .panel-status-text.error {
color: #b44b42; color: #e73333;
} }
.action-buttons { .action-buttons {
@@ -782,24 +929,25 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
border-radius: 8px; border-radius: var(--radius-button);
transition: all 0.2s; transition: all 0.2s;
} }
.nav-btn.primary { .nav-btn.primary {
flex: 2; flex: 2;
background: #151713; background: #000000;
} }
.nav-btn.secondary { .nav-btn.secondary {
flex: 1; flex: 1;
background: #f6f7f4; background: var(--museum-bg-surface);
border: 1px solid #e5e6de; border: 1px solid #000000;
} }
.nav-btn.disabled { .nav-btn.disabled {
background: #d8dbd2; background: #000000;
border-color: #d8dbd2; border-color: #000000;
opacity: 0.45;
} }
.nav-btn-text { .nav-btn-text {
@@ -810,11 +958,11 @@ const handlePanelMouseEnd = (event: MouseEvent) => {
} }
.nav-btn.secondary .nav-btn-text { .nav-btn.secondary .nav-btn-text {
color: #545861; color: var(--museum-text-primary);
} }
.nav-btn.disabled .nav-btn-text { .nav-btn.disabled .nav-btn-text {
color: #8b8b84; color: var(--museum-accent);
} }
.manual-select-hint { .manual-select-hint {