59 lines
997 B
Plaintext
59 lines
997 B
Plaintext
|
|
<template>
|
|||
|
|
<view
|
|||
|
|
class="cl-row"
|
|||
|
|
:class="[pt.className]"
|
|||
|
|
:style="{
|
|||
|
|
marginLeft: margin,
|
|||
|
|
marginRight: margin
|
|||
|
|
}"
|
|||
|
|
>
|
|||
|
|
<slot></slot>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script setup lang="ts">
|
|||
|
|
import { computed } from "vue";
|
|||
|
|
import { parsePt, parseRpx } from "@/cool";
|
|||
|
|
|
|||
|
|
defineOptions({
|
|||
|
|
name: "cl-row"
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 组件属性定义
|
|||
|
|
const props = defineProps({
|
|||
|
|
// 透传样式配置
|
|||
|
|
pt: {
|
|||
|
|
type: Object,
|
|||
|
|
default: () => ({})
|
|||
|
|
},
|
|||
|
|
// 栅格间隔,单位rpx
|
|||
|
|
gutter: {
|
|||
|
|
type: Number,
|
|||
|
|
default: 0
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 透传类型定义
|
|||
|
|
type PassThrough = {
|
|||
|
|
// 自定义类名
|
|||
|
|
className?: string;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 解析透传配置
|
|||
|
|
const pt = computed(() => parsePt<PassThrough>(props.pt));
|
|||
|
|
|
|||
|
|
// 计算栅格间距的负边距,用于抵消列的padding
|
|||
|
|
const margin = computed(() => `-${parseRpx(props.gutter / 2)}`);
|
|||
|
|
|
|||
|
|
// 暴露gutter属性给子组件使用
|
|||
|
|
defineExpose({
|
|||
|
|
gutter: computed(() => props.gutter)
|
|||
|
|
});
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.cl-row {
|
|||
|
|
@apply flex flex-row flex-wrap relative;
|
|||
|
|
}
|
|||
|
|
</style>
|