Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
bkunyun
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sunyihao
bkunyun
Commits
2a7b6d6a
Commit
2a7b6d6a
authored
Jun 27, 2022
by
chenshouchao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 提交任务接口联调
parent
fa9375be
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
308 additions
and
176 deletions
+308
-176
package-lock.json
package-lock.json
+0
-0
api_manager.ts
src/api/api_manager.ts
+1
-0
project_api.ts
src/api/project_api.ts
+19
-4
MyInput.tsx
src/components/mui/MyInput.tsx
+0
-0
index.module.css
...ews/Project/ProjectSubmitWork/ConfigForm/index.module.css
+14
-3
index.tsx
src/views/Project/ProjectSubmitWork/ConfigForm/index.tsx
+246
-164
index.tsx
src/views/Project/ProjectSubmitWork/index.tsx
+23
-1
interface.ts
src/views/Project/ProjectSubmitWork/interface.ts
+5
-4
No files found.
package-lock.json
View file @
2a7b6d6a
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/api/api_manager.ts
View file @
2a7b6d6a
...
@@ -34,6 +34,7 @@ const RESTAPI = {
...
@@ -34,6 +34,7 @@ const RESTAPI = {
API_WORKBENCH_WORKFLOWJOB_LIST
:
`
${
BACKEND_API_URI_PREFIX
}
/cpp/workbench/project/workflowjob`
,
//查询工作流任务
API_WORKBENCH_WORKFLOWJOB_LIST
:
`
${
BACKEND_API_URI_PREFIX
}
/cpp/workbench/project/workflowjob`
,
//查询工作流任务
API_WORKBENCH_DEL_WORKFLOWJOB
:
`
${
BACKEND_API_URI_PREFIX
}
/cpp/workflow/job/`
,
//删除工作流任务
API_WORKBENCH_DEL_WORKFLOWJOB
:
`
${
BACKEND_API_URI_PREFIX
}
/cpp/workflow/job/`
,
//删除工作流任务
API_WORKBENCH_CANCEL_WORKFLOWJOB
:
`
${
BACKEND_API_URI_PREFIX
}
/cpp/workflow/cancel`
,
//取消工作流
API_WORKBENCH_CANCEL_WORKFLOWJOB
:
`
${
BACKEND_API_URI_PREFIX
}
/cpp/workflow/cancel`
,
//取消工作流
API_SUBMIT_WORKFLOW
:
`
${
BACKEND_API_URI_PREFIX
}
/cpp/workflow/submit`
,
//提交工作流
};
};
export
default
RESTAPI
;
export
default
RESTAPI
;
src/api/project_api.ts
View file @
2a7b6d6a
...
@@ -202,9 +202,8 @@ const getDataFileDelPackage = (params: getDataFileDelPackageParams) => {
...
@@ -202,9 +202,8 @@ const getDataFileDelPackage = (params: getDataFileDelPackageParams) => {
});
});
};
};
// 点击使用模版,获取模版数据
// 点击使用模版,获取模版数据
const
fetchTemplateConfigInfo
=
(
params
:
{
id
:
string
})
=>
{
const
fetchTemplateConfigInfo
=
(
params
:
{
id
:
string
})
=>
{
return
request
({
return
request
({
url
:
`
${
Api
.
API_FETCH_TEMPLATE_INFO
}
/
${
params
.
id
}
`
,
url
:
`
${
Api
.
API_FETCH_TEMPLATE_INFO
}
/
${
params
.
id
}
`
,
method
:
"get"
,
method
:
"get"
,
...
@@ -212,14 +211,29 @@ const fetchTemplateConfigInfo = (params: {id: string}) => {
...
@@ -212,14 +211,29 @@ const fetchTemplateConfigInfo = (params: {id: string}) => {
};
};
// 点击工作列表,查看工作流详情
// 点击工作列表,查看工作流详情
const
fetchWorkFlowJob
=
(
params
:
{
id
:
string
})
=>
{
const
fetchWorkFlowJob
=
(
params
:
{
id
:
string
})
=>
{
return
request
({
return
request
({
url
:
`
${
Api
.
API_WORK_FLOW_JOB
}
/
${
params
.
id
}
`
,
url
:
`
${
Api
.
API_WORK_FLOW_JOB
}
/
${
params
.
id
}
`
,
method
:
"get"
,
method
:
"get"
,
});
});
};
};
type
submitWorkFlowParams
=
{
name
:
string
;
projectId
:
string
;
specId
:
string
;
outputPath
:
string
;
promotedParameters
:
any
;
};
// 提交工作流
const
submitWorkFlow
=
(
params
:
submitWorkFlowParams
)
=>
{
return
request
({
url
:
Api
.
API_SUBMIT_WORKFLOW
,
method
:
"post"
,
data
:
params
,
});
};
export
{
export
{
current
,
current
,
...
@@ -238,5 +252,6 @@ export {
...
@@ -238,5 +252,6 @@ export {
getDataFileDel
,
getDataFileDel
,
getDataFileDelPackage
,
getDataFileDelPackage
,
fetchTemplateConfigInfo
,
fetchTemplateConfigInfo
,
fetchWorkFlowJob
fetchWorkFlowJob
,
submitWorkFlow
,
};
};
src/components/mui/MyInput.tsx
View file @
2a7b6d6a
src/views/Project/ProjectSubmitWork/ConfigForm/index.module.css
View file @
2a7b6d6a
...
@@ -26,10 +26,10 @@
...
@@ -26,10 +26,10 @@
box-sizing
:
border-box
;
box-sizing
:
border-box
;
position
:
relative
;
position
:
relative
;
}
}
.backgroundTitleTextIcon
{
.backgroundTitleTextIcon
{
visibility
:
hidden
;
visibility
:
hidden
;
}
}
.backgroundTitleTextIconShow
{
.backgroundTitleTextIconShow
{
visibility
:
visible
;
visibility
:
visible
;
}
}
.backgroundTitleText
{
.backgroundTitleText
{
...
@@ -65,6 +65,17 @@
...
@@ -65,6 +65,17 @@
.taskConfigBox
{
.taskConfigBox
{
padding
:
24px
44px
40px
44px
;
padding
:
24px
44px
40px
44px
;
}
}
.flowTitle
{
/* line-height: 22px; */
line-height
:
16px
;
/* margin-bottom: 24px; */
margin
:
3px
0
27px
;
color
:
rgba
(
30
,
38
,
51
,
1
);
font-size
:
14px
;
font-weight
:
600
;
border-left
:
3px
solid
rgba
(
19
,
112
,
255
,
1
);
padding-left
:
3px
;
}
.parameter
{
.parameter
{
margin-bottom
:
20px
;
margin-bottom
:
20px
;
position
:
relative
;
position
:
relative
;
...
@@ -76,7 +87,7 @@
...
@@ -76,7 +87,7 @@
line-height
:
22px
;
line-height
:
22px
;
margin-bottom
:
12px
;
margin-bottom
:
12px
;
}
}
.parameterContent
{
.parameterContent
{
position
:
relative
;
position
:
relative
;
}
}
.parameterDesc
{
.parameterDesc
{
...
...
src/views/Project/ProjectSubmitWork/ConfigForm/index.tsx
View file @
2a7b6d6a
...
@@ -14,11 +14,12 @@ import { getCheckResult } from "../util";
...
@@ -14,11 +14,12 @@ import { getCheckResult } from "../util";
import
fileSelectIcon
from
"@/assets/project/fileSelect.svg"
;
import
fileSelectIcon
from
"@/assets/project/fileSelect.svg"
;
import
questionMark
from
"@/assets/project/questionMark.svg"
;
import
questionMark
from
"@/assets/project/questionMark.svg"
;
import
jobSueIcon
from
"@/assets/project/jobSue.svg"
;
import
jobSueIcon
from
"@/assets/project/jobSue.svg"
;
import
{
IParameter
}
from
"../interface"
;
type
ConfigFormProps
=
{
type
ConfigFormProps
=
{
templateConfigInfo
?:
ITemplateConfig
;
templateConfigInfo
?:
ITemplateConfig
;
setParameter
:
any
;
setParameter
:
any
;
onRef
?:
React
.
Ref
<
any
>
onRef
?:
React
.
Ref
<
any
>
;
};
};
const
ConfigForm
=
(
props
:
ConfigFormProps
)
=>
{
const
ConfigForm
=
(
props
:
ConfigFormProps
)
=>
{
...
@@ -30,20 +31,20 @@ const ConfigForm = (props: ConfigFormProps) => {
...
@@ -30,20 +31,20 @@ const ConfigForm = (props: ConfigFormProps) => {
); // 任务名称
); // 任务名称
const [nameHelp, setNameHelp] = useState({
const [nameHelp, setNameHelp] = useState({
error: false,
error: false,
helperText:
''
helperText:
"",
})
})
;
const [outputPath, setOutputPath] = useState<string>("ProjectData"); // 输出路径
const [outputPath, setOutputPath] = useState<string>("ProjectData"); // 输出路径
const [outputPathHelp, setOutputPathHelp] = useState({
const [outputPathHelp, setOutputPathHelp] = useState({
error: false,
error: false,
helperText:
''
helperText:
"",
})
})
;
const getNameAndPath = () => {
const getNameAndPath = () => {
return {
return {
name,
name,
outputPath,
outputPath,
nameAndOutputPathCheck: !(checkName(name) || checkOutputPath(outputPath)) // 任务名称、输出路径是否通过校验
nameAndOutputPathCheck: !(checkName(name) || checkOutputPath(outputPath))
,
// 任务名称、输出路径是否通过校验
}
}
;
}
}
;
useImperativeHandle(props.onRef, () => {
useImperativeHandle(props.onRef, () => {
return {
return {
...
@@ -51,60 +52,80 @@ const ConfigForm = (props: ConfigFormProps) => {
...
@@ -51,60 +52,80 @@ const ConfigForm = (props: ConfigFormProps) => {
};
};
});
});
const [fileSelectOpen, setFileSelectOpen] = useState(false); // 选择输出路径的弹窗显示控制
const [fileSelectOpen, setFileSelectOpen] = useState(false); // 选择输出路径的弹窗显示控制
const [fileSelectObject, setFileSelectObject] = useState({
taskId: "",
parameterName: "",
});
const onFileSelectConfirm = (path: string) => {
const onFileSelectConfirm = (path: string) => {
setFileSelectOpen(false);
setFileSelectOpen(false);
if (fileSelectObject.taskId) {
setParameter(
`
ProjectData$
{
path
===
"/"
?
""
:
path
}
`,
fileSelectObject.taskId,
fileSelectObject.parameterName
);
} else {
setOutputPath(`
ProjectData$
{
path
===
"/"
?
""
:
path
}
`);
setOutputPath(`
ProjectData$
{
path
===
"/"
?
""
:
path
}
`);
checkOutputPath(`
ProjectData$
{
path
===
"/"
?
""
:
path
}
`)
checkOutputPath(`
ProjectData$
{
path
===
"/"
?
""
:
path
}
`);
}
};
};
const handleFileSelectOnClose = () => {
const handleFileSelectOnClose = () => {
setFileSelectOpen(false);
setFileSelectOpen(false);
};
};
const handleOpenFileSelect = () => {
const handleOpenFileSelect = (
taskId: string = "",
parameterName: string = ""
) => {
setFileSelectObject({
taskId,
parameterName,
});
setFileSelectOpen(true);
setFileSelectOpen(true);
};
};
const handleNameChange = (e: any) => {
const handleNameChange = (e: any) => {
setName(e.target.value);
setName(e.target.value);
checkName(e.target.value)
checkName(e.target.value)
;
};
};
const checkName = (name: string =
'')=>
{
const checkName = (name: string =
"") =>
{
const reg = new RegExp(/^[a-zA-Z0-9\u4e00-\u9fa5-_]{3,30}$/)
const reg = new RegExp(/^[a-zA-Z0-9\u4e00-\u9fa5-_]{3,30}$/)
;
if (reg.test(name)) {
if (reg.test(name)) {
setNameHelp({
setNameHelp({
error: false,
error: false,
helperText:
''
helperText:
"",
})
})
;
return false
return false
;
} else {
} else {
setNameHelp({
setNameHelp({
error: true,
error: true,
helperText:
'请输入正确任务名称(3~30字符,可包含大小写字母、数字、中文、特殊符号“-”、“_”)'
helperText:
})
"请输入正确任务名称(3~30字符,可包含大小写字母、数字、中文、特殊符号“-”、“_”)",
return true
});
}
return true;
}
}
};
const checkOutputPath = (outputPath: string =
'')=>
{
const checkOutputPath = (outputPath: string =
"") =>
{
if (outputPath) {
if (outputPath) {
setOutputPathHelp({
setOutputPathHelp({
error: false,
error: false,
helperText:
''
helperText:
"",
})
})
;
return false
return false
;
} else {
} else {
setOutputPathHelp({
setOutputPathHelp({
error: true,
error: true,
helperText: '请选择输出路径'
helperText: "请选择输出路径",
})
});
return true
return true;
}
}
}
};
const renderTasks: IRenderTasks = useMemo(() => {
const renderTasks: IRenderTasks = useMemo(() => {
const result: IRenderTasks = [];
const result: IRenderTasks = [];
...
@@ -116,31 +137,31 @@ const ConfigForm = (props: ConfigFormProps) => {
...
@@ -116,31 +137,31 @@ const ConfigForm = (props: ConfigFormProps) => {
}
}
});
});
result.forEach((task) => {
result.forEach((task) => {
let isCheck = true
let isCheck = true
;
if (task.parameters.length > 0) {
if (task.parameters.length > 0) {
task.parameters.forEach((parameter)
=>
{
task.parameters.forEach((parameter)
=>
{
const { error } = getCheckResult(parameter, parameter.value)
const { error } = getCheckResult(parameter, parameter.value)
;
if (error) {
if (error) {
isCheck = false
isCheck = false
;
return
return
;
}
}
})
})
;
}
}
if
(task.flows.length>
0) {
if
(task.flows.length >
0) {
task.flows.forEach((flow) => {
task.flows.forEach((flow) => {
if (flow.parameters.length > 0) {
if (flow.parameters.length > 0) {
flow.parameters.forEach((parameter)
=>
{
flow.parameters.forEach((parameter)
=>
{
const { error } = getCheckResult(parameter, parameter.value)
const { error } = getCheckResult(parameter, parameter.value)
;
if (error) {
if (error) {
isCheck = false
isCheck = false
;
return
return
;
}
}
})
})
;
}
}
})
})
;
}
}
task.isCheck = isCheck
task.isCheck = isCheck
;
})
})
;
return result;
return result;
}, [templateConfigInfo]);
}, [templateConfigInfo]);
...
@@ -152,114 +173,108 @@ const ConfigForm = (props: ConfigFormProps) => {
...
@@ -152,114 +173,108 @@ const ConfigForm = (props: ConfigFormProps) => {
setParameter(e.target.value, taskId, parameterName);
setParameter(e.target.value, taskId, parameterName);
};
};
const randerParameters = (parameters: Array<IParameter>, taskId: string) => {
return parameters
.filter((parameter) => parameter.hidden === false)
.map((parameter, parameterIndex) => {
return (
return (
<div className={styles.formBox}>
<div className={styles.templateDescBox}>
<div className={styles.templateDescTitle}>模板描述</div>
<div className={styles.templateDesc}>
{templateConfigInfo?.description || ""}
</div>
</div>
<div
<div
className={classnames({
className={styles.parameter}
[styles.backgroundTitle]: true,
key={parameter.id || "" + parameterIndex}
[styles.backgroundTitlePass]: true,
})}
>
>
<img src="" alt="" />
<span className={styles.backgroundTitleText}>基础信息</span>
</div>
<div className={styles.formItems}>
<div className={styles.formItem}>
<div
<div
className={classnames({
className={classnames({
[styles.formItemLab
le]: true,
[styles.parameterTit
le]: true,
[styles.required]: true
,
[styles.required]: parameter.required
,
})}
})}
>
>
任务名称
{parameter.name}
<span className={styles.parameterDataType}>
{parameter.dataType}
</span>
</div>
</div>
<div className={styles.formItem}>
<div className={styles.parameterContent}>
{parameter.domType.toLowerCase() === "file" && (
<MyInput
<MyInput
value={name}
value={parameter.value || ""}
onChange={handleNameChange}
InputProps={{
placeholder="请输入任务名称"
endAdornment: (
error={nameHelp.error}
<img
helperText={nameHelp.helperText}
onClick={() =>
handleOpenFileSelect(taskId, parameter.name)
}
src={fileSelectIcon}
alt=""
className={styles.fileSelectImg}
/>
),
}}
error={parameter.error || false}
helperText={parameter.helperText}
></MyInput>
></MyInput>
</div>
)}
</div>
{parameter.domType.toLowerCase() === "pathselect" && (
<div className={styles.formItem}>
<div
className={classnames({
[styles.formItemLable]: true,
[styles.required]: true,
})}
>
输出路径
</div>
<div className={styles.formItem}>
<MyInput
<MyInput
value={outputPath
}
value={parameter.value || ""
}
InputProps={{
InputProps={{
endAdornment: (
endAdornment: (
<img
<img
onClick={handleOpenFileSelect}
onClick={() =>
handleOpenFileSelect(taskId, parameter.name)
}
src={fileSelectIcon}
src={fileSelectIcon}
alt="选择输出路径
"
alt="
"
className={styles.fileSelectImg}
className={styles.fileSelectImg}
/>
/>
),
),
}}
}}
error={outputPathHelp.error
}
error={parameter.error || false
}
helperText={outputPathHelp
.helperText}
helperText={parameter
.helperText}
></MyInput>
></MyInput>
</div>
)}
</div>
{parameter.domType.toLowerCase() === "datasetselect" && (
</div>
<MyInput
{renderTasks.map((task, taskIndex) => {
value={parameter.value || ""}
return (
InputProps={{
<div className={styles.taskBox} key={task.id + taskIndex}>
endAdornment: (
<div
className={classnames({
[styles.backgroundTitle]: true,
[styles.backgroundTitlePass]: true,
})}
>
<img
<img
className={classnames({
onClick={() =>
[styles.backgroundTitleTextIcon]: true,
handleOpenFileSelect(taskId, parameter.name)
[styles.backgroundTitleTextIconShow]: task.isCheck,
}
})}
src={fileSelectIcon}
src={jobSueIcon} alt="" />
alt=""
<span className={styles.backgroundTitleText}>{task.title}</span>
className={styles.fileSelectImg}
</div>
/>
<div className={styles.taskConfigBox}>
),
{task.parameters.filter(parameter => parameter.hidden === false).map((parameter, parameterIndex) => {
}}
return (
error={parameter.error || false}
<div
helperText={parameter.helperText}
className={styles.parameter}
></MyInput>
key={parameter.id || "" + parameterIndex}
)}
>
{parameter.domType.toLowerCase() === "fileselect" && (
<div className={classnames({
<MyInput
[styles.parameterTitle]: true,
value={parameter.value || ""}
[styles.required]: parameter.required,
InputProps={{
})}>
endAdornment: (
{parameter.name}
<img
<span className={styles.parameterDataType}>
onClick={() =>
{parameter.dataType}
handleOpenFileSelect(taskId, parameter.name)
</span>
}
</div>
src={fileSelectIcon}
<div className={styles.parameterContent}>
alt=""
className={styles.fileSelectImg}
/>
),
}}
error={parameter.error || false}
helperText={parameter.helperText}
></MyInput>
)}
{parameter.domType.toLowerCase() === "input" && (
{parameter.domType.toLowerCase() === "input" && (
<MyInput
<MyInput
value={parameter.value}
value={parameter.value}
onChange={(e: any) =>
onChange={(e: any) =>
handleParameterChange(
handleParameterChange(e, taskId, parameter.name || "")
e,
task.id,
parameter.name || ""
)
}
}
placeholder="请输入"
placeholder="请输入"
error={parameter.error || false}
error={parameter.error || false}
...
@@ -270,11 +285,7 @@ const ConfigForm = (props: ConfigFormProps) => {
...
@@ -270,11 +285,7 @@ const ConfigForm = (props: ConfigFormProps) => {
<MySelect
<MySelect
value={parameter.value}
value={parameter.value}
onChange={(e: any) =>
onChange={(e: any) =>
handleParameterChange(
handleParameterChange(e, taskId, parameter.name || "")
e,
task.id,
parameter.name || ""
)
}
}
error={parameter.error || false}
error={parameter.error || false}
helperText={parameter.helperText}
helperText={parameter.helperText}
...
@@ -285,11 +296,7 @@ const ConfigForm = (props: ConfigFormProps) => {
...
@@ -285,11 +296,7 @@ const ConfigForm = (props: ConfigFormProps) => {
<MySelect
<MySelect
value={parameter.value}
value={parameter.value}
onChange={(e: any) =>
onChange={(e: any) =>
handleParameterChange(
handleParameterChange(e, taskId, parameter.name || "")
e,
task.id,
parameter.name || ""
)
}
}
multiple={true}
multiple={true}
error={parameter.error || false}
error={parameter.error || false}
...
@@ -301,11 +308,7 @@ const ConfigForm = (props: ConfigFormProps) => {
...
@@ -301,11 +308,7 @@ const ConfigForm = (props: ConfigFormProps) => {
<MyRadio
<MyRadio
value={parameter.value}
value={parameter.value}
onChange={(e: any) =>
onChange={(e: any) =>
handleParameterChange(
handleParameterChange(e, taskId, parameter.name || "")
e,
task.id,
parameter.name || ""
)
}
}
options={optionsTransform(parameter.choices, "key")}
options={optionsTransform(parameter.choices, "key")}
error={parameter.error || false}
error={parameter.error || false}
...
@@ -319,10 +322,10 @@ const ConfigForm = (props: ConfigFormProps) => {
...
@@ -319,10 +322,10 @@ const ConfigForm = (props: ConfigFormProps) => {
handleParameterChange(
handleParameterChange(
{
{
target: {
target: {
value: e
value: e,
}
},
},
},
task.i
d,
taskI
d,
parameter.name || ""
parameter.name || ""
)
)
}
}
...
@@ -341,35 +344,114 @@ const ConfigForm = (props: ConfigFormProps) => {
...
@@ -341,35 +344,114 @@ const ConfigForm = (props: ConfigFormProps) => {
</Tooltip>
</Tooltip>
)}
)}
</div>
</div>
{/* question mark */}
</div>
</div>
);
);
});
};
return (
<div className={styles.formBox}>
<div className={styles.templateDescBox}>
<div className={styles.templateDescTitle}>模板描述</div>
<div className={styles.templateDesc}>
{templateConfigInfo?.description || ""}
</div>
</div>
<div
className={classnames({
[styles.backgroundTitle]: true,
[styles.backgroundTitlePass]: true,
})}
})}
>
<img src="" alt="" />
<span className={styles.backgroundTitleText}>基础信息</span>
</div>
</div>
<div className={styles.formItems}>
<div className={styles.formItem}>
<div
className={classnames({
[styles.formItemLable]: true,
[styles.required]: true,
})}
>
任务名称
</div>
<div className={styles.formItem}>
<MyInput
value={name}
onChange={handleNameChange}
placeholder="请输入任务名称"
error={nameHelp.error}
helperText={nameHelp.helperText}
></MyInput>
</div>
</div>
<div className={styles.formItem}>
<div
className={classnames({
[styles.formItemLable]: true,
[styles.required]: true,
})}
>
输出路径
</div>
<div className={styles.formItem}>
<MyInput
value={outputPath || ""}
InputProps={{
endAdornment: (
<img
onClick={() => handleOpenFileSelect()}
src={fileSelectIcon}
alt="选择输出路径"
className={styles.fileSelectImg}
/>
),
}}
error={outputPathHelp.error}
helperText={outputPathHelp.helperText}
></MyInput>
</div>
</div>
</div>
{renderTasks.map((task, taskIndex) => {
return (
<div className={styles.taskBox} key={task.id + taskIndex}>
<div
className={classnames({
[styles.backgroundTitle]: true,
[styles.backgroundTitlePass]: true,
})}
>
<img
className={classnames({
[styles.backgroundTitleTextIcon]: true,
[styles.backgroundTitleTextIconShow]: task.isCheck,
})}
src={jobSueIcon}
alt=""
/>
<span className={styles.backgroundTitleText}>{task.title}</span>
</div>
<div className={styles.taskConfigBox}>
{randerParameters(task.parameters, task.id)}
{task.flows.map((flow) => {
return (
<div className={styles.flowConfigBox} key={flow.id}>
<div className={styles.flowTitle}>{flow.title}</div>
{randerParameters(flow.parameters, flow.id)}
</div>
</div>
);
);
})}
})}
{/* <MySelect
</div>
value={selectValue}
</div>
onChange={handleSelectChange}
);
multiple={true}
})}
options={optionsTransform(options, "key")}
<FileSelect
></MySelect> */}
{/* <MyCheckBox
value={selectValue}
onChange={handleCheckBoxChange}
options={optionsTransform(options, "key")}
></MyCheckBox> */}
{/* <MyRadio
value={selectValue}
onChange={handleRadioChange}
options={optionsTransform(options, "key")}
></MyRadio> */}
{/* <FileSelect
onClose={handleFileSelectOnClose}
onClose={handleFileSelectOnClose}
open={fileSelectOpen}
open={fileSelectOpen}
onConfirm={onFileSelectConfirm}
onConfirm={onFileSelectConfirm}
/>
*/}
/>
</div>
</div>
);
);
};
};
...
...
src/views/Project/ProjectSubmitWork/index.tsx
View file @
2a7b6d6a
...
@@ -16,15 +16,19 @@ import IconButton from "@mui/material/IconButton";
...
@@ -16,15 +16,19 @@ import IconButton from "@mui/material/IconButton";
import
{
ITemplateConfig
}
from
"./interface"
;
import
{
ITemplateConfig
}
from
"./interface"
;
import
_
from
"lodash"
;
import
_
from
"lodash"
;
import
useMyRequest
from
"@/hooks/useMyRequest"
;
import
useMyRequest
from
"@/hooks/useMyRequest"
;
import
{
fetchTemplateConfigInfo
}
from
"@/api/project_api"
;
import
{
fetchTemplateConfigInfo
,
submitWorkFlow
}
from
"@/api/project_api"
;
import
{
useLocation
,
useNavigate
}
from
"react-router-dom"
;
import
{
useLocation
,
useNavigate
}
from
"react-router-dom"
;
import
{
getCheckResult
}
from
"./util"
;
import
{
getCheckResult
}
from
"./util"
;
import
{
IResponse
}
from
"@/api/http"
;
import
{
IResponse
}
from
"@/api/http"
;
import
{
templateConfigJson
}
from
"./mock"
;
import
{
templateConfigJson
}
from
"./mock"
;
import
{
useMessage
}
from
"@/components/MySnackbar"
;
import
{
useMessage
}
from
"@/components/MySnackbar"
;
import
{
toJS
}
from
"mobx"
;
import
{
useStores
}
from
"@/store"
;
const
ProjectSubmitWork
=
()
=>
{
const
ProjectSubmitWork
=
()
=>
{
const
Message
=
useMessage
();
const
Message
=
useMessage
();
const
{
currentProjectStore
}
=
useStores
();
const
projectId
=
toJS
(
currentProjectStore
.
currentProjectInfo
.
id
);
const
[
templateConfigInfo
,
setTemplateConfigInfo
]
=
const
[
templateConfigInfo
,
setTemplateConfigInfo
]
=
useState
<
ITemplateConfig
>
();
useState
<
ITemplateConfig
>
();
const
location
:
any
=
useLocation
();
const
location
:
any
=
useLocation
();
...
@@ -42,6 +46,12 @@ const ProjectSubmitWork = () => {
...
@@ -42,6 +46,12 @@ const ProjectSubmitWork = () => {
// }
// }
});
});
const
{
run
:
submitWorkFlowRun
}
=
useMyRequest
(
submitWorkFlow
,
{
onSuccess
:
(
res
)
=>
{
console
.
log
(
res
);
},
});
useEffect
(()
=>
{
useEffect
(()
=>
{
run
({
run
({
id
:
location
?.
state
?.
id
,
id
:
location
?.
state
?.
id
,
...
@@ -52,6 +62,7 @@ const ProjectSubmitWork = () => {
...
@@ -52,6 +62,7 @@ const ProjectSubmitWork = () => {
const
result
:
ITemplateConfig
=
_
.
cloneDeep
(
templateConfigInfo
);
const
result
:
ITemplateConfig
=
_
.
cloneDeep
(
templateConfigInfo
);
result
.
tasks
.
forEach
((
tack
)
=>
{
result
.
tasks
.
forEach
((
tack
)
=>
{
if
(
tack
.
id
===
taskId
)
{
if
(
tack
.
id
===
taskId
)
{
let
isCheck
=
true
;
tack
.
parameters
.
forEach
((
parameter
)
=>
{
tack
.
parameters
.
forEach
((
parameter
)
=>
{
if
(
parameter
.
name
===
parameterName
)
{
if
(
parameter
.
name
===
parameterName
)
{
parameter
.
value
=
value
;
parameter
.
value
=
value
;
...
@@ -61,6 +72,10 @@ const ProjectSubmitWork = () => {
...
@@ -61,6 +72,10 @@ const ProjectSubmitWork = () => {
}
else
{
}
else
{
return
;
return
;
}
}
if
(
getCheckResult
(
parameter
,
value
).
error
===
true
)
{
isCheck
=
false
;
}
tack
.
isCheck
=
isCheck
;
});
});
}
else
{
}
else
{
return
;
return
;
...
@@ -90,6 +105,13 @@ const ProjectSubmitWork = () => {
...
@@ -90,6 +105,13 @@ const ProjectSubmitWork = () => {
setTemplateConfigInfo
(
result
);
setTemplateConfigInfo
(
result
);
if
(
check
)
{
if
(
check
)
{
console
.
log
(
"提交任务"
);
console
.
log
(
"提交任务"
);
submitWorkFlowRun
({
name
,
outputPath
,
projectId
:
projectId
as
string
,
specId
:
templateConfigInfo
?.
id
as
string
,
promotedParameters
:
{},
});
}
else
{
}
else
{
Message
.
error
(
"请完善左侧表单再提交"
);
Message
.
error
(
"请完善左侧表单再提交"
);
}
}
...
...
src/views/Project/ProjectSubmitWork/interface.ts
View file @
2a7b6d6a
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
* @FilePath: /bkunyun/src/views/Project/ProjectSubmitWork/interface.ts
* @FilePath: /bkunyun/src/views/Project/ProjectSubmitWork/interface.ts
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
*/
type
IType
=
'BATCH'
|
'FLOW'
type
IType
=
"BATCH"
|
"FLOW"
;
export
interface
IParameter
{
export
interface
IParameter
{
hidden
:
boolean
;
hidden
:
boolean
;
id
?:
string
;
id
?:
string
;
...
@@ -24,8 +24,8 @@ export interface IParameter {
...
@@ -24,8 +24,8 @@ export interface IParameter {
tasks
:
ITask
[];
tasks
:
ITask
[];
validators
:
Array
<
IValidator
>
;
validators
:
Array
<
IValidator
>
;
choices
:
Array
<
IChoice
>
;
choices
:
Array
<
IChoice
>
;
error
?
:
boolean
;
error
?:
boolean
;
helperText
?
:
string
;
helperText
?:
string
;
}
}
export
interface
ITask
{
export
interface
ITask
{
...
@@ -40,9 +40,9 @@ export interface ITask {
...
@@ -40,9 +40,9 @@ export interface ITask {
parentNode
?:
string
;
parentNode
?:
string
;
parameters
:
Array
<
IParameter
>
;
parameters
:
Array
<
IParameter
>
;
edges
:
Array
<
IEdge
>
;
edges
:
Array
<
IEdge
>
;
isCheck
?:
boolean
;
}
}
export
interface
ITemplateConfig
{
export
interface
ITemplateConfig
{
title
:
string
;
title
:
string
;
version
:
string
;
version
:
string
;
...
@@ -54,6 +54,7 @@ export interface ITemplateConfig {
...
@@ -54,6 +54,7 @@ export interface ITemplateConfig {
source
:
string
;
source
:
string
;
productId
:
string
;
productId
:
string
;
tasks
:
ITask
[];
tasks
:
ITask
[];
id
:
string
;
}
}
export
type
IDomType
=
export
type
IDomType
=
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment