UNPKG

vxe-table

Version:

一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等...

1,701 lines (1,526 loc) 66.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _ctor = _interopRequireDefault(require("xe-utils/ctor")); var _conf = _interopRequireDefault(require("../../conf")); var _size = _interopRequireDefault(require("../../mixins/size")); var _tools = require("../../tools"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var browse = _tools.DomTools.browse; var wheelName = browse.firefox ? 'DOMMouseScroll' : 'mousewheel'; var yearSize = 20; var monthSize = 20; function toStringTimeDate(str) { if (str) { var rest = new Date(); var h, m, s; if (_ctor.default.isDate(str)) { h = str.getHours(); m = str.getMinutes(); s = str.getSeconds(); } else { str = _ctor.default.toString(str); var parses = str.match(/^(\d{1,2})(:(\d{1,2}))?(:(\d{1,2}))?/); if (parses) { h = parses[1]; m = parses[3]; s = parses[5]; } } rest.setHours(h || 0); rest.setMinutes(m || 0); rest.setSeconds(s || 0); return rest; } return new Date(''); } function renderDefaultInput(h, _vm) { var inpAttrs = _vm.inpAttrs, inpEvents = _vm.inpEvents, value = _vm.value; return h('input', { ref: 'input', class: 'vxe-input--inner', domProps: { value: value }, attrs: inpAttrs, on: inpEvents }); } function renderDateInput(h, _vm) { var inpAttrs = _vm.inpAttrs, inpEvents = _vm.inpEvents, inputValue = _vm.inputValue; return h('input', { ref: 'input', class: 'vxe-input--inner', domProps: { value: inputValue }, attrs: inpAttrs, on: inpEvents }); } function renderDateLabel(h, _vm, item, label) { var festivalMethod = _vm.festivalMethod; if (festivalMethod) { var festivalRest = festivalMethod(_objectSpread({ type: _vm.datePanelType }, item)); var festivalItem = festivalRest ? _ctor.default.isString(festivalRest) ? { label: festivalRest } : festivalRest : {}; var extraItem = festivalItem.extra ? _ctor.default.isString(festivalItem.extra) ? { label: festivalItem.extra } : festivalItem.extra : null; var labels = [h('span', { class: ['vxe-input--date-label', { 'is-notice': festivalItem.notice }] }, extraItem && extraItem.label ? [h('span', label), h('span', { class: ['vxe-input--date-label--extra', extraItem.important ? 'is-important' : '', extraItem.className], style: extraItem.style }, _ctor.default.toString(extraItem.label))] : label)]; var festivalLabel = festivalItem.label; if (festivalLabel) { // 默认最多支持3个节日重叠 var festivalLabels = _ctor.default.toString(festivalLabel).split(','); labels.push(h('span', { class: ['vxe-input--date-festival', festivalItem.important ? 'is-important' : '', festivalItem.className], style: festivalItem.style }, [festivalLabels.length > 1 ? h('span', { class: ['vxe-input--date-festival--overlap', "overlap--".concat(festivalLabels.length)] }, festivalLabels.map(function (label) { return h('span', label.substring(0, 3)); })) : h('span', { class: 'vxe-input--date-festival--label' }, festivalLabels[0].substring(0, 3))])); } return labels; } return label; } function isDateDisabled(_vm, item) { var disabledMethod = _vm.disabledMethod; return disabledMethod && disabledMethod({ type: _vm.type, date: item.date }); } function renderDateDayTable(h, _vm) { var datePanelType = _vm.datePanelType, dateValue = _vm.dateValue, datePanelValue = _vm.datePanelValue, dateHeaders = _vm.dateHeaders, dayDatas = _vm.dayDatas; var matchFormat = 'yyyy-MM-dd'; return [h('table', { class: "vxe-input--date-".concat(datePanelType, "-view"), attrs: { cellspacing: 0, cellpadding: 0, border: 0 } }, [h('thead', [h('tr', dateHeaders.map(function (item) { return h('th', item.label); }))]), h('tbody', dayDatas.map(function (rows) { return h('tr', rows.map(function (item) { return h('td', { class: { 'is--prev': item.isPrev, 'is--current': item.isCurrent, 'is--now': item.isNow, 'is--next': item.isNext, 'is--disabled': isDateDisabled(_vm, item), 'is--selected': _ctor.default.isDateSame(dateValue, item.date, matchFormat), 'is--hover': _ctor.default.isDateSame(datePanelValue, item.date, matchFormat) }, on: { click: function click() { return _vm.dateSelectEvent(item); }, mouseenter: function mouseenter() { return _vm.dateMouseenterEvent(item); } } }, renderDateLabel(h, _vm, item, item.label)); })); }))])]; } function renderDateWeekTable(h, _vm) { var datePanelType = _vm.datePanelType, dateValue = _vm.dateValue, datePanelValue = _vm.datePanelValue, weekHeaders = _vm.weekHeaders, weekDates = _vm.weekDates; var matchFormat = 'yyyy-MM-dd'; return [h('table', { class: "vxe-input--date-".concat(datePanelType, "-view"), attrs: { cellspacing: 0, cellpadding: 0, border: 0 } }, [h('thead', [h('tr', weekHeaders.map(function (item) { return h('th', item.label); }))]), h('tbody', weekDates.map(function (rows) { var isSelected = rows.some(function (item) { return _ctor.default.isDateSame(dateValue, item.date, matchFormat); }); var isHover = rows.some(function (item) { return _ctor.default.isDateSame(datePanelValue, item.date, matchFormat); }); return h('tr', rows.map(function (item) { return h('td', { class: { 'is--prev': item.isPrev, 'is--current': item.isCurrent, 'is--now': item.isNow, 'is--next': item.isNext, 'is--disabled': isDateDisabled(_vm, item), 'is--selected': isSelected, 'is--hover': isHover }, on: { click: function click() { return _vm.dateSelectEvent(item); }, mouseenter: function mouseenter() { return _vm.dateMouseenterEvent(item); } } }, renderDateLabel(h, _vm, item, item.label)); })); }))])]; } function renderDateMonthTable(h, _vm) { var dateValue = _vm.dateValue, datePanelType = _vm.datePanelType, monthDatas = _vm.monthDatas, datePanelValue = _vm.datePanelValue; var matchFormat = 'yyyy-MM'; return [h('table', { class: "vxe-input--date-".concat(datePanelType, "-view"), attrs: { cellspacing: 0, cellpadding: 0, border: 0 } }, [h('tbody', monthDatas.map(function (rows) { return h('tr', rows.map(function (item) { return h('td', { class: { 'is--prev': item.isPrev, 'is--current': item.isCurrent, 'is--now': item.isNow, 'is--next': item.isNext, 'is--disabled': isDateDisabled(_vm, item), 'is--selected': _ctor.default.isDateSame(dateValue, item.date, matchFormat), 'is--hover': _ctor.default.isDateSame(datePanelValue, item.date, matchFormat) }, on: { click: function click() { return _vm.dateSelectEvent(item); }, mouseenter: function mouseenter() { return _vm.dateMouseenterEvent(item); } } }, renderDateLabel(h, _vm, item, _conf.default.i18n("vxe.input.date.months.m".concat(item.month)))); })); }))])]; } function renderDateYearTable(h, _vm) { var dateValue = _vm.dateValue, datePanelType = _vm.datePanelType, yearDatas = _vm.yearDatas, datePanelValue = _vm.datePanelValue; var matchFormat = 'yyyy'; return [h('table', { class: "vxe-input--date-".concat(datePanelType, "-view"), attrs: { cellspacing: 0, cellpadding: 0, border: 0 } }, [h('tbody', yearDatas.map(function (rows) { return h('tr', rows.map(function (item) { return h('td', { class: { 'is--disabled': isDateDisabled(_vm, item), 'is--current': item.isCurrent, 'is--now': item.isNow, 'is--selected': _ctor.default.isDateSame(dateValue, item.date, matchFormat), 'is--hover': _ctor.default.isDateSame(datePanelValue, item.date, matchFormat) }, on: { click: function click() { return _vm.dateSelectEvent(item); }, mouseenter: function mouseenter() { return _vm.dateMouseenterEvent(item); } } }, renderDateLabel(h, _vm, item, item.year)); })); }))])]; } function renderDateTable(h, _vm) { var datePanelType = _vm.datePanelType; switch (datePanelType) { case 'week': return renderDateWeekTable(h, _vm); case 'month': return renderDateMonthTable(h, _vm); case 'year': return renderDateYearTable(h, _vm); } return renderDateDayTable(h, _vm); } function renderDatePanel(h, _vm) { var datePanelType = _vm.datePanelType, selectDatePanelLabel = _vm.selectDatePanelLabel, isDisabledPrevDateBtn = _vm.isDisabledPrevDateBtn, isDisabledNextDateBtn = _vm.isDisabledNextDateBtn; return [h('div', { class: 'vxe-input--date-picker-header' }, [h('div', { class: 'vxe-input--date-picker-type-wrapper' }, [datePanelType === 'year' ? h('span', { class: 'vxe-input--date-picker-label' }, selectDatePanelLabel) : h('span', { class: 'vxe-input--date-picker-btn', on: { click: _vm.dateToggleTypeEvent } }, selectDatePanelLabel)]), h('div', { class: 'vxe-input--date-picker-btn-wrapper' }, [h('span', { class: ['vxe-input--date-picker-btn vxe-input--date-picker-prev-btn', { 'is--disabled': isDisabledPrevDateBtn }], on: { click: _vm.datePrevEvent } }, [h('i', { class: 'vxe-icon--caret-left' })]), h('span', { class: 'vxe-input--date-picker-btn vxe-input--date-picker-current-btn', on: { click: _vm.dateTodayMonthEvent } }, [h('i', { class: 'vxe-icon--dot' })]), h('span', { class: ['vxe-input--date-picker-btn vxe-input--date-picker-next-btn', { 'is--disabled': isDisabledNextDateBtn }], on: { click: _vm.dateNextEvent } }, [h('i', { class: 'vxe-icon--caret-right' })])])]), h('div', { class: 'vxe-input--date-picker-body' }, renderDateTable(h, _vm))]; } function renderTimePanel(h, _vm) { var dateTimeLabel = _vm.dateTimeLabel, datetimePanelValue = _vm.datetimePanelValue, hourList = _vm.hourList, minuteList = _vm.minuteList, secondList = _vm.secondList; return [h('div', { class: 'vxe-input--time-picker-header' }, [h('span', { class: 'vxe-input--time-picker-title' }, dateTimeLabel), h('button', { class: 'vxe-input--time-picker-confirm', attrs: { type: 'button' }, on: { click: _vm.dateConfirmEvent } }, _conf.default.i18n('vxe.button.confirm'))]), h('div', { ref: 'timeBody', class: 'vxe-input--time-picker-body' }, [h('ul', { class: 'vxe-input--time-picker-hour-list' }, hourList.map(function (item, index) { return h('li', { key: index, class: { 'is--selected': datetimePanelValue && datetimePanelValue.getHours() === item.value }, on: { click: function click(evnt) { return _vm.dateHourEvent(evnt, item); } } }, item.label); })), h('ul', { class: 'vxe-input--time-picker-minute-list' }, minuteList.map(function (item, index) { return h('li', { key: index, class: { 'is--selected': datetimePanelValue && datetimePanelValue.getMinutes() === item.value }, on: { click: function click(evnt) { return _vm.dateMinuteEvent(evnt, item); } } }, item.label); })), h('ul', { class: 'vxe-input--time-picker-second-list' }, secondList.map(function (item, index) { return h('li', { key: index, class: { 'is--selected': datetimePanelValue && datetimePanelValue.getSeconds() === item.value }, on: { click: function click(evnt) { return _vm.dateSecondEvent(evnt, item); } } }, item.label); }))])]; } function renderPanel(h, _vm) { var type = _vm.type, vSize = _vm.vSize, isDatePicker = _vm.isDatePicker, transfer = _vm.transfer, animatVisible = _vm.animatVisible, visiblePanel = _vm.visiblePanel, panelPlacement = _vm.panelPlacement, panelStyle = _vm.panelStyle; var renders = []; if (isDatePicker) { var _ref; if (type === 'datetime') { renders.push(h('div', { class: 'vxe-input--panel-layout-wrapper' }, [h('div', { class: 'vxe-input--panel-left-wrapper' }, renderDatePanel(h, _vm)), h('div', { class: 'vxe-input--panel-right-wrapper' }, renderTimePanel(h, _vm))])); } else if (type === 'time') { renders.push(h('div', { class: 'vxe-input--panel-wrapper' }, renderTimePanel(h, _vm))); } else { renders.push(h('div', { class: 'vxe-input--panel-wrapper' }, renderDatePanel(h, _vm))); } return h('div', { ref: 'panel', class: ['vxe-table--ignore-clear vxe-input--panel', "type--".concat(type), (_ref = {}, _defineProperty(_ref, "size--".concat(vSize), vSize), _defineProperty(_ref, 'is--transfer', transfer), _defineProperty(_ref, 'animat--leave', animatVisible), _defineProperty(_ref, 'animat--enter', visiblePanel), _ref)], attrs: { 'data-placement': panelPlacement }, style: panelStyle }, renders); } return null; } function renderNumberIcon(h, _vm) { return h('span', { class: 'vxe-input--number-suffix' }, [h('span', { class: 'vxe-input--number-prev is--prev', on: { mousedown: _vm.numberMousedownEvent, mouseup: _vm.numberStopDown, mouseleave: _vm.numberStopDown } }, [h('i', { class: ['vxe-input--number-prev-icon', _conf.default.icon.INPUT_PREV_NUM] })]), h('span', { class: 'vxe-input--number-next is--next', on: { mousedown: _vm.numberMousedownEvent, mouseup: _vm.numberStopDown, mouseleave: _vm.numberStopDown } }, [h('i', { class: ['vxe-input--number-next-icon', _conf.default.icon.INPUT_NEXT_NUM] })])]); } function renderDatePickerIcon(h, _vm) { return h('span', { class: 'vxe-input--date-picker-suffix', on: { click: _vm.datePickerOpenEvent } }, [h('i', { class: ['vxe-input--date-picker-icon', _conf.default.icon.INPUT_DATE] })]); } function renderSearchIcon(h, _vm) { return h('span', { class: 'vxe-input--search-suffix', on: { click: _vm.searchEvent } }, [h('i', { class: ['vxe-input--search-icon', _conf.default.icon.INPUT_SEARCH] })]); } function renderPasswordIcon(h, _vm) { var showPwd = _vm.showPwd; return h('span', { class: 'vxe-input--password-suffix', on: { click: _vm.passwordToggleEvent } }, [h('i', { class: ['vxe-input--password-icon', showPwd ? _conf.default.icon.INPUT_SHOW_PWD : _conf.default.icon.INPUT_PWD] })]); } function rendePrefixIcon(h, _vm) { var $scopedSlots = _vm.$scopedSlots, prefixIcon = _vm.prefixIcon; var icons = []; if ($scopedSlots.prefix) { icons.push(h('span', { class: 'vxe-input--prefix-icon' }, $scopedSlots.prefix.call(this, {}, h))); } else if (prefixIcon) { icons.push(h('i', { class: ['vxe-input--prefix-icon', prefixIcon] })); } return icons.length ? h('span', { class: 'vxe-input--prefix', on: { click: _vm.clickPrefixEvent } }, icons) : null; } function renderSuffixIcon(h, _vm) { var $scopedSlots = _vm.$scopedSlots, value = _vm.value, isClearable = _vm.isClearable, disabled = _vm.disabled, suffixIcon = _vm.suffixIcon; var icons = []; if ($scopedSlots.suffix) { icons.push(h('span', { class: 'vxe-input--suffix-icon' }, $scopedSlots.suffix.call(this, {}, h))); } else if (suffixIcon) { icons.push(h('i', { class: ['vxe-input--suffix-icon', suffixIcon] })); } if (isClearable) { icons.push(h('i', { class: ['vxe-input--clear-icon', _conf.default.icon.INPUT_CLEAR] })); } return icons.length ? h('span', { class: ['vxe-input--suffix', { 'is--clear': isClearable && !disabled && !(value === '' || _ctor.default.eqNull(value)) }], on: { click: _vm.clickSuffixEvent } }, icons) : null; } function renderExtraSuffixIcon(h, _vm) { var controls = _vm.controls, isPassword = _vm.isPassword, isNumber = _vm.isNumber, isDatePicker = _vm.isDatePicker, isSearch = _vm.isSearch; var icons; if (controls) { if (isPassword) { icons = renderPasswordIcon(h, _vm); } else if (isNumber) { icons = renderNumberIcon(h, _vm); } else if (isDatePicker) { icons = renderDatePickerIcon(h, _vm); } else if (isSearch) { icons = renderSearchIcon(h, _vm); } } return icons ? h('span', { class: 'vxe-input--extra-suffix' }, [icons]) : null; } var _default2 = { name: 'VxeInput', mixins: [_size.default], props: { value: [String, Number, Date], name: String, type: { type: String, default: 'text' }, clearable: { type: Boolean, default: function _default() { return _conf.default.input.clearable; } }, readonly: Boolean, disabled: Boolean, placeholder: String, maxlength: [String, Number], autocomplete: { type: String, default: 'off' }, align: String, form: String, size: { type: String, default: function _default() { return _conf.default.input.size || _conf.default.size; } }, // number、integer、float min: { type: [String, Number], default: null }, max: { type: [String, Number], default: null }, step: [String, Number], // number、integer、float、password controls: { type: Boolean, default: function _default() { return _conf.default.input.controls; } }, // float digits: { type: [String, Number], default: function _default() { return _conf.default.input.digits; } }, // date、week、month、year dateConfig: Object, minDate: { type: [String, Number, Date], default: function _default() { return _conf.default.input.minDate; } }, maxDate: { type: [String, Number, Date], default: function _default() { return _conf.default.input.maxDate; } }, startWeek: { type: Number, default: function _default() { return _conf.default.input.startWeek; } }, labelFormat: { type: String, default: function _default() { return _conf.default.input.labelFormat; } }, valueFormat: { type: String, default: function _default() { return _conf.default.input.valueFormat; } }, editable: { type: Boolean, default: true }, festivalMethod: { type: Function, default: function _default() { return _conf.default.input.festivalMethod; } }, disabledMethod: { type: Function, default: function _default() { return _conf.default.input.disabledMethod; } }, prefixIcon: String, suffixIcon: String, placement: String, transfer: { type: Boolean, default: function _default() { return _conf.default.input.transfer; } } }, data: function data() { return { panelIndex: 0, showPwd: false, visiblePanel: false, animatVisible: false, panelStyle: null, panelPlacement: null, isActivated: false, inputValue: '', datetimePanelValue: null, datePanelValue: null, datePanelLabel: '', datePanelType: 'day', selectMonth: null, currentDate: null }; }, computed: { isNumber: function isNumber() { return ['number', 'integer', 'float'].indexOf(this.type) > -1; }, isDatePicker: function isDatePicker() { return this.hasTime || ['date', 'week', 'month', 'year'].indexOf(this.type) > -1; }, hasTime: function hasTime() { var type = this.type; return type === 'time' || type === 'datetime'; }, isPassword: function isPassword() { return this.type === 'password'; }, isSearch: function isSearch() { return this.type === 'search'; }, stepValue: function stepValue() { var type = this.type, step = this.step; if (type === 'integer') { return _ctor.default.toInteger(step) || 1; } else if (type === 'float') { return _ctor.default.toNumber(step) || 1 / Math.pow(10, this.digitsValue); } return _ctor.default.toNumber(step) || 1; }, digitsValue: function digitsValue() { return _ctor.default.toInteger(this.digits) || 1; }, isClearable: function isClearable() { return this.clearable && (this.isPassword || this.isNumber || this.isDatePicker || this.type === 'text' || this.type === 'search'); }, isDisabledPrevDateBtn: function isDisabledPrevDateBtn() { var selectMonth = this.selectMonth, dateMinTime = this.dateMinTime; if (selectMonth) { return selectMonth <= dateMinTime; } return false; }, isDisabledNextDateBtn: function isDisabledNextDateBtn() { var selectMonth = this.selectMonth, dateMaxTime = this.dateMaxTime; if (selectMonth) { return selectMonth >= dateMaxTime; } return false; }, dateMinTime: function dateMinTime() { return this.minDate ? _ctor.default.toStringDate(this.minDate) : null; }, dateMaxTime: function dateMaxTime() { return this.maxDate ? _ctor.default.toStringDate(this.maxDate) : null; }, dateValue: function dateValue() { var value = this.value, isDatePicker = this.isDatePicker, type = this.type, dateValueFormat = this.dateValueFormat; var val = null; if (value && isDatePicker) { var date; if (type === 'time') { date = toStringTimeDate(value); } else { date = _ctor.default.toStringDate(value, dateValueFormat); } if (_ctor.default.isValidDate(date)) { val = date; } } return val; }, dateTimeLabel: function dateTimeLabel() { var datetimePanelValue = this.datetimePanelValue; if (datetimePanelValue) { return _ctor.default.toDateString(datetimePanelValue, 'HH:mm:ss'); } return ''; }, hmsTime: function hmsTime() { var dateValue = this.dateValue; return dateValue && this.hasTime ? (dateValue.getHours() * 3600 + dateValue.getMinutes() * 60 + dateValue.getSeconds()) * 1000 : 0; }, dateLabelFormat: function dateLabelFormat() { if (this.isDatePicker) { return this.labelFormat || _conf.default.i18n("vxe.input.date.labelFormat.".concat(this.type)); } return null; }, dateValueFormat: function dateValueFormat() { var type = this.type; return type === 'time' ? 'HH:mm:ss' : this.valueFormat || (type === 'datetime' ? 'yyyy-MM-dd HH:mm:ss' : 'yyyy-MM-dd'); }, selectDatePanelLabel: function selectDatePanelLabel() { if (this.isDatePicker) { var datePanelType = this.datePanelType, selectMonth = this.selectMonth, yearList = this.yearList; var year = ''; var month; if (selectMonth) { year = selectMonth.getFullYear(); month = selectMonth.getMonth() + 1; } if (datePanelType === 'month') { return _conf.default.i18n('vxe.input.date.monthLabel', [year]); } else if (datePanelType === 'year') { return yearList.length ? "".concat(yearList[0].year, " - ").concat(yearList[yearList.length - 1].year) : ''; } return _conf.default.i18n('vxe.input.date.dayLabel', [year, month ? _conf.default.i18n("vxe.input.date.m".concat(month)) : '-']); } return ''; }, weekDatas: function weekDatas() { var weeks = []; if (this.isDatePicker) { var sWeek = _ctor.default.toNumber(this.startWeek); weeks.push(sWeek); for (var index = 0; index < 6; index++) { if (sWeek >= 6) { sWeek = 0; } else { sWeek++; } weeks.push(sWeek); } } return weeks; }, dateHeaders: function dateHeaders() { if (this.isDatePicker) { return this.weekDatas.map(function (day) { return { value: day, label: _conf.default.i18n("vxe.input.date.weeks.w".concat(day)) }; }); } return []; }, weekHeaders: function weekHeaders() { if (this.isDatePicker) { return [{ label: _conf.default.i18n('vxe.input.date.weeks.w') }].concat(this.dateHeaders); } return []; }, yearList: function yearList() { var selectMonth = this.selectMonth, currentDate = this.currentDate; var months = []; if (selectMonth && currentDate) { var currFullYear = currentDate.getFullYear(); var startYear = new Date(('' + selectMonth.getFullYear()).replace(/\d{1}$/, '0'), 0, 1); for (var index = -10; index < yearSize - 10; index++) { var date = _ctor.default.getWhatYear(startYear, index, 'first'); var itemFullYear = date.getFullYear(); months.push({ date: date, isCurrent: true, isNow: currFullYear === itemFullYear, year: itemFullYear }); } } return months; }, yearDatas: function yearDatas() { return _ctor.default.chunk(this.yearList, 4); }, monthList: function monthList() { var selectMonth = this.selectMonth, currentDate = this.currentDate; var months = []; if (selectMonth && currentDate) { var currFullYear = currentDate.getFullYear(); var currMonth = currentDate.getMonth(); var selFullYear = _ctor.default.getWhatYear(selectMonth, 0, 'first').getFullYear(); for (var index = -4; index < monthSize - 4; index++) { var date = _ctor.default.getWhatYear(selectMonth, 0, index); var itemFullYear = date.getFullYear(); var itemMonth = date.getMonth(); var isPrev = itemFullYear < selFullYear; months.push({ date: date, isPrev: isPrev, isCurrent: itemFullYear === selFullYear, isNow: itemFullYear === currFullYear && itemMonth === currMonth, isNext: !isPrev && itemFullYear > selFullYear, month: itemMonth }); } } return months; }, monthDatas: function monthDatas() { return _ctor.default.chunk(this.monthList, 4); }, dayList: function dayList() { var weekDatas = this.weekDatas, selectMonth = this.selectMonth, currentDate = this.currentDate, hmsTime = this.hmsTime; var days = []; if (selectMonth && currentDate) { var currFullYear = currentDate.getFullYear(); var currMonth = currentDate.getMonth(); var currDate = currentDate.getDate(); var selFullYear = selectMonth.getFullYear(); var selMonth = selectMonth.getMonth(); var selDay = selectMonth.getDay(); var prevOffsetDate = -weekDatas.indexOf(selDay); var startDate = new Date(_ctor.default.getWhatDay(selectMonth, prevOffsetDate).getTime() + hmsTime); for (var index = 0; index < 42; index++) { var date = _ctor.default.getWhatDay(startDate, index); var itemFullYear = date.getFullYear(); var itemMonth = date.getMonth(); var itemDate = date.getDate(); var isPrev = date < selectMonth; days.push({ date: date, isPrev: isPrev, isCurrent: itemFullYear === selFullYear && itemMonth === selMonth, isNow: itemFullYear === currFullYear && itemMonth === currMonth && itemDate === currDate, isNext: !isPrev && selMonth !== itemMonth, label: itemDate }); } } return days; }, dayDatas: function dayDatas() { return _ctor.default.chunk(this.dayList, 7); }, weekDates: function weekDates() { return this.dayDatas.map(function (list) { var firstItem = list[0]; var item = { date: firstItem.date, isWeekNumber: true, isPrev: false, isCurrent: false, isNow: false, isNext: false, label: _ctor.default.getYearWeek(firstItem.date) }; return [item].concat(list); }); }, hourList: function hourList() { var list = []; if (this.hasTime) { for (var index = 0; index < 24; index++) { list.push({ value: index, label: ('' + index).padStart(2, 0) }); } } return list; }, minuteList: function minuteList() { var list = []; if (this.hasTime) { for (var index = 0; index < 60; index++) { list.push({ value: index, label: ('' + index).padStart(2, 0) }); } } return list; }, secondList: function secondList() { return this.minuteList; }, inpAttrs: function inpAttrs() { var isDatePicker = this.isDatePicker, isNumber = this.isNumber, isPassword = this.isPassword, type = this.type, name = this.name, placeholder = this.placeholder, readonly = this.readonly, disabled = this.disabled, maxlength = this.maxlength, form = this.form, autocomplete = this.autocomplete, showPwd = this.showPwd, editable = this.editable; var inputType = type; if (isDatePicker || isNumber || isPassword && showPwd || type === 'number') { inputType = 'text'; } var attrs = { name: name, form: form, type: inputType, placeholder: placeholder, maxlength: isNumber && !_ctor.default.toNumber(maxlength) ? 16 : maxlength, // 数值最大长度限制 16 位,包含小数 readonly: readonly || type === 'week' || !editable, disabled: disabled, autocomplete: autocomplete }; if (placeholder) { attrs.placeholder = _tools.UtilTools.getFuncText(placeholder); } return attrs; }, inpEvents: function inpEvents() { var _this = this; var evnts = {}; _ctor.default.each(this.$listeners, function (cb, name) { if (['change', 'clear', 'prefix-click', 'suffix-click'].indexOf(name) === -1) { evnts[name] = _this.triggerEvent; } }); if (this.isNumber) { evnts.keydown = this.keydownEvent; evnts[wheelName] = this.mousewheelEvent; } else if (this.isDatePicker) { evnts.click = this.clickEvent; } evnts.input = this.inputEvent; evnts.focus = this.focusEvent; evnts.blur = this.blurEvent; return evnts; } }, watch: { value: function value() { this.changeValue(); }, dateLabelFormat: function dateLabelFormat() { this.dateParseValue(this.datePanelValue); this.inputValue = this.datePanelLabel; } }, created: function created() { this.initValue(); _tools.GlobalEvent.on(this, 'mousewheel', this.handleGlobalMousewheelEvent); _tools.GlobalEvent.on(this, 'mousedown', this.handleGlobalMousedownEvent); _tools.GlobalEvent.on(this, 'keydown', this.handleGlobalKeydownEvent); _tools.GlobalEvent.on(this, 'blur', this.handleGlobalBlurEvent); }, mounted: function mounted() { if (this.dateConfig) { _tools.UtilTools.warn('vxe.error.removeProp', ['date-config']); } if (this.isDatePicker) { if (this.transfer) { document.body.appendChild(this.$refs.panel); } } }, beforeDestroy: function beforeDestroy() { var panelElem = this.$refs.panel; if (panelElem && panelElem.parentNode) { panelElem.parentNode.removeChild(panelElem); } }, destroyed: function destroyed() { this.numberStopDown(); _tools.GlobalEvent.off(this, 'mousewheel'); _tools.GlobalEvent.off(this, 'mousedown'); _tools.GlobalEvent.off(this, 'keydown'); _tools.GlobalEvent.off(this, 'blur'); }, render: function render(h) { var _ref2; var controls = this.controls, isDatePicker = this.isDatePicker, visiblePanel = this.visiblePanel, isActivated = this.isActivated, vSize = this.vSize, type = this.type, align = this.align, readonly = this.readonly, disabled = this.disabled; var childs = []; var prefix = rendePrefixIcon(h, this); var suffix = renderSuffixIcon(h, this); // 前缀图标 if (prefix) { childs.push(prefix); } // 输入框 childs.push(isDatePicker ? renderDateInput(h, this) : renderDefaultInput(h, this)); // 后缀图标 if (suffix) { childs.push(suffix); } // 特殊功能图标 childs.push(renderExtraSuffixIcon(h, this)); // 面板容器 if (isDatePicker) { childs.push(renderPanel(h, this)); } return h('div', { class: ['vxe-input', "type--".concat(type), (_ref2 = {}, _defineProperty(_ref2, "size--".concat(vSize), vSize), _defineProperty(_ref2, "is--".concat(align), align), _defineProperty(_ref2, 'is--controls', controls), _defineProperty(_ref2, 'is--prefix', !!prefix), _defineProperty(_ref2, 'is--suffix', !!suffix), _defineProperty(_ref2, 'is--readonly', readonly), _defineProperty(_ref2, 'is--visivle', visiblePanel), _defineProperty(_ref2, 'is--disabled', disabled), _defineProperty(_ref2, 'is--active', isActivated), _ref2)] }, childs); }, methods: { focus: function focus() { this.isActivated = true; this.$refs.input.focus(); return this.$nextTick(); }, blur: function blur() { this.$refs.input.blur(); this.isActivated = false; return this.$nextTick(); }, triggerEvent: function triggerEvent(evnt) { var $refs = this.$refs, value = this.value; this.$emit(evnt.type, { $panel: $refs.panel, value: value, $event: evnt }); }, emitUpdate: function emitUpdate(value, evnt) { if (_ctor.default.toString(this.value) !== value) { this.$emit('input', value); this.$emit('change', { value: value, $event: evnt }); } }, inputEvent: function inputEvent(evnt) { var isDatePicker = this.isDatePicker; var value = evnt.target.value; this.inputValue = value; if (!isDatePicker) { this.emitUpdate(value, evnt); } }, focusEvent: function focusEvent(evnt) { this.isActivated = true; this.triggerEvent(evnt); }, blurEvent: function blurEvent(evnt) { this.afterCheckValue(); if (!this.visiblePanel) { this.isActivated = false; } this.triggerEvent(evnt); }, keydownEvent: function keydownEvent(evnt) { if (this.isNumber) { var isCtrlKey = evnt.ctrlKey; var isShiftKey = evnt.shiftKey; var isAltKey = evnt.altKey; var keyCode = evnt.keyCode; if (!isCtrlKey && !isShiftKey && !isAltKey && (keyCode === 32 || keyCode >= 65 && keyCode <= 90)) { evnt.preventDefault(); } this.numberKeydownEvent(evnt); } this.triggerEvent(evnt); }, mousewheelEvent: function mousewheelEvent(evnt) { if (this.isNumber && this.controls) { if (this.isActivated) { var delta = -evnt.wheelDelta || evnt.detail; if (delta > 0) { this.numberNextEvent(evnt); } else if (delta < 0) { this.numberPrevEvent(evnt); } evnt.preventDefault(); } } }, clickEvent: function clickEvent(evnt) { var isDatePicker = this.isDatePicker; if (isDatePicker) { this.datePickerOpenEvent(evnt); } this.triggerEvent(evnt); }, clickPrefixEvent: function clickPrefixEvent(evnt) { var $refs = this.$refs, disabled = this.disabled, value = this.value; if (!disabled) { this.$emit('prefix-click', { $panel: $refs.panel, value: value, $event: evnt }); } }, clickSuffixEvent: function clickSuffixEvent(evnt) { var $refs = this.$refs, disabled = this.disabled, value = this.value; if (!disabled) { if (_tools.DomTools.hasClass(evnt.currentTarget, 'is--clear')) { this.emitUpdate('', evnt); this.clearValueEvent(evnt, ''); } else { this.$emit('suffix-click', { $panel: $refs.panel, value: value, $event: evnt }); } } }, clearValueEvent: function clearValueEvent(evnt, value) { var $refs = this.$refs, type = this.type, isNumber = this.isNumber; if (this.isDatePicker) { this.hidePanel(); } if (isNumber || ['text', 'search', 'password'].indexOf(type) > -1) { this.focus(); } this.$emit('clear', { $panel: $refs.panel, value: value, $event: evnt }); }, /** * 检查初始值 */ initValue: function initValue() { var type = this.type, isDatePicker = this.isDatePicker, value = this.value, digitsValue = this.digitsValue; if (isDatePicker) { this.changeValue(); } else if (type === 'float') { if (value) { var validValue = _ctor.default.toFixed(_ctor.default.floor(value, digitsValue), digitsValue); if (value !== validValue) { this.emitUpdate(validValue, { type: 'init' }); } } } }, /** * 值变化时处理 */ changeValue: function changeValue() { if (this.isDatePicker) { this.dateParseValue(this.value); this.inputValue = this.datePanelLabel; } }, afterCheckValue: function afterCheckValue() { var type = this.type, inpAttrs = this.inpAttrs, value = this.value, inputValue = this.inputValue, isDatePicker = this.isDatePicker, isNumber = this.isNumber, datetimePanelValue = this.datetimePanelValue, dateLabelFormat = this.dateLabelFormat, min = this.min, max = this.max, digitsValue = this.digitsValue; if (!inpAttrs.readonly) { if (isNumber) { if (value) { var inpVal = type === 'integer' ? _ctor.default.toInteger(value) : _ctor.default.toNumber(value); if (!this.vaildMinNum(inpVal)) { inpVal = min; } else if (!this.vaildMaxNum(inpVal)) { inpVal = max; } this.emitUpdate(type === 'float' ? _ctor.default.toFixed(_ctor.default.floor(inpVal, digitsValue), digitsValue) : _ctor.default.toString(inpVal), { type: 'check' }); } } else if (isDatePicker) { var _inpVal = inputValue; if (_inpVal) { if (type === 'time') { _inpVal = toStringTimeDate(_inpVal, dateLabelFormat); } else { _inpVal = _ctor.default.toStringDate(_inpVal, dateLabelFormat); } if (_ctor.default.isValidDate(_inpVal)) { if (type === 'time') { _inpVal = _ctor.default.toDateString(_inpVal, dateLabelFormat); if (value !== _inpVal) { this.emitUpdate(_inpVal, { type: 'check' }); } this.inputValue = _inpVal; } else { if (!_ctor.default.isDateSame(value, _inpVal, dateLabelFormat)) { if (type === 'datetime') { datetimePanelValue.setHours(_inpVal.getHours()); datetimePanelValue.setMinutes(_inpVal.getMinutes()); datetimePanelValue.setSeconds(_inpVal.getSeconds()); } this.dateChange(_inpVal); } else { this.inputValue = _ctor.default.toDateString(value, dateLabelFormat); } } } else { this.dateRevert(); } } else { this.emitUpdate('', { type: 'check' }); } } } }, // 密码 passwordToggleEvent: function passwordToggleEvent(evnt) { var disabled = this.disabled, readonly = this.readonly, showPwd = this.showPwd; if (!disabled && !readonly) { this.showPwd = !showPwd; } this.$emit('toggle-visible', { visible: this.showPwd, $event: evnt }); }, // 密码 // 搜索 searchEvent: function searchEvent(evnt) { this.$emit('search-click', { $event: evnt }); }, // 搜索 // 数值 vaildMinNum: function vaildMinNum(num) { return this.min === null || num >= _ctor.default.toNumber(this.min); }, vaildMaxNum: function vaildMaxNum(num) { return this.max === null || num <= _ctor.default.toNumber(this.max); }, numberStopDown: function numberStopDown() { clearTimeout(this.downbumTimeout); }, numberDownPrevEvent: function numberDownPrevEvent(evnt) { var _this2 = this; this.downbumTimeout = setTimeout(function () { _this2.numberPrevEvent(evnt); _this2.numberDownPrevEvent(evnt); }, 60); }, numberDownNextEvent: function numberDownNextEvent(evnt) { var _this3 = this; this.downbumTimeout = setTimeout(function () { _this3.numberNextEvent(evnt); _this3.numberDownNextEvent(evnt); }, 60); }, numberKeydownEvent: function numberKeydownEvent(evnt) { var keyCode = evnt.keyCode; var isUpArrow = keyCode === 38; var isDwArrow = keyCode === 40; if (isUpArrow || isDwArrow) { evnt.preventDefault(); if (isUpArrow) { this.numberPrevEvent(evnt); } else { this.numberNextEvent(evnt); } } }, numberMousedownEvent: function numberMousedownEvent(evnt) { var _this4 = this; this.numberStopDown(); if (evnt.button === 0) { var isPrevNumber = _tools.DomTools.hasClass(evnt.currentTarget, 'is--prev'); if (isPrevNumber) { this.numberPrevEvent(evnt); } else { this.numberNextEvent(evnt); } this.downbumTimeout = setTimeout(function () { if (isPrevNumber) { _this4.numberDownPrevEvent(evnt); } else { _this4.numberDownNextEvent(evnt); } }, 500); } }, numberPrevEvent: function numberPrevEvent(evnt) { var disabled = this.disabled, readonly = this.readonly; clearTimeout(this.downbumTimeout); if (!disabled && !readonly) { this.numberChange(true, evnt); } this.$emit('prev-number', { $event: evnt }); }, numberNextEvent: function numberNextEvent(evnt) { var disabled = this.disabled, readonly = this.readonly; clearTimeout(this.downbumTimeout); if (!disabled && !readonly) { this.numberChange(false, evnt); } this.$emit('next-number', { $event: evnt }); }, numberChange: function numberChange(isPlus, evnt) { var type = this.type, digitsValue = this.digitsValue, value = this.value, stepValue = this.stepValue; var inputValue = type === 'integer' ? _ctor.default.toInteger(value) : _ctor.default.toNumber(value); var newValue = isPlus ? _ctor.default.add(inputValue, stepValue) : _ctor.default.subtract(inputValue, stepValue); if (this.vaildMinNum(newValue) && this.vaildMaxNum(newValue)) { this.emitUpdate(type === 'float' ? _ctor.default.toFixed(_ctor.default.floor(newValue, digitsValue), digitsValue) : _ctor.default.toString(newValue), evnt); } }, // 数值 // 日期 datePickerOpenEvent: function datePickerOpenEvent(evnt) { evnt.preventDefault(); this.showPanel(); }, dateMonthHandle: function dateMonthHandle(date, offsetMonth) { this.selectMonth = _ctor.default.getWhatMonth(date, offsetMonth, 'first'); }, dateNowHandle: function dateNowHandle() { var currentDate = _ctor.default.getWhatDay(Date.now(), 0, 'first'); this.currentDate = currentDate; this.dateMonthHandle(currentDate, 0); }, dateToggleTypeEvent: function dateToggleTypeEvent() { var datePanelType = this.datePanelType; if (datePanelType === 'month') { datePanelType = 'year'; } else { datePanelType = 'month'; } this.datePanelType = datePanelType; }, datePrevEvent: function datePrevEvent(evnt) { var isDisabledPrevDateBtn = this.isDisabledPrevDateBtn, type = this.type, datePanelType = this.datePanelType; if (!isDisabledPrevDateBtn) { if (type === 'year') { this.selectMonth = _ctor.default.getWhatYear(this.selectMonth, -yearSize, 'first'); } else if (type === 'month') { if (datePanelType === 'year') { this.selectMonth = _ctor.default.getWhatYear(this.selectMonth, -yearSize, 'first'); } else { this.selectMonth = _ctor.default.getWhatYear(this.selectMonth, -1, 'first'); } } else { if (datePanelType === 'year') { this.selectMonth = _ctor.default.getWhatYear(this.selectMonth, -yearSize, 'first'); } else if (datePanelType === 'month') { this.selectMonth = _ctor.default.getWhatYear(this.selectMonth, -1, 'first'); } else { this.selectMonth = _ctor.default.getWhatMonth(this.selectMonth, -1, 'first'); } } this.$emit('date-prev', { type: type, $event: evnt }); } }, dateTodayMonthEvent: function dateTodayMonthEvent(evnt) { this.dateNowHandle(); this.dateChange(this.currentDate); this.hidePanel(); this.$emit('date-today', { type: this.type, $event: evnt }); }, dateNextEvent: function dateNextEvent(evnt) { var isDisabledNextDateBtn = this.isDisabledNextDateBtn, type = this.type, datePanelType = this.datePanelType; if (!isDisabledNextDateBtn) { if (type === 'year') { this.selectMonth = _ctor.default.getWhatYear(this.selectMonth, yearSize, 'first'); } else if (type === 'month') { if (datePanelType === 'year') { this.selectMonth = _ctor.default.getWhatYear(this.selectMonth, yearSize, 'first'); } else { this.selectMonth = _ctor.default.getWhatYear(this.selectMonth, 1, 'first'); } } else { if (datePanelType === 'year') { this.selectMonth = _ctor.default.getWhatYear(this.selectMonth, yearSize, 'first'); } else if (datePanelType === 'month') { this.selectMonth = _ctor.default.getWhatYear(this.selectMonth, 1, 'first'); } else { this.selectMonth = _ctor.default.getWhatMonth(this.selectMonth, 1, 'first'); } } this.$emit('date-next', { type: type, $event: evnt }); } }, dateSelectEvent: function dateSelectEvent(item) { if (!isDateDisabled(this, item)) { this.dateSelectItem(item.date); } }, dateSelectItem: function dateSelectItem(date) { var type = this.type, datePanelType = this.datePanelType; if (type === 'month') { if (datePanelType === 'year') { this.datePanelType = 'month