1616 mandatory
1717 @update:model-value =" nodeTab = ($event.split('|') as ['masters' | 'workers', number])"
1818 >
19- <DefineNodeTab # =" { text, value, active }" >
19+ <DefineNodeTab # =" { text, value, active, deactive }" >
2020 <v-tab
2121 :value =" value"
2222 :text =" text"
23- :style =" { borderRadius: '0 4px 4px 0 !important', backgroundColor: active ? 'rgba(var(--v-theme-success), 0.12)' : nodeTab.join('|') === value ? 'rgba(var(--v-theme-primary), 0.12)' : undefined }"
24- :class =" { 'text-success': active }"
23+ :style =" { borderRadius: '0 !important', backgroundColor: deactive ? 'rgba(var(--v-theme-error), 0.12)' : active ? 'rgba(var(--v-theme-success), 0.12)' : nodeTab.join('|') === value ? 'rgba(var(--v-theme-primary), 0.12)' : undefined }"
24+ :class =" { 'text-success': active, 'text-error': deactive }"
2525 />
2626 </DefineNodeTab >
2727
2828 <ReuseNodeTab
2929 v-for =" (node, index) in cluster.masters"
3030 :key =" node.id"
31- :text =" `${node.name} (${node.type})`"
31+ :text =" `${node.name} (${node.type})${node.node ? ` [${node.node.id}]` : ''} `"
3232 :value =" `masters|${index}`"
3333 :loading =" loadingNode && nodeTab.join('|') === `masters|${index}`"
3434 :disabled =" loadingNode && nodeTab.join('|') !== `masters|${index}`"
35- :active =" !!node.nodeId"
35+ :active =" !!node.node && node.node.valid"
36+ :deactive =" !!node.node && !node.node.valid"
3637 />
3738
3839 <ReuseNodeTab
3940 v-for =" (node, index) in cluster.workers"
4041 :key =" node.id"
41- :text =" `${node.name} (${node.type})`"
42+ :text =" `${node.name} (${node.type})${node.node ? ` [${node.node.id}]` : ''} `"
4243 :value =" `workers|${index}`"
4344 :loading =" loadingNode && nodeTab.join('|') === `workers|${index}`"
4445 :disabled =" loadingNode && nodeTab.join('|') !== `workers|${index}`"
45- :active =" !!node.nodeId"
46+ :active =" !!node.node && node.node.valid"
47+ :deactive =" !!node.node && !node.node.valid"
4648 />
4749 </v-tabs >
4850
4951 <div v-if =" cluster[nodeTab[0]][nodeTab[1]]" class =" flex-grow-1" >
5052 <PlaceVMsNode
5153 v-model =" cluster[nodeTab[0]][nodeTab[1]]!"
52- :all -nodes =" _nodes "
54+ :picked -nodes =" pickedNodes "
5355 :nodes =" nodes"
5456 @reserve =" onReserveNode"
55- @pick =" $props.cluster[nodeTab[0]][nodeTab[1]]!.nodeId = $event"
57+ @pick =" $props.cluster[nodeTab[0]][nodeTab[1]]!.node = $event"
5658 />
5759 </div >
5860 </div >
@@ -65,7 +67,7 @@ import type { HandlersNodesWithDiscount, ListRentableNodes200Response } from "~/
6567const props = defineProps <{ cluster: ClusterForm }>()
6668
6769const [DefineNodeTab, ReuseNodeTab] = createReusableTemplate ({
68- props: { text: String , value: String , active: Boolean },
70+ props: { text: String , value: String , active: Boolean , deactive: Boolean },
6971})
7072
7173const { loadingNode } = inject (NodePickCtxKey )!
@@ -101,11 +103,15 @@ function onReserveNode(nodeId: number): void {
101103 _nodes .value = _nodes .value .map (n => n .nodeId === nodeId ? { ... n , rented: true } : n )
102104}
103105
106+ const pickedNodes = computed (() => {
107+ return props .cluster .masters .concat (props .cluster .workers ).map (n => n .node ?.id ).filter (v => !! v ) as number []
108+ })
104109const nodes = computed (() => {
105- const pickedNodes = props .cluster .masters .concat (props .cluster .workers ).map (n => n .nodeId )
110+ // const pickedNodes = props.cluster.masters.concat(props.cluster.workers).map(n => n.nodeId)
106111 return _nodes .value .filter ((n ) => {
107112 const regionFilter = ! props .cluster .region || n .location ?.region === props .cluster .region
108- return regionFilter && ! pickedNodes .includes (n .nodeId ! )
113+ // return regionFilter && !pickedNodes.includes(n.nodeId!)
114+ return regionFilter
109115 })
110116})
111117 </script >
0 commit comments