/** * 账号管理 * 管理对话账号,并为账号绑定默认客服角色。 */ import { ref, reactive, onMounted } from 'vue' import { getAllAccounts, createAccount, updateAccount, deleteAccount, getRoleList } from '../js/api.js' import { toast } from '../js/utils.js' export default { template: `

账号管理

为每个账号绑定一个默认角色。对话页选择账号后,系统会按账号绑定的角色回答,并把会话历史归属到该账号。

暂无账号
账号 说明 绑定角色 状态 操作
{{ account.name }}
{{ account.account_key }}
{{ account.description || '-' }} {{ account.role_name || '未绑定' }} {{ account.enabled === false ? '停用' : '启用' }}
`, setup() { const accounts = ref([]) const roles = ref([]) const editingId = ref('') const form = reactive({ name: '', description: '', roleId: '', enabled: true }) async function loadRoles() { const json = await getRoleList() if (json.success) { roles.value = json.data || [] } } async function reload() { try { const json = await getAllAccounts() if (json.success) { accounts.value = json.data || [] } } catch (e) { toast('加载账号失败:' + e.message, 'error') } } function resetForm() { editingId.value = '' form.name = '' form.description = '' form.roleId = '' form.enabled = true } function startEdit(account) { editingId.value = account.id form.name = account.name || '' form.description = account.description || '' form.roleId = account.role_id || '' form.enabled = account.enabled !== false } async function submit() { if (!form.name.trim()) { toast('请输入账号名称', 'error') return } const payload = { name: form.name, description: form.description, roleId: form.roleId || null, enabled: form.enabled } try { const json = editingId.value ? await updateAccount(editingId.value, payload) : await createAccount(payload) if (json.success) { toast(editingId.value ? '账号已更新' : '账号已创建', 'success') resetForm() reload() } else { toast(json.message || '操作失败', 'error') } } catch (e) { toast('操作失败:' + e.message, 'error') } } async function remove(account) { if (!confirm(`确定删除账号「${account.name}」?历史会话记录会保留归属信息。`)) return try { const json = await deleteAccount(account.id) if (json.success) { toast('账号已删除', 'success') if (editingId.value === account.id) resetForm() reload() } else { toast(json.message || '删除失败', 'error') } } catch (e) { toast('删除失败:' + e.message, 'error') } } onMounted(() => { loadRoles() reload() }) return { accounts, roles, editingId, form, reload, resetForm, startEdit, submit, remove } } }