diff --git a/README.md b/README.md index 7912c44..c6d798d 100644 --- a/README.md +++ b/README.md @@ -66,5 +66,7 @@ Tips > - 校验成功会返回API请求的所有参数,在parmas中 > - 校验失败会自动抛出 `WecException` 异常 +> - 修改lCalender插件, 位于`src`目录下 + #### lisence MIT diff --git a/package.json b/package.json index 8ea2aee..d3dc9e0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wec-tools", - "version": "0.0.7", + "version": "0.0.9", "description": "wec-tools", "main": "src/index.js", "files": [ diff --git a/src/lCalendar.js b/src/lCalendar.js new file mode 100644 index 0000000..6713bc5 --- /dev/null +++ b/src/lCalendar.js @@ -0,0 +1,850 @@ +/* + * lCalendar日期控件 + * + * 作者:黄磊 + * + * 邮箱:xfhxbb@yeah.net + * + * Copyright 2016 + * + * 创建于:2016-01-08 + * + * 修改者 董浩 + * 修改时间 2019-09-10 + * 修改内容 1. 添加成功确认的回掉 + * 2. 支持选择范围的设置 + */ +window.lCalendar = (function() { + var MobileCalendar = function() { + this.gearDate; + this.minY = 1900; + this.minM = 1, + this.minD = 1, + this.maxY = 2099, + this.maxM = 12, + this.maxD = 31, + this.minH = 0, // 最小小时 + this.minm = 0, // 最小分钟 + this.minS = 0, // 最小秒 + this.maxH = 23, // 最大小时 + this.maxm = 59, // 最大分钟 + this.maxS = 59, // 最大秒 + this.access_max_year = false // 达到年最大值 + this.access_min_year = false // 达到年最小值 + this.access_max_month = false + this.access_min_month = false + this.access_max_day = false + this.access_min_day = false + this.access_max_hour = false + this.access_min_hour = false + this.access_max_minute= false + this.access_min_minute = false + this.aceess_max_second = false + this.access_min_second = false + } + MobileCalendar.prototype = { + /** + * 设置选择框的时间选择范围 + * @param {DateTime} start 开始时间 + * @param {Datetime} end 结束时间 + */ + set:function(start,end){ + start = start || '1970-01-01 00:00:00' + // console.log(start,end) + var startArr = start.split(' ') + var minArr = startArr[0].split('-') + this.minY = ~~minArr[0]; + this.minM = ~~minArr[1]; + this.minD = ~~minArr[2]; + + var maxTimeArr = startArr[1].split(':') + this.maxH = ~~maxTimeArr[0] + this.maxm = ~~maxTimeArr[1] + this.maxS = ~~maxTimeArr[2] + + var maxArr = end.split(' ')[0].split('-'); + this.maxY = ~~maxArr[0]; + this.maxM = ~~maxArr[1]; + this.maxD = ~~maxArr[2]; + + }, + init: function(params) { + this.type = params.type; + this.submitCallBack= params.submitCallBack + this.trigger = document.querySelector(params.trigger); + if (this.trigger.getAttribute("data-lcalendar") != null) { + var arr = this.trigger.getAttribute("data-lcalendar").split(','); + var minArr = arr[0].split('-'); + this.minY = ~~minArr[0]; + this.minM = ~~minArr[1]; + this.minD = ~~minArr[2]; + var maxArr = arr[1].split('-'); + this.maxY = ~~maxArr[0]; + this.maxM = ~~maxArr[1]; + this.maxD = ~~maxArr[2]; + } + this.bindEvent(this.type); + }, + bindEvent: function(type) { + var _self = this; + //呼出日期插件 + function popupDate(e) { + _self.gearDate = document.createElement("div"); + _self.gearDate.className = "gearDate"; + _self.gearDate.innerHTML = '
' + + '
' + + '
取消
' + + '
确定
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
'; + document.body.appendChild(_self.gearDate); + dateCtrlInit(); + var lcalendar_cancel = _self.gearDate.querySelector(".lcalendar_cancel"); + lcalendar_cancel.addEventListener('touchstart', closeMobileCalendar); + var lcalendar_finish = _self.gearDate.querySelector(".lcalendar_finish"); + lcalendar_finish.addEventListener('touchstart', finishMobileDate); + var date_yy = _self.gearDate.querySelector(".date_yy"); + var date_mm = _self.gearDate.querySelector(".date_mm"); + var date_dd = _self.gearDate.querySelector(".date_dd"); + date_yy.addEventListener('touchstart', gearTouchStart); + date_mm.addEventListener('touchstart', gearTouchStart); + date_dd.addEventListener('touchstart', gearTouchStart); + date_yy.addEventListener('touchmove', gearTouchMove); + date_mm.addEventListener('touchmove', gearTouchMove); + date_dd.addEventListener('touchmove', gearTouchMove); + date_yy.addEventListener('touchend', gearTouchEnd); + date_mm.addEventListener('touchend', gearTouchEnd); + date_dd.addEventListener('touchend', gearTouchEnd); + } + //初始化年月日插件默认值 + function dateCtrlInit() { + var rs; + var date = new Date(); + var dateArr = { + yy: date.getYear(), + mm: date.getMonth(), + dd: date.getDate() - 1 + }; + if (/^\d{4}-\d{1,2}-\d{1,2}$/.test(_self.trigger.value)) { + rs = _self.trigger.value.match(/(^|-)\d{1,4}/g); + dateArr.yy = rs[0] - _self.minY; + dateArr.mm = rs[1].replace(/-/g, "") - 1; + dateArr.dd = rs[2].replace(/-/g, "") - 1; + } else { + dateArr.yy = dateArr.yy + 1900 - _self.minY; + } + _self.gearDate.querySelector(".date_yy").setAttribute("val", dateArr.yy); + _self.gearDate.querySelector(".date_mm").setAttribute("val", dateArr.mm); + _self.gearDate.querySelector(".date_dd").setAttribute("val", dateArr.dd); + setDateGearTooth(); + } + //呼出日期+时间插件 + function popupDateTime(e) { + _self.gearDate = document.createElement("div"); + _self.gearDate.className = "gearDatetime"; + _self.gearDate.innerHTML = '
' + + '
' + + '
取消
' + + '
确定
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + //date_roll + '
' + //date_roll_mask + '
'; + document.body.appendChild(_self.gearDate); + dateTimeCtrlInit(); + var lcalendar_cancel = _self.gearDate.querySelector(".lcalendar_cancel"); + lcalendar_cancel.addEventListener('touchstart', closeMobileCalendar); + var lcalendar_finish = _self.gearDate.querySelector(".lcalendar_finish"); + lcalendar_finish.addEventListener('touchstart', finishMobileDateTime); + var date_yy = _self.gearDate.querySelector(".date_yy"); + var date_mm = _self.gearDate.querySelector(".date_mm"); + var date_dd = _self.gearDate.querySelector(".date_dd"); + var time_hh = _self.gearDate.querySelector(".time_hh"); + var time_mm = _self.gearDate.querySelector(".time_mm"); + date_yy.addEventListener('touchstart', gearTouchStart); + date_mm.addEventListener('touchstart', gearTouchStart); + date_dd.addEventListener('touchstart', gearTouchStart); + time_hh.addEventListener('touchstart', gearTouchStart); + time_mm.addEventListener('touchstart', gearTouchStart); + date_yy.addEventListener('touchmove', gearTouchMove); + date_mm.addEventListener('touchmove', gearTouchMove); + date_dd.addEventListener('touchmove', gearTouchMove); + time_hh.addEventListener('touchmove', gearTouchMove); + time_mm.addEventListener('touchmove', gearTouchMove); + date_yy.addEventListener('touchend', gearTouchEnd); + date_mm.addEventListener('touchend', gearTouchEnd); + date_dd.addEventListener('touchend', gearTouchEnd); + time_hh.addEventListener('touchend', gearTouchEnd); + time_mm.addEventListener('touchend', gearTouchEnd); + } + //初始化年月日时分插件默认值 + function dateTimeCtrlInit() { + var rs; + var date = new Date(); + var dateArr = { + yy: date.getYear(), + mm: date.getMonth(), + dd: date.getDate() - 1, + hh: date.getHours(), + mi: date.getMinutes() + }; + if (/^\d{4}-\d{1,2}-\d{1,2}\s\d{2}:\d{2}$/.test(_self.trigger.value)) { + rs = _self.trigger.value.match(/(^|-|\s|:)\d{1,4}/g); + dateArr.yy = rs[0] - _self.minY; + dateArr.mm = rs[1].replace(/-/g, "") - 1; + dateArr.dd = rs[2].replace(/-/g, "") - 1; + dateArr.hh = parseInt(rs[3].replace(/\s0?/g, "")); + dateArr.mi = parseInt(rs[4].replace(/:0?/g, "")); + } else { + dateArr.yy = dateArr.yy + 1900 - _self.minY; + } + _self.gearDate.querySelector(".date_yy").setAttribute("val", dateArr.yy); + _self.gearDate.querySelector(".date_mm").setAttribute("val", dateArr.mm); + _self.gearDate.querySelector(".date_dd").setAttribute("val", dateArr.dd); + setDateGearTooth(); + _self.gearDate.querySelector(".time_hh").setAttribute("val", dateArr.hh); + _self.gearDate.querySelector(".time_mm").setAttribute("val", dateArr.mi); + setTimeGearTooth(); + } + //呼出时间插件 + function popupTime(e) { + _self.gearDate = document.createElement("div"); + _self.gearDate.className = "gearDate"; + _self.gearDate.innerHTML = '
' + + '
' + + '
取消
' + + '
确定
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
'; + document.body.appendChild(_self.gearDate); + timeCtrlInit(); + var lcalendar_cancel = _self.gearDate.querySelector(".lcalendar_cancel"); + lcalendar_cancel.addEventListener('touchstart', closeMobileCalendar); + var lcalendar_finish = _self.gearDate.querySelector(".lcalendar_finish"); + lcalendar_finish.addEventListener('touchstart', finishMobileTime); + var time_hh = _self.gearDate.querySelector(".time_hh"); + var time_mm = _self.gearDate.querySelector(".time_mm"); + var time_ss = _self.gearDate.querySelector(".time_ss"); + time_hh.addEventListener('touchstart', gearTouchStart); + time_mm.addEventListener('touchstart', gearTouchStart); + time_ss.addEventListener('touchstart', gearTouchStart); + + time_hh.addEventListener('touchmove', gearTouchMove); + time_mm.addEventListener('touchmove', gearTouchMove); + time_ss.addEventListener('touchmove', gearTouchMove); + + time_hh.addEventListener('touchend', gearTouchEnd); + time_mm.addEventListener('touchend', gearTouchEnd); + time_ss.addEventListener('touchend', gearTouchEnd); + + + } + //初始化时分插件默认值 + function timeCtrlInit() { + var rs; + var d = new Date(); + var e = { + hh: d.getHours(), + mm: d.getMinutes(), + ss: d.getSeconds() + }; + if (/^\d{2}:\d{2}:\d{2}$/.test(_self.trigger.value)) { + rs = _self.trigger.value.match(/(^|:)\d{2}/g); + e.hh = parseInt(rs[0].replace(/^0?/g, "")); + e.mm = parseInt(rs[1].replace(/:0?/g, "")); + e.ss = parseInt(rs[2].replace(/:0?/g, "")); + } + + //alert(e.ss); 测试用 + _self.gearDate.querySelector(".time_hh").setAttribute("val", e.hh); + _self.gearDate.querySelector(".time_mm").setAttribute("val", e.mm); + _self.gearDate.querySelector(".time_ss").setAttribute("val", e.ss); + setTimeGearTooth(); + } + /** + * 重置日期节点个数 + **/ + function setDateGearTooth() { + var passY = _self.maxY - _self.minY + 1; + var date_yy = _self.gearDate.querySelector(".date_yy"); + var itemStr = ""; + if (date_yy && date_yy.getAttribute("val")) { + //得到年份的值 + var yyVal = parseInt(date_yy.getAttribute("val")); + //p 当前节点前后需要展示的节点个数 + for (var p = 0; p <= passY - 1; p++) { + itemStr += "
" + (_self.minY + p) + "
"; + } + date_yy.innerHTML = itemStr; + var top = Math.floor(parseFloat(date_yy.getAttribute('top'))); + if (!isNaN(top)) { + top % 2 == 0 ? (top = top) : (top = top + 1); + top > 8 && (top = 8); + var minTop = 8 - (passY - 1) * 2; + top < minTop && (top = minTop); + date_yy.style["-webkit-transform"] = 'translate3d(0,' + top + 'em,0)'; + date_yy.setAttribute('top', top + 'em'); + yyVal = Math.abs(top - 8) / 2; + date_yy.setAttribute("val", yyVal); + } else { + date_yy.style["-webkit-transform"] = 'translate3d(0,' + (8 - yyVal * 2) + 'em,0)'; + date_yy.setAttribute('top', 8 - yyVal * 2 + 'em'); + } + } else { + return; + } + var date_mm = _self.gearDate.querySelector(".date_mm"); + if (date_mm && date_mm.getAttribute("val")) { + itemStr = ""; + //得到月份的值 + var mmVal = parseInt(date_mm.getAttribute("val")); + var maxM = 11; + var minM = 0; + _self.access_min_year = false + _self.access_max_year = false + //当年份到达最大值 + if (yyVal == passY - 1) { + maxM = _self.maxM - 1; + _self.access_max_year = true + } + //当年份到达最小值 + if (yyVal == 0) { + minM = _self.minM - 1; + _self.access_min_year = true + } + //p 当前节点前后需要展示的节点个数 + for (var p = 0; p < maxM - minM + 1; p++) { + itemStr += "
" + (minM + p + 1) + "
"; + } + date_mm.innerHTML = itemStr; + if (mmVal > maxM) { + mmVal = maxM; + date_mm.setAttribute("val", mmVal); + } else if (mmVal < minM) { + mmVal = maxM; + date_mm.setAttribute("val", mmVal); + } + date_mm.style["-webkit-transform"] = 'translate3d(0,' + (8 - (mmVal - minM) * 2) + 'em,0)'; + date_mm.setAttribute('top', 8 - (mmVal - minM) * 2 + 'em'); + } else { + return; + } + var date_dd = _self.gearDate.querySelector(".date_dd"); + if (date_dd && date_dd.getAttribute("val")) { + itemStr = ""; + //得到日期的值 + var ddVal = parseInt(date_dd.getAttribute("val")); + //返回月份的天数 + var maxMonthDays = calcDays(yyVal, mmVal); + //p 当前节点前后需要展示的节点个数 + var maxD = maxMonthDays - 1; + var minD = 0; + _self.access_max_month = false + _self.access_min_month = false + //当年份月份到达最大值 + if (yyVal == passY - 1 && _self.maxM == mmVal + 1) { + maxD = _self.maxD - 1; + _self.access_max_month = true + } + //当年、月到达最小值 + if (yyVal == 0 && _self.minM == mmVal + 1) { + minD = _self.minD - 1; + _self.access_min_month = true + } + for (var p = 0; p < maxD - minD + 1; p++) { + itemStr += "
" + (minD + p + 1) + "
"; + } + date_dd.innerHTML = itemStr; + _self.access_max_day = false + _self.access_min_day = false + + if (ddVal >= maxD) { + ddVal = maxD; + _self.access_max_day = true + date_dd.setAttribute("val", ddVal); + } else if (ddVal <= minD) { + ddVal = minD; + _self.access_min_day = true + date_dd.setAttribute("val", ddVal); + } + date_dd.style["-webkit-transform"] = 'translate3d(0,' + (8 - (ddVal - minD) * 2) + 'em,0)'; + date_dd.setAttribute('top', 8 - (ddVal - minD) * 2 + 'em'); + setTimeGearTooth() + } else { + return; + } + } + /** + * 重置时间节点个数 + */ + function setTimeGearTooth() { + // console.log('我来重置时间选择器了。。。',_self) + var time_hh = _self.gearDate.querySelector(".time_hh"); + if (time_hh && time_hh.getAttribute("val")) { + var i = "", min_h=0,max_h=23; + var hhVal = parseInt(time_hh.getAttribute("val")); + let translateCount = hhVal + + // 如果年月日都到最大值,时 也只能在最大最小之间 + if(_self.access_max_year && _self.access_max_month && _self.access_max_day){ + min_h = _self.minH; + max_h = _self.maxH; + if(hhVal>=_self.maxH){ + hhVal = _self.maxH + } + + if(hhVal<=_self.minH){ + hhVal = _self.minH + } + + translateCount = hhVal + time_hh.setAttribute("val", hhVal); + + // console.log('年月日都到了 最大值', hhVal, min_h, max_h, _self.maxH); + }else{ + max_h = 23 + min_h = 0 + } + for (var g = min_h; g <= max_h; g++) { + i += "
" + g + "
"; + } + time_hh.innerHTML = i; + + time_hh.style["-webkit-transform"] = 'translate3d(0,' + (8 - (translateCount) * 2) + 'em,0)'; + time_hh.setAttribute('top', 8 - (translateCount) * 2 + 'em'); + } else { + return + } + var time_mm = _self.gearDate.querySelector(".time_mm"); + var mmVal = parseInt(time_mm.getAttribute("val")); + var translateCount = mmVal + var hhVal = time_hh.getAttribute("val") + // console.log('当前小时,最大小时',hhVal,_self.maxH) + var min_mm = 0,max_mm = 59 + _self.access_max_hour = false + // 小时达到最大 + if(hhVal>=_self.maxH){ + _self.access_max_hour = true + } + if(_self.access_max_year&&_self.access_max_month&&_self.access_max_day&&_self.access_max_hour){ + max_mm = _self.maxm + if(mmVal>=_self.maxm){ + mmVal = _self.maxm + translateCount = mmVal + time_mm.setAttribute("val", mmVal); + } + }else { + max_mm = 59 + } + if (time_mm && time_mm.getAttribute("val")) { + var i = ""; + + for (var g = min_mm; g <= max_mm; g++) { + i += "
" + g + "
"; + } + time_mm.innerHTML = i; + time_mm.style["-webkit-transform"] = 'translate3d(0,' + (8 -(translateCount) * 2) + 'em,0)'; + time_mm.setAttribute('top', 8 - (translateCount) * 2 + 'em'); + } else { + return + } + + var time_ss = _self.gearDate.querySelector(".time_ss"); + if (time_ss && time_ss.getAttribute("val")) { + var i = ""; + var mmVal = parseInt(time_ss.getAttribute("val")); + for (var g = 0; g <= 59; g++) { + i += "
" + g + "
"; + } + time_ss.innerHTML = i; + time_ss.style["-webkit-transform"] = 'translate3d(0,' + (8 - mmVal * 2) + 'em,0)'; + time_ss.setAttribute('top', 8 - mmVal * 2 + 'em'); + } else { + return + } + } + //求月份最大天数 + function calcDays(year, month) { + if (month == 1) { + year += _self.minY; + if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0 && year % 4000 != 0)) { + return 29; + } else { + return 28; + } + } else { + if (month == 3 || month == 5 || month == 8 || month == 10) { + return 30; + } else { + return 31; + } + } + } + //触摸开始 + function gearTouchStart(e) { + e.preventDefault(); + var target = e.target; + while (true) { + if (!target.classList.contains("gear")) { + target = target.parentElement; + } else { + break + } + } + clearInterval(target["int_" + target.id]); + target["old_" + target.id] = e.targetTouches[0].screenY; + target["o_t_" + target.id] = (new Date()).getTime(); + var top = target.getAttribute('top'); + if (top) { + target["o_d_" + target.id] = parseFloat(top.replace(/em/g, "")); + } else { + target["o_d_" + target.id] = 0; + } + } + //手指移动 + function gearTouchMove(e) { + e.preventDefault(); + var target = e.target; + while (true) { + if (!target.classList.contains("gear")) { + target = target.parentElement; + } else { + break + } + } + target["new_" + target.id] = e.targetTouches[0].screenY; + target["n_t_" + target.id] = (new Date()).getTime(); + //var f = (target["new_" + target.id] - target["old_" + target.id]) * 18 / target.clientHeight; + var f = (target["new_" + target.id] - target["old_" + target.id]) * 18 / 370; + target["pos_" + target.id] = target["o_d_" + target.id] + f; + target.style["-webkit-transform"] = 'translate3d(0,' + target["pos_" + target.id] + 'em,0)'; + target.setAttribute('top', target["pos_" + target.id] + 'em'); + } + //离开屏幕 + function gearTouchEnd(e) { + e.preventDefault(); + var target = e.target; + while (true) { + if (!target.classList.contains("gear")) { + target = target.parentElement; + } else { + break; + } + } + var flag = (target["new_" + target.id] - target["old_" + target.id]) / (target["n_t_" + target.id] - target["o_t_" + target.id]); + if (Math.abs(flag) <= 0.2) { + target["spd_" + target.id] = (flag < 0 ? -0.08 : 0.08); + } else { + if (Math.abs(flag) <= 0.5) { + target["spd_" + target.id] = (flag < 0 ? -0.16 : 0.16); + } else { + target["spd_" + target.id] = flag / 2; + } + } + if (!target["pos_" + target.id]) { + target["pos_" + target.id] = 0; + } + rollGear(target); + } + /** + * 缓动效果 + **/ + function rollGear(target) { + var d = 0; + var stopGear = false; + var passY = _self.maxY - _self.minY + 1; + clearInterval(target["int_" + target.id]); + target["int_" + target.id] = setInterval(function() { + var pos = target["pos_" + target.id]; + var speed = target["spd_" + target.id] * Math.exp(-0.03 * d); + pos += speed; + if (Math.abs(speed) > 0.1) {} else { + speed = 0.1; + var b = Math.round(pos / 2) * 2; + if (Math.abs(pos - b) < 0.02) { + stopGear = true; + } else { + if (pos > b) { + pos -= speed + } else { + pos += speed + } + } + } + if (pos > 8) { + pos = 8; + stopGear = true; + } + switch (target.dataset.datetype) { + case "date_yy": + var minTop = 8 - (passY - 1) * 2; + if (pos < minTop) { + pos = minTop; + stopGear = true; + } + if (stopGear) { + var gearVal = Math.abs(pos - 8) / 2; + setGear(target, gearVal); + clearInterval(target["int_" + target.id]); + } + break; + case "date_mm": + var date_yy = _self.gearDate.querySelector(".date_yy"); + //得到年份的值 + var yyVal = parseInt(date_yy.getAttribute("val")); + var maxM = 11; + var minM = 0; + //当年份到达最大值 + if (yyVal == passY - 1) { + maxM = _self.maxM - 1; + } + //当年份到达最小值 + if (yyVal == 0) { + minM = _self.minM - 1; + } + var minTop = 8 - (maxM - minM) * 2; + if (pos < minTop) { + pos = minTop; + stopGear = true; + } + if (stopGear) { + var gearVal = Math.abs(pos - 8) / 2 + minM; + setGear(target, gearVal); + clearInterval(target["int_" + target.id]); + } + break; + case "date_dd": + var date_yy = _self.gearDate.querySelector(".date_yy"); + var date_mm = _self.gearDate.querySelector(".date_mm"); + //得到年份的值 + var yyVal = parseInt(date_yy.getAttribute("val")); + //得到月份的值 + var mmVal = parseInt(date_mm.getAttribute("val")); + //返回月份的天数 + var maxMonthDays = calcDays(yyVal, mmVal); + var maxD = maxMonthDays - 1; + var minD = 0; + //当年份月份到达最大值 + if (yyVal == passY - 1 && _self.maxM == mmVal + 1) { + maxD = _self.maxD - 1; + } + //当年、月到达最小值 + if (yyVal == 0 && _self.minM == mmVal + 1) { + minD = _self.minD - 1; + } + var minTop = 8 - (maxD - minD) * 2; + if (pos < minTop) { + pos = minTop; + stopGear = true; + } + if (stopGear) { + var gearVal = Math.abs(pos - 8) / 2 + minD; + setGear(target, gearVal); + clearInterval(target["int_" + target.id]); + } + break; + case "time_hh": + var maxHH = 23,minHH=0; + if(_self.access_max_year && _self.access_max_month &&_self.access_max_day){ + maxHH = _self.maxH + } + var minTop = 8 - (maxHH - minHH) * 2; + if (pos < minTop) { + pos = minTop;// -38 + stopGear = true; + } + + if (stopGear) { + var gearVal = Math.abs(pos - 8) / 2; + setGear(target, gearVal); + clearInterval(target["int_" + target.id]); + } + break; + case "time_mm": + var max_mm = 59,min_mm=0; + if(_self.access_max_year && _self.access_max_month &&_self.access_max_day && _self.access_max_hour){ + max_mm = _self.maxm + } + var minTop = 8 - (max_mm - min_mm) * 2; + if (pos < minTop) { + pos = minTop;// -110 + stopGear = true; + } + // if (pos < -110) { + // pos = -110; + // stopGear = true; + // } + if (stopGear) { + var gearVal = Math.abs(pos - 8) / 2; + setGear(target, gearVal); + clearInterval(target["int_" + target.id]); + } + break; + case "time_ss": + if (pos < -110) { + pos = -110; + stopGear = true; + } + if (stopGear) { + var gearVal = Math.abs(pos - 8) / 2; + setGear(target, gearVal); + clearInterval(target["int_" + target.id]); + } + break; + default: + } + target["pos_" + target.id] = pos; + target.style["-webkit-transform"] = 'translate3d(0,' + pos + 'em,0)'; + target.setAttribute('top', pos + 'em'); + d++; + }, 30); + } + /** + *控制插件滚动后停留的值 + **/ + function setGear(target, val) { + val = Math.round(val); + target.setAttribute("val", val); + // console.log('设置值了' , target.dataset.datetype, val) + if (/date/.test(target.dataset.datetype)) { + setDateGearTooth(); + } else { + setTimeGearTooth(); + } + } + //取消 + function closeMobileCalendar(e) { + e.preventDefault(); + var evt = new CustomEvent('input'); + _self.trigger.dispatchEvent(evt); + document.body.removeChild(_self.gearDate); + } + //日期确认 + function finishMobileDate(e) { + var passY = _self.maxY - _self.minY + 1; + var date_yy = parseInt(Math.round(_self.gearDate.querySelector(".date_yy").getAttribute("val"))); + var date_mm = parseInt(Math.round(_self.gearDate.querySelector(".date_mm").getAttribute("val"))) + 1; + date_mm = date_mm > 9 ? date_mm : '0' + date_mm; + var date_dd = parseInt(Math.round(_self.gearDate.querySelector(".date_dd").getAttribute("val"))) + 1; + date_dd = date_dd > 9 ? date_dd : '0' + date_dd; + _self.trigger.value = (date_yy % passY + _self.minY) + "-" + date_mm + "-" + date_dd; + closeMobileCalendar(e); + typeof _self.submitCallBack == "function" && _self.submitCallBack(_self.trigger.value) + } + //日期时间确认 + function finishMobileDateTime(e) { + var passY = _self.maxY - _self.minY + 1; + var date_yy = parseInt(Math.round(_self.gearDate.querySelector(".date_yy").getAttribute("val"))); + var date_mm = parseInt(Math.round(_self.gearDate.querySelector(".date_mm").getAttribute("val"))) + 1; + date_mm = date_mm > 9 ? date_mm : '0' + date_mm; + var date_dd = parseInt(Math.round(_self.gearDate.querySelector(".date_dd").getAttribute("val"))) + 1; + date_dd = date_dd > 9 ? date_dd : '0' + date_dd; + var time_hh = parseInt(Math.round(_self.gearDate.querySelector(".time_hh").getAttribute("val"))); + time_hh = time_hh > 9 ? time_hh : '0' + time_hh; + var time_mm = parseInt(Math.round(_self.gearDate.querySelector(".time_mm").getAttribute("val"))); + time_mm = time_mm > 9 ? time_mm : '0' + time_mm; + _self.trigger.value = (date_yy % passY + _self.minY) + "-" + date_mm + "-" + date_dd + " " + (time_hh.length < 2 ? "0" : "") + time_hh + (time_mm.length < 2 ? ":0" : ":") + time_mm; + typeof _self.submitCallBack == "function" && _self.submitCallBack(_self.trigger.value) + closeMobileCalendar(e); + } + //时间确认 + function finishMobileTime(e) { + var time_hh = parseInt(Math.round(_self.gearDate.querySelector(".time_hh").getAttribute("val"))); + time_hh = time_hh > 9 ? time_hh : '0' + time_hh; + var time_mm = parseInt(Math.round(_self.gearDate.querySelector(".time_mm").getAttribute("val"))); + time_mm = time_mm > 9 ? time_mm : '0' + time_mm; + + var time_ss = parseInt(Math.round(_self.gearDate.querySelector(".time_ss").getAttribute("val"))); + time_ss = time_ss > 9 ? time_ss : '0' + time_ss; + + + _self.trigger.value = (time_hh.length < 2 ? "0" : "") + time_hh + (time_mm.length < 2 ? ":0" : ":") + time_mm+ (time_ss.length < 2 ? ":0" : ":") + time_ss; + typeof _self.submitCallBack == "function" && _self.submitCallBack(_self.trigger.value) + closeMobileCalendar(e); + } + _self.trigger.addEventListener('click', { + "date": popupDate, + "datetime": popupDateTime, + "time": popupTime + }[type]); + } + } + return MobileCalendar; +})() +export default lCalendar diff --git a/src/pakages/wec-validator/index.js b/src/pakages/wec-validator/index.js index 0ef3b23..38c1192 100644 --- a/src/pakages/wec-validator/index.js +++ b/src/pakages/wec-validator/index.js @@ -20,13 +20,6 @@ class WecValidator { this.errors = {} } - // this.data = { - // body: ctx.request.body, // body -> body - // query: ctx.request.query, // query -> query - // path: ctx.params, // params -> path - // header: ctx.request.header // header -> header - // }; - /** * 校验所有的参数 * @param {Object} ctx 需要校验的对象上下文 @@ -39,14 +32,12 @@ class WecValidator { this.validators.funs = this.getAllMethodNames(this) // 所有的自定义属性 this.validators.vals = this.getAllProperties(this) - // console.log(this.validators.vals) // 处理校验 await this.handleCheck() if (Object.keys(this.errors).length > 0) { throw new WecException(this.errors, 40004) } - return this.data } @@ -61,15 +52,21 @@ class WecValidator { // 获取到rules let rules = _this[key] // 获取所有需要验证的规则 let ruleValue = _this.data[key] //获取该字段的输入值 + let defaultValue = '' let isOptional = rules[0].valiateFunction === 'isOptional' if (isOptional) { + defaultValue = rules[0].options rules.splice(0, 1) if (ruleValue !== null && ruleValue !== undefined && ruleValue !== '') { rules.forEach(rule => { if (!validator[rule.valiateFunction](ruleValue, rule.options)) { _this.setErrors(key, rule.msg) + } else if (rule.valiateFunction == 'isInt') { + _this.data[key] = parseInt(ruleValue) } }) + } else { + _this.data[key] = defaultValue } } else { if (ruleValue === null || ruleValue === undefined || ruleValue === '') {