|
@@ -10,7 +10,7 @@ import {
|
|
|
message,
|
|
|
Divider,
|
|
|
} from 'antd'
|
|
|
-import { PlusOutlined } from '@ant-design/icons'
|
|
|
+import { PlusOutlined, DeleteOutlined } from '@ant-design/icons'
|
|
|
import React, { useState, useEffect, useRef } from 'react'
|
|
|
import styled from 'styled-components'
|
|
|
import JobStepOne from './JobStepOne'
|
|
@@ -22,6 +22,8 @@ import {
|
|
|
createJob,
|
|
|
getDagInfomation,
|
|
|
getJobInfo,
|
|
|
+ deleteTag,
|
|
|
+ updateJobInfo,
|
|
|
} from '../services'
|
|
|
|
|
|
const JobCre = styled.div`
|
|
@@ -185,15 +187,18 @@ export default function JobCreate() {
|
|
|
const [DagIsShow, setDagIsShow] = useState('none')
|
|
|
|
|
|
// 单选框动态传值
|
|
|
- const [radioValue, setRadioValue] = useState(1)
|
|
|
+ const [radioValue, setRadioValue] = useState(null)
|
|
|
+
|
|
|
+ // 脚本路径
|
|
|
+ const [scriptFile, setSriptFile] = useState(null)
|
|
|
|
|
|
// 步骤数
|
|
|
const [currentStep, setCurrentStep] = useState(0)
|
|
|
|
|
|
//作业类型
|
|
|
- const [jobTypeOptions, setJobTypeOptions] = useState()
|
|
|
+ const [jobTypeOptions, setJobTypeOptions] = useState([])
|
|
|
|
|
|
- //作业分类
|
|
|
+ //作业标签
|
|
|
const [jobTags, setJobTags] = useState([])
|
|
|
|
|
|
//dag第一步表单数据
|
|
@@ -218,7 +223,7 @@ export default function JobCreate() {
|
|
|
|
|
|
const [tagName, setTagName] = useState('')
|
|
|
|
|
|
- const [dagData, setDagData] = useState()
|
|
|
+ const [dagData, setDagData] = useState(null)
|
|
|
|
|
|
const [fileList, setFileList] = useState([])
|
|
|
|
|
@@ -230,27 +235,60 @@ export default function JobCreate() {
|
|
|
|
|
|
const fetchJobInfo = async id => {
|
|
|
const { data } = await getJobInfo(id)
|
|
|
- console.log('%%%%%', data)
|
|
|
if (data.code === 200) {
|
|
|
WorkTypeForm.setFieldValue('type', data.data.type)
|
|
|
onGenderChange(data.data.type)
|
|
|
switch (data.data.type) {
|
|
|
- case 'python':
|
|
|
+ case 'Python':
|
|
|
PythonDataForm.setFieldsValue({
|
|
|
name: data.data.name,
|
|
|
tag: data.data.tag,
|
|
|
image_url: data.data.image_url,
|
|
|
+ script_file: 'fromList',
|
|
|
})
|
|
|
+ setRadioValue('fromList')
|
|
|
+ setSriptFile(data.data.script_file)
|
|
|
break
|
|
|
- case 'java':
|
|
|
- JavaDataForm.setFieldsValue()
|
|
|
+ case 'Java':
|
|
|
+ JavaDataForm.setFieldsValue({
|
|
|
+ name: data.data.name,
|
|
|
+ tag: data.data.tag,
|
|
|
+ image_url: data.data.image_url,
|
|
|
+ script_file: 'fromList',
|
|
|
+ })
|
|
|
+ setRadioValue('fromList')
|
|
|
+ setSriptFile(data.data.script_file)
|
|
|
break
|
|
|
- case 'DAG':
|
|
|
+ case 'Dag':
|
|
|
ConfigDataForm.setFieldsValue({
|
|
|
name: data.data.name,
|
|
|
tag: data.data.tag,
|
|
|
dag_url: data.data.dag_url,
|
|
|
})
|
|
|
+ setDagData(data.data.dag_url)
|
|
|
+ const inputs = []
|
|
|
+ const outputs = []
|
|
|
+ data.data.hd_relation.forEach(item => {
|
|
|
+ if (item.type === 'input') {
|
|
|
+ inputs.push(item)
|
|
|
+ } else {
|
|
|
+ outputs.push(item)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ inputs.forEach((item, index) => {
|
|
|
+ InputDataForm.setFieldValue(
|
|
|
+ `datasource${index}`,
|
|
|
+ item.datasource_id
|
|
|
+ )
|
|
|
+ InputDataForm.setFieldValue(`sourceTable${index}`, item.table)
|
|
|
+ })
|
|
|
+ outputs.forEach((item, index) => {
|
|
|
+ OutputDataForm.setFieldValue(
|
|
|
+ `datasource${index}`,
|
|
|
+ item.datasource_id
|
|
|
+ )
|
|
|
+ OutputDataForm.setFieldValue(`sourceTable${index}`, item.table)
|
|
|
+ })
|
|
|
break
|
|
|
default:
|
|
|
break
|
|
@@ -260,22 +298,27 @@ export default function JobCreate() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //动态改变作业分类的值
|
|
|
+ //动态改变作业标签的值
|
|
|
const onNameChange = event => {
|
|
|
setTagName(event.target.value)
|
|
|
}
|
|
|
|
|
|
- //添加自定义作业分类
|
|
|
+ //添加自定义作业标签
|
|
|
const addTagItem = e => {
|
|
|
if (tagName) {
|
|
|
e.preventDefault()
|
|
|
- setJobTags([...jobTags, tagName])
|
|
|
- setTagName('')
|
|
|
- setTimeout(() => {
|
|
|
- JobTagInputRef.current?.focus()
|
|
|
- }, 0)
|
|
|
+ if (!jobTags.find(item => item === tagName)) {
|
|
|
+ setJobTags([...jobTags, tagName])
|
|
|
+ currentForm.setFieldValue('tag', tagName)
|
|
|
+ setTagName('')
|
|
|
+ setTimeout(() => {
|
|
|
+ JobTagInputRef.current?.focus()
|
|
|
+ }, 0)
|
|
|
+ } else {
|
|
|
+ message.error('存在同名标签')
|
|
|
+ }
|
|
|
} else {
|
|
|
- message.error('请输入自定义作业分类名称')
|
|
|
+ message.error('请输入自定义作业标签名称')
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -302,24 +345,23 @@ export default function JobCreate() {
|
|
|
|
|
|
//根据作业类型做出判断
|
|
|
const onGenderChange = value => {
|
|
|
- console.log(value)
|
|
|
- if (value === 'java') {
|
|
|
+ if (value === 'Java') {
|
|
|
setJaIsShow('block')
|
|
|
setDagIsShow('none')
|
|
|
setPyIsShow('none')
|
|
|
- setCurrentJobType('java')
|
|
|
+ setCurrentJobType('Java')
|
|
|
setCurrentForm(JavaDataForm)
|
|
|
- } else if (value === 'python') {
|
|
|
+ } else if (value === 'Python') {
|
|
|
setJaIsShow('none')
|
|
|
setDagIsShow('none')
|
|
|
setPyIsShow('block')
|
|
|
- setCurrentJobType('python')
|
|
|
+ setCurrentJobType('Python')
|
|
|
setCurrentForm(PythonDataForm)
|
|
|
- } else if (value === 'DAG') {
|
|
|
+ } else if (value === 'Dag') {
|
|
|
setJaIsShow('none')
|
|
|
setDagIsShow('block')
|
|
|
setPyIsShow('none')
|
|
|
- setCurrentJobType('DAG')
|
|
|
+ setCurrentJobType('Dag')
|
|
|
setCurrentForm(ConfigDataForm)
|
|
|
}
|
|
|
}
|
|
@@ -349,7 +391,7 @@ export default function JobCreate() {
|
|
|
table: OutputDataForm.getFieldValue(`sourceTable${index}`),
|
|
|
})
|
|
|
})
|
|
|
- const { data } = await createJob({
|
|
|
+ const params = {
|
|
|
...ConfigDataForm.getFieldValue(),
|
|
|
script_file: '',
|
|
|
type: currentJobType,
|
|
@@ -359,11 +401,17 @@ export default function JobCreate() {
|
|
|
// 镜像
|
|
|
image_url: '/test/images/exa',
|
|
|
relation_list,
|
|
|
- })
|
|
|
- if (data.code === 200) {
|
|
|
+ }
|
|
|
+ let resp = {}
|
|
|
+ if (state.id) {
|
|
|
+ resp = await updateJobInfo(state.id, params)
|
|
|
+ } else {
|
|
|
+ resp = await createJob(params)
|
|
|
+ }
|
|
|
+ if (resp.data.code === 200) {
|
|
|
navigate(-1)
|
|
|
} else {
|
|
|
- message.error(data.msg)
|
|
|
+ message.error(resp.data.msg)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -398,12 +446,12 @@ export default function JobCreate() {
|
|
|
break
|
|
|
}
|
|
|
getJobType()
|
|
|
+ getJobTag()
|
|
|
}, [currentStep])
|
|
|
|
|
|
//获取作业类型和分类
|
|
|
const getJobType = async () => {
|
|
|
const JobTypes = await getJobTypes('作业类型')
|
|
|
- const JobTags = await getJobTypes('作业分类')
|
|
|
if (JobTypes.data.length !== 0) {
|
|
|
setJobTypeOptions(
|
|
|
JobTypes.data.data.map(item => {
|
|
@@ -413,26 +461,39 @@ export default function JobCreate() {
|
|
|
}
|
|
|
})
|
|
|
)
|
|
|
- setJobTags(JobTags.data.data)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const getJobTag = async () => {
|
|
|
+ const { data } = await getJobTypes('作业标签')
|
|
|
+ if (data.code === 200) {
|
|
|
+ setJobTags(data.data)
|
|
|
+ } else {
|
|
|
+ message.error(data.msg)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
const finishSubmit = async () => {
|
|
|
const params = {
|
|
|
...currentForm.getFieldValue(),
|
|
|
+ script_file: scriptFile,
|
|
|
type: currentJobType,
|
|
|
dag_uuid: 'test',
|
|
|
user_id: 'test',
|
|
|
project_id: 'test',
|
|
|
dag_url: 'test',
|
|
|
- image_url: 'test',
|
|
|
relation_list: [],
|
|
|
}
|
|
|
- const { data } = await createJob(params)
|
|
|
- if (data.code === 200) {
|
|
|
+ let res = {}
|
|
|
+ if (state.id) {
|
|
|
+ res = await updateJobInfo(state.id, params)
|
|
|
+ } else {
|
|
|
+ res = await createJob(params)
|
|
|
+ }
|
|
|
+ if (res.data.code === 200) {
|
|
|
navigate(-1)
|
|
|
} else {
|
|
|
- message.error(data.msg)
|
|
|
+ message.error(res.data.msg)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -450,12 +511,24 @@ export default function JobCreate() {
|
|
|
})
|
|
|
.catch(err => {
|
|
|
message.error('请检查表单数据是否完整')
|
|
|
- console.log('error', err)
|
|
|
})
|
|
|
}
|
|
|
const cancel = () => {
|
|
|
navigate(-1)
|
|
|
}
|
|
|
+ const onScriptFileChange = val => {
|
|
|
+ setSriptFile(val)
|
|
|
+ }
|
|
|
+ const onDeleteTag = async val => {
|
|
|
+ const { data } = await deleteTag({ type: '作业标签', val })
|
|
|
+ if (data.code === 200) {
|
|
|
+ currentForm.setFieldValue('tag', null)
|
|
|
+ message.success('删除成功')
|
|
|
+ getJobTag()
|
|
|
+ } else {
|
|
|
+ message.error(data.msg)
|
|
|
+ }
|
|
|
+ }
|
|
|
return (
|
|
|
<JobCre>
|
|
|
<CreContent>
|
|
@@ -478,7 +551,6 @@ export default function JobCreate() {
|
|
|
<Select
|
|
|
placeholder="请选择作业类型..."
|
|
|
onSelect={onGenderChange}
|
|
|
- value={radioValue}
|
|
|
options={jobTypeOptions}
|
|
|
/>
|
|
|
</FormItem>
|
|
@@ -554,21 +626,22 @@ export default function JobCreate() {
|
|
|
<Input placeholder="请输入作业名称..." allowClear></Input>
|
|
|
</FormItem>
|
|
|
|
|
|
- {/* 选择作业分类 */}
|
|
|
+ {/* 选择作业标签 */}
|
|
|
<FormItem
|
|
|
shouldUpdate
|
|
|
name="tag"
|
|
|
- label="作业分类"
|
|
|
+ label="作业标签"
|
|
|
className="JobName"
|
|
|
rules={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择作业分类',
|
|
|
+ message: '请选择作业标签',
|
|
|
},
|
|
|
]}>
|
|
|
<Select
|
|
|
- placeholder="请选择作业分类..."
|
|
|
+ placeholder="请选择作业标签..."
|
|
|
allowClear
|
|
|
+ optionLabelProp="label"
|
|
|
dropdownRender={menu => (
|
|
|
<>
|
|
|
{menu}
|
|
@@ -582,7 +655,7 @@ export default function JobCreate() {
|
|
|
padding: '0 8px 4px',
|
|
|
}}>
|
|
|
<Input
|
|
|
- placeholder="添加作业分类"
|
|
|
+ placeholder="添加作业标签"
|
|
|
ref={JobTagInputRef}
|
|
|
value={tagName}
|
|
|
onChange={onNameChange}
|
|
@@ -597,7 +670,12 @@ export default function JobCreate() {
|
|
|
</>
|
|
|
)}>
|
|
|
{jobTags.map(item => (
|
|
|
- <Option key={item}>{item}</Option>
|
|
|
+ <Option key={item}>
|
|
|
+ <Space>
|
|
|
+ <DeleteOutlined onClick={() => onDeleteTag(item)} />
|
|
|
+ <span>{item}</span>
|
|
|
+ </Space>
|
|
|
+ </Option>
|
|
|
))}
|
|
|
</Select>
|
|
|
</FormItem>
|
|
@@ -629,17 +707,17 @@ export default function JobCreate() {
|
|
|
message: '请选择配置执行的Java脚本',
|
|
|
},
|
|
|
]}>
|
|
|
- <RadioGroup onChange={onChange} value={radioValue}>
|
|
|
+ <RadioGroup onChange={onChange}>
|
|
|
<Space direction="vertical" className="jsSel">
|
|
|
<Radio value={'fromList'}>
|
|
|
<Select
|
|
|
placeholder="在工作目录中选择"
|
|
|
allowClear
|
|
|
className="javaSelect"
|
|
|
+ value={scriptFile}
|
|
|
+ onChange={onScriptFileChange}
|
|
|
disabled={radioValue === 'fromList' ? false : true}>
|
|
|
- <Option value="/test/scripts/example">
|
|
|
- /test/scripts/example
|
|
|
- </Option>
|
|
|
+ <Option value="test">test</Option>
|
|
|
</Select>
|
|
|
</Radio>
|
|
|
|
|
@@ -690,20 +768,21 @@ export default function JobCreate() {
|
|
|
]}>
|
|
|
<Input placeholder="请输入作业名称..." allowClear></Input>
|
|
|
</FormItem>
|
|
|
- {/* 选择作业分类 */}
|
|
|
+ {/* 选择作业标签 */}
|
|
|
<FormItem
|
|
|
name="tag"
|
|
|
- label="作业分类"
|
|
|
+ label="作业标签"
|
|
|
className="JobName"
|
|
|
rules={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选则作业分类',
|
|
|
+ message: '请选则作业标签',
|
|
|
},
|
|
|
]}>
|
|
|
<Select
|
|
|
- placeholder="请选择作业分类..."
|
|
|
+ placeholder="请选择作业标签..."
|
|
|
allowClear
|
|
|
+ optionLabelProp="label"
|
|
|
dropdownRender={menu => (
|
|
|
<>
|
|
|
{menu}
|
|
@@ -717,7 +796,7 @@ export default function JobCreate() {
|
|
|
padding: '0 8px 4px',
|
|
|
}}>
|
|
|
<Input
|
|
|
- placeholder="添加作业分类"
|
|
|
+ placeholder="添加作业标签"
|
|
|
ref={JobTagInputRef}
|
|
|
value={tagName}
|
|
|
onChange={onNameChange}
|
|
@@ -732,14 +811,19 @@ export default function JobCreate() {
|
|
|
</>
|
|
|
)}>
|
|
|
{jobTags.map(item => (
|
|
|
- <Option key={item}>{item}</Option>
|
|
|
+ <Option key={item}>
|
|
|
+ <Space>
|
|
|
+ <DeleteOutlined onClick={() => onDeleteTag(item)} />
|
|
|
+ <span>{item}</span>
|
|
|
+ </Space>
|
|
|
+ </Option>
|
|
|
))}
|
|
|
</Select>
|
|
|
</FormItem>
|
|
|
{/* 选择执行镜像 */}
|
|
|
<FormItem
|
|
|
className="mirrorLeft MMir"
|
|
|
- name="image_url "
|
|
|
+ name="image_url"
|
|
|
label="配置执行的镜像"
|
|
|
rules={[
|
|
|
{
|
|
@@ -763,16 +847,15 @@ export default function JobCreate() {
|
|
|
message: '请配置执行的Python脚本',
|
|
|
},
|
|
|
]}>
|
|
|
- <RadioGroup
|
|
|
- onChange={onChange}
|
|
|
- value={radioValue}
|
|
|
- className="PyScript_file">
|
|
|
+ <RadioGroup onChange={onChange} className="PyScript_file">
|
|
|
<Space direction="vertical">
|
|
|
<Radio value={'fromList'}>
|
|
|
<Select
|
|
|
placeholder="在工作目录中选择"
|
|
|
allowClear
|
|
|
className="javaSelect"
|
|
|
+ value={scriptFile}
|
|
|
+ onChange={onScriptFileChange}
|
|
|
disabled={radioValue === 'fromList' ? false : true}>
|
|
|
<Option value="test">test</Option>
|
|
|
</Select>
|