Browse Source

去掉至今

lifanagju_citu 10 months ago
parent
commit
d9746b022a

+ 176 - 0
src/components/FormUI/datePicker/index copy.vue

@@ -0,0 +1,176 @@
+<template>
+  <div :style="{ width: item.width ? item.width + 'px' : '100%' }">
+    <div class="d-flex">
+      <VueDatePicker
+        v-model="value"
+        ref="datepicker"
+        :options="item.options || {}"
+        locale="zh-CN"
+        :disabled="soFar || item.disabled || false"
+        :range="item.range || false"
+        :model-type="timestamp"
+        :month-picker="month"
+        :time-picker="time"
+        :year-picker="year"
+        auto-apply
+        text-input
+        :show-now-button="item.showToday"
+        now-button-label="今天"
+        :enable-time-picker="item.enableTimePicker ?? false"
+        :clearable="item.clearable ?? true"
+        :day-names="['一', '二', '三', '四', '五', '六', '七']"
+        v-bind="$attrs"
+        :class="{'detailMargin': detailMargin}"
+        style="flex: 1"
+        @open="handleOpen"
+        @closed="handleClosed"
+        @update:modelValue="modelValueUpDate"
+      >
+        <template #trigger>
+          <v-text-field
+            v-model="formatText"
+            variant="outlined"
+            :density="item.dense || 'compact'"
+            type="text"
+            :rules="soFar ? [] : rules"
+            :disabled="soFar || item.disabled"
+            :style="{width: item.width}"
+            :color="item.color || 'primary'"
+            :label="item.label"
+            :placeholder="item.placeholder || item.label"
+            :autofocus="item.autofocus"
+            :required="item.required"
+            :suffix="item.suffix"
+            :append-icon="item.appendIcon"
+            :append-inner-icon="item.appendInnerIcon"
+            :clearable="item.clearable"
+            :readonly="true"
+            :counter="item.counter"
+            :prepend-inner-icon="item.prependInnerIcon"
+            hide-spin-buttons
+            :class="item.class"
+            :hide-details="hideDetails || false"
+            @click:clear="handleClear"
+            @click="inputClick"
+            @blur="inputBlur"
+          ></v-text-field>
+        </template>
+      </VueDatePicker>
+      <div>
+        <v-checkbox-btn
+          v-if="item.showSoFar"
+          v-model="soFar"
+          color="primary"
+          :label="$t('sys.soFar')"
+          class="ml-2"
+          :disabled="item.disabled"
+          :style="`line-height: ${item.dense === 'default' ? 56 : item.dense === 'comfortable' ? 48 : 40 }px;`"
+          hide-details
+          @update:modelValue="handleCheckboxChange"
+        ></v-checkbox-btn>
+      </div>
+    </div>
+  </div>
+</template>
+<script setup>
+import { timesTampChange } from '@/utils/date'
+import { computed, ref } from 'vue'
+defineOptions({ name:'FormUI-v-text-field'})
+
+const props = defineProps({item: Object, modelValue: [String, Number, Boolean], changeFn: Function})
+const emit = defineEmits(['update:modelValue', 'change'])
+const item = props.item
+
+const value = ref(props.modelValue === true ? null : props.modelValue)
+const soFar = ref(false)
+
+// watch(
+//   () => props.modelValue, 
+//   (newVal) => {
+//     if (newVal === true) {
+//       value.value = ''
+//       soFar.value = !newVal
+//     }
+//   },
+//   { immediate: true },
+//   { deep: true }
+// )
+
+const timestamp = 'timestamp' // 固定不能变
+const formatText = ref('')
+
+const modelValueUpDate = (val) => {
+  value.value = val
+  getFormatText()
+  emit('update:modelValue', value.value)
+  emit('change', value.value)
+}
+
+const getFormatText = () => {
+  const format = item.format || 'Y-M-D'
+  formatText.value = timesTampChange(value.value, format)
+}
+
+const handleClear = () => {
+  value.value = null
+  emit('change', value.value)
+}
+
+const rules = ref(item.rules)
+const handleOpen = () => {
+  rules.value = []
+}
+const handleClosed = () => {
+  rules.value = item.rules
+}
+
+const hideDetails = ref(item.hideDetails || false)
+const detailMargin = ref(false)
+const inputClick = () => {
+  if (item.hideDetails) return
+  hideDetails.value = true
+  detailMargin.value = true
+}
+const inputBlur = () => {
+  if (item.hideDetails) return
+  hideDetails.value = item.hideDetails || false
+  detailMargin.value = false
+}
+
+// dateType: 默认 date, 即年月日
+const year = computed(() => {
+  return item.dateType === 'year'
+})
+const month = computed(() => {
+  return item.dateType === 'month'
+})
+const time = computed(() => {
+  return item.dateType === 'time'
+})
+
+if (!item.format) item.format = year.value ? 'Y' : month.value ? 'Y-M' : time.value ? 'Y-M-D h:m:s' : 'Y-M-D'
+if (item.value) value.value = item.value; getFormatText()
+
+
+// 《至今》复选框事件
+const handleCheckboxChange = (val) => {
+  rules.value = val ? [] : item.rules
+  if (val) {
+    modelValueUpDate(null)
+  } else {
+    modelValueUpDate(null)
+  }
+}
+// if (soFar.value) handleCheckboxChange(soFar.value)
+
+</script>
+<style lang="scss" scoped>
+// .removeDetailHeight {}
+:deep(.dp--menu-wrapper) {
+  // top: 50px !important;
+  left: 0 !important;
+}
+.detailMargin {
+  margin-bottom: 22px;
+}
+</style>

