feat(ckchat): 添加获取客服用户信息的方法并更新相关引用

添加getKfUserInfo方法用于根据微信账号ID获取客服用户信息
更新Person组件中使用新方法替代原有的kfSelectedUser调用
This commit is contained in:
超级老白兔
2025-08-30 17:15:22 +08:00
parent 25b983a9ae
commit 14813013a7
2 changed files with 47 additions and 29 deletions

View File

@@ -24,7 +24,7 @@ import {
CheckOutlined,
} from "@ant-design/icons";
import { ContractData } from "@/pages/pc/ckbox/data";
import { useCkChatStore } from "@/store/module/ckchat";
import { useCkChatStore } from "@/store/module/ckchat/ckchat";
import styles from "./Person.module.scss";
const { Sider } = Layout;
@@ -43,10 +43,14 @@ const Person: React.FC<PersonProps> = ({
const [messageApi, contextHolder] = message.useMessage();
const [isEditingRemark, setIsEditingRemark] = useState(false);
const [remarkValue, setRemarkValue] = useState(contract.conRemark || "");
const [selectedTags, setSelectedTags] = useState<string[]>(contract.labels || []);
const [selectedTags, setSelectedTags] = useState<string[]>(
contract.labels || [],
);
const [allAvailableTags, setAllAvailableTags] = useState<string[]>([]);
const kfSelectedUser = useCkChatStore(state => state.kfSelectedUser(contract.wechatAccountId || 0));
const kfSelectedUser = useCkChatStore(state =>
state.getKfUserInfo(contract.wechatAccountId || 0),
);
// 获取所有可用标签
useEffect(() => {
@@ -58,7 +62,7 @@ const Person: React.FC<PersonProps> = ({
const allTags = [...new Set([...kfTags, ...contractTags])];
setAllAvailableTags(allTags);
} catch (error) {
console.error('获取标签失败:', error);
console.error("获取标签失败:", error);
}
};
fetchAvailableTags();
@@ -95,7 +99,9 @@ const Person: React.FC<PersonProps> = ({
setSelectedTags(newSelectedTags);
// 这里应该调用API保存标签到后端
messageApi.success(`标签"${tagName}"${selectedTags.includes(tagName) ? '已取消' : '已选中'}`);
messageApi.success(
`标签"${tagName}"${selectedTags.includes(tagName) ? "已取消" : "已选中"}`,
);
};
// 模拟联系人详细信息
@@ -154,8 +160,6 @@ const Person: React.FC<PersonProps> = ({
</h4>
</Tooltip>
<div className={styles.profileStatus}>
<span className={styles.statusDot}></span>
{contractInfo.status}
@@ -168,7 +172,9 @@ const Person: React.FC<PersonProps> = ({
<div className={styles.infoItem}>
<TeamOutlined className={styles.infoIcon} />
<span className={styles.infoLabel}>:</span>
<span className={styles.infoValue}>{contractInfo.alias || contractInfo.wechatId}</span>
<span className={styles.infoValue}>
{contractInfo.alias || contractInfo.wechatId}
</span>
</div>
<div className={styles.infoItem}>
<PhoneOutlined className={styles.infoIcon} />
@@ -222,9 +228,7 @@ const Person: React.FC<PersonProps> = ({
gap: "8px",
}}
>
<span>
{contractInfo.conRemark || "点击添加备注"}
</span>
<span>{contractInfo.conRemark || "点击添加备注"}</span>
<Button
type="text"
size="small"
@@ -241,25 +245,31 @@ const Person: React.FC<PersonProps> = ({
<Card title="标签" className={styles.profileCard}>
<div className={styles.tagsContainer}>
{/* 渲染所有可用标签,选中的排在前面 */}
{[...new Set([...selectedTags, ...allAvailableTags])].map((tag, index) => {
const isSelected = selectedTags.includes(tag);
return (
<Tag
key={index}
color={isSelected ? "blue" : "default"}
style={{
cursor: 'pointer',
border: isSelected ? '1px solid #1890ff' : '1px solid #d9d9d9',
backgroundColor: isSelected ? '#e6f7ff' : '#fafafa'
}}
onClick={() => handleTagToggle(tag)}
>
{tag}
</Tag>
);
})}
{[...new Set([...selectedTags, ...allAvailableTags])].map(
(tag, index) => {
const isSelected = selectedTags.includes(tag);
return (
<Tag
key={index}
color={isSelected ? "blue" : "default"}
style={{
cursor: "pointer",
border: isSelected
? "1px solid #1890ff"
: "1px solid #d9d9d9",
backgroundColor: isSelected ? "#e6f7ff" : "#fafafa",
}}
onClick={() => handleTagToggle(tag)}
>
{tag}
</Tag>
);
},
)}
{allAvailableTags.length === 0 && (
<span style={{ color: '#999', fontSize: '12px' }}></span>
<span style={{ color: "#999", fontSize: "12px" }}>
</span>
)}
</div>
</Card>

View File

@@ -54,6 +54,10 @@ export const useCkChatStore = createPersistStore<CkChatState>(
const state = useCkChatStore.getState();
return state.kfUserList.find(item => item.id === state.kfSelected);
},
getKfUserInfo: (wechatAccountId: number) => {
const state = useCkChatStore.getState();
return state.kfUserList.find(item => item.id === wechatAccountId);
},
// 删除控制终端用户
deleteCtrlUser: (userId: number) => {
@@ -213,3 +217,7 @@ export const asyncKfSelected = (data: number) =>
useCkChatStore.getState().asyncKfSelected(data);
export const asyncWeChatGroup = (data: weChatGroup[]) =>
useCkChatStore.getState().asyncWeChatGroup(data);
export const getKfSelectedUser = () =>
useCkChatStore.getState().getKfSelectedUser();
export const getKfUserInfo = (wechatAccountId: number) =>
useCkChatStore.getState().getKfUserInfo(wechatAccountId);