in dolphinscheduler-ui/src/views/projects/preference/use-form.ts [40:160]
export function useForm() {
const router: Router = useRouter()
const { t } = useI18n()
const projectCode = Number(router.currentRoute.value.params.projectCode)
const formRef = ref()
const jsonRef = ref([]) as Ref<IJsonItem[]>
const elementsRef = ref([]) as Ref<IFormItem[]>
const rulesRef = ref({})
const formProps = ref({})
const stateRef = ref(0)
formProps.value = {
labelPlacement: 'left',
labelWidth: 'auto',
size: 'large'
}
const data = reactive({
model: {
taskPriority: 'MEDIUM',
workerGroup: 'default',
environmentCode: null,
failRetryTimes: 0,
failRetryInterval: 1,
cpuQuota: -1,
memoryMax: -1,
timeoutFlag: false,
timeoutNotifyStrategy: ['WARN'],
timeout: 30
} as INodeData
})
const setValues = (initialValues: { [field: string]: any }) => {
Object.assign(data.model, initialValues)
}
const initProjectPreference = async () => {
if (projectCode) {
const result = await queryProjectPreferenceByProjectCode(projectCode)
if (result?.preferences) {
setValues(JSON.parse(result.preferences))
stateRef.value = result.state
}
}
}
onMounted(() => {
initProjectPreference()
})
const handleUpdate = () => {
const requestData = {
projectPreferences: JSON.stringify(data.model)
} as UpdateProjectPreferenceReq
updateProjectPreference(requestData, projectCode).then(() => {
window.$message.success(t('project.preference.success'))
})
}
const handleUpdateState = (value: number) => {
const requestData = {
state: value
} as UpdateProjectPreferenceStateReq
updateProjectPreferenceState(requestData, projectCode).then(() => {
window.$message.success(t('project.preference.success'))
})
}
const preferencesItems: IJsonItem[] = [
Fields.useTaskPriority(),
useTenant(),
Fields.useWorkerGroup(projectCode),
Fields.useEnvironmentName(data.model, true),
...Fields.useFailed(),
useWarningType(),
useAlertGroup(),
...Fields.useResourceLimit()
]
const restructurePreferencesItems = (preferencesItems: any) => {
for (const item of preferencesItems) {
if (item.validate?.required) {
item.validate.required = false
item.span = 12
}
if (item.type === 'select') {
Object.assign(item, {
props: { style: 'width: 250px', clearable: true }
})
} else {
Object.assign(item, { props: { style: 'width: 250px' } })
}
}
return preferencesItems
}
jsonRef.value = restructurePreferencesItems(preferencesItems)
const getElements = () => {
const { rules, elements } = getElementByJson(jsonRef.value, data.model)
elementsRef.value = elements
rulesRef.value = rules
}
getElements()
return {
formRef,
elementsRef,
rulesRef,
model: data.model,
stateRef,
formProps,
t,
handleUpdate,
handleUpdateState
}
}