Commit 7a5c0e45 authored by chenshouchao's avatar chenshouchao

Merge branch 'feat-20221012-environment' of http://120.77.149.83/root/bkunyun…

Merge branch 'feat-20221012-environment' of http://120.77.149.83/root/bkunyun into feat-20221012-environment
parents 8648cd50 b0a0dfb7
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴永生#A02208 yongsheng.wu@wholion.com * @Author: 吴永生#A02208 yongsheng.wu@wholion.com
* @Date: 2022-06-13 09:56:57 * @Date: 2022-06-13 09:56:57
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-10-25 18:23:37 * @LastEditTime: 2022-10-26 18:28:43
* @FilePath: /bkunyun/src/api/api_manager.ts * @FilePath: /bkunyun/src/api/api_manager.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
*/ */
...@@ -38,7 +38,7 @@ const RESTAPI = { ...@@ -38,7 +38,7 @@ const RESTAPI = {
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`, //提交工作流 API_SUBMIT_WORKFLOW: `${BACKEND_API_URI_PREFIX}/cpp/workflow/submit`, //提交工作流
API_WORKBENCH_WORKFLOW_TASKINFO: `${BACKEND_API_URI_PREFIX}/cpp/workbench/workflowjob/task-info`, //查询任务某个算子详情 API_WORKBENCH_WORKFLOW_TASKINFO: `${BACKEND_API_URI_PREFIX}/cpp/workbench/workflowjob/task-info`, //查询任务某个算子详情
API_OPERATOR_LIST:`${BACKEND_API_URI_PREFIX}/cpp/workflow/actorspecs`, // 获取算子列表 API_OPERATOR_LIST:`${BACKEND_API_URI_PREFIX}/cpp/workflow/actorspecs/list`, // 获取算子列表
API_VERSION_OPERATOR:`${BACKEND_API_URI_PREFIX}/cpp/workflow/actorversion`, // 获取指定版本算子 API_VERSION_OPERATOR:`${BACKEND_API_URI_PREFIX}/cpp/workflow/actorversion`, // 获取指定版本算子
API_SAVE_USERSPEC:`${BACKEND_API_URI_PREFIX}/cpp/workflow/saveuserspec`, // 保存用户自定义工作流模板 API_SAVE_USERSPEC:`${BACKEND_API_URI_PREFIX}/cpp/workflow/saveuserspec`, // 保存用户自定义工作流模板
API_OVERVIEW_GET:`${BACKEND_API_URI_PREFIX}/cpp/basicInformation`, // 获取概览基本信息 API_OVERVIEW_GET:`${BACKEND_API_URI_PREFIX}/cpp/basicInformation`, // 获取概览基本信息
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴永生 15770852798@163.com * @Author: 吴永生 15770852798@163.com
* @Date: 2022-10-19 17:09:23 * @Date: 2022-10-19 17:09:23
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-10-25 20:26:42 * @LastEditTime: 2022-10-26 19:07:50
* @FilePath: /bkunyun/src/api/resourceCenter.ts * @FilePath: /bkunyun/src/api/resourceCenter.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
*/ */
...@@ -23,9 +23,11 @@ type addActorenvBuildenvParams = { ...@@ -23,9 +23,11 @@ type addActorenvBuildenvParams = {
/** 获取算子列表请求参数 */ /** 获取算子列表请求参数 */
export interface IOperatorListParams { export interface IOperatorListParams {
keyword: string; keyword?: string;
productId: string; productId?: string;
type: string; type?: string;
page?: number;
size?: number;
} }
// 获取公共项目 // 获取公共项目
......
import { useMessage } from "@/components/MySnackbar";
import _ from "lodash"; import _ from "lodash";
import { useState } from "react";
import { useMessage } from "@/components/MySnackbar";
import { ITask } from "../Project/ProjectSubmitWork/interface"; import { ITask } from "../Project/ProjectSubmitWork/interface";
/* /*
* @Author: 吴永生 15770852798@163.com * @Author: 吴永生 15770852798@163.com
* @Date: 2022-10-24 18:08:47 * @Date: 2022-10-24 18:08:47
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-10-26 17:15:34 * @LastEditTime: 2022-10-26 18:13:41
* @FilePath: /bkunyun/src/views/CustomOperator/useCheckOperator.tsx * @FilePath: /bkunyun/src/views/CustomOperator/useCheckOperator.tsx
* @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
*/ */
...@@ -18,7 +17,6 @@ const useCheckOperator = ( ...@@ -18,7 +17,6 @@ const useCheckOperator = (
nullText?: string nullText?: string
) => { ) => {
const Message = useMessage(); const Message = useMessage();
let checkStatus = false;
// 判断 每个起始算子(可以有多个起始点)的输入必须为文件的路径输入或数据集的路径输入。 // 判断 每个起始算子(可以有多个起始点)的输入必须为文件的路径输入或数据集的路径输入。
const checkIn = (targetArr: string[]) => { const checkIn = (targetArr: string[]) => {
...@@ -104,9 +102,8 @@ const useCheckOperator = ( ...@@ -104,9 +102,8 @@ const useCheckOperator = (
const handleCheck = () => { const handleCheck = () => {
if (operatorList.length === 0) { if (operatorList.length === 0) {
Message.error(nullText || "内容不能为空!"); !nullText && Message.error(nullText || "内容不能为空!");
checkStatus = false; return nullText || "内容不能为空!";
return checkStatus;
} }
let sourceArr: string[] = []; let sourceArr: string[] = [];
let targetArr: string[] = []; let targetArr: string[] = [];
...@@ -117,25 +114,23 @@ const useCheckOperator = ( ...@@ -117,25 +114,23 @@ const useCheckOperator = (
}); });
}); });
if (!checkHasOneLine([...sourceArr], [...targetArr])) { if (!checkHasOneLine([...sourceArr], [...targetArr])) {
checkStatus = false; !nullText && Message.error("部分算子没有流程线,请检查流程!");
Message.error("部分算子没有流程线,请检查流程!"); return "部分算子没有流程线,请检查流程!";
return checkStatus;
} }
if (!checkIn([...targetArr])) { if (!checkIn([...targetArr])) {
checkStatus = false; !nullText &&
Message.error("每个流程第一步需读取文件/数据集,请检查流程!"); Message.error("每个流程第一步需读取文件/数据集,请检查流程!");
return checkStatus; return "每个流程第一步需读取文件/数据集,请检查流程!";
} }
if (!checkOut([...sourceArr])) { if (!checkOut([...sourceArr])) {
checkStatus = false; !nullText &&
Message.error( Message.error(
"每个流程最后一步必须将数据写入为文件/数据集,请检查流程!" "每个流程最后一步必须将数据写入为文件/数据集,请检查流程!"
); );
return checkStatus; return "每个流程最后一步必须将数据写入为文件/数据集,请检查流程!";
} }
checkStatus = true;
successCallBack(); successCallBack();
return checkStatus; return "";
}; };
return { handleCheck }; return { handleCheck };
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴永生 15770852798@163.com * @Author: 吴永生 15770852798@163.com
* @Date: 2022-10-18 16:12:55 * @Date: 2022-10-18 16:12:55
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-10-26 17:31:53 * @LastEditTime: 2022-10-26 18:52:52
* @FilePath: /bkunyun/src/views/ResourceCenter/UserResources/WorkflowOperator/components/AddOperator/index.tsx * @FilePath: /bkunyun/src/views/ResourceCenter/UserResources/WorkflowOperator/components/AddOperator/index.tsx
* @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
*/ */
...@@ -79,6 +79,8 @@ const AddOperator = observer((props: IAddOperator) => { ...@@ -79,6 +79,8 @@ const AddOperator = observer((props: IAddOperator) => {
const [code, setCode] = useState(JSON.stringify(initCode, null, "\t")); const [code, setCode] = useState(JSON.stringify(initCode, null, "\t"));
/** 参数配置 错误提示 */ /** 参数配置 错误提示 */
const [parametersError, setParametersError] = useState<string>(""); const [parametersError, setParametersError] = useState<string>("");
/** 流程编排错误提示 */
const [flowParametersError, setFlowParametersError] = useState<string>("");
/** 运行脚本 */ /** 运行脚本 */
const [command, setCommand] = useState<string>(""); const [command, setCommand] = useState<string>("");
...@@ -246,13 +248,14 @@ const AddOperator = observer((props: IAddOperator) => { ...@@ -246,13 +248,14 @@ const AddOperator = observer((props: IAddOperator) => {
const paramsResultError = paramsConfigBlur(); const paramsResultError = paramsConfigBlur();
setFormErrors(resultErrors); setFormErrors(resultErrors);
let checkStatus = true; let checkStatus = "";
if (taskType === "BATCH" && batchBuildType === "OPERATOR") { if (taskType === "BATCH" && batchBuildType === "OPERATOR") {
checkStatus = handleCheck(); checkStatus = handleCheck();
setFlowParametersError(checkStatus);
} }
if ( if (
Object.getOwnPropertyNames(resultErrors)?.length || Object.getOwnPropertyNames(resultErrors)?.length ||
!checkStatus || checkStatus ||
paramsResultError paramsResultError
) )
return; return;
...@@ -525,7 +528,10 @@ const AddOperator = observer((props: IAddOperator) => { ...@@ -525,7 +528,10 @@ const AddOperator = observer((props: IAddOperator) => {
)} )}
</div> </div>
{taskType === "FLOW" ? null : ( {taskType === "FLOW" ? null : (
<div className={style.parameterConfigBox}> <div
className={style.parameterConfigBox}
style={{ marginBottom: flowParametersError ? "56px" : "24px" }}
>
<div className={style.codeTitle}> <div className={style.codeTitle}>
{batchBuildType === "ENVIRONMENT" ? "运行脚本" : "流程编排"} {batchBuildType === "ENVIRONMENT" ? "运行脚本" : "流程编排"}
</div> </div>
...@@ -540,7 +546,10 @@ const AddOperator = observer((props: IAddOperator) => { ...@@ -540,7 +546,10 @@ const AddOperator = observer((props: IAddOperator) => {
) : ( ) : (
<div <div
id="customOperatorFlow" id="customOperatorFlow"
style={{ position: "relative", height: 400 }} style={{
position: "relative",
height: 400,
}}
> >
<OperatorList <OperatorList
operatorList={operatorList} operatorList={operatorList}
...@@ -558,6 +567,9 @@ const AddOperator = observer((props: IAddOperator) => { ...@@ -558,6 +567,9 @@ const AddOperator = observer((props: IAddOperator) => {
showVersion={true} showVersion={true}
showControls={false} showControls={false}
/> />
{flowParametersError ? (
<p className={style.codeErrorBox}>{flowParametersError}</p>
) : null}
</div> </div>
)} )}
</div> </div>
......
.detailsBox { .detailsBox {
padding: 0 24px; padding: 0 24px;
display: flex;
flex-direction: column;
height: calc(100vh - 58px);
} }
.baseInfoBox { .baseInfoBox {
...@@ -37,3 +40,8 @@ ...@@ -37,3 +40,8 @@
color: #565c66; color: #565c66;
border-radius: 2px; border-radius: 2px;
} }
.contentBox {
flex: 1;
min-height: 400px;
margin-bottom: 24px;
}
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴永生 15770852798@163.com * @Author: 吴永生 15770852798@163.com
* @Date: 2022-10-17 14:35:11 * @Date: 2022-10-17 14:35:11
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-10-26 17:28:19 * @LastEditTime: 2022-10-26 19:51:34
* @FilePath: /bkunyun/src/views/ResourceCenter/UserResources/WorkflowOperator/index.tsx * @FilePath: /bkunyun/src/views/ResourceCenter/UserResources/WorkflowOperator/index.tsx
* @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
*/ */
...@@ -21,16 +21,9 @@ import Code from "@/components/CommonComponents/Code"; ...@@ -21,16 +21,9 @@ import Code from "@/components/CommonComponents/Code";
import Flow from "@/views/Project/components/Flow"; import Flow from "@/views/Project/components/Flow";
import styles from "./index.module.css"; import styles from "./index.module.css";
import { Base64 } from "js-base64";
const OperatorDetails = observer(() => { const OperatorDetails = observer(() => {
const contentTypeList = useMemo(() => {
return [
{ value: "flowChart", label: "流程图" },
{ value: "parameterList", label: "参数列表" },
{ value: "runScript", label: "运行脚本" },
];
}, []);
/** 产品store */ /** 产品store */
const { productListStore } = useStores(); const { productListStore } = useStores();
const navigate = useNavigate(); const navigate = useNavigate();
...@@ -59,8 +52,23 @@ const OperatorDetails = observer(() => { ...@@ -59,8 +52,23 @@ const OperatorDetails = observer(() => {
creator = "", creator = "",
description = "", description = "",
type, type,
envName = "",
envId,
command,
} = detailInfo; } = detailInfo;
console.log(detailInfo, "detailInfo"); console.log(detailInfo, "detailInfo");
const contentTypeList = useMemo(() => {
const result = [
{ value: "flowChart", label: "流程图" },
{ value: "parameterList", label: "参数列表" },
];
if (envId) {
result.push({ value: "runScript", label: "运行脚本" });
}
return result;
}, [envId]);
/** 切换类型 */ /** 切换类型 */
const handleRadio = (val: string) => { const handleRadio = (val: string) => {
console.log(val, "2"); console.log(val, "2");
...@@ -107,28 +115,38 @@ const OperatorDetails = observer(() => { ...@@ -107,28 +115,38 @@ const OperatorDetails = observer(() => {
}, },
{ label: "创建人", value: creator }, { label: "创建人", value: creator },
{ label: "算子版本", value: version }, { label: "算子版本", value: version },
{ label: "应用环境", value: "1" }, { label: "应用环境", value: envName },
]} ]}
/> />
<BasicInfo infoList={[{ label: "描述", value: description }]} /> {description ? (
</div> <BasicInfo infoList={[{ label: "描述", value: description }]} />
<div style={{ padding: "26px 0 16px 0" }}>
<RadioGroupOfButtonStyle
RadiosBoxStyle={{ width: 254 }}
value={contentType}
radioOptions={contentTypeList}
handleRadio={handleRadio}
/>
</div>
<div>
{contentType === "flowChart" ? <Flow tasks={[]} /> : null}
{contentType === "parameterList" ? null : null}
{contentType === "runScript" ? (
<div className={styles.code}>
<Code value="" editable={false} height="350px" />
</div>
) : null} ) : null}
</div> </div>
{type === "BATCH" ? (
<div style={{ padding: "26px 0 16px 0" }}>
<RadioGroupOfButtonStyle
RadiosBoxStyle={{ width: 254 }}
value={contentType}
radioOptions={contentTypeList}
handleRadio={handleRadio}
/>
</div>
) : null}
{contentType === "flowChart" ? (
<Flow
tasks={detailInfo?.parameters || []}
className={styles.contentBox}
/>
) : null}
{contentType === "parameterList" ? null : null}
{contentType === "runScript" ? (
<Code
className={styles.contentBox}
value={Base64.decode(command || "")}
editable={false}
height="100%"
/>
) : null}
</div> </div>
); );
}); });
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴永生 15770852798@163.com * @Author: 吴永生 15770852798@163.com
* @Date: 2022-10-17 14:35:11 * @Date: 2022-10-17 14:35:11
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-10-26 15:14:32 * @LastEditTime: 2022-10-26 19:17:49
* @FilePath: /bkunyun/src/views/ResourceCenter/UserResources/WorkflowOperator/index.tsx * @FilePath: /bkunyun/src/views/ResourceCenter/UserResources/WorkflowOperator/index.tsx
* @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
*/ */
...@@ -25,6 +25,7 @@ import { IOperatorInfo } from "./interface"; ...@@ -25,6 +25,7 @@ import { IOperatorInfo } from "./interface";
import styles from "./index.module.css"; import styles from "./index.module.css";
import MyCircularProgress from "@/components/mui/MyCircularProgress"; import MyCircularProgress from "@/components/mui/MyCircularProgress";
import NoData from "@/components/BusinessComponents/NoData";
const WorkflowOperator = observer(() => { const WorkflowOperator = observer(() => {
const [pageType, setPageType] = useState<string>(""); const [pageType, setPageType] = useState<string>("");
...@@ -45,7 +46,7 @@ const WorkflowOperator = observer(() => { ...@@ -45,7 +46,7 @@ const WorkflowOperator = observer(() => {
// refreshDeps: [], // refreshDeps: [],
onSuccess: (res) => { onSuccess: (res) => {
console.log(res); console.log(res);
setList(res?.data); setList(res?.data.content);
}, },
}); });
...@@ -57,7 +58,7 @@ const WorkflowOperator = observer(() => { ...@@ -57,7 +58,7 @@ const WorkflowOperator = observer(() => {
if (params.type === "all") { if (params.type === "all") {
params.type = ""; params.type = "";
} }
getList(params); getList({ ...params });
}, [getList, searchParams]); }, [getList, searchParams]);
// 按回车搜索 // 按回车搜索
...@@ -145,30 +146,8 @@ const WorkflowOperator = observer(() => { ...@@ -145,30 +146,8 @@ const WorkflowOperator = observer(() => {
})} })}
</div> </div>
) : ( ) : (
<div style={{ position: "relative", minHeight: 450 }}> <div style={{ height: 300 }}>
<img <NoData text="暂无工作流算子"></NoData>
src={noFile}
alt=""
style={{
position: "absolute",
top: "100px",
left: "50%",
transform: "translate(-50%, 0)",
}}
/>
<span
style={{
position: "absolute",
top: "165px",
left: "50%",
transform: "translate(-50%, 0)",
fontSize: "14px",
lineHeight: "22px",
color: "#8a9099",
}}
>
暂无工作流算子
</span>
</div> </div>
)} )}
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment