Skip to content

Commit

Permalink
feat(components): segmented组件新增block属性,可使其适合父元素宽度 (#997)
Browse files Browse the repository at this point in the history
* feat: `segmented`组件新增`block`属性,可将宽度调整为父元素宽度
  • Loading branch information
QFifteen authored Mar 19, 2024
1 parent 17d36f6 commit bf128f1
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 2 deletions.
16 changes: 16 additions & 0 deletions src/components/ReSegmented/src/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,21 @@
border-radius: 2px;
}

.pure-segmented-block {
display: flex;
}

.pure-segmented-block .pure-segmented-item {
flex: 1;
min-width: 0;
}

.pure-segmented-block .pure-segmented-item > .pure-segmented-item-label > span {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}

.pure-segmented-group {
position: relative;
display: flex;
Expand Down Expand Up @@ -67,6 +82,7 @@
.pure-segmented-item-label {
display: flex;
align-items: center;
justify-content: center;
}

.pure-segmented-item-icon svg {
Expand Down
24 changes: 22 additions & 2 deletions src/components/ReSegmented/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@ import {
} from "vue";
import type { OptionsType } from "./type";
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
import { isFunction, isNumber, useDark } from "@pureadmin/utils";
import {
isFunction,
isNumber,
useDark,
useResizeObserver
} from "@pureadmin/utils";

const props = {
options: {
Expand All @@ -22,6 +27,11 @@ const props = {
type: undefined,
require: false,
default: "0"
},
/** 将宽度调整为父元素宽度 */
block: {
type: Boolean,
default: false
}
};

Expand Down Expand Up @@ -77,6 +87,14 @@ export default defineComponent({
});
}

if (props.block) {
useResizeObserver(".pure-segmented", () => {
nextTick(() => {
handleInit(curIndex.value);
});
});
}

watch(
() => curIndex.value,
index => {
Expand Down Expand Up @@ -148,7 +166,9 @@ export default defineComponent({
};

return () => (
<div class="pure-segmented">
<div
class={["pure-segmented", props.block ? "pure-segmented-block" : ""]}
>
<div class="pure-segmented-group">
<div
class="pure-segmented-item-selected"
Expand Down
23 changes: 23 additions & 0 deletions src/views/components/segmented.vue
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,26 @@ const optionsDisabled: Array<OptionsType> = [
}
];
/** block */
const optionsBlock: Array<OptionsType> = [
{
label: "周一"
},
{
label: "周二"
},
{
label: "周三"
},
{
label: "周四"
},
{
label: "周五喜悦,收尾归档,周末倒计时",
tip: "周五喜悦,收尾归档,周末倒计时"
}
];
/** 可设置图标 */
const optionsIcon: Array<OptionsType> = [
{
Expand Down Expand Up @@ -198,6 +218,9 @@ function onChange({ index, option }) {
<p class="mb-2">禁用</p>
<Segmented :options="optionsDisabled" />
<el-divider />
<p class="mb-2">block 属性(将宽度调整为父元素宽度)</p>
<Segmented :options="optionsBlock" block />
<el-divider />
<p class="mb-2">可设置图标</p>
<Segmented :options="optionsIcon" />
<el-divider />
Expand Down

0 comments on commit bf128f1

Please sign in to comment.