forked from fanruan/fineui
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.4 KiB
143 lines
4.4 KiB
/** |
|
* Created by GUY on 2015/8/28. |
|
* @class BI.YearCalendar |
|
* @extends BI.Widget |
|
*/ |
|
BI.YearCalendar = BI.inherit(BI.Widget, { |
|
|
|
_defaultConfig: function () { |
|
var conf = BI.YearCalendar.superclass._defaultConfig.apply(this, arguments); |
|
return BI.extend(conf, { |
|
baseCls: "bi-year-calendar", |
|
behaviors: {}, |
|
logic: { |
|
dynamic: false |
|
}, |
|
min: "1900-01-01", // 最小日期 |
|
max: "2099-12-31", // 最大日期 |
|
year: null |
|
}); |
|
}, |
|
|
|
_yearCreator: function (Y) { |
|
var o = this.options; |
|
Y = Y | 0; |
|
var start = BI.YearCalendar.getStartYear(Y); |
|
var items = []; |
|
BI.each(BI.range(BI.YearCalendar.INTERVAL), function (i) { |
|
var td = {}; |
|
if (BI.checkDateVoid(start + i, 1, 1, o.min, o.max)[0]) { |
|
td.disabled = true; |
|
} |
|
td.text = start + i; |
|
items.push(td); |
|
}); |
|
return items; |
|
}, |
|
|
|
_init: function () { |
|
BI.YearCalendar.superclass._init.apply(this, arguments); |
|
var self = this, o = this.options; |
|
this.currentYear = BI.getDate().getFullYear(); |
|
var years = this._yearCreator(o.year || this.currentYear); |
|
|
|
// 纵向排列年 |
|
var len = years.length, tyears = BI.makeArray(len, ""); |
|
var map = [0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11]; |
|
BI.each(years, function (i, y) { |
|
tyears[i] = years[map[i]]; |
|
}); |
|
var items = []; |
|
items.push(tyears.slice(0, 2)); |
|
items.push(tyears.slice(2, 4)); |
|
items.push(tyears.slice(4, 6)); |
|
items.push(tyears.slice(6, 8)); |
|
items.push(tyears.slice(8, 10)); |
|
items.push(tyears.slice(10, 12)); |
|
|
|
items = BI.map(items, function (i, item) { |
|
return BI.map(item, function (j, td) { |
|
return BI.extend(td, { |
|
type: "bi.text_item", |
|
cls: "bi-list-item-active", |
|
textAlign: "center", |
|
whiteSpace: "normal", |
|
once: false, |
|
forceSelected: true, |
|
height: 24, |
|
width: 45, |
|
value: td.text, |
|
disabled: td.disabled |
|
}); |
|
}); |
|
}); |
|
|
|
this.years = BI.createWidget({ |
|
type: "bi.button_group", |
|
behaviors: o.behaviors, |
|
items: BI.createItems(items, {}), |
|
layouts: [BI.LogicFactory.createLogic("table", BI.extend({}, o.logic, { |
|
columns: 2, |
|
rows: 6, |
|
columnSize: [1 / 2, 1 / 2], |
|
rowSize: 24 |
|
})), { |
|
type: "bi.center_adapt", |
|
vgap: 1 |
|
}] |
|
}); |
|
this.years.on(BI.Controller.EVENT_CHANGE, function () { |
|
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); |
|
}); |
|
BI.createWidget(BI.extend({ |
|
element: this |
|
|
|
}, BI.LogicFactory.createLogic("vertical", BI.extend({}, o.logic, { |
|
items: BI.LogicFactory.createLogicItemsByDirection("top", this.years) |
|
})))); |
|
}, |
|
|
|
isFrontYear: function () { |
|
var o = this.options; |
|
var Y = o.year; |
|
Y = Y | 0; |
|
return !!BI.checkDateVoid(BI.YearCalendar.getStartYear(Y) - 1, 1, 1, o.min, o.max)[0]; |
|
}, |
|
|
|
isFinalYear: function () { |
|
var o = this.options, c = this._const; |
|
var Y = o.year; |
|
Y = Y | 0; |
|
return !!BI.checkDateVoid(BI.YearCalendar.getEndYear(Y) + 1, 1, 1, o.min, o.max)[0]; |
|
}, |
|
|
|
setValue: function (val) { |
|
this.years.setValue([val]); |
|
}, |
|
|
|
getValue: function () { |
|
return this.years.getValue()[0]; |
|
} |
|
}); |
|
// 类方法 |
|
BI.extend(BI.YearCalendar, { |
|
INTERVAL: 12, |
|
|
|
// 获取显示的第一年 |
|
getStartYear: function (year) { |
|
var cur = BI.getDate().getFullYear(); |
|
return year - ((year - cur + 3) % BI.YearCalendar.INTERVAL + 12) % BI.YearCalendar.INTERVAL; |
|
}, |
|
|
|
getEndYear: function (year) { |
|
return BI.YearCalendar.getStartYear(year) + BI.YearCalendar.INTERVAL - 1; |
|
}, |
|
|
|
getPageByYear: function (year) { |
|
var cur = BI.getDate().getFullYear(); |
|
year = BI.YearCalendar.getStartYear(year); |
|
return (year - cur + 3) / BI.YearCalendar.INTERVAL; |
|
} |
|
}); |
|
|
|
BI.shortcut("bi.year_calendar", BI.YearCalendar); |