feat: add customer service IM bindings

This commit is contained in:
richjohnrambo
2026-10-14 16:46:20 +08:00
parent ad6d0bbe01
commit 131168c700
9 changed files with 87 additions and 12 deletions
+14 -3
View File
@@ -65,8 +65,19 @@
<n-form-item label="头像地址">
<n-input v-model:value="form.avatarUrl" />
</n-form-item>
<n-grid :cols="2" :x-gap="12">
<n-form-item-gi label="IM租户代码" path="imTenantCode">
<n-input v-model:value="form.imTenantCode" disabled />
</n-form-item-gi>
<n-form-item-gi label="IM登录名">
<n-input v-model:value="form.imUsername" placeholder="例如 allrich_cs_01" />
</n-form-item-gi>
</n-grid>
<n-form-item label="IM客服用户 ID">
<n-input v-model:value="form.imUserId" placeholder="填写 IM 返回的对外用户 ID" />
</n-form-item>
<n-form-item label="客服跳转 URL" path="serviceUrl">
<n-input v-model:value="form.serviceUrl" placeholder="必须使用 HTTPS" />
<n-input v-model:value="form.serviceUrl" placeholder="过渡回退地址,可留空" />
</n-form-item>
<n-form-item label="备用联系方式" path="backupContact">
<n-input v-model:value="form.backupContact" />
@@ -140,11 +151,11 @@
onlineStatus: { required: true, type: 'number', message: '请选择在线状态', trigger: 'change' },
status: { required: true, type: 'number', message: '请选择状态', trigger: 'change' },
serviceUrl: {
required: true,
pattern: /^https:\/\/.+/i,
message: '请输入有效的 HTTPS 地址',
message: '若填写,请输入有效的 HTTPS 地址',
trigger: ['input', 'blur'],
},
imTenantCode: { required: true, message: '请输入 IM 租户代码', trigger: ['input', 'blur'] },
backupContact: { required: true, message: '请输入备用联系方式', trigger: ['input', 'blur'] },
};
const [register] = useForm({
@@ -3,7 +3,7 @@ import { NTag } from 'naive-ui';
import { FormSchema } from '@/components/Form';
import { useDictStore } from '@/store/modules/dict';
const dict=useDictStore();
export class State { id=0;serviceCode='';name='';avatarUrl='';workTime='09:00-18:00';onlineStatus=2;serviceUrl='https://';backupContact='';status=1;sort=0;remark=''; }
export class State { id=0;serviceCode='';name='';avatarUrl='';workTime='09:00-18:00';onlineStatus=2;serviceUrl='';backupContact='';imTenantCode='allrich';imUserId='';imUsername='';status=1;sort=0;remark=''; }
export const schemas=ref<FormSchema[]>([
{field:'name',component:'NInput',label:'客服名称',componentProps:{clearable:true}},
{field:'status',component:'NSelect',label:'状态',componentProps:{options:computed(()=>dict.getOptionUnRef('sys_normal_disable')),clearable:true}},
@@ -11,7 +11,7 @@ export const schemas=ref<FormSchema[]>([
const tag=(type,value)=>h(NTag,{type:dict.getType(type,value),bordered:false},{default:()=>dict.getLabel(type,value)||'-'});
export const columns=[
{title:'编码',key:'serviceCode',width:130},{title:'客服名称',key:'name',width:140},{title:'工作时间',key:'workTime',width:150},
{title:'在线状态',key:'onlineStatus',width:100,render:(r)=>tag('customerServiceOnline',r.onlineStatus)},{title:'跳转 URL',key:'serviceUrl',width:260,ellipsis:{tooltip:true}},
{title:'在线状态',key:'onlineStatus',width:100,render:(r)=>tag('customerServiceOnline',r.onlineStatus)},{title:'IM账号',key:'imUsername',width:150,render:(r)=>r.imUsername||'未绑定'},{title:'IM用户ID',key:'imUserId',width:190,ellipsis:{tooltip:true}},
{title:'备用联系方式',key:'backupContact',width:220,ellipsis:{tooltip:true}},{title:'状态',key:'status',width:90,render:(r)=>tag('sys_normal_disable',r.status)},
{title:'排序',key:'sort',width:80},{title:'创建时间',key:'createdAt',width:180},
];