diff --git a/backend/src/main/java/io/dataease/service/wizard/ReptileService.java b/backend/src/main/java/io/dataease/service/wizard/ReptileService.java
index a8c8de74dc..d30243f8d9 100644
--- a/backend/src/main/java/io/dataease/service/wizard/ReptileService.java
+++ b/backend/src/main/java/io/dataease/service/wizard/ReptileService.java
@@ -1,5 +1,6 @@
 package io.dataease.service.wizard;
 
+import io.dataease.commons.utils.HttpClientConfig;
 import io.dataease.commons.utils.HttpClientUtil;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
@@ -23,8 +24,10 @@ public class ReptileService {
     public List lastActive() {
         List result = new ArrayList();
         try {
+            HttpClientConfig config = new HttpClientConfig();
+            config.setCocketTimeout(5000);
             //爬取最新数据
-            Document doc = Jsoup.parse(HttpClientUtil.get(blogUrl, null));
+            Document doc = Jsoup.parse(HttpClientUtil.get(blogUrl, config));
             Elements elementsContent = doc.getElementsByAttributeValue("rel", "bookmark");
             Elements elementsTime = doc.getElementsByTag("time");
             for(int i = 0;i<infoCount;i++){
@@ -36,6 +39,7 @@ public class ReptileService {
                 result.add(infoMap);
             }
         } catch (Exception e) {
+            e.printStackTrace();
             //ignore
             Map<String, String> infoMap = new HashMap();
             infoMap.put("title","支持移动端展示,数据源新增对DB2的支持,DataEase开源数据可视化分析平台v1.6.0发布");
diff --git a/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue b/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue
index bfb04d56e0..f2725e8ae7 100644
--- a/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue
+++ b/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue
@@ -32,6 +32,7 @@
       :search-count="searchCount"
       :h="config.style.height"
       :edit-mode="'preview'"
+      :filters="filters"
       :terminal="terminal"
     />
   </div>
@@ -74,6 +75,10 @@ export default {
     terminal: {
       type: String,
       default: 'pc'
+    },
+    filters: {
+      type: Array,
+      default: () => []
     }
   },
   data() {
diff --git a/frontend/src/components/canvas/components/Editor/Preview.vue b/frontend/src/components/canvas/components/Editor/Preview.vue
index 17690278c3..727f0b3204 100644
--- a/frontend/src/components/canvas/components/Editor/Preview.vue
+++ b/frontend/src/components/canvas/components/Editor/Preview.vue
@@ -20,6 +20,7 @@
           :search-count="searchCount"
           :in-screen="inScreen"
           :terminal="terminal"
+          :filters="filterMap[item.propValue && item.propValue.viewId]"
         />
         <!--视图详情-->
         <el-dialog
@@ -65,7 +66,7 @@ import UserViewDialog from '@/components/canvas/custom-component/UserViewDialog'
 import CanvasOptBar from '@/components/canvas/components/Editor/CanvasOptBar'
 import UserViewMobileDialog from '@/components/canvas/custom-component/UserViewMobileDialog'
 import bus from '@/utils/bus'
-
+import { buildFilterMap } from '@/utils/conditionUtil'
 export default {
   components: { UserViewMobileDialog, ComponentWrapper, UserViewDialog, CanvasOptBar },
   model: {
@@ -193,7 +194,11 @@ export default {
       'componentData',
       'canvasStyleData',
       'componentGap'
-    ])
+    ]),
+    filterMap() {
+      const map = buildFilterMap(this.componentData)
+      return map
+    }
   },
   watch: {
     componentData: {
diff --git a/frontend/src/components/canvas/components/Editor/index.vue b/frontend/src/components/canvas/components/Editor/index.vue
index 2584a9ed8b..c84b50d0b1 100644
--- a/frontend/src/components/canvas/components/Editor/index.vue
+++ b/frontend/src/components/canvas/components/Editor/index.vue
@@ -101,6 +101,7 @@
         :id="'component' + item.id"
         ref="wrapperChild"
         class="component"
+        :filters="filterMap[item.propValue.viewId]"
         :style="getComponentStyleDefault(item.style)"
         :prop-value="item.propValue"
         :element="item"
@@ -191,7 +192,7 @@ import CanvasOptBar from '@/components/canvas/components/Editor/CanvasOptBar'
 import DragShadow from '@/components/DeDrag/shadow'
 import bus from '@/utils/bus'
 import LinkJumpSet from '@/views/panel/LinkJumpSet'
-
+import { buildFilterMap } from '@/utils/conditionUtil'
 // 挤占式画布
 import _ from 'lodash'
 import $ from 'jquery'
@@ -930,6 +931,7 @@ export default {
     dragComponentInfo() {
       return this.$store.state.dragComponentInfo
     },
+
     ...mapState([
       'componentData',
       'curComponent',
@@ -941,7 +943,10 @@ export default {
       'componentGap',
       'mobileLayoutStatus',
       'curCanvasScale'
-    ])
+    ]),
+    filterMap() {
+      return buildFilterMap(this.componentData)
+    }
   },
   watch: {
     customStyle: {
diff --git a/frontend/src/components/canvas/custom-component/UserView.vue b/frontend/src/components/canvas/custom-component/UserView.vue
index 0ae214b946..611338e0e1 100644
--- a/frontend/src/components/canvas/custom-component/UserView.vue
+++ b/frontend/src/components/canvas/custom-component/UserView.vue
@@ -114,11 +114,15 @@ export default {
     terminal: {
       type: String,
       default: 'pc'
+    },
+    filters: {
+      type: Array,
+      default: () => []
     }
   },
   data() {
     return {
-      filterInit: false, // 标记是否已经通过watch.filters 进行初始化,如果filterInit=true 则create放弃数据初始化防止数据覆盖
+      isFirstLoad: true, // 是否是第一次加载
       refId: null,
       chart: BASE_CHART_STRING,
       requestStatus: 'success',
@@ -179,7 +183,7 @@ export default {
     },
     filter() {
       const filter = {}
-      filter.filter = this.element.filters
+      filter.filter = this.isFirstLoad ? this.filters : this.cfilters
       filter.linkageFilters = this.element.linkageFilters
       filter.drill = this.drillClickDimensionList
       filter.resultCount = this.resultCount
@@ -187,7 +191,7 @@ export default {
       filter.queryFrom = 'panel'
       return filter
     },
-    filters() {
+    cfilters() {
       // 必要 勿删勿该  watch数组,哪怕发生变化 oldValue等于newValue ,深拷贝解决
       if (!this.element.filters) return []
       return JSON.parse(JSON.stringify(this.element.filters))
@@ -242,11 +246,13 @@ export default {
   },
 
   watch: {
-    'filters': function(val1, val2) {
-      if (isChange(val1, val2)) {
-        this.filterInit = true
-        this.getData(this.element.propValue.viewId)
-      }
+    'cfilters': {
+      handler: function(val1, val2) {
+        if (isChange(val1, val2) && !this.isFirstLoad) {
+          this.getData(this.element.propValue.viewId)
+        }
+      },
+      deep: true
     },
     linkageFilters: {
       handler(newVal, oldVal) {
@@ -318,7 +324,8 @@ export default {
     this.refId = uuid.v1
     if (this.element && this.element.propValue && this.element.propValue.viewId) {
       // 如果watch.filters 已经进行数据初始化时候,此处放弃数据初始化
-      !this.filterInit && this.getData(this.element.propValue.viewId, false)
+
+      this.getData(this.element.propValue.viewId, false)
     }
   },
   methods: {
@@ -399,6 +406,7 @@ export default {
             this.requestStatus = 'error'
             this.message = response.message
           }
+          this.isFirstLoad = false
           return true
         }).catch(err => {
           this.requestStatus = 'error'
@@ -413,6 +421,7 @@ export default {
               this.message = err
             }
           }
+          this.isFirstLoad = false
           return true
         })
       }
diff --git a/frontend/src/components/canvas/store/snapshot.js b/frontend/src/components/canvas/store/snapshot.js
index 173725a674..4dcb1a7f8b 100644
--- a/frontend/src/components/canvas/store/snapshot.js
+++ b/frontend/src/components/canvas/store/snapshot.js
@@ -58,9 +58,7 @@ export default {
       state.lastSaveSnapshotIndex = deepCopy(state.snapshotIndex)
     },
     recordStyleChange(state) {
-      if (state.curComponent) {
-        state.styleChangeTimes++
-      }
+      state.styleChangeTimes++
     }
   }
 }
diff --git a/frontend/src/components/widget/serviceImpl/NumberRangeServiceImpl.js b/frontend/src/components/widget/serviceImpl/NumberRangeServiceImpl.js
index c00ec6df99..ab190766eb 100644
--- a/frontend/src/components/widget/serviceImpl/NumberRangeServiceImpl.js
+++ b/frontend/src/components/widget/serviceImpl/NumberRangeServiceImpl.js
@@ -67,6 +67,39 @@ class NumberRangeServiceImpl extends WidgetService {
       return field['deType'] === 2 || field['deType'] === 3
     })
   }
+
+  getParam(element) {
+    if (element.options.value && element.options.value.length > 0) {
+      const values = this.element.options.value
+      const min = values[0]
+      let max = null
+      if (values.length > 1) {
+        max = values[1]
+      }
+      const param = {
+        component: element,
+        value: [min, max],
+        operator: 'between'
+      }
+      if (min && max) {
+        return param
+      }
+      if (!min && !max) {
+        param.value = []
+        return param
+      }
+      if (min) {
+        param.value = [min]
+        param.operator = 'ge'
+        return param
+      }
+      if (max) {
+        param.value = [max]
+        param.operator = 'le'
+        return param
+      }
+    }
+  }
 }
 const numberRangeServiceImpl = new NumberRangeServiceImpl()
 export default numberRangeServiceImpl
diff --git a/frontend/src/components/widget/serviceImpl/NumberSelectGridServiceImpl.js b/frontend/src/components/widget/serviceImpl/NumberSelectGridServiceImpl.js
index 96742074c7..1ed6c1714f 100644
--- a/frontend/src/components/widget/serviceImpl/NumberSelectGridServiceImpl.js
+++ b/frontend/src/components/widget/serviceImpl/NumberSelectGridServiceImpl.js
@@ -81,6 +81,15 @@ class NumberSelectGridServiceImpl extends WidgetService {
       }
     })
   }
+  getParam(element) {
+    const value = element.options.value
+    const param = {
+      component: element,
+      value: !value ? [] : Array.isArray(value) ? value : value.toString().split(','),
+      operator: element.options.attrs.multiple ? 'in' : 'eq'
+    }
+    return param
+  }
 }
 const numberSelectGridServiceImpl = new NumberSelectGridServiceImpl()
 export default numberSelectGridServiceImpl
diff --git a/frontend/src/components/widget/serviceImpl/NumberSelectServiceImpl.js b/frontend/src/components/widget/serviceImpl/NumberSelectServiceImpl.js
index c21b235663..813cd5099e 100644
--- a/frontend/src/components/widget/serviceImpl/NumberSelectServiceImpl.js
+++ b/frontend/src/components/widget/serviceImpl/NumberSelectServiceImpl.js
@@ -82,6 +82,15 @@ class NumberSelectServiceImpl extends WidgetService {
       }
     })
   }
