refactor(ui): migrate remaining ElMessageBox.confirm calls to mcConfirm

This commit is contained in:
matevip 2026-05-01 10:58:21 +08:00
parent 8ce7e7d26d
commit f8ec223bcb
11 changed files with 90 additions and 75 deletions

View File

@ -154,7 +154,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, onMounted, reactive, ref } from 'vue' import { computed, onMounted, reactive, ref } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { acpApi } from '@/api/index' import { acpApi } from '@/api/index'
interface AcpEndpoint { interface AcpEndpoint {
@ -267,10 +268,12 @@ async function saveEndpoint() {
} }
async function removeEndpoint(ep: AcpEndpoint) { async function removeEndpoint(ep: AcpEndpoint) {
try { const ok = await mcConfirm({
await ElMessageBox.confirm(t('acp.deleteConfirm', { name: ep.name }), title: t('acp.deleteTitle'),
t('acp.deleteTitle'), { type: 'warning' }) message: t('acp.deleteConfirm', { name: ep.name }),
} catch { return } tone: 'danger',
})
if (!ok) return
try { try {
await acpApi.delete(ep.id) await acpApi.delete(ep.id)
await loadEndpoints() await loadEndpoints()

View File

@ -205,7 +205,8 @@
import { ref, computed, onMounted, watch } from 'vue' import { ref, computed, onMounted, watch } from 'vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { agentApi, agentContextApi } from '@/api/index' import { agentApi, agentContextApi } from '@/api/index'
import type { Agent, WorkspaceFile } from '@/types/index' import type { Agent, WorkspaceFile } from '@/types/index'
import { useMarkdownRenderer } from '@/composables/useMarkdownRenderer' import { useMarkdownRenderer } from '@/composables/useMarkdownRenderer'
@ -392,13 +393,12 @@ async function toggleFileEnabled(file: WorkspaceFile) {
async function confirmDeleteFile() { async function confirmDeleteFile() {
if (!selectedFile.value) return if (!selectedFile.value) return
const name = selectedFile.value.filename const name = selectedFile.value.filename
try { const ok = await mcConfirm({
await ElMessageBox.confirm( title: t('common.delete'),
t('agentContext.deleteConfirm', { name }), message: t('agentContext.deleteConfirm', { name }),
t('common.delete'), tone: 'danger',
{ type: 'warning' } })
) if (!ok) return
} catch { return }
try { try {
await agentContextApi.deleteFile(selectedAgentId.value, name) await agentContextApi.deleteFile(selectedAgentId.value, name)

View File

@ -340,7 +340,8 @@
import { ref, computed, onMounted } from 'vue' import { ref, computed, onMounted } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { agentApi, agentBindingApi, modelApi, skillApi, toolApi, templateApi } from '@/api/index' import { agentApi, agentBindingApi, modelApi, skillApi, toolApi, templateApi } from '@/api/index'
import type { Agent } from '@/types/index' import type { Agent } from '@/types/index'
import SkillIcon from '@/components/common/SkillIcon.vue' import SkillIcon from '@/components/common/SkillIcon.vue'
@ -590,11 +591,12 @@ async function saveAgent() {
} }
async function deleteAgent(agent: Agent) { async function deleteAgent(agent: Agent) {
try { const ok = await mcConfirm({
await ElMessageBox.confirm(t('agents.messages.deleteConfirm'), t('agents.actions.delete'), { type: 'warning' }) title: t('agents.actions.delete'),
} catch { message: t('agents.messages.deleteConfirm'),
return tone: 'danger',
} })
if (!ok) return
try { try {
await agentApi.delete(agent.id) await agentApi.delete(agent.id)
ElMessage.success(t('agents.messages.deleteSuccess')) ElMessage.success(t('agents.messages.deleteSuccess'))

View File

@ -170,7 +170,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, defineAsyncComponent, onMounted, onUnmounted, onActivated, onDeactivated } from 'vue' import { ref, computed, defineAsyncComponent, onMounted, onUnmounted, onActivated, onDeactivated } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { channelApi, agentApi } from '@/api' import { channelApi, agentApi } from '@/api'
import type { Channel, Agent } from '@/types' import type { Channel, Agent } from '@/types'
@ -473,11 +474,12 @@ async function handleSave(payload: Partial<Channel>) {
// ==================== Toggle / delete ==================== // ==================== Toggle / delete ====================
async function deleteChannel(id: string | number) { async function deleteChannel(id: string | number) {
try { const ok = await mcConfirm({
await ElMessageBox.confirm(t('channels.messages.deleteConfirm'), t('channels.messages.deleteTitle'), { type: 'warning' }) title: t('channels.messages.deleteTitle'),
} catch { message: t('channels.messages.deleteConfirm'),
return tone: 'danger',
} })
if (!ok) return
try { try {
await channelApi.delete(id) await channelApi.delete(id)
await loadChannels() await loadChannels()

View File

@ -315,7 +315,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, onMounted, watch } from 'vue' import { ref, computed, onMounted, watch } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { useCronJobStore } from '@/stores/useCronJobStore' import { useCronJobStore } from '@/stores/useCronJobStore'
import { useAgentStore } from '@/stores/useAgentStore' import { useAgentStore } from '@/stores/useAgentStore'
import type { CronJob } from '@/types/index' import type { CronJob } from '@/types/index'
@ -438,12 +439,12 @@ async function saveJob() {
} }
async function handleDelete(job: CronJob) { async function handleDelete(job: CronJob) {
try { const ok = await mcConfirm({
await ElMessageBox.confirm( title: t('common.delete'),
t('cronJobs.messages.deleteConfirm', { name: job.name }), message: t('cronJobs.messages.deleteConfirm', { name: job.name }),
{ type: 'warning' }, tone: 'danger',
) })
} catch { return } if (!ok) return
try { try {
await store.deleteJob(job.id) await store.deleteJob(job.id)
ElMessage.success(t('cronJobs.messages.deleteSuccess')) ElMessage.success(t('cronJobs.messages.deleteSuccess'))

View File

@ -235,7 +235,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, onMounted, watch } from 'vue' import { ref, computed, onMounted, watch } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { import {
ArrowDown, ArrowDown,
CircleCheckFilled, CircleCheckFilled,
@ -410,7 +411,12 @@ async function testInModal() {
} }
async function deleteDs(id: string | number) { async function deleteDs(id: string | number) {
try { await ElMessageBox.confirm(t('datasources.messages.deleteConfirm'), t('datasources.messages.deleteTitle'), { type: 'warning' }) } catch { return } const ok = await mcConfirm({
title: t('datasources.messages.deleteTitle'),
message: t('datasources.messages.deleteConfirm'),
tone: 'danger',
})
if (!ok) return
try { try {
await datasourceApi.delete(id) await datasourceApi.delete(id)
await loadDatasources() await loadDatasources()

View File

@ -275,7 +275,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, onMounted } from 'vue' import { ref, computed, onMounted } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { mcpApi } from '@/api/index' import { mcpApi } from '@/api/index'
const { t } = useI18n() const { t } = useI18n()
@ -413,13 +414,12 @@ async function saveServer() {
} }
async function deleteServer(server: McpServer) { async function deleteServer(server: McpServer) {
try { const ok = await mcConfirm({
await ElMessageBox.confirm( title: t('common.delete'),
t('mcp.messages.deleteConfirm', { name: server.name }), message: t('mcp.messages.deleteConfirm', { name: server.name }),
t('common.delete'), tone: 'danger',
{ type: 'warning' } })
) if (!ok) return
} catch { return }
try { try {
await mcpApi.delete(server.id) await mcpApi.delete(server.id)
ElMessage.success(t('mcp.messages.deleteSuccess')) ElMessage.success(t('mcp.messages.deleteSuccess'))

View File

@ -93,7 +93,8 @@
import { ref, computed, onMounted } from 'vue' import { ref, computed, onMounted } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { conversationApi } from '@/api/index' import { conversationApi } from '@/api/index'
import { channelIconUrl, sourceLabel } from '@/utils/channelSource' import { channelIconUrl, sourceLabel } from '@/utils/channelSource'
import type { Conversation } from '@/types/index' import type { Conversation } from '@/types/index'
@ -127,7 +128,12 @@ function viewSession(session: Conversation) {
} }
async function deleteSession(conversationId: string) { async function deleteSession(conversationId: string) {
try { await ElMessageBox.confirm(t('sessions.deleteConfirm'), t('sessions.deleteTitle'), { type: 'warning' }) } catch { return } const ok = await mcConfirm({
title: t('sessions.deleteTitle'),
message: t('sessions.deleteConfirm'),
tone: 'danger',
})
if (!ok) return
try { try {
await conversationApi.delete(conversationId) await conversationApi.delete(conversationId)
await loadSessions() await loadSessions()

View File

@ -1,6 +1,7 @@
import { computed, reactive, ref } from 'vue' import { computed, reactive, ref } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { modelApi } from '@/api' import { modelApi } from '@/api'
import type { ProviderInfo } from '@/types' import type { ProviderInfo } from '@/types'
import { safeParseJson } from '@/utils/safeJson' import { safeParseJson } from '@/utils/safeJson'
@ -228,19 +229,13 @@ export function useProviderForm(deps: ListDeps) {
} }
async function deleteProvider(provider: ProviderInfo) { async function deleteProvider(provider: ProviderInfo) {
try { const ok = await mcConfirm({
await ElMessageBox.confirm( title: t('common.confirm'),
t('settings.model.deleteConfirm', { name: provider.name }), message: t('settings.model.deleteConfirm', { name: provider.name }),
t('common.confirm'), confirmText: t('common.delete'),
{ tone: 'danger',
type: 'warning', })
confirmButtonText: t('common.delete'), if (!ok) return false
cancelButtonText: t('common.cancel'),
},
)
} catch {
return false
}
await modelApi.deleteCustomProvider(provider.id) await modelApi.deleteCustomProvider(provider.id)
await deps.loadProviders() await deps.loadProviders()
return true return true

View File

@ -178,7 +178,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, defineAsyncComponent, onMounted, ref } from 'vue' import { computed, defineAsyncComponent, onMounted, ref } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import type { ProviderInfo, ProviderModelInfo } from '@/types' import type { ProviderInfo, ProviderModelInfo } from '@/types'
import { useProviders } from './useProviders' import { useProviders } from './useProviders'
@ -299,20 +300,13 @@ onMounted(async () => {
}) })
async function onDisableProvider(provider: ProviderInfo) { async function onDisableProvider(provider: ProviderInfo) {
// ElMessageBox throws on cancel that's our cancel branch. const ok = await mcConfirm({
try { title: t('common.confirm'),
await ElMessageBox.confirm( message: t('settings.model.disableConfirm', { name: provider.name }),
t('settings.model.disableConfirm', { name: provider.name }), confirmText: t('settings.model.disable'),
t('common.confirm'), tone: 'danger',
{ })
type: 'warning', if (!ok) return
confirmButtonText: t('settings.model.disable'),
cancelButtonText: t('common.cancel'),
},
)
} catch {
return
}
await disableProvider(provider.id) await disableProvider(provider.id)
} }

View File

@ -130,7 +130,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from 'vue' import { ref, onMounted } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { mcConfirm } from '@/components/common/useConfirm'
import { toolApi } from '@/api/index' import { toolApi } from '@/api/index'
import type { Tool } from '@/types/index' import type { Tool } from '@/types/index'
@ -186,7 +187,12 @@ async function saveTool() {
} }
async function deleteTool(id: string | number) { async function deleteTool(id: string | number) {
try { await ElMessageBox.confirm(t('tools.messages.deleteConfirm'), t('tools.messages.deleteTitle'), { type: 'warning' }) } catch { return } const ok = await mcConfirm({
title: t('tools.messages.deleteTitle'),
message: t('tools.messages.deleteConfirm'),
tone: 'danger',
})
if (!ok) return
try { try {
await toolApi.delete(id) await toolApi.delete(id)
await loadTools() await loadTools()