This commit is contained in:
dengqichen 2025-01-17 17:13:41 +08:00
parent a76685bbd6
commit f6865cce59
5 changed files with 1149 additions and 526 deletions

View File

@ -21,6 +21,9 @@
"@antv/x6-plugin-snapline": "^2.1.7", "@antv/x6-plugin-snapline": "^2.1.7",
"@antv/x6-plugin-transform": "^2.1.8", "@antv/x6-plugin-transform": "^2.1.8",
"@antv/x6-react-shape": "^2.2.3", "@antv/x6-react-shape": "^2.2.3",
"@formily/antd-v5": "^1.2.3",
"@formily/core": "^2.3.2",
"@formily/react": "^2.3.2",
"@hookform/resolvers": "^3.9.1", "@hookform/resolvers": "^3.9.1",
"@logicflow/core": "^2.0.9", "@logicflow/core": "^2.0.9",
"@logicflow/extension": "^2.0.13", "@logicflow/extension": "^2.0.13",
@ -44,10 +47,11 @@
"@types/recharts": "^1.8.29", "@types/recharts": "^1.8.29",
"ajv": "^8.17.1", "ajv": "^8.17.1",
"ajv-formats": "^3.0.1", "ajv-formats": "^3.0.1",
"antd": "^5.22.2", "antd": "^5.23.1",
"axios": "^1.6.2", "axios": "^1.6.2",
"cmdk": "^1.0.4", "cmdk": "^1.0.4",
"dagre": "^0.8.5", "dagre": "^0.8.5",
"dayjs": "^1.11.13",
"form-render": "^2.5.1", "form-render": "^2.5.1",
"less": "^4.2.1", "less": "^4.2.1",
"monaco-editor": "^0.52.2", "monaco-editor": "^0.52.2",
@ -112,11 +116,12 @@
} }
}, },
"node_modules/@ant-design/colors": { "node_modules/@ant-design/colors": {
"version": "7.1.0", "version": "7.2.0",
"resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.1.0.tgz", "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.2.0.tgz",
"integrity": "sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==", "integrity": "sha512-bjTObSnZ9C/O8MB/B4OUtd/q9COomuJAR2SYfhxLyHvCKn4EKwCN3e+fWGMo7H5InAyV0wL17jdE9ALrdOW/6A==",
"license": "MIT",
"dependencies": { "dependencies": {
"@ctrl/tinycolor": "^3.6.1" "@ant-design/fast-color": "^2.0.6"
} }
}, },
"node_modules/@ant-design/cssinjs": { "node_modules/@ant-design/cssinjs": {
@ -138,9 +143,10 @@
} }
}, },
"node_modules/@ant-design/cssinjs-utils": { "node_modules/@ant-design/cssinjs-utils": {
"version": "1.1.1", "version": "1.1.3",
"resolved": "https://registry.npmmirror.com/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.1.tgz", "resolved": "https://registry.npmmirror.com/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.3.tgz",
"integrity": "sha512-2HAiyGGGnM0es40SxdszeQAU5iWp41wBIInq+ONTCKjlSKOrzQfnw4JDtB8IBmqE6tQaEKwmzTP2LGdt5DSwYQ==", "integrity": "sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@ant-design/cssinjs": "^1.21.0", "@ant-design/cssinjs": "^1.21.0",
"@babel/runtime": "^7.23.2", "@babel/runtime": "^7.23.2",
@ -163,9 +169,10 @@
} }
}, },
"node_modules/@ant-design/icons": { "node_modules/@ant-design/icons": {
"version": "5.5.1", "version": "5.5.2",
"resolved": "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.5.1.tgz", "resolved": "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.5.2.tgz",
"integrity": "sha512-0UrM02MA2iDIgvLatWrj6YTCYe0F/cwXvVE0E2SqGrL7PZireQwgEKTKBisWpZyal5eXZLvuM98kju6YtYne8w==", "integrity": "sha512-xc53rjVBl9v2BqFxUjZGti/RfdDeA8/6KYglmInM2PNqSXc/WfuGDTifJI/ZsokJK0aeKvOIbXc9y2g8ILAhEA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@ant-design/colors": "^7.0.0", "@ant-design/colors": "^7.0.0",
"@ant-design/icons-svg": "^4.4.0", "@ant-design/icons-svg": "^4.4.0",
@ -1672,6 +1679,224 @@
"integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@formily/antd-v5": {
"version": "1.2.3",
"resolved": "https://registry.npmmirror.com/@formily/antd-v5/-/antd-v5-1.2.3.tgz",
"integrity": "sha512-QH9x1vNyMtXGuWAkZ8z0qu7akpp8NoOLsM3onKMPAdvSEHBbZDbc6xtdODSmOuhRtzcN0rjXf29oumyidaoeFQ==",
"license": "MIT",
"dependencies": {
"@ant-design/cssinjs": "^1.3.1",
"@ant-design/icons": "^5.0.0",
"@dnd-kit/core": "^6.0.0",
"@dnd-kit/sortable": "^7.0.0",
"@formily/core": "^2.2.0",
"@formily/grid": "^2.2.0",
"@formily/json-schema": "^2.2.0",
"@formily/react": "^2.2.0",
"@formily/reactive": "^2.2.0",
"@formily/reactive-react": "^2.2.0",
"@formily/shared": "^2.2.0",
"classnames": "^2.2.6",
"react-sticky-box": "^1.0.2"
},
"engines": {
"npm": ">=3.0.0"
},
"peerDependencies": {
"@types/react": ">=16.8.0 || >=17.0.0",
"@types/react-dom": ">=16.8.0 || >=17.0.0",
"antd": "^5.13.0",
"react": ">=16.8.0 || >=17.0.0",
"react-dom": ">=16.8.0",
"react-is": ">=16.8.0 || >=17.0.0"
}
},
"node_modules/@formily/core": {
"version": "2.3.2",
"resolved": "https://registry.npmmirror.com/@formily/core/-/core-2.3.2.tgz",
"integrity": "sha512-qS02mKWDRdm5IYnx3b6L4i/i7oFEBbVotF6B3xdqgbkeSjdzSz81/aJnEr0Sbi3yCgh1FhA0x+QKkpWnE8/GDQ==",
"license": "MIT",
"dependencies": {
"@formily/reactive": "2.3.2",
"@formily/shared": "2.3.2",
"@formily/validator": "2.3.2"
},
"engines": {
"npm": ">=3.0.0"
}
},
"node_modules/@formily/grid": {
"version": "2.3.2",
"resolved": "https://registry.npmmirror.com/@formily/grid/-/grid-2.3.2.tgz",
"integrity": "sha512-cbPBOZKHT5xp3DIcn+Tsqm9B2VMWDsfnhbGl7qvKza8v7cDn7io2aFp8a7sQTeZVmRT+A8H30LjCAKJS9n6+2w==",
"license": "MIT",
"dependencies": {
"@formily/reactive": "2.3.2",
"@juggle/resize-observer": "^3.3.1"
},
"engines": {
"npm": ">=3.0.0"
},
"peerDependencies": {
"typescript": "4.x || 5.x"
}
},
"node_modules/@formily/json-schema": {
"version": "2.3.2",
"resolved": "https://registry.npmmirror.com/@formily/json-schema/-/json-schema-2.3.2.tgz",
"integrity": "sha512-DFsdrbxFvdxUtrD5mVRb8USUWJV6KkhSiz83wxA779lgntGDLrwuE0DI2dVg8Vm4dZsK79iB+XhWidaNqH41fQ==",
"license": "MIT",
"dependencies": {
"@formily/core": "2.3.2",
"@formily/reactive": "2.3.2",
"@formily/shared": "2.3.2"
},
"engines": {
"npm": ">=3.0.0"
},
"peerDependencies": {
"typescript": ">4.1.5"
}
},
"node_modules/@formily/path": {
"version": "2.3.2",
"resolved": "https://registry.npmmirror.com/@formily/path/-/path-2.3.2.tgz",
"integrity": "sha512-KK8h/CupHOs4HIgu9JucqwWvIr8Nbmof++Kby0NdNFHdTN5nAyVzStS8VEPFPGRkQaXV3AH+FVGAxgucmEy4ZA==",
"license": "MIT",
"engines": {
"npm": ">=3.0.0"
}
},
"node_modules/@formily/react": {
"version": "2.3.2",
"resolved": "https://registry.npmmirror.com/@formily/react/-/react-2.3.2.tgz",
"integrity": "sha512-p0jCtX2K9b2/OUdXcDGJhRX4gU4zGFXg1uOYd49iqV1EP+XhRa/4OGAz7QMnUP0K/3FVLboqbQS2nMOKY1rrPg==",
"license": "MIT",
"dependencies": {
"@formily/core": "2.3.2",
"@formily/json-schema": "2.3.2",
"@formily/reactive": "2.3.2",
"@formily/reactive-react": "2.3.2",
"@formily/shared": "2.3.2",
"@formily/validator": "2.3.2",
"hoist-non-react-statics": "^3.3.2"
},
"engines": {
"npm": ">=3.0.0"
},
"peerDependencies": {
"@types/react": ">=16.8.0",
"@types/react-dom": ">=16.8.0",
"react": ">=16.8.0",
"react-dom": ">=16.8.0",
"react-is": ">=16.8.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
},
"@types/react-dom": {
"optional": true
}
}
},
"node_modules/@formily/react/node_modules/hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmmirror.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"license": "BSD-3-Clause",
"dependencies": {
"react-is": "^16.7.0"
}
},
"node_modules/@formily/react/node_modules/hoist-non-react-statics/node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
"node_modules/@formily/reactive": {
"version": "2.3.2",
"resolved": "https://registry.npmmirror.com/@formily/reactive/-/reactive-2.3.2.tgz",
"integrity": "sha512-fw9EBWyBNSo3d1diX+HW3v6fBYqmn5zRM+L8le03XGft847LaajCYkjXiZXSzj7v8U4qzjhURIcqVYgmi4OW8g==",
"license": "MIT",
"engines": {
"npm": ">=3.0.0"
}
},
"node_modules/@formily/reactive-react": {
"version": "2.3.2",
"resolved": "https://registry.npmmirror.com/@formily/reactive-react/-/reactive-react-2.3.2.tgz",
"integrity": "sha512-SdlKSDbUzgddasDnuUugWR02AGC426jHhc7UJuUU1W4ORAuYQunqdMu7xB7/aF4OAVCw4j6KECQtIPo4kftkFg==",
"license": "MIT",
"dependencies": {
"@formily/reactive": "2.3.2",
"hoist-non-react-statics": "^3.3.2"
},
"engines": {
"npm": ">=3.0.0"
},
"peerDependencies": {
"@types/react": ">=16.8.0",
"@types/react-dom": ">=16.8.0",
"react": ">=16.8.0",
"react-dom": ">=16.8.0",
"react-is": ">=16.8.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
},
"@types/react-dom": {
"optional": true
}
}
},
"node_modules/@formily/reactive-react/node_modules/hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmmirror.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"license": "BSD-3-Clause",
"dependencies": {
"react-is": "^16.7.0"
}
},
"node_modules/@formily/reactive-react/node_modules/hoist-non-react-statics/node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
"node_modules/@formily/shared": {
"version": "2.3.2",
"resolved": "https://registry.npmmirror.com/@formily/shared/-/shared-2.3.2.tgz",
"integrity": "sha512-hb8eL28Dqe4WQzGtxC3h7OwG9VPPBXtfKUfmnRkaBMJ8zn2KmdYOP8YnAkwdO2ZMgxtkOl0hku0Ufm2PwP3ziA==",
"license": "MIT",
"dependencies": {
"@formily/path": "2.3.2",
"camel-case": "^4.1.1",
"lower-case": "^2.0.1",
"no-case": "^3.0.4",
"param-case": "^3.0.4",
"pascal-case": "^3.1.1",
"upper-case": "^2.0.1"
},
"engines": {
"npm": ">=3.0.0"
}
},
"node_modules/@formily/validator": {
"version": "2.3.2",
"resolved": "https://registry.npmmirror.com/@formily/validator/-/validator-2.3.2.tgz",
"integrity": "sha512-XoY31kUypHB8MIw9jhp/Pb0fDFan5wPhR9Hgz/HiTPUdpg8l7kxzHRMZieqtL4YbtFzJD4wpk1+XrylILpPGYg==",
"license": "MIT",
"dependencies": {
"@formily/shared": "2.3.2"
},
"engines": {
"npm": ">=3.0.0"
}
},
"node_modules/@hookform/resolvers": { "node_modules/@hookform/resolvers": {
"version": "3.9.1", "version": "3.9.1",
"resolved": "https://registry.npmmirror.com/@hookform/resolvers/-/resolvers-3.9.1.tgz", "resolved": "https://registry.npmmirror.com/@hookform/resolvers/-/resolvers-3.9.1.tgz",
@ -1838,6 +2063,12 @@
"@jridgewell/sourcemap-codec": "^1.4.14" "@jridgewell/sourcemap-codec": "^1.4.14"
} }
}, },
"node_modules/@juggle/resize-observer": {
"version": "3.4.0",
"resolved": "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
"integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==",
"license": "Apache-2.0"
},
"node_modules/@logicflow/core": { "node_modules/@logicflow/core": {
"version": "2.0.9", "version": "2.0.9",
"resolved": "https://registry.npmmirror.com/@logicflow/core/-/core-2.0.9.tgz", "resolved": "https://registry.npmmirror.com/@logicflow/core/-/core-2.0.9.tgz",
@ -2932,6 +3163,7 @@
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmmirror.com/@rc-component/context/-/context-1.4.0.tgz", "resolved": "https://registry.npmmirror.com/@rc-component/context/-/context-1.4.0.tgz",
"integrity": "sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==", "integrity": "sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.10.1", "@babel/runtime": "^7.10.1",
"rc-util": "^5.27.0" "rc-util": "^5.27.0"
@ -2945,6 +3177,7 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmmirror.com/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz", "resolved": "https://registry.npmmirror.com/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz",
"integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==", "integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.0" "@babel/runtime": "^7.18.0"
}, },
@ -3023,16 +3256,17 @@
} }
}, },
"node_modules/@rc-component/trigger": { "node_modules/@rc-component/trigger": {
"version": "2.2.5", "version": "2.2.6",
"resolved": "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.2.5.tgz", "resolved": "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.2.6.tgz",
"integrity": "sha512-F1EJ4KjFpGAHAjuKvOyZB/6IZDkVx0bHl0M4fQM5wXcmm7lgTgVSSnR3bXwdmS6jOJGHOqfDxIJW3WUvwMIXhQ==", "integrity": "sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.23.2", "@babel/runtime": "^7.23.2",
"@rc-component/portal": "^1.1.0", "@rc-component/portal": "^1.1.0",
"classnames": "^2.3.2", "classnames": "^2.3.2",
"rc-motion": "^2.0.0", "rc-motion": "^2.0.0",
"rc-resize-observer": "^1.3.1", "rc-resize-observer": "^1.3.1",
"rc-util": "^5.38.0" "rc-util": "^5.44.0"
}, },
"engines": { "engines": {
"node": ">=8.x" "node": ">=8.x"
@ -3496,7 +3730,6 @@
"version": "18.3.5", "version": "18.3.5",
"resolved": "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.3.5.tgz", "resolved": "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.3.5.tgz",
"integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==",
"devOptional": true,
"peerDependencies": { "peerDependencies": {
"@types/react": "^18.0.0" "@types/react": "^18.0.0"
} }
@ -4015,57 +4248,58 @@
} }
}, },
"node_modules/antd": { "node_modules/antd": {
"version": "5.22.2", "version": "5.23.1",
"resolved": "https://registry.npmmirror.com/antd/-/antd-5.22.2.tgz", "resolved": "https://registry.npmmirror.com/antd/-/antd-5.23.1.tgz",
"integrity": "sha512-vihhiJbm9VG3d6boUeD1q2MXMax+qBrXhgqCEC+45v8iGUF6m4Ct+lFiCW4oWaN3EABOsbVA6Svy3Rj/QkQFKw==", "integrity": "sha512-rg5xd5LotHw0IRyo/nsiUN/EEV3e+xU4V4UmIb/62hMN9+3APyz1Ohjf17a+fN13jC8sNY1hP1K252SU2Th0xA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@ant-design/colors": "^7.1.0", "@ant-design/colors": "^7.2.0",
"@ant-design/cssinjs": "^1.21.1", "@ant-design/cssinjs": "^1.22.0",
"@ant-design/cssinjs-utils": "^1.1.1", "@ant-design/cssinjs-utils": "^1.1.3",
"@ant-design/icons": "^5.5.1", "@ant-design/fast-color": "^2.0.6",
"@ant-design/icons": "^5.5.2",
"@ant-design/react-slick": "~1.1.2", "@ant-design/react-slick": "~1.1.2",
"@babel/runtime": "^7.25.7", "@babel/runtime": "^7.26.0",
"@ctrl/tinycolor": "^3.6.1",
"@rc-component/color-picker": "~2.0.1", "@rc-component/color-picker": "~2.0.1",
"@rc-component/mutate-observer": "^1.1.0", "@rc-component/mutate-observer": "^1.1.0",
"@rc-component/qrcode": "~1.0.0", "@rc-component/qrcode": "~1.0.0",
"@rc-component/tour": "~1.15.1", "@rc-component/tour": "~1.15.1",
"@rc-component/trigger": "^2.2.5", "@rc-component/trigger": "^2.2.6",
"classnames": "^2.5.1", "classnames": "^2.5.1",
"copy-to-clipboard": "^3.3.3", "copy-to-clipboard": "^3.3.3",
"dayjs": "^1.11.11", "dayjs": "^1.11.11",
"rc-cascader": "~3.30.0", "rc-cascader": "~3.33.0",
"rc-checkbox": "~3.3.0", "rc-checkbox": "~3.5.0",
"rc-collapse": "~3.9.0", "rc-collapse": "~3.9.0",
"rc-dialog": "~9.6.0", "rc-dialog": "~9.6.0",
"rc-drawer": "~7.2.0", "rc-drawer": "~7.2.0",
"rc-dropdown": "~4.2.0", "rc-dropdown": "~4.2.1",
"rc-field-form": "~2.5.1", "rc-field-form": "~2.7.0",
"rc-image": "~7.11.0", "rc-image": "~7.11.0",
"rc-input": "~1.6.3", "rc-input": "~1.7.2",
"rc-input-number": "~9.3.0", "rc-input-number": "~9.4.0",
"rc-mentions": "~2.17.0", "rc-mentions": "~2.19.1",
"rc-menu": "~9.16.0", "rc-menu": "~9.16.0",
"rc-motion": "^2.9.3", "rc-motion": "^2.9.5",
"rc-notification": "~5.6.2", "rc-notification": "~5.6.2",
"rc-pagination": "~4.3.0", "rc-pagination": "~5.0.0",
"rc-picker": "~4.8.1", "rc-picker": "~4.9.2",
"rc-progress": "~4.0.0", "rc-progress": "~4.0.0",
"rc-rate": "~2.13.0", "rc-rate": "~2.13.0",
"rc-resize-observer": "^1.4.0", "rc-resize-observer": "^1.4.3",
"rc-segmented": "~2.5.0", "rc-segmented": "~2.7.0",
"rc-select": "~14.16.3", "rc-select": "~14.16.5",
"rc-slider": "~11.1.7", "rc-slider": "~11.1.8",
"rc-steps": "~6.0.1", "rc-steps": "~6.0.1",
"rc-switch": "~4.1.0", "rc-switch": "~4.1.0",
"rc-table": "~7.48.1", "rc-table": "~7.50.2",
"rc-tabs": "~15.4.0", "rc-tabs": "~15.5.0",
"rc-textarea": "~1.8.2", "rc-textarea": "~1.9.0",
"rc-tooltip": "~6.2.1", "rc-tooltip": "~6.3.2",
"rc-tree": "~5.10.1", "rc-tree": "~5.13.0",
"rc-tree-select": "~5.24.4", "rc-tree-select": "~5.27.0",
"rc-upload": "~4.8.1", "rc-upload": "~4.8.1",
"rc-util": "^5.43.0", "rc-util": "^5.44.3",
"scroll-into-view-if-needed": "^3.1.0", "scroll-into-view-if-needed": "^3.1.0",
"throttle-debounce": "^5.0.2" "throttle-debounce": "^5.0.2"
}, },
@ -4314,6 +4548,16 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/camel-case": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz",
"integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
"license": "MIT",
"dependencies": {
"pascal-case": "^3.1.2",
"tslib": "^2.0.3"
}
},
"node_modules/camelcase-css": { "node_modules/camelcase-css": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz", "resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz",
@ -4820,28 +5064,11 @@
"lodash": "^4.17.15" "lodash": "^4.17.15"
} }
}, },
"node_modules/date-fns": {
"version": "2.30.0",
"resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-2.30.0.tgz",
"integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"@babel/runtime": "^7.21.0"
},
"engines": {
"node": ">=0.11"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/date-fns"
}
},
"node_modules/dayjs": { "node_modules/dayjs": {
"version": "1.11.13", "version": "1.11.13",
"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
"integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
"license": "MIT"
}, },
"node_modules/debug": { "node_modules/debug": {
"version": "4.3.7", "version": "4.3.7",
@ -4945,6 +5172,16 @@
"csstype": "^3.0.2" "csstype": "^3.0.2"
} }
}, },
"node_modules/dot-case": {
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz",
"integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
"license": "MIT",
"dependencies": {
"no-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"node_modules/eastasianwidth": { "node_modules/eastasianwidth": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@ -6262,6 +6499,15 @@
"loose-envify": "cli.js" "loose-envify": "cli.js"
} }
}, },
"node_modules/lower-case": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz",
"integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.0.3"
}
},
"node_modules/lru-cache": { "node_modules/lru-cache": {
"version": "5.1.1", "version": "5.1.1",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
@ -6465,17 +6711,6 @@
"mobx": "^4.13.1 || ^5.13.1" "mobx": "^4.13.1 || ^5.13.1"
} }
}, },
"node_modules/moment": {
"version": "2.30.1",
"resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
"license": "MIT",
"optional": true,
"peer": true,
"engines": {
"node": "*"
}
},
"node_modules/monaco-editor": { "node_modules/monaco-editor": {
"version": "0.52.2", "version": "0.52.2",
"resolved": "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.52.2.tgz", "resolved": "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.52.2.tgz",
@ -6550,6 +6785,16 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"peer": true "peer": true
}, },
"node_modules/no-case": {
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz",
"integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
"license": "MIT",
"dependencies": {
"lower-case": "^2.0.2",
"tslib": "^2.0.3"
}
},
"node_modules/node-releases": { "node_modules/node-releases": {
"version": "2.0.18", "version": "2.0.18",
"resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz", "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz",
@ -6662,6 +6907,16 @@
"dev": true, "dev": true,
"license": "BlueOak-1.0.0" "license": "BlueOak-1.0.0"
}, },
"node_modules/param-case": {
"version": "3.0.4",
"resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz",
"integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
"license": "MIT",
"dependencies": {
"dot-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"node_modules/parent-module": { "node_modules/parent-module": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",
@ -6700,6 +6955,16 @@
"node": ">= 0.10" "node": ">= 0.10"
} }
}, },
"node_modules/pascal-case": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz",
"integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
"license": "MIT",
"dependencies": {
"no-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"node_modules/path-exists": { "node_modules/path-exists": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
@ -7134,14 +7399,15 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
}, },
"node_modules/rc-cascader": { "node_modules/rc-cascader": {
"version": "3.30.0", "version": "3.33.0",
"resolved": "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.30.0.tgz", "resolved": "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.33.0.tgz",
"integrity": "sha512-rrzSbk1Bdqbu+pDwiLCLHu72+lwX9BZ28+JKzoi0DWZ4N29QYFeip8Gctl33QVd2Xg3Rf14D3yAOG76ElJw16w==", "integrity": "sha512-JvZrMbKBXIbEDmpIORxqvedY/bck6hGbs3hxdWT8eS9wSQ1P7//lGxbyKjOSyQiVBbgzNWriSe6HoMcZO/+0rQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.25.7", "@babel/runtime": "^7.25.7",
"classnames": "^2.3.1", "classnames": "^2.3.1",
"rc-select": "~14.16.2", "rc-select": "~14.16.2",
"rc-tree": "~5.10.1", "rc-tree": "~5.13.0",
"rc-util": "^5.43.0" "rc-util": "^5.43.0"
}, },
"peerDependencies": { "peerDependencies": {
@ -7150,9 +7416,10 @@
} }
}, },
"node_modules/rc-checkbox": { "node_modules/rc-checkbox": {
"version": "3.3.0", "version": "3.5.0",
"resolved": "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.3.0.tgz", "resolved": "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.5.0.tgz",
"integrity": "sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==", "integrity": "sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.10.1", "@babel/runtime": "^7.10.1",
"classnames": "^2.3.2", "classnames": "^2.3.2",
@ -7211,14 +7478,15 @@
} }
}, },
"node_modules/rc-dropdown": { "node_modules/rc-dropdown": {
"version": "4.2.0", "version": "4.2.1",
"resolved": "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.2.0.tgz", "resolved": "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.2.1.tgz",
"integrity": "sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==", "integrity": "sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@rc-component/trigger": "^2.0.0", "@rc-component/trigger": "^2.0.0",
"classnames": "^2.2.6", "classnames": "^2.2.6",
"rc-util": "^5.17.0" "rc-util": "^5.44.1"
}, },
"peerDependencies": { "peerDependencies": {
"react": ">=16.11.0", "react": ">=16.11.0",
@ -7226,9 +7494,10 @@
} }
}, },
"node_modules/rc-field-form": { "node_modules/rc-field-form": {
"version": "2.5.1", "version": "2.7.0",
"resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.5.1.tgz", "resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.7.0.tgz",
"integrity": "sha512-33hunXwynQJyeae7LS3hMGTXNeRBjiPyPYgB0824EbmLHiXC1EBGyUwRh6xjLRy9c+en5WARYN0gJz5+JAqwig==", "integrity": "sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.0", "@babel/runtime": "^7.18.0",
"@rc-component/async-validator": "^5.0.3", "@rc-component/async-validator": "^5.0.3",
@ -7260,9 +7529,10 @@
} }
}, },
"node_modules/rc-input": { "node_modules/rc-input": {
"version": "1.6.3", "version": "1.7.2",
"resolved": "https://registry.npmmirror.com/rc-input/-/rc-input-1.6.3.tgz", "resolved": "https://registry.npmmirror.com/rc-input/-/rc-input-1.7.2.tgz",
"integrity": "sha512-wI4NzuqBS8vvKr8cljsvnTUqItMfG1QbJoxovCgL+DX4eVUcHIjVwharwevIxyy7H/jbLryh+K7ysnJr23aWIA==", "integrity": "sha512-g3nYONnl4edWj2FfVoxsU3Ec4XTE+Hb39Kfh2MFxMZjp/0gGyPUgy/v7ZhS27ZxUFNkuIDYXm9PJsLyJbtg86A==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.11.1", "@babel/runtime": "^7.11.1",
"classnames": "^2.2.1", "classnames": "^2.2.1",
@ -7274,14 +7544,15 @@
} }
}, },
"node_modules/rc-input-number": { "node_modules/rc-input-number": {
"version": "9.3.0", "version": "9.4.0",
"resolved": "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-9.3.0.tgz", "resolved": "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-9.4.0.tgz",
"integrity": "sha512-JQ363ywqRyxwgVxpg2z2kja3CehTpYdqR7emJ/6yJjRdbvo+RvfE83fcpBCIJRq3zLp8SakmEXq60qzWyZ7Usw==", "integrity": "sha512-Tiy4DcXcFXAf9wDhN8aUAyMeCLHJUHA/VA/t7Hj8ZEx5ETvxG7MArDOSE6psbiSCo+vJPm4E3fGN710ITVn6GA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.10.1", "@babel/runtime": "^7.10.1",
"@rc-component/mini-decimal": "^1.0.1", "@rc-component/mini-decimal": "^1.0.1",
"classnames": "^2.2.5", "classnames": "^2.2.5",
"rc-input": "~1.6.0", "rc-input": "~1.7.1",
"rc-util": "^5.40.1" "rc-util": "^5.40.1"
}, },
"peerDependencies": { "peerDependencies": {
@ -7290,16 +7561,17 @@
} }
}, },
"node_modules/rc-mentions": { "node_modules/rc-mentions": {
"version": "2.17.0", "version": "2.19.1",
"resolved": "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.17.0.tgz", "resolved": "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.19.1.tgz",
"integrity": "sha512-sfHy+qLvc+p8jx8GUsujZWXDOIlIimp6YQz7N5ONQ6bHsa2kyG+BLa5k2wuxgebBbH97is33wxiyq5UkiXRpHA==", "integrity": "sha512-KK3bAc/bPFI993J3necmaMXD2reZTzytZdlTvkeBbp50IGH1BDPDvxLdHDUrpQx2b2TGaVJsn+86BvYa03kGqA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.22.5", "@babel/runtime": "^7.22.5",
"@rc-component/trigger": "^2.0.0", "@rc-component/trigger": "^2.0.0",
"classnames": "^2.2.6", "classnames": "^2.2.6",
"rc-input": "~1.6.0", "rc-input": "~1.7.1",
"rc-menu": "~9.16.0", "rc-menu": "~9.16.0",
"rc-textarea": "~1.8.0", "rc-textarea": "~1.9.0",
"rc-util": "^5.34.1" "rc-util": "^5.34.1"
}, },
"peerDependencies": { "peerDependencies": {
@ -7311,6 +7583,7 @@
"version": "9.16.0", "version": "9.16.0",
"resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.16.0.tgz", "resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.16.0.tgz",
"integrity": "sha512-vAL0yqPkmXWk3+YKRkmIR8TYj3RVdEt3ptG2jCJXWNAvQbT0VJJdRyHZ7kG/l1JsZlB+VJq/VcYOo69VR4oD+w==", "integrity": "sha512-vAL0yqPkmXWk3+YKRkmIR8TYj3RVdEt3ptG2jCJXWNAvQbT0VJJdRyHZ7kG/l1JsZlB+VJq/VcYOo69VR4oD+w==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.10.1", "@babel/runtime": "^7.10.1",
"@rc-component/trigger": "^2.0.0", "@rc-component/trigger": "^2.0.0",
@ -7325,13 +7598,14 @@
} }
}, },
"node_modules/rc-motion": { "node_modules/rc-motion": {
"version": "2.9.3", "version": "2.9.5",
"resolved": "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.3.tgz", "resolved": "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.5.tgz",
"integrity": "sha512-rkW47ABVkic7WEB0EKJqzySpvDqwl60/tdkY7hWP7dYnh5pm0SzJpo54oW3TDUGXV5wfxXFmMkxrzRRbotQ0+w==", "integrity": "sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.11.1", "@babel/runtime": "^7.11.1",
"classnames": "^2.2.1", "classnames": "^2.2.1",
"rc-util": "^5.43.0" "rc-util": "^5.44.0"
}, },
"peerDependencies": { "peerDependencies": {
"react": ">=16.9.0", "react": ">=16.9.0",
@ -7357,9 +7631,10 @@
} }
}, },
"node_modules/rc-overflow": { "node_modules/rc-overflow": {
"version": "1.3.2", "version": "1.4.1",
"resolved": "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.3.2.tgz", "resolved": "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.4.1.tgz",
"integrity": "sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==", "integrity": "sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.11.1", "@babel/runtime": "^7.11.1",
"classnames": "^2.2.1", "classnames": "^2.2.1",
@ -7372,9 +7647,10 @@
} }
}, },
"node_modules/rc-pagination": { "node_modules/rc-pagination": {
"version": "4.3.0", "version": "5.0.0",
"resolved": "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-4.3.0.tgz", "resolved": "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-5.0.0.tgz",
"integrity": "sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==", "integrity": "sha512-QjrPvbAQwps93iluvFM62AEYglGYhWW2q/nliQqmvkTi4PXP4HHoh00iC1Sa5LLVmtWQHmG73fBi2x6H6vFHRg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.10.1", "@babel/runtime": "^7.10.1",
"classnames": "^2.3.2", "classnames": "^2.3.2",
@ -7386,9 +7662,10 @@
} }
}, },
"node_modules/rc-picker": { "node_modules/rc-picker": {
"version": "4.8.1", "version": "4.9.2",
"resolved": "https://registry.npmmirror.com/rc-picker/-/rc-picker-4.8.1.tgz", "resolved": "https://registry.npmmirror.com/rc-picker/-/rc-picker-4.9.2.tgz",
"integrity": "sha512-lj9hXXMSkbjFUIhfQh8XH698ybxnoBOfq7pdM1FvfSyDwdFhdQa7dvsIYwo6Uz7Zp1wVkfw5rOJO3MpdWzoHsg==", "integrity": "sha512-SLW4PRudODOomipKI0dvykxW4P8LOqtMr17MOaLU6NQJhkh9SZeh44a/8BMxwv5T6e3kiIeYc9k5jFg2Mv35Pg==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.24.7", "@babel/runtime": "^7.24.7",
"@rc-component/trigger": "^2.0.0", "@rc-component/trigger": "^2.0.0",
@ -7455,13 +7732,14 @@
} }
}, },
"node_modules/rc-resize-observer": { "node_modules/rc-resize-observer": {
"version": "1.4.0", "version": "1.4.3",
"resolved": "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.0.tgz", "resolved": "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.3.tgz",
"integrity": "sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==", "integrity": "sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.7", "@babel/runtime": "^7.20.7",
"classnames": "^2.2.1", "classnames": "^2.2.1",
"rc-util": "^5.38.0", "rc-util": "^5.44.1",
"resize-observer-polyfill": "^1.5.1" "resize-observer-polyfill": "^1.5.1"
}, },
"peerDependencies": { "peerDependencies": {
@ -7470,9 +7748,10 @@
} }
}, },
"node_modules/rc-segmented": { "node_modules/rc-segmented": {
"version": "2.5.0", "version": "2.7.0",
"resolved": "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.5.0.tgz", "resolved": "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.7.0.tgz",
"integrity": "sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==", "integrity": "sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.11.1", "@babel/runtime": "^7.11.1",
"classnames": "^2.2.1", "classnames": "^2.2.1",
@ -7485,9 +7764,10 @@
} }
}, },
"node_modules/rc-select": { "node_modules/rc-select": {
"version": "14.16.3", "version": "14.16.5",
"resolved": "https://registry.npmmirror.com/rc-select/-/rc-select-14.16.3.tgz", "resolved": "https://registry.npmmirror.com/rc-select/-/rc-select-14.16.5.tgz",
"integrity": "sha512-51+j6s3fJJJXB7E+B6W1hM4Tjzv1B/Decooz9ilgegDBt3ZAth1b/xMwYCTrT5BbG2e53XACQsyDib2+3Ro1fg==", "integrity": "sha512-cRls713egTcitJ7WUXhHEf22h3U1OMC8nbw9+HN4Fniew8Xo3avgEDvIeGRwhbiyPNbQR23AwP+tt6KWUcB4IA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.10.1", "@babel/runtime": "^7.10.1",
"@rc-component/trigger": "^2.1.1", "@rc-component/trigger": "^2.1.1",
@ -7506,9 +7786,10 @@
} }
}, },
"node_modules/rc-slider": { "node_modules/rc-slider": {
"version": "11.1.7", "version": "11.1.8",
"resolved": "https://registry.npmmirror.com/rc-slider/-/rc-slider-11.1.7.tgz", "resolved": "https://registry.npmmirror.com/rc-slider/-/rc-slider-11.1.8.tgz",
"integrity": "sha512-ytYbZei81TX7otdC0QvoYD72XSlxvTihNth5OeZ6PMXyEDq/vHdWFulQmfDGyXK1NwKwSlKgpvINOa88uT5g2A==", "integrity": "sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.10.1", "@babel/runtime": "^7.10.1",
"classnames": "^2.2.5", "classnames": "^2.2.5",
@ -7554,15 +7835,16 @@
} }
}, },
"node_modules/rc-table": { "node_modules/rc-table": {
"version": "7.48.1", "version": "7.50.2",
"resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.48.1.tgz", "resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.50.2.tgz",
"integrity": "sha512-Z4mDKjWg+xz/Ezdw6ivWcbqRpaJ0QfCORRoRrlrw65KSGZLK8OcTdacH22/fyGb8L4It/0/9qcMm8VrVAk/WBw==", "integrity": "sha512-+nJbzxzstBriLb5sr9U7Vjs7+4dO8cWlouQbMwBVYghk2vr508bBdkHJeP/z9HVjAIKmAgMQKxmtbgDd3gc5wA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.10.1", "@babel/runtime": "^7.10.1",
"@rc-component/context": "^1.4.0", "@rc-component/context": "^1.4.0",
"classnames": "^2.2.5", "classnames": "^2.2.5",
"rc-resize-observer": "^1.1.0", "rc-resize-observer": "^1.1.0",
"rc-util": "^5.41.0", "rc-util": "^5.44.3",
"rc-virtual-list": "^3.14.2" "rc-virtual-list": "^3.14.2"
}, },
"engines": { "engines": {
@ -7574,9 +7856,10 @@
} }
}, },
"node_modules/rc-tabs": { "node_modules/rc-tabs": {
"version": "15.4.0", "version": "15.5.0",
"resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.4.0.tgz", "resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.5.0.tgz",
"integrity": "sha512-llKuyiAVqmXm2z7OrmhX5cNb2ueZaL8ZyA2P4R+6/72NYYcbEgOXibwHiQCFY2RiN3swXl53SIABi2CumUS02g==", "integrity": "sha512-NrDcTaUJLh9UuDdMBkjKTn97U9iXG44s9D03V5NHkhEDWO5/nC6PwC3RhkCWFMKB9hh+ryqgZ+TIr1b9Jd/hnQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.11.2", "@babel/runtime": "^7.11.2",
"classnames": "2.x", "classnames": "2.x",
@ -7595,13 +7878,14 @@
} }
}, },
"node_modules/rc-textarea": { "node_modules/rc-textarea": {
"version": "1.8.2", "version": "1.9.0",
"resolved": "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.8.2.tgz", "resolved": "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.9.0.tgz",
"integrity": "sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==", "integrity": "sha512-dQW/Bc/MriPBTugj2Kx9PMS5eXCCGn2cxoIaichjbNvOiARlaHdI99j4DTxLl/V8+PIfW06uFy7kjfUIDDKyxQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.10.1", "@babel/runtime": "^7.10.1",
"classnames": "^2.2.1", "classnames": "^2.2.1",
"rc-input": "~1.6.0", "rc-input": "~1.7.1",
"rc-resize-observer": "^1.0.0", "rc-resize-observer": "^1.0.0",
"rc-util": "^5.27.0" "rc-util": "^5.27.0"
}, },
@ -7611,9 +7895,10 @@
} }
}, },
"node_modules/rc-tooltip": { "node_modules/rc-tooltip": {
"version": "6.2.1", "version": "6.3.2",
"resolved": "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.2.1.tgz", "resolved": "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.3.2.tgz",
"integrity": "sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==", "integrity": "sha512-oA4HZIiZJbUQ5ojigM0y4XtWxaH/aQlJSzknjICRWNpqyemy1sL3X3iEQV2eSPBWEq+bqU3+aSs81z+28j9luA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.11.2", "@babel/runtime": "^7.11.2",
"@rc-component/trigger": "^2.0.0", "@rc-component/trigger": "^2.0.0",
@ -7625,9 +7910,10 @@
} }
}, },
"node_modules/rc-tree": { "node_modules/rc-tree": {
"version": "5.10.1", "version": "5.13.0",
"resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.10.1.tgz", "resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.13.0.tgz",
"integrity": "sha512-FPXb3tT/u39mgjr6JNlHaUTYfHkVGW56XaGDahDpEFLGsnPxGcVLNTjcqoQb/GNbSCycl7tD7EvIymwOTP0+Yw==", "integrity": "sha512-2+lFvoVRnvHQ1trlpXMOWtF8BUgF+3TiipG72uOfhpL5CUdXCk931kvDdUkTL/IZVtNEDQKwEEmJbAYJSA5NnA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.10.1", "@babel/runtime": "^7.10.1",
"classnames": "2.x", "classnames": "2.x",
@ -7644,14 +7930,15 @@
} }
}, },
"node_modules/rc-tree-select": { "node_modules/rc-tree-select": {
"version": "5.24.5", "version": "5.27.0",
"resolved": "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.24.5.tgz", "resolved": "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.27.0.tgz",
"integrity": "sha512-PnyR8LZJWaiEFw0SHRqo4MNQWyyZsyMs8eNmo68uXZWjxc7QqeWcjPPoONN0rc90c3HZqGF9z+Roz+GLzY5GXA==", "integrity": "sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.25.7", "@babel/runtime": "^7.25.7",
"classnames": "2.x", "classnames": "2.x",
"rc-select": "~14.16.2", "rc-select": "~14.16.2",
"rc-tree": "~5.10.1", "rc-tree": "~5.13.0",
"rc-util": "^5.43.0" "rc-util": "^5.43.0"
}, },
"peerDependencies": { "peerDependencies": {
@ -7704,9 +7991,10 @@
} }
}, },
"node_modules/rc-util": { "node_modules/rc-util": {
"version": "5.43.0", "version": "5.44.3",
"resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.43.0.tgz", "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.44.3.tgz",
"integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==", "integrity": "sha512-q6KCcOFk3rv/zD3MckhJteZxb0VjAIFuf622B7ElK4vfrZdAzs16XR5p3VTdy3+U5jfJU5ACz4QnhLSuAGe5dA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"react-is": "^18.2.0" "react-is": "^18.2.0"
@ -7717,9 +8005,10 @@
} }
}, },
"node_modules/rc-virtual-list": { "node_modules/rc-virtual-list": {
"version": "3.15.0", "version": "3.17.1",
"resolved": "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.15.0.tgz", "resolved": "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.17.1.tgz",
"integrity": "sha512-dF2YQztqrU3ijAeWOqscTshCEr7vpimzSqAVjO1AyAmaqcHulaXpnGR0ptK5PXfxTUy48VkJOiglMIxlkYGs0w==", "integrity": "sha512-n9rKy6BB/Hi/LsOJr9ILpeFxDJfAIYzFYX1famZb0KLQrlsdxNBDsBjBY9lblJ35MTRJwi06ohv5ma9uTUeLog==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.0", "@babel/runtime": "^7.20.0",
"classnames": "^2.2.6", "classnames": "^2.2.6",
@ -7930,6 +8219,18 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
} }
}, },
"node_modules/react-sticky-box": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/react-sticky-box/-/react-sticky-box-1.0.2.tgz",
"integrity": "sha512-Kyvtppdtv1KqJyNU4DtrSMI0unyQRgtraZvVQ0GAazVbYiTsIVpyhpr+5R0Aavzu4uJNSe1awj2rk/qI7i6Zfw==",
"license": "ISC",
"dependencies": {
"resize-observer-polyfill": "^1.5.1"
},
"peerDependencies": {
"react": ">=16.8.0"
}
},
"node_modules/react-style-singleton": { "node_modules/react-style-singleton": {
"version": "2.2.3", "version": "2.2.3",
"resolved": "https://registry.npmmirror.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz", "resolved": "https://registry.npmmirror.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
@ -8874,7 +9175,6 @@
"version": "5.7.2", "version": "5.7.2",
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.7.2.tgz", "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.7.2.tgz",
"integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
"dev": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
@ -8926,6 +9226,15 @@
"browserslist": ">= 4.21.0" "browserslist": ">= 4.21.0"
} }
}, },
"node_modules/upper-case": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/upper-case/-/upper-case-2.0.2.tgz",
"integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.0.3"
}
},
"node_modules/uri-js": { "node_modules/uri-js": {
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",

View File

@ -23,6 +23,9 @@
"@antv/x6-plugin-snapline": "^2.1.7", "@antv/x6-plugin-snapline": "^2.1.7",
"@antv/x6-plugin-transform": "^2.1.8", "@antv/x6-plugin-transform": "^2.1.8",
"@antv/x6-react-shape": "^2.2.3", "@antv/x6-react-shape": "^2.2.3",
"@formily/antd-v5": "^1.2.3",
"@formily/core": "^2.3.2",
"@formily/react": "^2.3.2",
"@hookform/resolvers": "^3.9.1", "@hookform/resolvers": "^3.9.1",
"@logicflow/core": "^2.0.9", "@logicflow/core": "^2.0.9",
"@logicflow/extension": "^2.0.13", "@logicflow/extension": "^2.0.13",
@ -46,10 +49,11 @@
"@types/recharts": "^1.8.29", "@types/recharts": "^1.8.29",
"ajv": "^8.17.1", "ajv": "^8.17.1",
"ajv-formats": "^3.0.1", "ajv-formats": "^3.0.1",
"antd": "^5.22.2", "antd": "^5.23.1",
"axios": "^1.6.2", "axios": "^1.6.2",
"cmdk": "^1.0.4", "cmdk": "^1.0.4",
"dagre": "^0.8.5", "dagre": "^0.8.5",
"dayjs": "^1.11.13",
"form-render": "^2.5.1", "form-render": "^2.5.1",
"less": "^4.2.1", "less": "^4.2.1",
"monaco-editor": "^0.52.2", "monaco-editor": "^0.52.2",

View File

@ -0,0 +1,137 @@
import React from 'react';
import {
Dialog,
DialogContent,
DialogHeader,
DialogTitle,
DialogDescription
} from "@/components/ui/dialog";
import type {DeploymentConfig} from '../types';
import {FormButtonGroup, FormItem, Select, Submit} from '@formily/antd-v5'
import {createForm, Field, FieldDataSource} from '@formily/core'
import {createSchemaField, FormProvider, ISchema} from '@formily/react'
import {action} from '@formily/reactive'
interface DeploymentConfigModalProps {
open: boolean;
onCancel: () => void;
onSuccess: () => void;
initialValues?: DeploymentConfig;
envId: number;
}
const DeploymentConfigModal: React.FC<DeploymentConfigModalProps> = ({
open,
onCancel,
onSuccess,
initialValues,
envId,
}) => {
const SchemaField = createSchemaField({
components: {
Select,
FormItem,
},
})
const loadData = async (field: Field) => {
const linkage = field.query('linkage').get('value')
if (!linkage) return []
return new Promise<FieldDataSource>((resolve) => {
setTimeout(() => {
if (linkage === 1) {
resolve([
{
label: 'AAA',
value: 'aaa',
},
{
label: 'BBB',
value: 'ccc',
},
])
} else if (linkage === 2) {
resolve([
{
label: 'CCC',
value: 'ccc',
},
{
label: 'DDD',
value: 'ddd',
},
])
}
}, 1500)
})
}
const useAsyncDataSource = (service: typeof loadData) => (field: Field) => {
field.loading = true
service(field).then(
action.bound?.((data) => {
field.dataSource = data
field.loading = false
})
)
}
const form = createForm()
const schema: ISchema = {
type: 'object',
properties: {
linkage: {
type: 'string',
title: '联动选择框',
enum: [
{label: '发请求1', value: 1},
{label: '发请求2', value: 2},
],
'x-decorator': 'FormItem',
'x-component': 'Select',
'x-component-props': {
style: {
width: 120,
},
},
},
select: {
type: 'string',
title: '异步选择框',
'x-decorator': 'FormItem',
'x-component': 'Select',
'x-component-props': {
style: {
width: 120,
},
},
'x-reactions': ['{{useAsyncDataSource(loadData)}}'],
},
},
}
return (
<Dialog open={open} onOpenChange={(open) => !open && onCancel()}>
<DialogContent className="max-w-3xl">
<DialogHeader>
<DialogTitle></DialogTitle>
<DialogDescription>
Jenkins系统相关参数
</DialogDescription>
</DialogHeader>
<div className="h-[calc(100vh-250px)] overflow-y-auto p-6">
<FormProvider form={form}>
<SchemaField schema={schema} scope={{useAsyncDataSource, loadData}}/>
<FormButtonGroup>
<Submit onSubmit={console.log}>Submit</Submit>
</FormButtonGroup>
</FormProvider>
</div>
</DialogContent>
</Dialog>
);
};
export default DeploymentConfigModal;

View File

@ -1,19 +1,12 @@
import React, {useEffect, useState, useCallback} from 'react'; import React from 'react';
import {Modal, Form, Select, message, Switch, Space, Button} from 'antd'; import {Modal} from 'antd';
import {FullscreenOutlined} from '@ant-design/icons'; import type {DeploymentConfig} from '../types';
import type {DeploymentConfig, DeployConfigTemplate, CreateDeploymentConfigRequest} from '../types';
import {createDeploymentConfig, updateDeploymentConfig, getDeployConfigTemplates} from '../service';
import {getApplicationList} from '../../../Application/List/service';
import type {Application} from '../../../Application/List/types';
import {BetaSchemaForm} from '@ant-design/pro-form';
import {convertJsonSchemaToColumns} from '@/utils/jsonSchemaUtils';
import {Editor} from '@/components/Editor';
import type {JsonNode} from '@/types/common';
import {getPublishedDefinitions} from '@/pages/Workflow/Definition/service';
import type {WorkflowDefinition} from '@/pages/Workflow/Definition/types';
import './styles.less'; import './styles.less';
import {FormButtonGroup, FormItem, Select, Submit, FormGrid} from '@formily/antd-v5'
const {Option} = Select; import {createForm, Field, FieldDataSource} from '@formily/core'
import {createSchemaField, FormProvider, ISchema} from '@formily/react'
import {action} from '@formily/reactive'
import request from '@/utils/request';
interface DeploymentConfigModalProps { interface DeploymentConfigModalProps {
open: boolean; open: boolean;
@ -23,6 +16,12 @@ interface DeploymentConfigModalProps {
envId: number; envId: number;
} }
// 定义字段映射接口
interface FieldMapping {
label: string; // 显示字段
value: string; // 值字段
}
const DeploymentConfigModal: React.FC<DeploymentConfigModalProps> = ({ const DeploymentConfigModal: React.FC<DeploymentConfigModalProps> = ({
open, open,
onCancel, onCancel,
@ -30,194 +29,126 @@ const DeploymentConfigModal: React.FC<DeploymentConfigModalProps> = ({
initialValues, initialValues,
envId, envId,
}) => { }) => {
const [form] = Form.useForm();
const [applications, setApplications] = useState<Application[]>([]);
const [templates, setTemplates] = useState<DeployConfigTemplate[]>([]);
const [selectedTemplate, setSelectedTemplate] = useState<DeployConfigTemplate>();
const [buildVariables, setBuildVariables] = useState<JsonNode>({});
const [loading, setLoading] = useState(false);
const [workflowDefinitions, setWorkflowDefinitions] = useState<WorkflowDefinition[]>([]);
const [fullscreenEditor, setFullscreenEditor] = useState<{
key: string;
title: string;
} | null>(null);
const isEdit = !!initialValues?.id;
// 获取应用列表 const SchemaField = createSchemaField({
const fetchApplications = useCallback(async () => { components: {
try { Select,
const data = await getApplicationList(); FormItem,
setApplications(data); FormGrid,
} catch (error) { },
message.error('获取应用列表失败'); })
}
}, []);
// 获取配置模板 // 通用的异步数据源加载方法
const fetchTemplates = useCallback(async () => { const useAsyncDataSource = (
try { url: string,
const data = await getDeployConfigTemplates(); options?: {
setTemplates(data); params?: Record<string, any>;
} catch (error) { mapping?: FieldMapping;
message.error('获取配置模板失败');
} }
}, []); ) => (field: Field) => {
const {params, mapping = {label: 'name', value: 'id'}} = options || {};
// 获取已发布的工作流列表 field.loading = true;
const fetchWorkflowDefinitions = useCallback(async () => { request.get(url, {params})
try { .then(action.bound?.((response) => {
const data = await getPublishedDefinitions(0); field.dataSource = response.map((item: any) => ({
setWorkflowDefinitions(data); label: item[mapping.label],
} catch (error) { value: item[mapping.value]
message.error('获取工作流列表失败'); }));
} field.loading = false;
}, []); }))
.catch(action.bound?.((error) => {
// 在模态框显示时获取数据 console.error(`Failed to load data from ${url}:`, error);
useEffect(() => { field.dataSource = [];
if (open) { field.loading = false;
fetchApplications();
fetchTemplates();
if (!isEdit) {
fetchWorkflowDefinitions();
}
}
}, [open, fetchApplications, fetchTemplates, fetchWorkflowDefinitions, isEdit]);
// 初始化表单数据
useEffect(() => {
if (!open) return;
if (initialValues) {
// 设置基础字段
form.setFieldsValue({
applicationId: initialValues.applicationId,
enabled: initialValues.enabled,
...initialValues.buildVariables // 设置所有构建变量到表单中
});
const template = templates.find(t => t.buildType === initialValues.buildType && t.languageType === initialValues.languageType);
if (template) {
setSelectedTemplate(template);
// 只保存编辑器字段的值到 buildVariables
const editorValues = Object.entries(initialValues.buildVariables || {})
.filter(([key]) => template.buildVariablesSchema?.properties?.[key]?.editorConfig)
.reduce((acc, [key, value]) => ({...acc, [key]: value}), {});
setBuildVariables(editorValues);
}
} else {
form.resetFields();
form.setFieldsValue({
enabled: true
});
setSelectedTemplate(undefined);
setBuildVariables({});
}
}, [open, initialValues, form, templates]);
const handleAppChange = useCallback((applicationId: number) => {
const app = applications.find(a => a.id === applicationId);
if (app) {
const template = templates.find(t => t.languageType === app.language);
if (template) {
setSelectedTemplate(template);
setBuildVariables({});
// 重置除了 applicationId 和 enabled 之外的所有字段
const currentValues = form.getFieldsValue();
form.setFieldsValue({
applicationId: currentValues.applicationId,
enabled: currentValues.enabled
});
}
}
}, [applications, templates, form]);
const handleFormValuesChange = (changedValues: Record<string, any>) => {
setBuildVariables(prev => ({
...prev,
...changedValues
})); }));
}; };
const handleSubmit = async () => { const form = createForm()
try {
setLoading(true);
const formValues = await form.validateFields();
// 获取选中的应用信息 const schema: ISchema = {
const selectedApp = applications.find(app => app.id === formValues.applicationId); type: 'object',
if (!selectedApp) { properties: {
throw new Error('请选择应用'); layout: {
type: 'void',
'x-component': 'FormGrid',
'x-component-props': {
maxColumns: 2,
minColumns: 2,
columnGap: 24
},
properties: {
externalSystem: {
type: 'string',
title: '三方系统',
'x-decorator': 'FormItem',
'x-component': 'Select',
'x-component-props': {
style: {
width: '100%'
},
placeholder: '请选择三方系统'
},
'x-reactions': ["{{useAsyncDataSource('/api/v1/external-system/list', { params: { type: 'JENKINS' }, mapping: { label: 'name', value: 'id' } })}}"],
},
jenkinsView: {
type: 'string',
title: 'Jenkins视图',
'x-decorator': 'FormItem',
'x-component': 'Select',
'x-component-props': {
style: {
width: '100%'
},
placeholder: '请选择Jenkins视图'
},
'x-reactions': {
dependencies: ['externalSystem'],
fulfill: {
state: {
visible: '{{!!$deps[0]}}',
value: undefined
},
run: '{{function runEffect(){if($deps[0]){useAsyncDataSource("/api/v1/jenkins-view/list", { params: { externalSystemId: $deps[0] }, mapping: { label: "viewName", value: "id" } })($self)}};runEffect()}}'
}
},
"description": "{{$self.dataSource && $self.value ? ($self.dataSource.find(item => item.value === $self.value)?.extra?.description) : undefined}}"
},
jenkinsJob: {
type: 'string',
title: 'Jenkins作业',
'x-decorator': 'FormItem',
'x-component': 'Select',
'x-component-props': {
style: {
width: '100%'
},
placeholder: '请选择Jenkins作业'
},
'x-reactions': {
dependencies: ['externalSystem', 'jenkinsView'],
fulfill: {
state: {
visible: '{{!!$deps[0] && !!$deps[1]}}',
value: undefined
},
run: '{{function runEffect(){if($deps[0] && $deps[1]){useAsyncDataSource("/api/v1/jenkins-job/list", { params: { externalSystemId: $deps[0], viewId: $deps[1] }, mapping: { label: "jobName", value: "id" } })($self)}};runEffect()}}'
}
},
"description": "{{$self.dataSource && $self.value ? ($self.dataSource.find(item => item.value === $self.value)?.extra?.description) : undefined}}"
} }
// 获取对应的模板
const template = templates.find(t => t.languageType === selectedApp.language);
if (!template) {
throw new Error('未找到匹配配置模板');
} }
// 从 formValues 中提取构建变量(排除 applicationId、enabled 和 workflowDefinitionId
const { applicationId, enabled, workflowDefinitionId, ...formBuildVariables } = formValues;
// 构建提交数据
const submitData: CreateDeploymentConfigRequest = {
environmentId: envId,
applicationId,
buildType: template.buildType,
languageType: selectedApp.language,
buildVariables: {
...formBuildVariables, // 表单中的值
...buildVariables // 编辑器中的值
} as Record<string, any>, // 使用类型断言确保类型兼容
enabled,
workflowDefinitionId: isEdit ? initialValues.workflowDefinitionId : workflowDefinitionId
};
if (isEdit) {
await updateDeploymentConfig({
...submitData,
id: initialValues.id,
formVariablesSchema: initialValues.formVariablesSchema,
});
} else {
await createDeploymentConfig(submitData);
} }
message.success(`${isEdit ? '更新' : '创建'}成功`);
form.resetFields();
onSuccess();
} catch (error) {
if (error instanceof Error) {
message.error(`${isEdit ? '更新' : '创建'}失败: ${error.message}`);
} else {
message.error(`${isEdit ? '更新' : '创建'}失败`);
} }
} finally {
setLoading(false);
} }
};
// 处理富文本编辑器的值变化
const handleEditorChange = (key: string, value: string | undefined) => {
setBuildVariables(prev => ({
...prev,
[key]: value || ''
}));
};
return ( return (
<> <>
<Modal <Modal
title={`${isEdit ? '编辑' : '新建'}部署配置`} title={`部署配置`}
open={open} open={open}
onCancel={() => {
form.resetFields();
onCancel();
}}
onOk={handleSubmit}
width={800} width={800}
className="deployment-config-modal" className="deployment-config-modal"
maskClosable={false} maskClosable={false}
confirmLoading={loading}
destroyOnClose destroyOnClose
style={{top: 50}} style={{top: 50}}
styles={{ styles={{
@ -228,178 +159,12 @@ const DeploymentConfigModal: React.FC<DeploymentConfigModalProps> = ({
} }
}} }}
> >
<Form <FormProvider form={form}>
form={form} <SchemaField schema={schema} scope={{useAsyncDataSource}}/>
layout="vertical" <FormButtonGroup>
initialValues={{ <Submit onSubmit={console.log}>Submit</Submit>
enabled: true, </FormButtonGroup>
}} </FormProvider>
>
{/* 应用选择 */}
<Form.Item
name="applicationId"
label="应用"
required
tooltip="选择要部署的应用"
>
<Select
placeholder="请选择应用"
onChange={handleAppChange}
disabled={isEdit}
showSearch
optionFilterProp="children"
>
{applications.map((app) => (
<Option key={app.id} value={app.id}>
{app.appName}
</Option>
))}
</Select>
</Form.Item>
{/* 工作流选择 */}
{!isEdit && (
<Form.Item
name="workflowDefinitionId"
label="工作流"
required
tooltip="选择要使用的工作流"
>
<Select
placeholder="请选择工作流"
showSearch
optionFilterProp="children"
>
{workflowDefinitions.map((workflow) => (
<Option key={workflow.id} value={workflow.id}>
{workflow.name}
</Option>
))}
</Select>
</Form.Item>
)}
{/* 动态构建配置 */}
{selectedTemplate?.buildVariablesSchema?.properties && (
<>
{/* 使用 BetaSchemaForm 渲染普通字段 */}
<BetaSchemaForm
layoutType="Embed"
columns={convertJsonSchemaToColumns({
type: 'object',
properties: Object.fromEntries(
Object.entries(selectedTemplate.buildVariablesSchema.properties)
.filter(([_, prop]) => !prop.editorConfig)
.map(([key, prop]) => [key, {
...prop,
type: prop.type || 'string' // 确保有 type 字段
}])
),
required: selectedTemplate.buildVariablesSchema.required || []
})}
initialValues={buildVariables}
onValuesChange={(_, values) => {
setBuildVariables(prev => ({
...prev,
...values
}));
}}
/>
{/* 渲染编辑器字段 */}
{Object.entries(selectedTemplate.buildVariablesSchema.properties)
.filter(([_, prop]) => prop.editorConfig)
.map(([key, property]) => {
const isFullscreen = fullscreenEditor?.key === key;
const editor = (
<Editor
height={isFullscreen ? "calc(100vh - 55px)" : "300px"}
defaultLanguage={property.editorConfig.language || 'shell'}
theme={property.editorConfig.theme || 'vs-dark'}
value={buildVariables[key] || property.default || ''}
onChange={(value) => handleEditorChange(key, value)}
options={{
minimap: { enabled: isFullscreen ? true : (property.editorConfig.minimap ?? false) },
fontSize: property.editorConfig.fontSize || 14,
lineNumbers: property.editorConfig.lineNumbers ? 'on' : 'off',
wordWrap: property.editorConfig.wordWrap ? 'on' : 'off',
tabSize: property.editorConfig.tabSize || 2,
scrollBeyondLastLine: false,
automaticLayout: true,
folding: property.editorConfig.folding ?? true,
autoClosingBrackets: 'always',
autoClosingQuotes: 'always',
formatOnPaste: true,
formatOnType: true,
suggestOnTriggerCharacters: property.editorConfig.autoComplete ?? true,
renderWhitespace: 'boundary',
}}
/>
);
return isFullscreen ? (
<Modal
key={key}
title={property.title || key}
open={true}
onCancel={() => setFullscreenEditor(null)}
footer={null}
width="100vw"
styles={{
body: { padding: 0 },
mask: { backgroundColor: 'rgba(0, 0, 0, 0.65)' },
content: {
position: 'fixed',
top: 0,
left: 0,
right: 0,
bottom: 0,
margin: 0,
padding: 0,
width: '100vw',
height: '100vh'
}
}}
>
{editor}
</Modal>
) : (
<Form.Item
key={key}
label={
<Space>
{property.title || key}
<Button
type="text"
icon={<FullscreenOutlined />}
onClick={() => setFullscreenEditor({
key,
title: property.title || key
})}
/>
</Space>
}
required={selectedTemplate.buildVariablesSchema.required?.includes(key)}
tooltip={property.description}
>
{editor}
</Form.Item>
);
})}
</>
)}
{/* 状态 */}
<Form.Item
name="enabled"
label="状态"
valuePropName="checked"
tooltip="是否启用该配置"
>
<Switch checkedChildren="启用" unCheckedChildren="禁用" />
</Form.Item>
</Form>
</Modal> </Modal>
</> </>
); );

View File

@ -0,0 +1,408 @@
import React, {useEffect, useState, useCallback} from 'react';
import {Modal, Form, Select, message, Switch, Space, Button} from 'antd';
import {FullscreenOutlined} from '@ant-design/icons';
import type {DeploymentConfig, DeployConfigTemplate, CreateDeploymentConfigRequest} from '../types';
import {createDeploymentConfig, updateDeploymentConfig, getDeployConfigTemplates} from '../service';
import {getApplicationList} from '../../../Application/List/service';
import type {Application} from '../../../Application/List/types';
import {BetaSchemaForm} from '@ant-design/pro-form';
import {convertJsonSchemaToColumns} from '@/utils/jsonSchemaUtils';
import {Editor} from '@/components/Editor';
import type {JsonNode} from '@/types/common';
import {getPublishedDefinitions} from '@/pages/Workflow/Definition/service';
import type {WorkflowDefinition} from '@/pages/Workflow/Definition/types';
import './styles.less';
const {Option} = Select;
interface DeploymentConfigModalProps {
open: boolean;
onCancel: () => void;
onSuccess: () => void;
initialValues?: DeploymentConfig;
envId: number;
}
const DeploymentConfigModal: React.FC<DeploymentConfigModalProps> = ({
open,
onCancel,
onSuccess,
initialValues,
envId,
}) => {
const [form] = Form.useForm();
const [applications, setApplications] = useState<Application[]>([]);
const [templates, setTemplates] = useState<DeployConfigTemplate[]>([]);
const [selectedTemplate, setSelectedTemplate] = useState<DeployConfigTemplate>();
const [buildVariables, setBuildVariables] = useState<JsonNode>({});
const [loading, setLoading] = useState(false);
const [workflowDefinitions, setWorkflowDefinitions] = useState<WorkflowDefinition[]>([]);
const [fullscreenEditor, setFullscreenEditor] = useState<{
key: string;
title: string;
} | null>(null);
const isEdit = !!initialValues?.id;
// 获取应用列表
const fetchApplications = useCallback(async () => {
try {
const data = await getApplicationList();
setApplications(data);
} catch (error) {
message.error('获取应用列表失败');
}
}, []);
// 获取配置模板
const fetchTemplates = useCallback(async () => {
try {
const data = await getDeployConfigTemplates();
setTemplates(data);
} catch (error) {
message.error('获取配置模板失败');
}
}, []);
// 获取已发布的工作流列表
const fetchWorkflowDefinitions = useCallback(async () => {
try {
const data = await getPublishedDefinitions(0);
setWorkflowDefinitions(data);
} catch (error) {
message.error('获取工作流列表失败');
}
}, []);
// 在模态框显示时获取数据
useEffect(() => {
if (open) {
fetchApplications();
fetchTemplates();
if (!isEdit) {
fetchWorkflowDefinitions();
}
}
}, [open, fetchApplications, fetchTemplates, fetchWorkflowDefinitions, isEdit]);
// 初始化表单数据
useEffect(() => {
if (!open) return;
if (initialValues) {
// 设置基础字段
form.setFieldsValue({
applicationId: initialValues.applicationId,
enabled: initialValues.enabled,
...initialValues.buildVariables // 设置所有构建变量到表单中
});
const template = templates.find(t => t.buildType === initialValues.buildType && t.languageType === initialValues.languageType);
if (template) {
setSelectedTemplate(template);
// 只保存编辑器字段的值到 buildVariables
const editorValues = Object.entries(initialValues.buildVariables || {})
.filter(([key]) => template.buildVariablesSchema?.properties?.[key]?.editorConfig)
.reduce((acc, [key, value]) => ({...acc, [key]: value}), {});
setBuildVariables(editorValues);
}
} else {
form.resetFields();
form.setFieldsValue({
enabled: true
});
setSelectedTemplate(undefined);
setBuildVariables({});
}
}, [open, initialValues, form, templates]);
const handleAppChange = useCallback((applicationId: number) => {
const app = applications.find(a => a.id === applicationId);
if (app) {
const template = templates.find(t => t.languageType === app.language);
if (template) {
setSelectedTemplate(template);
setBuildVariables({});
// 重置除了 applicationId 和 enabled 之外的所有字段
const currentValues = form.getFieldsValue();
form.setFieldsValue({
applicationId: currentValues.applicationId,
enabled: currentValues.enabled
});
}
}
}, [applications, templates, form]);
const handleFormValuesChange = (changedValues: Record<string, any>) => {
setBuildVariables(prev => ({
...prev,
...changedValues
}));
};
const handleSubmit = async () => {
try {
setLoading(true);
const formValues = await form.validateFields();
// 获取选中的应用信息
const selectedApp = applications.find(app => app.id === formValues.applicationId);
if (!selectedApp) {
throw new Error('请选择应用');
}
// 获取对应的模板
const template = templates.find(t => t.languageType === selectedApp.language);
if (!template) {
throw new Error('未找到匹配配置模板');
}
// 从 formValues 中提取构建变量(排除 applicationId、enabled 和 workflowDefinitionId
const { applicationId, enabled, workflowDefinitionId, ...formBuildVariables } = formValues;
// 构建提交数据
const submitData: CreateDeploymentConfigRequest = {
environmentId: envId,
applicationId,
buildType: template.buildType,
languageType: selectedApp.language,
buildVariables: {
...formBuildVariables, // 表单中的值
...buildVariables // 编辑器中的值
} as Record<string, any>, // 使用类型断言确保类型兼容
enabled,
workflowDefinitionId: isEdit ? initialValues.workflowDefinitionId : workflowDefinitionId
};
if (isEdit) {
await updateDeploymentConfig({
...submitData,
id: initialValues.id,
formVariablesSchema: initialValues.formVariablesSchema,
});
} else {
await createDeploymentConfig(submitData);
}
message.success(`${isEdit ? '更新' : '创建'}成功`);
form.resetFields();
onSuccess();
} catch (error) {
if (error instanceof Error) {
message.error(`${isEdit ? '更新' : '创建'}失败: ${error.message}`);
} else {
message.error(`${isEdit ? '更新' : '创建'}失败`);
}
} finally {
setLoading(false);
}
};
// 处理富文本编辑器的值变化
const handleEditorChange = (key: string, value: string | undefined) => {
setBuildVariables(prev => ({
...prev,
[key]: value || ''
}));
};
return (
<>
<Modal
title={`${isEdit ? '编辑' : '新建'}部署配置`}
open={open}
onCancel={() => {
form.resetFields();
onCancel();
}}
onOk={handleSubmit}
width={800}
className="deployment-config-modal"
maskClosable={false}
confirmLoading={loading}
destroyOnClose
style={{ top: 50 }}
styles={{
body: {
height: 'calc(100vh - 250px)',
overflowY: 'auto',
padding: '24px'
}
}}
>
<Form
form={form}
layout="vertical"
initialValues={{
enabled: true,
}}
>
{/* 应用选择 */}
<Form.Item
name="applicationId"
label="应用"
required
tooltip="选择要部署的应用"
>
<Select
placeholder="请选择应用"
onChange={handleAppChange}
disabled={isEdit}
showSearch
optionFilterProp="children"
>
{applications.map((app) => (
<Option key={app.id} value={app.id}>
{app.appName}
</Option>
))}
</Select>
</Form.Item>
{/* 工作流选择 */}
{!isEdit && (
<Form.Item
name="workflowDefinitionId"
label="工作流"
required
tooltip="选择要使用的工作流"
>
<Select
placeholder="请选择工作流"
showSearch
optionFilterProp="children"
>
{workflowDefinitions.map((workflow) => (
<Option key={workflow.id} value={workflow.id}>
{workflow.name}
</Option>
))}
</Select>
</Form.Item>
)}
{/* 动态构建配置 */}
{selectedTemplate?.buildVariablesSchema?.properties && (
<>
{/* 使用 BetaSchemaForm 渲染普通字段 */}
<BetaSchemaForm
layoutType="Embed"
columns={convertJsonSchemaToColumns({
type: 'object',
properties: Object.fromEntries(
Object.entries(selectedTemplate.buildVariablesSchema.properties)
.filter(([_, prop]) => !prop.editorConfig)
.map(([key, prop]) => [key, {
...prop,
type: prop.type || 'string' // 确保有 type 字段
}])
),
required: selectedTemplate.buildVariablesSchema.required || []
})}
initialValues={buildVariables}
onValuesChange={(_, values) => {
setBuildVariables(prev => ({
...prev,
...values
}));
}}
/>
{/* 渲染编辑器字段 */}
{Object.entries(selectedTemplate.buildVariablesSchema.properties)
.filter(([_, prop]) => prop.editorConfig)
.map(([key, property]) => {
const isFullscreen = fullscreenEditor?.key === key;
const editor = (
<Editor
height={isFullscreen ? "calc(100vh - 55px)" : "300px"}
defaultLanguage={property.editorConfig.language || 'shell'}
theme={property.editorConfig.theme || 'vs-dark'}
value={buildVariables[key] || property.default || ''}
onChange={(value) => handleEditorChange(key, value)}
options={{
minimap: { enabled: isFullscreen ? true : (property.editorConfig.minimap ?? false) },
fontSize: property.editorConfig.fontSize || 14,
lineNumbers: property.editorConfig.lineNumbers ? 'on' : 'off',
wordWrap: property.editorConfig.wordWrap ? 'on' : 'off',
tabSize: property.editorConfig.tabSize || 2,
scrollBeyondLastLine: false,
automaticLayout: true,
folding: property.editorConfig.folding ?? true,
autoClosingBrackets: 'always',
autoClosingQuotes: 'always',
formatOnPaste: true,
formatOnType: true,
suggestOnTriggerCharacters: property.editorConfig.autoComplete ?? true,
renderWhitespace: 'boundary',
}}
/>
);
return isFullscreen ? (
<Modal
key={key}
title={property.title || key}
open={true}
onCancel={() => setFullscreenEditor(null)}
footer={null}
width="100vw"
styles={{
body: { padding: 0 },
mask: { backgroundColor: 'rgba(0, 0, 0, 0.65)' },
content: {
position: 'fixed',
top: 0,
left: 0,
right: 0,
bottom: 0,
margin: 0,
padding: 0,
width: '100vw',
height: '100vh'
}
}}
>
{editor}
</Modal>
) : (
<Form.Item
key={key}
label={
<Space>
{property.title || key}
<Button
type="text"
icon={<FullscreenOutlined />}
onClick={() => setFullscreenEditor({
key,
title: property.title || key
})}
/>
</Space>
}
required={selectedTemplate.buildVariablesSchema.required?.includes(key)}
tooltip={property.description}
>
{editor}
</Form.Item>
);
})}
</>
)}
{/* 状态 */}
<Form.Item
name="enabled"
label="状态"
valuePropName="checked"
tooltip="是否启用该配置"
>
<Switch checkedChildren="启用" unCheckedChildren="禁用" />
</Form.Item>
</Form>
</Modal>
</>
);
};
export default DeploymentConfigModal;