import { shortcut, Widget, extend, createWidget, getDate, bind, Controller, isKey, HTapeLayout, CenterAdaptLayout, Layout, each, isNotEmptyString, checkDateVoid, parseInt } from "@/core"; import { YearCalendar } from "@/case"; import { IconButton, Navigation } from "@/base"; @shortcut() export class StaticYearCard extends Widget { static xtype = "bi.static_year_card"; static EVENT_CHANGE = "EVENT_CHANGE"; _defaultConfig() { return extend(super._defaultConfig(...arguments), { baseCls: "bi-year-card", behaviors: {}, min: "1900-01-01", // 最小日期 max: "2099-12-31", // 最大日期 }); } _createYearCalendar(v) { const o = this.options, y = this._year; const calendar = createWidget({ type: YearCalendar.xtype, behaviors: o.behaviors, min: o.min, max: o.max, logic: { dynamic: true, }, year: y + v * 12, }); calendar.setValue(this._year); return calendar; } _init() { super._init(...arguments); const o = this.options; this.selectedYear = this._year = getDate().getFullYear(); this.backBtn = createWidget({ type: IconButton.xtype, cls: "pre-page-h-font", width: 25, height: 25, value: -1, listeners: [ { eventName: IconButton.EVENT_CHANGE, action :() => { this.navigation.setSelect( this.navigation.getSelect() - 1 ); this._checkLeftValid(); this._checkRightValid(); }, } ], }); this.preBtn = createWidget({ type: IconButton.xtype, cls: "next-page-h-font", width: 25, height: 25, value: 1, listeners: [ { eventName: IconButton.EVENT_CHANGE, action :() => { this.navigation.setSelect( this.navigation.getSelect() + 1 ); this._checkLeftValid(); this._checkRightValid(); }, } ], }); this.navigation = createWidget({ type: Navigation.xtype, direction: "top", element: this, single: true, logic: { dynamic: true, }, tab: { type: HTapeLayout.xtype, cls: "bi-split-top bi-split-bottom", height: 30, items: [ { el: { type: CenterAdaptLayout.xtype, items: [this.backBtn], }, width: 25, }, { type: Layout.xtype, }, { el: { type: CenterAdaptLayout.xtype, items: [this.preBtn], }, width: 25, } ], }, cardCreator: bind(this._createYearCalendar, this), afterCardShow: () => { this.navigation.setValue(this.selectedYear); // var calendar = this.getSelectedCard(); // this.backBtn.setEnable(!calendar.isFrontYear()); // this.preBtn.setEnable(!calendar.isFinalYear()); }, }); this.navigation.on(Navigation.EVENT_CHANGE, () => { this.selectedYear = this.navigation.getValue(); this.fireEvent(Controller.EVENT_CHANGE, ...arguments); this.fireEvent(StaticYearCard.EVENT_CHANGE, this.selectedYear); }); if (isKey(o.value)) { this.setValue(o.value); } } _checkLeftValid() { const valid = true; this.backBtn.setEnable(valid); return valid; } _checkRightValid() { const valid = true; this.preBtn.setEnable(valid); return valid; } _checkMin() { const o = this.options; each(this.navigation.getAllCard(), (idx, calendar) => { calendar.setMinDate(o.min); }); } _checkMax() { const o = this.options; each(this.navigation.getAllCard(), (idx, calendar) => { calendar.setMaxDate(o.max); }); } setMinDate(minDate) { if (isNotEmptyString(this.options.min)) { this.options.min = minDate; this._checkLeftValid(); this._checkRightValid(); this._checkMin(); } } setMaxDate(maxDate) { if (isNotEmptyString(this.options.max)) { this.options.max = maxDate; this._checkLeftValid(); this._checkRightValid(); this._checkMax(); } } getValue() { return { year: this.selectedYear, }; } setValue(obj) { const o = this.options; obj = obj || {}; let v = obj.year; if (checkDateVoid(v, 1, 1, o.min, o.max)[0]) { v = getDate().getFullYear(); this.selectedYear = ""; this.navigation.setSelect(YearCalendar.getPageByYear(v)); this.navigation.setValue(""); } else { this.selectedYear = parseInt(v); this.navigation.setSelect(YearCalendar.getPageByYear(v)); this.navigation.setValue(this.selectedYear); } this._checkLeftValid(); this._checkRightValid(); } }