diff --git a/src/components/VnTable/VnColumn.vue b/src/components/VnTable/VnColumn.vue index 9f6c6d53d..b2d36ebe0 100644 --- a/src/components/VnTable/VnColumn.vue +++ b/src/components/VnTable/VnColumn.vue @@ -7,9 +7,11 @@ import { dashIfEmpty } from 'src/filters'; import VnSelect from 'components/common/VnSelect.vue'; import VnSelectCache from 'components/common/VnSelectCache.vue'; import VnInput from 'components/common/VnInput.vue'; +import VnInputNumber from 'components/common/VnInputNumber.vue'; import VnInputDate from 'components/common/VnInputDate.vue'; import VnInputTime from 'components/common/VnInputTime.vue'; import VnComponent from 'components/common/VnComponent.vue'; +import VnUserLink from 'components/ui/VnUserLink.vue'; const model = defineModel(undefined, { required: true }); const $props = defineProps({ @@ -66,7 +68,7 @@ const defaultComponents = { }, }, number: { - component: markRaw(VnInput), + component: markRaw(VnInputNumber), attrs: { disable: !$props.isEditable, class: 'fit', @@ -98,14 +100,14 @@ const defaultComponents = { }, checkbox: { component: markRaw(QCheckbox), - attrs: (prop) => { + attrs: ({ model }) => { const defaultAttrs = { disable: !$props.isEditable, - 'model-value': Boolean(prop), + 'model-value': Boolean(model), class: 'no-padding fit', }; - if (typeof prop == 'number') { + if (typeof model == 'number') { defaultAttrs['true-value'] = 1; defaultAttrs['false-value'] = 0; } @@ -126,6 +128,9 @@ const defaultComponents = { icon: { component: markRaw(QIcon), }, + userLink: { + component: markRaw(VnUserLink), + }, }; const value = computed(() => { @@ -152,6 +157,7 @@ const col = computed(() => { newColumn.component = 'checkbox'; if ($props.default && !newColumn.component) newColumn.component = $props.default; + if ($props.componentProp == 'columnCreate') console.log('newColumn: ', newColumn); return newColumn; }); @@ -163,14 +169,14 @@ const components = computed(() => $props.components ?? defaultComponents); v-if="col.before" :prop="col.before" :components="components" - :value="model" + :value="{ row, model }" v-model="model" /> {{ value }} @@ -178,7 +184,7 @@ const components = computed(() => $props.components ?? defaultComponents); v-if="col.after" :prop="col.after" :components="components" - :value="model" + :value="{ row, model }" v-model="model" /> diff --git a/src/components/VnTable/VnFilter.vue b/src/components/VnTable/VnFilter.vue index e1faec0a0..82bcb42a6 100644 --- a/src/components/VnTable/VnFilter.vue +++ b/src/components/VnTable/VnFilter.vue @@ -10,6 +10,8 @@ import VnInputDate from 'components/common/VnInputDate.vue'; import VnInputTime from 'components/common/VnInputTime.vue'; import VnTableColumn from 'components/VnTable/VnColumn.vue'; +defineExpose({ addFilter }); + const $props = defineProps({ column: { type: Object, @@ -32,7 +34,7 @@ const model = defineModel(undefined, { required: true }); const arrayData = useArrayData($props.dataKey, { searchUrl: $props.searchUrl }); const columnFilter = computed(() => $props.column?.columnFilter); -const updateEvent = { 'update:modelValue': addFilter }; +const updateEvent = { 'update:modelValue': addFilter, remove: () => addFilter(null) }; const enterEvent = { 'keyup.enter': () => addFilter(model.value), remove: () => addFilter(null), diff --git a/src/components/VnTable/VnTable.vue b/src/components/VnTable/VnTable.vue index 15cf39bd6..fa87bf662 100644 --- a/src/components/VnTable/VnTable.vue +++ b/src/components/VnTable/VnTable.vue @@ -311,11 +311,6 @@ defineExpose({ :params="params" :columns="splittedColumns.columns" /> - @@ -326,6 +321,7 @@ defineExpose({ v-bind="$attrs" :limit="20" ref="CrudModelRef" + @on-fetch="(...args) => emit('onFetch', ...args)" :search-url="searchUrl" :disable-infinite-scroll="isTableMode" @save-changes="reload" @@ -363,7 +359,7 @@ defineExpose({ -