|
@@ -1,12 +1,12 @@
|
|
<template>
|
|
<template>
|
|
<div :style="{ width: item.width ? item.width + 'px' : '100%' }">
|
|
<div :style="{ width: item.width ? item.width + 'px' : '100%' }">
|
|
- <div class="d-flex">
|
|
|
|
- <VueDatePicker
|
|
|
|
|
|
+ <div class="d-flex align-center">
|
|
|
|
+ <!-- <VueDatePicker
|
|
v-model="value"
|
|
v-model="value"
|
|
ref="datepicker"
|
|
ref="datepicker"
|
|
:options="item.options || {}"
|
|
:options="item.options || {}"
|
|
locale="zh-CN"
|
|
locale="zh-CN"
|
|
- :disabled="soFar || item.disabled || false"
|
|
|
|
|
|
+ :disabled="item.disabled || false"
|
|
:range="item.range || false"
|
|
:range="item.range || false"
|
|
:model-type="timestamp"
|
|
:model-type="timestamp"
|
|
:month-picker="month"
|
|
:month-picker="month"
|
|
@@ -14,15 +14,16 @@
|
|
:year-picker="year"
|
|
:year-picker="year"
|
|
auto-apply
|
|
auto-apply
|
|
text-input
|
|
text-input
|
|
|
|
+ :time-picker-inline="true"
|
|
:show-now-button="item.showToday"
|
|
:show-now-button="item.showToday"
|
|
now-button-label="今天"
|
|
now-button-label="今天"
|
|
|
|
+ :disabled-dates="item.disabledDates ? disabledDates : []"
|
|
:enable-time-picker="item.enableTimePicker ?? false"
|
|
:enable-time-picker="item.enableTimePicker ?? false"
|
|
:clearable="item.clearable ?? true"
|
|
:clearable="item.clearable ?? true"
|
|
:day-names="['一', '二', '三', '四', '五', '六', '七']"
|
|
:day-names="['一', '二', '三', '四', '五', '六', '七']"
|
|
- v-bind="$attrs"
|
|
|
|
- :time-picker-inline="true"
|
|
|
|
select-text="确认"
|
|
select-text="确认"
|
|
cancel-text="取消"
|
|
cancel-text="取消"
|
|
|
|
+ v-bind="$attrs"
|
|
:class="{'detailMargin': detailMargin}"
|
|
:class="{'detailMargin': detailMargin}"
|
|
style="flex: 1"
|
|
style="flex: 1"
|
|
@open="handleOpen"
|
|
@open="handleOpen"
|
|
@@ -35,8 +36,8 @@
|
|
variant="outlined"
|
|
variant="outlined"
|
|
:density="item.dense || 'compact'"
|
|
:density="item.dense || 'compact'"
|
|
type="text"
|
|
type="text"
|
|
- :rules="soFar ? [] : rules"
|
|
|
|
- :disabled="soFar || item.disabled"
|
|
|
|
|
|
+ :rules="rules"
|
|
|
|
+ :disabled="item.disabled"
|
|
:style="{width: item.width}"
|
|
:style="{width: item.width}"
|
|
:color="item.color || 'primary'"
|
|
:color="item.color || 'primary'"
|
|
:label="item.label"
|
|
:label="item.label"
|
|
@@ -58,48 +59,65 @@
|
|
@blur="inputBlur"
|
|
@blur="inputBlur"
|
|
></v-text-field>
|
|
></v-text-field>
|
|
</template>
|
|
</template>
|
|
- </VueDatePicker>
|
|
|
|
- <div>
|
|
|
|
- <v-checkbox-btn
|
|
|
|
- v-if="item.showSoFar"
|
|
|
|
- v-model="soFar"
|
|
|
|
- color="primary"
|
|
|
|
- :label="$t('sys.soFar')"
|
|
|
|
- class="ml-2"
|
|
|
|
|
|
+ </VueDatePicker> -->
|
|
|
|
+
|
|
|
|
+ <div class="form-label" :style="{'width': item.labelWidth + 'px'}">{{ item.label }}</div>
|
|
|
|
+ <el-config-provider :locale="zhCn">
|
|
|
|
+ <el-date-picker
|
|
|
|
+ style="flex: 1;"
|
|
|
|
+ v-model="value"
|
|
|
|
+ size="large"
|
|
|
|
+ :type="item.mode || 'date'"
|
|
|
|
+ :placeholder="item.placeholder || '请选择'"
|
|
|
|
+ :start-placeholder="item.startPlaceholder || '开始日期'"
|
|
|
|
+ :end-placeholder="item.endPlaceholder || '结束日期'"
|
|
|
|
+ :format="item.format"
|
|
|
|
+ :value-format="item.valueFormat || 'x'"
|
|
:disabled="item.disabled"
|
|
: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>
|
|
|
|
|
|
+ :disabled-date="disabledDates"
|
|
|
|
+ :date-format="item.dateFormat"
|
|
|
|
+ :time-format="item.timeFormat"
|
|
|
|
+ :default-value="item.defaultValue"
|
|
|
|
+ @change="modelValueUpDate"
|
|
|
|
+ @clear="handleClear"
|
|
|
|
+ @blur="handleOpen"
|
|
|
|
+ >
|
|
|
|
+ </el-date-picker>
|
|
|
|
+ </el-config-provider>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
+
|
|
<script setup>
|
|
<script setup>
|
|
-import { timesTampChange } from '@/utils/date'
|
|
|
|
-import { computed, ref } from 'vue'
|
|
|
|
defineOptions({ name:'FormUI-v-text-field'})
|
|
defineOptions({ name:'FormUI-v-text-field'})
|
|
|
|
+import { timesTampChange } from '@/utils/date'
|
|
|
|
+import { computed, ref, watch } from 'vue'
|
|
|
|
+import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
|
|
|
+// import { ElDatePicker } from 'element-plus'
|
|
|
|
|
|
-const props = defineProps({item: Object, modelValue: [String, Number, Boolean], changeFn: Function})
|
|
|
|
|
|
+const props = defineProps({item: Object, modelValue: [String, Number, Boolean, Array], changeFn: Function})
|
|
const emit = defineEmits(['update:modelValue', 'change'])
|
|
const emit = defineEmits(['update:modelValue', 'change'])
|
|
const item = props.item
|
|
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 value = ref(props.modelValue)
|
|
|
|
+
|
|
|
|
+watch(() => props.modelValue,
|
|
|
|
+ (newVal) => {
|
|
|
|
+ modelValueUpDate(newVal)
|
|
|
|
+ },
|
|
|
|
+ // { immediate: true },
|
|
|
|
+ // { deep: true }
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+// 过去的日期不可选
|
|
|
|
+const disabledDates = (date) => {
|
|
|
|
+ const currentDate = new Date()
|
|
|
|
+ if (!props.item.disabledDate) return false
|
|
|
|
+ currentDate.setDate(currentDate.getDate() - 1)
|
|
|
|
+ return date.getTime() < currentDate.getTime()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// const timestamp = 'timestamp' // 固定不能变
|
|
const formatText = ref('')
|
|
const formatText = ref('')
|
|
|
|
|
|
const modelValueUpDate = (val) => {
|
|
const modelValueUpDate = (val) => {
|
|
@@ -119,26 +137,34 @@ const handleClear = () => {
|
|
emit('change', value.value)
|
|
emit('change', value.value)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
const rules = ref(item.rules)
|
|
const rules = ref(item.rules)
|
|
|
|
+watch(() => item.rules,
|
|
|
|
+ (newVal) => {
|
|
|
|
+ rules.value = newVal
|
|
|
|
+ },
|
|
|
|
+ { immediate: true },
|
|
|
|
+ { deep: true }
|
|
|
|
+)
|
|
const handleOpen = () => {
|
|
const handleOpen = () => {
|
|
rules.value = []
|
|
rules.value = []
|
|
}
|
|
}
|
|
-const handleClosed = () => {
|
|
|
|
- rules.value = item.rules
|
|
|
|
-}
|
|
|
|
|
|
+// 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
|
|
|
|
-}
|
|
|
|
|
|
+// 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, 即年月日
|
|
// dateType: 默认 date, 即年月日
|
|
const year = computed(() => {
|
|
const year = computed(() => {
|
|
@@ -154,19 +180,8 @@ 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.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()
|
|
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>
|
|
</script>
|
|
|
|
+
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|
|
// .removeDetailHeight {}
|
|
// .removeDetailHeight {}
|
|
:deep(.dp--menu-wrapper) {
|
|
:deep(.dp--menu-wrapper) {
|