refactor(ui): 更新强制预设组件布局和样式
- 重新格式化 HTML 属性和 JavaScript 代码以保持一致性 - 将紧急基础属性卡移至组中的第一个位置 - 为基础属性标签添加图标并调整 flex 布局 - 更新样式中属性卡宽度、间距和图标位置 - 注释掉未使用的属性图标 CSS 属性
This commit is contained in:
parent
0471e92160
commit
ff7479bbb1
@ -4,9 +4,14 @@
|
|||||||
<div class="custom-dropdown" v-click-outside="closeDropdown">
|
<div class="custom-dropdown" v-click-outside="closeDropdown">
|
||||||
<!-- 触发器 -->
|
<!-- 触发器 -->
|
||||||
<div class="dropdown-trigger" @click="toggleDropdown">
|
<div class="dropdown-trigger" @click="toggleDropdown">
|
||||||
<span class="trigger-text">距离灾害点{{ forcePreset.searchRadius }}km范围内</span>
|
<span class="trigger-text"
|
||||||
|
>距离灾害点{{ forcePreset.searchRadius }}km范围内</span
|
||||||
|
>
|
||||||
<div class="trigger-icon" :class="{ 'is-open': isDropdownOpen }">
|
<div class="trigger-icon" :class="{ 'is-open': isDropdownOpen }">
|
||||||
<img src="../../assets/images/SketchPng8063f445fba047c290a9620343b62ea51d767b8cdcd86769502b5b160998aacc.png" alt="dropdown" />
|
<img
|
||||||
|
src="../../assets/images/SketchPng8063f445fba047c290a9620343b62ea51d767b8cdcd86769502b5b160998aacc.png"
|
||||||
|
alt="dropdown"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -21,10 +26,29 @@
|
|||||||
@click="selectOption(option.value)"
|
@click="selectOption(option.value)"
|
||||||
>
|
>
|
||||||
<span class="item-text">{{ option.label }}</span>
|
<span class="item-text">{{ option.label }}</span>
|
||||||
<div v-if="forcePreset.searchRadius === option.value" class="item-icon">
|
<div
|
||||||
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
v-if="forcePreset.searchRadius === option.value"
|
||||||
<circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="2"/>
|
class="item-icon"
|
||||||
<path d="M8 12L11 15L16 9" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
>
|
||||||
|
<svg
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
>
|
||||||
|
<circle
|
||||||
|
cx="12"
|
||||||
|
cy="12"
|
||||||
|
r="10"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M8 12L11 15L16 9"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -37,6 +61,22 @@
|
|||||||
|
|
||||||
<div class="summary-stats">
|
<div class="summary-stats">
|
||||||
<div class="stat-group">
|
<div class="stat-group">
|
||||||
|
<div class="stat-card stat-card--base">
|
||||||
|
<span class="stat-label flexBox"
|
||||||
|
>应急基地
|
||||||
|
|
||||||
|
<img
|
||||||
|
src="../../assets/images/SketchPng157040b93d0288f48b67022319d8789e5ccded19d94fa14634044ed62a722b1c.png"
|
||||||
|
alt="base"
|
||||||
|
class="stat-icon"
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<div class="stat-value-wrapper">
|
||||||
|
<span class="stat-value">{{ forcePreset.bases }}</span>
|
||||||
|
<span class="stat-unit">处</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="stat-card stat-card--equipment">
|
<div class="stat-card stat-card--equipment">
|
||||||
<span class="stat-label">应急装备</span>
|
<span class="stat-label">应急装备</span>
|
||||||
<div class="stat-value-wrapper">
|
<div class="stat-value-wrapper">
|
||||||
@ -45,15 +85,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stat-card stat-card--base">
|
|
||||||
<span class="stat-label">应急基地</span>
|
|
||||||
<div class="stat-value-wrapper">
|
|
||||||
<span class="stat-value">{{ forcePreset.bases }}</span>
|
|
||||||
<span class="stat-unit">处</span>
|
|
||||||
</div>
|
|
||||||
<!-- <img src="../../assets/images/SketchPng157040b93d0288f48b67022319d8789e5ccded19d94fa14634044ed62a722b1c.png" alt="base" class="stat-icon" /> -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="stat-card stat-card--personnel">
|
<div class="stat-card stat-card--personnel">
|
||||||
<span class="stat-label">应急人员</span>
|
<span class="stat-label">应急人员</span>
|
||||||
<div class="stat-value-wrapper">
|
<div class="stat-value-wrapper">
|
||||||
@ -69,10 +100,16 @@
|
|||||||
:key="station.id"
|
:key="station.id"
|
||||||
class="station-item"
|
class="station-item"
|
||||||
>
|
>
|
||||||
<img src="../../assets/images/路线icon.png" alt="station" class="station-icon" />
|
<img
|
||||||
|
src="../../assets/images/路线icon.png"
|
||||||
|
alt="station"
|
||||||
|
class="station-icon"
|
||||||
|
/>
|
||||||
<div class="station-info">
|
<div class="station-info">
|
||||||
<span class="station-name">{{ station.name }}</span>
|
<span class="station-name">{{ station.name }}</span>
|
||||||
<span class="station-distance">距离灾害点{{ station.distance }}公里</span>
|
<span class="station-distance"
|
||||||
|
>距离灾害点{{ station.distance }}公里</span
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -82,34 +119,34 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, inject } from 'vue'
|
import { ref, inject } from "vue";
|
||||||
|
|
||||||
const { forcePreset } = inject('disasterData')
|
const { forcePreset } = inject("disasterData");
|
||||||
const onDistanceChange = inject('onDistanceChange')
|
const onDistanceChange = inject("onDistanceChange");
|
||||||
|
|
||||||
// 下拉框状态
|
// 下拉框状态
|
||||||
const isDropdownOpen = ref(false)
|
const isDropdownOpen = ref(false);
|
||||||
|
|
||||||
// 距离选项
|
// 距离选项
|
||||||
const distanceOptions = [
|
const distanceOptions = [
|
||||||
{ value: 10, label: '距离灾害点10km范围内' },
|
// { value: 10, label: "距离灾害点10km范围内" },
|
||||||
{ value: 30, label: '距离灾害点30km范围内' },
|
{ value: 30, label: "距离灾害点30km范围内" },
|
||||||
{ value: 50, label: '距离灾害点50km范围内' }
|
{ value: 50, label: "距离灾害点50km范围内" },
|
||||||
]
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 切换下拉框显示/隐藏
|
* 切换下拉框显示/隐藏
|
||||||
*/
|
*/
|
||||||
const toggleDropdown = () => {
|
const toggleDropdown = () => {
|
||||||
isDropdownOpen.value = !isDropdownOpen.value
|
isDropdownOpen.value = !isDropdownOpen.value;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关闭下拉框
|
* 关闭下拉框
|
||||||
*/
|
*/
|
||||||
const closeDropdown = () => {
|
const closeDropdown = () => {
|
||||||
isDropdownOpen.value = false
|
isDropdownOpen.value = false;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 选择选项
|
* 选择选项
|
||||||
@ -117,30 +154,30 @@ const closeDropdown = () => {
|
|||||||
*/
|
*/
|
||||||
const selectOption = (value) => {
|
const selectOption = (value) => {
|
||||||
if (onDistanceChange) {
|
if (onDistanceChange) {
|
||||||
onDistanceChange(value)
|
onDistanceChange(value);
|
||||||
}
|
}
|
||||||
closeDropdown()
|
closeDropdown();
|
||||||
}
|
};
|
||||||
|
|
||||||
// 点击外部关闭下拉框的指令
|
// 点击外部关闭下拉框的指令
|
||||||
const vClickOutside = {
|
const vClickOutside = {
|
||||||
mounted(el, binding) {
|
mounted(el, binding) {
|
||||||
el.clickOutsideEvent = (event) => {
|
el.clickOutsideEvent = (event) => {
|
||||||
if (!(el === event.target || el.contains(event.target))) {
|
if (!(el === event.target || el.contains(event.target))) {
|
||||||
binding.value()
|
binding.value();
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
document.addEventListener('click', el.clickOutsideEvent)
|
document.addEventListener("click", el.clickOutsideEvent);
|
||||||
},
|
},
|
||||||
unmounted(el) {
|
unmounted(el) {
|
||||||
document.removeEventListener('click', el.clickOutsideEvent)
|
document.removeEventListener("click", el.clickOutsideEvent);
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@use '@/styles/mixins.scss' as *;
|
@use "@/styles/mixins.scss" as *;
|
||||||
@use '../../assets/styles/common.scss' as *;
|
@use "../../assets/styles/common.scss" as *;
|
||||||
|
|
||||||
.force-preset {
|
.force-preset {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@ -286,7 +323,7 @@ const vClickOutside = {
|
|||||||
.stat-group {
|
.stat-group {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
gap: vw(32);
|
gap: vw(22);
|
||||||
|
|
||||||
.stat-card {
|
.stat-card {
|
||||||
// flex: 1;
|
// flex: 1;
|
||||||
@ -298,9 +335,10 @@ const vClickOutside = {
|
|||||||
padding: vh(12) vw(12) vh(30);
|
padding: vh(12) vw(12) vh(30);
|
||||||
border-radius: vw(6);
|
border-radius: vw(6);
|
||||||
position: relative;
|
position: relative;
|
||||||
background: url('../../assets/images/完成里程.png') no-repeat center bottom;
|
background: url("../../assets/images/完成里程.png") no-repeat center
|
||||||
|
bottom;
|
||||||
// background-size: 100% 100%;
|
// background-size: 100% 100%;
|
||||||
width: vw(84);
|
width: vw(104);
|
||||||
|
|
||||||
.stat-label {
|
.stat-label {
|
||||||
color: var(--text-white);
|
color: var(--text-white);
|
||||||
@ -308,6 +346,11 @@ const vClickOutside = {
|
|||||||
font-family: SourceHanSansCN-Medium, sans-serif;
|
font-family: SourceHanSansCN-Medium, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flexBox{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
.stat-value-wrapper {
|
.stat-value-wrapper {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
@ -328,12 +371,12 @@ const vClickOutside = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.stat-icon {
|
.stat-icon {
|
||||||
position: absolute;
|
// position: absolute;
|
||||||
right: vw(8);
|
// right: vw(8);
|
||||||
bottom: vh(8);
|
// bottom: vh(8);
|
||||||
width: vw(24);
|
width: vw(12);
|
||||||
height: vh(24);
|
height: vw(10);
|
||||||
opacity: 0.5;
|
// opacity: 0.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -361,7 +404,8 @@ const vClickOutside = {
|
|||||||
gap: vw(12);
|
gap: vw(12);
|
||||||
padding: vh(0) vw(12);
|
padding: vh(0) vw(12);
|
||||||
// background: rgba(20, 53, 118, 0.3);
|
// background: rgba(20, 53, 118, 0.3);
|
||||||
background: url('../../assets/images/文本线条框.png') no-repeat center center;
|
background: url("../../assets/images/文本线条框.png") no-repeat center
|
||||||
|
center;
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
border-radius: vw(6);
|
border-radius: vw(6);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user