This commit is contained in:
2025-01-25 20:30:58 +08:00
parent 7fb31b5c53
commit 662b18548f
5 changed files with 311 additions and 71 deletions

View File

@@ -4,11 +4,12 @@
<script setup lang="ts">
import type { CachedData, CachedSelectedAppData, FieldsJoinMapping, WhereCondition } from '@/types/model';
import { defineProps, inject, computed, reactive, render, h, watch } from 'vue';
import { generateId, getFieldObj, getFieldsDropdownItems, isLeftCalcJoinType, search } from '@/js/helper';
import TableCombobox from './TableCombobox.vue';
import { defineProps, inject, computed, reactive, render, h } from 'vue';
import { generateId, getFieldObj, getFieldsDropdownItems, search } from '@/js/helper';
import { getLeftAvailableJoinType, getRightAvailableJoinType, isForceDisable } from '@/js/join';
import { isType, type FieldType, type OneOf } from '@/js/kintone-rest-api-client';
import { getLeftAvailableMappingType, getRightAvailableMappingType } from '@/js/mapping';
import TableCombobox from './TableCombobox.vue';
import { type FieldType, type OneOf } from '@/js/kintone-rest-api-client';
const props = defineProps<{
connector: string;
@@ -23,17 +24,11 @@ const table = computed(() => selectedAppData.table.table);
const filterFunc = {
connect: {
left: (right?: OneOf | '') => getLeftAvailableJoinType(right),
right: (left?: OneOf | '') => {
const filterType = getRightAvailableJoinType(left);
if (left && isType.CALC(left) && isLeftCalcJoinType(filterType)) {
return filterType[left.format];
}
return filterType as FieldType[];
},
right: (left?: OneOf | '') => getRightAvailableJoinType(left),
},
mapping: {
left: () => [] as FieldType[],
right: () => [] as FieldType[],
left: (right?: OneOf | '') => getLeftAvailableMappingType(right),
right: (left?: OneOf | '') => getRightAvailableMappingType(left),
},
};
@@ -47,14 +42,16 @@ const columns = reactive([
}
const container = document.createElement('div');
const vnode = h(TableCombobox, {
items: computed(() =>
getFieldsDropdownItems(selectedAppData.appFields, {
items: computed(() => {
const dependFilterField = getField('rightField', rowData.id);
return getFieldsDropdownItems(selectedAppData.appFields, {
subTableCode: table.value,
baseFilter: filterFunc[props.type].left() as FieldType[],
filterType: filterFunc[props.type].left(getField('rightField', rowData.id)),
filterType: filterFunc[props.type].left(dependFilterField),
dependFilterField,
defaultDisableCallback: isForceDisable,
}),
),
});
}),
modelValue: computed(() => (search(props.modelValue, rowData.id) as FieldsJoinMapping)?.leftField || ''),
selectedAppData,
dataList: props.modelValue,
@@ -85,14 +82,16 @@ const columns = reactive([
}
const container = document.createElement('div');
const vnode = h(TableCombobox, {
items: computed(() =>
getFieldsDropdownItems(cachedData.currentAppFields, {
items: computed(() => {
const dependFilterField = getField('leftField', rowData.id);
return getFieldsDropdownItems(cachedData.currentAppFields, {
subTableCode: '', // subtable not allowed for current app
baseFilter: filterFunc[props.type].right() as FieldType[],
filterType: filterFunc[props.type].right(getField('leftField', rowData.id)),
filterType: filterFunc[props.type].right(dependFilterField),
dependFilterField,
defaultDisableCallback: isForceDisable,
}),
),
});
}),
modelValue: computed(() => (search(props.modelValue, rowData.id) as FieldsJoinMapping)?.rightField || ''),
selectedAppData,
dataList: props.modelValue,
@@ -109,9 +108,9 @@ const columns = reactive([
},
]);
function getField(key: 'leftField'|'rightField', id: string) {
function getField(key: 'leftField' | 'rightField', id: string) {
const dataRow = search(props.modelValue, id) as FieldsJoinMapping | undefined;
const fieldCode = (dataRow ? (dataRow[key] || '') : '');
const fieldCode = dataRow ? dataRow[key] || '' : '';
const targetFieldMap = key === 'leftField' ? selectedAppData.appFields : cachedData.currentAppFields;
const targetTable = key === 'leftField' ? table.value : '';
return getFieldObj(fieldCode, targetFieldMap, targetTable);