JobStepOne.jsx 5.2 KB

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