diff --git a/react-ui/config/config.ts b/react-ui/config/config.ts index b2ff93b9..c7228a2d 100644 --- a/react-ui/config/config.ts +++ b/react-ui/config/config.ts @@ -154,4 +154,5 @@ export default defineConfig({ strategy: 'normal', }, requestRecord: {}, + icons: {}, }); diff --git a/react-ui/public/assets/images/component-icon-3-Failed.png b/react-ui/public/assets/images/component-icon-3-Failed.png index e14d6801..214db255 100644 Binary files a/react-ui/public/assets/images/component-icon-3-Failed.png and b/react-ui/public/assets/images/component-icon-3-Failed.png differ diff --git a/react-ui/public/assets/images/component-icon-3-Omitted.png b/react-ui/public/assets/images/component-icon-3-Omitted.png index 4bd1c261..d2eb16ac 100644 Binary files a/react-ui/public/assets/images/component-icon-3-Omitted.png and b/react-ui/public/assets/images/component-icon-3-Omitted.png differ diff --git a/react-ui/public/assets/images/component-icon-3-Pending.png b/react-ui/public/assets/images/component-icon-3-Pending.png index b5590219..54425b16 100644 Binary files a/react-ui/public/assets/images/component-icon-3-Pending.png and b/react-ui/public/assets/images/component-icon-3-Pending.png differ diff --git a/react-ui/public/assets/images/component-icon-3-Running.png b/react-ui/public/assets/images/component-icon-3-Running.png index 2dda9dd8..346e566c 100644 Binary files a/react-ui/public/assets/images/component-icon-3-Running.png and b/react-ui/public/assets/images/component-icon-3-Running.png differ diff --git a/react-ui/public/assets/images/component-icon-3-Skipped.png b/react-ui/public/assets/images/component-icon-3-Skipped.png new file mode 100644 index 00000000..d2eb16ac Binary files /dev/null and b/react-ui/public/assets/images/component-icon-3-Skipped.png differ diff --git a/react-ui/public/assets/images/component-icon-3-Succeeded.png b/react-ui/public/assets/images/component-icon-3-Succeeded.png index a915145d..78078b15 100644 Binary files a/react-ui/public/assets/images/component-icon-3-Succeeded.png and b/react-ui/public/assets/images/component-icon-3-Succeeded.png differ diff --git a/react-ui/public/assets/images/component-icon-3.png b/react-ui/public/assets/images/component-icon-3.png index 43d88c00..d90937d0 100644 Binary files a/react-ui/public/assets/images/component-icon-3.png and b/react-ui/public/assets/images/component-icon-3.png differ diff --git a/react-ui/public/assets/images/component-icon-4-Failed.png b/react-ui/public/assets/images/component-icon-4-Failed.png index 4b1d6592..319b90d2 100644 Binary files a/react-ui/public/assets/images/component-icon-4-Failed.png and b/react-ui/public/assets/images/component-icon-4-Failed.png differ diff --git a/react-ui/public/assets/images/component-icon-4-Omitted.png b/react-ui/public/assets/images/component-icon-4-Omitted.png index 03e3d391..3d98c224 100644 Binary files a/react-ui/public/assets/images/component-icon-4-Omitted.png and b/react-ui/public/assets/images/component-icon-4-Omitted.png differ diff --git a/react-ui/public/assets/images/component-icon-4-Pending.png b/react-ui/public/assets/images/component-icon-4-Pending.png index 3c4b6f6f..9bcfab74 100644 Binary files a/react-ui/public/assets/images/component-icon-4-Pending.png and b/react-ui/public/assets/images/component-icon-4-Pending.png differ diff --git a/react-ui/public/assets/images/component-icon-4-Running.png b/react-ui/public/assets/images/component-icon-4-Running.png index b991a59a..079b1809 100644 Binary files a/react-ui/public/assets/images/component-icon-4-Running.png and b/react-ui/public/assets/images/component-icon-4-Running.png differ diff --git a/react-ui/public/assets/images/component-icon-4-Skipped.png b/react-ui/public/assets/images/component-icon-4-Skipped.png new file mode 100644 index 00000000..3d98c224 Binary files /dev/null and b/react-ui/public/assets/images/component-icon-4-Skipped.png differ diff --git a/react-ui/public/assets/images/component-icon-4-Succeeded.png b/react-ui/public/assets/images/component-icon-4-Succeeded.png index 0338686f..2263b17b 100644 Binary files a/react-ui/public/assets/images/component-icon-4-Succeeded.png and b/react-ui/public/assets/images/component-icon-4-Succeeded.png differ diff --git a/react-ui/public/assets/images/component-icon-4.png b/react-ui/public/assets/images/component-icon-4.png index 4c004faf..2858dc19 100644 Binary files a/react-ui/public/assets/images/component-icon-4.png and b/react-ui/public/assets/images/component-icon-4.png differ diff --git a/react-ui/public/assets/images/component-icon-5-Failed.png b/react-ui/public/assets/images/component-icon-5-Failed.png index 34e79c11..5d38372c 100644 Binary files a/react-ui/public/assets/images/component-icon-5-Failed.png and b/react-ui/public/assets/images/component-icon-5-Failed.png differ diff --git a/react-ui/public/assets/images/component-icon-5-Omitted.png b/react-ui/public/assets/images/component-icon-5-Omitted.png index c3476b75..4685f2fd 100644 Binary files a/react-ui/public/assets/images/component-icon-5-Omitted.png and b/react-ui/public/assets/images/component-icon-5-Omitted.png differ diff --git a/react-ui/public/assets/images/component-icon-5-Pending.png b/react-ui/public/assets/images/component-icon-5-Pending.png index 31125144..65815355 100644 Binary files a/react-ui/public/assets/images/component-icon-5-Pending.png and b/react-ui/public/assets/images/component-icon-5-Pending.png differ diff --git a/react-ui/public/assets/images/component-icon-5-Running.png b/react-ui/public/assets/images/component-icon-5-Running.png index ad44c4c0..37a609a8 100644 Binary files a/react-ui/public/assets/images/component-icon-5-Running.png and b/react-ui/public/assets/images/component-icon-5-Running.png differ diff --git a/react-ui/public/assets/images/component-icon-5-Skipped.png b/react-ui/public/assets/images/component-icon-5-Skipped.png new file mode 100644 index 00000000..4685f2fd Binary files /dev/null and b/react-ui/public/assets/images/component-icon-5-Skipped.png differ diff --git a/react-ui/public/assets/images/component-icon-5-Succeeded.png b/react-ui/public/assets/images/component-icon-5-Succeeded.png index 6981591e..c96e1748 100644 Binary files a/react-ui/public/assets/images/component-icon-5-Succeeded.png and b/react-ui/public/assets/images/component-icon-5-Succeeded.png differ diff --git a/react-ui/public/assets/images/component-icon-5.png b/react-ui/public/assets/images/component-icon-5.png index e1c284e4..2a56ee76 100644 Binary files a/react-ui/public/assets/images/component-icon-5.png and b/react-ui/public/assets/images/component-icon-5.png differ diff --git a/react-ui/public/assets/images/component-icon-6-Failed.png b/react-ui/public/assets/images/component-icon-6-Failed.png index 5bf8ed50..8ad38ef0 100644 Binary files a/react-ui/public/assets/images/component-icon-6-Failed.png and b/react-ui/public/assets/images/component-icon-6-Failed.png differ diff --git a/react-ui/public/assets/images/component-icon-6-Omitted.png b/react-ui/public/assets/images/component-icon-6-Omitted.png index 89e477ca..8999b577 100644 Binary files a/react-ui/public/assets/images/component-icon-6-Omitted.png and b/react-ui/public/assets/images/component-icon-6-Omitted.png differ diff --git a/react-ui/public/assets/images/component-icon-6-Pending.png b/react-ui/public/assets/images/component-icon-6-Pending.png index 24e83971..8c8c1639 100644 Binary files a/react-ui/public/assets/images/component-icon-6-Pending.png and b/react-ui/public/assets/images/component-icon-6-Pending.png differ diff --git a/react-ui/public/assets/images/component-icon-6-Running.png b/react-ui/public/assets/images/component-icon-6-Running.png index e45b1fbb..012f05ca 100644 Binary files a/react-ui/public/assets/images/component-icon-6-Running.png and b/react-ui/public/assets/images/component-icon-6-Running.png differ diff --git a/react-ui/public/assets/images/component-icon-6-Skipped.png b/react-ui/public/assets/images/component-icon-6-Skipped.png new file mode 100644 index 00000000..8999b577 Binary files /dev/null and b/react-ui/public/assets/images/component-icon-6-Skipped.png differ diff --git a/react-ui/public/assets/images/component-icon-6-Succeeded.png b/react-ui/public/assets/images/component-icon-6-Succeeded.png index 8d4a4680..c388f7db 100644 Binary files a/react-ui/public/assets/images/component-icon-6-Succeeded.png and b/react-ui/public/assets/images/component-icon-6-Succeeded.png differ diff --git a/react-ui/public/assets/images/component-icon-6.png b/react-ui/public/assets/images/component-icon-6.png index 7676a037..6bfbbf6a 100644 Binary files a/react-ui/public/assets/images/component-icon-6.png and b/react-ui/public/assets/images/component-icon-6.png differ diff --git a/react-ui/public/assets/images/component-icon-7-Skipped.png b/react-ui/public/assets/images/component-icon-7-Skipped.png new file mode 100644 index 00000000..33a4445e Binary files /dev/null and b/react-ui/public/assets/images/component-icon-7-Skipped.png differ diff --git a/react-ui/src/hooks/index.ts b/react-ui/src/hooks/index.ts index d0c7705a..7c5cae63 100644 --- a/react-ui/src/hooks/index.ts +++ b/react-ui/src/hooks/index.ts @@ -1,4 +1,11 @@ -import { useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; + +/** + * Generates a state reference with the initial value. + * + * @param initialValue - The initial value for the state + * @return An array containing the state value, state setter function, and a mutable reference object + */ export function useStateRef(initialValue: T) { const [value, setValue] = useState(initialValue); @@ -10,3 +17,23 @@ export function useStateRef(initialValue: T) { return [value, setValue, ref] as const; } + +/** + * Generates a custom hook for managing the visibility state of a modal. + * + * @param initialValue - The initial visibility state of the modal. + * @return An array containing the visibility state and functions to open and close the modal. + */ +export function useModal(initialValue: boolean) { + const [visible, setVisible] = useState(initialValue); + + const open = useCallback(() => { + setVisible(true); + }, []); + + const close = useCallback(() => { + setVisible(false); + }, []); + + return [visible, open, close]; +} diff --git a/react-ui/src/pages/Dataset/datasetIntro.jsx b/react-ui/src/pages/Dataset/datasetIntro.jsx index e3cf7baf..c32f4541 100644 --- a/react-ui/src/pages/Dataset/datasetIntro.jsx +++ b/react-ui/src/pages/Dataset/datasetIntro.jsx @@ -54,7 +54,7 @@ const Dataset = () => { const [dialogTitle, setDialogTitle] = useState('新建版本'); const [isModalOpen, setIsModalOpen] = useState(false); const [datasetDetailObj, setDatasetDetailObj] = useState({}); - const [version, setVersion] = useState(''); + const [version, setVersion] = useState(null); const [versionList, setVersionList] = useState([]); const locationParams = useParams(); //新版本获取路由参数接口 const [wordList, setWordList] = useState([]); @@ -109,27 +109,24 @@ const Dataset = () => { onOk: () => { deleteDatasetVersion({ dataset_id: locationParams.id, version }).then((ret) => { - message.success('删除成功'); + setVersion(null); + getDatasetVersionList(); getDatasetVersions({ version, dataset_id: locationParams.id }); + message.success('删除成功'); }); }, }); }; const onFinish = (values) => { addDatasetVersionDetail(formList).then((ret) => { - console.log(ret); getDatasetVersionList(); setIsModalOpen(false); + message.success('创建成功'); }); }; const getDatasetVersions = (params) => { getDatasetVersionIdList(params).then((res) => { - setWordList( - res.data.map((v) => ({ - ...v, - key: v.id, - })), - ); + setWordList(res.data); }); }; const handleChange = (value) => { @@ -242,6 +239,7 @@ const Dataset = () => { width: 160, }} allowClear + value={version} onChange={handleChange} options={versionList} /> @@ -281,7 +279,7 @@ const Dataset = () => {
{wordList.length > 0 ? wordList[0].description : null}
- +
diff --git a/react-ui/src/pages/Experiment/experimentText/LogList.tsx b/react-ui/src/pages/Experiment/experimentText/LogList.tsx index 053819f4..0aff6360 100644 --- a/react-ui/src/pages/Experiment/experimentText/LogList.tsx +++ b/react-ui/src/pages/Experiment/experimentText/LogList.tsx @@ -1,4 +1,4 @@ -import { ExperimentStatus } from '../types'; +import { ExperimentStatus } from '../status'; import LogGroup, { type LogGroupProps } from './logGroup'; type LogListProps = { diff --git a/react-ui/src/pages/Experiment/experimentText/logGroup.tsx b/react-ui/src/pages/Experiment/experimentText/logGroup.tsx index 523645fa..40940bae 100644 --- a/react-ui/src/pages/Experiment/experimentText/logGroup.tsx +++ b/react-ui/src/pages/Experiment/experimentText/logGroup.tsx @@ -3,7 +3,7 @@ import { getExperimentPodsLog } from '@/services/experiment/index.js'; import { DoubleRightOutlined, DownOutlined, UpOutlined } from '@ant-design/icons'; import { Button } from 'antd'; import { useEffect, useState } from 'react'; -import { ExperimentStatus } from '../types'; +import { ExperimentStatus } from '../status'; import styles from './logGroup.less'; export type LogGroupProps = { diff --git a/react-ui/src/pages/Experiment/status.ts b/react-ui/src/pages/Experiment/status.ts index fc4eb586..0a7b6652 100644 --- a/react-ui/src/pages/Experiment/status.ts +++ b/react-ui/src/pages/Experiment/status.ts @@ -4,6 +4,17 @@ export interface StatusInfo { icon: string; } +export enum ExperimentStatus { + Running = 'Running', + Succeeded = 'Succeeded', + Pending = 'Pending', + Failed = 'Failed', + Error = 'Error', + Terminated = 'Terminated', + Skipped = 'Skipped', + Omitted = 'Omitted', +} + export const experimentStatusInfo: Record = { Running: { label: '运行中', diff --git a/react-ui/src/pages/Experiment/types.ts b/react-ui/src/pages/Experiment/types.ts deleted file mode 100644 index c90f310c..00000000 --- a/react-ui/src/pages/Experiment/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -export enum ExperimentStatus { - Running = 'Running', - Succeeded = 'Succeeded', - Pending = 'Pending', - Failed = 'Failed', - Error = 'Error', - Terminated = 'Terminated', - Skipped = 'Skipped', - Omitted = 'Omitted', -} diff --git a/react-ui/src/pages/Model/modelIntro.jsx b/react-ui/src/pages/Model/modelIntro.jsx index 2ce4a7e6..e4f1cf6c 100644 --- a/react-ui/src/pages/Model/modelIntro.jsx +++ b/react-ui/src/pages/Model/modelIntro.jsx @@ -54,7 +54,7 @@ const Dataset = () => { const [dialogTitle, setDialogTitle] = useState('新建版本'); const [isModalOpen, setIsModalOpen] = useState(false); const [datasetDetailObj, setDatasetDetailObj] = useState({}); - const [version, setVersion] = useState(''); + const [version, setVersion] = useState(null); const [versionList, setVersionList] = useState([]); const locationParams = useParams(); //新版本获取路由参数接口 console.log(locationParams); @@ -104,17 +104,19 @@ const Dataset = () => { onOk: () => { deleteModelVersion({ models_id: locationParams.id, version }).then((ret) => { - message.success('删除成功'); + setVersion(null); + getModelVersionsList(); getModelVersions({ version, models_id: locationParams.id }); + message.success('删除成功'); }); }, }); }; const onFinish = () => { addModelsVersionDetail(formList).then((ret) => { - console.log(ret); getModelVersionsList(); setIsModalOpen(false); + message.success('创建成功'); }); }; const getModelVersions = (params) => { @@ -140,7 +142,7 @@ const Dataset = () => { getModelVersions({ version: value, models_id: locationParams.id }); setVersion(value); } else { - setVersion(null); + setVersion(''); } }; const onFinishFailed = (errorInfo) => { @@ -237,6 +239,7 @@ const Dataset = () => { style={{ width: 160, }} + value={version} allowClear onChange={handleChange} options={versionList} @@ -277,7 +280,7 @@ const Dataset = () => {
{wordList.length > 0 ? wordList[0].description : null}
-
+
diff --git a/react-ui/src/pages/Pipeline/editPipeline/globalParamsDrawer.less b/react-ui/src/pages/Pipeline/editPipeline/globalParamsDrawer.less new file mode 100644 index 00000000..da9461c4 --- /dev/null +++ b/react-ui/src/pages/Pipeline/editPipeline/globalParamsDrawer.less @@ -0,0 +1,14 @@ +.form_item_block { + position: relative; + padding-top: 40px; + border-bottom: 1px dashed rgba(20, 49, 179, 0.12); +} +.delete_button { + position: absolute; + top: 5px; + right: 0; +} +.add_button { + margin-top: 15px; + padding: 0; +} diff --git a/react-ui/src/pages/Pipeline/editPipeline/globalParamsDrawer.tsx b/react-ui/src/pages/Pipeline/editPipeline/globalParamsDrawer.tsx new file mode 100644 index 00000000..513f5e05 --- /dev/null +++ b/react-ui/src/pages/Pipeline/editPipeline/globalParamsDrawer.tsx @@ -0,0 +1,133 @@ +import { type PipelineGlobalParam } from '@/types'; +import { to } from '@/utils/promise'; +import { DeleteOutlined, PlusOutlined } from '@ant-design/icons'; +import { Button, Drawer, Form, Input, Radio } from 'antd'; +import { forwardRef, useImperativeHandle } from 'react'; +import styles from './globalParamsDrawer.less'; + +type GlobalParamsDrawerProps = { + open: boolean; + onClose: () => void; + globalParam: PipelineGlobalParam[]; +}; + +const GlobalParamsDrawer = forwardRef( + ({ open = false, onClose, globalParam = [] }: GlobalParamsDrawerProps, ref) => { + const [form] = Form.useForm(); + + useImperativeHandle(ref, () => ({ + getFieldsValue: async () => { + const [res, error] = await to(form.validateFields()); + if (res && !error) { + const values = form.getFieldsValue(); + return values; + } else { + return Promise.reject(error); + } + }, + })); + return ( + +
+ + {(fields, { add, remove }) => ( + <> + {fields.map(({ key, name, ...restField }) => ( +
+ + + + + + + + + 字符串 + 整型 + 布尔类型 + + + + + + + + + + + + +
+ ))} + + + + + )} +
+ +
+ ); + }, +); + +export default GlobalParamsDrawer; diff --git a/react-ui/src/pages/Pipeline/editPipeline/index.jsx b/react-ui/src/pages/Pipeline/editPipeline/index.jsx index d62f56c1..2ecac4a3 100644 --- a/react-ui/src/pages/Pipeline/editPipeline/index.jsx +++ b/react-ui/src/pages/Pipeline/editPipeline/index.jsx @@ -1,21 +1,27 @@ +import { useModal } from '@/hooks'; import { getWorkflowById, saveWorkflow } from '@/services/pipeline/index.js'; +import { to } from '@/utils/promise'; import { SaveOutlined } from '@ant-design/icons'; import { useEmotionCss } from '@ant-design/use-emotion-css'; import G6 from '@antv/g6'; import { Button, message } from 'antd'; -import React, { useEffect, useRef } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; +import { Icon } from 'umi'; import { s8 } from '../../../utils'; import Styles from './editPipeline.less'; +import GlobalParamsDrawer from './globalParamsDrawer'; import ModelMenus from './modelMenus'; import Props from './props'; -const editPipeline = (React.FC = () => { + +let graph = null; + +const EditPipeline = () => { const propsRef = useRef(); const navgite = useNavigate(); // const [contextMenu,setContextMenu]=useState({}) let contextMenu = {}; const locationParams = useParams(); //新版本获取路由参数接口 - let graph = null; let sourceAnchorIdx, targetAnchorIdx; const pipelineContainer = useEmotionCss(() => { return { @@ -53,6 +59,9 @@ const editPipeline = (React.FC = () => { }; }); const graphRef = useRef(); + const paramsDrawerRef = useRef(); + const [paramsDrawerVisible, openParamsDrawer, closeParamsDrawer] = useModal(false); + const [globalParam, setGlobalParam] = useState([]); const onDragEnd = (val) => { console.log(val, 'eee'); @@ -74,35 +83,37 @@ const editPipeline = (React.FC = () => { console.log(graph); }; const formChange = (val) => { - const data = graph.save(); - const index = data.nodes.findIndex((item) => { - return item.id === val.id; - }); - data.nodes[index] = val; - graph.changeData(data); - graph.render(); + if (graph) { + const data = graph.save(); + const index = data.nodes.findIndex((item) => { + return item.id === val.id; + }); + data.nodes[index] = val; + graph.changeData(data); + graph.render(); + } }; - const savePipeline = (val) => { + const savePipeline = async (val) => { + const [res, error] = await to(paramsDrawerRef.current.getFieldsValue()); + if (error) { + message.error('全局参数配置有误'); + return; + } const data = graph.save(); console.log(data); let params = { ...locationParams, dag: JSON.stringify(data), + global_param: JSON.stringify(res.global_param), }; saveWorkflow(params).then((ret) => { - console.log(ret); - if (ret.code == 200) { - message.success('保存成功'); - setTimeout(() => { - if (val) { - navgite({ pathname: `/pipeline` }); - } - }, 500); - } else { - message.error('保存失败'); - } + message.success('保存成功'); + setTimeout(() => { + if (val) { + navgite({ pathname: `/pipeline` }); + } + }, 500); }); - console.log(params); }; const handlerClick = (e) => { e.stopPropagation(); @@ -258,13 +269,12 @@ const editPipeline = (React.FC = () => { }; const getFirstWorkflow = (val) => { getWorkflowById(val).then((ret) => { - console.log(ret); - if (ret.code == 200) { - if (graph && ret.data && ret.data.dag) { - getGraphData(JSON.parse(ret.data.dag)); - } + if (ret && ret.data) { + setGlobalParam(ret.data.global_param); + } + if (graph && ret.data && ret.data.dag) { + getGraphData(JSON.parse(ret.data.dag)); } - // graph&&graph.data(JSON.parse(ret.dag)) // graph.render() }); @@ -334,7 +344,6 @@ const editPipeline = (React.FC = () => { }); graph.off('dblclick', handlerClick); }; - console.log(contextMenu); }, []); const initGraph = () => { const fittingString = (str, maxWidth, fontSize) => { @@ -601,8 +610,10 @@ const editPipeline = (React.FC = () => { }); graph.on('dblclick', (e) => { console.log(e.item); - graph.setItemState(e.item, 'nodeClicked', true); - handlerClick(e); + if (e.item) { + graph.setItemState(e.item, 'nodeClicked', true); + handlerClick(e); + } }); graph.on('click', (e) => { console.log(e.item); @@ -690,11 +701,18 @@ const editPipeline = (React.FC = () => {
+
+
); -}); -export default editPipeline; +}; +export default EditPipeline; diff --git a/react-ui/src/services/dataset/index.js b/react-ui/src/services/dataset/index.js index 7d822ebd..1b483622 100644 --- a/react-ui/src/services/dataset/index.js +++ b/react-ui/src/services/dataset/index.js @@ -94,7 +94,7 @@ export function deleteModelVersion(params) { } // 新增数据集版本 export function addDatasetVersionDetail(data) { - return request(`/api/mmp//datasetVersion/addDatasetVersions`, { + return request(`/api/mmp/datasetVersion/addDatasetVersions`, { method: 'POST', headers: { 'Content-Type': 'application/json;charset=UTF-8', diff --git a/react-ui/src/services/experiment/index.js b/react-ui/src/services/experiment/index.js index 346de9d7..14127887 100644 --- a/react-ui/src/services/experiment/index.js +++ b/react-ui/src/services/experiment/index.js @@ -53,10 +53,10 @@ export function getQueryByExperimentLog(data) { }); } // 查询实例节点结果 -export function getNodeResult(params) { +export function getNodeResult(data) { return request(`/api/mmp/experimentIns/nodeResult/`, { - method: 'GET', - params, + method: 'POST', + data, }); } diff --git a/react-ui/src/types.ts b/react-ui/src/types.ts new file mode 100644 index 00000000..80db0c9a --- /dev/null +++ b/react-ui/src/types.ts @@ -0,0 +1,9 @@ +// 流水线全局参数 +export type PipelineGlobalParam = { + workflow_id: number; + param_name: string; + description: string; + param_type: number; + param_value: number | string | boolean; + is_sensitive: number; +};