浏览代码

fix: 新增时间选择器、日期时间选择器默认添加当前时间。优化选择器在时间格式变化时,数据数值型和字符串类型互换出现的报错

wu.jian2 1 年之前
父节点
当前提交
8fc2069fd5

+ 33 - 13
data-room-ui/packages/BasicComponents/DateTimePicker/index.vue

@@ -1,13 +1,14 @@
 <template>
   <el-date-picker
     :key="config.customize.type"
-    v-model="config.customize.value"
+    v-model="value"
     :picker-options="config.customize.pickerOptions"
     :type="config.customize.type"
     clearable
     :class="['basic-component-date-picker', `date-picker-${config.code}`]"
     :popper-class="'basic-component-date-picker date-picker-popper-' + config.code"
     :value-format="config.customize.valueFormat"
+    :default-value="value"
     size="large"
     @focus="focusEvent"
     @change="changeValue"
@@ -16,6 +17,7 @@
 </template>
 
 <script>
+import moment from 'moment'
 import cloneDeep from 'lodash/cloneDeep'
 import commonMixins from 'data-room-ui/js/mixins/commonMixins'
 import linkageMixins from 'data-room-ui/js/mixins/linkageMixins'
@@ -35,6 +37,7 @@ export default {
   },
   data () {
     return {
+      value: '',
       innerConfig: {}
     }
   },
