From cfd166c618efd855071f9efb6ccc9c0bc34d490f Mon Sep 17 00:00:00 2001
From: Angeli <527971893@qq.com>
Date: Tue, 16 Jul 2024 14:11:37 +0800
Subject: [PATCH] repo-sync-2024-07-16T14:11:06+0800
---
.../advanced-config-service.ts | 8 +++-
.../advanced-config-view.tsx | 9 +++-
.../index.tsx | 7 +--
.../observations-quantiles-render/index.tsx | 8 ++--
.../default-render-template.tsx | 35 +++++++++++---
.../data-table-tree/datatable-tree.view.tsx | 6 ++-
.../project-edit.service.tsx | 10 ++++
.../header-project-list/project-list.view.tsx | 5 +-
.../main-dag/graph-request-service.tsx | 2 +
.../src/modules/main-dag/graph-service.ts | 48 +++++++++++++++----
.../src/modules/managed-node-list/index.tsx | 2 +-
.../modules/message-center/message.service.ts | 2 +
.../src/modules/pipeline/pipeline-service.ts | 4 ++
.../components/edit-project/index.tsx | 21 ++++++--
apps/platform/src/pages/new-node.tsx | 8 +++-
15 files changed, 140 insertions(+), 35 deletions(-)
diff --git a/apps/platform/src/modules/advanced-config/advanced-config-drawer/advanced-config-service.ts b/apps/platform/src/modules/advanced-config/advanced-config-drawer/advanced-config-service.ts
index 598e4bc..e7c8b6e 100644
--- a/apps/platform/src/modules/advanced-config/advanced-config-drawer/advanced-config-service.ts
+++ b/apps/platform/src/modules/advanced-config/advanced-config-drawer/advanced-config-service.ts
@@ -52,7 +52,13 @@ export class advancedConfigService extends Model {
};
getSetting = async (graphId: string, projectId: string) => {
- if (!graphId || !projectId) return;
+ if (!graphId || !projectId) {
+ this.config = {
+ maxParallelism: 1,
+ dataSourceConfig: [],
+ };
+ return;
+ }
this.loading = true;
const { status, data } = await getGraphDetail({
graphId,
diff --git a/apps/platform/src/modules/advanced-config/advanced-config-drawer/advanced-config-view.tsx b/apps/platform/src/modules/advanced-config/advanced-config-drawer/advanced-config-view.tsx
index d6889dc..9669e1d 100644
--- a/apps/platform/src/modules/advanced-config/advanced-config-drawer/advanced-config-view.tsx
+++ b/apps/platform/src/modules/advanced-config/advanced-config-drawer/advanced-config-view.tsx
@@ -12,9 +12,11 @@ import { getModel, useModel } from '@/util/valtio-helper';
import { advancedConfigService } from './advanced-config-service';
import styles from './index.less';
+import { ProjectEditService } from '@/modules/layout/header-project-list/project-edit.service';
export const AdvancedConfig = () => {
const modalManager = useModel(DefaultModalManager);
+ const projectEditService = useModel(ProjectEditService);
const service = useModel(advancedConfigService);
const loginService = useModel(LoginService);
@@ -183,7 +185,12 @@ export const AdvancedConfig = () => {
-
diff --git a/apps/platform/src/modules/component-config/config-item-render/custom-render/linear-model-parameters-modification/index.tsx b/apps/platform/src/modules/component-config/config-item-render/custom-render/linear-model-parameters-modification/index.tsx
index 410f762..8464fd3 100644
--- a/apps/platform/src/modules/component-config/config-item-render/custom-render/linear-model-parameters-modification/index.tsx
+++ b/apps/platform/src/modules/component-config/config-item-render/custom-render/linear-model-parameters-modification/index.tsx
@@ -4,17 +4,14 @@ import { Button, Space, Tooltip } from 'antd';
import React, { useEffect } from 'react';
import type { GraphNodeDetail } from '@/modules/component-config/component-config-protocol';
-import mainDag from '@/modules/main-dag/dag';
-import { Model, getModel, useModel } from '@/util/valtio-helper';
+import { getModel, useModel } from '@/util/valtio-helper';
-import type { NodeAllInfo } from '../../config-render-protocol';
import { ParamsModificationsRenderView } from '../parameters-modification/parameters-modification-view';
import { DefaultRedoUndoService } from '../redo-undo/redo-undo-service';
import { ParametersResultDrawerView } from './drawer';
import { ModelParametersModificationService } from './model-parameters-modification-service';
-import { SourceTypeEnum } from './types';
-import type { CurrOperationEnum, ParametersData, ParametersDatum } from './types';
+import type { ParametersData, ParametersDatum } from './types';
/** 2. 把表单格式,serializer 序列化,转换成 node info */
export const modelModificationsSerializer = (data: ParametersData) => {
diff --git a/apps/platform/src/modules/component-config/config-item-render/custom-render/observations-quantiles-render/index.tsx b/apps/platform/src/modules/component-config/config-item-render/custom-render/observations-quantiles-render/index.tsx
index 6cef70f..2ad372f 100644
--- a/apps/platform/src/modules/component-config/config-item-render/custom-render/observations-quantiles-render/index.tsx
+++ b/apps/platform/src/modules/component-config/config-item-render/custom-render/observations-quantiles-render/index.tsx
@@ -29,9 +29,7 @@ const QuatitiesWrapper = (props: { children: React.ReactNode }) => {
采样方式
1,但选择不放回采样则会报错处理。'}
>
@@ -95,7 +93,9 @@ const ObservationsQuantilesRender: React.FC> = (prop) => {
观测值分位点}
+ label={
+ {translation[node.name] || node.name}
+ }
labelCol={{ span: 12 }}
rules={[
{ required: true, message: '请输入观测值分位点' },
diff --git a/apps/platform/src/modules/component-config/config-item-render/default-render-template.tsx b/apps/platform/src/modules/component-config/config-item-render/default-render-template.tsx
index 9a4fdfb..3c35805 100644
--- a/apps/platform/src/modules/component-config/config-item-render/default-render-template.tsx
+++ b/apps/platform/src/modules/component-config/config-item-render/default-render-template.tsx
@@ -119,28 +119,51 @@ export const DefaultInputNumber: React.FC> = (config) => {
},
{
validator: (_, value) => {
+ let errorText = '取值应该';
if (value === null || value === undefined) return Promise.resolve();
if (minVal !== null && minVal !== undefined) {
if (minInclusive) {
- if (value < minVal)
- return Promise.reject(new Error(`取值应该大于等于${minVal}`));
+ errorText += `大于等于${minVal}`;
} else {
- if (value <= minVal)
- return Promise.reject(new Error(`取值应该大于${minVal}`));
+ errorText +=
+ (errorText.replace('取值应该', '') ? `且` : '') + `大于${minVal}`;
+ }
+ }
+
+ if (maxVal !== null && maxVal !== undefined) {
+ if (maxInclusive) {
+ errorText +=
+ (errorText.replace('取值应该', '') ? `且` : '') + `小于等于${maxVal}`;
+ } else {
+ errorText +=
+ (errorText.replace('取值应该', '') ? `且` : '') + `小于${maxVal}`;
+ }
+ }
+
+ if (minVal !== null && minVal !== undefined) {
+ if (minInclusive) {
+ if (value < minVal) {
+ return Promise.reject(new Error(errorText));
+ }
+ } else {
+ if (value <= minVal) {
+ return Promise.reject(new Error(errorText));
+ }
}
}
if (maxVal !== null && maxVal !== undefined) {
if (maxInclusive) {
if (value > maxVal) {
- return Promise.reject(new Error(`取值应该小于等于${maxVal}`));
+ return Promise.reject(new Error(errorText));
}
} else {
if (value >= maxVal) {
- return Promise.reject(new Error(`取值应该小于${maxVal}`));
+ return Promise.reject(new Error(errorText));
}
}
}
+
return Promise.resolve();
},
},
diff --git a/apps/platform/src/modules/data-table-tree/datatable-tree.view.tsx b/apps/platform/src/modules/data-table-tree/datatable-tree.view.tsx
index 91adb62..2d78b51 100644
--- a/apps/platform/src/modules/data-table-tree/datatable-tree.view.tsx
+++ b/apps/platform/src/modules/data-table-tree/datatable-tree.view.tsx
@@ -24,11 +24,14 @@ import { getModel, Model, useModel } from '@/util/valtio-helper';
import { DatatableTreeService } from './datatable-tree.service';
import styles from './index.less';
import { openNewTab } from '@/util/path';
+import { ProjectEditService } from '../layout/header-project-list/project-edit.service';
const { Text } = Typography;
export const DatatableTreeComponent = () => {
const viewInstance = useModel(DatatableTreeView);
+ const projectEditService = useModel(ProjectEditService);
+
const ref1 = useRef(null);
const { pathname, search } = useLocation();
const { projectId } = parse(search);
@@ -191,7 +194,8 @@ export const DatatableTreeComponent = () => {
)}
{item.nodeId === currentLoginNodeId &&
- hasAccess({ type: [Platform.AUTONOMY] }) && (
+ hasAccess({ type: [Platform.AUTONOMY] }) &&
+ !projectEditService.canEdit.gotoDataManagerDisabled && (
{
diff --git a/apps/platform/src/modules/layout/header-project-list/project-edit.service.tsx b/apps/platform/src/modules/layout/header-project-list/project-edit.service.tsx
index e13704d..5cbbedf 100644
--- a/apps/platform/src/modules/layout/header-project-list/project-edit.service.tsx
+++ b/apps/platform/src/modules/layout/header-project-list/project-edit.service.tsx
@@ -16,6 +16,8 @@ export class ProjectEditService extends Model {
recordStoptaskDisabled: false,
pipelineEditDisabled: false,
submitModelDisabled: false,
+ advancedConfigDisabled: false,
+ gotoDataManagerDisabled: false,
};
changeCanEditTrue = () => {
@@ -30,6 +32,8 @@ export class ProjectEditService extends Model {
recordStoptaskDisabled: true,
pipelineEditDisabled: true,
submitModelDisabled: true,
+ advancedConfigDisabled: true,
+ gotoDataManagerDisabled: true,
};
};
@@ -45,6 +49,8 @@ export class ProjectEditService extends Model {
recordStoptaskDisabled: false,
pipelineEditDisabled: false,
submitModelDisabled: false,
+ advancedConfigDisabled: false,
+ gotoDataManagerDisabled: false,
};
};
@@ -85,4 +91,8 @@ type CanEditType = {
pipelineEditDisabled: boolean;
/** 画布提交模型 */
submitModelDisabled: boolean;
+ /** 全局配置保存配置 */
+ advancedConfigDisabled: boolean;
+ /** 画布数据集展示去节点管理添加数据按钮 */
+ gotoDataManagerDisabled: boolean;
};
diff --git a/apps/platform/src/modules/layout/header-project-list/project-list.view.tsx b/apps/platform/src/modules/layout/header-project-list/project-list.view.tsx
index 23be8e5..43a8e10 100644
--- a/apps/platform/src/modules/layout/header-project-list/project-list.view.tsx
+++ b/apps/platform/src/modules/layout/header-project-list/project-list.view.tsx
@@ -15,6 +15,8 @@ import { Model, getModel, useModel } from '@/util/valtio-helper';
import styles from './index.less';
import { ProjectEditService } from './project-edit.service';
+import { DefaultModalManager } from '@/modules/dag-modal-manager';
+import { AdvancedConfigDrawer } from '@/modules/advanced-config/advanced-config-drawer/advanced-config-view';
export type ProjectVO = API.ProjectVO;
@@ -80,6 +82,7 @@ export const ProjectListComponent: React.FC = () => {
export class HeaderProjectListView extends Model {
projectEditService = getModel(ProjectEditService);
dagLayoutView = getModel(DagLayoutView);
+ modalManager = getModel(DefaultModalManager);
projectList: ProjectVO[] = [];
@@ -130,7 +133,7 @@ export class HeaderProjectListView extends Model {
},
{ origin },
);
-
+ this.modalManager.closeModal(AdvancedConfigDrawer.id);
this.dagLayoutView.setActiveKey('pipeline');
};
}
diff --git a/apps/platform/src/modules/main-dag/graph-request-service.tsx b/apps/platform/src/modules/main-dag/graph-request-service.tsx
index ddc47ce..f8acd89 100644
--- a/apps/platform/src/modules/main-dag/graph-request-service.tsx
+++ b/apps/platform/src/modules/main-dag/graph-request-service.tsx
@@ -220,6 +220,8 @@ export class GraphRequestService extends DefaultRequestService {
async saveDag(dagId: string, model: GraphModel) {
const { nodes: n, edges: e } = model;
+ this.graphData = model;
+
const { mode } = parse(window.location.search);
const nodes = await Promise.all(
n.map(async (i) => {
diff --git a/apps/platform/src/modules/main-dag/graph-service.ts b/apps/platform/src/modules/main-dag/graph-service.ts
index a6de62b..ca35a82 100644
--- a/apps/platform/src/modules/main-dag/graph-service.ts
+++ b/apps/platform/src/modules/main-dag/graph-service.ts
@@ -1,6 +1,11 @@
import type { Edge, Graph } from '@antv/x6';
import { ActionType, NodeStatus } from '@secretflow/dag';
-import type { GraphNode, Node, GraphEventHandlerProtocol } from '@secretflow/dag';
+import type {
+ GraphNode,
+ Node,
+ GraphEventHandlerProtocol,
+ GraphModel,
+} from '@secretflow/dag';
import { Emitter } from '@secretflow/utils';
import { message } from 'antd';
import { parse } from 'query-string';
@@ -12,7 +17,10 @@ import {
import { updateGraphNode } from '@/services/secretpad/GraphController';
import { getModel } from '@/util/valtio-helper';
-import type { ComponentConfig } from '../component-config/component-config-protocol';
+import type {
+ ComponentConfig,
+ StructConfigNode,
+} from '../component-config/component-config-protocol';
import { ComponentConfigRegistry } from '../component-config/component-config-registry';
import { DefaultComponentConfigService } from '../component-config/component-config-service';
import { componentConfigDrawer } from '../component-config/config-modal';
@@ -250,7 +258,8 @@ export class GraphService implements GraphEventHandlerProtocol {
CUSTOM_COMPONENT.ModelParamModification,
].includes(node?.codeName)
) {
- const { attrs, attrPaths, ...restNodeDef } = node.nodeDef || {};
+ const defaultNodeDef = this.getDefaultNodeDef(node);
+ const { attrs, attrPaths, ...restNodeDef } = node.nodeDef || defaultNodeDef;
const updatedNode = {
...node,
inputs: [sourcePortId],
@@ -264,7 +273,7 @@ export class GraphService implements GraphEventHandlerProtocol {
node: updatedNode,
});
- mainDag.dataService.fetch();
+ await mainDag.dataService.fetch();
}
}
}
@@ -289,8 +298,25 @@ export class GraphService implements GraphEventHandlerProtocol {
].includes(node?.codeName),
)
.map((node) => node.id);
+ await this.cleanNodeDef(binningModificationNodeIds);
+ }
- this.cleanNodeDef(binningModificationNodeIds);
+ getDefaultNodeDef(node: GraphNode) {
+ const { mode } = parse(window.location.search);
+ const { codeName } = node;
+ const config = this.componentConfigRegistry.getComponentConfig(
+ codeName,
+ mode as ComputeMode,
+ );
+ const { version, domain } = config as StructConfigNode;
+
+ const [, name] = codeName.split('/');
+
+ return {
+ version,
+ domain,
+ name,
+ };
}
async cleanNodeDef(nodeIds: string[]) {
@@ -301,11 +327,13 @@ export class GraphService implements GraphEventHandlerProtocol {
const { search } = window.location;
const { dagId } = parse(search);
- const dataNodes = mainDag.dataService.nodes;
+ const dataNodes = (mainDag.requestService.graphData as GraphModel).nodes;
+
+ const nodes = dataNodes.map((node: GraphNode) => {
+ const defaultNodeDef = this.getDefaultNodeDef(node);
- const nodes = dataNodes.map((node) => {
if (nodeIds.includes(node?.id)) {
- const { attrs, attrPaths, ...restNodeDef } = node?.nodeDef || {};
+ const { attrs, attrPaths, ...restNodeDef } = node?.nodeDef || defaultNodeDef;
return {
...node,
nodeDef: {
@@ -323,7 +351,7 @@ export class GraphService implements GraphEventHandlerProtocol {
});
// 更新最新的 nodes
- mainDag.dataService.fetch();
+ await mainDag.dataService.fetch();
}
saveTemplateQuickConfig = async (quickConfig: {
@@ -401,7 +429,7 @@ export class GraphService implements GraphEventHandlerProtocol {
)
.map((node) => node.id);
- this.cleanNodeDef(binningModificationNodeIds);
+ await this.cleanNodeDef(binningModificationNodeIds);
} else {
message.error(status?.msg || '操作失败');
}
diff --git a/apps/platform/src/modules/managed-node-list/index.tsx b/apps/platform/src/modules/managed-node-list/index.tsx
index 766ff51..c098ec9 100644
--- a/apps/platform/src/modules/managed-node-list/index.tsx
+++ b/apps/platform/src/modules/managed-node-list/index.tsx
@@ -188,7 +188,7 @@ export const ManagedNodeListComponent = () => {
type="link"
onClick={() => {
const url =
- 'https://www.secretflow.org.cn/docs/quickstart/fn9h9yqoievouz2a';
+ 'https://www.secretflow.org.cn/zh-CN/docs/secretpad-all-in-one/center_deploy/platform_installation_guidelines_center';
const a = document.createElement('a');
a.href = url;
a.target = '_blank';
diff --git a/apps/platform/src/modules/message-center/message.service.ts b/apps/platform/src/modules/message-center/message.service.ts
index c6b9aab..69ffc4c 100644
--- a/apps/platform/src/modules/message-center/message.service.ts
+++ b/apps/platform/src/modules/message-center/message.service.ts
@@ -1,5 +1,6 @@
import { list, reply, pending, detail } from '@/services/secretpad/MessageController';
import { Model } from '@/util/valtio-helper';
+import { message } from 'antd';
/**
* This is the service for a message center list. There are list of message items. It allows processing
@@ -105,6 +106,7 @@ export class MessageService extends Model {
this.messageDetail = info.data;
} else {
this.messageDetail = {};
+ message.error(info?.status?.msg);
}
this.messageInfoLoading = false;
};
diff --git a/apps/platform/src/modules/pipeline/pipeline-service.ts b/apps/platform/src/modules/pipeline/pipeline-service.ts
index d265ac9..107ac96 100644
--- a/apps/platform/src/modules/pipeline/pipeline-service.ts
+++ b/apps/platform/src/modules/pipeline/pipeline-service.ts
@@ -136,6 +136,8 @@ export class DefaultPipelineService extends Model {
if (project.status !== ProjectStatus.ARCHIVED) {
this.projectEditService.changeCanEdit({
pipelineEditDisabled: false,
+ advancedConfigDisabled: false,
+ gotoDataManagerDisabled: false,
});
}
const pipeline = this.pipelines.find((p) => p.graphId === pipelineId);
@@ -156,6 +158,8 @@ export class DefaultPipelineService extends Model {
pipelineEditDisabled: false,
runAllToolTip: '非我方节点创建,仅可查看',
submitModelDisabled: false,
+ advancedConfigDisabled: false,
+ gotoDataManagerDisabled: false,
});
} else {
this.projectEditService.changeCanEditFalse();
diff --git a/apps/platform/src/modules/project-list/components/edit-project/index.tsx b/apps/platform/src/modules/project-list/components/edit-project/index.tsx
index 228d275..40e3b9b 100644
--- a/apps/platform/src/modules/project-list/components/edit-project/index.tsx
+++ b/apps/platform/src/modules/project-list/components/edit-project/index.tsx
@@ -24,9 +24,13 @@ export const EditProjectModal = ({
};
useEffect(() => {
- form.setFieldValue('projectName', data.projectName);
- form.setFieldValue('description', data.description);
- }, [data]);
+ if (isModalOpen) {
+ form.setFieldValue('projectName', data.projectName);
+ form.setFieldValue('description', data.description);
+ } else {
+ form.resetFields();
+ }
+ }, [data, isModalOpen]);
return (
项目描述
diff --git a/apps/platform/src/pages/new-node.tsx b/apps/platform/src/pages/new-node.tsx
index 5908072..ee3f60a 100644
--- a/apps/platform/src/pages/new-node.tsx
+++ b/apps/platform/src/pages/new-node.tsx
@@ -62,7 +62,7 @@ const NodePage = () => {
const myNodeService = useModel(MyNodeService);
const [menuItems, setMenuItems] = useState