JobStepOne.jsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import { Button, Form, Input, Select, Space, Divider, message } from 'antd'
  2. import { DeleteOutlined, PlusOutlined } from '@ant-design/icons'
  3. import React, { useState, useEffect, useRef } from 'react'
  4. import { getJobTypes, getDagFile, deleteTag } from '../services'
  5. const { Option } = Select
  6. const FormItem = Form.Item
  7. const layout = {
  8. labelCol: {
  9. span: 8,
  10. },
  11. wrapperCol: {
  12. span: 16,
  13. },
  14. }
  15. export default function JobStepOne({ ConfigDataForm, SelectDag }) {
  16. const JobTagInputRef = useRef(null)
  17. //自定义作业标签名称
  18. const [tagName, setTagName] = useState('')
  19. //作业标签
  20. const [jobTags, setJobTags] = useState([])
  21. const [dags, setDags] = useState([])
  22. useEffect(() => {
  23. const DJName = ConfigDataForm.getFieldValue('DagJobName')
  24. if (DJName) {
  25. ConfigDataForm.setFieldValue('DagJobName', DJName)
  26. }
  27. getJobTag()
  28. getDags()
  29. }, [])
  30. //获取作业标签
  31. const getJobTag = async () => {
  32. const JobTags = await getJobTypes('作业标签')
  33. if (JobTags.data.code === 200) {
  34. setJobTags(JobTags.data.data)
  35. }
  36. }
  37. //获取DAG
  38. const getDags = async () => {
  39. const params = {
  40. project_id: 'test',
  41. user_id: 'test',
  42. }
  43. const data = await getDagFile(params)
  44. setDags(data.data.data)
  45. }
  46. const onNameChange = event => {
  47. setTagName(event.target.value)
  48. }
  49. //添加自定义作业标签
  50. const addTagItem = e => {
  51. if (tagName) {
  52. e.preventDefault()
  53. if (!jobTags.find(item => item === tagName)) {
  54. setJobTags([...jobTags, tagName])
  55. ConfigDataForm.setFieldValue('tag', tagName)
  56. setTagName('')
  57. setTimeout(() => {
  58. JobTagInputRef.current?.focus()
  59. }, 0)
  60. } else {
  61. message.error('存在同名标签')
  62. }
  63. } else {
  64. message.error('请输入自定义作业标签名称')
  65. }
  66. }
  67. const onDeleteTag = async val => {
  68. const { data } = await deleteTag({ type: '作业标签', val })
  69. if (data.code === 200) {
  70. ConfigDataForm.setFieldValue('tag', null)
  71. message.success('删除成功')
  72. getJobTag()
  73. } else {
  74. message.error(data.msg)
  75. }
  76. }
  77. return (
  78. <>
  79. <Form {...layout} form={ConfigDataForm} name="control-hooks">
  80. <FormItem
  81. name="name"
  82. label="作业名称"
  83. rules={[
  84. {
  85. required: true,
  86. },
  87. ]}>
  88. <Input
  89. placeholder="请输入作业名称..."
  90. allowClear
  91. // onChange={}
  92. ></Input>
  93. </FormItem>
  94. {/* 作业标签选择 */}
  95. <FormItem
  96. name="tag"
  97. label="作业标签"
  98. rules={[
  99. {
  100. required: true,
  101. },
  102. ]}>
  103. <Select
  104. placeholder="请选择作业标签..."
  105. allowClear
  106. optionLabelProp="label"
  107. dropdownRender={menu => (
  108. <>
  109. {menu}
  110. <Divider
  111. style={{
  112. margin: '8px 0',
  113. }}
  114. />
  115. <Space
  116. style={{
  117. padding: '0 8px 4px',
  118. }}>
  119. <Input
  120. placeholder="添加作业标签"
  121. ref={JobTagInputRef}
  122. value={tagName}
  123. onChange={onNameChange}
  124. />
  125. <Button
  126. type="text"
  127. icon={<PlusOutlined />}
  128. onClick={addTagItem}>
  129. 添加分类
  130. </Button>
  131. </Space>
  132. </>
  133. )}>
  134. {jobTags.map(item => (
  135. <Option key={item}>
  136. <Space>
  137. <DeleteOutlined onClick={() => onDeleteTag(item)} />
  138. <span>{item}</span>
  139. </Space>
  140. </Option>
  141. ))}
  142. </Select>
  143. </FormItem>
  144. {/* 选择执行镜像 */}
  145. <FormItem
  146. className="mirrorLeft"
  147. name="dag_url"
  148. label="选择DAG算子"
  149. rules={[
  150. {
  151. required: true,
  152. message: '请选择DAG算子',
  153. },
  154. ]}>
  155. <Select
  156. placeholder="请选择DAG算子"
  157. allowClear
  158. onSelect={val => SelectDag(val)}>
  159. {dags.map(item => (
  160. <Option key={item}>{item}</Option>
  161. ))}
  162. </Select>
  163. </FormItem>
  164. </Form>
  165. </>
  166. )
  167. }