tfp
Version:
A Web UI framework for TaskBuilder
200 lines (184 loc) • 6.31 kB
JavaScript
import {FormInput} from "../controller.js";
/**
* 时间组件
* @param {[type]} dataModel [description]
*/
export default class Time extends FormInput {
constructor(__tfp, dataModel, parent) {
super(__tfp, "Time", dataModel, parent);
}
//属性
get value() { return this.dataModel.value;}
set value(value) {
this.dataModel.value = value;
if(this._jqObj) {
this._jqObj.find("input").val(value);
}
if(!this._tfp.isDesigning) {
this.valueOnChange();
this.exeEventHandler("onChange", value);
}
}
get iconUrl() {
return this._tfp.rootPath+"/src/components/time/images/icon-24-"
+this._tfp.curPage.contentColorMode+".png";
}
set iconUrl(value) {}
get showIcon() { return this.dataModel.showIcon }
set showIcon(value) {
this.dataModel.showIcon = value ? true : false;
if(this._jqObj) {
if(this.dataModel.showIcon) {
if(this._jqObj.find("img").length==0) {
this._jqObj.append("<img src=\""+this.iconUrl+"\" />");
}
} else {
this._jqObj.find("img").remove();
}
this.resetWidth();
}
}
get showSecond() { return this.dataModel.showSecond }
set showSecond(value) {
this.dataModel.showSecond = value ? true : false;
if(this._jqObj) {
this.resetWidth();
if(this.dataModel.defaultNow && this._tfp.isDesigning) {
this._jqObj.find("input").val(this.getCurTime());
}
}
}
get defaultNow() { return this.dataModel.defaultNow }
set defaultNow(value) {
this.dataModel.defaultNow = value ? true : false;
if(this._jqObj) {
if(this.dataModel.defaultNow && this._tfp.isDesigning) {
this._jqObj.find("input").val(this.getCurTime());
} else {
this._jqObj.find("input").val("");
}
}
}
resetWidth = function() {
let iptWidth = this.dataModel.showSecond ? 62 : 42;
let cptMinWidth = iptWidth;
if(this.showIcon) cptMinWidth += 30;
let cptWidth = cptMinWidth;
if(this._jqObj) {
this._jqObj.css("width", cptWidth+"px");
this._jqObj.css("min-width", cptMinWidth+"px");
this._jqObj.find("input").css("width", iptWidth+"px");
}
if(!this.dataModel.styles) this.dataModel.styles = {};
this.dataModel.styles["width"] = cptWidth+"px";
this.dataModel.styles["min-width"] = cptMinWidth+"px";
}
clear() {
this.value = "";
this.closePicker();
}
closePicker() {
$(".tfp-time-picker").remove();
$("body").unbind("click", this.closePicker);
}
showPicker() {
let offset = this._jqObj.offset();
let html = "<div class=\"tfp-time-picker\" data-cptid=\""+this.id+"\" "
+"style=\"width: "+(this.showSecond ? 152 : 102)+"px; top: "
+(offset.top+31)+"px; left:"+offset.left+"px; display:none;\">";
let vals = [];
if(this.dataModel.value) {
vals = this.dataModel.value.split(":");
} else {
vals = this.getCurTime().split(":");
}
html += "<ul data-value=\""+vals[0]+"\">";
for(var i=0;i<24;i++) {
let hour = i<10 ? "0"+i : i+"";
html += "<li";
if(hour==vals[0]) html += " style=\"background-color: #3399FF;color: #FFFFFF;\"";
html += ">"+hour+"</li>";
}
html += "</ul>";
html += "<ul data-value=\""+vals[1]+"\">";
for(var i=0;i<60;i++) {
let minute = i<10 ? "0"+i : i+"";
html += "<li";
if(minute==vals[1]) html += " style=\"background-color: #3399FF;color: #FFFFFF;\"";
html += ">"+minute+"</li>";
}
html += "</ul>";
if(this.showSecond) {
html += "<ul data-value=\""+vals[2]+"\">";
for(var i=0;i<60;i++) {
let second = i<10 ? "0"+i : i+"";
html += "<li";
if(second==vals[2]) html += " style=\"background-color: #3399FF;color: #FFFFFF;\"";
html += ">"+second+"</li>";
}
html += "</ul>";
}
html += "<div class=\"tfp-time-picker-footer\"><span>清空</span>"
+"<input type=\"button\" value=\"确定\" /></div>";
html += "</div>";
$("body").append(html);
let timePicker = $(".tfp-time-picker");
timePicker.fadeIn("slow");
timePicker.bind("click", function() {
event.stopPropagation();
});
timePicker.find("ul").each(function() {
$(this).find("li").each(function() {
$(this).click(function() {
$(this).parent().find("li").css("background-color", "");
$(this).parent().find("li").css("color", "");
$(this).css("background-color", "#3399FF");
$(this).css("color", "#FFFFFF");
$(this).parent().attr("data-value", $(this).html());
});
});
$(this).get(0).scrollTop = parseInt($(this).attr("data-value")*25);
});
let that = this;
let footer = timePicker.find(".tfp-time-picker-footer");
footer.find("span").click(function() {
that.clear();
});
footer.find("input").click(function() {
that.onCheckTime();
});
$("body").bind("click", this.closePicker);
}
onCheckTime() {
let timePicker = $(".tfp-time-picker");
let val = timePicker.find("ul").eq(0).attr("data-value");
val += ":"+timePicker.find("ul").eq(1).attr("data-value");
if(this.showSecond) val += ":"+timePicker.find("ul").eq(2).attr("data-value");
this.value = val;
this.closePicker();
}
getCurTime() {
return (new Date()).format(this.showSecond ? "HH:mm:ss" : "HH:mm");
}
render() {
super.render();
if(!this.dataModel.styles || !this.dataModel.styles.width) this.resetWidth();
}
initRuntime() {
let that = this;
this._jqObj.click(function(){
if(that.dataModel.readonly || that.dataModel.disabled) return;
if($(".tfp-time-picker").length>0) {
let cptId = $(".tfp-time-picker").attr("data-cptid");
if(cptId==that.dataModel.id) return;
that.closePicker();
}
that.showPicker();
event.stopPropagation();
});
if(this.dataModel.defaultNow && !this.dataModel.value) {
this.dataModel.value = this.getCurTime();
this._jqObj.find("input").val(this.dataModel.value);
}
}
}