feat(admin): 新增test_goods商品管理模块

新增商品管理相关文件,包括模型、控制器、视图及静态资源。模块支持商品的增删改查、导出、状态管理等操作,并集成搜索功能优化用户体验。
This commit is contained in:
augushong
2026-01-31 13:15:26 +08:00
parent 5a8fb54175
commit 57be18c2a4
2 changed files with 326 additions and 166 deletions

View File

@@ -388,100 +388,180 @@
}
var formSearchHideClass = '';
if (d.searchHide == true) {
formSearchHideClass = ' layui-hide';
if (d.searchHide) {
formSearchHideClass = ' search-hide-item';
}
if (d.search == true || d.search == 'text') {
formHtml += '<div class="layui-inline' + formSearchHideClass + '">\n';
formHtml += ' <label class="layui-form-label">' + d.title + '</label>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <input type="text" name="' + d.fieldAlias + '" id="c-' + d.elemIdName + '" placeholder="' + d.searchTip + '" value="' + (d.searchValue == undefined ? '' : d.searchValue) + '" class="layui-input" data-search-op="' + d.searchOp + '">\n';
formHtml += ' </div>\n';
formHtml += '</div>\n';
} else if (d.search == 'select') {
formHtml += '<div class="layui-inline' + formSearchHideClass + '">\n';
formHtml += ' <label class="layui-form-label">' + d.title + '</label>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <select name="' + d.fieldAlias + '" id="c-' + d.elemIdName + '" data-search-op="' + d.searchOp + '">\n';
formHtml += ' <option value=""></option>\n';
$.each(d.selectList, function (key, val) {
if (d.searchValue != undefined && d.searchValue != '' && d.searchValue == key) {
formHtml += ' <option value="' + key + '" selected="selected">' + val + '</option>\n';
} else {
formHtml += ' <option value="' + key + '">' + val + '</option>\n';
if (d.searchValue === undefined) {
d.searchValue = '';
}
if (d.field !== false) {
if (d.search !== false) {
switch (d.search) {
case true:
formHtml += '\t<div class="layui-form-item layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<input id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" data-search-op="' + d.searchOp + '" value="' + d.searchValue + '" placeholder="' + d.searchTip + '" class="layui-input">\n' +
'</div>\n' +
'</div>';
break;
case 'select':
d.searchOp = '=';
var selectHtml = '';
if (d.tab) {
tabSetting.field = d.field;
tabSetting.elemIdName = d.elemIdName;
tabSetting.list = d.selectList;
tabSetting.index = -1;
}
var selectListIndex = 0;
$.each(d.selectList, function (sI, sV) {
var selected = '';
if (sI === d.searchValue) {
selected = 'selected=""';
if (d.tab) {
tabSetting.index = selectListIndex;
}
}
selectHtml += '<option value="' + sI + '" ' + selected + '>' + sV + '</option>/n';
selectListIndex++;
});
if (d.tab) {
formHtml += '<input type="hidden" id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" value="' + d.searchValue + '">';
break;
}
formHtml += '\t<div class="layui-form-item layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<select class="layui-select" id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" data-search-op="' + d.searchOp + '" >\n' +
'<option value="">- 全部 -</option> \n' +
selectHtml +
'</select>\n' +
'</div>\n' +
'</div>';
break;
case 'range':
d.searchOp = 'range';
formHtml += '\t<div class="layui-form-item layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<input id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" data-search-op="' + d.searchOp + '" value="' + d.searchValue + '" placeholder="' + d.searchTip + '" class="layui-input">\n' +
'</div>\n' +
'</div>';
break;
case 'time':
d.searchOp = '=';
formHtml += '\t<div class="layui-form-item layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<input id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" data-search-op="' + d.searchOp + '" value="' + d.searchValue + '" placeholder="' + d.searchTip + '" class="layui-input">\n' +
'</div>\n' +
'</div>';
break;
case 'time_limit':
d.searchOp = '=';
formHtml += '\t<div class="layui-form-item form-item-time-limit layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<input id="c-' + d.elemIdName + '-min_date" name="[' + d.fieldAlias + ']min_date" data-search-op="min_date" value="' + a + '" placeholder="最小值" class="layui-input">\n' +
'<input id="c-' + d.elemIdName + '-max_date" name="[' + d.fieldAlias + ']max_date" data-search-op="max_date" value="' + b + '" placeholder="最大值" class="layui-input">\n' +
'</div>\n' +
'</div>';
break;
case 'number_limit':
d.searchOp = '=';
formHtml += '\t<div class="layui-form-item form-item-number-limit layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<input id="c-' + d.elemIdName + '-min" name="[' + d.fieldAlias + ']min" data-search-op="min" type="text" value="' + a + '" placeholder="最小值" class="layui-input">\n' +
'<input id="c-' + d.elemIdName + '-max" name="[' + d.fieldAlias + ']max" data-search-op="max" type="text" value="' + b + '" placeholder="最大值" class="layui-input">\n' +
'</div>\n' +
'</div>';
break;
}
});
formHtml += ' </select>\n';
formHtml += ' </div>\n';
formHtml += '</div>\n';
} else if (d.search == 'time_limit') {
if (d.timeType == undefined) {
d.timeType = 'datetime';
newCols.push(d);
} else {
formHtml += '<input type="hidden" id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" value="' + d.searchValue + '">';
}
formHtml += '<div class="layui-inline' + formSearchHideClass + '">\n';
formHtml += ' <label class="layui-form-label">' + d.title + '</label>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <input type="text" name="[' + d.fieldAlias + ']min" class="layui-input" id="c-' + d.elemIdName + '-min" data-search-op="min" value="' + a + '" placeholder="开始时间">\n';
formHtml += ' </div>\n';
formHtml += ' <div class="layui-form-mid">-</div>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <input type="text" name="[' + d.fieldAlias + ']max" class="layui-input" id="c-' + d.elemIdName + '-max" data-search-op="max" value="' + b + '" placeholder="结束时间">\n';
formHtml += ' </div>\n';
formHtml += '</div>\n';
tabSetting[tableId + '_' + d.field + '_min'] = {
elem: '#c-' + d.elemIdName + '-min',
type: d.timeType,
range: false,
};
tabSetting[tableId + '_' + d.field + '_max'] = {
elem: '#c-' + d.elemIdName + '-max',
type: d.timeType,
range: false,
};
} else if (d.search == 'number_limit') {
formHtml += '<div class="layui-inline' + formSearchHideClass + '">\n';
formHtml += ' <label class="layui-form-label">' + d.title + '</label>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <input type="text" name="[' + d.fieldAlias + ']min" class="layui-input" id="c-' + d.elemIdName + '-min" data-search-op="min" value="' + a + '" placeholder="最小值">\n';
formHtml += ' </div>\n';
formHtml += ' <div class="layui-form-mid">-</div>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <input type="text" name="[' + d.fieldAlias + ']max" class="layui-input" id="c-' + d.elemIdName + '-max" data-search-op="max" value="' + b + '" placeholder="最大值">\n';
formHtml += ' </div>\n';
formHtml += '</div>\n';
}
if (d.search !== false) {
newCols.push(d);
}
});
var html = '';
html += '<fieldset id="searchFieldset_' + tableId + '" class="table-search-fieldset layui-hide">\n';
html += ' <legend>条件搜索</legend>\n';
html += ' <form class="layui-form layui-form-pane form-search" lay-filter="' + tableId + '_filter_form">\n';
html += formHtml;
html += ' <div class="layui-form-item layui-inline" style="margin-left: 115px">\n';
html += ' <button type="submit" class="layui-btn layui-btn-normal" data-type="tableSearch" data-table="' + tableId + '" lay-submit lay-filter="' + tableId + '_filter"> 搜 索</button>\n';
html += ' <button type="reset" class="layui-btn layui-btn-primary" data-table-reset="' + tableId + '"> 重 置 </button>\n';
html += ' </div>\n';
html += ' </form>\n';
html += '</fieldset>\n';
if (tabSetting.field) {
var tabId = 'tabFieldset_' + tableId;
$(elem).before('<div id="' + tabId + '" class="search-tab" data-field="' + tabSetting.field + '"></div>');
var header = [
{
title: '全部',
key: '',
}
];
for (const tabSettingListKey in tabSetting.list) {
if (Object.prototype.hasOwnProperty.call(tabSetting.list, tabSettingListKey)) {
const tabItem = tabSetting.list[tabSettingListKey];
header.push({
title: tabItem,
key: tabSettingListKey,
});
}
}
layui.tabs.render({
elem: '#' + tabId,
header: header,
index: tabSetting.index + 1,
});
layui.tabs.on('afterChange(' + tabId + ')', function (data) {
var value = $(data.thisHeaderItem).attr('lay-key');
$('#c-' + tabSetting.elemIdName).val(value);
$('[lay-filter="' + tableId + '_filter"]').trigger('click');
var searchFieldsetId = '#searchFieldset_' + tableId;
if ($(searchFieldsetId).length) {
$(searchFieldsetId).remove();
});
}
$(elem).before(html);
form.render();
if (formHtml !== '') {
var html = '';
html += '<fieldset id="searchFieldset_' + tableId + '" class="table-search-fieldset layui-hide">\n';
html += ' <legend>条件搜索</legend>\n';
html += ' <form class="layui-form layui-form-pane form-search" lay-filter="' + tableId + '_filter_form">\n';
html += formHtml;
html += ' <div class="layui-form-item layui-inline" style="margin-left: 115px">\n';
html += ' <button type="submit" class="layui-btn layui-btn-normal" data-type="tableSearch" data-table="' + tableId + '" lay-submit lay-filter="' + tableId + '_filter"> 搜 索</button>\n';
html += ' <button type="reset" class="layui-btn layui-btn-primary" data-table-reset="' + tableId + '"> 重 置 </button>\n';
html += ' </div>\n';
html += ' </form>\n';
html += '</fieldset>\n';
$.each(tabSetting, function (key, val) {
laydate.render(val);
});
var searchFieldsetId = '#searchFieldset_' + tableId;
if ($(searchFieldsetId).length) {
$(searchFieldsetId).remove();
}
$(elem).before(html);
admin.table.listenTableSearch(tableId);
admin.table.listenTableSearch(tableId);
form.render();
$.each(newCols, function (ncI, ncV) {
if (ncV.search === 'range') {
laydate.render({ range: true, type: ncV.timeType, elem: '[name="' + ncV.fieldAlias + '"]' });
}
if (ncV.search === 'time') {
laydate.render({ type: ncV.timeType, elem: '[name="' + ncV.fieldAlias + '"]' });
}
if (ncV.search === 'time_limit') {
laydate.render({ type: ncV.timeType, elem: '[name="[' + ncV.fieldAlias + ']min_date"]' });
laydate.render({ type: ncV.timeType, elem: '[name="[' + ncV.fieldAlias + ']max_date"]' });
}
});
}
options.where = {
filter: JSON.stringify(formatFilter),
op: JSON.stringify(formatOp)
};
lastTableWhere[tableId] = options.where;
return options;
},
listenTableSearch: function (tableId) {

View File

@@ -709,100 +709,180 @@
}
var formSearchHideClass = '';
if (d.searchHide == true) {
formSearchHideClass = ' layui-hide';
if (d.searchHide) {
formSearchHideClass = ' search-hide-item';
}
if (d.search == true || d.search == 'text') {
formHtml += '<div class="layui-inline' + formSearchHideClass + '">\n';
formHtml += ' <label class="layui-form-label">' + d.title + '</label>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <input type="text" name="' + d.fieldAlias + '" id="c-' + d.elemIdName + '" placeholder="' + d.searchTip + '" value="' + (d.searchValue == undefined ? '' : d.searchValue) + '" class="layui-input" data-search-op="' + d.searchOp + '">\n';
formHtml += ' </div>\n';
formHtml += '</div>\n';
} else if (d.search == 'select') {
formHtml += '<div class="layui-inline' + formSearchHideClass + '">\n';
formHtml += ' <label class="layui-form-label">' + d.title + '</label>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <select name="' + d.fieldAlias + '" id="c-' + d.elemIdName + '" data-search-op="' + d.searchOp + '">\n';
formHtml += ' <option value=""></option>\n';
$.each(d.selectList, function (key, val) {
if (d.searchValue != undefined && d.searchValue != '' && d.searchValue == key) {
formHtml += ' <option value="' + key + '" selected="selected">' + val + '</option>\n';
} else {
formHtml += ' <option value="' + key + '">' + val + '</option>\n';
if (d.searchValue === undefined) {
d.searchValue = '';
}
if (d.field !== false) {
if (d.search !== false) {
switch (d.search) {
case true:
formHtml += '\t<div class="layui-form-item layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<input id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" data-search-op="' + d.searchOp + '" value="' + d.searchValue + '" placeholder="' + d.searchTip + '" class="layui-input">\n' +
'</div>\n' +
'</div>';
break;
case 'select':
d.searchOp = '=';
var selectHtml = '';
if (d.tab) {
tabSetting.field = d.field;
tabSetting.elemIdName = d.elemIdName;
tabSetting.list = d.selectList;
tabSetting.index = -1;
}
var selectListIndex = 0;
$.each(d.selectList, function (sI, sV) {
var selected = '';
if (sI === d.searchValue) {
selected = 'selected=""';
if (d.tab) {
tabSetting.index = selectListIndex;
}
}
selectHtml += '<option value="' + sI + '" ' + selected + '>' + sV + '</option>/n';
selectListIndex++;
});
if (d.tab) {
formHtml += '<input type="hidden" id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" value="' + d.searchValue + '">';
break;
}
formHtml += '\t<div class="layui-form-item layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<select class="layui-select" id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" data-search-op="' + d.searchOp + '" >\n' +
'<option value="">- 全部 -</option> \n' +
selectHtml +
'</select>\n' +
'</div>\n' +
'</div>';
break;
case 'range':
d.searchOp = 'range';
formHtml += '\t<div class="layui-form-item layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<input id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" data-search-op="' + d.searchOp + '" value="' + d.searchValue + '" placeholder="' + d.searchTip + '" class="layui-input">\n' +
'</div>\n' +
'</div>';
break;
case 'time':
d.searchOp = '=';
formHtml += '\t<div class="layui-form-item layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<input id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" data-search-op="' + d.searchOp + '" value="' + d.searchValue + '" placeholder="' + d.searchTip + '" class="layui-input">\n' +
'</div>\n' +
'</div>';
break;
case 'time_limit':
d.searchOp = '=';
formHtml += '\t<div class="layui-form-item form-item-time-limit layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<input id="c-' + d.elemIdName + '-min_date" name="[' + d.fieldAlias + ']min_date" data-search-op="min_date" value="' + a + '" placeholder="最小值" class="layui-input">\n' +
'<input id="c-' + d.elemIdName + '-max_date" name="[' + d.fieldAlias + ']max_date" data-search-op="max_date" value="' + b + '" placeholder="最大值" class="layui-input">\n' +
'</div>\n' +
'</div>';
break;
case 'number_limit':
d.searchOp = '=';
formHtml += '\t<div class="layui-form-item form-item-number-limit layui-inline ' + formSearchHideClass + ' ">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' +
'<input id="c-' + d.elemIdName + '-min" name="[' + d.fieldAlias + ']min" data-search-op="min" type="text" value="' + a + '" placeholder="最小值" class="layui-input">\n' +
'<input id="c-' + d.elemIdName + '-max" name="[' + d.fieldAlias + ']max" data-search-op="max" type="text" value="' + b + '" placeholder="最大值" class="layui-input">\n' +
'</div>\n' +
'</div>';
break;
}
});
formHtml += ' </select>\n';
formHtml += ' </div>\n';
formHtml += '</div>\n';
} else if (d.search == 'time_limit') {
if (d.timeType == undefined) {
d.timeType = 'datetime';
newCols.push(d);
} else {
formHtml += '<input type="hidden" id="c-' + d.elemIdName + '" name="' + d.fieldAlias + '" value="' + d.searchValue + '">';
}
formHtml += '<div class="layui-inline' + formSearchHideClass + '">\n';
formHtml += ' <label class="layui-form-label">' + d.title + '</label>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <input type="text" name="[' + d.fieldAlias + ']min" class="layui-input" id="c-' + d.elemIdName + '-min" data-search-op="min" value="' + a + '" placeholder="开始时间">\n';
formHtml += ' </div>\n';
formHtml += ' <div class="layui-form-mid">-</div>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <input type="text" name="[' + d.fieldAlias + ']max" class="layui-input" id="c-' + d.elemIdName + '-max" data-search-op="max" value="' + b + '" placeholder="结束时间">\n';
formHtml += ' </div>\n';
formHtml += '</div>\n';
tabSetting[tableId + '_' + d.field + '_min'] = {
elem: '#c-' + d.elemIdName + '-min',
type: d.timeType,
range: false,
};
tabSetting[tableId + '_' + d.field + '_max'] = {
elem: '#c-' + d.elemIdName + '-max',
type: d.timeType,
range: false,
};
} else if (d.search == 'number_limit') {
formHtml += '<div class="layui-inline' + formSearchHideClass + '">\n';
formHtml += ' <label class="layui-form-label">' + d.title + '</label>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <input type="text" name="[' + d.fieldAlias + ']min" class="layui-input" id="c-' + d.elemIdName + '-min" data-search-op="min" value="' + a + '" placeholder="最小值">\n';
formHtml += ' </div>\n';
formHtml += ' <div class="layui-form-mid">-</div>\n';
formHtml += ' <div class="layui-input-inline">\n';
formHtml += ' <input type="text" name="[' + d.fieldAlias + ']max" class="layui-input" id="c-' + d.elemIdName + '-max" data-search-op="max" value="' + b + '" placeholder="最大值">\n';
formHtml += ' </div>\n';
formHtml += '</div>\n';
}
if (d.search !== false) {
newCols.push(d);
}
});
var html = '';
html += '<fieldset id="searchFieldset_' + tableId + '" class="table-search-fieldset layui-hide">\n';
html += ' <legend>条件搜索</legend>\n';
html += ' <form class="layui-form layui-form-pane form-search" lay-filter="' + tableId + '_filter_form">\n';
html += formHtml;
html += ' <div class="layui-form-item layui-inline" style="margin-left: 115px">\n';
html += ' <button type="submit" class="layui-btn layui-btn-normal" data-type="tableSearch" data-table="' + tableId + '" lay-submit lay-filter="' + tableId + '_filter"> 搜 索</button>\n';
html += ' <button type="reset" class="layui-btn layui-btn-primary" data-table-reset="' + tableId + '"> 重 置 </button>\n';
html += ' </div>\n';
html += ' </form>\n';
html += '</fieldset>\n';
if (tabSetting.field) {
var tabId = 'tabFieldset_' + tableId;
$(elem).before('<div id="' + tabId + '" class="search-tab" data-field="' + tabSetting.field + '"></div>');
var header = [
{
title: '全部',
key: '',
}
];
for (const tabSettingListKey in tabSetting.list) {
if (Object.prototype.hasOwnProperty.call(tabSetting.list, tabSettingListKey)) {
const tabItem = tabSetting.list[tabSettingListKey];
header.push({
title: tabItem,
key: tabSettingListKey,
});
}
}
layui.tabs.render({
elem: '#' + tabId,
header: header,
index: tabSetting.index + 1,
});
layui.tabs.on('afterChange(' + tabId + ')', function (data) {
var value = $(data.thisHeaderItem).attr('lay-key');
$('#c-' + tabSetting.elemIdName).val(value);
$('[lay-filter="' + tableId + '_filter"]').trigger('click');
var searchFieldsetId = '#searchFieldset_' + tableId;
if ($(searchFieldsetId).length) {
$(searchFieldsetId).remove();
});
}
$(elem).before(html);
form.render();
if (formHtml !== '') {
var html = '';
html += '<fieldset id="searchFieldset_' + tableId + '" class="table-search-fieldset layui-hide">\n';
html += ' <legend>条件搜索</legend>\n';
html += ' <form class="layui-form layui-form-pane form-search" lay-filter="' + tableId + '_filter_form">\n';
html += formHtml;
html += ' <div class="layui-form-item layui-inline" style="margin-left: 115px">\n';
html += ' <button type="submit" class="layui-btn layui-btn-normal" data-type="tableSearch" data-table="' + tableId + '" lay-submit lay-filter="' + tableId + '_filter"> 搜 索</button>\n';
html += ' <button type="reset" class="layui-btn layui-btn-primary" data-table-reset="' + tableId + '"> 重 置 </button>\n';
html += ' </div>\n';
html += ' </form>\n';
html += '</fieldset>\n';
$.each(tabSetting, function (key, val) {
laydate.render(val);
});
var searchFieldsetId = '#searchFieldset_' + tableId;
if ($(searchFieldsetId).length) {
$(searchFieldsetId).remove();
}
$(elem).before(html);
admin.table.listenTableSearch(tableId);
admin.table.listenTableSearch(tableId);
form.render();
$.each(newCols, function (ncI, ncV) {
if (ncV.search === 'range') {
laydate.render({ range: true, type: ncV.timeType, elem: '[name="' + ncV.fieldAlias + '"]' });
}
if (ncV.search === 'time') {
laydate.render({ type: ncV.timeType, elem: '[name="' + ncV.fieldAlias + '"]' });
}
if (ncV.search === 'time_limit') {
laydate.render({ type: ncV.timeType, elem: '[name="[' + ncV.fieldAlias + ']min_date"]' });
laydate.render({ type: ncV.timeType, elem: '[name="[' + ncV.fieldAlias + ']max_date"]' });
}
});
}
options.where = {
filter: JSON.stringify(formatFilter),
op: JSON.stringify(formatOp)
};
lastTableWhere[tableId] = options.where;
return options;
},
listenTableSearch: function (tableId) {