captain-ui
Version:
有赞vue wap业务组件库
131 lines (122 loc) • 4.22 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
var SORT_ASCEND = 'ascend';
var SORT_DESCEND = 'descend';
export default {
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('ul', {
staticClass: "cap-filter-bar"
}, [_vm._l(_vm.commonFilters, function (filter, index) {
return [_vm.filters.length > 0 ? _c('li', {
key: index,
staticClass: "cap-filter-bar__item",
class: {
'cap-filter-bar__item--sort': filter.type === 'sort',
'cap-filter-bar__item--active': index === _vm.currentFilter
},
style: {
color: index === _vm.currentFilter ? _vm.color : ''
},
on: {
"click": function click($event) {
_vm.handleClick(_extends({}, filter), index);
}
}
}, [_vm._v("\n " + _vm._s(filter.title) + "\n "), filter.type === 'sort' ? _c('div', {
staticClass: "cap-filter-bar__sort-icon",
class: (_obj = {}, _obj["cap-filter-bar__sort-icon--" + _vm.sortDirections[index]] = _vm.sortDirections[index], _obj)
}, [_c('div', {
staticClass: "cap-filter-bar__sort-icon__ascend",
style: {
borderColor: index === _vm.currentFilter && _vm.sortDirections[index] === _vm.SORT_ASCEND ? _vm.color : ''
}
}), _c('div', {
staticClass: "cap-filter-bar__sort-icon__descend",
style: {
borderColor: index === _vm.currentFilter && _vm.sortDirections[index] === _vm.SORT_DESCEND ? _vm.color : ''
}
})]) : _vm._e()]) : _vm._e()];
var _obj;
}), _vm.filters.length === 0 ? _vm._t("default") : _vm._e()], 2);
},
name: 'cap-filter-bar',
props: {
filters: {
type: Array,
default: function _default() {
return [];
}
},
defaultFilter: {
type: [Number, String],
default: 0
},
color: {
type: String,
default: '#ff4e4d'
}
},
data: function data() {
return {
SORT_ASCEND: SORT_ASCEND,
SORT_DESCEND: SORT_DESCEND,
commonFilters: this.filters.map(function (filter) {
return _extends({}, filter);
}),
currentFilter: parseInt(this.defaultFilter, 10)
};
},
computed: {
sortDirections: function sortDirections() {
return this.commonFilters.map(function (_ref) {
var _ref$sortDirection = _ref.sortDirection,
sortDirection = _ref$sortDirection === void 0 ? '' : _ref$sortDirection;
return sortDirection;
});
}
},
mounted: function mounted() {
if (this.filters.length > 0) {
return;
}
this.commonFilters = this.$children.map(function (_ref2) {
var title = _ref2.title,
type = _ref2.type,
defaultDirection = _ref2.defaultDirection;
return type === 'sort' ? {
title: title,
type: type,
defaultDirection: defaultDirection
} : {
title: title,
type: type
};
});
},
methods: {
handleClick: function handleClick(filter, index) {
if (filter.type !== 'sort' && this.currentFilter === index) {
return;
} // 判断升序 or 降序
if (filter.type === 'sort') {
if (this.currentFilter !== index) {
this.resetSortDirection(filter, index);
} else if (filter.sortDirection === SORT_DESCEND) {
filter.sortDirection = SORT_ASCEND;
this.commonFilters.splice(index, 1, filter); // this.sortDirections.splice(index, 1, SORT_ASCEND);
} else {
filter.sortDirection = SORT_DESCEND;
this.commonFilters.splice(index, 1, filter); // this.sortDirections.splice(index, 1, SORT_DESCEND);
}
} // 更新 filter index
this.currentFilter = index;
this.$emit('change', _extends({}, filter), index);
},
resetSortDirection: function resetSortDirection(filter, index) {
filter.sortDirection = filter.defaultDirection || SORT_ASCEND;
this.commonFilters.splice(index, 1, filter); // this.sortDirections[this.currentFilter] = this.commonFilters[this.currentFilter].defaultDirection || SORT_ASCEND;
}
}
};