feat(ckchat): 添加获取客服用户信息的方法并更新相关引用
添加getKfUserInfo方法用于根据微信账号ID获取客服用户信息 更新Person组件中使用新方法替代原有的kfSelectedUser调用
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user