+  getParam(element) {
+    const value = element.options.value
+    const param = {
+      component: element,
+      value: !value ? [] : Array.isArray(value) ? value : value.toString().split(','),
+      operator: element.options.attrs.multiple ? 'in' : 'eq'
+    }
+    return param
+  }
 }
 const numberSelectServiceImpl = new NumberSelectServiceImpl()
 export default numberSelectServiceImpl
diff --git a/frontend/src/components/widget/serviceImpl/TextInputServiceImpl.js b/frontend/src/components/widget/serviceImpl/TextInputServiceImpl.js
index 99b1de205d..764c354bae 100644
--- a/frontend/src/components/widget/serviceImpl/TextInputServiceImpl.js
+++ b/frontend/src/components/widget/serviceImpl/TextInputServiceImpl.js
@@ -67,6 +67,15 @@ class TextInputServiceImpl extends WidgetService {
       return field['deType'] === 0
     })
   }
+  getParam(element) {
+    const value = element.options.value
+    const param = {
+      component: element,
+      value: !value ? [] : Array.isArray(value) ? value : [value],
+      operator: 'like'
+    }
+    return param
+  }
 }
 const textInputServiceImpl = new TextInputServiceImpl()
 export default textInputServiceImpl
diff --git a/frontend/src/components/widget/serviceImpl/TextSelectGridServiceImpl.js b/frontend/src/components/widget/serviceImpl/TextSelectGridServiceImpl.js
index 7b1a90cc3f..8775f4e42a 100644
--- a/frontend/src/components/widget/serviceImpl/TextSelectGridServiceImpl.js
+++ b/frontend/src/components/widget/serviceImpl/TextSelectGridServiceImpl.js
@@ -81,6 +81,15 @@ class TextSelectGridServiceImpl extends WidgetService {
       }
     })
   }
