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
b9144f0b6c
commit
3a42d6d6c6
@ -58,6 +58,7 @@ menus:
|
|||||||
hsjsoneditor: JSON Editor
|
hsjsoneditor: JSON Editor
|
||||||
hsColorPicker: Color Picker
|
hsColorPicker: Color Picker
|
||||||
hsDatePicker: Date Picker
|
hsDatePicker: Date Picker
|
||||||
|
hsDateTimePicker: DateTimePicker
|
||||||
hsmenus: MultiLevel Menu
|
hsmenus: MultiLevel Menu
|
||||||
hsmenu1: Menu1
|
hsmenu1: Menu1
|
||||||
hsmenu1-1: Menu1-1
|
hsmenu1-1: Menu1-1
|
||||||
|
@ -58,6 +58,7 @@ menus:
|
|||||||
hsjsoneditor: JSON编辑器
|
hsjsoneditor: JSON编辑器
|
||||||
hsColorPicker: 颜色选择器
|
hsColorPicker: 颜色选择器
|
||||||
hsDatePicker: 日期选择器
|
hsDatePicker: 日期选择器
|
||||||
|
hsDateTimePicker: 日期时间选择器
|
||||||
hsmenus: 多级菜单
|
hsmenus: 多级菜单
|
||||||
hsmenu1: 菜单1
|
hsmenu1: 菜单1
|
||||||
hsmenu1-1: 菜单1-1
|
hsmenu1-1: 菜单1-1
|
||||||
|
@ -34,6 +34,14 @@ export default {
|
|||||||
title: $t("menus.hsDatePicker")
|
title: $t("menus.hsDatePicker")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/components/datetime-picker",
|
||||||
|
name: "DateTimePicker",
|
||||||
|
component: () => import("@/views/components/datetime-picker.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsDateTimePicker")
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/components/icon-select",
|
path: "/components/icon-select",
|
||||||
name: "IconSelect",
|
name: "IconSelect",
|
||||||
|
@ -47,6 +47,9 @@ function onClick() {
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<el-space wrap :size="40">
|
<el-space wrap :size="40">
|
||||||
<el-link
|
<el-link
|
||||||
|
v-tippy="{
|
||||||
|
content: '点击查看详细文档'
|
||||||
|
}"
|
||||||
href="https://element-plus.org/zh-CN/component/color-picker.html"
|
href="https://element-plus.org/zh-CN/component/color-picker.html"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
style="font-size: 16px; font-weight: 800"
|
style="font-size: 16px; font-weight: 800"
|
||||||
|
@ -134,6 +134,9 @@ watch(size, val =>
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<el-space wrap :size="40">
|
<el-space wrap :size="40">
|
||||||
<el-link
|
<el-link
|
||||||
|
v-tippy="{
|
||||||
|
content: '点击查看详细文档'
|
||||||
|
}"
|
||||||
href="https://element-plus.org/zh-CN/component/date-picker.html"
|
href="https://element-plus.org/zh-CN/component/date-picker.html"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
style="font-size: 16px; font-weight: 800"
|
style="font-size: 16px; font-weight: 800"
|
||||||
|
281
src/views/components/datetime-picker.vue
Normal file
281
src/views/components/datetime-picker.vue
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, watch } from "vue";
|
||||||
|
|
||||||
|
defineOptions({
|
||||||
|
name: "DateTimePicker"
|
||||||
|
});
|
||||||
|
|
||||||
|
const size = ref("default");
|
||||||
|
const dynamicSize = ref();
|
||||||
|
|
||||||
|
const value = ref("");
|
||||||
|
const shortcuts = [
|
||||||
|
{
|
||||||
|
text: "今天",
|
||||||
|
value: new Date()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "昨天",
|
||||||
|
value: () => {
|
||||||
|
const date = new Date();
|
||||||
|
date.setTime(date.getTime() - 3600 * 1000 * 24);
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "一周前",
|
||||||
|
value: () => {
|
||||||
|
const date = new Date();
|
||||||
|
date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const value1 = ref("");
|
||||||
|
const datetimeFormat = ref("");
|
||||||
|
|
||||||
|
const value2 = ref("");
|
||||||
|
const shortcuts1 = [
|
||||||
|
{
|
||||||
|
text: "上周",
|
||||||
|
value: () => {
|
||||||
|
const end = new Date();
|
||||||
|
const start = new Date();
|
||||||
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
|
||||||
|
return [start, end];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "上个月",
|
||||||
|
value: () => {
|
||||||
|
const end = new Date();
|
||||||
|
const start = new Date();
|
||||||
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
|
||||||
|
return [start, end];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "三个月前",
|
||||||
|
value: () => {
|
||||||
|
const end = new Date();
|
||||||
|
const start = new Date();
|
||||||
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
|
||||||
|
return [start, end];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const value3 = ref("");
|
||||||
|
const datePickerRef = ref();
|
||||||
|
const placement = ref("auto");
|
||||||
|
const checkTag = ref([
|
||||||
|
{
|
||||||
|
title: "auto", // https://popper.js.org/docs/v2/constructors/#options
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "auto-start",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "auto-end",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "top",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "top-start",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "top-end",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "bottom",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "bottom-start",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "bottom-end",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "right",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "right-start",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "right-end",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "left",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "left-start",
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "left-end",
|
||||||
|
checked: false
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
const curTagMap = ref({});
|
||||||
|
function onChecked(tag, index) {
|
||||||
|
if (size.value === "disabled") return;
|
||||||
|
placement.value = tag.title;
|
||||||
|
curTagMap.value[index] = Object.assign({
|
||||||
|
...tag,
|
||||||
|
checked: !tag.checked
|
||||||
|
});
|
||||||
|
checkTag.value.map(item => (item.checked = false));
|
||||||
|
checkTag.value[index].checked = curTagMap.value[index].checked;
|
||||||
|
// 外部触发日期时间选择面板的打开与关闭
|
||||||
|
curTagMap.value[index].checked
|
||||||
|
? datePickerRef.value.handleOpen()
|
||||||
|
: datePickerRef.value.handleClose();
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(size, val =>
|
||||||
|
val === "disabled"
|
||||||
|
? (dynamicSize.value = "default")
|
||||||
|
: (dynamicSize.value = size.value)
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<el-card shadow="never" :style="{ height: '100vh' }">
|
||||||
|
<template #header>
|
||||||
|
<div class="card-header">
|
||||||
|
<el-space wrap :size="40">
|
||||||
|
<el-link
|
||||||
|
v-tippy="{
|
||||||
|
content: '点击查看详细文档'
|
||||||
|
}"
|
||||||
|
href="https://element-plus.org/zh-CN/component/datetime-picker.html"
|
||||||
|
target="_blank"
|
||||||
|
style="font-size: 16px; font-weight: 800"
|
||||||
|
>
|
||||||
|
日期时间选择器
|
||||||
|
</el-link>
|
||||||
|
<el-radio-group v-model="size" size="small">
|
||||||
|
<el-radio label="large">大尺寸</el-radio>
|
||||||
|
<el-radio label="default">默认尺寸</el-radio>
|
||||||
|
<el-radio label="small">小尺寸</el-radio>
|
||||||
|
<el-radio label="disabled">禁用</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-space>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<p class="mb-2">日期和时间点</p>
|
||||||
|
<el-date-picker
|
||||||
|
v-model="value"
|
||||||
|
type="datetime"
|
||||||
|
class="!w-[200px]"
|
||||||
|
placeholder="请选择日期时间"
|
||||||
|
:shortcuts="shortcuts"
|
||||||
|
:size="dynamicSize"
|
||||||
|
:disabled="size === 'disabled'"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<p class="mb-2 mt-4">日期时间格式</p>
|
||||||
|
<el-radio-group
|
||||||
|
v-model="datetimeFormat"
|
||||||
|
class="mb-2"
|
||||||
|
:disabled="size === 'disabled'"
|
||||||
|
@change="value1 = ''"
|
||||||
|
>
|
||||||
|
<el-radio label="">Date</el-radio>
|
||||||
|
<el-radio label="YYYY-MM-DD h:m:s a">年月日 时分秒</el-radio>
|
||||||
|
<el-radio label="x">时间戳</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
<br />
|
||||||
|
<el-space wrap>
|
||||||
|
<el-date-picker
|
||||||
|
v-model="value1"
|
||||||
|
type="datetime"
|
||||||
|
class="!w-[200px]"
|
||||||
|
placeholder="请选择日期时间"
|
||||||
|
format="YYYY/MM/DD hh:mm:ss"
|
||||||
|
:value-format="datetimeFormat"
|
||||||
|
:size="dynamicSize"
|
||||||
|
:disabled="size === 'disabled'"
|
||||||
|
/>
|
||||||
|
<span class="ml-2">{{ value1 }}</span>
|
||||||
|
</el-space>
|
||||||
|
|
||||||
|
<p class="mb-2 mt-4">日期和时间范围</p>
|
||||||
|
<el-date-picker
|
||||||
|
v-model="value2"
|
||||||
|
type="datetimerange"
|
||||||
|
:shortcuts="shortcuts1"
|
||||||
|
range-separator="至"
|
||||||
|
start-placeholder="开始日期时间"
|
||||||
|
end-placeholder="结束日期时间"
|
||||||
|
:popper-options="{
|
||||||
|
placement: 'bottom-start'
|
||||||
|
}"
|
||||||
|
:size="dynamicSize"
|
||||||
|
:disabled="size === 'disabled'"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<p class="mb-2 mt-4">
|
||||||
|
弹出面板位置可控(如果弹出位置不足以完整展示面板会自动调整位置)
|
||||||
|
</p>
|
||||||
|
<el-space wrap class="w-[400px]">
|
||||||
|
<el-check-tag
|
||||||
|
v-for="(tag, index) in checkTag"
|
||||||
|
:key="index"
|
||||||
|
:class="[
|
||||||
|
'select-none',
|
||||||
|
size === 'disabled' && 'tag-disabled',
|
||||||
|
tag.checked && 'is-active'
|
||||||
|
]"
|
||||||
|
:checked="tag.checked"
|
||||||
|
@change="onChecked(tag, index)"
|
||||||
|
>
|
||||||
|
{{ tag.title }}
|
||||||
|
</el-check-tag>
|
||||||
|
</el-space>
|
||||||
|
<el-date-picker
|
||||||
|
ref="datePickerRef"
|
||||||
|
v-model="value3"
|
||||||
|
type="datetime"
|
||||||
|
class="ml-[15%]"
|
||||||
|
placeholder="请选择日期时间"
|
||||||
|
:popper-options="{
|
||||||
|
placement
|
||||||
|
}"
|
||||||
|
:size="dynamicSize"
|
||||||
|
:disabled="size === 'disabled'"
|
||||||
|
/>
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.tag-disabled {
|
||||||
|
color: var(--el-disabled-text-color);
|
||||||
|
cursor: not-allowed;
|
||||||
|
background-color: var(--el-color-info-light-9);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--el-color-info-light-9);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-active {
|
||||||
|
background-color: var(--el-color-primary-light-9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -58,6 +58,9 @@ watch(size, val =>
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<el-space wrap :size="40">
|
<el-space wrap :size="40">
|
||||||
<el-link
|
<el-link
|
||||||
|
v-tippy="{
|
||||||
|
content: '点击查看详细文档'
|
||||||
|
}"
|
||||||
href="https://element-plus.org/zh-CN/component/button.html"
|
href="https://element-plus.org/zh-CN/component/button.html"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
style="font-size: 16px; font-weight: 800"
|
style="font-size: 16px; font-weight: 800"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user