|
|
@ -20,7 +20,7 @@ |
|
|
class="color-block" |
|
|
class="color-block" |
|
|
@click="toggleCategory(item.key)" |
|
|
@click="toggleCategory(item.key)" |
|
|
></div> |
|
|
></div> |
|
|
<span>{{ item.label }}</span> |
|
|
<span style=" font-size: 12px;color: rgb(0, 0, 0);font-weight: 600;">{{ item.label }}</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</header> |
|
|
</header> |
|
|
@ -187,8 +187,12 @@ export default { |
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
beforeUnmount() { |
|
|
beforeUnmount() { |
|
|
this._graph.destroy() |
|
|
if (this._graph!=null){ |
|
|
this._graph = null; |
|
|
this._graph.stopLayout(); |
|
|
|
|
|
this.clearGraphState(); |
|
|
|
|
|
this._graph.destroy() |
|
|
|
|
|
this._graph = null; |
|
|
|
|
|
} |
|
|
window.removeEventListener('resize', this.handleResize); |
|
|
window.removeEventListener('resize', this.handleResize); |
|
|
}, |
|
|
}, |
|
|
watch: { |
|
|
watch: { |
|
|
@ -216,20 +220,23 @@ export default { |
|
|
methods: { |
|
|
methods: { |
|
|
buildCategoryIndex() { |
|
|
buildCategoryIndex() { |
|
|
const index = {}; |
|
|
const index = {}; |
|
|
const nodes = this._graph.getNodeData() // 获取所有节点 |
|
|
if (this._graph!=null){ |
|
|
nodes.forEach(node => { |
|
|
const nodes = this._graph.getNodeData() // 获取所有节点 |
|
|
console.log(node.data.label) |
|
|
nodes.forEach(node => { |
|
|
const category = node.data.label; // 假设 label 是类别 |
|
|
console.log(node.data.label) |
|
|
if(category=='Drug'||category=='Symptom'|| |
|
|
const category = node.data.label; // 假设 label 是类别 |
|
|
category=='Disease'||category=='Check'){ |
|
|
if(category=='Drug'||category=='Symptom'|| |
|
|
if (!index[category]) index[category] = []; |
|
|
category=='Disease'||category=='Check'){ |
|
|
index[category].push(node.id); |
|
|
if (!index[category]) index[category] = []; |
|
|
}else{ |
|
|
index[category].push(node.id); |
|
|
if (!index["Other"]) index["Other"] = []; |
|
|
}else{ |
|
|
index["Other"].push(node.id); |
|
|
if (!index["Other"]) index["Other"] = []; |
|
|
} |
|
|
index["Other"].push(node.id); |
|
|
}); |
|
|
} |
|
|
this.categoryToNodeIds = index; |
|
|
}); |
|
|
|
|
|
this.categoryToNodeIds = index; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
// 切换某个类别的显示状态 |
|
|
// 切换某个类别的显示状态 |
|
|
toggleCategory (key){ |
|
|
toggleCategory (key){ |
|
|
@ -433,207 +440,211 @@ export default { |
|
|
console.log(this.defaultData) |
|
|
console.log(this.defaultData) |
|
|
console.log(this._nodeLabelMap) |
|
|
console.log(this._nodeLabelMap) |
|
|
const container = this.$refs.graphContainer; |
|
|
const container = this.$refs.graphContainer; |
|
|
const width = container.clientWidth || 800; |
|
|
console.log(container) |
|
|
const height = container.clientHeight || 600; |
|
|
if (container!=null){ |
|
|
console.log(width) |
|
|
const width = container.clientWidth || 800; |
|
|
console.log(height) |
|
|
const height = container.clientHeight || 600; |
|
|
const graph = new Graph({ |
|
|
console.log(width) |
|
|
container, |
|
|
console.log(height) |
|
|
width, |
|
|
const graph = new Graph({ |
|
|
height, |
|
|
container, |
|
|
layout: { |
|
|
width, |
|
|
type: 'force', // 力导向布局 |
|
|
height, |
|
|
gravity: 0.3, // 重力系数,控制节点聚集程度 |
|
|
layout: { |
|
|
repulsion: 500, // 排斥力 |
|
|
type: 'force', // 力导向布局 |
|
|
attraction: 20, // 吸引力 |
|
|
gravity: 0.3, // 重力系数,控制节点聚集程度 |
|
|
preventOverlap: true // 防止节点重叠 |
|
|
repulsion: 500, // 排斥力 |
|
|
// type: 'radial', |
|
|
attraction: 20, // 吸引力 |
|
|
// preventOverlap: true, |
|
|
preventOverlap: true // 防止节点重叠 |
|
|
// unitRadius: 200, |
|
|
// type: 'radial', |
|
|
// maxPreventOverlapIteration:100 |
|
|
// preventOverlap: true, |
|
|
// type: 'force-atlas2', |
|
|
// unitRadius: 200, |
|
|
// preventOverlap: true, |
|
|
// maxPreventOverlapIteration:100 |
|
|
// kr: 1000, |
|
|
// type: 'force-atlas2', |
|
|
// center: [250, 250], |
|
|
// preventOverlap: true, |
|
|
// barnesHut:true, |
|
|
// kr: 1000, |
|
|
|
|
|
// center: [250, 250], |
|
|
|
|
|
// barnesHut:true, |
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
behaviors: [ 'zoom-canvas', 'drag-element', |
|
|
|
|
|
'click-select','focus-element', { |
|
|
|
|
|
type: 'hover-activate', |
|
|
|
|
|
degree: 1, |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
type: 'drag-canvas', |
|
|
|
|
|
enable: (event) => event.shiftKey === false, |
|
|
|
|
|
}, |
|
|
}, |
|
|
{ |
|
|
behaviors: [ 'zoom-canvas', 'drag-element', |
|
|
type: 'brush-select', |
|
|
'click-select','focus-element', { |
|
|
}, |
|
|
type: 'hover-activate', |
|
|
], |
|
|
degree: 1, |
|
|
|
|
|
|
|
|
node: { |
|
|
|
|
|
style: { |
|
|
|
|
|
fill: (d) => { |
|
|
|
|
|
const label = d.data?.label; |
|
|
|
|
|
if (label === 'Disease') return '#EF4444'; // 红 |
|
|
|
|
|
if (label === 'Drug') return '#91cc75'; // 绿 |
|
|
|
|
|
if (label === 'Symptom') return '#fac858'; // 橙 |
|
|
|
|
|
if (label === 'Check') return '#59d1d4'; // 橙 |
|
|
|
|
|
return '#336eee'; // 默认灰蓝 |
|
|
|
|
|
}, |
|
|
}, |
|
|
stroke: (d) => { |
|
|
{ |
|
|
const label = d.data?.label; |
|
|
type: 'drag-canvas', |
|
|
if (label === 'Disease') return '#B91C1C'; |
|
|
enable: (event) => event.shiftKey === false, |
|
|
if (label === 'Drug') return '#047857'; |
|
|
|
|
|
if (label === 'Check') return '#40999b'; // 橙 |
|
|
|
|
|
if (label === 'Symptom') return '#B45309'; |
|
|
|
|
|
return '#1D4ED8'; |
|
|
|
|
|
}, |
|
|
}, |
|
|
labelText: (d) => d.data.name, |
|
|
{ |
|
|
labelPlacement: 'center', |
|
|
type: 'brush-select', |
|
|
labelWordWrap: true, |
|
|
|
|
|
labelMaxWidth: '150%', |
|
|
|
|
|
labelMaxLines: 3, |
|
|
|
|
|
labelTextOverflow: 'ellipsis', |
|
|
|
|
|
labelTextAlign: 'center', |
|
|
|
|
|
opacity: 1 |
|
|
|
|
|
}, |
|
|
|
|
|
state: { |
|
|
|
|
|
active: { |
|
|
|
|
|
lineWidth: 2, |
|
|
|
|
|
shadowColor: '#ffffff', |
|
|
|
|
|
shadowBlur: 10, |
|
|
|
|
|
opacity: 1 |
|
|
|
|
|
}, |
|
|
}, |
|
|
inactive: { |
|
|
], |
|
|
opacity: 0.3 |
|
|
|
|
|
}, |
|
|
node: { |
|
|
normal:{ |
|
|
style: { |
|
|
|
|
|
fill: (d) => { |
|
|
|
|
|
const label = d.data?.label; |
|
|
|
|
|
if (label === 'Disease') return '#EF4444'; // 红 |
|
|
|
|
|
if (label === 'Drug') return '#91cc75'; // 绿 |
|
|
|
|
|
if (label === 'Symptom') return '#fac858'; // 橙 |
|
|
|
|
|
if (label === 'Check') return '#59d1d4'; // 橙 |
|
|
|
|
|
return '#336eee'; // 默认灰蓝 |
|
|
|
|
|
}, |
|
|
|
|
|
stroke: (d) => { |
|
|
|
|
|
const label = d.data?.label; |
|
|
|
|
|
if (label === 'Disease') return '#B91C1C'; |
|
|
|
|
|
if (label === 'Drug') return '#047857'; |
|
|
|
|
|
if (label === 'Check') return '#40999b'; // 橙 |
|
|
|
|
|
if (label === 'Symptom') return '#B45309'; |
|
|
|
|
|
return '#1D4ED8'; |
|
|
|
|
|
}, |
|
|
|
|
|
labelText: (d) => d.data.name, |
|
|
|
|
|
labelPlacement: 'center', |
|
|
|
|
|
labelWordWrap: true, |
|
|
|
|
|
labelMaxWidth: '150%', |
|
|
|
|
|
labelMaxLines: 3, |
|
|
|
|
|
labelTextOverflow: 'ellipsis', |
|
|
|
|
|
labelTextAlign: 'center', |
|
|
opacity: 1 |
|
|
opacity: 1 |
|
|
} |
|
|
}, |
|
|
|
|
|
state: { |
|
|
|
|
|
active: { |
|
|
|
|
|
lineWidth: 2, |
|
|
|
|
|
shadowColor: '#ffffff', |
|
|
|
|
|
shadowBlur: 10, |
|
|
|
|
|
opacity: 1 |
|
|
|
|
|
}, |
|
|
|
|
|
inactive: { |
|
|
|
|
|
opacity: 0.3 |
|
|
|
|
|
}, |
|
|
|
|
|
normal:{ |
|
|
|
|
|
opacity: 1 |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
}, |
|
|
|
|
|
edge: { |
|
|
|
|
|
style: { |
|
|
|
|
|
labelText: (d) => d.data.relationship.properties.label, |
|
|
|
|
|
stroke: (d) => { |
|
|
|
|
|
// 获取 target 节点的 label |
|
|
|
|
|
const targetLabel = this._nodeLabelMap.get(d.target); // d.target 是目标节点 ID |
|
|
|
|
|
// 根据 target 节点类型返回对应浅色 |
|
|
|
|
|
if (targetLabel === 'Disease') return 'rgba(239,68,68,0.5)'; |
|
|
|
|
|
if (targetLabel === 'Drug') return 'rgba(145,204,117,0.5)'; |
|
|
|
|
|
if (targetLabel === 'Symptom') return 'rgba(250,200,88,0.5)'; |
|
|
|
|
|
if (targetLabel === 'Check') return 'rgba(89,209,212,0.5)'; // 橙 |
|
|
|
|
|
return 'rgba(51,110,238,0.5)'; // default |
|
|
|
|
|
}, |
|
|
}, |
|
|
// labelFill: (d) => { |
|
|
|
|
|
// // 获取 target 节点的 label |
|
|
|
|
|
// const targetLabel = this._nodeLabelMap.get(d.target); // d.target 是目标节点 ID |
|
|
|
|
|
// // 根据 target 节点类型返回对应浅色 |
|
|
|
|
|
// |
|
|
|
|
|
// if (targetLabel === 'Disease') return '#ff4444'; |
|
|
|
|
|
// if (targetLabel === 'Drug') return '#2f9b70'; |
|
|
|
|
|
// if (targetLabel === 'Symptom') return '#f89775'; |
|
|
|
|
|
// return '#6b91ff'; // default |
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
state: { |
|
|
edge: { |
|
|
selected: { |
|
|
style: { |
|
|
stroke: '#1890FF', |
|
|
labelText: (d) => d.data.relationship.properties.label, |
|
|
lineWidth: 2, |
|
|
stroke: (d) => { |
|
|
}, |
|
|
// 获取 target 节点的 label |
|
|
highlight: { |
|
|
const targetLabel = this._nodeLabelMap.get(d.target); // d.target 是目标节点 ID |
|
|
halo: true, |
|
|
// 根据 target 节点类型返回对应浅色 |
|
|
haloStroke: '#1890FF', |
|
|
if (targetLabel === 'Disease') return 'rgba(239,68,68,0.5)'; |
|
|
haloLineWidth: 6, |
|
|
if (targetLabel === 'Drug') return 'rgba(145,204,117,0.5)'; |
|
|
haloStrokeOpacity: 0.3, |
|
|
if (targetLabel === 'Symptom') return 'rgba(250,200,88,0.5)'; |
|
|
lineWidth: 3, |
|
|
if (targetLabel === 'Check') return 'rgba(89,209,212,0.5)'; // 橙 |
|
|
opacity: 1 |
|
|
return 'rgba(51,110,238,0.5)'; // default |
|
|
|
|
|
}, |
|
|
|
|
|
// labelFill: (d) => { |
|
|
|
|
|
// // 获取 target 节点的 label |
|
|
|
|
|
// const targetLabel = this._nodeLabelMap.get(d.target); // d.target 是目标节点 ID |
|
|
|
|
|
// // 根据 target 节点类型返回对应浅色 |
|
|
|
|
|
// |
|
|
|
|
|
// if (targetLabel === 'Disease') return '#ff4444'; |
|
|
|
|
|
// if (targetLabel === 'Drug') return '#2f9b70'; |
|
|
|
|
|
// if (targetLabel === 'Symptom') return '#f89775'; |
|
|
|
|
|
// return '#6b91ff'; // default |
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
inactive: { |
|
|
state: { |
|
|
opacity: 0.3 |
|
|
selected: { |
|
|
|
|
|
stroke: '#1890FF', |
|
|
|
|
|
lineWidth: 2, |
|
|
|
|
|
}, |
|
|
|
|
|
highlight: { |
|
|
|
|
|
halo: true, |
|
|
|
|
|
haloStroke: '#1890FF', |
|
|
|
|
|
haloLineWidth: 6, |
|
|
|
|
|
haloStrokeOpacity: 0.3, |
|
|
|
|
|
lineWidth: 3, |
|
|
|
|
|
opacity: 1 |
|
|
|
|
|
}, |
|
|
|
|
|
inactive: { |
|
|
|
|
|
opacity: 0.3 |
|
|
|
|
|
}, |
|
|
|
|
|
normal:{ |
|
|
|
|
|
opacity: 1 |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
normal:{ |
|
|
|
|
|
opacity: 1 |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
|
|
|
data:this.defaultData, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
graph.render(); |
|
|
|
|
|
// graph.on('node:pointerover', (evt) => { |
|
|
|
|
|
// const nodeItem = evt.target; // 获取当前鼠标进入的节点元素 |
|
|
|
|
|
// const relatedEdges = graph.getRelatedEdgesData(nodeItem.id); |
|
|
|
|
|
// const relatedEdgeIds = relatedEdges.map(edge => edge.id); |
|
|
|
|
|
// |
|
|
|
|
|
// // 3. 高亮这些边(比如用 'highlight' 状态) |
|
|
|
|
|
// relatedEdgeIds.forEach(edgeId => { |
|
|
|
|
|
// graph.setElementState(edgeId, 'highlight', true); |
|
|
|
|
|
// }); |
|
|
|
|
|
// graph.setElementState(nodeItem.id, 'active',true); |
|
|
|
|
|
// |
|
|
|
|
|
// // 2. 获取邻居节点 ID(去重) |
|
|
|
|
|
// const neighborNodeIds = new Set(); |
|
|
|
|
|
// relatedEdges.forEach(edge => { |
|
|
|
|
|
// if (edge.source !== nodeItem.id) neighborNodeIds.add(edge.source); |
|
|
|
|
|
// if (edge.target !== nodeItem.id) neighborNodeIds.add(edge.target); |
|
|
|
|
|
// }); |
|
|
|
|
|
// |
|
|
|
|
|
// neighborNodeIds.forEach(id => { |
|
|
|
|
|
// graph.setElementState(id, 'active', true); |
|
|
|
|
|
// }); |
|
|
|
|
|
// |
|
|
|
|
|
// graph.getEdgeData().forEach(edge => { |
|
|
|
|
|
// if (!relatedEdgeIds.includes(edge.id)) { |
|
|
|
|
|
// graph.setElementState(edge.id, 'inactive', true); |
|
|
|
|
|
// } |
|
|
|
|
|
// }); |
|
|
|
|
|
// graph.getNodeData().forEach(node => { |
|
|
|
|
|
// if (node.id !== nodeItem.id && !neighborNodeIds.has(node.id)) { |
|
|
|
|
|
// graph.setElementState(node.id, 'inactive',true); |
|
|
|
|
|
// } |
|
|
|
|
|
// }); |
|
|
|
|
|
// }); |
|
|
|
|
|
// graph.on('node:pointerleave', (evt) => { |
|
|
|
|
|
// graph.getEdgeData().forEach(edge => { |
|
|
|
|
|
// graph.setElementState(edge.id, 'highlight', false); |
|
|
|
|
|
// graph.setElementState(edge.id, 'inactive', false); |
|
|
|
|
|
// graph.setElementState(edge.id, 'normal', true); |
|
|
|
|
|
// }); |
|
|
|
|
|
// graph.getNodeData().forEach(node => { |
|
|
|
|
|
// graph.setElementState(node.id, 'active', false); |
|
|
|
|
|
// graph.setElementState(node.id, 'inactive', false); |
|
|
|
|
|
// graph.setElementState(node.id, 'normal', true); |
|
|
|
|
|
// }); |
|
|
|
|
|
// }); |
|
|
|
|
|
graph.on('node:click', (evt) => { |
|
|
|
|
|
const nodeItem = evt.target.id; // 获取当前鼠标进入的节点元素 |
|
|
|
|
|
let node=graph.getNodeData(nodeItem).data |
|
|
|
|
|
let data={ |
|
|
|
|
|
label:node.name, |
|
|
|
|
|
type:node.label |
|
|
|
|
|
} |
|
|
|
|
|
getGraph(data).then(response=>{ |
|
|
|
|
|
console.log(response) |
|
|
|
|
|
this.formatData(response) |
|
|
|
|
|
}); // 等待 Promise 解析 |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this._graph = graph |
|
|
|
|
|
this._graph?.fitView() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
data:this.defaultData, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
graph.render(); |
|
|
|
|
|
// graph.on('node:pointerover', (evt) => { |
|
|
|
|
|
// const nodeItem = evt.target; // 获取当前鼠标进入的节点元素 |
|
|
|
|
|
// const relatedEdges = graph.getRelatedEdgesData(nodeItem.id); |
|
|
|
|
|
// const relatedEdgeIds = relatedEdges.map(edge => edge.id); |
|
|
|
|
|
// |
|
|
|
|
|
// // 3. 高亮这些边(比如用 'highlight' 状态) |
|
|
|
|
|
// relatedEdgeIds.forEach(edgeId => { |
|
|
|
|
|
// graph.setElementState(edgeId, 'highlight', true); |
|
|
|
|
|
// }); |
|
|
|
|
|
// graph.setElementState(nodeItem.id, 'active',true); |
|
|
|
|
|
// |
|
|
|
|
|
// // 2. 获取邻居节点 ID(去重) |
|
|
|
|
|
// const neighborNodeIds = new Set(); |
|
|
|
|
|
// relatedEdges.forEach(edge => { |
|
|
|
|
|
// if (edge.source !== nodeItem.id) neighborNodeIds.add(edge.source); |
|
|
|
|
|
// if (edge.target !== nodeItem.id) neighborNodeIds.add(edge.target); |
|
|
|
|
|
// }); |
|
|
|
|
|
// |
|
|
|
|
|
// neighborNodeIds.forEach(id => { |
|
|
|
|
|
// graph.setElementState(id, 'active', true); |
|
|
|
|
|
// }); |
|
|
|
|
|
// |
|
|
|
|
|
// graph.getEdgeData().forEach(edge => { |
|
|
|
|
|
// if (!relatedEdgeIds.includes(edge.id)) { |
|
|
|
|
|
// graph.setElementState(edge.id, 'inactive', true); |
|
|
|
|
|
// } |
|
|
|
|
|
// }); |
|
|
|
|
|
// graph.getNodeData().forEach(node => { |
|
|
|
|
|
// if (node.id !== nodeItem.id && !neighborNodeIds.has(node.id)) { |
|
|
|
|
|
// graph.setElementState(node.id, 'inactive',true); |
|
|
|
|
|
// } |
|
|
|
|
|
// }); |
|
|
|
|
|
// }); |
|
|
|
|
|
// graph.on('node:pointerleave', (evt) => { |
|
|
|
|
|
// graph.getEdgeData().forEach(edge => { |
|
|
|
|
|
// graph.setElementState(edge.id, 'highlight', false); |
|
|
|
|
|
// graph.setElementState(edge.id, 'inactive', false); |
|
|
|
|
|
// graph.setElementState(edge.id, 'normal', true); |
|
|
|
|
|
// }); |
|
|
|
|
|
// graph.getNodeData().forEach(node => { |
|
|
|
|
|
// graph.setElementState(node.id, 'active', false); |
|
|
|
|
|
// graph.setElementState(node.id, 'inactive', false); |
|
|
|
|
|
// graph.setElementState(node.id, 'normal', true); |
|
|
|
|
|
// }); |
|
|
|
|
|
// }); |
|
|
|
|
|
graph.on('node:click', (evt) => { |
|
|
|
|
|
const nodeItem = evt.target.id; // 获取当前鼠标进入的节点元素 |
|
|
|
|
|
let node=graph.getNodeData(nodeItem).data |
|
|
|
|
|
let data={ |
|
|
|
|
|
label:node.name, |
|
|
|
|
|
type:node.label |
|
|
|
|
|
} |
|
|
|
|
|
getGraph(data).then(response=>{ |
|
|
|
|
|
console.log(response) |
|
|
|
|
|
this.formatData(response) |
|
|
|
|
|
}); // 等待 Promise 解析 |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this._graph = graph |
|
|
|
|
|
this._graph?.fitView() |
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
@ -850,15 +861,15 @@ button:hover { |
|
|
.legend-item { |
|
|
.legend-item { |
|
|
display: flex; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
gap: 5px; |
|
|
gap: 7px; |
|
|
cursor: pointer; |
|
|
cursor: pointer; |
|
|
user-select: none; |
|
|
user-select: none; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.color-block { |
|
|
.color-block { |
|
|
width: 16px; |
|
|
width: 30px; |
|
|
height: 16px; |
|
|
height: 15px; |
|
|
border-radius: 4px; |
|
|
border-radius: 18px; |
|
|
transition: all 0.2s ease; |
|
|
transition: all 0.2s ease; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -885,13 +896,14 @@ button:hover { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.search-container { |
|
|
.search-container { |
|
|
width: 260px; |
|
|
width: 330px; |
|
|
height: 36px; |
|
|
height: 30px; |
|
|
background: #f5f7fa; |
|
|
background: #fff; |
|
|
border-radius: 18px; |
|
|
border-radius: 18px; |
|
|
display: flex; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
padding: 0 15px; |
|
|
padding: 0 15px; |
|
|
|
|
|
box-shadow: 4px 2px 9px 1px rgb(97 99 100 / 19%); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.search-container input { |
|
|
.search-container input { |
|
|
@ -937,6 +949,7 @@ button:hover { |
|
|
border: 1px solid #f0f0f0; |
|
|
border: 1px solid #f0f0f0; |
|
|
border-radius: 12px; |
|
|
border-radius: 12px; |
|
|
overflow: hidden; |
|
|
overflow: hidden; |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.disease-header { |
|
|
.disease-header { |
|
|
@ -945,12 +958,24 @@ button:hover { |
|
|
color: #fff; |
|
|
color: #fff; |
|
|
display: flex; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
justify-content: space-between; |
|
|
|
|
|
padding: 0 15px; |
|
|
padding: 0 15px; |
|
|
|
|
|
justify-content: flex-start; |
|
|
|
|
|
} |
|
|
|
|
|
.d-title{ |
|
|
|
|
|
display: flex; |
|
|
|
|
|
align-items: center; |
|
|
|
|
|
font-size: 13px; |
|
|
|
|
|
} |
|
|
|
|
|
.d-count{ |
|
|
|
|
|
font-size: 9px; |
|
|
|
|
|
background-color: #5989F0; |
|
|
|
|
|
border-radius: 7px; |
|
|
|
|
|
padding: 0px 4px; |
|
|
|
|
|
margin-left: 7px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.d-icon { |
|
|
.d-icon { |
|
|
width: 18px; |
|
|
width: 21px; |
|
|
margin-right: 8px; |
|
|
margin-right: 8px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -970,6 +995,7 @@ button:hover { |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
width: 100%; |
|
|
width: 100%; |
|
|
overflow: hidden; |
|
|
overflow: hidden; |
|
|
|
|
|
font-weight: 500; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.code { |
|
|
.code { |
|
|
@ -985,6 +1011,7 @@ button:hover { |
|
|
white-space: nowrap; |
|
|
white-space: nowrap; |
|
|
text-overflow: ellipsis; |
|
|
text-overflow: ellipsis; |
|
|
text-align: left; |
|
|
text-align: left; |
|
|
|
|
|
font-size: 12px; |
|
|
} |
|
|
} |
|
|
.disease-body{ |
|
|
.disease-body{ |
|
|
width: 360px; |
|
|
width: 360px; |
|
|
|