Compare commits

...

9 Commits

Author SHA1 Message Date
2a290c3142 bugfix for auto-lookup 2025-09-17 14:22:12 +08:00
de717f25a5 bugfix for AppSelectBox 2025-09-17 13:27:39 +08:00
9c4adc48ba fix insert-check 2025-09-17 11:35:58 +08:00
171f0dfa89 Merge branch 'dev2' of https://dev.azure.com/alicorn-dev/KintoneAppBuilder/_git/KintoneAppBuilder into dev2 2025-09-10 10:08:27 +09:00
6869505d9a 文言修正& DB 2025-09-10 10:06:28 +09:00
a8ec97969f var2仕様 2025-09-08 03:30:21 +09:00
c58887942b Merge branch 'dev2' of https://dev.azure.com/alicorn-dev/KintoneAppBuilder/_git/KintoneAppBuilder into dev2 2025-08-04 11:23:35 +09:00
7fccf97eaf env 2025-08-04 11:23:27 +09:00
0f6494acdc env 2025-03-29 13:09:05 +09:00
12 changed files with 7343 additions and 49 deletions

File diff suppressed because one or more lines are too long

7285
db/kintone-dev2-db.sql Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -1,6 +1,6 @@
#開発環境 #開発環境
KAB_BACKEND_URL="https://ktune-backend-dev-eba8fkeyffegc3cz.japanwest-01.azurewebsites.net/" #KAB_BACKEND_URL="https://ktune-backend-dev-eba8fkeyffegc3cz.japanwest-01.azurewebsites.net/"
#単体テスト環境 #単体テスト環境
#KAB_BACKEND_URL="https://kab-backend-unittest.azurewebsites.net/" #KAB_BACKEND_URL="https://kab-backend-unittest.azurewebsites.net/"
#ローカル開発環境 #ローカル開発環境
#KAB_BACKEND_URL="http://127.0.0.1:8000/" KAB_BACKEND_URL="http://127.0.0.1:8000/"

View File

