feat(ui): 微信客户列表补全16列(手机/描述/地区/签名/标签/员工/时间/添加类型/来源/好友类型)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,8 @@ import { buildCustomerSections, fromTypeLabel, readField } from '@/utils/custome
|
||||
* 客户列表 — channel-tabbed view mirroring 云客「沟通」板块的客户列表.
|
||||
*
|
||||
* 微信客户 tab 对齐 云客 /cms/wechat/wechatlist/wechatdetail/1/{wxId}
|
||||
* (7 列: 客户微信/数据来源/客户备注名/最近沟通时间/发送条数/接收条数/操作).
|
||||
* (16 列: 客户信息/手机号码/描述/地区/个性签名/好友标签/发送消息数/接收消息数/
|
||||
* 最近联系时间/员工微信/员工信息/创建时间/添加时间/添加类型/好友来源/好友类型 + 操作).
|
||||
* WhatsApp客户 tab 对齐 云客 /cms/wechat/waBusiness/friendlist
|
||||
* (7 列: 序号/员工信息/员工WhatsApp/客户WhatsApp/添加时间/最新消息时间/操作).
|
||||
* 两 channel 列不同 → 各自独立列定义(同 StaffList 模式)。
|
||||
@@ -92,6 +93,32 @@ function cellNum(row: Customer, camelKey: string, fallback = 0): number {
|
||||
function fromTypeText(row: Customer): string {
|
||||
return fromTypeLabel(cell(row, 'fromType'))
|
||||
}
|
||||
/** 添加类型列:addType 数值代码→文案(未知值原样透出)。 */
|
||||
function addTypeText(row: Customer): string {
|
||||
const v = cell(row, 'addType')
|
||||
if (v === 1 || v === '1') return '搜索添加'
|
||||
if (v === 2 || v === '2') return '群聊添加'
|
||||
if (v === 3 || v === '3') return '手机号添加'
|
||||
const s = String(v ?? '').trim()
|
||||
return s && s !== 'null' && s !== 'undefined' ? s : '--'
|
||||
}
|
||||
/** 好友标签列:contactLabelValues 可能是字符串数组/对象数组/单值,统一成顿号分隔文本。 */
|
||||
function contactLabelsText(row: Customer): string {
|
||||
const v = cell(row, 'contactLabelValues')
|
||||
if (Array.isArray(v)) {
|
||||
const parts = v
|
||||
.map((item) => {
|
||||
if (typeof item === 'string') return item.trim()
|
||||
if (item !== null && typeof item === 'object' && 'labelName' in item) {
|
||||
return String((item as { labelName?: unknown }).labelName ?? '').trim()
|
||||
}
|
||||
return String(item ?? '').trim()
|
||||
})
|
||||
.filter((s) => s !== '')
|
||||
return parts.length > 0 ? parts.join('、') : '--'
|
||||
}
|
||||
return cellText(row, 'contactLabelValues')
|
||||
}
|
||||
function imageCell(row: Customer, camelKey: string): string | undefined {
|
||||
const v = cell(row, camelKey)
|
||||
return typeof v === 'string' && v !== '' ? v : undefined
|
||||
@@ -340,7 +367,7 @@ onMounted(() => {
|
||||
|
||||
<el-tabs v-model="activeTab" class="yk-customers__tabs" @tab-change="onTabChange">
|
||||
<!-- ============================================================
|
||||
微信客户 — 7 列,对齐云客 wechatdetail/1/{wxId}.
|
||||
微信客户 — 16 列 + 操作,对齐云客 wechatdetail/1/{wxId}.
|
||||
============================================================ -->
|
||||
<el-tab-pane label="微信客户" name="wechat">
|
||||
<el-alert
|
||||
@@ -362,7 +389,7 @@ onMounted(() => {
|
||||
empty-text="暂无微信客户数据"
|
||||
@row-click="openDrawer"
|
||||
>
|
||||
<el-table-column label="客户微信" min-width="220">
|
||||
<el-table-column label="客户信息" min-width="220">
|
||||
<template #default="{ row }">
|
||||
<div class="yk-wxuser">
|
||||
<el-avatar :size="36" :src="imageCell(row, 'friendHeadImageUrl')" shape="square">
|
||||
@@ -379,21 +406,65 @@ onMounted(() => {
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数据来源" min-width="110">
|
||||
<template #default="{ row }">{{ fromTypeText(row) }}</template>
|
||||
<el-table-column label="手机号码" width="130">
|
||||
<template #default="{ row }">{{ cellText(row, 'phone') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="客户备注名" min-width="120">
|
||||
<template #default="{ row }">{{ cellText(row, 'friendWxRemark') }}</template>
|
||||
<el-table-column label="描述" min-width="120">
|
||||
<template #default="{ row }">{{ cellText(row, 'description') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="最近沟通时间" width="170">
|
||||
<template #default="{ row }">{{ cellTimeText(row, 'lastChatTime') }}</template>
|
||||
<el-table-column label="地区" width="100">
|
||||
<template #default="{ row }">{{ cellText(row, 'region') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发送条数" width="100" align="right">
|
||||
<el-table-column label="个性签名" min-width="150">
|
||||
<template #default="{ row }">{{ cellText(row, 'signature') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="好友标签" min-width="120">
|
||||
<template #default="{ row }">{{ contactLabelsText(row) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发送消息数" width="100" align="right">
|
||||
<template #default="{ row }">{{ cellNum(row, 'sendNum') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="接收条数" width="100" align="right">
|
||||
<el-table-column label="接收消息数" width="100" align="right">
|
||||
<template #default="{ row }">{{ cellNum(row, 'receiveNum') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="最近联系时间" width="170">
|
||||
<template #default="{ row }">{{ cellTimeText(row, 'lastChatTime') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="员工微信" min-width="180">
|
||||
<template #default="{ row }">
|
||||
<div class="yk-staffinfo__nick" :title="cellText(row, 'saleName')">
|
||||
{{ cellText(row, 'saleName') }}
|
||||
</div>
|
||||
<div class="yk-staffinfo__muted" :title="cellText(row, 'ownerWchatId')">
|
||||
{{ cellText(row, 'ownerWchatId') }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="员工信息" min-width="140">
|
||||
<template #default="{ row }">
|
||||
<div class="yk-staffinfo__nick" :title="cellText(row, 'saleName')">
|
||||
{{ cellText(row, 'saleName') }}
|
||||
</div>
|
||||
<div class="yk-staffinfo__muted" :title="cellText(row, 'phone')">
|
||||
{{ cellText(row, 'phone') }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" width="170">
|
||||
<template #default="{ row }">{{ cellTimeText(row, 'createTime') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="添加时间" width="170">
|
||||
<template #default="{ row }">{{ cellTimeText(row, 'addTime') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="添加类型" width="100">
|
||||
<template #default="{ row }">{{ addTypeText(row) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="好友来源" width="100">
|
||||
<template #default="{ row }">{{ fromTypeText(row) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="好友类型" width="100">
|
||||
<template #default="{ row }">{{ cellText(row, 'friendType') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220" fixed="right" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button link type="primary" size="small" @click.stop="viewChat(row)">
|
||||
|
||||
Reference in New Issue
Block a user