+  getParam(element) {
+    const value = element.options.value
+    const param = {
+      component: element,
+      value: !value ? [] : Array.isArray(value) ? value : value.toString().split(','),
+      operator: element.options.attrs.multiple ? 'in' : 'eq'
+    }
+    return param
+  }
 }
 const textSelectGridServiceImpl = new TextSelectGridServiceImpl()
 export default textSelectGridServiceImpl
diff --git a/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js b/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js
index ad2a8132cb..d5ed13d1ed 100644
--- a/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js
+++ b/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js
@@ -1,6 +1,5 @@
 
 import { WidgetService } from '../service/WidgetService'
-
 const leftPanel = {
   icon: 'iconfont icon-xialakuang',
   label: 'detextselect.label',
@@ -81,6 +80,16 @@ class TextSelectServiceImpl extends WidgetService {
       }
     })
   }
+
+  getParam(element) {
+    const value = element.options.value
+    const param = {
+      component: element,
+      value: !value ? [] : Array.isArray(value) ? value : value.toString().split(','),
+      operator: element.options.attrs.multiple ? 'in' : 'eq'
+    }
+    return param
+  }
 }
 const textSelectServiceImpl = new TextSelectServiceImpl()
 export default textSelectServiceImpl
diff --git a/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js b/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js
index 7817769a66..f69e9d36db 100644
--- a/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js
+++ b/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js
@@ -1,7 +1,9 @@
 import {
   WidgetService
 } from '../service/WidgetService'
