You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
1.7 KiB
92 lines
1.7 KiB
<template> |
|
<div class="w-320 flex h-full" v-loading="loadingPoints" element-loading-text="数据加载中..."> |
|
<div class="flex-1"> |
|
<template v-if="!pointList.length"> |
|
<el-empty></el-empty> |
|
</template> |
|
<el-scrollbar class="scroll" v-else> |
|
<el-checkbox-group v-model="checkPointList" class="point-checks" @change="changePoints"> |
|
<template v-for="(item, index) in pointList" :key="item"> |
|
<el-checkbox :label="item.label" :value="item"/> |
|
</template> |
|
</el-checkbox-group> |
|
</el-scrollbar> |
|
</div> |
|
<el-divider direction="vertical" style="height: 100%;"/> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
<script setup lang="ts"> |
|
import type { IMyPoint } from "@/views/stationData/type"; |
|
|
|
const emit = defineEmits<{ |
|
'onchange-points': [IMyPoint[]] |
|
}>() |
|
|
|
interface Props { |
|
pointList: Array<{ |
|
label: string |
|
addr: string |
|
}> |
|
loadingPoints: boolean |
|
} |
|
|
|
const props = withDefaults(defineProps<Props>(), { |
|
pointList: () => [] |
|
}) |
|
|
|
const checkPointList = ref<any>([]) |
|
|
|
function changePoints() { |
|
emit('onchange-points', checkPointList.value) |
|
} |
|
|
|
function clearCheck() { |
|
checkPointList.value = [] |
|
} |
|
|
|
function getCheckList() { |
|
return checkPointList.value |
|
} |
|
|
|
defineExpose({ |
|
clearCheck, |
|
getCheckList |
|
}) |
|
|
|
</script> |
|
|
|
|
|
<style lang="scss"> |
|
.point-checks { |
|
display: flex; |
|
flex-direction: column; |
|
align-items: start; |
|
|
|
|
|
:deep(.el-checkbox__inner) { |
|
width: 20px; |
|
height: 20px; |
|
} |
|
|
|
:deep(.el-checkbox__inner::after) { |
|
width: 4px; |
|
height: 8px; |
|
left: 50%; |
|
top: 50%; |
|
transform: translate(-50%, -50%) rotate(45deg); |
|
border-width: 3px; |
|
// border: 1px solid #ffffff; |
|
} |
|
} |
|
</style> |
|
|
|
<style lang="scss" scoped> |
|
|
|
.scroll { |
|
height: 100%; |
|
padding: 10px; |
|
} |
|
</style> |