feat(admin): conversation scene and account binding by scene

This commit is contained in:
2026-07-14 18:00:45 +08:00
parent 687269cce6
commit 128df39113

View File

@@ -28,6 +28,11 @@
</template>
</el-table-column>
<el-table-column prop="channelType" label="渠道" />
<el-table-column prop="conversationScene" label="场景" width="100">
<template #default="{ row }">
{{ formatConversationScene(row.conversationScene) }}
</template>
</el-table-column>
<el-table-column prop="channelConversationId" label="渠道会话ID" show-overflow-tooltip />
<el-table-column prop="conversationName" label="名称" />
<el-table-column prop="ownerAccountId" label="负责人">
@@ -71,6 +76,12 @@
<el-form-item label="渠道">
<el-input v-model="dialogForm.channelType" placeholder="wecom" />
</el-form-item>
<el-form-item label="场景">
<el-select v-model="dialogForm.conversationScene" placeholder="选择场景" style="width: 100%">
<el-option label="内部群" :value="1" />
<el-option label="外部群" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="渠道会话ID">
<el-input v-model="dialogForm.channelConversationId" placeholder="roomid_xxx" />
</el-form-item>
@@ -114,6 +125,12 @@
<el-form-item label="渠道">
<el-input v-model="dialogForm.channelType" placeholder="wecom" />
</el-form-item>
<el-form-item label="场景">
<el-select v-model="dialogForm.conversationScene" placeholder="选择场景" style="width: 100%">
<el-option label="内部群" :value="1" />
<el-option label="外部群" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="渠道会话ID">
<el-input v-model="dialogForm.channelConversationId" :disabled="isEdit" placeholder="roomid_xxx" />
</el-form-item>
@@ -270,6 +287,7 @@ const editingId = ref<number | null>(null)
const dialogForm = reactive({
conversationType: 2,
channelType: 'wecom',
conversationScene: undefined as number | undefined,
channelConversationId: '',
conversationName: '',
ownerAccountId: undefined as number | undefined,
@@ -311,6 +329,7 @@ watch([searchQuery, typeFilter], () => {
function resetDialogForm() {
dialogForm.conversationType = 2
dialogForm.channelType = 'wecom'
dialogForm.conversationScene = undefined
dialogForm.channelConversationId = ''
dialogForm.conversationName = ''
dialogForm.ownerAccountId = undefined
@@ -320,6 +339,7 @@ function resetDialogForm() {
function fillDialogForm(row: any) {
dialogForm.conversationType = row.conversationType ?? 2
dialogForm.channelType = row.channelType ?? 'wecom'
dialogForm.conversationScene = row.conversationScene ?? undefined
dialogForm.channelConversationId = row.channelConversationId ?? ''
dialogForm.conversationName = row.conversationName ?? ''
dialogForm.ownerAccountId = row.ownerAccountId
@@ -359,11 +379,14 @@ function formatAccountName(id: number | undefined) {
}
const filteredBindAccounts = computed(() => {
const channelType = currentBindConversation.value?.channelType
if (!channelType) return accounts.value
return accounts.value.filter((a: any) =>
a.channelType?.toLowerCase() === channelType?.toLowerCase()
)
const scene = currentBindConversation.value?.conversationScene
if (scene === 1) {
return accounts.value.filter((a: any) => a.accountType === 6)
}
if (scene === 2) {
return accounts.value.filter((a: any) => a.accountType === 3)
}
return accounts.value
})
function formatConversationType(type: number | undefined) {
@@ -372,6 +395,12 @@ function formatConversationType(type: number | undefined) {
return type ?? '-'
}
function formatConversationScene(scene: number | undefined) {
if (scene === 1) return '内部群'
if (scene === 2) return '外部群'
return scene ?? '-'
}
function formatParticipantType(type: number | undefined) {
if (type === 1) return '群主'
return '成员'
@@ -447,6 +476,7 @@ async function handleSave() {
const payload = {
conversationType: dialogForm.conversationType,
channelType: dialogForm.channelType,
conversationScene: dialogForm.conversationScene,
channelConversationId: dialogForm.channelConversationId,
conversationName: dialogForm.conversationName,
ownerAccountId: dialogForm.ownerAccountId,
@@ -473,6 +503,7 @@ async function handleStatusChange(row: any, val: any) {
await updateConversation(row.id, {
conversationType: row.conversationType,
channelType: row.channelType,
conversationScene: row.conversationScene,
channelConversationId: row.channelConversationId,
conversationName: row.conversationName,
ownerAccountId: row.ownerAccountId,