-
+import {
+  timeSection
+} from '@/utils'
 const leftPanel = {
   icon: 'iconfont icon-riqi',
   label: 'dedaterange.label',
@@ -222,6 +224,64 @@ class TimeDateRangeServiceImpl extends WidgetService {
       return false
     }
   }
+  getParam(element) {
+    let timeArr = []
+    if (element.options.attrs.default.isDynamic) {
+      let value = this.dynamicDateFormNow(element)
+      value = this.formatFilterValue(value)
+      timeArr = this.formatValues(value, element)
+    } else {
+      let value = this.fillValueDerfault(element)
+      value = this.formatFilterValue(value)
+      timeArr = this.formatValues(value, element)
+    }
+    const param = {
+      component: element,
+      value: timeArr,
+      operator: 'between'
+    }
+    return param
+  }
+  fillValueDerfault(element) {
+    const defaultV = element.options.value === null ? '' : element.options.value.toString()
+    if (element.options.attrs.type === 'daterange') {
+      if (defaultV === null || typeof defaultV === 'undefined' || defaultV === '' || defaultV ===
+          '[object Object]') {
+        return []
+      }
+      return defaultV.split(',').map(item => parseFloat(item))
+    } else {
+      if (defaultV === null || typeof defaultV === 'undefined' || defaultV === '' || defaultV ===
+          '[object Object]') {
+        return null
+      }
+      return parseFloat(defaultV.split(',')[0])
+    }
+  }
+  formatFilterValue(values) {
+    if (values === null) return []
+    if (Array.isArray(values)) return values
+    return [values]
+  }
+  formatValues(values, element) {
+    if (!values || values.length === 0) {
+      return []
+    }
+    if (element.options.attrs.type === 'daterange') {
+      if (values.length !== 2) {
+        return null
+      }
+      let start = values[0]
+      let end = values[1]
+      start = timeSection(start, 'date')[0]
+      end = timeSection(end, 'date')[1]
+      const results = [start, end]
+      return results
+    } else {
+      const value = values[0]
+      return timeSection(parseFloat(value), element.options.attrs.type)
+    }
+  }
 }
 const timeDateRangeServiceImpl = new TimeDateRangeServiceImpl()
 export default timeDateRangeServiceImpl
diff --git a/frontend/src/components/widget/serviceImpl/TimeDateServiceImpl.js b/frontend/src/components/widget/serviceImpl/TimeDateServiceImpl.js
index 8c79246e64..8e5024cc45 100644
--- a/frontend/src/components/widget/serviceImpl/TimeDateServiceImpl.js
+++ b/frontend/src/components/widget/serviceImpl/TimeDateServiceImpl.js
@@ -1,7 +1,9 @@
 import {
   WidgetService
 } from '../service/WidgetService'