@@ -47,16 +50,30 @@ export default {
     }
   },
   watch: {
-    config: {
-      handler: function (val) {
-        if (val && val.customize && val.customize.formatType === 'custom') {
-          // 解决时间格式化类型为自定义时,时间格式化类型和时间格式化值数据类型不匹配的问题
-          this.$nextTick(() => {
-            this.config.customize.value = toString(this.config.customize.value)
-          })
+    'config.customize.formatType': {
+      handler (val) {
+        if (val === 'timestamp') {
+          this.value = 0
+          this.valueFormat = 'timestamp'
+        } else if (val === 'custom') {
+          this.value = ''
+          this.valueFormat = 'YYYY-MM-DD HH:mm:ss'
+        }
+      },
+      immediate: true
+    },
+    'config.customize.type': {
+      handler (val) {
+        if (['year', 'month', 'date', 'week', 'datetime'].includes(val)) {
+          this.value = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
+        } else {
+          this.value = [
+            moment(new Date()).subtract(7, 'days').format('YYYY-MM-DD HH:mm:ss'),
+            moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
+          ]
         }
       },
-      deep: true
+      immediate: true
     }
   },
   created () { },
@@ -65,9 +82,11 @@ export default {
       document.querySelector(`.date-picker-${this.config.code}`).style.pointerEvents = 'none'
     }
     this.changeStyle(this.config)
-    // 将config.customize.value设置值为当前时间 :
-    if (this.config.customize.value === '') {
-      this.config.customize.value = new Date()
+    if (this.value === '') {
+      this.value = [
+        moment(new Date()).subtract(7, 'days').format('YYYY-MM-DD HH:mm:ss'),
+        moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
+      ]
     }
   },
   beforeDestroy () {
@@ -128,6 +147,7 @@ export default {
     },
     // 组件联动
     changeValue (val) {
+      console.log(val)
       this.linkage({ [this.config.code]: val })
     },
     focusEvent () {
@@ -171,7 +191,7 @@ export default {
       })
     },
     mouseenter () {
-      if (this.config.customize.value) {
+      if (this.value) {
         setTimeout(() => {
           // 清空图标
           const timePickerCloseIcon = document.querySelector(`.date-picker-${this.innerConfig.code} .el-icon-circle-close`)

+ 20 - 10
data-room-ui/packages/BasicComponents/DateTimePicker/setting.vue

@@ -114,7 +114,6 @@
                 class="bs-el-select"
                 popper-class="bs-el-select"
                 clearable
-                @change="selectFormatType"
               >
                 <el-option
                   v-for="(type) in formatTypeOptions"
@@ -163,6 +162,7 @@
   </div>
 </template>
 <script>
+import moment from 'moment'
 import SettingTitle from 'data-room-ui/SettingTitle/index.vue'
 import ColorPicker from 'data-room-ui/ColorPicker/index.vue'
 import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue'
@@ -210,7 +210,6 @@ export default {
         { label: '年', value: 'year' },
         { label: '月', value: 'month' },
         { label: '日', value: 'date' },
-        { label: '周', value: 'week' },
         { label: '日期时间', value: 'datetime' },
         { label: '日期时间范围', value: 'datetimerange' },
         { label: '日期范围', value: 'daterange' }
@@ -220,14 +219,25 @@ export default {
   watch: {},
   mounted () {},
   methods: {
-    selectFormatType (type) {
-      if (type === 'timestamp') {
-        this.config.customize.value = 0
-        this.config.customize.valueFormat = 'timestamp'
-      } else if (type === 'custom') {
-        this.config.customize.valueFormat = 'yyyy-MM-dd HH:mm:ss'
-      }
-    }
+    // selectFormatType (type) {
+    //   if (type === 'timestamp') {
+    //     this.config.customize.value = 0
+    //     this.config.customize.valueFormat = 'timestamp'
+    //   } else if (type === 'custom') {
+    //     this.config.customize.value = ''
+    //     this.config.customize.valueFormat = 'YYYY-MM-DD HH:mm:ss'
+    //   }
+    // },
+    // selectDisplayType (val) {
+    //   if (['year', 'month', 'date', 'week', 'datetime'].includes(val)) {
+    //     this.config.customize.value = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
+    //   } else {
+    //     this.config.customize.value = [
+    //       moment(new Date()).subtract(7, 'days').format('YYYY-MM-DD HH:mm:ss'),
+    //       moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
+    //     ]
+    //   }
+    // }
   }
 }
 </script>

+ 2 - 3
data-room-ui/packages/BasicComponents/DateTimePicker/settingConfig.js

@@ -22,15 +22,14 @@ const customConfig = {
   },
   // 自定义属性
   customize: {
-    value: '',
     // 选择框背景颜色
     bgColor: '#35393F',
     // 选择框文字颜色
     fontColor: '#FFFFFF',
     // 选择框文字大小
     fontSize: 20,
-    // 显示类型 year/month/date/week/ datetime/datetimerange/daterange
-    type: 'datetime',
+    // 显示类型 year/month/date/ datetime/datetimerange/daterange
+    type: 'datetimerange',
     // 时间格式化类型:时间戳(timestamp),自定义(custom)
     formatType: 'custom',
     // 绑定值的格式

+ 7 - 21
data-room-ui/packages/BasicComponents/TimePicker/index.vue

@@ -7,6 +7,7 @@
     :class="['basic-component-time-picker', `time-picker-${config.code}`]"
     :popper-class="'basic-component-time-picker time-picker-popper-' + config.code"
     :value-format="config.customize.valueFormat"
+    :default-value="config.customize.value"
     @focus="focusEvent"
     @change="changeValue"
     @mouseenter.native="mouseenter"
@@ -47,32 +48,16 @@ export default {
       return (this.$route.path === window?.BS_CONFIG?.routers?.previewUrl) || (this.$route.path === '/big-screen/preview')
     }
   },
-  watch: {
-    config: {
-      handler: function (val) {
-        if (val && val.customize && val.customize.formatType === 'custom') {
-          this.$nextTick(() => {
-            this.config.customize.value = toString(this.config.customize.value)
-          })
-        }
-      },
-      deep: true
-    }
-  },
+  watch: { },
   created () { },
   mounted () {
     if (!this.isPreview) {
-      // document.querySelector(`.time-picker-${this.config.code}`).style.pointerEvents = 'none'
+      document.querySelector(`.time-picker-${this.config.code}`).style.pointerEvents = 'none'
+    }
+    if (this.config.customize.value === '') {
+      this.config.customize.value = moment(new Date()).format(this.config.customize.valueFormat)
     }
     this.changeStyle(this.config)
-    // 将config.customize.value设置值为当前时间 :HH:mm:ss
-    // if (this.config.customize.value === '') {
-    //   this.config.customize.valueFormat = 'HH:mm:ss'
-    //   this.$nextTick(() => {
-    //     this.config.customize.value = moment(new Date()).format('HH:mm:ss')
-    //     console.log(this.config.customize.value)
-    //   })
-    // }
   },
   beforeDestroy () { },
   methods: {
@@ -130,6 +115,7 @@ export default {
     },
     // 组件联动
     changeValue (val) {
+      console.log('val', val)
       this.linkage({ [this.config.code]: val })
     },
     focusEvent () {

+ 1 - 0
data-room-ui/packages/BasicComponents/TimePicker/setting.vue

@@ -184,6 +184,7 @@ export default {
         this.config.customize.valueFormat = 'timestamp'
       } else if (type === 'custom') {
         this.config.customize.valueFormat = 'HH:mm:ss'
+        this.config.customize.value = ''
       }
     }
   }

+ 1 - 1
data-room-ui/packages/BizComponent/index.vue

@@ -140,7 +140,7 @@
   </div>
 </template>
 <script>
-import { toJpeg, toPng } from 'html-to-image'
+import { toJpeg } from 'html-to-image'
 import CusBtn from 'data-room-ui/BigScreenDesign/BtnLoading'
 // import MonacoEditor from 'data-room-ui/MonacoEditor'
 import BizComponentPreview from './Preview'