Initial commit
This commit is contained in:
@@ -33,7 +33,7 @@ export interface ElementParameter {
|
|||||||
templateType: NullableString,
|
templateType: NullableString,
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ElementPosition {
|
export interface GraphPosition {
|
||||||
x: number;
|
x: number;
|
||||||
y: number;
|
y: number;
|
||||||
}
|
}
|
||||||
@@ -48,18 +48,18 @@ export interface ElementVariable {
|
|||||||
|
|
||||||
export interface BaseElement {
|
export interface BaseElement {
|
||||||
id: number;
|
id: number;
|
||||||
key: string;
|
key: NullableString;
|
||||||
name: string;
|
name: NullableString;
|
||||||
type: string;
|
type: NullableString;
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
position: ElementPosition;
|
position: GraphPosition;
|
||||||
category: NullableString;
|
category: NullableString;
|
||||||
element?: DraggableElement;
|
element?: DraggableElement;
|
||||||
[key: string]: unknown;
|
[key: string]: unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TaskNodeRect {
|
export interface GraphTaskRect {
|
||||||
width?: number;
|
width?: number;
|
||||||
height?: number;
|
height?: number;
|
||||||
x?: number;
|
x?: number;
|
||||||
|
|||||||
@@ -155,6 +155,7 @@ export const useGraphCanvas = (readonly: boolean = false): UseGraphCanvas => {
|
|||||||
|
|
||||||
if (!existingEdge) {
|
if (!existingEdge) {
|
||||||
sourceEdges.push({
|
sourceEdges.push({
|
||||||
|
id: sourceData.id,
|
||||||
key: edge.id,
|
key: edge.id,
|
||||||
source: sourceNode.id,
|
source: sourceNode.id,
|
||||||
sourceName: sourceData.name,
|
sourceName: sourceData.name,
|
||||||
|
|||||||
@@ -17,56 +17,15 @@
|
|||||||
<!-- 节点内容区域 -->
|
<!-- 节点内容区域 -->
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
<div class="ks-designer-node-content">
|
<div class="ks-designer-node-content">
|
||||||
<div
|
<div class="ks-designer-node-row">
|
||||||
v-for="(item, index) in element?.children || []"
|
|
||||||
:key="item.id || index"
|
|
||||||
class="ks-designer-node-row"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
:data-port="`in-${item.id || index}`"
|
|
||||||
:title="`入桩: ${item.name}`"
|
|
||||||
class="port port-in"
|
|
||||||
magnet="passive"
|
|
||||||
></div>
|
|
||||||
|
|
||||||
<!-- child名称 -->
|
|
||||||
<div class="ks-designer-node-name">
|
|
||||||
{{ item.name }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 右侧出桩:只能作为连线源 -->
|
|
||||||
<div
|
|
||||||
:data-port="`out-${item.id || index}`"
|
|
||||||
:title="`出桩: ${item.name}`"
|
|
||||||
class="port port-out"
|
|
||||||
magnet="active"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="!(element?.children && element?.children?.length > 0)" class="ks-designer-node-row">
|
|
||||||
<div class="port port-in" data-port="in-0" magnet="passive"></div>
|
<div class="port port-in" data-port="in-0" magnet="passive"></div>
|
||||||
<div class="ks-designer-node-name" v-if="element?.category !== 'component'">
|
<div class="ks-designer-node-name" v-if="element?.category !== 'component'">
|
||||||
{{ element?.name ?? '-' }}
|
{{ element?.name ?? '-' }}
|
||||||
</div>
|
</div>
|
||||||
<div class="ks-designer-node-name" v-else>
|
|
||||||
<p>隐藏纬度: {{ element?.parameters?.hiddenLatitude ?? '-' }}</p>
|
|
||||||
<p>激活函数: {{ element?.parameters?.activationFunction ?? '-' }}</p>
|
|
||||||
</div>
|
|
||||||
<div class="port port-out" data-port="out-0" magnet="active"></div>
|
<div class="port port-out" data-port="out-0" magnet="active"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <div class="w-full" v-else>-->
|
|
||||||
<!-- <div class="ks-designer-node-content">-->
|
|
||||||
<!-- <div class="port port-in" data-port="in-0" magnet="passive"></div>-->
|
|
||||||
<!-- <div class="ks-designer-node-name">-->
|
|
||||||
<!-- <p>隐藏纬度: {{ element?.parameters?.hiddenLatitude ?? '-' }}</p>-->
|
|
||||||
<!-- <p>激活函数: {{ element?.parameters?.activationFunction ?? '-' }}</p>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <div class="port port-out" data-port="out-0" magnet="active"></div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
</a-card>
|
</a-card>
|
||||||
|
|
||||||
<template #overlay>
|
<template #overlay>
|
||||||
|
|||||||
@@ -31,21 +31,15 @@
|
|||||||
<a-textarea size="small" v-model:value="currentElement.outputs" />
|
<a-textarea size="small" v-model:value="currentElement.outputs" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<a-divider v-if="currentElement.settings && currentElement.settings.length > 0"/>
|
<a-divider v-if="currentElement.settings && currentElement.parameters.length > 0"/>
|
||||||
|
|
||||||
<a-form-item :label="setting.description" v-for="setting in currentElement.settings">
|
<a-form-item :label="setting.description" v-for="setting in currentElement.parameters">
|
||||||
<a-input-number size="small" style="width:100%;" v-if="setting.data_type === 'double'" v-model:value="setting.default_value" :placeholder="setting.description" />
|
<a-input-number size="small" style="width:100%;" v-if="setting.dataType === 'double'" v-model:value="setting.defaultValue" :placeholder="setting.description" />
|
||||||
<a-input v-else size="small" v-model:value="setting.default_value" :placeholder="setting.description" />
|
<a-input v-else size="small" v-model:value="setting.defaultValue" :placeholder="setting.description" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
|
|
||||||
<!-- <a-tab-pane key="2" tab="外观">-->
|
|
||||||
|
|
||||||
<!-- </a-tab-pane>-->
|
|
||||||
<!-- <a-tab-pane key="3" tab="系统">-->
|
|
||||||
|
|
||||||
<!-- </a-tab-pane>-->
|
|
||||||
</a-tabs>
|
</a-tabs>
|
||||||
|
|
||||||
<a-tabs v-model:activeKey="activeBottomTabsKey" class="ks-model-builder-tabs parameters-tabs">
|
<a-tabs v-model:activeKey="activeBottomTabsKey" class="ks-model-builder-tabs parameters-tabs">
|
||||||
|
|||||||
@@ -8,22 +8,22 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import type { NodeTemplate } from '../types';
|
import type { NodeTemplate } from '../types';
|
||||||
import type { GraphTaskElement, TaskNodeRect } from '../builder/element';
|
import type { GraphTaskElement, GraphTaskRect } from '../builder/element';
|
||||||
import { generateKey } from '@/utils/strings';
|
import { generateKey } from '@/utils/strings';
|
||||||
|
|
||||||
export const createGraphTaskElementFromTemplate = (
|
export const createGraphTaskElementFromTemplate = (
|
||||||
template: NodeTemplate,
|
template: NodeTemplate,
|
||||||
rect?: TaskNodeRect,
|
rect?: GraphTaskRect,
|
||||||
): GraphTaskElement => {
|
): GraphTaskElement => {
|
||||||
let realRect = { width: 200, height: 100, x: 0, y: 0, ...rect || {} }
|
let realRect = { width: 200, height: 100, x: 0, y: 0, ...rect || {} }
|
||||||
console.info('rect',rect)
|
console.info('rect',rect)
|
||||||
return {
|
return {
|
||||||
id: 0,
|
id: 0,
|
||||||
key: generateKey(template.type),
|
key: generateKey(template.type),
|
||||||
status: null,
|
type: 'task',
|
||||||
template: template.id,
|
template: template.id,
|
||||||
type: template.type,
|
|
||||||
name: template.name,
|
name: template.name,
|
||||||
|
category: template.type,
|
||||||
description: template.description,
|
description: template.description,
|
||||||
position: {
|
position: {
|
||||||
x: realRect.x ?? 0,
|
x: realRect.x ?? 0,
|
||||||
@@ -31,10 +31,9 @@ export const createGraphTaskElementFromTemplate = (
|
|||||||
},
|
},
|
||||||
width: realRect.width,
|
width: realRect.width,
|
||||||
height: realRect.height,
|
height: realRect.height,
|
||||||
// settings: JSON.parse(JSON.stringify(template.parameter_defs ?? [])),
|
|
||||||
inputs: null,
|
inputs: null,
|
||||||
outputs: null,
|
outputs: null,
|
||||||
parameters: {},
|
parameters: [],
|
||||||
variables: [
|
variables: [
|
||||||
{
|
{
|
||||||
key: generateKey('var_'),
|
key: generateKey('var_'),
|
||||||
|
|||||||
34
modeler/types/components.d.ts
vendored
34
modeler/types/components.d.ts
vendored
@@ -12,11 +12,8 @@ export {}
|
|||||||
/* prettier-ignore */
|
/* prettier-ignore */
|
||||||
declare module 'vue' {
|
declare module 'vue' {
|
||||||
export interface GlobalComponents {
|
export interface GlobalComponents {
|
||||||
AAvatar: typeof import('ant-design-vue/es')['Avatar']
|
|
||||||
AButton: typeof import('ant-design-vue/es')['Button']
|
AButton: typeof import('ant-design-vue/es')['Button']
|
||||||
ACard: typeof import('ant-design-vue/es')['Card']
|
ACard: typeof import('ant-design-vue/es')['Card']
|
||||||
ACarousel: typeof import('ant-design-vue/es')['Carousel']
|
|
||||||
ACheckbox: typeof import('ant-design-vue/es')['Checkbox']
|
|
||||||
ACol: typeof import('ant-design-vue/es')['Col']
|
ACol: typeof import('ant-design-vue/es')['Col']
|
||||||
ACollapse: typeof import('ant-design-vue/es')['Collapse']
|
ACollapse: typeof import('ant-design-vue/es')['Collapse']
|
||||||
ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
|
ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
|
||||||
@@ -24,34 +21,20 @@ declare module 'vue' {
|
|||||||
ADropdown: typeof import('ant-design-vue/es')['Dropdown']
|
ADropdown: typeof import('ant-design-vue/es')['Dropdown']
|
||||||
AEmpty: typeof import('ant-design-vue/es')['Empty']
|
AEmpty: typeof import('ant-design-vue/es')['Empty']
|
||||||
AFlex: typeof import('ant-design-vue/es')['Flex']
|
AFlex: typeof import('ant-design-vue/es')['Flex']
|
||||||
AFloatButton: typeof import('ant-design-vue/es')['FloatButton']
|
|
||||||
AForm: typeof import('ant-design-vue/es')['Form']
|
AForm: typeof import('ant-design-vue/es')['Form']
|
||||||
AFormItem: typeof import('ant-design-vue/es')['FormItem']
|
AFormItem: typeof import('ant-design-vue/es')['FormItem']
|
||||||
AFormItemRest: typeof import('ant-design-vue/es')['FormItemRest']
|
|
||||||
AInput: typeof import('ant-design-vue/es')['Input']
|
AInput: typeof import('ant-design-vue/es')['Input']
|
||||||
AInputGroup: typeof import('ant-design-vue/es')['InputGroup']
|
|
||||||
AInputNumber: typeof import('ant-design-vue/es')['InputNumber']
|
AInputNumber: typeof import('ant-design-vue/es')['InputNumber']
|
||||||
AInputPassword: typeof import('ant-design-vue/es')['InputPassword']
|
AInputPassword: typeof import('ant-design-vue/es')['InputPassword']
|
||||||
AInputSearch: typeof import('ant-design-vue/es')['InputSearch']
|
|
||||||
ALayout: typeof import('ant-design-vue/es')['Layout']
|
ALayout: typeof import('ant-design-vue/es')['Layout']
|
||||||
ALayoutContent: typeof import('ant-design-vue/es')['LayoutContent']
|
|
||||||
ALayoutHeader: typeof import('ant-design-vue/es')['LayoutHeader']
|
ALayoutHeader: typeof import('ant-design-vue/es')['LayoutHeader']
|
||||||
ALayoutSider: typeof import('ant-design-vue/es')['LayoutSider']
|
|
||||||
AList: typeof import('ant-design-vue/es')['List']
|
AList: typeof import('ant-design-vue/es')['List']
|
||||||
AListItem: typeof import('ant-design-vue/es')['ListItem']
|
AListItem: typeof import('ant-design-vue/es')['ListItem']
|
||||||
AMenu: typeof import('ant-design-vue/es')['Menu']
|
AMenu: typeof import('ant-design-vue/es')['Menu']
|
||||||
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
|
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
|
||||||
AModal: typeof import('ant-design-vue/es')['Modal']
|
|
||||||
APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
|
APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
|
||||||
APopover: typeof import('ant-design-vue/es')['Popover']
|
|
||||||
AProgress: typeof import('ant-design-vue/es')['Progress']
|
|
||||||
ARow: typeof import('ant-design-vue/es')['Row']
|
ARow: typeof import('ant-design-vue/es')['Row']
|
||||||
ASelect: typeof import('ant-design-vue/es')['Select']
|
|
||||||
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
|
|
||||||
ASlider: typeof import('ant-design-vue/es')['Slider']
|
|
||||||
ASpace: typeof import('ant-design-vue/es')['Space']
|
ASpace: typeof import('ant-design-vue/es')['Space']
|
||||||
ASteps: typeof import('ant-design-vue/es')['Steps']
|
|
||||||
ASubMenu: typeof import('ant-design-vue/es')['SubMenu']
|
|
||||||
ATable: typeof import('ant-design-vue/es')['Table']
|
ATable: typeof import('ant-design-vue/es')['Table']
|
||||||
ATabPane: typeof import('ant-design-vue/es')['TabPane']
|
ATabPane: typeof import('ant-design-vue/es')['TabPane']
|
||||||
ATabs: typeof import('ant-design-vue/es')['Tabs']
|
ATabs: typeof import('ant-design-vue/es')['Tabs']
|
||||||
@@ -64,11 +47,8 @@ declare module 'vue' {
|
|||||||
|
|
||||||
// For TSX support
|
// For TSX support
|
||||||
declare global {
|
declare global {
|
||||||
const AAvatar: typeof import('ant-design-vue/es')['Avatar']
|
|
||||||
const AButton: typeof import('ant-design-vue/es')['Button']
|
const AButton: typeof import('ant-design-vue/es')['Button']
|
||||||
const ACard: typeof import('ant-design-vue/es')['Card']
|
const ACard: typeof import('ant-design-vue/es')['Card']
|
||||||
const ACarousel: typeof import('ant-design-vue/es')['Carousel']
|
|
||||||
const ACheckbox: typeof import('ant-design-vue/es')['Checkbox']
|
|
||||||
const ACol: typeof import('ant-design-vue/es')['Col']
|
const ACol: typeof import('ant-design-vue/es')['Col']
|
||||||
const ACollapse: typeof import('ant-design-vue/es')['Collapse']
|
const ACollapse: typeof import('ant-design-vue/es')['Collapse']
|
||||||
const ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
|
const ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
|
||||||
@@ -76,34 +56,20 @@ declare global {
|
|||||||
const ADropdown: typeof import('ant-design-vue/es')['Dropdown']
|
const ADropdown: typeof import('ant-design-vue/es')['Dropdown']
|
||||||
const AEmpty: typeof import('ant-design-vue/es')['Empty']
|
const AEmpty: typeof import('ant-design-vue/es')['Empty']
|
||||||
const AFlex: typeof import('ant-design-vue/es')['Flex']
|
const AFlex: typeof import('ant-design-vue/es')['Flex']
|
||||||
const AFloatButton: typeof import('ant-design-vue/es')['FloatButton']
|
|
||||||
const AForm: typeof import('ant-design-vue/es')['Form']
|
const AForm: typeof import('ant-design-vue/es')['Form']
|
||||||
const AFormItem: typeof import('ant-design-vue/es')['FormItem']
|
const AFormItem: typeof import('ant-design-vue/es')['FormItem']
|
||||||
const AFormItemRest: typeof import('ant-design-vue/es')['FormItemRest']
|
|
||||||
const AInput: typeof import('ant-design-vue/es')['Input']
|
const AInput: typeof import('ant-design-vue/es')['Input']
|
||||||
const AInputGroup: typeof import('ant-design-vue/es')['InputGroup']
|
|
||||||
const AInputNumber: typeof import('ant-design-vue/es')['InputNumber']
|
const AInputNumber: typeof import('ant-design-vue/es')['InputNumber']
|
||||||
const AInputPassword: typeof import('ant-design-vue/es')['InputPassword']
|
const AInputPassword: typeof import('ant-design-vue/es')['InputPassword']
|
||||||
const AInputSearch: typeof import('ant-design-vue/es')['InputSearch']
|
|
||||||
const ALayout: typeof import('ant-design-vue/es')['Layout']
|
const ALayout: typeof import('ant-design-vue/es')['Layout']
|
||||||
const ALayoutContent: typeof import('ant-design-vue/es')['LayoutContent']
|
|
||||||
const ALayoutHeader: typeof import('ant-design-vue/es')['LayoutHeader']
|
const ALayoutHeader: typeof import('ant-design-vue/es')['LayoutHeader']
|
||||||
const ALayoutSider: typeof import('ant-design-vue/es')['LayoutSider']
|
|
||||||
const AList: typeof import('ant-design-vue/es')['List']
|
const AList: typeof import('ant-design-vue/es')['List']
|
||||||
const AListItem: typeof import('ant-design-vue/es')['ListItem']
|
const AListItem: typeof import('ant-design-vue/es')['ListItem']
|
||||||
const AMenu: typeof import('ant-design-vue/es')['Menu']
|
const AMenu: typeof import('ant-design-vue/es')['Menu']
|
||||||
const AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
|
const AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
|
||||||
const AModal: typeof import('ant-design-vue/es')['Modal']
|
|
||||||
const APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
|
const APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
|
||||||
const APopover: typeof import('ant-design-vue/es')['Popover']
|
|
||||||
const AProgress: typeof import('ant-design-vue/es')['Progress']
|
|
||||||
const ARow: typeof import('ant-design-vue/es')['Row']
|
const ARow: typeof import('ant-design-vue/es')['Row']
|
||||||
const ASelect: typeof import('ant-design-vue/es')['Select']
|
|
||||||
const ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
|
|
||||||
const ASlider: typeof import('ant-design-vue/es')['Slider']
|
|
||||||
const ASpace: typeof import('ant-design-vue/es')['Space']
|
const ASpace: typeof import('ant-design-vue/es')['Space']
|
||||||
const ASteps: typeof import('ant-design-vue/es')['Steps']
|
|
||||||
const ASubMenu: typeof import('ant-design-vue/es')['SubMenu']
|
|
||||||
const ATable: typeof import('ant-design-vue/es')['Table']
|
const ATable: typeof import('ant-design-vue/es')['Table']
|
||||||
const ATabPane: typeof import('ant-design-vue/es')['TabPane']
|
const ATabPane: typeof import('ant-design-vue/es')['TabPane']
|
||||||
const ATabs: typeof import('ant-design-vue/es')['Tabs']
|
const ATabs: typeof import('ant-design-vue/es')['Tabs']
|
||||||
|
|||||||
Reference in New Issue
Block a user