Browse Source

feat(table): Add badge to advanced search

pull/1032/head
colin 1 year ago
parent
commit
b560b961e8
  1. 32
      apps/vue/src/components/Table/src/BasicTable.vue
  2. 17
      apps/vue/src/components/Table/src/components/AdvancedSearch.vue
  3. 17
      apps/vue/src/components/Table/src/hooks/useDataSource.ts

32
apps/vue/src/components/Table/src/BasicTable.vue

@ -15,14 +15,15 @@
<slot :name="item" v-bind="data || {}"></slot> <slot :name="item" v-bind="data || {}"></slot>
</template> </template>
<template #advanceBefore> <template #advanceBefore>
<Button <Badge v-if="getAdvancedSearchProps?.useAdvancedSearch" :count="advancedSearchInput?.paramters.length">
v-if="getAdvancedSearchProps?.useAdvancedSearch" <Button
type="link" type="link"
size="small" size="small"
@click="handleAdvanceSearch" @click="handleAdvanceSearch"
> >
{{ t('component.table.advancedSearch.title') }} {{ t('component.table.advancedSearch.title') }}
</Button> </Button>
</Badge>
</template> </template>
</BasicForm> </BasicForm>
@ -55,7 +56,7 @@
ref="advancedSearchRef" ref="advancedSearchRef"
@register="registerAdSearchModal" @register="registerAdSearchModal"
v-bind="getAdvancedSearchProps" v-bind="getAdvancedSearchProps"
@change="handleAdvanceSearchChange" @change="handleAdvanceSearchChanged"
@search="handleAdvanceSearchInfoChange" @search="handleAdvanceSearchInfoChange"
/> />
</div> </div>
@ -70,13 +71,14 @@
} from './types/table'; } from './types/table';
import { defineComponent, ref, reactive, computed, unref, toRaw, inject, watchEffect, nextTick } from 'vue'; import { defineComponent, ref, reactive, computed, unref, toRaw, inject, watchEffect, nextTick } from 'vue';
import { Button, Table } from 'ant-design-vue'; import { Badge, Button, Table } from 'ant-design-vue';
import { BasicForm, useForm } from '/@/components/Form/index'; import { BasicForm, useForm } from '/@/components/Form/index';
import { useModal } from '/@/components/Modal/index'; import { useModal } from '/@/components/Modal/index';
import { PageWrapperFixedHeightKey } from '/@/components/Page'; import { PageWrapperFixedHeightKey } from '/@/components/Page';
import HeaderCell from './components/HeaderCell.vue'; import HeaderCell from './components/HeaderCell.vue';
import AdvancedSearch from './components/AdvancedSearch.vue'; import AdvancedSearch from './components/AdvancedSearch.vue';
import { InnerHandlers } from './types/table'; import { InnerHandlers } from './types/table';
import { DynamicQueryable } from './types/advancedSearch';
import { usePagination } from './hooks/usePagination'; import { usePagination } from './hooks/usePagination';
import { useColumns } from './hooks/useColumns'; import { useColumns } from './hooks/useColumns';
@ -105,6 +107,7 @@
name: 'BasicTable', name: 'BasicTable',
components: { components: {
Table, Table,
Badge,
BasicForm, BasicForm,
Button, Button,
HeaderCell, HeaderCell,
@ -137,6 +140,7 @@
const wrapRef = ref(null); const wrapRef = ref(null);
const formRef = ref(null); const formRef = ref(null);
const advancedSearchRef = ref<any>(null); const advancedSearchRef = ref<any>(null);
const advancedSearchInput = ref<DynamicQueryable>();
const innerPropsRef = ref<Partial<BasicTableProps>>(); const innerPropsRef = ref<Partial<BasicTableProps>>();
const { prefixCls } = useDesign('basic-table'); const { prefixCls } = useDesign('basic-table');
@ -276,6 +280,11 @@
getDataSourceRef, getDataSourceRef,
); );
function handleAdvanceSearchChanged(queryable: DynamicQueryable) {
advancedSearchInput.value = queryable;
handleAdvanceSearchChange(queryable);
}
const { const {
getFormProps, getFormProps,
getAdvancedSearchProps, getAdvancedSearchProps,
@ -401,12 +410,13 @@
formRef, formRef,
tableElRef, tableElRef,
advancedSearchRef, advancedSearchRef,
advancedSearchInput,
getBindValues, getBindValues,
getLoading, getLoading,
registerForm, registerForm,
handleSearchInfoChange, handleSearchInfoChange,
registerAdSearchModal, registerAdSearchModal,
handleAdvanceSearchChange, handleAdvanceSearchChanged,
handleAdvanceSearchInfoChange, handleAdvanceSearchInfoChange,
handleSearchInfoReset, handleSearchInfoReset,
handleAdvanceSearch, handleAdvanceSearch,

17
apps/vue/src/components/Table/src/components/AdvancedSearch.vue

@ -324,13 +324,14 @@
newParamter.value = false; newParamter.value = false;
} }
formMdel.paramters.push(newParamter); formMdel.paramters.push(newParamter);
emits('change', formMdel);
} }
} }
function handleDelField(paramter) { function handleDelField(paramter) {
const index = formMdel.paramters.findIndex(p => p.field === paramter.field); const index = formMdel.paramters.findIndex(p => p.field === paramter.field);
formMdel.paramters.splice(index, 1); formMdel.paramters.splice(index, 1);
emits('change', getSearchInput()); emits('change', formMdel);
} }
function handleFieldChange(field, record) { function handleFieldChange(field, record) {
@ -344,26 +345,18 @@
if (defineParam.javaScriptType === 'boolean') { if (defineParam.javaScriptType === 'boolean') {
record.value = false; record.value = false;
} }
emits('change', getSearchInput()); emits('change', formMdel);
} }
} }
function handleSubmit() { function handleSubmit() {
emits('search', getSearchInput()); emits('search', formMdel);
closeModal(); closeModal();
} }
function resetFields() { function resetFields() {
formMdel.paramters = []; formMdel.paramters = [];
emits('change', getSearchInput()); emits('change', formMdel);
}
function getSearchInput() {
const searchInput = {
//
paramters: formMdel.paramters.filter(p => p.value !== undefined)
};
return searchInput;
} }
function setLoading(loading: boolean) { function setLoading(loading: boolean) {

17
apps/vue/src/components/Table/src/hooks/useDataSource.ts

@ -242,12 +242,17 @@ export function useDataSource(
} = unref(propsRef); } = unref(propsRef);
let fetchApi = api; let fetchApi = api;
// 高级查询条件支持 // 高级查询条件支持
const searchInput = cloneDeep(getFieldsValue());
if (advancedSearchConfig?.useAdvancedSearch) { if (advancedSearchConfig?.useAdvancedSearch) {
const searchInput = getFieldsValue(); if (Reflect.has(searchInput, 'queryable')
if (Reflect.has(searchInput, 'queryable') && && searchInput?.queryable?.paramters
Array.isArray(searchInput.queryable?.paramters) && && Array.isArray(searchInput.queryable?.paramters)) {
searchInput.queryable.paramters.length > 0) searchInput.queryable.paramters = searchInput.queryable.paramters
fetchApi = advancedSearchConfig?.fetchApi; .filter((p) => p.value !== undefined);
if (searchInput.queryable.paramters.length > 0) {
fetchApi = advancedSearchConfig?.fetchApi;
}
}
} }
if (!fetchApi || !isFunction(fetchApi)) return; if (!fetchApi || !isFunction(fetchApi)) return;
try { try {
@ -275,7 +280,7 @@ export function useDataSource(
let params: Recordable = merge( let params: Recordable = merge(
pageParams, pageParams,
useSearchForm ? getFieldsValue() : {}, useSearchForm ? searchInput : {},
searchInfo, searchInfo,
opt?.searchInfo ?? {}, opt?.searchInfo ?? {},
defSort, defSort,

Loading…
Cancel
Save