-
+import {
+  timeSection
+} from '@/utils'
 const leftPanel = {
   icon: 'iconfont icon-ri',
   label: 'dedate.label',
@@ -153,6 +155,64 @@ class TimeDateServiceImpl extends WidgetService {
       }
     }
   }
+  getParam(element) {
+    let timeArr = []
+    if (element.options.attrs.default.isDynamic) {
+      let value = this.dynamicDateFormNow(element)
+      value = this.formatFilterValue(value)
+      timeArr = this.formatValues(value, element)
+    } else {
+      let value = this.fillValueDerfault(element)
+      value = this.formatFilterValue(value)
+      timeArr = this.formatValues(value, element)
+    }
+    const param = {
+      component: element,
+      value: timeArr,
+      operator: 'between'
+    }
+    return param
+  }
+  fillValueDerfault(element) {
+    const defaultV = element.options.value === null ? '' : element.options.value.toString()
+    if (element.options.attrs.type === 'daterange') {
+      if (defaultV === null || typeof defaultV === 'undefined' || defaultV === '' || defaultV ===
+          '[object Object]') {
+        return []
+      }
+      return defaultV.split(',').map(item => parseFloat(item))
+    } else {
+      if (defaultV === null || typeof defaultV === 'undefined' || defaultV === '' || defaultV ===
+          '[object Object]') {
+        return null
+      }
+      return parseFloat(defaultV.split(',')[0])
+    }
+  }
+  formatFilterValue(values) {
+    if (values === null) return []
+    if (Array.isArray(values)) return values
+    return [values]
+  }
+  formatValues(values, element) {
+    if (!values || values.length === 0) {
+      return []
+    }
+    if (element.options.attrs.type === 'daterange') {
+      if (values.length !== 2) {
+        return null
+      }
+      let start = values[0]
+      let end = values[1]
+      start = timeSection(start, 'date')[0]
+      end = timeSection(end, 'date')[1]
+      const results = [start, end]
+      return results
+    } else {
+      const value = values[0]
+      return timeSection(parseFloat(value), element.options.attrs.type)
+    }
+  }
 }
 const timeDateServiceImpl = new TimeDateServiceImpl({
   name: 'timeDateWidget'
diff --git a/frontend/src/components/widget/serviceImpl/TimeMonthServiceImpl.js b/frontend/src/components/widget/serviceImpl/TimeMonthServiceImpl.js
index 41ee83ad9e..7471c381c4 100644
--- a/frontend/src/components/widget/serviceImpl/TimeMonthServiceImpl.js
+++ b/frontend/src/components/widget/serviceImpl/TimeMonthServiceImpl.js
@@ -1,5 +1,7 @@
 import { WidgetService } from '../service/WidgetService'
-
+import {
+  timeSection
+} from '@/utils'
 const leftPanel = {
   icon: 'iconfont icon-yue',
   label: 'deyearmonth.label',
@@ -119,6 +121,64 @@ class TimeMonthServiceImpl extends WidgetService {
       }
     }
   }
+  getParam(element) {
+    let timeArr = []
+    if (element.options.attrs.default.isDynamic) {
+      let value = this.dynamicDateFormNow(element)
+      value = this.formatFilterValue(value)
+      timeArr = this.formatValues(value, element)
+    } else {
+      let value = this.fillValueDerfault(element)
+      value = this.formatFilterValue(value)
+      timeArr = this.formatValues(value, element)
+    }
+    const param = {
+      component: element,
+      value: timeArr,
+      operator: 'between'
+    }
+    return param
+  }
+  fillValueDerfault(element) {
+    const defaultV = element.options.value === null ? '' : element.options.value.toString()
+    if (element.options.attrs.type === 'daterange') {
+      if (defaultV === null || typeof defaultV === 'undefined' || defaultV === '' || defaultV ===
+          '[object Object]') {
+        return []
+      }
+      return defaultV.split(',').map(item => parseFloat(item))
+    } else {
+      if (defaultV === null || typeof defaultV === 'undefined' || defaultV === '' || defaultV ===
+          '[object Object]') {
+        return null
+      }
+      return parseFloat(defaultV.split(',')[0])
+    }
+  }
+  formatFilterValue(values) {
+    if (values === null) return []
+    if (Array.isArray(values)) return values
+    return [values]
+  }
+  formatValues(values, element) {
+    if (!values || values.length === 0) {
+      return []
+    }
+    if (element.options.attrs.type === 'daterange') {
+      if (values.length !== 2) {
+        return null
+      }
+      let start = values[0]
+      let end = values[1]
+      start = timeSection(start, 'date')[0]
+      end = timeSection(end, 'date')[1]
+      const results = [start, end]
+      return results
+    } else {
+      const value = values[0]
+      return timeSection(parseFloat(value), element.options.attrs.type)
+    }
+  }
 }
 const timeMonthServiceImpl = new TimeMonthServiceImpl()
 export default timeMonthServiceImpl
