UNPKG

tfp

Version:

A Web UI framework for TaskBuilder

517 lines (441 loc) 18.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _controller = require("../controller.js"); function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /** * 日期时间组件 * @param {[type]} dataModel [description] */ var DateTime = /*#__PURE__*/function (_FormInput) { (0, _inherits2["default"])(DateTime, _FormInput); var _super = _createSuper(DateTime); function DateTime(__tfp, dataModel, parent, inputType) { var _this; (0, _classCallCheck2["default"])(this, DateTime); if (inputType) { _this = _super.call(this, __tfp, inputType, dataModel, parent); } else { _this = _super.call(this, __tfp, "DateTime", dataModel, parent); } return (0, _possibleConstructorReturn2["default"])(_this); } //属性 (0, _createClass2["default"])(DateTime, [{ key: "value", get: function get() { return this.dataModel.value; }, set: function set(value) { if (value) { var date = new Date(value); if (this.type == "Date") { this.dataModel.value = date.format("yyyy-MM-dd"); } else { if (this.showSecond) { this.dataModel.value = date.format("yyyy-MM-dd HH:mm:ss"); } else { this.dataModel.value = date.format("yyyy-MM-dd HH:mm"); } } } else { this.dataModel.value = ""; } if (this._jqObj) { this._jqObj.find("input").val(this.dataModel.value); } if (!this._tfp.isDesigning) { this.valueOnChange(); if (this.dataModel.onChange) { eval(this.dataModel.onChange); } //this.exeEventHandler("onChange", this.dataModel.value); } } }, { key: "iconUrl", get: function get() { return this._tfp.rootPath + "/src/components/" + this.type.toLowerCase() + "/images/icon-24-" + this._tfp.curPage.contentColorMode + ".png"; }, set: function set(value) {} }, { key: "showIcon", get: function get() { return this.dataModel.showIcon; }, set: function set(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(); } } }, { key: "showSecond", get: function get() { return this.dataModel.showSecond; }, set: function set(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.getCurDateTime()); } } } }, { key: "defaultNow", get: function get() { return this.dataModel.defaultNow; }, set: function set(value) { this.dataModel.defaultNow = value ? true : false; if (this._jqObj) { if (this.dataModel.defaultNow && this._tfp.isDesigning) { this._jqObj.find("input").val(this.getCurDateTime()); } else { this._jqObj.find("input").val(""); } } } }, { key: "getIptWidth", value: function getIptWidth() { var iptWidth = 90; if (this.dataModel.type == "DateTime") { iptWidth = 130; if (this.dataModel.showSecond) iptWidth = 150; } return iptWidth; } }, { key: "resetWidth", value: function resetWidth() { var iptWidth = this.getIptWidth(); var cptWidth = iptWidth; if (this.showIcon) cptWidth += 30; this._jqObj.find("input").css("width", iptWidth + "px"); this._jqObj.css("width", cptWidth + "px"); this._jqObj.css("min-width", cptWidth + "px"); if (!this.dataModel.styles) this.dataModel.styles = {}; this.dataModel.styles["width"] = cptWidth + "px"; this.dataModel.styles["min-width"] = cptWidth + "px"; } }, { key: "clear", value: function clear() { this.value = ""; this.closePicker(); } }, { key: "closePicker", value: function closePicker() { $(".tfp-datetime-picker").remove(); $("body").unbind("click", this.closePicker); } }, { key: "showPicker", value: function showPicker() { var offset = this._jqObj.offset(); var val = new Date(); if (this.dataModel.value) val = new Date(this.dataModel.value); var width = 240; if (this.type == "DateTime") width = this.showSecond ? 393 : 343; var top = offset.top + 31; var left = offset.left; var docWidth = document.documentElement.clientWidth; var docHeight = document.documentElement.clientHeight; //根据页面大小自动调整显示位置 if (left + width > docWidth) { left = offset.left + this._jqObj.outerWidth() - width; if (left < 0) left = 0; } if (top + 302 > docHeight) { top = offset.top - 302; if (top < 0) top = 0; } var html = "<div class=\"tfp-datetime-picker\" data-cptid=\"" + this.id + "\" data-value=\"" + val.format("yyyy-MM-dd") + "\" style=\"top: " + top + "px; left:" + left + "px; width: " + width + "px; display:none;\">"; var imgDir = this._tfp.rootPath + "/src/components/datetime/images/"; html += "<div style=\"width:100%;height:30px;border-bottom: 1px solid #CCCCCC;\">" + "<div class=\"tfp-datetime-picker-header\">" + "<div style=\"width:16px; margin-left:5px;\" title=\"上一年\">" + "<img src=\"" + imgDir + "double-arrow-left-" + this._tfp.curPage.contentColorMode + ".png\"></div>" + "<div style=\"width:16px;\" title=\"上一月\"><img src=\"" + imgDir + "arrow-left-" + this._tfp.curPage.contentColorMode + ".png\"></div>" + "<div style=\"width:166px; text-align:center;\"><span>" + val.getFullYear() + "</span> 年 <span>" + (val.getMonth() + 1) + "</span> 月</div>" + "<div style=\"width:16px;\" title=\"下一月\"><img src=\"" + imgDir + "arrow-right-" + this._tfp.curPage.contentColorMode + ".png\"></div>" + "<div style=\"width:16px;\" title=\"下一年\"><img src=\"" + imgDir + "double-arrow-right-" + this._tfp.curPage.contentColorMode + ".png\"></div>" + "</div>"; if (this.type == "DateTime") { html += "<div class=\"tfp-datetime-picker-time-value\" " + "style=\"width: " + (this.showSecond ? 150 : 100) + "px;\">" + this.getTimeValue() + "</div>"; } html += "</div><div style=\"width:100%;height:230px;\">"; html += "<div class=\"tfp-datetime-picker-grid\">"; html += "<div class=\"tfp-datetime-picker-grid-header\">"; html += "<div>一</div><div>二</div><div>三</div><div>四</div><div>五</div><div>六</div><div>日</div>"; html += "</div>"; html += "</div>"; if (this.type == "DateTime") { html += "<div class=\"tfp-datetime-picker-time-list\" " + "style=\"width: " + (this.showSecond ? 151 : 101) + "px;\">"; html += this.getTimePickerHtml(); html += "</div>"; } html += "</div>"; html += "<div class=\"tfp-datetime-picker-footer\"><span>清空</span>" + "<span style=\"color:#003399;\">今天</span>"; if (this.type == "DateTime") html += "<input type=\"button\" value=\"确定\" />"; html += "</div></div>"; $("body").append(html); this.setDatePickerValue(val); var datetimePicker = $(".tfp-datetime-picker"); var that = this; $(".tfp-datetime-picker-header").find("img").each(function (index) { $(this).click(function () { if (index == 0) { that.toPrevYear(); } else if (index == 1) { that.toPrevMonth(); } else if (index == 2) { that.toNextMonth(); } else if (index == 3) { that.toNextYear(); } event.stopPropagation(); }); }); var footer = datetimePicker.find(".tfp-datetime-picker-footer"); footer.find("span").eq(0).click(function () { that.clear(); }); footer.find("span").eq(1).click(function () { that.toToday(); }); datetimePicker.click(function () { event.stopPropagation(); }); datetimePicker.fadeIn("slow"); if (this.type == "DateTime") { var timeList = $(".tfp-datetime-picker-time-list").find("ul"); timeList.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()); var timeValue = timeList.eq(0).attr("data-value") + ":" + timeList.eq(1).attr("data-value"); if (that.showSecond) timeValue += ":" + timeList.eq(2).attr("data-value"); $(".tfp-datetime-picker-time-value").html(timeValue); event.stopPropagation(); }); }); $(this).get(0).scrollTop = parseInt($(this).attr("data-value")) * 25; }); footer.find("input").eq(0).click(function () { that.onCheckDateTime(); }); } $("body").bind("click", this.closePicker); } }, { key: "onCheckDateTime", value: function onCheckDateTime() { var val = $(".tfp-datetime-picker").attr("data-value"); if (this.type == "DateTime") { var time = $(".tfp-datetime-picker-time-value").html(); if (!time || time == "") time = "00:00"; val += " " + time; } this.value = val; this.closePicker(); } }, { key: "setDatePickerValue", value: function setDatePickerValue(date) { $(".tfp-datetime-picker").attr("data-value", date.format("yyyy-MM-dd")); $(".tfp-datetime-picker-header").find("span").eq(0).text(date.getFullYear()); $(".tfp-datetime-picker-header").find("span").eq(1).text(date.getMonth() + 1); var firstDate = new Date(date.format("yyyy-MM-01")); var curWeek = firstDate.getDay(); if (curWeek == 0) curWeek = 7; curWeek--; if (curWeek > 0) firstDate.setDate(firstDate.getDate() - curWeek); var grid = $(".tfp-datetime-picker-grid"); grid.find(".tfp-datetime-picker-grid-row").remove(); var index = 0; for (var i = 0; i < 6; i++) { var rowHtml = "<div class=\"tfp-datetime-picker-grid-row\">"; for (var j = 0; j < 7; j++) { var dateTmp = new Date(firstDate.format("yyyy-MM-dd")); dateTmp.setDate(dateTmp.getDate() + index); var style = ""; if (dateTmp.format("yyyy-MM-dd") == date.format("yyyy-MM-dd")) { style = "color:#FFFFFF; background-color:#3366FF;"; } else if (dateTmp.format("yyyy-MM") != date.format("yyyy-MM")) { style = "color:#999999;"; } rowHtml += "<div data-value=\"" + dateTmp.format("yyyy-MM-dd") + "\" style=\"" + style + "\">" + dateTmp.format("dd") + "</div>"; index++; } rowHtml += "</div>"; grid.append(rowHtml); } var that = this; grid.find(".tfp-datetime-picker-grid-row").each(function () { $(this).find("div").click(function () { if (that.type == "DateTime") { $(".tfp-datetime-picker-grid-row").find("div").each(function () { var dateTmp = $(this).attr("data-value"); var curDate = $(".tfp-datetime-picker").attr("data-value"); if (dateTmp == curDate) { $(this).css("background-color", ""); if (dateTmp.substr(0, 7) != curDate.substr(0, 7)) { $(this).css("color", "#999999"); } else { $(this).css("color", ""); } return false; } }); $(".tfp-datetime-picker").attr("data-value", $(this).attr("data-value")); $(this).css("background-color", "#3366FF"); $(this).css("color", "#FFFFFF"); event.stopPropagation(); } else { that.value = $(this).attr("data-value"); that.closePicker(); } }); }); } }, { key: "getTimeValue", value: function getTimeValue() { var date; if (!this.dataModel.value) { date = new Date(); if (this.showSecond) { return date.format("HH:mm:ss"); } else { return date.format("HH:mm"); } } if (this.showSecond) { date = new Date(this.dataModel.value); return date.format("HH:mm:ss"); } else { date = new Date(this.dataModel.value + ":00"); return date.format("HH:mm"); } } }, { key: "getTimePickerHtml", value: function getTimePickerHtml() { var html = ""; var vals = this.getTimeValue().split(":"); html += "<ul data-value=\"" + (vals.length > 0 ? vals[0] : "00") + "\" style=\"height:230px;\">"; for (var i = 0; i < 24; i++) { var hour = i < 10 ? "0" + i : i + ""; html += "<li"; if (vals.length > 0 && hour == vals[0]) html += " style=\"background-color: #3399FF;color: #FFFFFF;\""; html += ">" + hour + "</li>"; } html += "</ul>"; html += "<ul data-value=\"" + (vals.length > 1 ? vals[1] : "00") + "\" style=\"height:230px;\">"; for (var i = 0; i < 60; i++) { var minute = i < 10 ? "0" + i : i + ""; html += "<li"; if (vals.length > 1 && minute == vals[1]) html += " style=\"background-color: #3399FF;color: #FFFFFF;\""; html += ">" + minute + "</li>"; } html += "</ul>"; if (this.showSecond) { html += "<ul data-value=\"" + (vals.length > 2 ? vals[2] : "00") + "\" style=\"height:230px;\">"; for (var i = 0; i < 60; i++) { var second = i < 10 ? "0" + i : i + ""; html += "<li"; if (vals.length > 2 && second == vals[2]) html += " style=\"background-color: #3399FF;color: #FFFFFF;\""; html += ">" + second + "</li>"; } html += "</ul>"; } return html; } }, { key: "toToday", value: function toToday() { var now = new Date(); this.setDatePickerValue(now); if (this.type == "Date") { this.value = now.format("yyyy-MM-dd"); this.closePicker(); } event.stopPropagation(); } }, { key: "toPrevYear", value: function toPrevYear() { var date = new Date($(".tfp-datetime-picker").attr("data-value")); date.setYear(date.getFullYear() - 1); this.setDatePickerValue(date); } }, { key: "toPrevMonth", value: function toPrevMonth() { var date = new Date($(".tfp-datetime-picker").attr("data-value")); date.setMonth(date.getMonth() - 1); this.setDatePickerValue(date); } }, { key: "toNextYear", value: function toNextYear() { var date = new Date($(".tfp-datetime-picker").attr("data-value")); date.setYear(date.getFullYear() + 1); this.setDatePickerValue(date); } }, { key: "toNextMonth", value: function toNextMonth() { var date = new Date($(".tfp-datetime-picker").attr("data-value")); date.setMonth(date.getMonth() + 1); this.setDatePickerValue(date); } }, { key: "getCurDateTime", value: function getCurDateTime() { if (this.type == "Date") return new Date().format("yyyy-MM-dd"); if (this.type == "DateTime") { if (this.showSecond) { return new Date().format("yyyy-MM-dd HH:mm:ss"); } else { return new Date().format("yyyy-MM-dd HH:mm"); } } } }, { key: "initRuntime", value: function initRuntime() { var that = this; this._jqObj.click(function () { if (that.dataModel.readonly || that.dataModel.disabled) return; if ($(".tfp-datetime-picker").length > 0) { var cptId = $(".tfp-datetime-picker").attr("data-cptid"); if (cptId == that.id) return; that.closePicker(); } that.showPicker(); event.stopPropagation(); }); if (this.dataModel.defaultNow && !this.dataModel.value) { this.dataModel.value = this.getCurDateTime(); this._jqObj.find("input").val(this.dataModel.value); } } }]); return DateTime; }(_controller.FormInput); exports["default"] = DateTime;