|
@@ -5,8 +5,49 @@
|
|
|
<view class="shade" catchtouchmove="true" @touchmove.stop.prevent="() => { }" @click="changeShow">
|
|
<view class="shade" catchtouchmove="true" @touchmove.stop.prevent="() => { }" @click="changeShow">
|
|
|
<view @click.stop="">
|
|
<view @click.stop="">
|
|
|
<scroll-view :style="{ maxHeight: tovw(maxHeight) }" class="scroll-view" scroll-y>
|
|
<scroll-view :style="{ maxHeight: tovw(maxHeight) }" class="scroll-view" scroll-y>
|
|
|
- <group v-for="(item, index) in list" :ref="'group' + index" :key="item.key" :item="item"
|
|
|
|
|
- :rowIndex="index" @onChange="onChange" />
|
|
|
|
|
|
|
+ <block v-for="(item, index) in list" :key="item.key">
|
|
|
|
|
+ <block v-if="item.type == 'dateRange'">
|
|
|
|
|
+ <view class="date-label">
|
|
|
|
|
+ {{ item.title || '时间区间' }}
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view class="date-box">
|
|
|
|
|
+ <scroll-view :scroll-x="true">
|
|
|
|
|
+ <view class="options">
|
|
|
|
|
+ <view class="item" hover-class="navigator-hover"
|
|
|
|
|
+ :class="item.day == 1 ? 'active' : ''" @click="fast(1, index)">
|
|
|
|
|
+ 今天
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view class="item" hover-class="navigator-hover"
|
|
|
|
|
+ :class="item.day == 7 ? 'active' : ''" @click="fast(7, index)">
|
|
|
|
|
+ 7天
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view class="item" hover-class="navigator-hover"
|
|
|
|
|
+ :class="item.day == 30 ? 'active' : ''" @click="fast(30, index)">
|
|
|
|
|
+ 30天
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view style="width: 10px;" />
|
|
|
|
|
+ <u-number-box :value="item.day || 1" @change="valChange($event, index)" />
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </scroll-view>
|
|
|
|
|
+ <view class="row" style="margin-top: 20px">
|
|
|
|
|
+ <picker mode="date" class="date-box"
|
|
|
|
|
+ :style="{ color: item.begindate ? '#333' : '#ddd' }" :value="item.begindate"
|
|
|
|
|
+ data-name="begindate" :end="enddate" @change="onDateChange($event, index)">
|
|
|
|
|
+ {{ item.begindate || '开始日期' }}
|
|
|
|
|
+ </picker>
|
|
|
|
|
+ <view style="padding: 0 10px;">
|
|
|
|
|
+ -
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <picker mode="date" class="date-box"
|
|
|
|
|
+ :style="{ color: item.enddate ? '#333' : '#ddd' }" :value="item.enddate"
|
|
|
|
|
+ data-name="enddate" @change="onDateChange($event, index)" :start="enddate">
|
|
|
|
|
+ {{ item.enddate || '结束日期' }}
|
|
|
|
|
+ </picker>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </block>
|
|
|
|
|
+ <group v-else :ref="'group' + index" :item="item" :rowIndex="index" @onChange="onChange" />
|
|
|
|
|
+ </block>
|
|
|
</scroll-view>
|
|
</scroll-view>
|
|
|
<view class="but-box">
|
|
<view class="but-box">
|
|
|
<view class="reset" hover-class="navigator-hover" @click="onReset">
|
|
<view class="reset" hover-class="navigator-hover" @click="onReset">
|
|
@@ -25,6 +66,7 @@
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
import group from "./filtrate-group.vue"
|
|
import group from "./filtrate-group.vue"
|
|
|
|
|
+
|
|
|
export default {
|
|
export default {
|
|
|
components: { group },
|
|
components: { group },
|
|
|
props: {
|
|
props: {
|
|
@@ -54,12 +96,13 @@ export default {
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
watch: {
|
|
watch: {
|
|
|
- filtrateList: function (newVal) {
|
|
|
|
|
- if (newVal) {
|
|
|
|
|
- this.list = JSON.parse(JSON.stringify(newVal));
|
|
|
|
|
- } else {
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ filtrateList: {
|
|
|
|
|
+ handler: function (newVal) {
|
|
|
|
|
+ if (newVal) {
|
|
|
|
|
+ this.list = JSON.parse(JSON.stringify(newVal));
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ immediate: true,
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
data() {
|
|
data() {
|
|
@@ -67,7 +110,7 @@ export default {
|
|
|
show: false,
|
|
show: false,
|
|
|
maxHeight: 0,
|
|
maxHeight: 0,
|
|
|
index: -99,
|
|
index: -99,
|
|
|
- list: []
|
|
|
|
|
|
|
+ list: [],
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
@@ -97,17 +140,48 @@ export default {
|
|
|
onReset() {
|
|
onReset() {
|
|
|
this.list = JSON.parse(JSON.stringify(this.filtrateList));
|
|
this.list = JSON.parse(JSON.stringify(this.filtrateList));
|
|
|
},
|
|
},
|
|
|
|
|
+ fast(num, index) {
|
|
|
|
|
+ return new Promise((resolve) => {
|
|
|
|
|
+ let now = new Date().getTime() - 0,
|
|
|
|
|
+ end = now + 86400000,
|
|
|
|
|
+ beg = end - (num * 86400000);
|
|
|
|
|
+ this.list[index].begindate = this.formatTime(new Date(beg)).split(' ')[0];
|
|
|
|
|
+ this.list[index].enddate = this.formatTime(new Date(end)).split(' ')[0];
|
|
|
|
|
+ this.list[index].day = num;
|
|
|
|
|
+ resolve()
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ valChange(e, index) {
|
|
|
|
|
+ this.fast(e.value, index)
|
|
|
|
|
+ },
|
|
|
|
|
+ onDateChange(e, index) {
|
|
|
|
|
+ this[e.target.dataset.name] = e.detail.value;
|
|
|
|
|
+ let item = this.list[index];
|
|
|
|
|
+ if (item.begindate && item.enddate) {
|
|
|
|
|
+ let end = new Date(item.enddate).getTime(),
|
|
|
|
|
+ beg = new Date(item.begindate).getTime();
|
|
|
|
|
+ item.day = (end - beg) / 86400000;
|
|
|
|
|
+ }
|
|
|
|
|
+ this.list[index] = item;
|
|
|
|
|
+ },
|
|
|
onConfirm() {
|
|
onConfirm() {
|
|
|
let obj = {};
|
|
let obj = {};
|
|
|
this.list.forEach(v => {
|
|
this.list.forEach(v => {
|
|
|
- if (v.value || v.defaultVal) {
|
|
|
|
|
- if (v.isAll) {
|
|
|
|
|
- obj[v.key] = v.rang.find(s => s[v.selected] == v.value) || v.rang.find(s => s[v.selected] == v.defaultVal);
|
|
|
|
|
|
|
+ if (v.type == "dateRange") {
|
|
|
|
|
+ obj[v.key] = {
|
|
|
|
|
+ begindate: v.begindate,
|
|
|
|
|
+ enddate: v.enddate,
|
|
|
|
|
+ };
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if (v.value || v.defaultVal) {
|
|
|
|
|
+ if (v.isAll) {
|
|
|
|
|
+ obj[v.key] = v.rang.find(s => s[v.selected] == v.value) || v.rang.find(s => s[v.selected] == v.defaultVal);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ obj[v.key] = v.value || v.defaultVal;
|
|
|
|
|
+ }
|
|
|
} else {
|
|
} else {
|
|
|
- obj[v.key] = v.value || v.defaultVal;
|
|
|
|
|
|
|
+ obj[v.key] = '';
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
- obj[v.key] = '';
|
|
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
this.$emit("onFiltration", obj)
|
|
this.$emit("onFiltration", obj)
|
|
@@ -164,4 +238,74 @@ export default {
|
|
|
background: rgba($color: #000000, $alpha: .7);
|
|
background: rgba($color: #000000, $alpha: .7);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+.date-label {
|
|
|
|
|
+ line-height: 22px;
|
|
|
|
|
+ font-family: PingFang SC, PingFang SC;
|
|
|
|
|
+ font-weight: bold;
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ color: #333333;
|
|
|
|
|
+ padding: 10px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.date-box {
|
|
|
|
|
+ .active {
|
|
|
|
|
+ background: #C30D23 !important;
|
|
|
|
|
+ color: #FFFFFF !important;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .options {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+
|
|
|
|
|
+ .item {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ background: #F5F5F5;
|
|
|
|
|
+ border-radius: 4px;
|
|
|
|
|
+ margin-left: 10px;
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ color: #333333;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
|
+ padding: 6px 12px;
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /deep/ .u-number-box__minus,
|
|
|
|
|
+ /deep/.u-number-box__input,
|
|
|
|
|
+ /deep/.u-number-box__plus {
|
|
|
|
|
+ height: 30px !important;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /deep/ .u-number-box__input {
|
|
|
|
|
+ width: 35px !important;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .row {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ color: #646566;
|
|
|
|
|
+ padding: 10px;
|
|
|
|
|
+ padding-top: 0;
|
|
|
|
|
+ border-bottom: 1px solid #ddd;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
|
+
|
|
|
|
|
+ .date-box {
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ height: 35px;
|
|
|
|
|
+ line-height: 35px;
|
|
|
|
|
+ background: #FFFFFF;
|
|
|
|
|
+ border-radius: 4px;
|
|
|
|
|
+ border: 1px solid #CCCCCC;
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ padding-left: 10px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
</style>
|
|
</style>
|