Browse Source

Merge pull request #717 from colinin/dynamic-query

listen for query conditions to change
pull/731/head
yx lin 3 years ago
committed by GitHub
parent
commit
0c299693a8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      apps/vue/src/components/Table/src/BasicTable.vue
  2. 28
      apps/vue/src/components/Table/src/components/AdvancedSearch.vue
  3. 5
      apps/vue/src/components/Table/src/hooks/useTableForm.ts

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

@ -51,7 +51,8 @@
ref="advancedSearchRef" ref="advancedSearchRef"
@register="registerAdSearchModal" @register="registerAdSearchModal"
v-bind="getAdvancedSearchProps" v-bind="getAdvancedSearchProps"
@search="handleAdvanceSearchChange" @change="handleAdvanceSearchChange"
@search="handleAdvanceSearchInfoChange"
/> />
</div> </div>
</template> </template>
@ -263,7 +264,8 @@
replaceFormSlotKey, replaceFormSlotKey,
getFormSlotKeys, getFormSlotKeys,
handleSearchInfoChange, handleSearchInfoChange,
handleAdvanceSearchChange handleAdvanceSearchChange,
handleAdvanceSearchInfoChange
} = } =
useTableForm(getProps, slots, fetch, getLoading, formActions.setFieldsValue); useTableForm(getProps, slots, fetch, getLoading, formActions.setFieldsValue);
@ -385,6 +387,7 @@
handleSearchInfoChange, handleSearchInfoChange,
registerAdSearchModal, registerAdSearchModal,
handleAdvanceSearchChange, handleAdvanceSearchChange,
handleAdvanceSearchInfoChange,
handleSearchInfoReset, handleSearchInfoReset,
handleAdvanceSearch, handleAdvanceSearch,
getEmptyDataIsShowTable, getEmptyDataIsShowTable,

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

@ -86,11 +86,11 @@
import { CodeEditorX, MODE } from '/@/components/CodeEditor'; import { CodeEditorX, MODE } from '/@/components/CodeEditor';
import { BasicModal, useModalInner } from '/@/components/Modal'; import { BasicModal, useModalInner } from '/@/components/Modal';
import { useI18n } from '/@/hooks/web/useI18n'; import { useI18n } from '/@/hooks/web/useI18n';
import { DefineParamter, DynamicLogic, DynamicComparison, DynamicQueryable } from '../types/advancedSearch'; import { DefineParamter, DynamicLogic, DynamicComparison, DynamicQueryable, DynamicParamter } from '../types/advancedSearch';
import { isFunction } from '/@/utils/is'; import { isFunction } from '/@/utils/is';
import { get } from 'lodash-es'; import { get } from 'lodash-es';
const emits = defineEmits(['register', 'search']); const emits = defineEmits(['register', 'search', 'change']);
const props = defineProps({ const props = defineProps({
useAdvancedSearch: { useAdvancedSearch: {
type: Boolean, type: Boolean,
@ -234,19 +234,24 @@
const availableParams = unref(getAvailableParams); const availableParams = unref(getAvailableParams);
if (availableParams.length > 0) { if (availableParams.length > 0) {
const bindParamter = availableParams[availableParams.length - 1]; const bindParamter = availableParams[availableParams.length - 1];
formMdel.paramters.push({ const newParamter: DynamicParamter = {
field: bindParamter.name, field: bindParamter.name,
logic: DynamicLogic.And, logic: DynamicLogic.And,
comparison: DynamicComparison.Equal, comparison: DynamicComparison.Equal,
javaScriptType: bindParamter.javaScriptType, javaScriptType: bindParamter.javaScriptType,
value: undefined, value: undefined,
}); };
if (bindParamter.javaScriptType === 'boolean') {
newParamter.value = false;
}
formMdel.paramters.push(newParamter);
} }
} }
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());
} }
function handleFieldChange(field, record) { function handleFieldChange(field, record) {
@ -263,16 +268,21 @@
} }
function handleSubmit() { function handleSubmit() {
const searchInput = { emits('search', getSearchInput());
//
paramters: formMdel.paramters.filter(p => p.value !== undefined)
};
emits('search', searchInput);
closeModal(); closeModal();
} }
function resetFields() { function resetFields() {
formMdel.paramters = []; formMdel.paramters = [];
emits('change', getSearchInput());
}
function getSearchInput() {
const searchInput = {
//
paramters: formMdel.paramters.filter(p => p.value !== undefined)
};
return searchInput;
} }
function setLoading(loading: boolean) { function setLoading(loading: boolean) {

5
apps/vue/src/components/Table/src/hooks/useTableForm.ts

@ -65,6 +65,10 @@ export function useTableForm(
function handleAdvanceSearchChange(queryable: DynamicQueryable) { function handleAdvanceSearchChange(queryable: DynamicQueryable) {
setFieldsValue({ queryable: queryable }); setFieldsValue({ queryable: queryable });
}
function handleAdvanceSearchInfoChange(queryable: DynamicQueryable) {
setFieldsValue({ queryable: queryable });
setTimeout(() => { setTimeout(() => {
fetch({ page: 1 }); fetch({ page: 1 });
}, 300); }, 300);
@ -77,5 +81,6 @@ export function useTableForm(
getAdvancedSearchProps, getAdvancedSearchProps,
handleSearchInfoChange, handleSearchInfoChange,
handleAdvanceSearchChange, handleAdvanceSearchChange,
handleAdvanceSearchInfoChange,
}; };
} }

Loading…
Cancel
Save