+ 9 - 29
src/components/FormUI/datePicker/index.vue

@@ -56,33 +56,25 @@
           ></v-text-field>
         </template>
       </VueDatePicker>
-      <div>
-        <v-checkbox-btn
-          v-if="item.showSoFar"
-          v-model="soFar"
-          color="primary"
-          :label="$t('sys.soFar')"
-          class="ml-2"
-          :disabled="item.disabled"
-          :style="`line-height: ${item.dense === 'default' ? 56 : item.dense === 'comfortable' ? 48 : 40 }px;`"
-          hide-details
-          @update:modelValue="handleCheckboxChange"
-        ></v-checkbox-btn>
-      </div>
     </div>
   </div>
 </template>
 <script setup>
 import { timesTampChange } from '@/utils/date'
-import { computed, ref } from 'vue'
+import { computed, ref, watch } from 'vue'
 defineOptions({ name:'FormUI-v-text-field'})
 
-const props = defineProps({item: Object})
+const props = defineProps({item: Object, modelValue: [String, Number, Boolean], changeFn: Function})
 const emit = defineEmits(['update:modelValue', 'change'])
 const item = props.item
 
 const value = ref(props.modelValue)
-const soFar = ref(item.value - 0 === -28800000 ? true : false)
+const soFar = ref(false)
+
+watch(() => item.value, (newVal) => {
+  value.value = newVal - 0
+  if (value.value) getFormatText()
+})
 
 const timestamp = 'timestamp' // 固定不能变
 const formatText = ref('')
@@ -137,19 +129,7 @@ const time = computed(() => {
 })
 
 if (!item.format) item.format = year.value ? 'Y' : month.value ? 'Y-M' : time.value ? 'Y-M-D h:m:s' : 'Y-M-D'
-if (item.value) value.value = item.value - 0; getFormatText()
-
-
-// 《至今》复选框事件
-const handleCheckboxChange = (val) => {
-  rules.value = val ? [] : item.rules
-  if (val) {
-    modelValueUpDate(-28800000)
-  } else {
-    modelValueUpDate(null)
-  }
-}
-if (soFar.value) handleCheckboxChange(soFar.value)
+if (item.value) value.value = item.value; getFormatText()
 
 </script>
 <style lang="scss" scoped>