From 6bd86ae92cd9b1bf861e01430ce09f624ec51f66 Mon Sep 17 00:00:00 2001 From: xue jiahao Date: Thu, 23 Jan 2025 14:09:05 +0800 Subject: [PATCH 1/7] remove debuggger; --- .../my-kintone-plugin/src/components/basic/PluginTableArea.vue | 1 - 1 file changed, 1 deletion(-) 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 ee9a072..e8f09b2 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/PluginTableArea.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/PluginTableArea.vue @@ -69,7 +69,6 @@ watch( () => tableOptions.value, () => { if (!props.table.table) return; - debugger componentKey.value += 1; }, { From 36a24ebdff0a7c1ab7694afe2414bc0791d405e6 Mon Sep 17 00:00:00 2001 From: xue jiahao Date: Thu, 23 Jan 2025 17:13:34 +0800 Subject: [PATCH 2/7] fix bug for +/- --- .../basic/PluginTableActionIconGroup.vue | 9 ++- .../src/components/basic/PluginTableArea.vue | 6 +- .../basic/PluginTableConditionRow.vue | 64 +++++++++++-------- .../basic/PluginTableConnectRow.vue | 42 ++++++++---- .../src/components/basic/TableCombobox.vue | 12 +++- .../basic/conditions/TableCondition.vue | 20 ++++-- .../basic/conditions/TableConditionValue.vue | 16 +++-- .../my-kintone-plugin/src/js/fields.ts | 11 ++++ .../my-kintone-plugin/src/js/helper.ts | 20 ++++-- .../my-kintone-plugin/src/types/model.d.ts | 4 +- .../src/types/my-kintone.d.ts | 4 ++ 11 files changed, 146 insertions(+), 62 deletions(-) create mode 100644 vue-project/my-kintone-plugin/src/js/fields.ts 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; +} From eaa9ec2fead136c65c7cd66685fe4d3db1499388 Mon Sep 17 00:00:00 2001 From: xue jiahao Date: Fri, 24 Jan 2025 01:46:20 +0800 Subject: [PATCH 3/7] fix ts --- .../my-kintone-plugin/src/components/Config.vue | 2 +- .../src/components/basic/PluginDropdown.vue | 6 +++--- .../src/components/basic/PluginInput.vue | 5 +++-- .../src/components/basic/PluginTableArea.vue | 3 +-- .../src/components/basic/PluginTableConditionRow.vue | 2 -- .../src/components/basic/TableCombobox.vue | 6 +++--- .../src/components/basic/conditions/TableCondition.vue | 5 +++-- .../basic/conditions/TableConditionValue.vue | 5 +++-- .../src/js/kintone-rest-api-client.ts | 2 +- .../my-kintone-plugin/src/types/my-kintone.d.ts | 10 ++-------- 10 files changed, 20 insertions(+), 26 deletions(-) diff --git a/vue-project/my-kintone-plugin/src/components/Config.vue b/vue-project/my-kintone-plugin/src/components/Config.vue index 166f8fc..2d60433 100644 --- a/vue-project/my-kintone-plugin/src/components/Config.vue +++ b/vue-project/my-kintone-plugin/src/components/Config.vue @@ -19,7 +19,7 @@ diff --git a/vue-project/my-kintone-plugin/src/components/basic/PluginInput.vue b/vue-project/my-kintone-plugin/src/components/basic/PluginInput.vue index 8a33ade..5f8c742 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/PluginInput.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/PluginInput.vue @@ -7,6 +7,7 @@ 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 496aac0..1f984a6 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/PluginTableArea.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/PluginTableArea.vue @@ -43,7 +43,6 @@ import { } from '@/js/helper'; import { types } from '@/js/kintone-rest-api-client'; import type { CachedData, CachedSelectedAppData, FieldsInfo, JoinTable, SavedData } from '@/types/model'; -import type { KucEvent } from '@/types/my-kintone'; import { computed, inject, provide, reactive, ref, watch } from 'vue'; const savedData = inject('savedData') as SavedData; @@ -92,7 +91,7 @@ watch( { immediate: true }, ); -const selectTable = (e: KucEvent) => { +const selectTable = () => { resetConditions(props.table); }; 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 1a9eecd..b40f4ae 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/PluginTableConditionRow.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/PluginTableConditionRow.vue @@ -7,10 +7,8 @@ import type { CachedData, CachedSelectedAppData, SavedData, WhereCondition } fro import { defineProps, inject, computed, render, h, reactive } from 'vue'; import TableCombobox from './TableCombobox.vue'; import { generateId, getFieldsDropdownItems, search } from '@/js/helper'; -import type { ConditionValue } from '@/js/conditions'; import TableCondition from './conditions/TableCondition.vue'; import TableConditionValue from './conditions/TableConditionValue.vue'; -import type { KucTableEvent } from '@/types/my-kintone'; const props = defineProps<{ modelValue: WhereCondition[]; diff --git a/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue b/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue index 1cbb16d..13dfbc0 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue @@ -12,7 +12,7 @@ import { search } from '@/js/helper'; import type { CachedSelectedAppData } from '@/types/model'; import type { KucEvent } from '@/types/my-kintone'; -import type { DropdownItem } from 'kintone-ui-component'; +import type { ComboboxChangeEventDetail, DropdownItem } from 'kintone-ui-component'; import { defineProps, defineEmits, type Ref, watch, ref } from 'vue'; const props = defineProps<{ @@ -45,7 +45,7 @@ const emit = defineEmits<{ (e: 'update:modelValue', data: EmitData): void; }>(); -const updateValue = (event: KucEvent) => { - emit('update:modelValue', { obj: search(props.dataList, props.id), value: event.detail.value }); +const updateValue = ({ detail }: KucEvent) => { + emit('update:modelValue', { obj: search(props.dataList, props.id), value: detail.value || '' }); }; 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 99b650d..b56b582 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 @@ -13,6 +13,7 @@ import { getAvailableCondition, type ConditionValue } from '@/js/conditions'; import { search } from '@/js/helper'; import type { CachedSelectedAppData, WhereCondition } from '@/types/model'; import type { KucEvent } from '@/types/my-kintone'; +import type { ComboboxChangeEventDetail } from 'kintone-ui-component'; import { defineProps, defineEmits, computed } from 'vue'; const props = defineProps<{ @@ -35,7 +36,7 @@ const emit = defineEmits<{ (e: 'update:modelValue', data: EmitData): void; }>(); -const updateValue = (event: KucEvent) => { - emit('update:modelValue', { obj: whereCondition.value, value: event.detail.value as ConditionValue }); +const updateValue = ({ detail }: KucEvent) => { + emit('update:modelValue', { obj: whereCondition.value, value: detail.value as ConditionValue }); }; 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 40406d1..4128c61 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 @@ -18,6 +18,7 @@ import { getComponent } from '@/js/conditions'; import { search } from '@/js/helper'; import type { CachedSelectedAppData, WhereCondition } from '@/types/model'; import type { KucEvent } from '@/types/my-kintone'; +import type { ComboboxChangeEventDetail, TextInputEventDetail } from 'kintone-ui-component'; import { defineProps, defineEmits, computed } from 'vue'; const props = defineProps<{ @@ -40,7 +41,7 @@ const emit = defineEmits<{ (e: 'update:modelValue', data: EmitData): void; }>(); -const updateValue = (event: KucEvent) => { - emit('update:modelValue', { obj: whereCondition.value, value: event.detail.value }); +const updateValue = (event: KucEvent) => { + emit('update:modelValue', { obj: whereCondition.value, value: event.detail.value || '' }); }; diff --git a/vue-project/my-kintone-plugin/src/js/kintone-rest-api-client.ts b/vue-project/my-kintone-plugin/src/js/kintone-rest-api-client.ts index 43f1ad9..bf7a25a 100644 --- a/vue-project/my-kintone-plugin/src/js/kintone-rest-api-client.ts +++ b/vue-project/my-kintone-plugin/src/js/kintone-rest-api-client.ts @@ -10,7 +10,7 @@ export type App = { export type Properties = Awaited>['properties']; export type Layout = Awaited>['layout']; -type OneOf = Properties[string]; +export type OneOf = Properties[string]; export type FieldType = OneOf['type']; const typeNames = [ 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 4ef0b26..7cbded5 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,9 +1,3 @@ -import type { TableChangeEventDetail } from 'kintone-ui-component'; -export interface KucEvent { - detail: { - value: string; - }; -} -export interface KucTableEvent { - detail: TableChangeEventDetail; +export interface KucEvent { + detail: T; } From 31b8f8a344562ce067cc4c00ff95cfbfda041dac Mon Sep 17 00:00:00 2001 From: xue jiahao Date: Fri, 24 Jan 2025 02:18:31 +0800 Subject: [PATCH 4/7] add field types --- .../src/components/Config.vue | 47 +++++++++++++++++-- .../src/components/basic/PluginTableArea.vue | 1 + .../my-kintone-plugin/src/types/model.d.ts | 19 ++++---- 3 files changed, 54 insertions(+), 13 deletions(-) diff --git a/vue-project/my-kintone-plugin/src/components/Config.vue b/vue-project/my-kintone-plugin/src/components/Config.vue index 2d60433..bd5fea0 100644 --- a/vue-project/my-kintone-plugin/src/components/Config.vue +++ b/vue-project/my-kintone-plugin/src/components/Config.vue @@ -19,7 +19,8 @@ diff --git a/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue b/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue index 13dfbc0..b4bd8f4 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue @@ -1,7 +1,7 @@