|
@@ -10,15 +10,19 @@ import {
|
|
|
message,
|
|
|
Divider,
|
|
|
} from 'antd'
|
|
|
-import { UploadOutlined, PlusOutlined } from '@ant-design/icons'
|
|
|
-import React, { useState, Component, useEffect, useRef, props } from 'react'
|
|
|
+import { PlusOutlined } from '@ant-design/icons'
|
|
|
+import React, { useState, useEffect, useRef } from 'react'
|
|
|
import styled from 'styled-components'
|
|
|
import JobStepOne from './JobStepOne'
|
|
|
import JobStepTwo from './JobStepTwo'
|
|
|
import JobStepThree from './JobStepThree'
|
|
|
-import { useNavigate } from 'react-router'
|
|
|
-import bus from '../../../bus.js'
|
|
|
-import { getJobTypes, createJob } from '../services'
|
|
|
+import { useNavigate, useLocation } from 'react-router'
|
|
|
+import {
|
|
|
+ getJobTypes,
|
|
|
+ createJob,
|
|
|
+ getDagInfomation,
|
|
|
+ getJobInfo,
|
|
|
+} from '../services'
|
|
|
|
|
|
const JobCre = styled.div`
|
|
|
padding: 20px;
|
|
@@ -106,8 +110,6 @@ const CreContent = styled.div`
|
|
|
width: 88px;
|
|
|
height: 32px;
|
|
|
margin-left: 7px;
|
|
|
- background-color: #4883fb;
|
|
|
- color: white;
|
|
|
}
|
|
|
}
|
|
|
.JaPySubmit {
|
|
@@ -166,17 +168,13 @@ const layout = {
|
|
|
span: 16,
|
|
|
},
|
|
|
}
|
|
|
-const tailLayout = {
|
|
|
- wrapperCol: {
|
|
|
- offset: 8,
|
|
|
- span: 16,
|
|
|
- },
|
|
|
-}
|
|
|
-export default function JobCreate(props) {
|
|
|
- const [form] = Form.useForm()
|
|
|
+
|
|
|
+export default function JobCreate() {
|
|
|
+ const [WorkTypeForm] = Form.useForm()
|
|
|
const { Step } = Steps
|
|
|
// 路由导航
|
|
|
const navigate = useNavigate()
|
|
|
+ const { state } = useLocation()
|
|
|
// 显示/隐藏配置Ja作业信息模块
|
|
|
const [JaIsShow, setJaIsShow] = useState('none')
|
|
|
|
|
@@ -187,7 +185,7 @@ export default function JobCreate(props) {
|
|
|
const [DagIsShow, setDagIsShow] = useState('none')
|
|
|
|
|
|
// 单选框动态传值
|
|
|
- const [value, setValue] = useState(1)
|
|
|
+ const [radioValue, setRadioValue] = useState(1)
|
|
|
|
|
|
// 步骤数
|
|
|
const [currentStep, setCurrentStep] = useState(0)
|
|
@@ -222,6 +220,28 @@ export default function JobCreate(props) {
|
|
|
|
|
|
const [dagData, setDagData] = useState()
|
|
|
|
|
|
+ const [fileList, setFileList] = useState([])
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ if (state) {
|
|
|
+ fetchJobInfo(state.id)
|
|
|
+ }
|
|
|
+ }, [state])
|
|
|
+
|
|
|
+ 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)
|
|
|
+ ConfigDataForm.setFieldValue('name', data.data.name)
|
|
|
+ ConfigDataForm.setFieldValue('tag', data.data.tag)
|
|
|
+ ConfigDataForm.setFieldValue('dag_url', data.data.dag_url)
|
|
|
+ } else {
|
|
|
+ message.error(data.msg)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//动态改变作业分类的值
|
|
|
const onNameChange = event => {
|
|
|
setTagName(event.target.value)
|
|
@@ -230,7 +250,6 @@ export default function JobCreate(props) {
|
|
|
//添加自定义作业分类
|
|
|
const addTagItem = e => {
|
|
|
if (tagName) {
|
|
|
- console.log(tagName)
|
|
|
e.preventDefault()
|
|
|
setJobTags([...jobTags, tagName])
|
|
|
setTagName('')
|
|
@@ -244,50 +263,45 @@ export default function JobCreate(props) {
|
|
|
|
|
|
// 设置单选框value值
|
|
|
const onChange = e => {
|
|
|
- console.log('radio checked', e.target.value)
|
|
|
- setValue(e.target.value)
|
|
|
+ setRadioValue(e.target.value)
|
|
|
}
|
|
|
|
|
|
//上传文件配置
|
|
|
const UpProps = {
|
|
|
- name: 'file',
|
|
|
- action: '',
|
|
|
- headers: {
|
|
|
- authorization: 'authorization-text',
|
|
|
+ onRemove: file => {
|
|
|
+ const index = fileList.indexOf(file)
|
|
|
+ const newFileList = fileList.slice()
|
|
|
+ newFileList.splice(index, 1)
|
|
|
+ setFileList(newFileList)
|
|
|
},
|
|
|
-
|
|
|
- // 上传文件提交状态
|
|
|
- onChange(info) {
|
|
|
- if (info.file.status !== 'uploading') {
|
|
|
- console.log(info.file, info.fileList)
|
|
|
- }
|
|
|
- if (info.file.status === 'done') {
|
|
|
- message.success(`${info.file.name} file uploaded successfully`)
|
|
|
- } else if (info.file.status === 'error') {
|
|
|
- message.error(`${info.file.name} file upload failed.`)
|
|
|
- }
|
|
|
+ beforeUpload: file => {
|
|
|
+ setFileList([...fileList, file])
|
|
|
+ return false
|
|
|
},
|
|
|
+ maxCount: 1,
|
|
|
+ fileList,
|
|
|
}
|
|
|
|
|
|
//根据作业类型做出判断
|
|
|
const onGenderChange = value => {
|
|
|
+ console.log(value)
|
|
|
if (value === 'java') {
|
|
|
setJaIsShow('block')
|
|
|
setDagIsShow('none')
|
|
|
setPyIsShow('none')
|
|
|
- setCurrentJobType('Java')
|
|
|
+ setCurrentJobType('java')
|
|
|
setCurrentForm(JavaDataForm)
|
|
|
} else if (value === 'python') {
|
|
|
setJaIsShow('none')
|
|
|
setDagIsShow('none')
|
|
|
setPyIsShow('block')
|
|
|
- setCurrentJobType('Python')
|
|
|
+ setCurrentJobType('python')
|
|
|
setCurrentForm(PythonDataForm)
|
|
|
} else if (value === 'DAG') {
|
|
|
setJaIsShow('none')
|
|
|
setDagIsShow('block')
|
|
|
setPyIsShow('none')
|
|
|
- setCurrentJobType('Dag')
|
|
|
+ setCurrentJobType('DAG')
|
|
|
setCurrentForm(ConfigDataForm)
|
|
|
}
|
|
|
}
|
|
@@ -299,16 +313,41 @@ export default function JobCreate(props) {
|
|
|
|
|
|
//提交DAG
|
|
|
const DagSubmit = async () => {
|
|
|
- const data = await createJob({
|
|
|
- ...ConfigDataForm.getFieldValue(),
|
|
|
- script_file: '',
|
|
|
- type: currentJobType,
|
|
|
- dag_uuid: 'test',
|
|
|
- user_id: 'test',
|
|
|
- project_id: 'test',
|
|
|
- image_url: 'test',
|
|
|
- relation_list: [],
|
|
|
- })
|
|
|
+ const res = await getDagInfomation(dagData)
|
|
|
+ if (res.status === 200) {
|
|
|
+ const nodes = res.data.nodes.filter(item => item.op === 'datasource')
|
|
|
+ const relation_list = []
|
|
|
+ nodes.forEach((item, index) => {
|
|
|
+ relation_list.push({
|
|
|
+ type: 'input',
|
|
|
+ datasource_id: InputDataForm.getFieldValue(`datasource${index}`),
|
|
|
+ node_uuid: item.id,
|
|
|
+ table: InputDataForm.getFieldValue(`sourceTable${index}`),
|
|
|
+ })
|
|
|
+ relation_list.push({
|
|
|
+ type: 'output',
|
|
|
+ datasource_id: OutputDataForm.getFieldValue(`datasource${index}`),
|
|
|
+ node_uuid: item.id,
|
|
|
+ table: OutputDataForm.getFieldValue(`sourceTable${index}`),
|
|
|
+ })
|
|
|
+ })
|
|
|
+ const { data } = await createJob({
|
|
|
+ ...ConfigDataForm.getFieldValue(),
|
|
|
+ script_file: '',
|
|
|
+ type: currentJobType,
|
|
|
+ dag_uuid: 'test',
|
|
|
+ user_id: 'test',
|
|
|
+ project_id: 'test',
|
|
|
+ // 镜像
|
|
|
+ image_url: '/test/images/exa',
|
|
|
+ relation_list,
|
|
|
+ })
|
|
|
+ if (data.code === 200) {
|
|
|
+ navigate(-1)
|
|
|
+ } else {
|
|
|
+ message.error(data.msg)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//下一步
|
|
@@ -316,17 +355,13 @@ export default function JobCreate(props) {
|
|
|
currentForm
|
|
|
.validateFields()
|
|
|
.then(() => {
|
|
|
- // finishSubmit()
|
|
|
changeStep(1)
|
|
|
- console.log('Successfully')
|
|
|
})
|
|
|
.catch(err => {
|
|
|
- console.log(err, currentForm.getFieldValue())
|
|
|
message.error('请检查表单数据是否完整')
|
|
|
})
|
|
|
if (currentStep === 2) {
|
|
|
DagSubmit()
|
|
|
- navigate(-1)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -334,7 +369,6 @@ export default function JobCreate(props) {
|
|
|
switch (currentStep) {
|
|
|
case 0:
|
|
|
setCurrentForm(ConfigDataForm)
|
|
|
- console.log(ConfigDataForm.getFieldValue())
|
|
|
break
|
|
|
case 1:
|
|
|
setCurrentForm(InputDataForm)
|
|
@@ -346,12 +380,6 @@ export default function JobCreate(props) {
|
|
|
break
|
|
|
}
|
|
|
getJobType()
|
|
|
- bus.on('DAGSend', data => {
|
|
|
- console.log('-----------09090---------------------')
|
|
|
- console.log(data)
|
|
|
- setDagData(data)
|
|
|
- })
|
|
|
- bus.emit('DAGSend', dagData)
|
|
|
}, [currentStep])
|
|
|
|
|
|
//获取作业类型和分类
|
|
@@ -372,7 +400,6 @@ export default function JobCreate(props) {
|
|
|
}
|
|
|
|
|
|
const finishSubmit = async () => {
|
|
|
- console.log(currentForm.getFieldValue())
|
|
|
const params = {
|
|
|
...currentForm.getFieldValue(),
|
|
|
type: currentJobType,
|
|
@@ -383,29 +410,30 @@ export default function JobCreate(props) {
|
|
|
image_url: 'test',
|
|
|
relation_list: [],
|
|
|
}
|
|
|
- console.log(params)
|
|
|
- await createJob(params)
|
|
|
- navigate(-1)
|
|
|
+ const { data } = await createJob(params)
|
|
|
+ if (data.code === 200) {
|
|
|
+ navigate(-1)
|
|
|
+ } else {
|
|
|
+ message.error(data.msg)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//java or python提交
|
|
|
const JaPySubmit = () => {
|
|
|
- console.log(currentJobType)
|
|
|
const Jay = JavaDataForm.getFieldValue()
|
|
|
currentForm
|
|
|
.validateFields()
|
|
|
.then(() => {
|
|
|
- console.log(currentForm.getFieldValue())
|
|
|
- finishSubmit()
|
|
|
- console.log('Successfully')
|
|
|
+ if (radioValue === 'fromList' || fileList.length > 0) {
|
|
|
+ finishSubmit()
|
|
|
+ } else {
|
|
|
+ message.error('请选择本地文件')
|
|
|
+ }
|
|
|
})
|
|
|
.catch(err => {
|
|
|
message.error('请检查表单数据是否完整')
|
|
|
- console.log(err)
|
|
|
+ console.log('error', err)
|
|
|
})
|
|
|
- // bus.emit('sendDataForm',{
|
|
|
- // Jay,
|
|
|
- // })
|
|
|
}
|
|
|
const cancel = () => {
|
|
|
navigate(-1)
|
|
@@ -420,10 +448,9 @@ export default function JobCreate(props) {
|
|
|
</div>
|
|
|
|
|
|
{/* 作业类型选择 */}
|
|
|
- <Form {...layout} form={form} name="control-hooks">
|
|
|
+ <Form {...layout} form={WorkTypeForm} name="control-hooks">
|
|
|
<FormItem
|
|
|
- name="type
|
|
|
- "
|
|
|
+ name="type"
|
|
|
label="选择作业类型"
|
|
|
rules={[
|
|
|
{
|
|
@@ -433,7 +460,7 @@ export default function JobCreate(props) {
|
|
|
<Select
|
|
|
placeholder="请选择作业类型..."
|
|
|
onSelect={onGenderChange}
|
|
|
- value={value}
|
|
|
+ value={radioValue}
|
|
|
options={jobTypeOptions}
|
|
|
/>
|
|
|
</FormItem>
|
|
@@ -453,14 +480,21 @@ export default function JobCreate(props) {
|
|
|
{/* 配置Dag作业信息 */}
|
|
|
|
|
|
{/* 第一步 */}
|
|
|
- {currentStep === 0 && <JobStepOne ConfigDataForm={ConfigDataForm} />}
|
|
|
+ {currentStep === 0 && (
|
|
|
+ <JobStepOne
|
|
|
+ ConfigDataForm={ConfigDataForm}
|
|
|
+ SelectDag={val => setDagData(val)}
|
|
|
+ />
|
|
|
+ )}
|
|
|
|
|
|
{/* 第二步 */}
|
|
|
- {currentStep === 1 && <JobStepTwo InputDataForm={InputDataForm} />}
|
|
|
+ {currentStep === 1 && (
|
|
|
+ <JobStepTwo InputDataForm={InputDataForm} dagData={dagData} />
|
|
|
+ )}
|
|
|
|
|
|
{/* 第三步 */}
|
|
|
{currentStep === 2 && (
|
|
|
- <JobStepThree OutputDataForm={OutputDataForm} />
|
|
|
+ <JobStepThree OutputDataForm={OutputDataForm} dagData={dagData} />
|
|
|
)}
|
|
|
|
|
|
<Space style={{ margin: '20px' }}>
|
|
@@ -579,14 +613,14 @@ export default function JobCreate(props) {
|
|
|
message: '请选择配置执行的Java脚本',
|
|
|
},
|
|
|
]}>
|
|
|
- <RadioGroup onChange={onChange} value={value}>
|
|
|
+ <RadioGroup onChange={onChange} value={radioValue}>
|
|
|
<Space direction="vertical" className="jsSel">
|
|
|
<Radio value={'fromList'}>
|
|
|
<Select
|
|
|
placeholder="在工作目录中选择"
|
|
|
allowClear
|
|
|
className="javaSelect"
|
|
|
- disabled={value === 'fromList' ? false : true}>
|
|
|
+ disabled={radioValue === 'fromList' ? false : true}>
|
|
|
<Option value="/test/scripts/example">
|
|
|
/test/scripts/example
|
|
|
</Option>
|
|
@@ -596,7 +630,8 @@ export default function JobCreate(props) {
|
|
|
<Radio value={'fromLocal'}>
|
|
|
<Upload {...UpProps}>
|
|
|
<Button
|
|
|
- disabled={value === 'fromLocal' ? false : true}
|
|
|
+ disabled={radioValue === 'fromLocal' ? false : true}
|
|
|
+ type="primary"
|
|
|
className="upButton">
|
|
|
本地上传
|
|
|
</Button>
|
|
@@ -701,20 +736,20 @@ export default function JobCreate(props) {
|
|
|
</Select>
|
|
|
</FormItem>
|
|
|
|
|
|
- {/* 选择执行的Java脚本 */}
|
|
|
+ {/* 选择执行的Python脚本 */}
|
|
|
<FormItem
|
|
|
className="mirrorLeft choseJa script_file"
|
|
|
- label="配置执行的Java脚本"
|
|
|
+ label="配置执行的Python脚本"
|
|
|
name="script_file"
|
|
|
rules={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请配置执行的Java脚本',
|
|
|
+ message: '请配置执行的Python脚本',
|
|
|
},
|
|
|
]}>
|
|
|
<RadioGroup
|
|
|
onChange={onChange}
|
|
|
- value={value}
|
|
|
+ value={radioValue}
|
|
|
className="PyScript_file">
|
|
|
<Space direction="vertical">
|
|
|
<Radio value={'fromList'}>
|
|
@@ -722,7 +757,7 @@ export default function JobCreate(props) {
|
|
|
placeholder="在工作目录中选择"
|
|
|
allowClear
|
|
|
className="javaSelect"
|
|
|
- disabled={value === 'fromList' ? false : true}>
|
|
|
+ disabled={radioValue === 'fromList' ? false : true}>
|
|
|
<Option value="test">test</Option>
|
|
|
</Select>
|
|
|
</Radio>
|
|
@@ -730,7 +765,8 @@ export default function JobCreate(props) {
|
|
|
<Upload {...UpProps}>
|
|
|
<Button
|
|
|
className="upButton"
|
|
|
- disabled={value === 'fromLocal' ? false : true}>
|
|
|
+ type="primary"
|
|
|
+ disabled={radioValue === 'fromLocal' ? false : true}>
|
|
|
本地上传
|
|
|
</Button>
|
|
|
</Upload>
|