mirror of https://github.com/nocodb/nocodb
Muhammed Mustafa
2 years ago
2 changed files with 41 additions and 122 deletions
@ -1,146 +1,62 @@ |
|||||||
<script setup lang="ts"> |
<script setup lang="ts"> |
||||||
import dayjs from 'dayjs' |
import dayjs from 'dayjs' |
||||||
import { computed, ref, useProject } from '#imports' |
import { ReadonlyInj } from '~/context' |
||||||
|
|
||||||
interface Props { |
|
||||||
modelValue?: string |
|
||||||
} |
|
||||||
|
|
||||||
const { modelValue } = defineProps<Props>() |
const { modelValue } = defineProps<Props>() |
||||||
|
|
||||||
const emit = defineEmits(['update:modelValue']) |
const emit = defineEmits(['update:modelValue']) |
||||||
|
|
||||||
|
interface Props { |
||||||
|
modelValue: string |
||||||
|
} |
||||||
|
|
||||||
const { isMysql } = useProject() |
const { isMysql } = useProject() |
||||||
const showMessage = ref(false) |
|
||||||
|
|
||||||
const localState = computed({ |
const readOnlyMode = inject(ReadonlyInj, false) |
||||||
|
|
||||||
|
let isDateInvalid = $ref(false) |
||||||
|
const dateFormat = isMysql ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD HH:mm:ssZ' |
||||||
|
|
||||||
|
const localState = $computed({ |
||||||
get() { |
get() { |
||||||
if (!modelValue) { |
if (!modelValue) { |
||||||
return modelValue |
return undefined |
||||||
} |
|
||||||
const d = /^\d+$/.test(modelValue) ? dayjs(+modelValue) : dayjs(modelValue) |
|
||||||
if (d.isValid()) { |
|
||||||
showMessage.value = false |
|
||||||
return d.format('YYYY-MM-DD HH:mm') |
|
||||||
} else { |
|
||||||
showMessage.value = true |
|
||||||
} |
|
||||||
}, |
|
||||||
set(value?: string) { |
|
||||||
if (isMysql) { |
|
||||||
emit('update:modelValue', value && dayjs(value).format('YYYY-MM-DD HH:mm:ss')) |
|
||||||
} else { |
|
||||||
emit('update:modelValue', value && dayjs(value).format('YYYY-MM-DD HH:mm:ssZ')) |
|
||||||
} |
} |
||||||
}, |
|
||||||
}) |
|
||||||
|
|
||||||
/* import dayjs from 'dayjs' |
|
||||||
import utc from 'dayjs/plugin/utc' |
|
||||||
|
|
||||||
dayjs.extend(utc) |
|
||||||
|
|
||||||
export default { |
if (!dayjs(modelValue).isValid()) { |
||||||
name: 'DateTimePickerCell', |
isDateInvalid = true |
||||||
props: { |
return undefined |
||||||
value: [String, Date, Number], |
} |
||||||
ignoreFocus: Boolean, |
|
||||||
}, |
|
||||||
data: () => ({ |
|
||||||
showMessage: false, |
|
||||||
}), |
|
||||||
computed: { |
|
||||||
isMysql() { |
|
||||||
return ['mysql', 'mysql2'].indexOf(this.$store.getters['project/GtrClientType']) |
|
||||||
}, |
|
||||||
localState: { |
|
||||||
get() { |
|
||||||
if (!this.value) { |
|
||||||
return this.value |
|
||||||
} |
|
||||||
const d = /^\d+$/.test(this.value) ? dayjs(+this.value) : dayjs(this.value) |
|
||||||
if (d.isValid()) { |
|
||||||
this.showMessage = false |
|
||||||
return d.format('YYYY-MM-DD HH:mm') |
|
||||||
} else { |
|
||||||
this.showMessage = true |
|
||||||
} |
|
||||||
}, |
|
||||||
set(value) { |
|
||||||
if (this.isMysql) { |
|
||||||
this.$emit('input', value && dayjs(value).format('YYYY-MM-DD HH:mm:ss')) |
|
||||||
} else { |
|
||||||
this.$emit('input', value && dayjs(value).format('YYYY-MM-DD HH:mm:ssZ')) |
|
||||||
} |
|
||||||
}, |
|
||||||
}, |
|
||||||
parentListeners() { |
|
||||||
const $listeners = {} |
|
||||||
|
|
||||||
if (this.$listeners.blur) { |
|
||||||
// $listeners.blur = this.$listeners.blur |
|
||||||
} |
|
||||||
if (this.$listeners.focus) { |
|
||||||
$listeners.focus = this.$listeners.focus |
|
||||||
} |
|
||||||
|
|
||||||
return $listeners |
return /^\d+$/.test(modelValue) ? dayjs(+modelValue) : dayjs(modelValue) |
||||||
}, |
|
||||||
}, |
}, |
||||||
mounted() { |
set(val?: dayjs.Dayjs) { |
||||||
// listen dialog click:outside event and save on close |
if (!val) { |
||||||
if (this.$refs.picker && this.$refs.picker.$children && this.$refs.picker.$children[0]) { |
emit('update:modelValue', null) |
||||||
this.$refs.picker.$children[0].$on('click:outside', () => { |
return |
||||||
this.$refs.picker.okHandler() |
|
||||||
}) |
|
||||||
} |
} |
||||||
|
|
||||||
if (!this.ignoreFocus) { |
if (val.isValid()) { |
||||||
this.$refs.picker.display = true |
emit('update:modelValue', val?.format(dateFormat)) |
||||||
} |
} |
||||||
}, |
}, |
||||||
} */ |
}) |
||||||
</script> |
</script> |
||||||
|
|
||||||
<template> |
<template> |
||||||
<input v-model="localState" type="datetime-local" /> |
<a-date-picker |
||||||
<!-- <div> --> |
v-model:value="localState" |
||||||
<!-- <div v-show="!showMessage"> --> |
:show-time="true" |
||||||
<!-- <v-datetime-picker --> |
:bordered="false" |
||||||
<!-- ref="picker" --> |
class="!w-full px-1" |
||||||
<!-- v-model="localState" --> |
format="YYYY-MM-DD HH:mm" |
||||||
<!-- class="caption xc-date-time-picker" --> |
:placeholder="isDateInvalid ? 'Invalid date' : !readOnlyMode ? 'Select date' : ''" |
||||||
<!-- :text-field-props="{ --> |
:allow-clear="!readOnlyMode" |
||||||
<!-- class: 'caption mt-0 pt-0', --> |
:input-read-only="true" |
||||||
<!-- flat: true, --> |
:open="readOnlyMode ? false : undefined" |
||||||
<!-- solo: true, --> |
> |
||||||
<!-- dense: true, --> |
<template v-if="readOnlyMode" #suffixIcon></template> |
||||||
<!-- hideDetails: true, --> |
</a-date-picker> |
||||||
<!-- }" --> |
|
||||||
<!-- :time-picker-props="{ --> |
|
||||||
<!-- format: '24hr', --> |
|
||||||
<!-- }" --> |
|
||||||
<!-- v-on="parentListeners" --> |
|
||||||
<!-- /> --> |
|
||||||
<!-- </div> --> |
|
||||||
<!-- <div v-show="showMessage" class="edit-warning" @dblclick="$refs.picker.display = true"> --> |
|
||||||
<!-- <!– TODO: i18n –> --> |
|
||||||
<!-- ERR: Couldn't parse {{ value }} --> |
|
||||||
<!-- </div> --> |
|
||||||
<!-- </div> --> |
|
||||||
</template> |
</template> |
||||||
|
|
||||||
<style scoped> |
<style scoped></style> |
||||||
/*:deep(.v-input),*/ |
|
||||||
/*:deep(.v-text-field) {*/ |
|
||||||
/* margin-top: 0 !important;*/ |
|
||||||
/* padding-top: 0 !important;*/ |
|
||||||
/* font-size: inherit !important;*/ |
|
||||||
/*}*/ |
|
||||||
|
|
||||||
/*.edit-warning {*/ |
|
||||||
/* padding: 10px;*/ |
|
||||||
/* text-align: left;*/ |
|
||||||
/* color: #e65100;*/ |
|
||||||
/*}*/ |
|
||||||
</style> |
|
||||||
|
Loading…
Reference in new issue