Andy Lee 74300f24b3
update RadioGroup update value action (#255)
Signed-off-by: Andy Lee <andy.lee@suse.com>
2025-04-17 15:26:07 +08:00

133 lines
3.2 KiB
Vue

<script>
import { LabeledInput } from '@components/Form/LabeledInput';
import LabeledSelect from '@shell/components/form/LabeledSelect';
import RadioGroup from '@components/Form/Radio/RadioGroup';
export default {
emits: ['enabled'],
components: {
LabeledInput,
LabeledSelect,
RadioGroup,
},
props: {
value: {
type: Object,
required: true,
},
model: {
type: Object,
required: true,
},
mode: {
type: String,
default: 'create'
},
disabled: {
type: Boolean,
default: false,
},
},
data() {
return { healthCheckEnabled: !!this.value.port };
},
computed: {
portOptions() {
const ports = this.model?.spec?.listeners || [];
return ports.filter((p) => p.port && p.protocol === 'TCP').map((p) => p.backendPort) || [];
},
},
methods: {
onToggle(value) {
this.$emit('enabled', value);
}
}
};
</script>
<template>
<div>
<div class="row">
<div class="col span-6">
<RadioGroup
v-model:value="healthCheckEnabled"
:mode="mode"
name="healthCheckEnabled"
:labels="[t('generic.disabled'),t('generic.enabled')]"
:options="[false, true]"
:disabled="disabled"
@update:value="onToggle"
/>
</div>
</div>
<div v-if="healthCheckEnabled">
<div class="row mt-10">
<div
v-if="healthCheckEnabled"
class="col span-6"
>
<LabeledSelect
v-model:value="value.port"
:mode="mode"
:options="portOptions"
required
:label="t('harvester.service.healthCheckPort.label')"
:disabled="disabled"
/>
</div>
<div class="col span-6">
<LabeledInput
v-model:value.number="value.successThreshold"
:mode="mode"
type="number"
:label="t('harvester.service.healthCheckSuccessThreshold.label')"
:tooltip="t('harvester.service.healthCheckSuccessThreshold.description')"
:disabled="disabled"
/>
</div>
</div>
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model:value.number="value.failureThreshold"
:mode="mode"
type="number"
:label="t('harvester.service.healthCheckFailureThreshold.label')"
:tooltip="t('harvester.service.healthCheckFailureThreshold.description')"
:disabled="disabled"
/>
</div>
<div class="col span-6">
<LabeledInput
v-model:value.number="value.periodSeconds"
:mode="mode"
type="number"
:label="t('harvester.service.healthCheckPeriod.label')"
:disabled="disabled"
/>
</div>
</div>
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model:value.number="value.timeoutSeconds"
:mode="mode"
type="number"
:label="t('harvester.service.healthCheckTimeout.label')"
:disabled="disabled"
/>
</div>
</div>
</div>
</div>
</template>