mirror of
https://wget.la/https://github.com/leookun/cursor-byok
synced 2026-08-17 19:47:10 +08:00
85 lines
2.5 KiB
Vue
85 lines
2.5 KiB
Vue
<script setup>
|
||
import Button from "@/components/ui/Button.vue";
|
||
import Card from "@/components/ui/Card.vue";
|
||
import LocaleSelect from "@/components/LocaleSelect.vue";
|
||
import { useMessage } from "@/composables/useMessage";
|
||
import {
|
||
appState,
|
||
openModelConfigWindow,
|
||
persistUserConfig,
|
||
reloadUserConfig,
|
||
toUserError,
|
||
} from "@/state/appState";
|
||
import { onMounted } from "vue";
|
||
|
||
const message = useMessage();
|
||
|
||
function showActionError(title, error) {
|
||
const detail = String(error || "服务错误").trim() || "服务错误";
|
||
message(`${title}:${detail}`);
|
||
}
|
||
|
||
async function handleSaveConfig() {
|
||
const result = await persistUserConfig();
|
||
if (!result.ok) {
|
||
showActionError("保存失败", result.error);
|
||
return;
|
||
}
|
||
message("本地配置已保存");
|
||
}
|
||
|
||
async function handleOpenModelConfig() {
|
||
try {
|
||
await openModelConfigWindow();
|
||
} catch (error) {
|
||
showActionError("打开失败", toUserError(error));
|
||
}
|
||
}
|
||
|
||
onMounted(async () => {
|
||
await reloadUserConfig().catch(() => {});
|
||
});
|
||
</script>
|
||
|
||
<template>
|
||
<div class="flex h-full min-h-0 flex-col gap-4 overflow-y-auto p-4 pt-0 text-[#e5e5e5]">
|
||
<Card>
|
||
<div class="flex items-center justify-between gap-4">
|
||
<div>
|
||
<h2 class="text-base font-medium text-white">本地配置</h2>
|
||
<div class="text-sm text-[#a3a3a3]">
|
||
可配置模型渠道;运行日志位于 <code>~/.cursor-local-assistant-v2/logs/</code>
|
||
</div>
|
||
</div>
|
||
<Button variant="primary" :disabled="appState.configSaving" @click="handleSaveConfig">
|
||
{{ appState.configSaving ? "保存中..." : "保存配置" }}
|
||
</Button>
|
||
</div>
|
||
</Card>
|
||
|
||
<Card>
|
||
<div class="flex items-center justify-between gap-4">
|
||
<div>
|
||
<h2 class="text-base font-medium text-white">界面语言</h2>
|
||
<div class="text-sm text-[#a3a3a3]">
|
||
切换当前界面显示语言,设置会立即生效并保存在本机
|
||
</div>
|
||
</div>
|
||
<LocaleSelect wrapper-class="w-[220px] max-w-full" />
|
||
</div>
|
||
</Card>
|
||
|
||
<Card>
|
||
<div class="flex items-center justify-between gap-4">
|
||
<div>
|
||
<h2 class="text-base font-medium text-white">模型配置</h2>
|
||
<div class="text-sm text-[#a3a3a3]">
|
||
已配置 {{ appState.modelAdapters.length }} 个模型适配器
|
||
</div>
|
||
</div>
|
||
<Button variant="primary" @click="handleOpenModelConfig">打开模型配置</Button>
|
||
</div>
|
||
</Card>
|
||
</div>
|
||
</template>
|