|
|
|
import { Graph, register, Rect, ExtensionCategory } from '@antv/g6';
|
|
|
|
import { DeviceType, NODE_SIZE } from "./index";
|
|
|
|
|
|
|
|
|
|
|
|
// const typeToIconMap = Object.entries(DeviceType).filter(([key, value]) => typeof value === 'number')
|
|
|
|
// console.log(typeToIconMap)
|
|
|
|
|
|
|
|
export default class UserCardNode extends Rect {
|
|
|
|
get nodeData() {
|
|
|
|
return this.context.graph.getNodeData(this.id);
|
|
|
|
}
|
|
|
|
|
|
|
|
get data() {
|
|
|
|
return this.nodeData.data || {};
|
|
|
|
}
|
|
|
|
|
|
|
|
// 用户名样式
|
|
|
|
|
|
|
|
|
|
|
|
drawNameShape(attributes: any, container: any) {
|
|
|
|
if (!this.data.name) return;
|
|
|
|
const getUsernameStyle = (attributes: any) => {
|
|
|
|
return {
|
|
|
|
x: -14,
|
|
|
|
text: this.data.name || '',
|
|
|
|
// fontSize: 12,
|
|
|
|
width: 20,
|
|
|
|
fill: '#262626',
|
|
|
|
fontWeight: 'bold',
|
|
|
|
textAlign: 'left',
|
|
|
|
textBaseline: 'middle',
|
|
|
|
maxWidth: 80, // 限制最大宽度
|
|
|
|
ellipsis: true, // 超出显示 ...
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
const usernameStyle = getUsernameStyle(attributes);
|
|
|
|
this.upsert('username', 'text', usernameStyle, container);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 头像样式
|
|
|
|
getAvatarStyle(attributes: any) {
|
|
|
|
const [width, height] = this.getSize(attributes);
|
|
|
|
const type = this!.data!.type
|
|
|
|
return {
|
|
|
|
x: -width / 2 + 4,
|
|
|
|
y: -height / 2 + 6,
|
|
|
|
width: 24,
|
|
|
|
height: 24,
|
|
|
|
src: typeToIconMap[type as keyof typeof type] || '',
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
drawAvatarShape(attributes: any, container: any) {
|
|
|
|
if (!this.data.typeString) return;
|
|
|
|
|
|
|
|
const avatarStyle = this.getAvatarStyle(attributes);
|
|
|
|
this.upsert('avatar', 'image', avatarStyle, container);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
render(attributes: any, container: any) {
|
|
|
|
// 渲染基础矩形
|
|
|
|
super.render(attributes, container);
|
|
|
|
|
|
|
|
this.drawAvatarShape(attributes, container);
|
|
|
|
this.drawNameShape(attributes, container);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|