$(function () {
var filterForm = $('.form-param-filter'), sliders;
function renderFilter() {
if (!filterForm.length) return;
if (typeof brandFilter == 'undefined') return;
var html = '',
type,
data,
unit,
param,
min, max, step;
for (var i in brandFilter) {
type = typeof brandFilter[i];
if (type == 'object') {
if (productParams[i]) param = productParams[i];
if (!brandFilter[i].length) continue;
} else if (type == 'string') {
if (productParams[i]) param = productParams[brandFilter[i]];
}
if (!param || (param.type != 'select' && param.type != 'number')) continue;
if (param.type == 'select') {
html += '
' +
'' +
'
涓嶉檺
';
html += '
';
html += '';
$.each(param.data, function (k, val) {
if (type == 'object' && $.inArray(val.value, brandFilter[i]) < 0) return;
html += '';
});
html += '
';
} else if (param.type == 'number') {
if (brandFilter[i].length < 2) continue;
max = Math.max.apply(Math, brandFilter[i]);
min = Math.min.apply(Math, brandFilter[i]);
step = param.step || 1;
unit = '';
if (param.unit) unit = '(' + param.unit + ')'
html += '
' +
'' +
'';
html += '
';
}
}
if (html) filterForm.removeClass('hide').prepend(html);
sliders = $('.form-range-slider').ionRangeSlider({
onFinish: function (data) {
fireRangeSlider(data);
}
});
}
renderFilter();
filterForm.find('aa.btn').on('click', function () {
var me = $(this);
me.find('.fa').remove();
me.prepend('');
loadFilterSeries(null, function () {
me.find('.fa').remove()
});
});
var filterData = {}, filterText = {}, baseUrl = filterForm.data('baseurl');
var filterCrumb = filterForm.find('.filter-crumb');
filterForm.on('click', '.filter-menu', function (e) {
e.stopPropagation();
var me = $(this), code = me.parent().data('code'), type = me.parent().data('type'),
name = me.parent().find('.control-label').text(), inputs = me.find('input:checked'),
selected = filterCrumb.find('.crumb-' + code);
filterData[code] = [];
filterText[code] = [];
inputs.each(function () {
if (this.value == '') return;
var ipt = $(this), v = ipt.parent().text(), el;
filterData[code].push(this.value);
filterText[code].push(v);
el = '
' + name + '锛�' + v + '
';
if (selected.length) {
selected.eq(0).before(el);
} else {
filterCrumb.append(el);
}
});
selected.remove();
var text = filterText[code].join(', ') || '涓嶉檺';
me.parent().find('.form-control').text(text).attr('title', text);
loadFilterSeries();
});
var filterClear = $('.btn-filter-clear').on('click', function () {
var me = $(this), action = me.data('action');
filterCrumb.empty().parent().addClass('hide');
filterForm.find('.filter-item .form-control').text('涓嶉檺');
filterForm.find('.filter-item input:checkbox').attr('checked', false);
sliders.each(function () {
$(this).data("ionRangeSlider").reset();
});
filterData = {};
filterText = {};
loadFilterSeries();
});
filterForm.on('click', '.filter-crumb-item', function () {
var me = $(this), isSlider = me.hasClass('filter-crumb-item-slider'), code = me.data('code');
if (isSlider) {
filterForm.find('input[name=' + code + ']').data("ionRangeSlider").reset();
filterData[code] = null;
} else if ($.isArray(filterData[code])) {
var val = me.data('value'), idx = $.inArray((val + ''), filterData[code]);
if (idx >= 0) {
filterData[code].splice(idx, 1);
filterText[code].splice(idx, 1);
filterForm.find('input[name=' + code + '][value=' + val + ']:checked').attr('checked', false).parents('.filter-item').find('.form-control').text(filterText[code].join(', ') || '涓嶉檺');
}
} else {
filterData[code] = null;
filterText[code] = null;
}
me.remove();
loadFilterSeries();
});
function fireRangeSlider(data) {
var me = data.input, name = me.parent().find('.control-label').text(), code = me.parent().data('code'),
type = me.parent().data('type'), selected = filterCrumb.find('.crumb-' + code);
if (data.from != data.min || data.to != data.max) {
var v = data.from, el;
if (v != data.to) v += '-' + data.to;
el = '
' + name + '锛�' + v + '
';
if (selected.length) {
selected.replaceWith(el);
} else {
filterCrumb.append(el);
}
filterData[code] = [data.from, data.to];
} else {
selected.remove();
filterData[code] = null;
}
loadFilterSeries();
}
function setFilterCrumbVisiable() {
if (!filterCrumb.text()) {
filterCrumb.parent().addClass('hide');
filterClear.addClass('hide');
} else {
filterCrumb.parent().removeClass('hide');
filterClear.removeClass('hide');
}
}
var cate = $('#cate').val() || 0, cName, filterSeriesAjax;
var brandCate = $('#productCate').on('click', 'h4', function (e) {
e.preventDefault();
var h4 = $(this), cls = 'active', cls1 = 'selected';
cate = h4.data('value');
cName = h4.text();
brandCate.find('.' + cls1).removeClass(cls1);
h4.parent().addClass(cls).addClass(cls1).siblings().removeClass(cls);
h4.parent().find('li').removeClass(cls);
filterData.type = 0;
productType.find('li').removeClass(cls1);
affixCategory(brandCate.parent());
loadFilterSeries();
$(window).scrollTop($('h1.titlebar').offset().top);
});
var productType = $('#productType').on('click', 'a', function (e) {
e.preventDefault();
var el = $(this), cls = 'active', cls1 = 'selected', li = el.closest('li');
if (el.hasClass(cls1)) return;
filterData.type = el.data('id');
cate = '';
cName = el.text();
li.addClass(cls1).siblings().removeClass(cls1);
loadFilterSeries();
$(window).scrollTop($('h1.titlebar').offset().top);
});
var total = -1, seriesList, seriesFilterList, pages, countEl;
function setPage(pager, filter) {
if (pager === false) {
seriesList.show();
seriesFilterList.parent().hide();
countEl.text(total);
return;
}
seriesList.hide();
seriesFilterList.parent().show();
countEl.text(pager.total || 0);
}
function loadFilterSeries(options, callback) {
setFilterCrumbVisiable();
if (filterSeriesAjax) filterSeriesAjax.abort();
var flag, k;
for (k in filterData) {
if (filterData[k] && filterData[k].length) {
flag = true;
//break;
if (filterData[k].length == 1) filterData[k] = filterData[k][0];
}
}
if (!filterData.type) {
delete filterData.type;
}
filterData.cate = cate || filterForm.get(0).cate.value;
if (!seriesList) {
seriesList = $('#productList');
seriesFilterList = $('
').insertAfter(seriesList);
seriesFilterList.wrap('');
countEl = $('#filterCount');
total = countEl.text();
}
for (var k in filterData) {
if (filterData[k] === null || filterData[k] == '') {
delete filterData[k];
}
}
if (!flag && !cate) {
return setPage(false, null);
}
NProgress.start();
filterSeriesAjax = $.ajax({
url: filterForm.data('action'),
type: 'post',
dataType: 'json',
data: filterData,
success: function (rs) {
NProgress.done();
if ($.isFunction(callback)) callback();
var html = '';
if (rs && rs.rows) {
var l = rs.rows.length, i = 0, uri = $.param(filterData), k;
if (uri) uri = '?' + uri;
for (; i < l; i++) {
html += '