|
|
@@ -139,90 +139,97 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
setTimeout(place, 80);
|
|
|
}
|
|
|
|
|
|
- /** 截止时间:显式初始化日历(Layer 弹窗内浮层定位,不依赖 Form.bindevent 异步时机) */
|
|
|
- function procuremenBindSysRqPicker(inputSelector, eventNs) {
|
|
|
- require(['bootstrap-datetimepicker'], function () {
|
|
|
- var $el = $(inputSelector);
|
|
|
- if (!$el.length) {
|
|
|
- return;
|
|
|
+ function procuremenPad2(n) {
|
|
|
+ n = parseInt(n, 10) || 0;
|
|
|
+ return (n < 10 ? '0' : '') + n;
|
|
|
+ }
|
|
|
+
|
|
|
+ function procuremenDefaultSysRqValue() {
|
|
|
+ if (typeof moment === 'function') {
|
|
|
+ return moment().format('YYYY-MM-DD HH:mm:ss');
|
|
|
+ }
|
|
|
+ var d = new Date();
|
|
|
+ return d.getFullYear() + '-' + procuremenPad2(d.getMonth() + 1) + '-' + procuremenPad2(d.getDate())
|
|
|
+ + ' ' + procuremenPad2(d.getHours()) + ':' + procuremenPad2(d.getMinutes()) + ':00';
|
|
|
+ }
|
|
|
+
|
|
|
+ function procuremenNormalizeSysRqValue(val) {
|
|
|
+ val = (val || '').trim();
|
|
|
+ if (/^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}/.test(val)) {
|
|
|
+ if (!/:\d{2}$/.test(val)) {
|
|
|
+ val += ':00';
|
|
|
}
|
|
|
- var options = {
|
|
|
- format: ($el.data('date-format') || 'YYYY-MM-DD HH:mm:ss'),
|
|
|
- icons: {
|
|
|
- time: 'fa fa-clock-o',
|
|
|
- date: 'fa fa-calendar',
|
|
|
- up: 'fa fa-chevron-up',
|
|
|
- down: 'fa fa-chevron-down',
|
|
|
- previous: 'fa fa-chevron-left',
|
|
|
- next: 'fa fa-chevron-right',
|
|
|
- today: 'fa fa-history',
|
|
|
- clear: 'fa fa-trash',
|
|
|
- close: 'fa fa-remove'
|
|
|
- },
|
|
|
- showTodayButton: true,
|
|
|
- showClose: true
|
|
|
- };
|
|
|
- if ($el.data('DateTimePicker')) {
|
|
|
- try {
|
|
|
- $el.data('DateTimePicker').destroy();
|
|
|
- } catch (ignoreDestroy) {
|
|
|
- }
|
|
|
+ return val.replace(/^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2})(:\d{2})?$/, function (m, head, sec) {
|
|
|
+ return head + (sec || ':00');
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return procuremenDefaultSysRqValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 截止时间:日期 + 时下拉 + 分下拉 + 快捷按钮(替代整段 datetimepicker) */
|
|
|
+ function procuremenInitSysRqSplit($wrap, eventNs) {
|
|
|
+ if (!$wrap || !$wrap.length) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var $hidden = $wrap.find('input[type="hidden"][id$="-sys-rq"]');
|
|
|
+ var $date = $wrap.find('.procuremen-sys-rq-date');
|
|
|
+ var $hour = $wrap.find('.procuremen-sys-rq-hour');
|
|
|
+ var $minute = $wrap.find('.procuremen-sys-rq-minute');
|
|
|
+ if (!$hidden.length || !$date.length || !$hour.length || !$minute.length) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!$hour.children().length) {
|
|
|
+ var h, m;
|
|
|
+ for (h = 0; h < 24; h++) {
|
|
|
+ $hour.append($('<option>').val(procuremenPad2(h)).text(procuremenPad2(h)));
|
|
|
+ }
|
|
|
+ for (m = 0; m < 60; m++) {
|
|
|
+ $minute.append($('<option>').val(procuremenPad2(m)).text(procuremenPad2(m)));
|
|
|
}
|
|
|
- $el.parent().css('position', 'relative');
|
|
|
- $el.datetimepicker(options);
|
|
|
+ }
|
|
|
|
|
|
- var placePickerBesideInput = function () {
|
|
|
- var picker = $el.data('DateTimePicker');
|
|
|
- if (!picker || !picker.widget) {
|
|
|
- return;
|
|
|
- }
|
|
|
- var $w = picker.widget;
|
|
|
- var rect = $el[0].getBoundingClientRect();
|
|
|
- var gap = 12;
|
|
|
- var top = rect.top;
|
|
|
- var left = rect.right + gap;
|
|
|
- var widgetW = $w.outerWidth() || 300;
|
|
|
- var widgetH = $w.outerHeight() || 320;
|
|
|
- var vw = window.innerWidth || document.documentElement.clientWidth;
|
|
|
- var vh = window.innerHeight || document.documentElement.clientHeight;
|
|
|
- if (left + widgetW > vw - 8) {
|
|
|
- left = Math.max(8, rect.left);
|
|
|
- top = rect.bottom + 6;
|
|
|
- }
|
|
|
- if (top + widgetH > vh - 8) {
|
|
|
- top = Math.max(8, rect.top - widgetH - 6);
|
|
|
- }
|
|
|
- $w.appendTo(document.body).css({
|
|
|
- position: 'fixed',
|
|
|
- top: top + 'px',
|
|
|
- left: left + 'px',
|
|
|
- right: 'auto',
|
|
|
- bottom: 'auto',
|
|
|
- display: 'block',
|
|
|
- margin: 0
|
|
|
- });
|
|
|
- };
|
|
|
- var showPicker = function () {
|
|
|
- var picker = $el.data('DateTimePicker');
|
|
|
- if (picker) {
|
|
|
- picker.show();
|
|
|
- }
|
|
|
- };
|
|
|
- $el.off('dp.show.' + eventNs + ' dp.update.' + eventNs + ' focus.' + eventNs + ' click.' + eventNs)
|
|
|
- .on('dp.show.' + eventNs + ' dp.update.' + eventNs, function () {
|
|
|
- setTimeout(placePickerBesideInput, 0);
|
|
|
- })
|
|
|
- .on('focus.' + eventNs + ' click.' + eventNs, function () {
|
|
|
- showPicker();
|
|
|
- });
|
|
|
- $el.closest('.audit-deadline-input-wrap, .review-deadline-input-wrap')
|
|
|
- .find('.procuremen-sys-rq-addon')
|
|
|
- .off('click.' + eventNs)
|
|
|
- .on('click.' + eventNs, function (e) {
|
|
|
- e.preventDefault();
|
|
|
- showPicker();
|
|
|
- });
|
|
|
- });
|
|
|
+ var syncToHidden = function () {
|
|
|
+ var d = ($date.val() || '').trim();
|
|
|
+ var hh = $hour.val();
|
|
|
+ var mm = $minute.val();
|
|
|
+ if (d && hh !== null && hh !== undefined && mm !== null && mm !== undefined) {
|
|
|
+ $hidden.val(d + ' ' + hh + ':' + mm + ':00');
|
|
|
+ } else {
|
|
|
+ $hidden.val('');
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ var syncFromHidden = function (val) {
|
|
|
+ val = procuremenNormalizeSysRqValue(val);
|
|
|
+ var parts = val.match(/^(\d{4}-\d{2}-\d{2})\s+(\d{2}):(\d{2})/);
|
|
|
+ if (!parts) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $date.val(parts[1]);
|
|
|
+ $hour.val(parts[2]);
|
|
|
+ $minute.val(parts[3]);
|
|
|
+ };
|
|
|
+
|
|
|
+ syncFromHidden($hidden.val());
|
|
|
+ if (!$date.val()) {
|
|
|
+ syncFromHidden(procuremenDefaultSysRqValue());
|
|
|
+ syncToHidden();
|
|
|
+ }
|
|
|
+
|
|
|
+ $date.add($hour).add($minute)
|
|
|
+ .off('change.' + eventNs + ' input.' + eventNs)
|
|
|
+ .on('change.' + eventNs + ' input.' + eventNs, syncToHidden);
|
|
|
+ }
|
|
|
+
|
|
|
+ function procuremenFocusSysRqSplit($wrap) {
|
|
|
+ if (!$wrap || !$wrap.length) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var $date = $wrap.find('.procuremen-sys-rq-date');
|
|
|
+ if ($date.length) {
|
|
|
+ $date.focus();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
var Controller = {
|
|
|
@@ -2063,7 +2070,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
|
|
|
review: function () {
|
|
|
Controller.api.bindevent();
|
|
|
- procuremenBindSysRqPicker('#review-sys-rq', 'reviewSysRq');
|
|
|
+ procuremenInitSysRqSplit($('#review-sys-rq-wrap'), 'reviewSysRq');
|
|
|
|
|
|
function procuremenReviewWarn(msg) {
|
|
|
var shown = false;
|
|
|
@@ -2137,13 +2144,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
if (e && typeof e.stopPropagation === 'function') {
|
|
|
e.stopPropagation();
|
|
|
}
|
|
|
+ var $rqWrap = $('#review-sys-rq-wrap');
|
|
|
+ $rqWrap.find('.procuremen-sys-rq-date').trigger('change');
|
|
|
var $rq = $('#review-sys-rq');
|
|
|
- if ($rq.length && $rq.data('DateTimePicker')) {
|
|
|
- try {
|
|
|
- $rq.data('DateTimePicker').hide();
|
|
|
- } catch (ignoreHidePicker) {
|
|
|
- }
|
|
|
- }
|
|
|
var isPickMode = procuremenReviewIsPickMode();
|
|
|
var selected = procuremenReviewCollectSelected();
|
|
|
if (!selected.length) {
|
|
|
@@ -2153,7 +2156,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
var sysRq = ($rq.val() || '').trim();
|
|
|
if (!sysRq) {
|
|
|
procuremenReviewWarn('请选择截止时间');
|
|
|
- $rq.focus();
|
|
|
+ procuremenFocusSysRqSplit($rqWrap);
|
|
|
return;
|
|
|
}
|
|
|
var cons;
|
|
|
@@ -2245,15 +2248,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
if (e.keyCode !== 27 && e.key !== 'Escape') {
|
|
|
return;
|
|
|
}
|
|
|
- var $rq = $('#review-sys-rq');
|
|
|
- if ($rq.length) {
|
|
|
- var picker = $rq.data('DateTimePicker');
|
|
|
- if (picker && picker.widget && picker.widget.is(':visible')) {
|
|
|
- picker.hide();
|
|
|
- e.preventDefault();
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
procuremenReviewCloseLayer();
|
|
|
e.preventDefault();
|
|
|
});
|
|
|
@@ -2890,10 +2884,11 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
}
|
|
|
|
|
|
function auditIssueValidateSysRq() {
|
|
|
+ $('#audit-sys-rq-wrap').find('.procuremen-sys-rq-date').trigger('change');
|
|
|
var sysRq = auditIssueSysRq();
|
|
|
if (!sysRq) {
|
|
|
Toastr.warning('请选择报价截止时间');
|
|
|
- $('#audit-sys-rq').focus();
|
|
|
+ procuremenFocusSysRqSplit($('#audit-sys-rq-wrap'));
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
@@ -2911,7 +2906,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
- procuremenBindSysRqPicker('#audit-sys-rq', 'auditIssue');
|
|
|
+ procuremenInitSysRqSplit($('#audit-sys-rq-wrap'), 'auditIssue');
|
|
|
|
|
|
function auditIssueSelectedCompany() {
|
|
|
var $checked = $('input[name="audit_quote_pick"]:checked');
|