| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441 |
- <div id='mainContent' class='main-row'>
- <div class='main-col'>
- <style><?php include $this->app->getModuleRoot() . 'dataview/css/querybase.css';?></style>
- <?php include $this->app->getModuleRoot() . 'dataview/view/querybase.html.php';?>
- <script><?php include $this->app->getModuleRoot() . 'dataview/js/querybase.js';?></script>
- </div>
- </div>
- <template id='queryFilterItemTpl'>
- <div class='filter-item filter-item-{index} input-group' data-index='{index}'>
- <span class='field-name input-group-addon'>{name}</span>
- <div class="default-block hidden"><?php echo html::input('default', '', "class='form-control form-input '")?></div>
- <div class="default-block hidden"><?php echo html::input('default', '', "class='form-control form-date'")?></div>
- <div class="default-block hidden"><?php echo html::input('default', '', "class='form-control form-datetime'")?></div>
- <div class="default-block hidden"><?php echo html::select('default', '', '', "class='form-control form-select'");?></div>
- </div>
- </template>
- <div id='queryFilterModal' class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">× </button>
- <h4 class="modal-title"><?php echo $lang->dataview->add . $lang->dataview->queryFilters?></h4>
- </div>
- <div class="modal-body">
- <div class="alert alert-info no-margin"><?php echo $lang->dataview->queryFilterTip;?></div>
- <div class="form-overflow">
- <table class='table table-form'>
- <thead>
- <tr class='text-center'>
- <th class='w-160px text-left require'><?php echo $lang->dataview->varFilter->varCode?></th>
- <th class='w-160px text-left require'><?php echo $lang->dataview->varFilter->varLabel?></th>
- <th><?php echo $lang->dataview->varFilter->requestType?></th>
- <th class='text-left' style="width: 142px;"><?php echo $lang->dataview->varFilter->default?></th>
- <th class='text-left' style="width: 30px;"></th>
- </tr>
- </thead>
- <tbody class='text-center'></tbody>
- </table>
- </div>
- <table class='table table-form'>
- <tfoot>
- <tr>
- <td colspan='4' class='text-center'><?php echo html::submitButton();?></td></tr>
- </tfoot>
- </table>
- </div>
- </div>
- </div>
- </div>
- <template id="queryFilterFormTpl">
- <tr class="filter-item form-filter-{index}" data-index='{index}'>
- <td><?php echo html::input('varName', '{varName}', "class='form-control required' {disabled} placeholder='{$lang->pivot->varNameTip}' onchange='handleVarNameChange(this)'")?></td>
- <td><?php echo html::input('showName', '{showName}', "class='form-control required' onchange='handleShowNameChange(this)'")?></td>
- <td>
- <div class='input-group request-type'>
- <span class='input-group-addon' style='text-align:left'>
- <?php echo html::radio('requestType[{index}]', $lang->dataview->varFilter->requestTypeList, '{requestType}', "onchange='methods.step1.query.toggleRadio(this)'")?>
- </span>
- <?php echo html::select('selectList', $lang->dataview->varFilter->selectList, '{select}', "class='form-control {hidden}' onchange='methods.step1.query.toggleSelect(this, this.value)'");?>
- </div>
- </td>
- <td>
- <div class="default-block hidden"><?php echo html::input('default', '', "class='form-control form-input '")?></div>
- <div class="default-block hidden"><?php echo html::input('default', '', "class='form-control form-date '")?></div>
- <div class="default-block hidden"><?php echo html::input('default', '', "class='form-control form-datetime '")?></div>
- <div class="default-block hidden"><?php echo html::select('default', '', '', "class='form-control form-select'");?></div>
- </td>
- <td>
- <a href="javascript:;" onclick="methods.step1.query.deleteRow(this)" class="btn btn-link hidden"><i class="icon icon-trash"></i></a>
- </td>
- </tr>
- </template>
- <template id="nextStepTpl">
- <button type="button" class="btn btn-primary btn-next-step pull-right" onclick="nextStep()"><?php echo $lang->pivot->nextStep;?></button>
- </template>
- <template id="addQueryFilterTpl">
- <button type="button" class="btn add-query-filter" style="margin-left: 8px;"><?php echo $lang->dataview->add . $lang->dataview->queryFilters;?></button>
- </template>
- <template id="queryFiltersTpl">
- <tr id="queryFilters" class="hidden">
- <th></th>
- <td></td>
- </tr>
- </template>
- <script>
- DataStorage.addProperty('isInsert', true);
- var queryFilterModal = '#step1Content #queryFilterModal';
- var queryFilters = '#step1Content #queryFilters';
- var queryFilterFormTpl = '#step1Content #queryFilterFormTpl';
- $(function()
- {
- $('#dataform .btn.query').after([$('#addQueryFilterTpl').html(), $('#nextStepTpl').html()]);
- $('#dataform .btn.query').parent().parent().before($('#queryFiltersTpl').html());
- $('.add-query-filter').click(function()
- {
- DataStorage.isInsert = true;
- methods.step1.query.renderFilterForm([{}]);
- });
- $(queryFilterModal + ' #submit').click(function()
- {
- var pivot = DataStorage.clone('pivot');
- var sql = $('#sql').val();
- pivot.filters = [];
- var filters = methods.step1.query.getFilterFormData();
- if(!filters) return;
- pivot.filters = filters;
- if(DataStorage.isInsert) $('#sql').val(sql + " $" + filters[filters.length - 1].field);
- pivot.settings.filterType = 'query';
- DataStorage.pivot = pivot;
- $(queryFilterModal).modal('hide');
- methods.step1.query.renderFilters();
- })
- methods.step1.query.renderFilters();
- });
- function handleVarNameChange(elem)
- {
- var $td = $(elem).parent('td');
- $td.removeClass('has-error');
- if($td.find('#varNameError').length > 0) $td.find('#varNameError').remove();
- }
- function handleShowNameChange(elem)
- {
- var $td = $(elem).parent('td');
- $td.removeClass('has-error');
- if($td.find('#showNameError').length > 0) $td.find('#showNameError').remove();
- }
- methods.step1.query.getFilterFormData = function()
- {
- var hasError = false;
- var filters = [];
- $(queryFilterModal + ' .table tbody tr').each(function()
- {
- $(this).find('td').removeClass('has-error');
- var varName = $(this).find("input[name^='varName']").val();
- var showName = $(this).find("input[name^='showName']").val();
- var selectList = $(this).find("select[name^='selectList']").val();
- var requestType = $(this).find("input[name^='requestType']:checked").val();
- var defaultType = ".form-" + requestType;
- var defaultValue = requestType == 'select' ? $(this).find("select[name^='default']" + defaultType).data('zui.picker').getValue() : $(this).find("input[name^='default']" + defaultType).val();
- if($(this).find('#varNameError').length > 0) $(this).find('#varNameError').remove();
- if($(this).find('#showNameError').length > 0) $(this).find('#showNameError').remove();
- if(!varName || varName.length == 0)
- {
- hasError = true;
- $(this).find("input[name^='varName']").parent().addClass('has-error').append('<div id="varNameError" class="text-danger text-left">' + notemptyLang.replace('%s', '<?php echo $lang->dataview->varFilter->varCode?>') + '</div>');
- }
- if(!showName || showName.length == 0)
- {
- hasError = true;
- $(this).find("input[name^='showName']").parent().addClass('has-error').append('<div id="showNameError" class="text-danger text-left">' + notemptyLang.replace('%s', '<?php echo $lang->dataview->varFilter->varLabel?>') + '</div>');
- }
- var filter = {from: 'query', field: varName, type: requestType, typeOption: selectList, name: showName, default: defaultValue};
- filters.push(filter);
- });
- return hasError ? false : filters;
- }
- methods.step1.query.renderFilters = function()
- {
- var pivot = DataStorage.pivot;
- $(queryFilters).removeClass('hidden');
- $(queryFilters + ' td').empty();
- if(!DataStorage.isQueryFilter())
- {
- $(queryFilters).addClass('hidden');
- return;
- }
- var filters = pivot.filters;
- filters.forEach(function(filter, index)
- {
- var tpl = $(queryFilterItemTpl).html();
- var data =
- {
- index: index,
- name: filter.name,
- };
- var html = $($.zui.formatString(tpl, data));
- var control = methods.step1.query.getControl(filter.type, html);
- $(queryFilters + ' td').append(html);
- methods.step1.query.initControl(control, filter.type, filter.field, filter.default, filter.typeOption);
- })
- }
- methods.step1.query.getVarListFromSql = function()
- {
- var sql = $('#sql').val();
- var pattern = /\$\w+/g;
- var varList = sql.match(pattern);
- if(Array.isArray(varList)) varList = Array.from(new Set(varList));
- if(!Array.isArray(varList)) varList = [];
- return varList;
- }
- /**
- * Set varFrom.
- *
- * @access public
- * @return void
- */
- function setVarFrom()
- {
- var pivot = DataStorage.pivot;
- var filters = pivot.filters;
- if(sql !== '')
- {
- var varList = methods.step1.query.getVarListFromSql();
- if(methods.step1.query.needEditQuery())
- {
- var dataList = [];
- varList.forEach(function(varStr, index)
- {
- varStr = varStr.substr(1);
- var find = filters.find(function(filter){return filter.field == varStr});
- if(!find) dataList.push({varName: varStr, disabled: 'disabled'});
- });
- methods.step1.query.renderFilterForm(dataList);
- methods.step1.query.updateFilters(varList);
- return false;
- }
- if(varList && varList.length < filters.length && DataStorage.isQueryFilter())
- {
- methods.step1.query.updateFilters(varList);
- methods.step1.query.renderFilters();
- }
- }
- return true;
- }
- /**
- * Update filters form sql variables to storage.
- *
- * @param array varList
- * @access public
- * @return void
- */
- methods.step1.query.updateFilters = function(varList)
- {
- var newFilters = [];
- var pivot = DataStorage.clone('pivot');
- varList.forEach(function(varStr)
- {
- var find = pivot.filters.find(function(filter){return filter.field == varStr.substr(1)});
- if(find) newFilters.push(find);
- });
- pivot.filters = newFilters;
- DataStorage.pivot = pivot;
- }
- /**
- * Need edit query filter or not
- *
- * @access public
- * @return bool
- */
- methods.step1.query.needEditQuery = function()
- {
- var varList = methods.step1.query.getVarListFromSql();
- var pivot = DataStorage.clone('pivot');
- /* If the sql has not any variable for query filter. */
- if(!varList)
- {
- if(pivot.settings.filterType == 'query')
- {
- pivot.filters = [];
- pivot.settings.filterType = '';
- DataStorage.pivot = pivot;
- }
- return false;
- }
- /* Find if add new variables to sql. */
- var newVars = varList.filter(function(varStr)
- {
- var findInFilters = pivot.filters.find(function(filter){return filter.field == varStr.substr(1);});
- return !findInFilters;
- });
- return newVars.length > 0;
- }
- /**
- * ToggleSelectList.
- *
- * @param obj $obj
- * @access public
- * @return void
- */
- methods.step1.query.toggleRadio = function(obj)
- {
- $(obj).parents('td').find('select').addClass('hidden');
- var radioValue = $(obj).val();
- if(radioValue == 'select')
- {
- $(obj).parents('td').find('select').removeClass('hidden');
- }
- var defaultControl = $(obj).parents('tr').find('.default-control');
- var control = methods.step1.query.getControl(radioValue, $(obj).parents('tr'));
- methods.step1.query.initControl(control, radioValue, 'default', '', 'user');
- }
- methods.step1.query.toggleSelect = function(obj, options)
- {
- var type = 'select';
- var defaultControl = $(obj).parents('tr').find('.default-control');
- var control = methods.step1.query.getControl(type, $(obj).parents('tr'));
- methods.step1.query.initControl(control, type, 'default', '', options);
- }
- methods.step1.query.renderFilterForm = function(dataList, showModal = true)
- {
- var tplDataList = [];
- var varList = methods.step1.query.getVarListFromSql();
- var filters = DataStorage.pivot.filters;
- varList.forEach(function(varStr, index)
- {
- varStr = varStr.substr(1);
- var find = filters.find(function(filter){return filter.field == varStr});
- if(!find) return;
- var data = {disabled: 'disabled', varName: varStr};
- if(find)
- {
- data.showName = find.name;
- data.defaultValue = find.default;
- data.requestType = find.type;
- data.select = find.typeOption
- }
- tplDataList.push(data);
- });
- tplDataList = tplDataList.concat(dataList);
- var tbody = $(queryFilterModal + ' .table.table-form tbody');
- tbody.empty();
- tplDataList.forEach(function(tplData, index)
- {
- methods.step1.query.renderFilterItem(tbody, tplData, index);
- });
- if(tplDataList.length >= 2) tbody.find("tr:last-child td:last-child").find('a').removeClass('hidden');
- if(showModal) $(queryFilterModal).modal('show');
- }
- methods.step1.query.renderFilterItem = function(node, data, index)
- {
- var tplData = {index: index, disabled: '', varName: '', showName: '', requestType: 'input', select: 'user', defaultValue: ''};
- for(var key in tplData)
- {
- if(data.hasOwnProperty(key)) tplData[key] = data[key];
- }
- tplData.hidden = tplData.requestType == 'select' ? '' : 'hidden';
- var type = tplData.requestType;
- var select = tplData.select;
- var defaultValue = tplData.defaultValue;
- var tpl = $(queryFilterFormTpl).html();
- var html = $($.zui.formatString(tpl, tplData));
- node.append(html);
- html.find('input[name^="requestType"][value="' + type + '"]').attr('checked', 'checked');
- if(type == 'select') html.find('#selectList').val(select);
- var control = methods.step1.query.getControl(type, html);
- methods.step1.query.initControl(control, type, 'default', defaultValue, select);
- }
- methods.step1.query.deleteRow = function(trashObj)
- {
- $(trashObj).parents('tr').remove();
- }
- methods.step1.query.getControl = function(type, html)
- {
- html.find('.default-block').addClass('hidden');
- html.find('.default-block input[name="default"]').val('');
- var control = html.find('.form-' + type);
- control.parent('.default-block').removeClass('hidden');
- return control;
- }
- methods.step1.query.initControl = function(control, type, name, value, options)
- {
- if(type == 'date') setDateField(control);
- if(type == 'datetime') setDateField(control);
- if(type == 'select')
- {
- var picker = control.data('zui.picker');
- if(picker) picker.destroy();
- $.post(createLink('pivot', 'ajaxGetSysOptions', 'type=' + options), function(resp)
- {
- control.html($(resp).html());
- control.picker({maxDropHeight: pickerHeight});
- control.data('zui.picker').setValue(value);
- });
- }
- }
- </script>
|