diff --git a/frontend/src/components/widget/serviceImpl/TimeYearServiceImpl.js b/frontend/src/components/widget/serviceImpl/TimeYearServiceImpl.js
index b8a7f817f9..2ae0a78234 100644
--- a/frontend/src/components/widget/serviceImpl/TimeYearServiceImpl.js
+++ b/frontend/src/components/widget/serviceImpl/TimeYearServiceImpl.js
@@ -1,5 +1,7 @@
 import { WidgetService } from '../service/WidgetService'
-
+import {
+  timeSection
+} from '@/utils'
 const leftPanel = {
   icon: 'iconfont icon-nian',
   label: 'deyear.label',
@@ -110,6 +112,64 @@ class TimeYearServiceImpl extends WidgetService {
       return new Date(dynamicSuffix === 'before' ? (nowYear - dynamicPrefix) : (nowYear + dynamicPrefix), 0, 1).getTime()
     }
   }
+  getParam(element) {
+    let timeArr = []
+    if (element.options.attrs.default.isDynamic) {
+      let value = this.dynamicDateFormNow(element)
+      value = this.formatFilterValue(value)
+      timeArr = this.formatValues(value, element)
+    } else {
+      let value = this.fillValueDerfault(element)
+      value = this.formatFilterValue(value)
+      timeArr = this.formatValues(value, element)
+    }
+    const param = {
+      component: element,
+      value: timeArr,
+      operator: 'between'
+    }
+    return param
+  }
+  fillValueDerfault(element) {
+    const defaultV = element.options.value === null ? '' : element.options.value.toString()
+    if (element.options.attrs.type === 'daterange') {
+      if (defaultV === null || typeof defaultV === 'undefined' || defaultV === '' || defaultV ===
+          '[object Object]') {
+        return []
+      }
+      return defaultV.split(',').map(item => parseFloat(item))
+    } else {
+      if (defaultV === null || typeof defaultV === 'undefined' || defaultV === '' || defaultV ===
+          '[object Object]') {
+        return null
+      }
+      return parseFloat(defaultV.split(',')[0])
+    }
+  }
+  formatFilterValue(values) {
+    if (values === null) return []
+    if (Array.isArray(values)) return values
+    return [values]
+  }
+  formatValues(values, element) {
+    if (!values || values.length === 0) {
+      return []
+    }
+    if (element.options.attrs.type === 'daterange') {
+      if (values.length !== 2) {
+        return null
+      }
+      let start = values[0]
+      let end = values[1]
+      start = timeSection(start, 'date')[0]
+      end = timeSection(end, 'date')[1]
+      const results = [start, end]
+      return results
+    } else {
+      const value = values[0]
+      return timeSection(parseFloat(value), element.options.attrs.type)
+    }
+  }
 }
 const timeYearServiceImpl = new TimeYearServiceImpl()
 export default timeYearServiceImpl
diff --git a/frontend/src/utils/conditionUtil.js b/frontend/src/utils/conditionUtil.js
index 7cfee37f9f..a0cbea5ccf 100644
--- a/frontend/src/utils/conditionUtil.js
+++ b/frontend/src/utils/conditionUtil.js
@@ -1,5 +1,7 @@
 
 import { Condition } from '@/components/widget/bean/Condition'
