diff --git a/src/components/Discover/Map/Filter/Attributes.vue b/src/components/Discover/Map/Filter/Attributes.vue index 2c52492..a38478a 100644 --- a/src/components/Discover/Map/Filter/Attributes.vue +++ b/src/components/Discover/Map/Filter/Attributes.vue @@ -54,30 +54,31 @@ -
+
+
-
+
- +
- + @@ -119,6 +120,11 @@ export default { headerClass: '!bg-neutral-10 !border-neutral-500 !py-2 sticky top-0 left-0 z-10 bg-neutral-10', bodyModeClass: '!p-2 !border-0', bodyClass: 'break-words !py-2 !border-0', + panelProps: { + onClick: (event) => { + event.stopPropagation(); + }, + }, } }, computed: { @@ -199,11 +205,33 @@ export default { return sliderData; }, + // user select time start and end + attValueTypeStartEnd: function() { + let start = getMoment(this.startTime).format('YYYY-MM-DDTHH:mm:ss'); + let end = getMoment(this.endTime).format('YYYY-MM-DDTHH:mm:ss'); + // this.selectTimeFrame = [start, end]; // 傳給後端的資料 + // this.$emit('on-row-select', e.data); + + return [start, end]; + }, }, methods: { onRowSelect(e) { - if(this.valueData) this.createChart(); - // this.$emit('on-row-select', e.data) + if(this.valueData) { + // 初始化: Calendar + this.startMinDate = new Date(getMoment(this.valueData.chart.x_axis.min).format()); + this.startMaxDate = new Date(getMoment(this.valueData.chart.x_axis.max).format()); + this.endMinDate = new Date(getMoment(this.valueData.chart.x_axis.min).format()); + this.endMaxDate = new Date(getMoment(this.valueData.chart.x_axis.max).format()); + // 初始化: 讓日曆的範圍等於時間軸的範圍 + this.startTime = this.startMinDate; + this.endTime = this.startMaxDate; + this.attValueTypeStartEnd; + // 建立圖表 + this.createChart(); + } else { + // this.$emit('on-row-select', e.data); + } }, /** * set progress bar width @@ -338,8 +366,6 @@ export default { }, }, }; - - }, /** * 滑塊改變的時候 @@ -359,11 +385,37 @@ export default { // 重新算圖 this.resizeMask(this.chartComplete); // 執行 timeFrameStartEnd 才會改變數據 - // this.timeFrameStartEnd; + this.attValueTypeStartEnd; + }, + /** + * 選取開始或結束時間時,要改變滑塊跟圖表 + * @param {object} e Tue Jan 25 2022 00:00:00 GMT+0800 (台北標準時間) + * @param {string} direction start or end + */ + sliderTimeRange(e, direction) { + // 找到最鄰近的 index,時間格式: 毫秒時間戳 + let sliderData = this.sliderData; + const targetTime = [new Date(this.attValueTypeStartEnd[0]).getTime(), new Date(this.attValueTypeStartEnd[1]).getTime()]; + const closestIndexes = targetTime.map(target => { + let closestIndex = 0; + closestIndex = ((target - sliderData[0])/(sliderData[sliderData.length-1]-sliderData[0])) * sliderData.length; + let result = Math.round(Math.abs(closestIndex)); + result = result > this.selectRange ? this.selectRange : result; + return result + }); + + // 改變滑塊 + this.selectArea = closestIndexes; + // 重新設定 start end 日曆選取範圍 + if(direction === 'start') this.endMinDate = e; + else if(direction === 'end') this.startMaxDate = e; + // 重新算圖 + if(!isNaN(closestIndexes[0]) && !isNaN(closestIndexes[1])) this.resizeMask(this.chartComplete); + else return; }, }, mounted() { - // this.setChartData(); + // Slider this.selectArea = [0, this.selectRange]; // 初始化滑塊 } } diff --git a/src/components/Discover/Map/Filter/Timeframes.vue b/src/components/Discover/Map/Filter/Timeframes.vue index aa7bd63..b96a4ab 100644 --- a/src/components/Discover/Map/Filter/Timeframes.vue +++ b/src/components/Discover/Map/Filter/Timeframes.vue @@ -17,8 +17,8 @@
- Start time - + Start time +
~
diff --git a/src/components/Discover/Map/SidebarFilter.vue b/src/components/Discover/Map/SidebarFilter.vue index d76638b..ddc9af5 100644 --- a/src/components/Discover/Map/SidebarFilter.vue +++ b/src/components/Discover/Map/SidebarFilter.vue @@ -1,5 +1,5 @@