mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-06 00:18:51 +08:00
feat: 添加滑块示例
This commit is contained in:
parent
f8690a0b73
commit
bbdd44a917
@ -92,6 +92,7 @@ menus:
|
|||||||
pureDraggable: Draggable
|
pureDraggable: Draggable
|
||||||
pureSplitPane: Split Pane
|
pureSplitPane: Split Pane
|
||||||
pureText: Text Ellipsis
|
pureText: Text Ellipsis
|
||||||
|
pureSlider: Slider
|
||||||
pureElButton: Button
|
pureElButton: Button
|
||||||
pureButton: Button Animation
|
pureButton: Button Animation
|
||||||
pureCheckButton: Check Button
|
pureCheckButton: Check Button
|
||||||
|
@ -92,6 +92,7 @@ menus:
|
|||||||
pureDraggable: 拖拽
|
pureDraggable: 拖拽
|
||||||
pureSplitPane: 切割面板
|
pureSplitPane: 切割面板
|
||||||
pureText: 文本省略
|
pureText: 文本省略
|
||||||
|
pureSlider: 滑块
|
||||||
pureElButton: 按钮
|
pureElButton: 按钮
|
||||||
pureCheckButton: 可选按钮
|
pureCheckButton: 可选按钮
|
||||||
pureButton: 按钮动效
|
pureButton: 按钮动效
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
import { h, onMounted, ref, useSlots } from "vue";
|
import { h, onMounted, ref, useSlots } from "vue";
|
||||||
import { type TippyOptions, useTippy } from "vue-tippy";
|
import { type TippyOptions, useTippy } from "vue-tippy";
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
import { getConfig } from "@/config";
|
import { getConfig } from "@/config";
|
||||||
|
|
||||||
const TITLE = getConfig("Title");
|
const TITLE = getConfig("Title");
|
||||||
|
@ -47,8 +47,7 @@ export default {
|
|||||||
name: "CheckCard",
|
name: "CheckCard",
|
||||||
component: () => import("@/views/components/check-card.vue"),
|
component: () => import("@/views/components/check-card.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.pureCheckCard"),
|
title: $t("menus.pureCheckCard")
|
||||||
extraIcon: "IF-pure-iconfont-new svg"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -112,7 +111,15 @@ export default {
|
|||||||
name: "PureText",
|
name: "PureText",
|
||||||
component: () => import("@/views/components/text.vue"),
|
component: () => import("@/views/components/text.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.pureText"),
|
title: $t("menus.pureText")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/components/slider",
|
||||||
|
name: "PureSlider",
|
||||||
|
component: () => import("@/views/components/slider/index.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.pureSlider"),
|
||||||
extraIcon: "IF-pure-iconfont-new svg"
|
extraIcon: "IF-pure-iconfont-new svg"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -129,8 +136,7 @@ export default {
|
|||||||
name: "CheckButton",
|
name: "CheckButton",
|
||||||
component: () => import("@/views/components/check-button.vue"),
|
component: () => import("@/views/components/check-button.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.pureCheckButton"),
|
title: $t("menus.pureCheckButton")
|
||||||
extraIcon: "IF-pure-iconfont-new svg"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
64
src/views/components/slider/components/Base.vue
Normal file
64
src/views/components/slider/components/Base.vue
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
|
const value1 = ref(0);
|
||||||
|
const value2 = ref(10);
|
||||||
|
const value3 = ref(0);
|
||||||
|
const value4 = ref(0);
|
||||||
|
const value5 = ref(0);
|
||||||
|
|
||||||
|
const formatTooltip = (val: number) => {
|
||||||
|
return val / 100;
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="demonstration">默认值</span>
|
||||||
|
<el-slider v-model="value1" />
|
||||||
|
</div>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="demonstration">自定义初始值</span>
|
||||||
|
<el-slider v-model="value2" />
|
||||||
|
</div>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="demonstration">隐藏 Tooltip 提示</span>
|
||||||
|
<el-slider v-model="value3" :show-tooltip="false" />
|
||||||
|
</div>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="demonstration">格式化 Tooltip 提示</span>
|
||||||
|
<el-slider v-model="value4" :format-tooltip="formatTooltip" />
|
||||||
|
</div>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="demonstration">禁用</span>
|
||||||
|
<el-slider v-model="value5" disabled />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.slider-demo-block {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
max-width: 600px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .el-slider {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-left: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .demonstration {
|
||||||
|
flex: 1;
|
||||||
|
margin-bottom: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 44px;
|
||||||
|
color: var(--el-text-color-secondary);
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .demonstration + .el-slider {
|
||||||
|
flex: 0 0 70%;
|
||||||
|
}
|
||||||
|
</style>
|
24
src/views/components/slider/components/Input.vue
Normal file
24
src/views/components/slider/components/Input.vue
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
|
const value = ref(0);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<el-slider v-model="value" show-input />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.slider-demo-block {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
max-width: 600px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .el-slider {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-left: 12px;
|
||||||
|
}
|
||||||
|
</style>
|
43
src/views/components/slider/components/Marks.vue
Normal file
43
src/views/components/slider/components/Marks.vue
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { reactive, ref } from "vue";
|
||||||
|
import type { CSSProperties } from "vue";
|
||||||
|
|
||||||
|
interface Mark {
|
||||||
|
style: CSSProperties;
|
||||||
|
label: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
type Marks = Record<number, Mark | string>;
|
||||||
|
|
||||||
|
const value = ref([30, 60]);
|
||||||
|
const marks = reactive<Marks>({
|
||||||
|
0: "0°C",
|
||||||
|
8: "8°C",
|
||||||
|
37: "37°C",
|
||||||
|
50: {
|
||||||
|
style: {
|
||||||
|
color: "#1989FA"
|
||||||
|
},
|
||||||
|
label: "50%"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<el-slider v-model="value" range :marks="marks" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.slider-demo-block {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
max-width: 600px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .el-slider {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-left: 12px;
|
||||||
|
}
|
||||||
|
</style>
|
40
src/views/components/slider/components/Placement.vue
Normal file
40
src/views/components/slider/components/Placement.vue
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
|
const value1 = ref(0);
|
||||||
|
const value2 = ref(0);
|
||||||
|
const value3 = ref(0);
|
||||||
|
const value4 = ref(0);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="mr-2">上</span>
|
||||||
|
<el-slider v-model="value1" />
|
||||||
|
</div>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="mr-2">下</span>
|
||||||
|
<el-slider v-model="value2" placement="bottom" />
|
||||||
|
</div>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="mr-2">左</span>
|
||||||
|
<el-slider v-model="value4" placement="left" />
|
||||||
|
</div>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="mr-2">右</span>
|
||||||
|
<el-slider v-model="value3" placement="right" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.slider-demo-block {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
max-width: 600px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .el-slider {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-left: 12px;
|
||||||
|
}
|
||||||
|
</style>
|
24
src/views/components/slider/components/Range.vue
Normal file
24
src/views/components/slider/components/Range.vue
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
|
const value = ref([4, 8]);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<el-slider v-model="value" range show-stops :max="10" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.slider-demo-block {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
max-width: 600px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .el-slider {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-left: 12px;
|
||||||
|
}
|
||||||
|
</style>
|
23
src/views/components/slider/components/Size.vue
Normal file
23
src/views/components/slider/components/Size.vue
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
|
const value = ref(0);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="max-w-[600px] ml-4">
|
||||||
|
<el-slider v-model="value" show-input size="large" />
|
||||||
|
<el-slider v-model="value" show-input />
|
||||||
|
<el-slider v-model="value" show-input size="small" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.el-slider {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-slider:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
</style>
|
45
src/views/components/slider/components/Step.vue
Normal file
45
src/views/components/slider/components/Step.vue
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
|
const value1 = ref(0);
|
||||||
|
const value2 = ref(0);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="demonstration">不显示断点</span>
|
||||||
|
<el-slider v-model="value1" :step="10" />
|
||||||
|
</div>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<span class="demonstration">显示断点</span>
|
||||||
|
<el-slider v-model="value2" :step="10" show-stops />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.slider-demo-block {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
max-width: 600px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .el-slider {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-left: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .demonstration {
|
||||||
|
flex: 1;
|
||||||
|
margin-bottom: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 44px;
|
||||||
|
color: var(--el-text-color-secondary);
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .demonstration + .el-slider {
|
||||||
|
flex: 0 0 70%;
|
||||||
|
}
|
||||||
|
</style>
|
24
src/views/components/slider/components/Vertical.vue
Normal file
24
src/views/components/slider/components/Vertical.vue
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
|
const value = ref(0);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="slider-demo-block">
|
||||||
|
<el-slider v-model="value" vertical height="200px" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.slider-demo-block {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
max-width: 600px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-demo-block .el-slider {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-left: 12px;
|
||||||
|
}
|
||||||
|
</style>
|
8
src/views/components/slider/components/index.ts
Normal file
8
src/views/components/slider/components/index.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
export { default as Base } from "./Base.vue";
|
||||||
|
export { default as Step } from "./Step.vue";
|
||||||
|
export { default as Size } from "./Size.vue";
|
||||||
|
export { default as Input } from "./Input.vue";
|
||||||
|
export { default as Range } from "./Range.vue";
|
||||||
|
export { default as Marks } from "./Marks.vue";
|
||||||
|
export { default as Vertical } from "./Vertical.vue";
|
||||||
|
export { default as Placement } from "./Placement.vue";
|
56
src/views/components/slider/index.vue
Normal file
56
src/views/components/slider/index.vue
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import {
|
||||||
|
Base,
|
||||||
|
Step,
|
||||||
|
Input,
|
||||||
|
Size,
|
||||||
|
Placement,
|
||||||
|
Range,
|
||||||
|
Vertical,
|
||||||
|
Marks
|
||||||
|
} from "./components";
|
||||||
|
|
||||||
|
defineOptions({
|
||||||
|
name: "PureSlider"
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<div class="card-header">
|
||||||
|
<p class="font-medium">滑块</p>
|
||||||
|
<el-link
|
||||||
|
class="mt-2"
|
||||||
|
href="https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/components/slider/index.vue"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
代码位置 src/views/components/slider/index.vue
|
||||||
|
</el-link>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<p class="mb-2">基础用法</p>
|
||||||
|
<Base />
|
||||||
|
<el-divider />
|
||||||
|
<p class="mb-2">离散值</p>
|
||||||
|
<Step />
|
||||||
|
<el-divider />
|
||||||
|
<p class="mb-2">带有输入框的滑块</p>
|
||||||
|
<Input />
|
||||||
|
<el-divider />
|
||||||
|
<p class="mb-2">不同尺寸</p>
|
||||||
|
<Size />
|
||||||
|
<el-divider />
|
||||||
|
<p class="mb-2">位置</p>
|
||||||
|
<Placement />
|
||||||
|
<el-divider />
|
||||||
|
<p class="mb-2">范围选择</p>
|
||||||
|
<Range />
|
||||||
|
<el-divider />
|
||||||
|
<p class="mb-2">垂直模式</p>
|
||||||
|
<Vertical />
|
||||||
|
<el-divider />
|
||||||
|
<p class="mb-2">显示标记</p>
|
||||||
|
<Marks class="mb-6" />
|
||||||
|
</el-card>
|
||||||
|
</template>
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
import { ReText } from "@/components/ReText";
|
import { ReText } from "@/components/ReText";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
import { reactive, ref } from "vue";
|
import { reactive, ref } from "vue";
|
||||||
import { formUpload } from "@/api/mock";
|
import { formUpload } from "@/api/mock";
|
||||||
import { message } from "@/utils/message";
|
import { message } from "@/utils/message";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
import { VxeTableBar } from "@/components/ReVxeTableBar";
|
import { VxeTableBar } from "@/components/ReVxeTableBar";
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
import { ref, reactive, computed } from "vue";
|
import { ref, reactive, computed } from "vue";
|
||||||
import { VxeTableBar } from "@/components/ReVxeTableBar";
|
import { VxeTableBar } from "@/components/ReVxeTableBar";
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
import treeList from "./tree.json";
|
import treeList from "./tree.json";
|
||||||
import { VxeTableBar } from "@/components/ReVxeTableBar";
|
import { VxeTableBar } from "@/components/ReVxeTableBar";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
import { computed, nextTick, ref, toRef, watch } from "vue";
|
import { computed, nextTick, ref, toRef, watch } from "vue";
|
||||||
import { TransitionPresets, executeTransition } from "@vueuse/core";
|
import { TransitionPresets, executeTransition } from "@vueuse/core";
|
||||||
import {
|
import {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
defineProps({
|
defineProps({
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
import "@vue-flow/core/dist/style.css";
|
import "@vue-flow/core/dist/style.css";
|
||||||
import "@vue-flow/core/dist/theme-default.css";
|
import "@vue-flow/core/dist/theme-default.css";
|
||||||
import Icon from "./icon.vue";
|
import Icon from "./icon.vue";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script setup lang="ts">
|
||||||
import { toRef } from "vue";
|
import { toRef } from "vue";
|
||||||
import { Handle, useHandleConnections } from "@vue-flow/core";
|
import { Handle, useHandleConnections } from "@vue-flow/core";
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user