+import { ApplicationContext } from '@/utils/ApplicationContext'
+
 /**
  * 判断两个conditions数组是否相同
  * @param {*} conditions1
@@ -36,3 +38,36 @@ export const formatLinkageCondition = obj => {
   const condition = new Condition(null, fieldId, operator, value, viewIds)
   return condition
 }
+
+export const buildFilterMap = panelItems => {
+  const viewIdMatch = (viewIds, viewId) => !viewIds || viewIds.length === 0 || viewIds.includes(viewId)
+  const result = {}
+  panelItems.forEach(element => {
+    if (element.type === 'view') {
+      result[element.propValue.viewId] = []
+    }
+  })
+  panelItems.forEach(element => {
+    if (element.type !== 'custom') {
+      return true
+    }
+    const widget = ApplicationContext.getService(element.serviceName)
+    const param = widget.getParam(element)
+    const condition = formatCondition(param)
+    const vValid = valueValid(condition)
+    const filterComponentId = condition.componentId
+    Object.keys(result).forEach(viewId => {
+      const vidMatch = viewIdMatch(condition.viewIds, viewId)
+      const viewFilters = result[viewId]
+      let j = viewFilters.length
+      while (j--) {
+        const filter = viewFilters[j]
+        if (filter.componentId === filterComponentId) {
+          viewFilters.splice(j, 1)
+        }
+      }
+      vidMatch && vValid && viewFilters.push(condition)
+    })
+  })
+  return result
+}
diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue
index 272f006aeb..f32461c88f 100644
--- a/frontend/src/views/chart/view/ChartEdit.vue
+++ b/frontend/src/views/chart/view/ChartEdit.vue
@@ -1860,29 +1860,29 @@ export default {
       }
     },
     addXaxis(e) {
-      if ((this.view.type === 'map' || this.view.type === 'word-cloud') && this.view.xaxis.length > 1) {
-        this.view.xaxis = [this.view.xaxis[0]]
-      }
       if (this.view.type !== 'table-info') {
         this.dragCheckType(this.view.xaxis, 'd')
       }
       this.dragMoveDuplicate(this.view.xaxis, e)
+      if ((this.view.type === 'map' || this.view.type === 'word-cloud') && this.view.xaxis.length > 1) {
+        this.view.xaxis = [this.view.xaxis[0]]
+      }
       this.calcData(true)
     },
     addYaxis(e) {
+      this.dragCheckType(this.view.yaxis, 'q')
+      this.dragMoveDuplicate(this.view.yaxis, e)
       if ((this.view.type === 'map' || this.view.type === 'waterfall' || this.view.type === 'word-cloud') && this.view.yaxis.length > 1) {
         this.view.yaxis = [this.view.yaxis[0]]
       }
-      this.dragCheckType(this.view.yaxis, 'q')
-      this.dragMoveDuplicate(this.view.yaxis, e)
       this.calcData(true)
     },
     addYaxisExt(e) {
+      this.dragCheckType(this.view.yaxisExt, 'q')
+      this.dragMoveDuplicate(this.view.yaxisExt, e)
       if (this.view.type === 'map' && this.view.yaxisExt.length > 1) {
         this.view.yaxisExt = [this.view.yaxisExt[0]]
       }
-      this.dragCheckType(this.view.yaxisExt, 'q')
-      this.dragMoveDuplicate(this.view.yaxisExt, e)
       this.calcData(true)
     },
     moveToDimension(e) {
diff --git a/frontend/src/views/wizard/details/CardDetail.vue b/frontend/src/views/wizard/details/CardDetail.vue
index 3e327642a5..581d678b89 100644
--- a/frontend/src/views/wizard/details/CardDetail.vue
+++ b/frontend/src/views/wizard/details/CardDetail.vue
@@ -82,7 +82,7 @@ export default {
         color: var(--TextPrimary, #6D6D6D);
         font-size: 12px;
         position: absolute;
-        bottom: 8px;
+        bottom: 16px;
       }
     }
   }
diff --git a/frontend/src/views/wizard/index.vue b/frontend/src/views/wizard/index.vue
index 1a3824dfb6..8c8641ccc3 100644
--- a/frontend/src/views/wizard/index.vue
+++ b/frontend/src/views/wizard/index.vue
@@ -42,7 +42,7 @@ export default {
           head: this.$t('wizard.online_document'),
           content: this.$t('wizard.online_document_hint'),
           bottom: '',
-          href: 'https://dataease.io/docs/dev_manual/dev_manual/',
+          href: 'https://dataease.io/docs/index.html',
           component: 'CardDetail'
         },
         {