UNPKG

yanzhen-design-vue

Version:

171 lines (170 loc) 5.93 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); const vue = require("vue"); const antDesignVue = require("ant-design-vue"); const dayjs = require("dayjs"); const lodashEs = require("lodash-es"); const time = require("./time.cjs"); const _sfc_main = /* @__PURE__ */ vue.defineComponent({ ...{ name: time.timeName }, __name: "time", props: time.timeProps, emits: time.timeEmits, setup(__props, { expose: __expose, emit: __emit }) { const { ns } = time.timeOptions; const props = __props; const emit = __emit; const slots = vue.useSlots(); const slotKeys = Object.keys(slots); const formatTimeMap = () => { const hour = "hour"; const minute = "minute"; const second = "second"; return { [hour]: { type: hour, format: "YYYY-MM-DD", totalNumber: 24 }, [minute]: { type: minute, format: "YYYY-MM-DD HH", totalNumber: 60 }, [second]: { type: second, format: "YYYY-MM-DD HH:mm", totalNumber: 60 } }; }; const format = vue.computed(() => { const { showTime, expandFormat } = props; return showTime ? `${expandFormat || "YYYY-MM-DD"} HH:mm:ss` : `${expandFormat || "YYYY-MM-DD"}`; }); const dateValue = vue.computed(() => { if (props.value) { if (props.isTimeStamp) { return dayjs(+props.value); } else { const formatTime = setFormatValue(String(props.value)); return dayjs(formatTime); } } else { return null; } }); const setFormatValue = (value) => { let formatValue = lodashEs.cloneDeep(value); if (!formatValue) return value; const { showTime } = props; const hasSpace = formatValue.includes(" "); if (showTime) { if (!hasSpace) formatValue = `${formatValue} 00:00:00`; } else { if (hasSpace) formatValue = lodashEs.get(formatValue.split(" "), "[0]", ""); } if (formatValue !== value) { emit("update:value", formatValue); return formatValue; } else { return value; } }; const disabledDate = (current) => { const { beginTime: time1, endTime: time2 } = props; const beginTime = dayjs(time1).startOf("day").format("YYYY-MM-DD HH:mm:ss"); const endTime = dayjs(time2).endOf("day").format("YYYY-MM-DD HH:mm:ss"); if (time1 && !time2) { return current < dayjs(beginTime); } else if (!time1 && time2) { return current > dayjs(endTime); } else if (time1 && time2) { return current < dayjs(beginTime) || current > dayjs(endTime); } }; const getDisabledDateTime = (momentTime, formatInfo) => { const { type, format: format2, totalNumber } = formatInfo; const formatMap = formatTimeMap(); const startTime = dayjs(props.beginTime).startOf(type); const startVal = startTime.valueOf(); const endTime = dayjs(props.endTime).startOf(type); const endVal = endTime.valueOf(); const disabledTimes = []; const currentTime = dayjs(momentTime).format(format2); for (let t = 0; t < totalNumber; t++) { const time2 = String(t).padStart(2, "0"); let fullTimeStr = ""; switch (formatInfo.type) { case formatMap.hour.type: { fullTimeStr = `${currentTime} ${time2}:00:00`; break; } case formatMap.minute.type: { fullTimeStr = `${currentTime}:${time2}:00`; break; } case formatMap.second.type: { fullTimeStr = `${currentTime}:${time2}`; } } const fullValue = new Date(fullTimeStr).getTime(); if (fullValue < startVal || fullValue > endVal) { disabledTimes.push(t); } } return disabledTimes; }; const disabledDateTime = (currentDate) => { let hasdisabledTimes = true; const formatMap = formatTimeMap(); const { beginTime, endTime } = props; if (!beginTime && !endTime) hasdisabledTimes = false; return { disabledHours: () => hasdisabledTimes ? getDisabledDateTime(currentDate, formatMap.hour) : [], disabledMinutes: () => hasdisabledTimes ? getDisabledDateTime(currentDate, formatMap.minute) : [], disabledSeconds: () => hasdisabledTimes ? getDisabledDateTime(currentDate, formatMap.second) : [] }; }; const handleChange = (date, dateString) => { const { isTimeStamp } = props; const dataValue = isTimeStamp ? new Date(dateString).getTime() : dateString; emit("update:value", dataValue); emit("change", dataValue); emit("blur"); }; const handleBlur = (...args) => { emit("blur", ...args); }; const _ref = vue.ref(); __expose({ ref: _ref }); return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.unref(antDesignVue.DatePicker), vue.mergeProps({ ref_key: "_ref", ref: _ref }, _ctx.$attrs, { class: [vue.unref(ns).b()], value: dateValue.value, format: format.value, "show-time": props.showTime, placeholder: props.placeholder, "disabled-date": disabledDate, "disabled-time": disabledDateTime, onChange: handleChange, onBlur: handleBlur }), vue.createSlots({ _: 2 }, [ vue.renderList(vue.unref(slotKeys), (slot) => { return { name: slot, fn: vue.withCtx((slotItem) => [ vue.renderSlot(_ctx.$slots, slot, vue.normalizeProps(vue.guardReactiveProps(slotItem))) ]) }; }) ]), 1040, ["class", "value", "format", "show-time", "placeholder"]); }; } }); exports.default = _sfc_main;