@@ -11,7 +11,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { ref, PropType } from 'vue'; import { ref, PropType, watchEffect } from 'vue';
import { api } from 'boot/axios'; import { api } from 'boot/axios';
import DetailFieldTable from './dialog/DetailFieldTable.vue'; import DetailFieldTable from './dialog/DetailFieldTable.vue';
@@ -33,6 +33,9 @@ export default {
filter: String, filter: String,
filterInitRowsFunc: { filterInitRowsFunc: {
type: Function as PropType<(app: IAppDisplay) => boolean>, type: Function as PropType<(app: IAppDisplay) => boolean>,
},
updateSelectApp: {
type: Function
} }
}, },
setup(props) { setup(props) {
@@ -44,6 +47,12 @@ export default {
{ name: 'createdate', label: '作成日時', field: 'createdate', align: 'left' } { name: 'createdate', label: '作成日時', field: 'createdate', align: 'left' }
]; ];
watchEffect(()=>{
if (selected.value && selected.value[0] && props.updateSelectApp) {
props.updateSelectApp(selected.value[0])
}
});
const fetchApps = async () => { const fetchApps = async () => {
const res = await api.get('api/v1/allapps'); const res = await api.get('api/v1/allapps');
return res.data.apps.map((item: any) => ({ return res.data.apps.map((item: any) => ({

View File

@@ -18,7 +18,7 @@
input-debounce="0" input-debounce="0"
:options="canSharedUserFilteredOptions" :options="canSharedUserFilteredOptions"
clearable clearable
:placeholder="canSharedUserFilter ? '' : domain.domainActive ? '権限を付与するユーザーを選択' : 'ドメインが無効なため、権限を付与できません'" :placeholder="canSharedUserFilter ? '' : domain.domainActive ? '権限を付与するユーザーを選択' : '接続先が無効なため、権限を付与できません'"
@filter="filterFn"> @filter="filterFn">
<template v-slot:selected-item="scope"> <template v-slot:selected-item="scope">

View File

@@ -1,7 +1,7 @@
<template> <template>
<share-domain-dialog <share-domain-dialog
:dialogTitle="`「${domain.name}」のドメイン利用権限設定`" :dialogTitle="`「${domain.name}」の接続先利用権限設定`"
userListTitle="ドメイン利用権限を持つユーザー" userListTitle="接続先利用権限を持つユーザー"
:domain="domain" :domain="domain"
:share-api="shareApi" :share-api="shareApi"
:remove-shared-api="removeSharedApi" :remove-shared-api="removeSharedApi"

View File

@@ -96,7 +96,7 @@ const essentialLinks: EssentialLinkProps[] = reactive([
target: '_self', target: '_self',
permission: MenuMapping.role permission: MenuMapping.role
}, },
// ------------ドメイン------------- // ------------接続先管理-------------
{ {
title: '接続先管理', title: '接続先管理',
caption: 'kintoneの接続先設定', caption: 'kintoneの接続先設定',

View File

@@ -76,7 +76,7 @@
<q-item tag="label" class="q-pl-sm q-pr-none q-py-xs"> <q-item tag="label" class="q-pl-sm q-pr-none q-py-xs">
<q-item-section> <q-item-section>
<q-item-label>ドメインの有効化</q-item-label> <q-item-label>接続先の有効化</q-item-label>
</q-item-section> </q-item-section>
<q-item-section avatar> <q-item-section avatar>
<q-toggle v-model="domainActive" /> <q-toggle v-model="domainActive" />
@@ -143,12 +143,12 @@
<!-- -1 loading --> <!-- -1 loading -->
<q-card-section v-if="deleteLoadingState == -1" class="row items-center"> <q-card-section v-if="deleteLoadingState == -1" class="row items-center">
<q-spinner color="primary" size="2em"/> <q-spinner color="primary" size="2em"/>
<span class="q-ml-sm">ドメイン利用権限を確認中</span> <span class="q-ml-sm">接続先利用権限を確認中</span>
</q-card-section> </q-card-section>
<!-- > 0 can't delete --> <!-- > 0 can't delete -->
<q-card-section v-else-if="deleteLoadingState > 0" class="row items-center"> <q-card-section v-else-if="deleteLoadingState > 0" class="row items-center">
<q-icon name="error" color="negative" size="2em" /> <q-icon name="error" color="negative" size="2em" />
<span class="q-ml-sm">ドメインは使用中です。削除してもよろしいですか?</span> <span class="q-ml-sm">接続先は使用中です。削除してもよろしいですか?</span>
</q-card-section> </q-card-section>
<!-- 0/-2 can delete --> <!-- 0/-2 can delete -->
<q-card-section v-else class="row items-center"> <q-card-section v-else class="row items-center">
@@ -262,7 +262,7 @@ const actionList = [
action: (row: IDomainOwnerDisplay) => {openShareDg(SHARE_USE, row)} }, action: (row: IDomainOwnerDisplay) => {openShareDg(SHARE_USE, row)} },
{ label: '管理権限設定', icon: 'add_moderator', permission: Actions.domain.grantManage, { label: '管理権限設定', icon: 'add_moderator', permission: Actions.domain.grantManage,
disable: (row: IDomainOwnerDisplay) => !isOwner(row), disable: (row: IDomainOwnerDisplay) => !isOwner(row),
tooltip: (row: IDomainOwnerDisplay) => isOwner(row) ? '' : 'ドメイン所有者でないため、操作できません', tooltip: (row: IDomainOwnerDisplay) => isOwner(row) ? '' : '接続先の所有者でないため、操作できません',
action: (row: IDomainOwnerDisplay) => {openShareDg(SHARE_MANAGE, row)} action: (row: IDomainOwnerDisplay) => {openShareDg(SHARE_MANAGE, row)}
}, },
{ separator: true }, { separator: true },

View File

@@ -59,7 +59,7 @@ export default route(function (/* { store, ssrContext } */) {
if (!authStore.hasDomain && !domainPages.includes(to.path)) { if (!authStore.hasDomain && !domainPages.includes(to.path)) {
Dialog.create({ Dialog.create({
title: '注意', title: '注意',
message: '既定/利用可能なドメインはありません。<br>接続先管理ページに遷移して処理します。', message: '既定/利用可能な接続先はありません。<br>接続先管理ページに遷移して処理します。',
html: true, html: true,
persistent: true, persistent: true,
}) })

View File

@@ -103,7 +103,7 @@ export class AutoLookUpAction implements IAction {
this.actionProps = actionNode.actionProps; this.actionProps = actionNode.actionProps;
this.props = { this.props = {
...actionNode.ActionValue, ...actionNode.ActionValue,
condition: JSON.parse((actionNode.ActionValue as any).condition), condition: JSON.parse((actionNode.ActionValue as any).condition || '{}'),
} as IAutoLookUpProps; } as IAutoLookUpProps;
// console.log(context); // console.log(context);
@@ -111,7 +111,6 @@ export class AutoLookUpAction implements IAction {
canNext: true, canNext: true,
result: "", result: "",
} as IActionResult; } as IActionResult;
try {
const lookUpFields = this.props.lookupField.fields.filter( const lookUpFields = this.props.lookupField.fields.filter(
(f) => f.lookup && f.lookup.relatedApp.app === String(kintone.app.getId()) (f) => f.lookup && f.lookup.relatedApp.app === String(kintone.app.getId())
); );
@@ -120,7 +119,9 @@ export class AutoLookUpAction implements IAction {
`ルックアップの設定は不正です。${this.props.lookupField.fields[0].label} ` `ルックアップの設定は不正です。${this.props.lookupField.fields[0].label} `
); );
} }
try {
const lookUpField = this.props.lookupField.fields[0]; const lookUpField = this.props.lookupField.fields[0];
this.showSpinnerModel(this.props.lookupField.app, lookUpField);
const key = event.record[lookUpField.lookup.relatedKeyField].value; const key = event.record[lookUpField.lookup.relatedKeyField].value;
const targetRecords = await this.getUpdateRecords(lookUpField, key); const targetRecords = await this.getUpdateRecords(lookUpField, key);
//更新対象がない時にスキップ //更新対象がない時にスキップ
@@ -129,7 +130,6 @@ export class AutoLookUpAction implements IAction {
} }
const updateRecords = this.convertForLookup(targetRecords,lookUpField,key); const updateRecords = this.convertForLookup(targetRecords,lookUpField,key);
console.log("updateRecords", updateRecords); console.log("updateRecords", updateRecords);
this.showSpinnerModel(this.props.lookupField.app,lookUpField);
const updateResult = await this.updateLookupTarget(updateRecords); const updateResult = await this.updateLookupTarget(updateRecords);
if(updateResult){ if(updateResult){
this.showResult(this.props.lookupField.app,lookUpField,updateRecords.length); this.showResult(this.props.lookupField.app,lookUpField,updateRecords.length);
@@ -157,7 +157,7 @@ export class AutoLookUpAction implements IAction {
if(typeof key==='string'){ if(typeof key==='string'){
query = `${lookUpField.code} = "${key}"` query = `${lookUpField.code} = "${key}"`
} }
if(this.props.condition.queryString!==''){ if(!!this.props.condition.queryString){
query = `${query} and (${this.props.condition.queryString})` query = `${query} and (${this.props.condition.queryString})`
} }
return query; return query;

View File

@@ -645,7 +645,7 @@ export class InsertValueAction implements IAction{
const conditionResult = this.getConditionResult(context); const conditionResult = this.getConditionResult(context);
//保存成功イベントの場合、kintone async/await による非同期処理でフィールドに値を挿入する //保存成功イベントの場合、kintone async/await による非同期処理でフィールドに値を挿入する
if(!event.type.includes('success')){ if(!event.type?.includes('success')){
//条件式の結果がtrueかつ挿入する値が変換できた場合、フィールドラジオボタン・ドロップダウン・チェックボックス・複数選択・文字列一行・文字列複数行・リッチエディタ・数値・日付・日時・時刻にセット //条件式の結果がtrueかつ挿入する値が変換できた場合、フィールドラジオボタン・ドロップダウン・チェックボックス・複数選択・文字列一行・文字列複数行・リッチエディタ・数値・日付・日時・時刻にセット
if(conditionResult){ if(conditionResult){