mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-06 16:37:18 +08:00
feat: 添加日期选择器组件示例
This commit is contained in:
parent
99e9828e8d
commit
47f1d56588
@ -57,6 +57,7 @@ menus:
|
||||
hstypeit: Typeit
|
||||
hsjsoneditor: JSON Editor
|
||||
hsColorPicker: Color Picker
|
||||
hsDatePicker: Date Picker
|
||||
hsmenus: MultiLevel Menu
|
||||
hsmenu1: Menu1
|
||||
hsmenu1-1: Menu1-1
|
||||
|
@ -57,6 +57,7 @@ menus:
|
||||
hstypeit: 打字机
|
||||
hsjsoneditor: JSON编辑器
|
||||
hsColorPicker: 颜色选择器
|
||||
hsDatePicker: 日期选择器
|
||||
hsmenus: 多级菜单
|
||||
hsmenu1: 菜单1
|
||||
hsmenu1-1: 菜单1-1
|
||||
|
@ -26,6 +26,14 @@ export default {
|
||||
title: $t("menus.hsmessage")
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/components/date-picker",
|
||||
name: "DatePicker",
|
||||
component: () => import("@/views/components/date-picker.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsDatePicker")
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/components/icon-select",
|
||||
name: "IconSelect",
|
||||
|
@ -91,16 +91,15 @@ watch(size, val =>
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="font-medium">
|
||||
可选按钮
|
||||
<br />
|
||||
<el-space wrap :size="40">
|
||||
<span style="font-size: 16px; font-weight: 800"> 可选按钮 </span>
|
||||
<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>
|
||||
</span>
|
||||
</el-space>
|
||||
</div>
|
||||
</template>
|
||||
<p class="mb-2">单选(紧凑风格的按钮样式)</p>
|
||||
|
329
src/views/components/date-picker.vue
Normal file
329
src/views/components/date-picker.vue
Normal file
@ -0,0 +1,329 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, watch } from "vue";
|
||||
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
|
||||
|
||||
defineOptions({
|
||||
name: "DatePicker"
|
||||
});
|
||||
|
||||
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 disabledDate = (time: Date) => {
|
||||
return time.getTime() > Date.now();
|
||||
};
|
||||
|
||||
const value1 = ref("");
|
||||
const value2 = ref("");
|
||||
const value3 = ref("");
|
||||
const value4 = ref("");
|
||||
|
||||
const value5 = 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 value6 = ref("");
|
||||
const shortcuts2 = [
|
||||
{
|
||||
text: "本月",
|
||||
value: [new Date(), new Date()]
|
||||
},
|
||||
{
|
||||
text: "今年",
|
||||
value: () => {
|
||||
const end = new Date();
|
||||
const start = new Date(new Date().getFullYear(), 0);
|
||||
return [start, end];
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "六个月前",
|
||||
value: () => {
|
||||
const end = new Date();
|
||||
const start = new Date();
|
||||
start.setMonth(start.getMonth() - 6);
|
||||
return [start, end];
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
const value7 = ref("");
|
||||
const dateFormat = ref("");
|
||||
|
||||
const value8 = ref("");
|
||||
|
||||
const value9 = ref("2023-10-30");
|
||||
const holidays = [
|
||||
"2023-10-22",
|
||||
"2023-10-23",
|
||||
"2023-10-24",
|
||||
"2023-10-25",
|
||||
"2023-10-26",
|
||||
"2023-10-27",
|
||||
"2023-10-28",
|
||||
"2023-10-29",
|
||||
"2023-10-30",
|
||||
"2023-10-31"
|
||||
];
|
||||
|
||||
const isHoliday = ({ dayjs }) => {
|
||||
return holidays.includes(dayjs.format("YYYY-MM-DD"));
|
||||
};
|
||||
|
||||
watch(size, val =>
|
||||
val === "disabled"
|
||||
? (dynamicSize.value = "default")
|
||||
: (dynamicSize.value = size.value)
|
||||
);
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<el-space wrap :size="40">
|
||||
<el-link
|
||||
href="https://element-plus.org/zh-CN/component/date-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="date"
|
||||
class="!w-[160px]"
|
||||
placeholder="请选择"
|
||||
:disabled-date="disabledDate"
|
||||
:shortcuts="shortcuts"
|
||||
:popper-options="{
|
||||
placement: 'bottom-start'
|
||||
}"
|
||||
:size="dynamicSize"
|
||||
:disabled="size === 'disabled'"
|
||||
/>
|
||||
|
||||
<p class="mb-2 mt-4">选择周、月、年或多个日期</p>
|
||||
<el-space wrap>
|
||||
<el-date-picker
|
||||
v-model="value1"
|
||||
type="week"
|
||||
class="!w-[160px]"
|
||||
format="YYYY年第ww周"
|
||||
placeholder="选择某年中的某周"
|
||||
:size="dynamicSize"
|
||||
:disabled="size === 'disabled'"
|
||||
/>
|
||||
<el-date-picker
|
||||
v-model="value2"
|
||||
type="month"
|
||||
class="!w-[160px]"
|
||||
placeholder="选择某月"
|
||||
:size="dynamicSize"
|
||||
:disabled="size === 'disabled'"
|
||||
/>
|
||||
<el-date-picker
|
||||
v-model="value3"
|
||||
type="year"
|
||||
class="!w-[160px]"
|
||||
placeholder="选择某年"
|
||||
:size="dynamicSize"
|
||||
:disabled="size === 'disabled'"
|
||||
/>
|
||||
<el-date-picker
|
||||
v-model="value4"
|
||||
type="dates"
|
||||
class="!w-[160px]"
|
||||
placeholder="选择多个日期"
|
||||
:size="dynamicSize"
|
||||
:disabled="size === 'disabled'"
|
||||
/>
|
||||
</el-space>
|
||||
|
||||
<p class="mb-2 mt-4">选择一段时间</p>
|
||||
<el-date-picker
|
||||
v-model="value5"
|
||||
type="daterange"
|
||||
class="!w-[240px]"
|
||||
unlink-panels
|
||||
range-separator="至"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间"
|
||||
:shortcuts="shortcuts1"
|
||||
:popper-options="{
|
||||
placement: 'bottom-start' // 下拉面板出现的位置,或 'top-start'、'bottom-end'、'top-end' 等,具体看 https://popper.js.org/docs/v2/constructors/#options
|
||||
}"
|
||||
:size="dynamicSize"
|
||||
:disabled="size === 'disabled'"
|
||||
/>
|
||||
|
||||
<p class="mb-2 mt-4">选择月份范围</p>
|
||||
<el-date-picker
|
||||
v-model="value6"
|
||||
type="monthrange"
|
||||
unlink-panels
|
||||
range-separator="至"
|
||||
start-placeholder="开始月份"
|
||||
end-placeholder="结束月份"
|
||||
:shortcuts="shortcuts2"
|
||||
:popper-options="{
|
||||
placement: 'bottom-start'
|
||||
}"
|
||||
:size="dynamicSize"
|
||||
:disabled="size === 'disabled'"
|
||||
/>
|
||||
|
||||
<p class="mb-2 mt-4">日期格式</p>
|
||||
<el-radio-group
|
||||
v-model="dateFormat"
|
||||
class="mb-2"
|
||||
:disabled="size === 'disabled'"
|
||||
@change="value7 = ''"
|
||||
>
|
||||
<el-radio label="">Date</el-radio>
|
||||
<el-radio label="YYYY-MM-DD">年月日</el-radio>
|
||||
<el-radio label="x">时间戳</el-radio>
|
||||
</el-radio-group>
|
||||
<br />
|
||||
<el-space wrap>
|
||||
<el-date-picker
|
||||
v-model="value7"
|
||||
type="date"
|
||||
class="!w-[160px]"
|
||||
placeholder="请选择日期"
|
||||
format="YYYY/MM/DD"
|
||||
:value-format="dateFormat"
|
||||
:size="dynamicSize"
|
||||
:disabled="size === 'disabled'"
|
||||
/>
|
||||
<span class="ml-2">{{ value7 }}</span>
|
||||
</el-space>
|
||||
|
||||
<p class="mb-2 mt-4">自定义前缀</p>
|
||||
<el-date-picker
|
||||
v-model="value8"
|
||||
type="date"
|
||||
class="!w-[160px]"
|
||||
placeholder="请选择日期"
|
||||
:prefix-icon="useRenderIcon('twemoji:spiral-calendar')"
|
||||
:size="dynamicSize"
|
||||
:disabled="size === 'disabled'"
|
||||
/>
|
||||
|
||||
<p class="mb-2 mt-4">自定义内容</p>
|
||||
<el-date-picker
|
||||
v-model="value9"
|
||||
type="date"
|
||||
placeholder="请选择日期"
|
||||
format="YYYY/MM/DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
:size="dynamicSize"
|
||||
:disabled="size === 'disabled'"
|
||||
>
|
||||
<template #default="cell">
|
||||
<div class="cell" :class="{ current: cell.isCurrent }">
|
||||
<span class="text">{{ cell.text }}</span>
|
||||
<span v-if="isHoliday(cell)" class="holiday" />
|
||||
</div>
|
||||
</template>
|
||||
</el-date-picker>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.cell {
|
||||
box-sizing: border-box;
|
||||
height: 30px;
|
||||
padding: 3px 0;
|
||||
}
|
||||
|
||||
.cell .text {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
display: block;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin: 0 auto;
|
||||
line-height: 24px;
|
||||
border-radius: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.cell.current .text {
|
||||
color: #fff;
|
||||
background: #626aef;
|
||||
}
|
||||
|
||||
.cell .holiday {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
background: var(--el-color-danger);
|
||||
border-radius: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
</style>
|
@ -56,22 +56,21 @@ watch(size, val =>
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="font-medium">
|
||||
<el-space wrap :size="40">
|
||||
<el-link
|
||||
href="https://element-plus.org/zh-CN/component/button.html"
|
||||
target="_blank"
|
||||
style="margin: 0 4px 5px; font-size: 16px"
|
||||
style="font-size: 16px; font-weight: 800"
|
||||
>
|
||||
Button 按钮
|
||||
</el-link>
|
||||
<br />
|
||||
<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>
|
||||
</span>
|
||||
</el-space>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user