diff --git a/vue-project/my-kintone-plugin/src/components/basic/PluginTableActionIconGroup.vue b/vue-project/my-kintone-plugin/src/components/basic/PluginTableActionIconGroup.vue index 47db08d..3bea9ab 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/PluginTableActionIconGroup.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/PluginTableActionIconGroup.vue @@ -14,7 +14,7 @@ const props = withDefaults( defineProps<{ canAdd?: boolean; canDelete?: boolean; - tableId: number; + tableId: string; }>(), { canAdd: true, @@ -25,7 +25,12 @@ const props = withDefaults( const savedData = inject('savedData') as SavedData; const onClick = (type: 'add' | 'remove') => { if (type === 'add') { - savedData.joinTables.push(createEmptyJoinTable()); + const currentIndex = savedData.joinTables.findIndex((t) => t.id === props.tableId); + if (currentIndex !== -1) { + savedData.joinTables.splice(currentIndex + 1, 0, createEmptyJoinTable()); + } else { + savedData.joinTables.push(createEmptyJoinTable()); + } } else if (savedData.joinTables.length > 1) { savedData.joinTables = savedData.joinTables.filter((t) => t.id !== props.tableId); } diff --git a/vue-project/my-kintone-plugin/src/components/basic/PluginTableArea.vue b/vue-project/my-kintone-plugin/src/components/basic/PluginTableArea.vue index e8f09b2..496aac0 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/PluginTableArea.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/PluginTableArea.vue @@ -16,15 +16,15 @@ - + - + - +
diff --git a/vue-project/my-kintone-plugin/src/components/basic/PluginTableConditionRow.vue b/vue-project/my-kintone-plugin/src/components/basic/PluginTableConditionRow.vue index ba53863..1a9eecd 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/PluginTableConditionRow.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/PluginTableConditionRow.vue @@ -4,12 +4,13 @@ diff --git a/vue-project/my-kintone-plugin/src/components/basic/PluginTableConnectRow.vue b/vue-project/my-kintone-plugin/src/components/basic/PluginTableConnectRow.vue index 74fb64a..62a09b9 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/PluginTableConnectRow.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/PluginTableConnectRow.vue @@ -3,9 +3,9 @@ diff --git a/vue-project/my-kintone-plugin/src/components/basic/conditions/TableCondition.vue b/vue-project/my-kintone-plugin/src/components/basic/conditions/TableCondition.vue index d957b09..99b650d 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/conditions/TableCondition.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/conditions/TableCondition.vue @@ -9,7 +9,8 @@ diff --git a/vue-project/my-kintone-plugin/src/components/basic/conditions/TableConditionValue.vue b/vue-project/my-kintone-plugin/src/components/basic/conditions/TableConditionValue.vue index fad7907..40406d1 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/conditions/TableConditionValue.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/conditions/TableConditionValue.vue @@ -15,6 +15,7 @@ diff --git a/vue-project/my-kintone-plugin/src/js/fields.ts b/vue-project/my-kintone-plugin/src/js/fields.ts new file mode 100644 index 0000000..9f9185d --- /dev/null +++ b/vue-project/my-kintone-plugin/src/js/fields.ts @@ -0,0 +1,11 @@ +import type { FieldType } from "./kintone-rest-api-client"; + +const availableJoinType: FieldType[] = [ + 'SINGLE_LINE_TEXT', + 'NUMBER', + 'CALC', + 'DATE', + 'TIME', + 'DATETIME', + 'LINK' +] as const \ No newline at end of file diff --git a/vue-project/my-kintone-plugin/src/js/helper.ts b/vue-project/my-kintone-plugin/src/js/helper.ts index 2e47cea..c58241b 100644 --- a/vue-project/my-kintone-plugin/src/js/helper.ts +++ b/vue-project/my-kintone-plugin/src/js/helper.ts @@ -1,4 +1,4 @@ -import type { FieldsInfo, JoinTable, WhereCondition } from '@/types/model'; +import type { FieldsInfo, FieldsJoinMapping, JoinTable, WhereCondition } from '@/types/model'; import { client, isType, type FieldType, type App, type Layout } from './kintone-rest-api-client'; import type { DropdownItem } from 'kintone-ui-component'; @@ -7,11 +7,21 @@ export const EMPTY_OPTION = { label: '--------', } as DropdownItem; -export const getEmptyWhereCondition = () => ({ field: '', condition: '', data: '' }) as WhereCondition; -export const getEmptyOnCondition = () => ({ leftField: '', rightField: '' }); -export const getEmptyFieldsMapping = () => ({ leftField: '', rightField: '' }); +export function generateId(): string { + const timestamp = new Date().getTime().toString(36); + const randomNum = Math.random().toString(36).substring(2, 11); + return `${timestamp}-${randomNum}`; +} -export function createEmptyJoinTable(id = Number(new Date())) { +export function search(list: Array, id: string) { + return list.find(item => item.id === id); +} + +export const getEmptyWhereCondition = () => ({ field: '', condition: '', data: '', id: generateId()} as WhereCondition); +export const getEmptyOnCondition = () => ({ leftField: '', rightField: '', id: generateId() } as FieldsJoinMapping); +export const getEmptyFieldsMapping = () => ({ leftField: '', rightField: '', id: generateId() } as FieldsJoinMapping); + +export function createEmptyJoinTable(id = generateId()) { return resetTable({ id, app: '' } as JoinTable); } diff --git a/vue-project/my-kintone-plugin/src/types/model.d.ts b/vue-project/my-kintone-plugin/src/types/model.d.ts index e35fdfa..2f22c0d 100644 --- a/vue-project/my-kintone-plugin/src/types/model.d.ts +++ b/vue-project/my-kintone-plugin/src/types/model.d.ts @@ -3,18 +3,20 @@ import type { Layout, Properties } from '@/js/kintone-rest-api-client'; import type { DropdownItem } from 'kintone-ui-component'; export interface FieldsJoinMapping { + id: string; leftField: string; rightField: string; } export interface WhereCondition { + id: string; field: string; condition: ConditionValue; data: string; } export interface JoinTable { - id: number; // 用于唯一区分 + id: string; app: string; // 取得元アプリ table: string; // テーブル onConditions: FieldsJoinMapping[]; // 連結条件 diff --git a/vue-project/my-kintone-plugin/src/types/my-kintone.d.ts b/vue-project/my-kintone-plugin/src/types/my-kintone.d.ts index 7e32aee..4ef0b26 100644 --- a/vue-project/my-kintone-plugin/src/types/my-kintone.d.ts +++ b/vue-project/my-kintone-plugin/src/types/my-kintone.d.ts @@ -1,5 +1,9 @@ +import type { TableChangeEventDetail } from 'kintone-ui-component'; export interface KucEvent { detail: { value: string; }; } +export interface KucTableEvent { + detail: TableChangeEventDetail; +}