|
<script setup lang="ts">
|
|
import { NModal, NTable, NTag, NButton, NInput, useMessage } from 'naive-ui';
|
|
import { useChatStore, type SydneyConfig } from '@/stores/modules/chat';
|
|
import { storeToRefs } from 'pinia';
|
|
|
|
const chatStore = useChatStore();
|
|
const { isShowChatServiceSelectModal, sydneyConfigs, selectedSydneyBaseUrl } = storeToRefs(chatStore);
|
|
|
|
const message = useMessage();
|
|
|
|
const checkSydneyConfig = async (config: SydneyConfig) => {
|
|
config.isUsable = undefined;
|
|
config.delay = undefined;
|
|
const checkResult = await chatStore.checkSydneyConfig(config);
|
|
if (checkResult.errorMsg) {
|
|
message.error(checkResult.errorMsg);
|
|
}
|
|
config.isUsable = checkResult.isUsable;
|
|
config.delay = checkResult.delay;
|
|
};
|
|
|
|
const selectSydneyConfig = (config: SydneyConfig) => {
|
|
selectedSydneyBaseUrl.value = config.baseUrl;
|
|
CIB.config.sydney.baseUrl = config.baseUrl;
|
|
isShowChatServiceSelectModal.value = false;
|
|
};
|
|
|
|
const handleChangeSydneyConfig = (config: SydneyConfig) => {
|
|
if (!config.baseUrl) {
|
|
return;
|
|
}
|
|
if (!config.baseUrl.startsWith('https://')) {
|
|
message.error('请填写 https 开头的正确链接');
|
|
return;
|
|
}
|
|
return checkSydneyConfig(config);
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<NModal class="w-11/12 lg:w-[900px]" v-model:show="isShowChatServiceSelectModal" preset="card" title="聊天服务器设置">
|
|
<NTable striped>
|
|
<tbody>
|
|
<tr v-for="(config, index) in sydneyConfigs" :key="index">
|
|
<td>
|
|
<span v-if="config.isCus" class="hidden lg:block">{{ config.label }}</span>
|
|
<span v-else>{{ config.label }}</span>
|
|
<NInput class="lg:hidden" v-if="config.isCus" v-model:value="config.baseUrl" placeholder="自定义聊天服务器链接" @change="handleChangeSydneyConfig(config)"></NInput>
|
|
</td>
|
|
<td class="hidden lg:table-cell">
|
|
<NInput v-if="config.isCus" v-model:value="config.baseUrl" placeholder="自定义聊天服务器链接" @change="handleChangeSydneyConfig(config)"></NInput>
|
|
<span v-else>{{ config.baseUrl }}</span>
|
|
</td>
|
|
<td>
|
|
<div v-if="config.baseUrl && config.isUsable === undefined && config.delay === undefined" class="flex justify-center items-center flex-wrap gap-2">
|
|
<NButton tertiary :loading="true" size="small" type="info"></NButton>
|
|
</div>
|
|
<div v-else-if="config.baseUrl" class="flex justify-center items-center flex-wrap gap-2" @click="checkSydneyConfig(config)">
|
|
<NTag v-if="config.isUsable === false" type="error" class="cursor-pointer">不可用</NTag>
|
|
<NTag v-if="config.delay" type="success" class="cursor-pointer">{{ config.delay }} ms</NTag>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<div class="flex justify-center items-center flex-wrap gap-2">
|
|
<NButton class="hidden lg:table-cell" secondary @click="checkSydneyConfig(config)">检测</NButton>
|
|
<NButton v-if="config.baseUrl === selectedSydneyBaseUrl" secondary type="success">当前</NButton>
|
|
<NButton v-else secondary type="info" @click="selectSydneyConfig(config)">选择</NButton>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</NTable>
|
|
</NModal>
|
|
</template>
|
|
|