in dolphinscheduler-ui/src/views/projects/workflow/definition/components/timing-modal.tsx [79:326]
setup(props, ctx) {
const crontabRef = ref()
const parallelismRef = ref(false)
const { t } = useI18n()
const router: Router = useRouter()
const { timingState } = useForm()
const {
variables,
handleCreateTiming,
handleUpdateTiming,
getWorkerGroups,
getTenantList,
getAlertGroups,
getEnvironmentList,
getPreviewSchedule
} = useModal(timingState, ctx)
const projectCode = Number(router.currentRoute.value.params.projectCode)
const environmentOptions = computed(() =>
variables.environmentList.filter((item: any) =>
item.workerGroups?.includes(timingState.timingForm.workerGroup)
)
)
const projectPreferences = ref({} as any)
const initProjectPreferences = (projectCode: number) => {
queryProjectPreferenceByProjectCode(projectCode).then((result: any) => {
if (result?.preferences && result.state === 1) {
projectPreferences.value = JSON.parse(result.preferences)
}
})
}
const hideModal = () => {
ctx.emit('update:show')
}
const handleTiming = () => {
if (props.type === 'create') {
handleCreateTiming(props.row.code as number)
} else {
handleUpdateTiming(props.row.id)
}
}
const priorityOptions = [
{
value: 'HIGHEST',
label: 'HIGHEST',
color: '#ff0000',
icon: ArrowUpOutlined
},
{
value: 'HIGH',
label: 'HIGH',
color: '#ff0000',
icon: ArrowUpOutlined
},
{
value: 'MEDIUM',
label: 'MEDIUM',
color: '#EA7D24',
icon: ArrowUpOutlined
},
{
value: 'LOW',
label: 'LOW',
color: '#2A8734',
icon: ArrowDownOutlined
},
{
value: 'LOWEST',
label: 'LOWEST',
color: '#2A8734',
icon: ArrowDownOutlined
}
]
const timezoneOptions = () =>
timezoneList.map((item) => ({ label: item, value: item }))
const renderLabel = (option: any) => {
return [
h(
NIcon,
{
style: {
verticalAlign: 'middle',
marginRight: '4px',
marginBottom: '3px'
},
color: option.color
},
{
default: () => h(option.icon)
}
),
option.label
]
}
const updateWorkerGroup = () => {
timingState.timingForm.environmentCode = null
}
const handlePreview = () => {
getPreviewSchedule()
}
const initEnvironment = () => {
timingState.timingForm.environmentCode = null
variables.environmentList.forEach((item) => {
if (props.row.environmentCode === item.value) {
timingState.timingForm.environmentCode = item.value
}
})
}
const initWarningGroup = () => {
timingState.timingForm.warningGroupId = null
variables.alertGroups.forEach((item) => {
if (props.row.warningGroupId === item.value) {
timingState.timingForm.warningGroupId = item.value
}
})
}
const containValueInOptions = (
options: Array<any>,
findingValue: string
): boolean => {
for (const { value } of options) {
if (findingValue === value) {
return true
}
}
return false
}
const restructureTimingForm = (timingForm: any) => {
if (projectPreferences.value?.taskPriority) {
timingForm.workflowInstancePriority =
projectPreferences.value.taskPriority
}
if (projectPreferences.value?.warningType) {
timingForm.warningType = projectPreferences.value.warningType
}
if (projectPreferences.value?.workerGroup) {
if (
containValueInOptions(
variables.workerGroups,
projectPreferences.value.workerGroup
)
) {
timingForm.workerGroup = projectPreferences.value.workerGroup
}
}
if (projectPreferences.value?.tenant) {
if (
containValueInOptions(
variables.tenantList,
projectPreferences.value.tenant
)
) {
timingForm.tenantCode = projectPreferences.value.tenant
}
}
if (
projectPreferences.value?.environmentCode &&
variables?.environmentList
) {
if (
containValueInOptions(
variables.environmentList,
projectPreferences.value.environmentCode
)
) {
timingForm.environmentCode = projectPreferences.value.environmentCode
}
}
if (projectPreferences.value?.alertGroup && variables?.alertGroups) {
if (
containValueInOptions(
variables.alertGroups,
projectPreferences.value.alertGroup
)
) {
timingForm.warningGroupId = projectPreferences.value.alertGroup
}
}
}
const trim = getCurrentInstance()?.appContext.config.globalProperties.trim
onMounted(() => {
getWorkerGroups()
getTenantList()
getAlertGroups()
getEnvironmentList()
initProjectPreferences(projectCode)
})
watch(
() => props.row,
() => {
if (!props.row.crontab) {
restructureTimingForm(timingState.timingForm)
return
}
timingState.timingForm.startEndTime = [
new Date(props.row.startTime),
new Date(props.row.endTime)
]
timingState.timingForm.crontab = props.row.crontab
timingState.timingForm.timezoneId = props.row.timezoneId
timingState.timingForm.failureStrategy = props.row.failureStrategy
timingState.timingForm.warningType = props.row.warningType
timingState.timingForm.workflowInstancePriority =
props.row.workflowInstancePriority
timingState.timingForm.workerGroup = props.row.workerGroup
timingState.timingForm.tenantCode = props.row.tenantCode
initWarningGroup()
initEnvironment()
}
)
return {
t,
crontabRef,
parallelismRef,
priorityOptions,
environmentOptions,
hideModal,
handleTiming,
timezoneOptions,
renderLabel,
updateWorkerGroup,
handlePreview,
...toRefs(variables),
...toRefs(timingState),
...toRefs(props),
trim
}
},