|
|
- <template>
- <view class="flex sort" :style="style">
- <view :class="['flex', 'sort-item', sort == 'comprehensive' ? 'is-active' : '']" @click="onClickSort('comprehensive')">综合</view>
- <view :class="['flex', 'sort-item', ['sale-asc', 'sale-desc'].includes(sort) ? 'is-active' : '']" @click="onClickSort('sale')">
- <view>销量</view>
- <view class="sort-item-icon">
- <uv-icon v-if="sort == 'sale-asc'" name="arrow-up-fill" color="#00A9FF" size="16rpx" :bold="true"></uv-icon>
- <uv-icon v-else-if="sort == 'sale-desc'" name="arrow-down-fill" color="#00A9FF" size="16rpx" :bold="true"></uv-icon>
- <image v-else style="width: 8rpx; height: auto;" src="/static/image/icon-sort.png" mode="widthFix"></image>
- </view>
- </view>
- <view :class="['flex', 'sort-item', ['price-asc', 'price-desc'].includes(sort) ? 'is-active' : '']" @click="onClickSort('price')">
- <view>价格</view>
- <view class="sort-item-icon">
- <uv-icon v-if="sort == 'price-asc'" name="arrow-up-fill" color="#00A9FF" size="16rpx" :bold="true"></uv-icon>
- <uv-icon v-else-if="sort == 'price-desc'" name="arrow-down-fill" color="#00A9FF" size="16rpx" :bold="true"></uv-icon>
- <image v-else style="width: 8rpx; height: auto;" src="/static/image/icon-sort.png" mode="widthFix"></image>
- </view>
- </view>
- </view>
- </template>
-
- <script>
- export default {
- props: {
- value: {
- type: String,
- default: 'comprehensive'
- },
- style: {
- type: String,
- default: ''
- }
- },
- computed: {
- sort: {
- set(val) {
- this.$emit('input', val)
- },
- get() {
- return this.value
- }
- }
- },
- methods: {
- onClickSort(key) {
-
- let sort = 'comprehensive'
-
- switch(key) {
- case 'comprehensive':
- sort = 'comprehensive'
- break;
- case 'sale':
- if (this.sort == 'sale-desc') {
- sort = 'sale-asc'
- } else {
- sort = 'sale-desc'
- }
- break;
- case 'price':
- if (this.sort == 'price-desc') {
- sort = 'price-asc'
- } else {
- sort = 'price-desc'
- }
- break;
- default:
- break;
- }
-
- this.sort = sort
-
- this.$emit('change', sort)
- },
- },
- }
- </script>
-
- <style scoped lang="scss">
-
- .sort {
- width: 100%;
- justify-content: space-between;
-
- &-item {
- padding: 12rpx 32rpx;
- font-size: 28rpx;
- line-height: 1.5;
- color: #191919;
- column-gap: 4rpx;
-
- &.is-active {
- font-weight: 600;
- color: #00A9FF;
- }
-
- &-icon {
- width: 32rpx;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- }
- }
- }
-
- </style>
|