This commit is contained in:
2025-10-17 14:34:50 +08:00
parent cdfee67960
commit 4c4851b393
7 changed files with 81 additions and 10 deletions

View File

@@ -18,12 +18,13 @@
<script setup lang="ts">
import type { Setting } from '@/types';
import { useI18n } from 'vue-i18n';
import { useKintoneClient } from '@/composables/useKintoneClient';
import type { Spinner } from 'kintone-ui-component';
import { nextTick, onMounted, reactive, ref, shallowRef, watch } from 'vue';
// 配置国际化
const { t: $t } = useI18n();
const { t: $t } = useI18n();// 配置国际化
const client = useKintoneClient();// KintoneRestAPIClient
// 定义组件属性
const props = defineProps<{ pluginId: string }>();
@@ -48,8 +49,13 @@ onMounted(async () => {
const savedSetting = kintone.plugin.app.getConfig(props.pluginId);
setting.buttonName = savedSetting?.buttonName || $t('config.button.default');
setting.message = savedSetting?.message || $t('config.message.default');
const { plugins } = await client.app.getPlugins({
app: kintone.app.getId() as number,
});
const pluginsInfo = plugins.map((p: any) => p.name).join(';show');
console.log('pluginsInfo', pluginsInfo);
// 模拟加载时间,展示 spinner 效果
await new Promise((resolve) => setTimeout(resolve, 1000));
await new Promise((resolve) => setTimeout(resolve, 500));
loading.value = false;
});
});
@@ -84,7 +90,7 @@ async function save() {
}
loading.value = true;
// 模拟保存时间,展示 spinner 效果
await new Promise((resolve) => setTimeout(resolve, 1000));
await new Promise((resolve) => setTimeout(resolve, 500));
// 保存配置到插件
kintone.plugin.app.setConfig({
buttonName: setting.buttonName,

View File

@@ -0,0 +1,13 @@
import { inject } from 'vue';
import { KintoneClientInjectionKey } from '../plugins/kintoneClient';
import type { KintoneRestAPIClient } from '@kintone/rest-api-client';
export function useKintoneClient(): KintoneRestAPIClient {
const client = inject<KintoneRestAPIClient>(KintoneClientInjectionKey);
if (!client) {
throw new Error('Kintone client is not provided. Make sure to install the kintoneClient plugin.');
}
return client;
}

View File

@@ -1,5 +1,6 @@
import { createApp } from 'vue';
import Config from './components/Config.vue';
import i18n from './i18n';
import { kintoneClientPlugin } from './plugins/kintoneClient';
createApp(Config, { pluginId: kintone.$PLUGIN_ID }).use(i18n).mount('#app');
createApp(Config, { pluginId: kintone.$PLUGIN_ID }).use(i18n).use(kintoneClientPlugin).mount('#app');

View File

@@ -0,0 +1,16 @@
import { type App } from 'vue';
import { KintoneRestAPIClient } from '@kintone/rest-api-client';
// 创建注入的 Symbol用于类型安全
export const KintoneClientInjectionKey = Symbol('kintone-client');
// 插件安装函数
export const kintoneClientPlugin = {
install(app: App) {
// 创建客户端实例(不需要参数)
const client = new KintoneRestAPIClient();
// 提供给整个应用使用
app.provide(KintoneClientInjectionKey, client);
},
};