1
This commit is contained in:
parent
a76685bbd6
commit
f6865cce59
623
frontend/package-lock.json
generated
623
frontend/package-lock.json
generated
@ -21,6 +21,9 @@
|
||||
"@antv/x6-plugin-snapline": "^2.1.7",
|
||||
"@antv/x6-plugin-transform": "^2.1.8",
|
||||
"@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",
|
||||
"@logicflow/core": "^2.0.9",
|
||||
"@logicflow/extension": "^2.0.13",
|
||||
@ -44,10 +47,11 @@
|
||||
"@types/recharts": "^1.8.29",
|
||||
"ajv": "^8.17.1",
|
||||
"ajv-formats": "^3.0.1",
|
||||
"antd": "^5.22.2",
|
||||
"antd": "^5.23.1",
|
||||
"axios": "^1.6.2",
|
||||
"cmdk": "^1.0.4",
|
||||
"dagre": "^0.8.5",
|
||||
"dayjs": "^1.11.13",
|
||||
"form-render": "^2.5.1",
|
||||
"less": "^4.2.1",
|
||||
"monaco-editor": "^0.52.2",
|
||||
@ -112,11 +116,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@ant-design/colors": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.1.0.tgz",
|
||||
"integrity": "sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.2.0.tgz",
|
||||
"integrity": "sha512-bjTObSnZ9C/O8MB/B4OUtd/q9COomuJAR2SYfhxLyHvCKn4EKwCN3e+fWGMo7H5InAyV0wL17jdE9ALrdOW/6A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ctrl/tinycolor": "^3.6.1"
|
||||
"@ant-design/fast-color": "^2.0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@ant-design/cssinjs": {
|
||||
@ -138,9 +143,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@ant-design/cssinjs-utils": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.1.tgz",
|
||||
"integrity": "sha512-2HAiyGGGnM0es40SxdszeQAU5iWp41wBIInq+ONTCKjlSKOrzQfnw4JDtB8IBmqE6tQaEKwmzTP2LGdt5DSwYQ==",
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmmirror.com/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.3.tgz",
|
||||
"integrity": "sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ant-design/cssinjs": "^1.21.0",
|
||||
"@babel/runtime": "^7.23.2",
|
||||
@ -163,9 +169,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@ant-design/icons": {
|
||||
"version": "5.5.1",
|
||||
"resolved": "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.5.1.tgz",
|
||||
"integrity": "sha512-0UrM02MA2iDIgvLatWrj6YTCYe0F/cwXvVE0E2SqGrL7PZireQwgEKTKBisWpZyal5eXZLvuM98kju6YtYne8w==",
|
||||
"version": "5.5.2",
|
||||
"resolved": "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.5.2.tgz",
|
||||
"integrity": "sha512-xc53rjVBl9v2BqFxUjZGti/RfdDeA8/6KYglmInM2PNqSXc/WfuGDTifJI/ZsokJK0aeKvOIbXc9y2g8ILAhEA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ant-design/colors": "^7.0.0",
|
||||
"@ant-design/icons-svg": "^4.4.0",
|
||||
@ -1672,6 +1679,224 @@
|
||||
"integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
|
||||
"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": {
|
||||
"version": "3.9.1",
|
||||
"resolved": "https://registry.npmmirror.com/@hookform/resolvers/-/resolvers-3.9.1.tgz",
|
||||
@ -1838,6 +2063,12 @@
|
||||
"@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": {
|
||||
"version": "2.0.9",
|
||||
"resolved": "https://registry.npmmirror.com/@logicflow/core/-/core-2.0.9.tgz",
|
||||
@ -2932,6 +3163,7 @@
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmmirror.com/@rc-component/context/-/context-1.4.0.tgz",
|
||||
"integrity": "sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"rc-util": "^5.27.0"
|
||||
@ -2945,6 +3177,7 @@
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz",
|
||||
"integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.18.0"
|
||||
},
|
||||
@ -3023,16 +3256,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@rc-component/trigger": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.2.5.tgz",
|
||||
"integrity": "sha512-F1EJ4KjFpGAHAjuKvOyZB/6IZDkVx0bHl0M4fQM5wXcmm7lgTgVSSnR3bXwdmS6jOJGHOqfDxIJW3WUvwMIXhQ==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.2.6.tgz",
|
||||
"integrity": "sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.23.2",
|
||||
"@rc-component/portal": "^1.1.0",
|
||||
"classnames": "^2.3.2",
|
||||
"rc-motion": "^2.0.0",
|
||||
"rc-resize-observer": "^1.3.1",
|
||||
"rc-util": "^5.38.0"
|
||||
"rc-util": "^5.44.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.x"
|
||||
@ -3496,7 +3730,6 @@
|
||||
"version": "18.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.3.5.tgz",
|
||||
"integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==",
|
||||
"devOptional": true,
|
||||
"peerDependencies": {
|
||||
"@types/react": "^18.0.0"
|
||||
}
|
||||
@ -4015,57 +4248,58 @@
|
||||
}
|
||||
},
|
||||
"node_modules/antd": {
|
||||
"version": "5.22.2",
|
||||
"resolved": "https://registry.npmmirror.com/antd/-/antd-5.22.2.tgz",
|
||||
"integrity": "sha512-vihhiJbm9VG3d6boUeD1q2MXMax+qBrXhgqCEC+45v8iGUF6m4Ct+lFiCW4oWaN3EABOsbVA6Svy3Rj/QkQFKw==",
|
||||
"version": "5.23.1",
|
||||
"resolved": "https://registry.npmmirror.com/antd/-/antd-5.23.1.tgz",
|
||||
"integrity": "sha512-rg5xd5LotHw0IRyo/nsiUN/EEV3e+xU4V4UmIb/62hMN9+3APyz1Ohjf17a+fN13jC8sNY1hP1K252SU2Th0xA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ant-design/colors": "^7.1.0",
|
||||
"@ant-design/cssinjs": "^1.21.1",
|
||||
"@ant-design/cssinjs-utils": "^1.1.1",
|
||||
"@ant-design/icons": "^5.5.1",
|
||||
"@ant-design/colors": "^7.2.0",
|
||||
"@ant-design/cssinjs": "^1.22.0",
|
||||
"@ant-design/cssinjs-utils": "^1.1.3",
|
||||
"@ant-design/fast-color": "^2.0.6",
|
||||
"@ant-design/icons": "^5.5.2",
|
||||
"@ant-design/react-slick": "~1.1.2",
|
||||
"@babel/runtime": "^7.25.7",
|
||||
"@ctrl/tinycolor": "^3.6.1",
|
||||
"@babel/runtime": "^7.26.0",
|
||||
"@rc-component/color-picker": "~2.0.1",
|
||||
"@rc-component/mutate-observer": "^1.1.0",
|
||||
"@rc-component/qrcode": "~1.0.0",
|
||||
"@rc-component/tour": "~1.15.1",
|
||||
"@rc-component/trigger": "^2.2.5",
|
||||
"@rc-component/trigger": "^2.2.6",
|
||||
"classnames": "^2.5.1",
|
||||
"copy-to-clipboard": "^3.3.3",
|
||||
"dayjs": "^1.11.11",
|
||||
"rc-cascader": "~3.30.0",
|
||||
"rc-checkbox": "~3.3.0",
|
||||
"rc-cascader": "~3.33.0",
|
||||
"rc-checkbox": "~3.5.0",
|
||||
"rc-collapse": "~3.9.0",
|
||||
"rc-dialog": "~9.6.0",
|
||||
"rc-drawer": "~7.2.0",
|
||||
"rc-dropdown": "~4.2.0",
|
||||
"rc-field-form": "~2.5.1",
|
||||
"rc-dropdown": "~4.2.1",
|
||||
"rc-field-form": "~2.7.0",
|
||||
"rc-image": "~7.11.0",
|
||||
"rc-input": "~1.6.3",
|
||||
"rc-input-number": "~9.3.0",
|
||||
"rc-mentions": "~2.17.0",
|
||||
"rc-input": "~1.7.2",
|
||||
"rc-input-number": "~9.4.0",
|
||||
"rc-mentions": "~2.19.1",
|
||||
"rc-menu": "~9.16.0",
|
||||
"rc-motion": "^2.9.3",
|
||||
"rc-motion": "^2.9.5",
|
||||
"rc-notification": "~5.6.2",
|
||||
"rc-pagination": "~4.3.0",
|
||||
"rc-picker": "~4.8.1",
|
||||
"rc-pagination": "~5.0.0",
|
||||
"rc-picker": "~4.9.2",
|
||||
"rc-progress": "~4.0.0",
|
||||
"rc-rate": "~2.13.0",
|
||||
"rc-resize-observer": "^1.4.0",
|
||||
"rc-segmented": "~2.5.0",
|
||||
"rc-select": "~14.16.3",
|
||||
"rc-slider": "~11.1.7",
|
||||
"rc-resize-observer": "^1.4.3",
|
||||
"rc-segmented": "~2.7.0",
|
||||
"rc-select": "~14.16.5",
|
||||
"rc-slider": "~11.1.8",
|
||||
"rc-steps": "~6.0.1",
|
||||
"rc-switch": "~4.1.0",
|
||||
"rc-table": "~7.48.1",
|
||||
"rc-tabs": "~15.4.0",
|
||||
"rc-textarea": "~1.8.2",
|
||||
"rc-tooltip": "~6.2.1",
|
||||
"rc-tree": "~5.10.1",
|
||||
"rc-tree-select": "~5.24.4",
|
||||
"rc-table": "~7.50.2",
|
||||
"rc-tabs": "~15.5.0",
|
||||
"rc-textarea": "~1.9.0",
|
||||
"rc-tooltip": "~6.3.2",
|
||||
"rc-tree": "~5.13.0",
|
||||
"rc-tree-select": "~5.27.0",
|
||||
"rc-upload": "~4.8.1",
|
||||
"rc-util": "^5.43.0",
|
||||
"rc-util": "^5.44.3",
|
||||
"scroll-into-view-if-needed": "^3.1.0",
|
||||
"throttle-debounce": "^5.0.2"
|
||||
},
|
||||
@ -4314,6 +4548,16 @@
|
||||
"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": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz",
|
||||
@ -4820,28 +5064,11 @@
|
||||
"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": {
|
||||
"version": "1.11.13",
|
||||
"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
|
||||
"integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
|
||||
"integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/debug": {
|
||||
"version": "4.3.7",
|
||||
@ -4945,6 +5172,16 @@
|
||||
"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": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
||||
@ -6262,6 +6499,15 @@
|
||||
"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": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
|
||||
@ -6465,17 +6711,6 @@
|
||||
"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": {
|
||||
"version": "0.52.2",
|
||||
"resolved": "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.52.2.tgz",
|
||||
@ -6550,6 +6785,16 @@
|
||||
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
|
||||
"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": {
|
||||
"version": "2.0.18",
|
||||
"resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz",
|
||||
@ -6662,6 +6907,16 @@
|
||||
"dev": true,
|
||||
"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": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",
|
||||
@ -6700,6 +6955,16 @@
|
||||
"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": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
|
||||
@ -7134,14 +7399,15 @@
|
||||
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
||||
},
|
||||
"node_modules/rc-cascader": {
|
||||
"version": "3.30.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.30.0.tgz",
|
||||
"integrity": "sha512-rrzSbk1Bdqbu+pDwiLCLHu72+lwX9BZ28+JKzoi0DWZ4N29QYFeip8Gctl33QVd2Xg3Rf14D3yAOG76ElJw16w==",
|
||||
"version": "3.33.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.33.0.tgz",
|
||||
"integrity": "sha512-JvZrMbKBXIbEDmpIORxqvedY/bck6hGbs3hxdWT8eS9wSQ1P7//lGxbyKjOSyQiVBbgzNWriSe6HoMcZO/+0rQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.25.7",
|
||||
"classnames": "^2.3.1",
|
||||
"rc-select": "~14.16.2",
|
||||
"rc-tree": "~5.10.1",
|
||||
"rc-tree": "~5.13.0",
|
||||
"rc-util": "^5.43.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@ -7150,9 +7416,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-checkbox": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.3.0.tgz",
|
||||
"integrity": "sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==",
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.5.0.tgz",
|
||||
"integrity": "sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.3.2",
|
||||
@ -7211,14 +7478,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-dropdown": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.2.0.tgz",
|
||||
"integrity": "sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==",
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.2.1.tgz",
|
||||
"integrity": "sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.18.3",
|
||||
"@rc-component/trigger": "^2.0.0",
|
||||
"classnames": "^2.2.6",
|
||||
"rc-util": "^5.17.0"
|
||||
"rc-util": "^5.44.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=16.11.0",
|
||||
@ -7226,9 +7494,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-field-form": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.5.1.tgz",
|
||||
"integrity": "sha512-33hunXwynQJyeae7LS3hMGTXNeRBjiPyPYgB0824EbmLHiXC1EBGyUwRh6xjLRy9c+en5WARYN0gJz5+JAqwig==",
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.7.0.tgz",
|
||||
"integrity": "sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.18.0",
|
||||
"@rc-component/async-validator": "^5.0.3",
|
||||
@ -7260,9 +7529,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-input": {
|
||||
"version": "1.6.3",
|
||||
"resolved": "https://registry.npmmirror.com/rc-input/-/rc-input-1.6.3.tgz",
|
||||
"integrity": "sha512-wI4NzuqBS8vvKr8cljsvnTUqItMfG1QbJoxovCgL+DX4eVUcHIjVwharwevIxyy7H/jbLryh+K7ysnJr23aWIA==",
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmmirror.com/rc-input/-/rc-input-1.7.2.tgz",
|
||||
"integrity": "sha512-g3nYONnl4edWj2FfVoxsU3Ec4XTE+Hb39Kfh2MFxMZjp/0gGyPUgy/v7ZhS27ZxUFNkuIDYXm9PJsLyJbtg86A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.11.1",
|
||||
"classnames": "^2.2.1",
|
||||
@ -7274,14 +7544,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-input-number": {
|
||||
"version": "9.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-9.3.0.tgz",
|
||||
"integrity": "sha512-JQ363ywqRyxwgVxpg2z2kja3CehTpYdqR7emJ/6yJjRdbvo+RvfE83fcpBCIJRq3zLp8SakmEXq60qzWyZ7Usw==",
|
||||
"version": "9.4.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-9.4.0.tgz",
|
||||
"integrity": "sha512-Tiy4DcXcFXAf9wDhN8aUAyMeCLHJUHA/VA/t7Hj8ZEx5ETvxG7MArDOSE6psbiSCo+vJPm4E3fGN710ITVn6GA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"@rc-component/mini-decimal": "^1.0.1",
|
||||
"classnames": "^2.2.5",
|
||||
"rc-input": "~1.6.0",
|
||||
"rc-input": "~1.7.1",
|
||||
"rc-util": "^5.40.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@ -7290,16 +7561,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-mentions": {
|
||||
"version": "2.17.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.17.0.tgz",
|
||||
"integrity": "sha512-sfHy+qLvc+p8jx8GUsujZWXDOIlIimp6YQz7N5ONQ6bHsa2kyG+BLa5k2wuxgebBbH97is33wxiyq5UkiXRpHA==",
|
||||
"version": "2.19.1",
|
||||
"resolved": "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.19.1.tgz",
|
||||
"integrity": "sha512-KK3bAc/bPFI993J3necmaMXD2reZTzytZdlTvkeBbp50IGH1BDPDvxLdHDUrpQx2b2TGaVJsn+86BvYa03kGqA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.22.5",
|
||||
"@rc-component/trigger": "^2.0.0",
|
||||
"classnames": "^2.2.6",
|
||||
"rc-input": "~1.6.0",
|
||||
"rc-input": "~1.7.1",
|
||||
"rc-menu": "~9.16.0",
|
||||
"rc-textarea": "~1.8.0",
|
||||
"rc-textarea": "~1.9.0",
|
||||
"rc-util": "^5.34.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@ -7311,6 +7583,7 @@
|
||||
"version": "9.16.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.16.0.tgz",
|
||||
"integrity": "sha512-vAL0yqPkmXWk3+YKRkmIR8TYj3RVdEt3ptG2jCJXWNAvQbT0VJJdRyHZ7kG/l1JsZlB+VJq/VcYOo69VR4oD+w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"@rc-component/trigger": "^2.0.0",
|
||||
@ -7325,13 +7598,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-motion": {
|
||||
"version": "2.9.3",
|
||||
"resolved": "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.3.tgz",
|
||||
"integrity": "sha512-rkW47ABVkic7WEB0EKJqzySpvDqwl60/tdkY7hWP7dYnh5pm0SzJpo54oW3TDUGXV5wfxXFmMkxrzRRbotQ0+w==",
|
||||
"version": "2.9.5",
|
||||
"resolved": "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.5.tgz",
|
||||
"integrity": "sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.11.1",
|
||||
"classnames": "^2.2.1",
|
||||
"rc-util": "^5.43.0"
|
||||
"rc-util": "^5.44.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=16.9.0",
|
||||
@ -7357,9 +7631,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-overflow": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.3.2.tgz",
|
||||
"integrity": "sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==",
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.4.1.tgz",
|
||||
"integrity": "sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.11.1",
|
||||
"classnames": "^2.2.1",
|
||||
@ -7372,9 +7647,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-pagination": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-4.3.0.tgz",
|
||||
"integrity": "sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==",
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-5.0.0.tgz",
|
||||
"integrity": "sha512-QjrPvbAQwps93iluvFM62AEYglGYhWW2q/nliQqmvkTi4PXP4HHoh00iC1Sa5LLVmtWQHmG73fBi2x6H6vFHRg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.3.2",
|
||||
@ -7386,9 +7662,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-picker": {
|
||||
"version": "4.8.1",
|
||||
"resolved": "https://registry.npmmirror.com/rc-picker/-/rc-picker-4.8.1.tgz",
|
||||
"integrity": "sha512-lj9hXXMSkbjFUIhfQh8XH698ybxnoBOfq7pdM1FvfSyDwdFhdQa7dvsIYwo6Uz7Zp1wVkfw5rOJO3MpdWzoHsg==",
|
||||
"version": "4.9.2",
|
||||
"resolved": "https://registry.npmmirror.com/rc-picker/-/rc-picker-4.9.2.tgz",
|
||||
"integrity": "sha512-SLW4PRudODOomipKI0dvykxW4P8LOqtMr17MOaLU6NQJhkh9SZeh44a/8BMxwv5T6e3kiIeYc9k5jFg2Mv35Pg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.24.7",
|
||||
"@rc-component/trigger": "^2.0.0",
|
||||
@ -7455,13 +7732,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-resize-observer": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.0.tgz",
|
||||
"integrity": "sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==",
|
||||
"version": "1.4.3",
|
||||
"resolved": "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.3.tgz",
|
||||
"integrity": "sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.20.7",
|
||||
"classnames": "^2.2.1",
|
||||
"rc-util": "^5.38.0",
|
||||
"rc-util": "^5.44.1",
|
||||
"resize-observer-polyfill": "^1.5.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@ -7470,9 +7748,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-segmented": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.5.0.tgz",
|
||||
"integrity": "sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==",
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.7.0.tgz",
|
||||
"integrity": "sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.11.1",
|
||||
"classnames": "^2.2.1",
|
||||
@ -7485,9 +7764,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-select": {
|
||||
"version": "14.16.3",
|
||||
"resolved": "https://registry.npmmirror.com/rc-select/-/rc-select-14.16.3.tgz",
|
||||
"integrity": "sha512-51+j6s3fJJJXB7E+B6W1hM4Tjzv1B/Decooz9ilgegDBt3ZAth1b/xMwYCTrT5BbG2e53XACQsyDib2+3Ro1fg==",
|
||||
"version": "14.16.5",
|
||||
"resolved": "https://registry.npmmirror.com/rc-select/-/rc-select-14.16.5.tgz",
|
||||
"integrity": "sha512-cRls713egTcitJ7WUXhHEf22h3U1OMC8nbw9+HN4Fniew8Xo3avgEDvIeGRwhbiyPNbQR23AwP+tt6KWUcB4IA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"@rc-component/trigger": "^2.1.1",
|
||||
@ -7506,9 +7786,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-slider": {
|
||||
"version": "11.1.7",
|
||||
"resolved": "https://registry.npmmirror.com/rc-slider/-/rc-slider-11.1.7.tgz",
|
||||
"integrity": "sha512-ytYbZei81TX7otdC0QvoYD72XSlxvTihNth5OeZ6PMXyEDq/vHdWFulQmfDGyXK1NwKwSlKgpvINOa88uT5g2A==",
|
||||
"version": "11.1.8",
|
||||
"resolved": "https://registry.npmmirror.com/rc-slider/-/rc-slider-11.1.8.tgz",
|
||||
"integrity": "sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.2.5",
|
||||
@ -7554,15 +7835,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-table": {
|
||||
"version": "7.48.1",
|
||||
"resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.48.1.tgz",
|
||||
"integrity": "sha512-Z4mDKjWg+xz/Ezdw6ivWcbqRpaJ0QfCORRoRrlrw65KSGZLK8OcTdacH22/fyGb8L4It/0/9qcMm8VrVAk/WBw==",
|
||||
"version": "7.50.2",
|
||||
"resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.50.2.tgz",
|
||||
"integrity": "sha512-+nJbzxzstBriLb5sr9U7Vjs7+4dO8cWlouQbMwBVYghk2vr508bBdkHJeP/z9HVjAIKmAgMQKxmtbgDd3gc5wA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"@rc-component/context": "^1.4.0",
|
||||
"classnames": "^2.2.5",
|
||||
"rc-resize-observer": "^1.1.0",
|
||||
"rc-util": "^5.41.0",
|
||||
"rc-util": "^5.44.3",
|
||||
"rc-virtual-list": "^3.14.2"
|
||||
},
|
||||
"engines": {
|
||||
@ -7574,9 +7856,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-tabs": {
|
||||
"version": "15.4.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.4.0.tgz",
|
||||
"integrity": "sha512-llKuyiAVqmXm2z7OrmhX5cNb2ueZaL8ZyA2P4R+6/72NYYcbEgOXibwHiQCFY2RiN3swXl53SIABi2CumUS02g==",
|
||||
"version": "15.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.5.0.tgz",
|
||||
"integrity": "sha512-NrDcTaUJLh9UuDdMBkjKTn97U9iXG44s9D03V5NHkhEDWO5/nC6PwC3RhkCWFMKB9hh+ryqgZ+TIr1b9Jd/hnQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.11.2",
|
||||
"classnames": "2.x",
|
||||
@ -7595,13 +7878,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-textarea": {
|
||||
"version": "1.8.2",
|
||||
"resolved": "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.8.2.tgz",
|
||||
"integrity": "sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==",
|
||||
"version": "1.9.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.9.0.tgz",
|
||||
"integrity": "sha512-dQW/Bc/MriPBTugj2Kx9PMS5eXCCGn2cxoIaichjbNvOiARlaHdI99j4DTxLl/V8+PIfW06uFy7kjfUIDDKyxQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.2.1",
|
||||
"rc-input": "~1.6.0",
|
||||
"rc-input": "~1.7.1",
|
||||
"rc-resize-observer": "^1.0.0",
|
||||
"rc-util": "^5.27.0"
|
||||
},
|
||||
@ -7611,9 +7895,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-tooltip": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.2.1.tgz",
|
||||
"integrity": "sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==",
|
||||
"version": "6.3.2",
|
||||
"resolved": "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.3.2.tgz",
|
||||
"integrity": "sha512-oA4HZIiZJbUQ5ojigM0y4XtWxaH/aQlJSzknjICRWNpqyemy1sL3X3iEQV2eSPBWEq+bqU3+aSs81z+28j9luA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.11.2",
|
||||
"@rc-component/trigger": "^2.0.0",
|
||||
@ -7625,9 +7910,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-tree": {
|
||||
"version": "5.10.1",
|
||||
"resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.10.1.tgz",
|
||||
"integrity": "sha512-FPXb3tT/u39mgjr6JNlHaUTYfHkVGW56XaGDahDpEFLGsnPxGcVLNTjcqoQb/GNbSCycl7tD7EvIymwOTP0+Yw==",
|
||||
"version": "5.13.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.13.0.tgz",
|
||||
"integrity": "sha512-2+lFvoVRnvHQ1trlpXMOWtF8BUgF+3TiipG72uOfhpL5CUdXCk931kvDdUkTL/IZVtNEDQKwEEmJbAYJSA5NnA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "2.x",
|
||||
@ -7644,14 +7930,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-tree-select": {
|
||||
"version": "5.24.5",
|
||||
"resolved": "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.24.5.tgz",
|
||||
"integrity": "sha512-PnyR8LZJWaiEFw0SHRqo4MNQWyyZsyMs8eNmo68uXZWjxc7QqeWcjPPoONN0rc90c3HZqGF9z+Roz+GLzY5GXA==",
|
||||
"version": "5.27.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.27.0.tgz",
|
||||
"integrity": "sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.25.7",
|
||||
"classnames": "2.x",
|
||||
"rc-select": "~14.16.2",
|
||||
"rc-tree": "~5.10.1",
|
||||
"rc-tree": "~5.13.0",
|
||||
"rc-util": "^5.43.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@ -7704,9 +7991,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-util": {
|
||||
"version": "5.43.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.43.0.tgz",
|
||||
"integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==",
|
||||
"version": "5.44.3",
|
||||
"resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.44.3.tgz",
|
||||
"integrity": "sha512-q6KCcOFk3rv/zD3MckhJteZxb0VjAIFuf622B7ElK4vfrZdAzs16XR5p3VTdy3+U5jfJU5ACz4QnhLSuAGe5dA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.18.3",
|
||||
"react-is": "^18.2.0"
|
||||
@ -7717,9 +8005,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rc-virtual-list": {
|
||||
"version": "3.15.0",
|
||||
"resolved": "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.15.0.tgz",
|
||||
"integrity": "sha512-dF2YQztqrU3ijAeWOqscTshCEr7vpimzSqAVjO1AyAmaqcHulaXpnGR0ptK5PXfxTUy48VkJOiglMIxlkYGs0w==",
|
||||
"version": "3.17.1",
|
||||
"resolved": "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.17.1.tgz",
|
||||
"integrity": "sha512-n9rKy6BB/Hi/LsOJr9ILpeFxDJfAIYzFYX1famZb0KLQrlsdxNBDsBjBY9lblJ35MTRJwi06ohv5ma9uTUeLog==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.20.0",
|
||||
"classnames": "^2.2.6",
|
||||
@ -7930,6 +8219,18 @@
|
||||
"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": {
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmmirror.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
|
||||
@ -8874,7 +9175,6 @@
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.7.2.tgz",
|
||||
"integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
@ -8926,6 +9226,15 @@
|
||||
"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": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
|
||||
|
||||
@ -23,6 +23,9 @@
|
||||
"@antv/x6-plugin-snapline": "^2.1.7",
|
||||
"@antv/x6-plugin-transform": "^2.1.8",
|
||||
"@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",
|
||||
"@logicflow/core": "^2.0.9",
|
||||
"@logicflow/extension": "^2.0.13",
|
||||
@ -46,10 +49,11 @@
|
||||
"@types/recharts": "^1.8.29",
|
||||
"ajv": "^8.17.1",
|
||||
"ajv-formats": "^3.0.1",
|
||||
"antd": "^5.22.2",
|
||||
"antd": "^5.23.1",
|
||||
"axios": "^1.6.2",
|
||||
"cmdk": "^1.0.4",
|
||||
"dagre": "^0.8.5",
|
||||
"dayjs": "^1.11.13",
|
||||
"form-render": "^2.5.1",
|
||||
"less": "^4.2.1",
|
||||
"monaco-editor": "^0.52.2",
|
||||
|
||||
@ -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;
|
||||
@ -1,19 +1,12 @@
|
||||
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 React from 'react';
|
||||
import {Modal} from 'antd';
|
||||
import type {DeploymentConfig} from '../types';
|
||||
import './styles.less';
|
||||
|
||||
const {Option} = Select;
|
||||
import {FormButtonGroup, FormItem, Select, Submit, FormGrid} from '@formily/antd-v5'
|
||||
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 {
|
||||
open: boolean;
|
||||
@ -23,203 +16,141 @@ interface DeploymentConfigModalProps {
|
||||
envId: number;
|
||||
}
|
||||
|
||||
// 定义字段映射接口
|
||||
interface FieldMapping {
|
||||
label: string; // 显示字段
|
||||
value: string; // 值字段
|
||||
}
|
||||
|
||||
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;
|
||||
open,
|
||||
onCancel,
|
||||
onSuccess,
|
||||
initialValues,
|
||||
envId,
|
||||
}) => {
|
||||
|
||||
// 获取应用列表
|
||||
const fetchApplications = useCallback(async () => {
|
||||
try {
|
||||
const data = await getApplicationList();
|
||||
setApplications(data);
|
||||
} catch (error) {
|
||||
message.error('获取应用列表失败');
|
||||
const SchemaField = createSchemaField({
|
||||
components: {
|
||||
Select,
|
||||
FormItem,
|
||||
FormGrid,
|
||||
},
|
||||
})
|
||||
|
||||
// 通用的异步数据源加载方法
|
||||
const useAsyncDataSource = (
|
||||
url: string,
|
||||
options?: {
|
||||
params?: Record<string, any>;
|
||||
mapping?: FieldMapping;
|
||||
}
|
||||
}, []);
|
||||
|
||||
// 获取配置模板
|
||||
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
|
||||
}));
|
||||
) => (field: Field) => {
|
||||
const {params, mapping = {label: 'name', value: 'id'}} = options || {};
|
||||
field.loading = true;
|
||||
request.get(url, {params})
|
||||
.then(action.bound?.((response) => {
|
||||
field.dataSource = response.map((item: any) => ({
|
||||
label: item[mapping.label],
|
||||
value: item[mapping.value]
|
||||
}));
|
||||
field.loading = false;
|
||||
}))
|
||||
.catch(action.bound?.((error) => {
|
||||
console.error(`Failed to load data from ${url}:`, error);
|
||||
field.dataSource = [];
|
||||
field.loading = false;
|
||||
}));
|
||||
};
|
||||
|
||||
const handleSubmit = async () => {
|
||||
try {
|
||||
setLoading(true);
|
||||
const formValues = await form.validateFields();
|
||||
const form = createForm()
|
||||
|
||||
// 获取选中的应用信息
|
||||
const selectedApp = applications.find(app => app.id === formValues.applicationId);
|
||||
if (!selectedApp) {
|
||||
throw new Error('请选择应用');
|
||||
const schema: ISchema = {
|
||||
type: 'object',
|
||||
properties: {
|
||||
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 (
|
||||
<>
|
||||
<Modal
|
||||
title={`${isEdit ? '编辑' : '新建'}部署配置`}
|
||||
title={`部署配置`}
|
||||
open={open}
|
||||
onCancel={() => {
|
||||
form.resetFields();
|
||||
onCancel();
|
||||
}}
|
||||
onOk={handleSubmit}
|
||||
width={800}
|
||||
className="deployment-config-modal"
|
||||
maskClosable={false}
|
||||
confirmLoading={loading}
|
||||
destroyOnClose
|
||||
style={{ top: 50 }}
|
||||
style={{top: 50}}
|
||||
styles={{
|
||||
body: {
|
||||
height: 'calc(100vh - 250px)',
|
||||
@ -228,181 +159,15 @@ const DeploymentConfigModal: React.FC<DeploymentConfigModalProps> = ({
|
||||
}
|
||||
}}
|
||||
>
|
||||
<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>
|
||||
<FormProvider form={form}>
|
||||
<SchemaField schema={schema} scope={{useAsyncDataSource}}/>
|
||||
<FormButtonGroup>
|
||||
<Submit onSubmit={console.log}>Submit</Submit>
|
||||
</FormButtonGroup>
|
||||
</FormProvider>
|
||||
</Modal>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default DeploymentConfigModal;
|
||||
export default DeploymentConfigModal;
|
||||
@ -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;
|
||||
Loading…
Reference in New Issue
Block a user