diff --git a/.eslintrc.json b/.eslintrc.json index 3766dd0..84053b0 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -13,6 +13,11 @@ "ecmaVersion": "latest", "sourceType": "module" }, + "settings": { + "react": { + "version": "detect" + } + }, "plugins": [ "react" ], diff --git a/package-lock.json b/package-lock.json index ff23082..eab1659 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "@ant-design/charts": "^1.4.2", + "@ant-design/pro-components": "^2.6.16", "antd": "^4.22.6", "dingtalk-jsapi": "^3.0.9", "mobx": "^6.6.1", @@ -88,6 +89,24 @@ "@ctrl/tinycolor": "^3.4.0" } }, + "node_modules/@ant-design/cssinjs": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.17.0.tgz", + "integrity": "sha512-MgGCZ6sfD3yQB0XW0hN4jgixMxApTlDYyct+pc7fRZNO4CaqWWm/9iXkkljNR27lyWLZmm+XiDfcIOo1bnrnMA==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@emotion/hash": "^0.8.0", + "@emotion/unitless": "^0.7.5", + "classnames": "^2.3.1", + "csstype": "^3.0.10", + "rc-util": "^5.35.0", + "stylis": "^4.0.13" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, "node_modules/@ant-design/flowchart": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/@ant-design/flowchart/-/flowchart-1.2.0.tgz", @@ -143,9 +162,9 @@ } }, "node_modules/@ant-design/icons-svg": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz", - "integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz", + "integrity": "sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g==" }, "node_modules/@ant-design/maps": { "version": "1.0.6", @@ -175,21 +194,504 @@ "react-dom": ">=16.8.4" } }, + "node_modules/@ant-design/pro-card": { + "version": "2.5.14", + "resolved": "https://registry.npmjs.org/@ant-design/pro-card/-/pro-card-2.5.14.tgz", + "integrity": "sha512-ml2K87WAoRUtfEIJovdsSp0/fmT6pb739/Er7iT6EfhI0Q3Wb79OG2dgwCiKWrDd5I1uiLByiIkygaS2Wxhzqg==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "omit.js": "^2.0.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.4.0" + }, + "peerDependencies": { + "antd": ">=4.23.0 || >=5.0.0", + "react": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-card/node_modules/@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/pro-card/node_modules/@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/pro-components": { + "version": "2.6.16", + "resolved": "https://registry.npmjs.org/@ant-design/pro-components/-/pro-components-2.6.16.tgz", + "integrity": "sha512-l3PU8oa23JWmICKDonSGWp26iM+AmXObvE7hyJ3utnSFsrBDHup9vAFTTyt5e/Lt1m4my7Wm5x6kIjjRbJ00dQ==", + "dependencies": { + "@ant-design/pro-card": "2.5.14", + "@ant-design/pro-descriptions": "2.5.2", + "@ant-design/pro-field": "2.12.3", + "@ant-design/pro-form": "2.18.4", + "@ant-design/pro-layout": "7.16.11", + "@ant-design/pro-list": "2.5.16", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-skeleton": "2.1.7", + "@ant-design/pro-table": "3.12.1", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.16.3" + }, + "peerDependencies": { + "antd": ">=4.23.0 || >=5.0.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-descriptions": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@ant-design/pro-descriptions/-/pro-descriptions-2.5.2.tgz", + "integrity": "sha512-ru7/+9CXTs+67Tkh7Frf2+f7QLPcrykI60yDg1vC8X6uYzc/yl8aAJc/2C86NT4nmaCgVhJ16IHK50VmK8DbPw==", + "dependencies": { + "@ant-design/pro-field": "2.12.3", + "@ant-design/pro-form": "2.18.4", + "@ant-design/pro-skeleton": "2.1.7", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "rc-resize-observer": "^0.2.3", + "rc-util": "^5.0.6" + }, + "peerDependencies": { + "antd": ">=4.23.0 || >=5.0.0", + "react": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-descriptions/node_modules/rc-resize-observer": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-0.2.6.tgz", + "integrity": "sha512-YX6nYnd6fk7zbuvT6oSDMKiZjyngjHoy+fz+vL3Tez38d/G5iGdaDJa2yE7345G6sc4Mm1IGRUIwclvltddhmA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@ant-design/pro-field": { + "version": "2.12.3", + "resolved": "https://registry.npmjs.org/@ant-design/pro-field/-/pro-field-2.12.3.tgz", + "integrity": "sha512-WB0V7gn55yr0vg3vD3cO9it4ffXM4edwb3RsNnD6vjIgj6gxeCIIBq5KTvKECil+HXloCfLFgeiQ2BoDnrcm6w==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "@chenshuai2144/sketch-color": "^1.0.8", + "classnames": "^2.3.2", + "dayjs": "^1.11.9", + "lodash.tonumber": "^4.0.3", + "omit.js": "^2.0.2", + "rc-util": "^5.4.0", + "swr": "^2.0.0" + }, + "peerDependencies": { + "antd": ">=4.23.0 || >=5.0.0", + "react": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-field/node_modules/@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/pro-field/node_modules/@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/pro-form": { + "version": "2.18.4", + "resolved": "https://registry.npmjs.org/@ant-design/pro-form/-/pro-form-2.18.4.tgz", + "integrity": "sha512-0YTWC6cmaKa+rMCJCcCktNN94QkiVLGquKGI5qCme2tqKQcIfMwZTb3QAWd1JsGxgCJXJum8/gGtTs8aucaJ3w==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-field": "2.12.3", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "@chenshuai2144/sketch-color": "^1.0.7", + "@umijs/use-params": "^1.0.9", + "classnames": "^2.3.2", + "lodash.merge": "^4.6.2", + "omit.js": "^2.0.2", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.0.6" + }, + "peerDependencies": { + "@types/lodash.merge": "^4.6.7", + "antd": ">=4.23.0 || >=5.0.0", + "rc-field-form": "^1.22.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + }, + "peerDependenciesMeta": { + "@types/lodash.merge": { + "optional": true + } + } + }, + "node_modules/@ant-design/pro-form/node_modules/@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/pro-form/node_modules/@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/pro-layout": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@ant-design/pro-layout/-/pro-layout-7.16.11.tgz", + "integrity": "sha512-7BqsuRMavMeroWFHKHARQo46mjv9ZFdnxNREFEnoj6Zfdi+TncG5DGKUqgFR/ppliMJ7K4xEkJUlbjnP1rzmkg==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "@umijs/route-utils": "^4.0.0", + "@umijs/use-params": "^1.0.9", + "classnames": "^2.3.2", + "lodash.merge": "^4.6.2", + "omit.js": "^2.0.2", + "path-to-regexp": "2.4.0", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.0.6", + "swr": "^2.0.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "antd": ">=4.23.0 || >=5.0.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-layout/node_modules/@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/pro-layout/node_modules/@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/pro-layout/node_modules/path-to-regexp": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", + "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==" + }, + "node_modules/@ant-design/pro-list": { + "version": "2.5.16", + "resolved": "https://registry.npmjs.org/@ant-design/pro-list/-/pro-list-2.5.16.tgz", + "integrity": "sha512-Sr8HLxus0PQwyY8jO0uG0LQzBZx9aY8wltXIlT9ijNHHTjM4xAs/rLNcgoXwY+fRtf9nHLudQ1a7pIln0mSWzA==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-card": "2.5.14", + "@ant-design/pro-field": "2.12.3", + "@ant-design/pro-table": "3.12.1", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "dayjs": "^1.11.9", + "rc-resize-observer": "^1.0.0", + "rc-util": "^4.19.0" + }, + "peerDependencies": { + "antd": ">=4.23.0 || >=5.0.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-list/node_modules/@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/pro-list/node_modules/@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/pro-list/node_modules/@ant-design/icons/node_modules/rc-util": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.37.0.tgz", + "integrity": "sha512-cPMV8DzaHI1KDaS7XPRXAf4J7mtBqjvjikLpQieaeOO7+cEbqY2j7Kso/T0R0OiEZTNcLS/8Zl9YrlXiO9UbjQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "react-is": "^16.12.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@ant-design/pro-list/node_modules/rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "dependencies": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + }, + "node_modules/@ant-design/pro-provider": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@ant-design/pro-provider/-/pro-provider-2.12.2.tgz", + "integrity": "sha512-1ocfp56wcVKduRbDedLsBO7enEMh4i5ckq1sPCBaEb9M4vrZ2haKiYDe51qTBviUvxSCPAwNmIyluozmWnPwwg==", + "dependencies": { + "@ant-design/cssinjs": "^1.11.1", + "@babel/runtime": "^7.18.0", + "@ctrl/tinycolor": "^3.4.0", + "rc-util": "^5.0.1", + "swr": "^2.0.0" + }, + "peerDependencies": { + "antd": ">=4.23.0 || >=5.0.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-skeleton": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@ant-design/pro-skeleton/-/pro-skeleton-2.1.7.tgz", + "integrity": "sha512-5DLD319GTEfxe/GW/Pgja+QjWp89J1DJlKrKvjfQu9z5SCekKPxqG9KmB1F55/eHow1Oe+YjkaqSF55i0xK79Q==", + "dependencies": { + "@babel/runtime": "^7.18.0" + }, + "peerDependencies": { + "antd": ">=4.23.0 || >=5.0.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-table": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@ant-design/pro-table/-/pro-table-3.12.1.tgz", + "integrity": "sha512-gp0Bd06L/RN5EaDxFYV6xRSKUPWsyrXPXNwyR0Rtngg/4BtcadrhA+v3NebAXsdL39UmJEsCW5W7Tp5BVD29SA==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-card": "2.5.14", + "@ant-design/pro-field": "2.12.3", + "@ant-design/pro-form": "2.18.4", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "@dnd-kit/core": "^6.0.8", + "@dnd-kit/modifiers": "^6.0.1", + "@dnd-kit/sortable": "^7.0.2", + "@dnd-kit/utilities": "^3.2.1", + "classnames": "^2.3.2", + "dayjs": "^1.11.9", + "omit.js": "^2.0.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.0.1" + }, + "peerDependencies": { + "antd": ">=4.23.0 || >=5.0.0", + "rc-field-form": "^1.22.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-table/node_modules/@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/pro-table/node_modules/@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/pro-utils": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/@ant-design/pro-utils/-/pro-utils-2.14.2.tgz", + "integrity": "sha512-srMDRis/TbNcmPVT48UlgfV5arjITHb8kt4VTgySRXrDaV3kGzJr/xcW9LcQOLTHTfY0cbdPmXS3GooBNzMZAQ==", + "dependencies": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.12.2", + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "dayjs": "^1.11.9", + "lodash.merge": "^4.6.2", + "rc-util": "^5.0.6", + "safe-stable-stringify": "^2.4.3", + "swr": "^2.0.0" + }, + "peerDependencies": { + "antd": ">=4.23.0 || >=5.0.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@ant-design/pro-utils/node_modules/@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/pro-utils/node_modules/@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, "node_modules/@ant-design/react-slick": { - "version": "0.29.2", - "resolved": "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-0.29.2.tgz", - "integrity": "sha512-kgjtKmkGHa19FW21lHnAfyyH9AAoh35pBdcJ53rHmQ3O+cfFHGHnUbj/HFrRNJ5vIts09FKJVAD8RpaC+RaWfA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.0.2.tgz", + "integrity": "sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==", "dependencies": { "@babel/runtime": "^7.10.4", "classnames": "^2.2.5", "json2mq": "^0.2.0", - "lodash": "^4.17.21", - "resize-observer-polyfill": "^1.5.1" + "resize-observer-polyfill": "^1.5.1", + "throttle-debounce": "^5.0.0" }, "peerDependencies": { "react": ">=16.9.0" } }, + "node_modules/@ant-design/react-slick/node_modules/throttle-debounce": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz", + "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==", + "engines": { + "node": ">=12.22" + } + }, "node_modules/@antv/adjust": { "version": "0.2.5", "resolved": "https://registry.npmmirror.com/@antv/adjust/-/adjust-0.2.5.tgz", @@ -2837,6 +3339,18 @@ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, + "node_modules/@chenshuai2144/sketch-color": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@chenshuai2144/sketch-color/-/sketch-color-1.0.9.tgz", + "integrity": "sha512-obzSy26cb7Pm7OprWyVpgMpIlrZpZ0B7vbrU0RMbvRg0YAI890S5Xy02Aj1Nhl4+KTbi1lVYHt6HQP8Hm9s+1w==", + "dependencies": { + "reactcss": "^1.2.3", + "tinycolor2": "^1.4.2" + }, + "peerDependencies": { + "react": ">=16.12.0" + } + }, "node_modules/@csstools/normalize.css": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", @@ -3124,6 +3638,103 @@ "lodash": "^4.11.1" } }, + "node_modules/@dnd-kit/accessibility": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.0.1.tgz", + "integrity": "sha512-HXRrwS9YUYQO9lFRc/49uO/VICbM+O+ZRpFDe9Pd1rwVv2PCNkRiTZRdxrDgng/UkvdC3Re9r2vwPpXXrWeFzg==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/accessibility/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@dnd-kit/core": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.0.8.tgz", + "integrity": "sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==", + "dependencies": { + "@dnd-kit/accessibility": "^3.0.0", + "@dnd-kit/utilities": "^3.2.1", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/core/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@dnd-kit/modifiers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/modifiers/-/modifiers-6.0.1.tgz", + "integrity": "sha512-rbxcsg3HhzlcMHVHWDuh9LCjpOVAgqbV78wLGI8tziXY3+qcMQ61qVXIvNKQFuhj75dSfD+o+PYZQ/NUk2A23A==", + "dependencies": { + "@dnd-kit/utilities": "^3.2.1", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.0.6", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/modifiers/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@dnd-kit/sortable": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-7.0.2.tgz", + "integrity": "sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==", + "dependencies": { + "@dnd-kit/utilities": "^3.2.0", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.0.7", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/sortable/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@dnd-kit/utilities": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.1.tgz", + "integrity": "sha512-OOXqISfvBw/1REtkSK2N3Fi2EQiLMlWUlqnOK/UpOISqBZPWpE6TqL+jcPtMOkE8TqYGiURvRdPSI9hltNUjEA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/utilities/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -4198,6 +4809,23 @@ "@babel/runtime": "^7.0.0" } }, + "node_modules/@rc-component/portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", + "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -5278,6 +5906,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@umijs/route-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@umijs/route-utils/-/route-utils-4.0.1.tgz", + "integrity": "sha512-+1ixf1BTOLuH+ORb4x8vYMPeIt38n9q0fJDwhv9nSxrV46mxbLF0nmELIo9CKQB2gHfuC4+hww6xejJ6VYnBHQ==" + }, + "node_modules/@umijs/use-params": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@umijs/use-params/-/use-params-1.0.9.tgz", + "integrity": "sha512-QlN0RJSBVQBwLRNxbxjQ5qzqYIGn+K7USppMoIOVlf7fxXHsnQZ2bEsa6Pm74bt6DVQxpUE8HqvdStn6Y9FV1w==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -5687,55 +6328,58 @@ } }, "node_modules/antd": { - "version": "4.22.6", - "resolved": "https://registry.npmmirror.com/antd/-/antd-4.22.6.tgz", - "integrity": "sha512-cyGq4CFrKcHISkyvXHODqhV8X0W7r6GHP37H/KvvmYibz/1sdts3Sa0FoAPy/c165TjAcSC/ZHxJhuGbo42zvA==", + "version": "4.24.13", + "resolved": "https://registry.npmjs.org/antd/-/antd-4.24.13.tgz", + "integrity": "sha512-N2odRsbomseCE3U845Whf+RdgmQbiWbKvWS6ggH/xHjXojHx951rmZXW4nMqAeSoUp66sQOASGtrP/SUsdA2oQ==", "dependencies": { "@ant-design/colors": "^6.0.0", "@ant-design/icons": "^4.7.0", - "@ant-design/react-slick": "~0.29.1", + "@ant-design/react-slick": "~1.0.0", "@babel/runtime": "^7.18.3", "@ctrl/tinycolor": "^3.4.0", "classnames": "^2.2.6", "copy-to-clipboard": "^3.2.0", "lodash": "^4.17.21", - "memoize-one": "^6.0.0", "moment": "^2.29.2", - "rc-cascader": "~3.6.0", - "rc-checkbox": "~2.3.0", - "rc-collapse": "~3.3.0", - "rc-dialog": "~8.9.0", - "rc-drawer": "~5.1.0", + "rc-cascader": "~3.7.0", + "rc-checkbox": "~3.0.0", + "rc-collapse": "~3.4.2", + "rc-dialog": "~9.0.2", + "rc-drawer": "~6.3.0", "rc-dropdown": "~4.0.0", - "rc-field-form": "~1.27.0", - "rc-image": "~5.7.0", - "rc-input": "~0.0.1-alpha.5", - "rc-input-number": "~7.3.5", - "rc-mentions": "~1.9.1", - "rc-menu": "~9.6.3", + "rc-field-form": "~1.34.0", + "rc-image": "~5.13.0", + "rc-input": "~0.1.4", + "rc-input-number": "~7.3.9", + "rc-mentions": "~1.13.1", + "rc-menu": "~9.8.0", "rc-motion": "^2.6.1", "rc-notification": "~4.6.0", - "rc-pagination": "~3.1.17", - "rc-picker": "~2.6.10", - "rc-progress": "~3.3.2", + "rc-pagination": "~3.2.0", + "rc-picker": "~2.7.0", + "rc-progress": "~3.4.1", "rc-rate": "~2.9.0", "rc-resize-observer": "^1.2.0", "rc-segmented": "~2.1.0", - "rc-select": "~14.1.1", + "rc-select": "~14.1.17", "rc-slider": "~10.0.0", - "rc-steps": "~4.1.0", + "rc-steps": "~5.0.0-alpha.2", "rc-switch": "~3.2.0", - "rc-table": "~7.25.3", - "rc-tabs": "~11.16.0", - "rc-textarea": "~0.3.0", + "rc-table": "~7.26.0", + "rc-tabs": "~12.5.6", + "rc-textarea": "~0.4.5", "rc-tooltip": "~5.2.0", - "rc-tree": "~5.6.5", - "rc-tree-select": "~5.4.0", + "rc-tree": "~5.7.0", + "rc-tree-select": "~5.5.0", "rc-trigger": "^5.2.10", "rc-upload": "~4.3.0", "rc-util": "^5.22.5", "scroll-into-view-if-needed": "^2.2.25" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design" + }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" @@ -5838,7 +6482,7 @@ }, "node_modules/array-tree-filter": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" }, "node_modules/array-union": { @@ -6759,9 +7403,9 @@ "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==" }, "node_modules/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" }, "node_modules/clean-css": { "version": "5.3.2", @@ -6782,6 +7426,11 @@ "node": ">=0.10.0" } }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -7707,17 +8356,24 @@ } }, "node_modules/date-fns": { - "version": "2.29.1", - "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-2.29.1.tgz", - "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "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.5", - "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz", - "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==" + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" }, "node_modules/debug": { "version": "4.3.4", @@ -13501,7 +14157,7 @@ }, "node_modules/json2mq": { "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", "dependencies": { "string-convert": "^0.2.0" @@ -13755,6 +14411,11 @@ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" }, + "node_modules/lodash.tonumber": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz", + "integrity": "sha512-SY0SwuPOHRwKcCNTdsntPYb+Zddz5mDUIVFABzRMqmAiL41pMeyoQFGxYAw5zdc9NnH4pbJqiqqp5ckfxa+zSA==" + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -13904,11 +14565,6 @@ "node": ">= 4.0.0" } }, - "node_modules/memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" - }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -14523,6 +15179,11 @@ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, + "node_modules/omit.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", + "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -16444,15 +17105,15 @@ } }, "node_modules/rc-cascader": { - "version": "3.6.2", - "resolved": "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.6.2.tgz", - "integrity": "sha512-sf2otpazlROTzkD3nZVfIzXmfBLiEOBTXA5wxozGXBpS902McDpvF0bdcYBu5hN+rviEAm6Mh9cLXNQ1Ty8wKQ==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.7.3.tgz", + "integrity": "sha512-KBpT+kzhxDW+hxPiNk4zaKa99+Lie2/8nnI11XF+FIOPl4Bj9VlFZi61GrnWzhLGA7VEN+dTxAkNOjkySDa0dA==", "dependencies": { "@babel/runtime": "^7.12.5", "array-tree-filter": "^2.1.0", "classnames": "^2.3.1", "rc-select": "~14.1.0", - "rc-tree": "~5.6.3", + "rc-tree": "~5.7.0", "rc-util": "^5.6.1" }, "peerDependencies": { @@ -16461,12 +17122,13 @@ } }, "node_modules/rc-checkbox": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-2.3.2.tgz", - "integrity": "sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.0.1.tgz", + "integrity": "sha512-k7nxDWxYF+jDI0ZcCvuvj71xONmWRVe5+1MKcERRR9MRyP3tZ69b+yUCSXXh+sik4/Hc9P5wHr2nnUoGS2zBjA==", "dependencies": { "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" + "classnames": "^2.3.2", + "rc-util": "^5.25.2" }, "peerDependencies": { "react": ">=16.9.0", @@ -16474,9 +17136,9 @@ } }, "node_modules/rc-collapse": { - "version": "3.3.1", - "resolved": "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.3.1.tgz", - "integrity": "sha512-cOJfcSe3R8vocrF8T+PgaHDrgeA1tX+lwfhwSj60NX9QVRidsILIbRNDLD6nAzmcvVC5PWiIRiR4S1OobxdhCg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.4.2.tgz", + "integrity": "sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -16490,11 +17152,12 @@ } }, "node_modules/rc-dialog": { - "version": "8.9.0", - "resolved": "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-8.9.0.tgz", - "integrity": "sha512-Cp0tbJnrvPchJfnwIvOMWmJ4yjX3HWFatO6oBFD1jx8QkgsQCR0p8nUWAKdd3seLJhEC39/v56kZaEjwp9muoQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.0.2.tgz", + "integrity": "sha512-s3U+24xWUuB6Bn2Lk/Qt6rufy+uT+QvWkiFhNBcO9APLxcFFczWamaq7x9h8SCuhfc1nHcW4y8NbMsnAjNnWyg==", "dependencies": { "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.0.0-8", "classnames": "^2.2.6", "rc-motion": "^2.3.0", "rc-util": "^5.21.0" @@ -16505,11 +17168,12 @@ } }, "node_modules/rc-drawer": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-5.1.0.tgz", - "integrity": "sha512-pU3Tsn99pxGdYowXehzZbdDVE+4lDXSGb7p8vA9mSmr569oc2Izh4Zw5vLKSe/Xxn2p5MSNbLVqD4tz+pK6SOw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-6.3.0.tgz", + "integrity": "sha512-uBZVb3xTAR+dBV53d/bUhTctCw3pwcwJoM7g5aX+7vgwt2zzVzoJ6aqFjYJpBlZ9zp0dVYN8fV+hykFE7c4lig==", "dependencies": { "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.1.1", "classnames": "^2.2.6", "rc-motion": "^2.6.1", "rc-util": "^5.21.2" @@ -16521,7 +17185,7 @@ }, "node_modules/rc-dropdown": { "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.0.1.tgz", "integrity": "sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==", "dependencies": { "@babel/runtime": "^7.18.3", @@ -16535,13 +17199,13 @@ } }, "node_modules/rc-field-form": { - "version": "1.27.1", - "resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.27.1.tgz", - "integrity": "sha512-RShegnwFu6TH8tl2olCxn+B4Wyh5EiQH8c/7wucbkLNyue05YiH5gomUAg1vbZjp71yFKwegClctsEG5CNBWAA==", + "version": "1.34.2", + "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.34.2.tgz", + "integrity": "sha512-BdciU5C7dBO51/9ZKcMvK2f8zaaO12Lt1eBhlAo8nNv+6htlNcgY9DAkUlZ7gfyWjnCc1Oo4hHIXau1m6tLw1A==", "dependencies": { "@babel/runtime": "^7.18.0", "async-validator": "^4.1.0", - "rc-util": "^5.8.0" + "rc-util": "^5.32.2" }, "engines": { "node": ">=8.x" @@ -16552,13 +17216,15 @@ } }, "node_modules/rc-image": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/rc-image/-/rc-image-5.7.1.tgz", - "integrity": "sha512-QyMfdhoUfb5W14plqXSisaYwpdstcLYnB0MjX5ccIK2rydQM9sDPuekQWu500DDGR2dBaIF5vx9XbWkNFK17Fg==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-5.13.0.tgz", + "integrity": "sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg==", "dependencies": { "@babel/runtime": "^7.11.2", + "@rc-component/portal": "^1.0.2", "classnames": "^2.2.6", - "rc-dialog": "~8.9.0", + "rc-dialog": "~9.0.0", + "rc-motion": "^2.6.2", "rc-util": "^5.0.6" }, "peerDependencies": { @@ -16567,9 +17233,9 @@ } }, "node_modules/rc-input": { - "version": "0.0.1-alpha.7", - "resolved": "https://registry.npmmirror.com/rc-input/-/rc-input-0.0.1-alpha.7.tgz", - "integrity": "sha512-eozaqpCYWSY5LBMwlHgC01GArkVEP+XlJ84OMvdkwUnJBSv83Yxa15pZpn7vACAj84uDC4xOA2CoFdbLuqB08Q==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-0.1.4.tgz", + "integrity": "sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA==", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", @@ -16581,9 +17247,9 @@ } }, "node_modules/rc-input-number": { - "version": "7.3.6", - "resolved": "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-7.3.6.tgz", - "integrity": "sha512-Se62oMOBn9HwF/gSag+YtAYyKZsjJzEsqmyAJHAnAvPfjZJOu7dLMlQRwBbTtELbKXM/Y5Fztcq8CW2Y9f49qA==", + "version": "7.3.11", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.3.11.tgz", + "integrity": "sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", @@ -16595,14 +17261,14 @@ } }, "node_modules/rc-mentions": { - "version": "1.9.1", - "resolved": "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-1.9.1.tgz", - "integrity": "sha512-6VBaEkJjYdGGxAygQvE2NaIegAzLJSDodgzpoV+vonUUCZ4A/d8izVlc2JqCYa0Yi15HiDcWyfRgJYI7OKTILg==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.13.1.tgz", + "integrity": "sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", - "rc-menu": "~9.6.0", - "rc-textarea": "^0.3.0", + "rc-menu": "~9.8.0", + "rc-textarea": "^0.4.0", "rc-trigger": "^5.0.4", "rc-util": "^5.22.5" }, @@ -16612,17 +17278,16 @@ } }, "node_modules/rc-menu": { - "version": "9.6.3", - "resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.6.3.tgz", - "integrity": "sha512-KY9QilKWgkJZ0JSpOBgIpQF2wMRRodRxpIMYyIJ3Nd5N6xfVLOxXCxevHcBplt+Ez7MhUF+I03MuAKqWQJLZgw==", + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.8.4.tgz", + "integrity": "sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.4.3", - "rc-overflow": "^1.2.0", + "rc-overflow": "^1.2.8", "rc-trigger": "^5.1.2", - "rc-util": "^5.12.0", - "shallowequal": "^1.1.0" + "rc-util": "^5.27.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -16662,14 +17327,14 @@ } }, "node_modules/rc-overflow": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.2.8.tgz", - "integrity": "sha512-QJ0UItckWPQ37ZL1dMEBAdY1dhfTXFL9k6oTTcyydVwoUNMnMqCGqnRNA98axSr/OeDKqR6DVFyi8eA5RQI/uQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.3.2.tgz", + "integrity": "sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", "rc-resize-observer": "^1.0.0", - "rc-util": "^5.19.2" + "rc-util": "^5.37.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -16677,9 +17342,9 @@ } }, "node_modules/rc-pagination": { - "version": "3.1.17", - "resolved": "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-3.1.17.tgz", - "integrity": "sha512-/BQ5UxcBnW28vFAcP2hfh+Xg15W0QZn8TWYwdCApchMH1H0CxiaUUcULP8uXcFM1TygcdKWdt3JqsL9cTAfdkQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.2.0.tgz", + "integrity": "sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1" @@ -16690,9 +17355,9 @@ } }, "node_modules/rc-picker": { - "version": "2.6.10", - "resolved": "https://registry.npmmirror.com/rc-picker/-/rc-picker-2.6.10.tgz", - "integrity": "sha512-9wYtw0DFWs9FO92Qh2D76P0iojUr8ZhLOtScUeOit6ks/F+TBLrOC1uze3IOu+u9gbDAjmosNWLKbBzx/Yuv2w==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.7.4.tgz", + "integrity": "sha512-cZIGTZMPo99ORZdNzWTvl/v8PVxPWwq2+7xeyfJaxnVAOc7yXUS1Zb9nZFqt2u+XMCSpuGKtrcI36tH7JxU6VQ==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", @@ -16712,9 +17377,9 @@ } }, "node_modules/rc-progress": { - "version": "3.3.3", - "resolved": "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.3.3.tgz", - "integrity": "sha512-MDVNVHzGanYtRy2KKraEaWeZLri2ZHWIRyaE1a9MQ2MuJ09m+Wxj5cfcaoaR6z5iRpHpA59YeUxAlpML8N4PJw==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.4.2.tgz", + "integrity": "sha512-iAGhwWU+tsayP+Jkl9T4+6rHeQTG9kDz8JAHZk4XtQOcYN5fj9H34NXNEdRdZx94VUDHMqCb1yOIvi8eJRh67w==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", @@ -16743,13 +17408,13 @@ } }, "node_modules/rc-resize-observer": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.2.0.tgz", - "integrity": "sha512-6W+UzT3PyDM0wVCEHfoW3qTHPTvbdSgiA43buiy8PzmeMnfgnDeb9NjdimMXMl3/TcrvvWl5RRVdp+NqcR47pQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.3.1.tgz", + "integrity": "sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg==", "dependencies": { - "@babel/runtime": "^7.10.1", + "@babel/runtime": "^7.20.7", "classnames": "^2.2.1", - "rc-util": "^5.15.0", + "rc-util": "^5.27.0", "resize-observer-polyfill": "^1.5.1" }, "peerDependencies": { @@ -16773,9 +17438,9 @@ } }, "node_modules/rc-select": { - "version": "14.1.9", - "resolved": "https://registry.npmmirror.com/rc-select/-/rc-select-14.1.9.tgz", - "integrity": "sha512-DK01+Q7oCWr5jVPiEp/BTQ8xCB4rI4LfXzZtSmBWJhOMuibyZD1Vlz/DlVKCUFmtBM4SzG4/SltGHoGlcbCqiw==", + "version": "14.1.18", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.1.18.tgz", + "integrity": "sha512-4JgY3oG2Yz68ECMUSCON7mtxuJvCSj+LJpHEg/AONaaVBxIIrmI/ZTuMJkyojall/X50YdBe5oMKqHHPNiPzEg==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -16812,13 +17477,13 @@ } }, "node_modules/rc-steps": { - "version": "4.1.4", - "resolved": "https://registry.npmmirror.com/rc-steps/-/rc-steps-4.1.4.tgz", - "integrity": "sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-5.0.0.tgz", + "integrity": "sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw==", "dependencies": { - "@babel/runtime": "^7.10.2", + "@babel/runtime": "^7.16.7", "classnames": "^2.2.3", - "rc-util": "^5.0.1" + "rc-util": "^5.16.1" }, "engines": { "node": ">=8.x" @@ -16843,9 +17508,9 @@ } }, "node_modules/rc-table": { - "version": "7.25.3", - "resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.25.3.tgz", - "integrity": "sha512-McsLJ2rg8EEpRBRYN4Pf9gT7ZNYnjvF9zrBpUBBbUX/fxk+eGi5ff1iPIhMyiHsH71/BmTUzX9nc9XqupD0nMg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.26.0.tgz", + "integrity": "sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", @@ -16862,16 +17527,17 @@ } }, "node_modules/rc-tabs": { - "version": "11.16.1", - "resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-11.16.1.tgz", - "integrity": "sha512-bR7Dap23YyfzZQwtKomhiFEFzZuE7WaKWo+ypNRSGB9PDKSc6tM12VP8LWYkvmmQHthgwP0WRN8nFbSJWuqLYw==", + "version": "12.5.10", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-12.5.10.tgz", + "integrity": "sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ==", "dependencies": { "@babel/runtime": "^7.11.2", "classnames": "2.x", "rc-dropdown": "~4.0.0", - "rc-menu": "~9.6.0", + "rc-menu": "~9.8.0", + "rc-motion": "^2.6.2", "rc-resize-observer": "^1.0.0", - "rc-util": "^5.5.0" + "rc-util": "^5.16.0" }, "engines": { "node": ">=8.x" @@ -16882,14 +17548,14 @@ } }, "node_modules/rc-textarea": { - "version": "0.3.7", - "resolved": "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-0.3.7.tgz", - "integrity": "sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.4.7.tgz", + "integrity": "sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", "rc-resize-observer": "^1.0.0", - "rc-util": "^5.7.0", + "rc-util": "^5.24.4", "shallowequal": "^1.1.0" }, "peerDependencies": { @@ -16912,15 +17578,15 @@ } }, "node_modules/rc-tree": { - "version": "5.6.6", - "resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.6.6.tgz", - "integrity": "sha512-HI/q4D4AHOp48OZcBUvJFWkI5OfnZivvGYI0xzI0dy0Mita2KcTGZv7/Yl6Aq3bL3od3x5AqAXq/7qxR3x4Kkg==", + "version": "5.7.10", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.7.10.tgz", + "integrity": "sha512-n4UkMQY3bzvJUNnbw6e3YI7sy2kE9c9vAYbSt94qAhcPKtMOThONNr1LIaFB/M5XeFYYrWVbvRVoT8k38eFuSQ==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.0.1", "rc-util": "^5.16.1", - "rc-virtual-list": "^3.4.8" + "rc-virtual-list": "^3.5.1" }, "engines": { "node": ">=10.x" @@ -16931,14 +17597,14 @@ } }, "node_modules/rc-tree-select": { - "version": "5.4.0", - "resolved": "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.4.0.tgz", - "integrity": "sha512-reRbOqC7Ic/nQocJAJeCl4n6nJUY3NoqiwRXKvhjgZJU7NGr9vIccXEsY+Lghkw5UMpPoxGsIJB0jiAvM18XYA==", + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.5.5.tgz", + "integrity": "sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-select": "~14.1.0", - "rc-tree": "~5.6.1", + "rc-tree": "~5.7.0", "rc-util": "^5.16.1" }, "peerDependencies": { @@ -16980,13 +17646,12 @@ } }, "node_modules/rc-util": { - "version": "5.23.0", - "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.23.0.tgz", - "integrity": "sha512-lgm6diJ/pLgyfoZY59Vz7sW4mSoQCgozqbBye9IJ7/mb5w5h4T7h+i2JpXAx/UBQxscBZe68q0sP7EW+qfkKUg==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.37.0.tgz", + "integrity": "sha512-cPMV8DzaHI1KDaS7XPRXAf4J7mtBqjvjikLpQieaeOO7+cEbqY2j7Kso/T0R0OiEZTNcLS/8Zl9YrlXiO9UbjQ==", "dependencies": { "@babel/runtime": "^7.18.3", - "react-is": "^16.12.0", - "shallowequal": "^1.1.0" + "react-is": "^16.12.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -16994,13 +17659,14 @@ } }, "node_modules/rc-virtual-list": { - "version": "3.4.8", - "resolved": "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.4.8.tgz", - "integrity": "sha512-qSN+Rv4i/E7RCTvTMr1uZo7f3crJJg/5DekoCagydo9zsXrxj07zsFSxqizqW+ldGA16lwa8So/bIbV9Ofjddg==", + "version": "3.10.5", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.10.5.tgz", + "integrity": "sha512-Vc89TL3JHfRlLVQXVj5Hmv0dIflgwmHDcbjt9lrZjOG3wNUDkTF5zci8kFDU/CzdmmqgKu+CUktEpT10VUKYSQ==", "dependencies": { + "@babel/runtime": "^7.20.0", "classnames": "^2.2.6", "rc-resize-observer": "^1.0.0", - "rc-util": "^5.15.0" + "rc-util": "^5.36.0" }, "engines": { "node": ">=8.x" @@ -17910,6 +18576,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -18500,7 +19174,7 @@ }, "node_modules/string-convert": { "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" }, "node_modules/string-length": { @@ -18835,6 +19509,18 @@ "boolbase": "~1.0.0" } }, + "node_modules/swr": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.2.tgz", + "integrity": "sha512-CbR41AoMD4TQBQw9ic3GTXspgfM9Y8Mdhb5Ob4uIKXhWqnRLItwA5fpGvB7SmSw3+zEjb0PdhiEumtUvYoQ+bQ==", + "dependencies": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -19545,6 +20231,14 @@ "requires-port": "^1.0.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -19669,6 +20363,14 @@ "makeerror": "1.0.12" } }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -20652,6 +21354,20 @@ "@ctrl/tinycolor": "^3.4.0" } }, + "@ant-design/cssinjs": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.17.0.tgz", + "integrity": "sha512-MgGCZ6sfD3yQB0XW0hN4jgixMxApTlDYyct+pc7fRZNO4CaqWWm/9iXkkljNR27lyWLZmm+XiDfcIOo1bnrnMA==", + "requires": { + "@babel/runtime": "^7.11.1", + "@emotion/hash": "^0.8.0", + "@emotion/unitless": "^0.7.5", + "classnames": "^2.3.1", + "csstype": "^3.0.10", + "rc-util": "^5.35.0", + "stylis": "^4.0.13" + } + }, "@ant-design/flowchart": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/@ant-design/flowchart/-/flowchart-1.2.0.tgz", @@ -20689,9 +21405,9 @@ } }, "@ant-design/icons-svg": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz", - "integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz", + "integrity": "sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g==" }, "@ant-design/maps": { "version": "1.0.6", @@ -20713,16 +21429,399 @@ "react-content-loader": "^5.0.4" } }, + "@ant-design/pro-card": { + "version": "2.5.14", + "resolved": "https://registry.npmjs.org/@ant-design/pro-card/-/pro-card-2.5.14.tgz", + "integrity": "sha512-ml2K87WAoRUtfEIJovdsSp0/fmT6pb739/Er7iT6EfhI0Q3Wb79OG2dgwCiKWrDd5I1uiLByiIkygaS2Wxhzqg==", + "requires": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "omit.js": "^2.0.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.4.0" + }, + "dependencies": { + "@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "requires": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "requires": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + } + } + } + }, + "@ant-design/pro-components": { + "version": "2.6.16", + "resolved": "https://registry.npmjs.org/@ant-design/pro-components/-/pro-components-2.6.16.tgz", + "integrity": "sha512-l3PU8oa23JWmICKDonSGWp26iM+AmXObvE7hyJ3utnSFsrBDHup9vAFTTyt5e/Lt1m4my7Wm5x6kIjjRbJ00dQ==", + "requires": { + "@ant-design/pro-card": "2.5.14", + "@ant-design/pro-descriptions": "2.5.2", + "@ant-design/pro-field": "2.12.3", + "@ant-design/pro-form": "2.18.4", + "@ant-design/pro-layout": "7.16.11", + "@ant-design/pro-list": "2.5.16", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-skeleton": "2.1.7", + "@ant-design/pro-table": "3.12.1", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.16.3" + } + }, + "@ant-design/pro-descriptions": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@ant-design/pro-descriptions/-/pro-descriptions-2.5.2.tgz", + "integrity": "sha512-ru7/+9CXTs+67Tkh7Frf2+f7QLPcrykI60yDg1vC8X6uYzc/yl8aAJc/2C86NT4nmaCgVhJ16IHK50VmK8DbPw==", + "requires": { + "@ant-design/pro-field": "2.12.3", + "@ant-design/pro-form": "2.18.4", + "@ant-design/pro-skeleton": "2.1.7", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "rc-resize-observer": "^0.2.3", + "rc-util": "^5.0.6" + }, + "dependencies": { + "rc-resize-observer": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-0.2.6.tgz", + "integrity": "sha512-YX6nYnd6fk7zbuvT6oSDMKiZjyngjHoy+fz+vL3Tez38d/G5iGdaDJa2yE7345G6sc4Mm1IGRUIwclvltddhmA==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.0", + "resize-observer-polyfill": "^1.5.1" + } + } + } + }, + "@ant-design/pro-field": { + "version": "2.12.3", + "resolved": "https://registry.npmjs.org/@ant-design/pro-field/-/pro-field-2.12.3.tgz", + "integrity": "sha512-WB0V7gn55yr0vg3vD3cO9it4ffXM4edwb3RsNnD6vjIgj6gxeCIIBq5KTvKECil+HXloCfLFgeiQ2BoDnrcm6w==", + "requires": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "@chenshuai2144/sketch-color": "^1.0.8", + "classnames": "^2.3.2", + "dayjs": "^1.11.9", + "lodash.tonumber": "^4.0.3", + "omit.js": "^2.0.2", + "rc-util": "^5.4.0", + "swr": "^2.0.0" + }, + "dependencies": { + "@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "requires": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "requires": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + } + } + } + }, + "@ant-design/pro-form": { + "version": "2.18.4", + "resolved": "https://registry.npmjs.org/@ant-design/pro-form/-/pro-form-2.18.4.tgz", + "integrity": "sha512-0YTWC6cmaKa+rMCJCcCktNN94QkiVLGquKGI5qCme2tqKQcIfMwZTb3QAWd1JsGxgCJXJum8/gGtTs8aucaJ3w==", + "requires": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-field": "2.12.3", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "@chenshuai2144/sketch-color": "^1.0.7", + "@umijs/use-params": "^1.0.9", + "classnames": "^2.3.2", + "lodash.merge": "^4.6.2", + "omit.js": "^2.0.2", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.0.6" + }, + "dependencies": { + "@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "requires": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "requires": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + } + } + } + }, + "@ant-design/pro-layout": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@ant-design/pro-layout/-/pro-layout-7.16.11.tgz", + "integrity": "sha512-7BqsuRMavMeroWFHKHARQo46mjv9ZFdnxNREFEnoj6Zfdi+TncG5DGKUqgFR/ppliMJ7K4xEkJUlbjnP1rzmkg==", + "requires": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "@umijs/route-utils": "^4.0.0", + "@umijs/use-params": "^1.0.9", + "classnames": "^2.3.2", + "lodash.merge": "^4.6.2", + "omit.js": "^2.0.2", + "path-to-regexp": "2.4.0", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.0.6", + "swr": "^2.0.0", + "warning": "^4.0.3" + }, + "dependencies": { + "@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "requires": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "requires": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + } + }, + "path-to-regexp": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", + "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==" + } + } + }, + "@ant-design/pro-list": { + "version": "2.5.16", + "resolved": "https://registry.npmjs.org/@ant-design/pro-list/-/pro-list-2.5.16.tgz", + "integrity": "sha512-Sr8HLxus0PQwyY8jO0uG0LQzBZx9aY8wltXIlT9ijNHHTjM4xAs/rLNcgoXwY+fRtf9nHLudQ1a7pIln0mSWzA==", + "requires": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-card": "2.5.14", + "@ant-design/pro-field": "2.12.3", + "@ant-design/pro-table": "3.12.1", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "dayjs": "^1.11.9", + "rc-resize-observer": "^1.0.0", + "rc-util": "^4.19.0" + }, + "dependencies": { + "@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "requires": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "requires": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "dependencies": { + "rc-util": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.37.0.tgz", + "integrity": "sha512-cPMV8DzaHI1KDaS7XPRXAf4J7mtBqjvjikLpQieaeOO7+cEbqY2j7Kso/T0R0OiEZTNcLS/8Zl9YrlXiO9UbjQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "react-is": "^16.12.0" + } + } + } + }, + "rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "requires": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + } + } + }, + "@ant-design/pro-provider": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@ant-design/pro-provider/-/pro-provider-2.12.2.tgz", + "integrity": "sha512-1ocfp56wcVKduRbDedLsBO7enEMh4i5ckq1sPCBaEb9M4vrZ2haKiYDe51qTBviUvxSCPAwNmIyluozmWnPwwg==", + "requires": { + "@ant-design/cssinjs": "^1.11.1", + "@babel/runtime": "^7.18.0", + "@ctrl/tinycolor": "^3.4.0", + "rc-util": "^5.0.1", + "swr": "^2.0.0" + } + }, + "@ant-design/pro-skeleton": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@ant-design/pro-skeleton/-/pro-skeleton-2.1.7.tgz", + "integrity": "sha512-5DLD319GTEfxe/GW/Pgja+QjWp89J1DJlKrKvjfQu9z5SCekKPxqG9KmB1F55/eHow1Oe+YjkaqSF55i0xK79Q==", + "requires": { + "@babel/runtime": "^7.18.0" + } + }, + "@ant-design/pro-table": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@ant-design/pro-table/-/pro-table-3.12.1.tgz", + "integrity": "sha512-gp0Bd06L/RN5EaDxFYV6xRSKUPWsyrXPXNwyR0Rtngg/4BtcadrhA+v3NebAXsdL39UmJEsCW5W7Tp5BVD29SA==", + "requires": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-card": "2.5.14", + "@ant-design/pro-field": "2.12.3", + "@ant-design/pro-form": "2.18.4", + "@ant-design/pro-provider": "2.12.2", + "@ant-design/pro-utils": "2.14.2", + "@babel/runtime": "^7.18.0", + "@dnd-kit/core": "^6.0.8", + "@dnd-kit/modifiers": "^6.0.1", + "@dnd-kit/sortable": "^7.0.2", + "@dnd-kit/utilities": "^3.2.1", + "classnames": "^2.3.2", + "dayjs": "^1.11.9", + "omit.js": "^2.0.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.0.1" + }, + "dependencies": { + "@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "requires": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "requires": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + } + } + } + }, + "@ant-design/pro-utils": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/@ant-design/pro-utils/-/pro-utils-2.14.2.tgz", + "integrity": "sha512-srMDRis/TbNcmPVT48UlgfV5arjITHb8kt4VTgySRXrDaV3kGzJr/xcW9LcQOLTHTfY0cbdPmXS3GooBNzMZAQ==", + "requires": { + "@ant-design/icons": "^5.0.0", + "@ant-design/pro-provider": "2.12.2", + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "dayjs": "^1.11.9", + "lodash.merge": "^4.6.2", + "rc-util": "^5.0.6", + "safe-stable-stringify": "^2.4.3", + "swr": "^2.0.0" + }, + "dependencies": { + "@ant-design/colors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", + "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "requires": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "@ant-design/icons": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", + "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "requires": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + } + } + } + }, "@ant-design/react-slick": { - "version": "0.29.2", - "resolved": "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-0.29.2.tgz", - "integrity": "sha512-kgjtKmkGHa19FW21lHnAfyyH9AAoh35pBdcJ53rHmQ3O+cfFHGHnUbj/HFrRNJ5vIts09FKJVAD8RpaC+RaWfA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.0.2.tgz", + "integrity": "sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==", "requires": { "@babel/runtime": "^7.10.4", "classnames": "^2.2.5", "json2mq": "^0.2.0", - "lodash": "^4.17.21", - "resize-observer-polyfill": "^1.5.1" + "resize-observer-polyfill": "^1.5.1", + "throttle-debounce": "^5.0.0" + }, + "dependencies": { + "throttle-debounce": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz", + "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==" + } } }, "@antv/adjust": { @@ -22779,6 +23878,15 @@ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, + "@chenshuai2144/sketch-color": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@chenshuai2144/sketch-color/-/sketch-color-1.0.9.tgz", + "integrity": "sha512-obzSy26cb7Pm7OprWyVpgMpIlrZpZ0B7vbrU0RMbvRg0YAI890S5Xy02Aj1Nhl4+KTbi1lVYHt6HQP8Hm9s+1w==", + "requires": { + "reactcss": "^1.2.3", + "tinycolor2": "^1.4.2" + } + }, "@csstools/normalize.css": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", @@ -22918,6 +24026,95 @@ "lodash": "^4.11.1" } }, + "@dnd-kit/accessibility": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.0.1.tgz", + "integrity": "sha512-HXRrwS9YUYQO9lFRc/49uO/VICbM+O+ZRpFDe9Pd1rwVv2PCNkRiTZRdxrDgng/UkvdC3Re9r2vwPpXXrWeFzg==", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@dnd-kit/core": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.0.8.tgz", + "integrity": "sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==", + "requires": { + "@dnd-kit/accessibility": "^3.0.0", + "@dnd-kit/utilities": "^3.2.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@dnd-kit/modifiers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/modifiers/-/modifiers-6.0.1.tgz", + "integrity": "sha512-rbxcsg3HhzlcMHVHWDuh9LCjpOVAgqbV78wLGI8tziXY3+qcMQ61qVXIvNKQFuhj75dSfD+o+PYZQ/NUk2A23A==", + "requires": { + "@dnd-kit/utilities": "^3.2.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@dnd-kit/sortable": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-7.0.2.tgz", + "integrity": "sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==", + "requires": { + "@dnd-kit/utilities": "^3.2.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@dnd-kit/utilities": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.1.tgz", + "integrity": "sha512-OOXqISfvBw/1REtkSK2N3Fi2EQiLMlWUlqnOK/UpOISqBZPWpE6TqL+jcPtMOkE8TqYGiURvRdPSI9hltNUjEA==", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -23705,6 +24902,16 @@ "@babel/runtime": "^7.0.0" } }, + "@rc-component/portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", + "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", + "requires": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + } + }, "@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -24505,6 +25712,17 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@umijs/route-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@umijs/route-utils/-/route-utils-4.0.1.tgz", + "integrity": "sha512-+1ixf1BTOLuH+ORb4x8vYMPeIt38n9q0fJDwhv9nSxrV46mxbLF0nmELIo9CKQB2gHfuC4+hww6xejJ6VYnBHQ==" + }, + "@umijs/use-params": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@umijs/use-params/-/use-params-1.0.9.tgz", + "integrity": "sha512-QlN0RJSBVQBwLRNxbxjQ5qzqYIGn+K7USppMoIOVlf7fxXHsnQZ2bEsa6Pm74bt6DVQxpUE8HqvdStn6Y9FV1w==", + "requires": {} + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -24845,50 +26063,49 @@ } }, "antd": { - "version": "4.22.6", - "resolved": "https://registry.npmmirror.com/antd/-/antd-4.22.6.tgz", - "integrity": "sha512-cyGq4CFrKcHISkyvXHODqhV8X0W7r6GHP37H/KvvmYibz/1sdts3Sa0FoAPy/c165TjAcSC/ZHxJhuGbo42zvA==", + "version": "4.24.13", + "resolved": "https://registry.npmjs.org/antd/-/antd-4.24.13.tgz", + "integrity": "sha512-N2odRsbomseCE3U845Whf+RdgmQbiWbKvWS6ggH/xHjXojHx951rmZXW4nMqAeSoUp66sQOASGtrP/SUsdA2oQ==", "requires": { "@ant-design/colors": "^6.0.0", "@ant-design/icons": "^4.7.0", - "@ant-design/react-slick": "~0.29.1", + "@ant-design/react-slick": "~1.0.0", "@babel/runtime": "^7.18.3", "@ctrl/tinycolor": "^3.4.0", "classnames": "^2.2.6", "copy-to-clipboard": "^3.2.0", "lodash": "^4.17.21", - "memoize-one": "^6.0.0", "moment": "^2.29.2", - "rc-cascader": "~3.6.0", - "rc-checkbox": "~2.3.0", - "rc-collapse": "~3.3.0", - "rc-dialog": "~8.9.0", - "rc-drawer": "~5.1.0", + "rc-cascader": "~3.7.0", + "rc-checkbox": "~3.0.0", + "rc-collapse": "~3.4.2", + "rc-dialog": "~9.0.2", + "rc-drawer": "~6.3.0", "rc-dropdown": "~4.0.0", - "rc-field-form": "~1.27.0", - "rc-image": "~5.7.0", - "rc-input": "~0.0.1-alpha.5", - "rc-input-number": "~7.3.5", - "rc-mentions": "~1.9.1", - "rc-menu": "~9.6.3", + "rc-field-form": "~1.34.0", + "rc-image": "~5.13.0", + "rc-input": "~0.1.4", + "rc-input-number": "~7.3.9", + "rc-mentions": "~1.13.1", + "rc-menu": "~9.8.0", "rc-motion": "^2.6.1", "rc-notification": "~4.6.0", - "rc-pagination": "~3.1.17", - "rc-picker": "~2.6.10", - "rc-progress": "~3.3.2", + "rc-pagination": "~3.2.0", + "rc-picker": "~2.7.0", + "rc-progress": "~3.4.1", "rc-rate": "~2.9.0", "rc-resize-observer": "^1.2.0", "rc-segmented": "~2.1.0", - "rc-select": "~14.1.1", + "rc-select": "~14.1.17", "rc-slider": "~10.0.0", - "rc-steps": "~4.1.0", + "rc-steps": "~5.0.0-alpha.2", "rc-switch": "~3.2.0", - "rc-table": "~7.25.3", - "rc-tabs": "~11.16.0", - "rc-textarea": "~0.3.0", + "rc-table": "~7.26.0", + "rc-tabs": "~12.5.6", + "rc-textarea": "~0.4.5", "rc-tooltip": "~5.2.0", - "rc-tree": "~5.6.5", - "rc-tree-select": "~5.4.0", + "rc-tree": "~5.7.0", + "rc-tree-select": "~5.5.0", "rc-trigger": "^5.2.10", "rc-upload": "~4.3.0", "rc-util": "^5.22.5", @@ -24979,7 +26196,7 @@ }, "array-tree-filter": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" }, "array-union": { @@ -25673,9 +26890,9 @@ "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==" }, "classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" }, "clean-css": { "version": "5.3.2", @@ -25692,6 +26909,11 @@ } } }, + "client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -26394,14 +27616,17 @@ } }, "date-fns": { - "version": "2.29.1", - "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-2.29.1.tgz", - "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==" + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "requires": { + "@babel/runtime": "^7.21.0" + } }, "dayjs": { - "version": "1.11.5", - "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz", - "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==" + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" }, "debug": { "version": "4.3.4", @@ -30657,7 +31882,7 @@ }, "json2mq": { "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", "requires": { "string-convert": "^0.2.0" @@ -30857,6 +32082,11 @@ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" }, + "lodash.tonumber": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz", + "integrity": "sha512-SY0SwuPOHRwKcCNTdsntPYb+Zddz5mDUIVFABzRMqmAiL41pMeyoQFGxYAw5zdc9NnH4pbJqiqqp5ckfxa+zSA==" + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -30987,11 +32217,6 @@ "fs-monkey": "^1.0.3" } }, - "memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -31441,6 +32666,11 @@ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, + "omit.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", + "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==" + }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -32662,31 +33892,32 @@ } }, "rc-cascader": { - "version": "3.6.2", - "resolved": "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.6.2.tgz", - "integrity": "sha512-sf2otpazlROTzkD3nZVfIzXmfBLiEOBTXA5wxozGXBpS902McDpvF0bdcYBu5hN+rviEAm6Mh9cLXNQ1Ty8wKQ==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.7.3.tgz", + "integrity": "sha512-KBpT+kzhxDW+hxPiNk4zaKa99+Lie2/8nnI11XF+FIOPl4Bj9VlFZi61GrnWzhLGA7VEN+dTxAkNOjkySDa0dA==", "requires": { "@babel/runtime": "^7.12.5", "array-tree-filter": "^2.1.0", "classnames": "^2.3.1", "rc-select": "~14.1.0", - "rc-tree": "~5.6.3", + "rc-tree": "~5.7.0", "rc-util": "^5.6.1" } }, "rc-checkbox": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-2.3.2.tgz", - "integrity": "sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.0.1.tgz", + "integrity": "sha512-k7nxDWxYF+jDI0ZcCvuvj71xONmWRVe5+1MKcERRR9MRyP3tZ69b+yUCSXXh+sik4/Hc9P5wHr2nnUoGS2zBjA==", "requires": { "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" + "classnames": "^2.3.2", + "rc-util": "^5.25.2" } }, "rc-collapse": { - "version": "3.3.1", - "resolved": "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.3.1.tgz", - "integrity": "sha512-cOJfcSe3R8vocrF8T+PgaHDrgeA1tX+lwfhwSj60NX9QVRidsILIbRNDLD6nAzmcvVC5PWiIRiR4S1OobxdhCg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.4.2.tgz", + "integrity": "sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -32696,22 +33927,24 @@ } }, "rc-dialog": { - "version": "8.9.0", - "resolved": "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-8.9.0.tgz", - "integrity": "sha512-Cp0tbJnrvPchJfnwIvOMWmJ4yjX3HWFatO6oBFD1jx8QkgsQCR0p8nUWAKdd3seLJhEC39/v56kZaEjwp9muoQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.0.2.tgz", + "integrity": "sha512-s3U+24xWUuB6Bn2Lk/Qt6rufy+uT+QvWkiFhNBcO9APLxcFFczWamaq7x9h8SCuhfc1nHcW4y8NbMsnAjNnWyg==", "requires": { "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.0.0-8", "classnames": "^2.2.6", "rc-motion": "^2.3.0", "rc-util": "^5.21.0" } }, "rc-drawer": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-5.1.0.tgz", - "integrity": "sha512-pU3Tsn99pxGdYowXehzZbdDVE+4lDXSGb7p8vA9mSmr569oc2Izh4Zw5vLKSe/Xxn2p5MSNbLVqD4tz+pK6SOw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-6.3.0.tgz", + "integrity": "sha512-uBZVb3xTAR+dBV53d/bUhTctCw3pwcwJoM7g5aX+7vgwt2zzVzoJ6aqFjYJpBlZ9zp0dVYN8fV+hykFE7c4lig==", "requires": { "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.1.1", "classnames": "^2.2.6", "rc-motion": "^2.6.1", "rc-util": "^5.21.2" @@ -32719,7 +33952,7 @@ }, "rc-dropdown": { "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.0.1.tgz", "integrity": "sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==", "requires": { "@babel/runtime": "^7.18.3", @@ -32729,30 +33962,32 @@ } }, "rc-field-form": { - "version": "1.27.1", - "resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.27.1.tgz", - "integrity": "sha512-RShegnwFu6TH8tl2olCxn+B4Wyh5EiQH8c/7wucbkLNyue05YiH5gomUAg1vbZjp71yFKwegClctsEG5CNBWAA==", + "version": "1.34.2", + "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.34.2.tgz", + "integrity": "sha512-BdciU5C7dBO51/9ZKcMvK2f8zaaO12Lt1eBhlAo8nNv+6htlNcgY9DAkUlZ7gfyWjnCc1Oo4hHIXau1m6tLw1A==", "requires": { "@babel/runtime": "^7.18.0", "async-validator": "^4.1.0", - "rc-util": "^5.8.0" + "rc-util": "^5.32.2" } }, "rc-image": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/rc-image/-/rc-image-5.7.1.tgz", - "integrity": "sha512-QyMfdhoUfb5W14plqXSisaYwpdstcLYnB0MjX5ccIK2rydQM9sDPuekQWu500DDGR2dBaIF5vx9XbWkNFK17Fg==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-5.13.0.tgz", + "integrity": "sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg==", "requires": { "@babel/runtime": "^7.11.2", + "@rc-component/portal": "^1.0.2", "classnames": "^2.2.6", - "rc-dialog": "~8.9.0", + "rc-dialog": "~9.0.0", + "rc-motion": "^2.6.2", "rc-util": "^5.0.6" } }, "rc-input": { - "version": "0.0.1-alpha.7", - "resolved": "https://registry.npmmirror.com/rc-input/-/rc-input-0.0.1-alpha.7.tgz", - "integrity": "sha512-eozaqpCYWSY5LBMwlHgC01GArkVEP+XlJ84OMvdkwUnJBSv83Yxa15pZpn7vACAj84uDC4xOA2CoFdbLuqB08Q==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-0.1.4.tgz", + "integrity": "sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA==", "requires": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", @@ -32760,9 +33995,9 @@ } }, "rc-input-number": { - "version": "7.3.6", - "resolved": "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-7.3.6.tgz", - "integrity": "sha512-Se62oMOBn9HwF/gSag+YtAYyKZsjJzEsqmyAJHAnAvPfjZJOu7dLMlQRwBbTtELbKXM/Y5Fztcq8CW2Y9f49qA==", + "version": "7.3.11", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.3.11.tgz", + "integrity": "sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", @@ -32770,30 +34005,29 @@ } }, "rc-mentions": { - "version": "1.9.1", - "resolved": "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-1.9.1.tgz", - "integrity": "sha512-6VBaEkJjYdGGxAygQvE2NaIegAzLJSDodgzpoV+vonUUCZ4A/d8izVlc2JqCYa0Yi15HiDcWyfRgJYI7OKTILg==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.13.1.tgz", + "integrity": "sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", - "rc-menu": "~9.6.0", - "rc-textarea": "^0.3.0", + "rc-menu": "~9.8.0", + "rc-textarea": "^0.4.0", "rc-trigger": "^5.0.4", "rc-util": "^5.22.5" } }, "rc-menu": { - "version": "9.6.3", - "resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.6.3.tgz", - "integrity": "sha512-KY9QilKWgkJZ0JSpOBgIpQF2wMRRodRxpIMYyIJ3Nd5N6xfVLOxXCxevHcBplt+Ez7MhUF+I03MuAKqWQJLZgw==", + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.8.4.tgz", + "integrity": "sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.4.3", - "rc-overflow": "^1.2.0", + "rc-overflow": "^1.2.8", "rc-trigger": "^5.1.2", - "rc-util": "^5.12.0", - "shallowequal": "^1.1.0" + "rc-util": "^5.27.0" } }, "rc-motion": { @@ -32818,29 +34052,29 @@ } }, "rc-overflow": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.2.8.tgz", - "integrity": "sha512-QJ0UItckWPQ37ZL1dMEBAdY1dhfTXFL9k6oTTcyydVwoUNMnMqCGqnRNA98axSr/OeDKqR6DVFyi8eA5RQI/uQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.3.2.tgz", + "integrity": "sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==", "requires": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", "rc-resize-observer": "^1.0.0", - "rc-util": "^5.19.2" + "rc-util": "^5.37.0" } }, "rc-pagination": { - "version": "3.1.17", - "resolved": "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-3.1.17.tgz", - "integrity": "sha512-/BQ5UxcBnW28vFAcP2hfh+Xg15W0QZn8TWYwdCApchMH1H0CxiaUUcULP8uXcFM1TygcdKWdt3JqsL9cTAfdkQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.2.0.tgz", + "integrity": "sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1" } }, "rc-picker": { - "version": "2.6.10", - "resolved": "https://registry.npmmirror.com/rc-picker/-/rc-picker-2.6.10.tgz", - "integrity": "sha512-9wYtw0DFWs9FO92Qh2D76P0iojUr8ZhLOtScUeOit6ks/F+TBLrOC1uze3IOu+u9gbDAjmosNWLKbBzx/Yuv2w==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.7.4.tgz", + "integrity": "sha512-cZIGTZMPo99ORZdNzWTvl/v8PVxPWwq2+7xeyfJaxnVAOc7yXUS1Zb9nZFqt2u+XMCSpuGKtrcI36tH7JxU6VQ==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", @@ -32853,9 +34087,9 @@ } }, "rc-progress": { - "version": "3.3.3", - "resolved": "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.3.3.tgz", - "integrity": "sha512-MDVNVHzGanYtRy2KKraEaWeZLri2ZHWIRyaE1a9MQ2MuJ09m+Wxj5cfcaoaR6z5iRpHpA59YeUxAlpML8N4PJw==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.4.2.tgz", + "integrity": "sha512-iAGhwWU+tsayP+Jkl9T4+6rHeQTG9kDz8JAHZk4XtQOcYN5fj9H34NXNEdRdZx94VUDHMqCb1yOIvi8eJRh67w==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", @@ -32873,13 +34107,13 @@ } }, "rc-resize-observer": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.2.0.tgz", - "integrity": "sha512-6W+UzT3PyDM0wVCEHfoW3qTHPTvbdSgiA43buiy8PzmeMnfgnDeb9NjdimMXMl3/TcrvvWl5RRVdp+NqcR47pQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.3.1.tgz", + "integrity": "sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg==", "requires": { - "@babel/runtime": "^7.10.1", + "@babel/runtime": "^7.20.7", "classnames": "^2.2.1", - "rc-util": "^5.15.0", + "rc-util": "^5.27.0", "resize-observer-polyfill": "^1.5.1" } }, @@ -32895,9 +34129,9 @@ } }, "rc-select": { - "version": "14.1.9", - "resolved": "https://registry.npmmirror.com/rc-select/-/rc-select-14.1.9.tgz", - "integrity": "sha512-DK01+Q7oCWr5jVPiEp/BTQ8xCB4rI4LfXzZtSmBWJhOMuibyZD1Vlz/DlVKCUFmtBM4SzG4/SltGHoGlcbCqiw==", + "version": "14.1.18", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.1.18.tgz", + "integrity": "sha512-4JgY3oG2Yz68ECMUSCON7mtxuJvCSj+LJpHEg/AONaaVBxIIrmI/ZTuMJkyojall/X50YdBe5oMKqHHPNiPzEg==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -32920,13 +34154,13 @@ } }, "rc-steps": { - "version": "4.1.4", - "resolved": "https://registry.npmmirror.com/rc-steps/-/rc-steps-4.1.4.tgz", - "integrity": "sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-5.0.0.tgz", + "integrity": "sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw==", "requires": { - "@babel/runtime": "^7.10.2", + "@babel/runtime": "^7.16.7", "classnames": "^2.2.3", - "rc-util": "^5.0.1" + "rc-util": "^5.16.1" } }, "rc-switch": { @@ -32940,9 +34174,9 @@ } }, "rc-table": { - "version": "7.25.3", - "resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.25.3.tgz", - "integrity": "sha512-McsLJ2rg8EEpRBRYN4Pf9gT7ZNYnjvF9zrBpUBBbUX/fxk+eGi5ff1iPIhMyiHsH71/BmTUzX9nc9XqupD0nMg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.26.0.tgz", + "integrity": "sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", @@ -32952,27 +34186,28 @@ } }, "rc-tabs": { - "version": "11.16.1", - "resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-11.16.1.tgz", - "integrity": "sha512-bR7Dap23YyfzZQwtKomhiFEFzZuE7WaKWo+ypNRSGB9PDKSc6tM12VP8LWYkvmmQHthgwP0WRN8nFbSJWuqLYw==", + "version": "12.5.10", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-12.5.10.tgz", + "integrity": "sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ==", "requires": { "@babel/runtime": "^7.11.2", "classnames": "2.x", "rc-dropdown": "~4.0.0", - "rc-menu": "~9.6.0", + "rc-menu": "~9.8.0", + "rc-motion": "^2.6.2", "rc-resize-observer": "^1.0.0", - "rc-util": "^5.5.0" + "rc-util": "^5.16.0" } }, "rc-textarea": { - "version": "0.3.7", - "resolved": "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-0.3.7.tgz", - "integrity": "sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.4.7.tgz", + "integrity": "sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", "rc-resize-observer": "^1.0.0", - "rc-util": "^5.7.0", + "rc-util": "^5.24.4", "shallowequal": "^1.1.0" } }, @@ -32987,26 +34222,26 @@ } }, "rc-tree": { - "version": "5.6.6", - "resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.6.6.tgz", - "integrity": "sha512-HI/q4D4AHOp48OZcBUvJFWkI5OfnZivvGYI0xzI0dy0Mita2KcTGZv7/Yl6Aq3bL3od3x5AqAXq/7qxR3x4Kkg==", + "version": "5.7.10", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.7.10.tgz", + "integrity": "sha512-n4UkMQY3bzvJUNnbw6e3YI7sy2kE9c9vAYbSt94qAhcPKtMOThONNr1LIaFB/M5XeFYYrWVbvRVoT8k38eFuSQ==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.0.1", "rc-util": "^5.16.1", - "rc-virtual-list": "^3.4.8" + "rc-virtual-list": "^3.5.1" } }, "rc-tree-select": { - "version": "5.4.0", - "resolved": "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.4.0.tgz", - "integrity": "sha512-reRbOqC7Ic/nQocJAJeCl4n6nJUY3NoqiwRXKvhjgZJU7NGr9vIccXEsY+Lghkw5UMpPoxGsIJB0jiAvM18XYA==", + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.5.5.tgz", + "integrity": "sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-select": "~14.1.0", - "rc-tree": "~5.6.1", + "rc-tree": "~5.7.0", "rc-util": "^5.16.1" } }, @@ -33033,23 +34268,23 @@ } }, "rc-util": { - "version": "5.23.0", - "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.23.0.tgz", - "integrity": "sha512-lgm6diJ/pLgyfoZY59Vz7sW4mSoQCgozqbBye9IJ7/mb5w5h4T7h+i2JpXAx/UBQxscBZe68q0sP7EW+qfkKUg==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.37.0.tgz", + "integrity": "sha512-cPMV8DzaHI1KDaS7XPRXAf4J7mtBqjvjikLpQieaeOO7+cEbqY2j7Kso/T0R0OiEZTNcLS/8Zl9YrlXiO9UbjQ==", "requires": { "@babel/runtime": "^7.18.3", - "react-is": "^16.12.0", - "shallowequal": "^1.1.0" + "react-is": "^16.12.0" } }, "rc-virtual-list": { - "version": "3.4.8", - "resolved": "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.4.8.tgz", - "integrity": "sha512-qSN+Rv4i/E7RCTvTMr1uZo7f3crJJg/5DekoCagydo9zsXrxj07zsFSxqizqW+ldGA16lwa8So/bIbV9Ofjddg==", + "version": "3.10.5", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.10.5.tgz", + "integrity": "sha512-Vc89TL3JHfRlLVQXVj5Hmv0dIflgwmHDcbjt9lrZjOG3wNUDkTF5zci8kFDU/CzdmmqgKu+CUktEpT10VUKYSQ==", "requires": { + "@babel/runtime": "^7.20.0", "classnames": "^2.2.6", "rc-resize-observer": "^1.0.0", - "rc-util": "^5.15.0" + "rc-util": "^5.36.0" } }, "react": { @@ -33724,6 +34959,11 @@ "is-regex": "^1.1.4" } }, + "safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -34194,7 +35434,7 @@ }, "string-convert": { "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" }, "string-length": { @@ -34452,6 +35692,15 @@ } } }, + "swr": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.2.tgz", + "integrity": "sha512-CbR41AoMD4TQBQw9ic3GTXspgfM9Y8Mdhb5Ob4uIKXhWqnRLItwA5fpGvB7SmSw3+zEjb0PdhiEumtUvYoQ+bQ==", + "requires": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + } + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -34959,6 +36208,12 @@ "requires-port": "^1.0.0" } }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -35060,6 +36315,14 @@ "makeerror": "1.0.12" } }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", diff --git a/package.json b/package.json index 3ce32b1..d87a310 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "@ant-design/charts": "^1.4.2", + "@ant-design/pro-components": "^2.6.16", "antd": "^4.22.6", "dingtalk-jsapi": "^3.0.9", "mobx": "^6.6.1", diff --git a/src/App.css b/src/App.css index 2460a39..e9e982f 100644 --- a/src/App.css +++ b/src/App.css @@ -6,4 +6,31 @@ .align_left{ text-align: left; -} \ No newline at end of file +} +.align_center{ + text-align: center; +} +.m-1{ + margin: 1em; +} +.mt-1{ + margin-top: 1em; +} +.mb-1{ + margin-bottom: 1em; +} +.ml-1{ + margin-left: 1em; +} +.mr-1{ + margin-right: 1em; +} +.mb-n1{ + margin-bottom: -1em; +} +.p-none{ + padding: 0; +} +.p-s1{ + padding: .5em; +} diff --git a/src/App.jsx b/src/App.jsx index 9689a1b..28f12ec 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -10,7 +10,7 @@ import { DollarOutlined, AreaChartOutlined, WechatOutlined, - UserOutlined, + UserOutlined, FlagOutlined, } from '@ant-design/icons'; import { Layout, Menu, Image, Spin } from 'antd'; import { BrowserRouter, Route, Routes, NavLink } from 'react-router-dom'; @@ -35,6 +35,7 @@ import Logo from './logo.png'; import { stores_Context } from './config'; import { observer } from 'mobx-react'; import ExchangeRate from './charts/ExchangeRate'; +import KPI from './views/KPI'; const App = () => { const { Content, Footer, Sider } = Layout; @@ -119,6 +120,7 @@ const App = () => { }, ], }, + { key: 'kpi', label: 目标, icon: }, ]; return ( @@ -159,6 +161,7 @@ const App = () => { > } /> + } /> }> } /> } /> diff --git a/src/charts/Orders.jsx b/src/charts/Orders.jsx index 8dbd637..44d5e63 100644 --- a/src/charts/Orders.jsx +++ b/src/charts/Orders.jsx @@ -13,6 +13,7 @@ import { Line } from '@ant-design/charts'; import SiteSelect from '../components/search/SiteSelect'; import { observer } from 'mobx-react'; import DatePickerCharts from '../components/search/DatePickerCharts'; +import DateGroupRadio from '../components/DateGroupRadio'; class Orders extends Component { static contextType = stores_Context; @@ -36,9 +37,9 @@ class Orders extends Component { xField: 'ApplyDate', yField: 'orderCount', seriesField: 'WebCode', - xAxis: { - type: 'timeCat', - }, + // xAxis: { + // type: 'timeCat', + // }, smooth: true, legend: { position: 'right-top', @@ -72,6 +73,16 @@ class Orders extends Component { 统计 +
+ +

diff --git a/src/components/BulletWithSort.jsx b/src/components/BulletWithSort.jsx new file mode 100644 index 0000000..b10572e --- /dev/null +++ b/src/components/BulletWithSort.jsx @@ -0,0 +1,95 @@ +import { useEffect, useState } from 'react'; +import { observer } from 'mobx-react'; +import { Bullet } from '@ant-design/plots'; +import { sortBy, merge } from '../utils/commons'; +import { dataFieldAlias } from '../libs/ht'; + +// const layoutLabel = { +// 'vertical': +// }; + +export default observer((props) => { + const { dataSource, itemLength, ...extProps } = props; + // 处理进度图的数据格式, number -> array + const dataParser = (origin) => { + const { measureField, rangeField, targetField } = extProps; + const maxKPI = Math.max(...(origin || []).map((ele) => ele[targetField])); + const maxValue = Math.max(...(origin || []).map((ele) => ele[measureField])); + const _max = Math.max(maxKPI, maxValue); + const sortData = origin.sort(sortBy(measureField)).slice(-itemLength); + // 顶格的值定在更远 + const _parseData = sortData?.map((ele) => ({ ...ele, [rangeField]: [0, Math.ceil(_max / 0.9)], [measureField]: [ele[measureField]] })); + return _parseData; + }; + + const [parseData, setParseData] = useState([]); + useEffect(() => { + setParseData(dataParser(dataSource)); + return () => {}; + }, [extProps.measureField, dataSource]); + + const config = merge({ + color: { + range: [ '#FFF3E1', '#FFe0b0', '#bfeec8'], // '#FFbcb8', '#FFe0b0', + measure: '#5B8FF9', + target: '#FF9845', + }, + label: { + target: false, + measure: { + // position: extProps?.vertical === 'vertical' ? 'top' : 'right', + // style: { + // fill: '#063CAA', + // }, + formatter: (v) => { + return dataFieldAlias[extProps.measureField]?.formatter(v[extProps.measureField]) || v; + } + }, + }, + xAxis: { + line: null, + }, + yAxis: false, + // 自定义 legend + legend: { + custom: true, + position: 'bottom', + items: [ + { + value: '实际', + name: '实际', + marker: { + symbol: 'square', + style: { + fill: '#5B8FF9', + r: 5, + }, + }, + }, + { + value: '目标', + name: '目标', + marker: { + symbol: 'line', + style: { + stroke: '#FF9845', // '#39a3f4', + r: 5, + }, + }, + }, + ], + }, + // ? 全局的alias不起作用 + tooltip: { + customItems: (originalItems) => { + // process originalItems, + return originalItems.map((ele) => ({ ...ele, value: dataFieldAlias[ele.name]?.formatter(Number(ele.value)), name: dataFieldAlias[ele.name]?.alias || ele.name })); + }, + }, + }, extProps); + return ( + <> + + + ); +}); diff --git a/src/components/Column.jsx b/src/components/Column.jsx new file mode 100644 index 0000000..301de04 --- /dev/null +++ b/src/components/Column.jsx @@ -0,0 +1,66 @@ +import { useEffect, useState } from 'react'; +import { observer } from 'mobx-react'; +import { sortBy, merge } from '../utils/commons'; +import { dataFieldAlias } from '../libs/ht'; +import { Column } from '@ant-design/plots'; + +export default observer((props) => { + const { dataSource, line, ...extProps } = props; + const yMax = Math.max(line?.value || 0, ...dataSource.map((ele) => ele[extProps.yField])); + const annotationsLine = line + ? [ + { + type: 'text', + position: ['start', line.value], + content: `${line.label} ${line.value / 1000} K`, + // offsetX: -15, + style: { + fill: '#F4664A', + textBaseline: 'bottom', + }, + }, + { + type: 'line', + start: [-10, line.value], + end: ['max', line.value], + style: { + stroke: '#F4664A', + lineDash: [2, 2], + }, + }, + ] + : []; + const config = merge({ + isStack: true, + // xField: 'value', + // yField: 'year', + // seriesField: 'type', + label: { + // 可手动配置 label 数据标签位置 + position: 'middle', + // 'left', 'middle', 'right' + // 可配置附加的布局方法 + layout: [ + // 柱形图数据标签位置自动调整 + { + type: 'interval-adjust-position', + }, // 数据标签防遮挡 + { + type: 'interval-hide-overlap', + }, // 数据标签文颜色自动调整 + { + type: 'adjust-color', + }, + ], + }, + meta: { + [extProps.yField]: { + alias: dataFieldAlias[extProps.yField]?.alias || extProps.yField, + formatter: (v) => dataFieldAlias[extProps.yField]?.formatter(v) || v, + max: Math.ceil(yMax / 0.95), + }, + }, + annotations: [...annotationsLine], + }, extProps); + return ; +}); diff --git a/src/components/Data.jsx b/src/components/Data.jsx new file mode 100644 index 0000000..d503f07 --- /dev/null +++ b/src/components/Data.jsx @@ -0,0 +1,20 @@ +import { Tag } from 'antd'; +import { CaretUpOutlined, CaretDownOutlined } from '@ant-design/icons'; + +export const VSTag = (props) => { + const { diffPercent, diffData, data1, data2 } = props; + const CaretIcon = parseInt(diffPercent) < 0 ? CaretDownOutlined : CaretUpOutlined; + const tagColor = parseInt(diffPercent) < 0 ? 'gold' : 'lime'; + return parseInt(diffPercent) === 0 ? ( + '-' + ) : ( + +
+ {data1} vs {data2} +
+ } color={tagColor}> + {diffPercent} {diffData} + +
+ ); +}; diff --git a/src/components/DataFieldRadio.jsx b/src/components/DataFieldRadio.jsx new file mode 100644 index 0000000..773ec5d --- /dev/null +++ b/src/components/DataFieldRadio.jsx @@ -0,0 +1,23 @@ +import { observer } from 'mobx-react'; +import { Radio, Select } from 'antd'; +import { dataFieldOptions } from '../libs/ht'; + +export default observer((props) => { + const { visible, dataRaw, dataMapper, fieldMapper, onChange, ...extProps } = props; + const handleChange = (value) => { + // console.log('handleChange', value); + if (typeof onChange === 'function') { + onChange(value); + } + }; + const defaultVal = dataFieldOptions[0].value; + + const Component = () => + dataFieldOptions.length < 5 ? ( + handleChange(e.target.value)} defaultValue={defaultVal} {...extProps} /> + ) : ( + + {calcV} + + ); + }, + [] + ); + const RenderMonthCell = (row, mon) => { + return ( + +
+ {fixTo2Decimals(row?.[`M${mon}Percent`])} + % +
+
{numberConvert10K(fixTo4Decimals((Number(row?.yearValue) * row?.[`M${mon}Percent`]) / 100))}
+
+ ); + }; + const monthCol = new Array(12).fill(1).map((_, index) => { + return { + title: `${index + 1}月`, + dataIndex: `M${index + 1}Percent`, + valueType: 'digit', + width: '6.5em', + // fieldProps: { min: 0, max: 100, style: { width: '4em' } }, + renderFormItem: ({ dataIndex, ...item }, { record, isEditable, ...e }, form) => { + return ; + }, + render: (_, row) => RenderMonthCell(row, index + 1), + }; + }); + const columns = [ + { + title: '年度目标', + dataIndex: 'yearValue', + valueType: 'digit', + fieldProps: { style: { width: '100%' }, step: 10000 * 100 }, + formItemProps: { + style: { width: '100%' }, + }, + render: (_, row, ...a) => numberConvert10K(row.yearValue), + }, + ...monthCol, + { + title: '操作', + valueType: 'option', + // width: 250, + render: () => { + return null; + }, + }, + ]; + const onTableChange = (...argrs) => { + setEditableRowKeys(argrs[0].map((ele) => ele.key)); + setDataSource(argrs[0]); + }; + const onTableSubmit = () => { + const tableData = dataSource.reduce((r, curObj) => { + const allMonth = new Array(12).fill(1).map((_, index) => { + const mIndex = index + 1; + const mVal = (Number(curObj.yearValue) * Number(curObj[`M${mIndex}Percent`])) / 100; + const startM = moment([KPIStore.settingYear, index, 1]); + const pick = (({ object, object_name, object_id, subject, date_type }) => ({ + object, + object_name, + object_id, + subject, + date_type, + }))(curObj); + return { + ...pick, + start_date: startM.format('YYYY-MM-DD'), + end_date: startM.endOf('M').format('YYYY-MM-DD HH:mm'), + value: mVal, + kpi_id: curObj.kpiDataMapped?.[`M${mIndex}`]?.kpi_id || undefined, + key: undefined, + }; + }); + return r.concat(allMonth); + }, []); + const yearRow = (({ object, object_name, object_id, subject, date_type, yearValue, kpiYear }) => ({ + object, + object_name, + object_id, + subject, + date_type, + value: yearValue, + start_date: moment([KPIStore.settingYear, 0, 1]).format('YYYY-MM-DD'), + end_date: moment([KPIStore.settingYear, 11, 1]).endOf('M').format('YYYY-MM-DD HH:mm'), + kpi_id: kpiYear?.kpi_id || undefined, + }))(dataSource?.[0] || {}); + tableData.unshift(yearRow); + console.log('sub', tableData, delKpiIds); + // return false; // debug: + KPIStore.onSubmit(tableData, {delQueue: delKpiIds}).then((res) => { + if (res) { + message.success('保存成功'); + setEditOpen(false); + setEditableRowKeys([]); + setDelKpiIds([]); + onSearchSubmit(searchFormStore.formValuesToSub); + return false; + } + message.error('失败, 请重试'); + }); + }; + const initialRow = monthCol.reduce( + (r, v) => ({ + ...r, + [v.dataIndex]: 0, + yearValue: 10000*100, + object: curObject, + object_name: '', + object_id: -1, + subject: 'sum_profit', + date_type: searchFormStore.formValuesToSub.DateType, + kpiDataMapped: {}, + key: Date.now().toString(32) + }), + {} + ); // v.formItemProps.initialValue + const makeInitialTable = (e) => { + setEditOpen(e); + if (e && isEmpty(dataSource)) { + const _initialRow = Object.assign({}, initialRow, initialPercentKey); + setDataSource([_initialRow]); + setEditableRowKeys([_initialRow.key]); + return false; + } + setEditableRowKeys(e ? dataSource.map((ele) => ele.key) : []); + }; + const [delKpiIds, setDelKpiIds] = useState([]); + return ( + <> + + + { + // TradeStore.setStateSearch(form); + // pageRefresh(obj); + onSearchSubmit(obj, form); + setEditOpen(false); + setEditableRowKeys([]); + }} + /> + + + { + return [ + { + makeInitialTable(e); + }} + />, + , + ]; + }} + editable={{ + type: 'multiple', + editableKeys: editableRowsKeys, + actionRender: (row, config, defaultDoms) => { + return [defaultDoms.delete]; + }, + onDelete: (_key, _row) => { + // console.log('del', _key, _row); + const rowKpiIds = (_row?.kpiData || []).map(ele => ele.kpi_id); + rowKpiIds.push(_row?.kpiYear?.kpi_id); + setDelKpiIds(rowKpiIds); + }, + onValuesChange: (record, recordList) => { + // console.log('on edit, onValuesChange',record, recordList); + onTableChange(recordList); + }, + onChange: (editableKeys, editableRows) => { + setEditableRowKeys(editableKeys); + }, + }} + /> + + ); +}); diff --git a/src/components/kpi/SubjectTable/Profit.jsx b/src/components/kpi/SubjectTable/Profit.jsx new file mode 100644 index 0000000..777adb4 --- /dev/null +++ b/src/components/kpi/SubjectTable/Profit.jsx @@ -0,0 +1,252 @@ +import { useContext, useState, useEffect, useMemo } from 'react'; +import { observer } from 'mobx-react'; +import moment from 'moment'; +import { stores_Context } from './../../../config'; +import { Button, Switch, Input, Space, Typography, Row, Col, message } from 'antd'; +import { EditableProTable } from '@ant-design/pro-components'; +import { KPIObjects } from './../../../libs/ht'; +import { isEmpty, fixTo2Decimals, fixTo4Decimals, cloneDeep, numberFormatter, fixToInt } from './../../../utils/commons'; + +export const KPIObjectsMapped = KPIObjects.reduce((a, c) => ({ ...a, [String(c.key)]: c }), {}); +const { Text } = Typography; +const initialPercentKey = new Array(12).fill(1).reduce((r, v, i) => ({ ...r, [`M${i + 1}Percent`]: [8, 9].includes(i) ? 10 : 8 }), {}); +const numberConvert10K = (number, scale = 10) => { + return fixTo2Decimals(number / (1000 * scale)) + '万'; +}; + +export default observer((props) => { + const { KPIStore, date_picker_store: searchFormStore } = useContext(stores_Context); + const { curObject, objects, onSearchSubmit } = props; + const curObjectItem = KPIObjectsMapped[curObject]; + + const [dataSource, setDataSource] = useState(KPIStore.pageData); + const [editOpen, setEditOpen] = useState(false); + const [editableRowsKeys, setEditableRowKeys] = useState([]); + useEffect(() => { + setDataSource(KPIStore.pageData); + setEditOpen(false); + return () => {}; + }, [KPIStore.pageData]); + + + const PercentInput = useMemo( + () => + // eslint-disable-next-line react/display-name + ({ value, onChange, record, ...extProps }) => { + // // eslint-disable-next-line react-hooks/rules-of-hooks + const [inputValue, setInputValue] = useState(value); + const handleInputChange = (e) => { + setInputValue(e.target.value); + onChange?.(e.target.value); + }; + const calcV = inputValue ? numberConvert10K(fixToInt((Number(record?.yearValue) * inputValue) / 100)) : 0; + return ( + + + {calcV} + + ); + }, + [] + ); + const RenderMonthCell = (row, mon) => { + return ( + +
+ {fixTo2Decimals(row?.[`M${mon}Percent`])} + % +
+
{numberConvert10K(fixTo4Decimals((Number(row?.yearValue) * row?.[`M${mon}Percent`]) / 100))}
+
+ ); + }; + const monthCol = new Array(12).fill(1).map((_, index) => { + return { + title: `${index + 1}月`, + dataIndex: `M${index + 1}Percent`, + valueType: 'digit', + width: '6.5em', + // fieldProps: { min: 0, max: 100, style: { width: '4em' } }, + renderFormItem: ({ dataIndex, ...item }, { record, isEditable, ...e }, form) => { + return ; + }, + render: (_, row) => RenderMonthCell(row, index + 1), + }; + }); + const columns = [ + { + title: curObjectItem.label, + dataIndex: 'object_id', + editable: false, + render: (_, r) => r.object_name, + }, + { + title: '年度目标', + dataIndex: 'yearValue', + valueType: 'digit', + fieldProps: { style: { width: '100%' }, step: 10000*100 }, + formItemProps: { + style: { width: '100%' }, + }, + }, + ...monthCol, + { + title: ( + + 操作 + { + makeInitialTable(e); + }} + /> + + ), + valueType: 'option', + // width: 250, + render: () => { + return null; + }, + }, + ]; + + const onTableChange = (...argrs) => { + setEditableRowKeys(argrs[0].map((ele) => ele.key)); + setDataSource(argrs[0]); + }; + const onTableSubmit = () => { + const tableData = dataSource.reduce((r, curObj) => { + const allMonth = new Array(12).fill(1).map((_, index) => { + const mIndex = index + 1; + const mVal = (Number(curObj.yearValue) * Number(curObj[`M${mIndex}Percent`])) / 100; + const startM = moment([KPIStore.settingYear, index, 1]); + const pick = (({ object, object_name, object_id, subject, date_type }) => ({ + object, + object_name, + object_id, + subject, + date_type, + }))(curObj); + return { + ...pick, + start_date: startM.format('YYYY-MM-DD'), + end_date: startM.endOf('M').format('YYYY-MM-DD HH:mm'), + value: mVal, + kpi_id: curObj.kpiDataMapped?.[`M${mIndex}`]?.kpi_id || undefined, + key: undefined, + }; + }); + return r.concat(allMonth); + }, []); + const yearRow = (({ object, object_name, object_id, subject, date_type, yearValue, kpiYear }) => ({ + object, + object_name, + object_id, + subject, + date_type, + value: yearValue, + start_date: moment([KPIStore.settingYear, 0, 1]).format('YYYY-MM-DD'), + end_date: moment([KPIStore.settingYear, 11, 1]).endOf('M').format('YYYY-MM-DD HH:mm'), + kpi_id: kpiYear?.kpi_id || undefined, + }))(dataSource?.[0] || {}); + tableData.unshift(yearRow); + console.log('sub', tableData, 'del:', delKpiIds); + // return false; // debug: + KPIStore.onSubmit(tableData, { delQueue: delKpiIds }).then((res) => { + if (res) { + message.success('保存成功'); + setEditOpen(false); + setEditableRowKeys([]); + setDelKpiIds([]); + onSearchSubmit(searchFormStore.formValuesToSub); + return false; + } + message.error('失败, 请重试'); + }); + }; + const initialRow = monthCol.reduce( + (r, v) => ({ + ...r, + [v.dataIndex]: 0, + yearValue: 10000 * 100, + object: curObject, + object_name: '', + object_id: -1, + subject: 'sum_profit', + date_type: searchFormStore.formValuesToSub.DateType, + kpiDataMapped: {}, + key: Date.now().toString(32), + }), + {} + ); // v.formItemProps.initialValue + const makeInitialTable = (e) => { + setEditOpen(e); + // todo: 单独设置之后, 清空筛选会导致无法批量设置新的 + if (e && isEmpty(dataSource)) { + const _initialRow = Object.assign({}, initialRow, initialPercentKey); + const _objects = isEmpty(objects) ? (curObjectItem?.data || []) : objects; + console.log('ooo', objects, isEmpty(objects), curObjectItem?.data || []); + const _initialTable = _objects.map((obj) => ({ + ...cloneDeep(_initialRow), + object_name: obj.label, + object_id: obj.value, + key: Date.now().toString(32) + obj.value, + })); + console.log(_initialRow, 'iiiii'); + setDataSource(_initialTable); + setEditableRowKeys(_initialTable.map((ele) => ele.key)); + return false; + } + setEditableRowKeys(e ? dataSource.map((ele) => ele.key) : []); + }; + const [delKpiIds, setDelKpiIds] = useState([]); + return ( + <> + + + { + return [defaultDoms.delete]; + }, + onDelete: (_key, _row) => { + // console.log('del', _key, _row); + const rowKpiIds = (_row?.kpiData || []).map((ele) => ele.kpi_id); + rowKpiIds.push(_row?.kpiYear?.kpi_id); + setDelKpiIds(rowKpiIds); + }, + onValuesChange: (record, recordList) => { + // console.log('on edit, onValuesChange',record, recordList); + onTableChange(recordList); + }, + onChange: (editableKeys, editableRows) => { + setEditableRowKeys(editableKeys); + }, + }} + /> + + + + + + + ); +}); diff --git a/src/components/kpi/SumProfitPanel.jsx b/src/components/kpi/SumProfitPanel.jsx new file mode 100644 index 0000000..0818a00 --- /dev/null +++ b/src/components/kpi/SumProfitPanel.jsx @@ -0,0 +1,57 @@ +import { useContext } from 'react'; +import { observer } from 'mobx-react'; +// import { stores_Context } from '../config'; +import { Button, Table, Switch, Input, Space, Typography, Row, Col, Spin, Radio, Tabs } from 'antd'; +import SearchForm from './../search/SearchForm'; +import { bu, KPIObjects } from './../../libs/ht'; + +export default observer((props) => { + // const { } = useContext(stores_Context); + return ( + <> + + + { + // TradeStore.setStateSearch(form); + // pageRefresh(obj); + }} + /> + + + + + { + const id = String(i); + return { + ...ele, + children: `Content of tab ${id}`, + }; + })} + /> + + + + ); +}); diff --git a/src/components/search/BusinessSelect.jsx b/src/components/search/BusinessSelect.jsx index b97fcb3..cb94770 100644 --- a/src/components/search/BusinessSelect.jsx +++ b/src/components/search/BusinessSelect.jsx @@ -5,16 +5,23 @@ import { biz } from '../../libs/ht'; const Business_unit = (props) => { - const {store} = props; + const { store, mode, value, onChange, show_all, ...extProps } = props; return (
{ + if (typeof onChange === 'function') { + onChange(value); + } + // store?.bu_handleChange(value); + }} + labelInValue={true} + {...extProps} + > + {_show_all ? ALL 事业部 : ''} + {bu.map(ele => {ele.label})} + +
+ ); +}; +/** + * HT的事业部 + */ +export default observer(Business_unit); diff --git a/src/components/search/DataTypeSelect.jsx b/src/components/search/DataTypeSelect.jsx index e6f185d..731c81b 100644 --- a/src/components/search/DataTypeSelect.jsx +++ b/src/components/search/DataTypeSelect.jsx @@ -8,15 +8,30 @@ class DataTypeSelect extends Component { super(props); } + // debug: + // componentDidMount() { + // console.log(this.props, 'DataTypeSelect props'); + // } + + handleChange = (value) => { + if (this.props.store) { + this.props.store.onChange_datetype(value); + } + if (this.props.onChange) { + this.props.onChange(value); + } + }; + render() { const store = this.props.store; return ( -
- -
); } } diff --git a/src/components/search/DatePickerCharts.jsx b/src/components/search/DatePickerCharts.jsx index c8bca41..d6dc4f0 100644 --- a/src/components/search/DatePickerCharts.jsx +++ b/src/components/search/DatePickerCharts.jsx @@ -1,5 +1,5 @@ import React, { Component } from "react"; -import { Col, DatePicker, Row } from "antd"; +import { Col, DatePicker, Row, Form } from "antd"; import { observer } from "mobx-react"; import * as config from "../../config"; import moment from "moment"; @@ -7,6 +7,16 @@ import "moment/locale/zh-cn"; import locale from "antd/es/date-picker/locale/zh_CN"; import { stores_Context } from "../../config"; +// 1.0的搜索组件 不需要Form包裹 +const SectionWrapper = ({ isform, id, title, children, right, ...extProps }) => + !isform ? ( + <>{children} + ) : ( + + {children} + + ); + // 用于日期选择,计算上一时间段、同比时间等 class DatePickerCharts extends Component { static contextType = stores_Context; @@ -17,17 +27,27 @@ class DatePickerCharts extends Component { render() { const { date_picker_store } = this.context; + const { isform } = this.props; + const defaultV = [date_picker_store.start_date, date_picker_store.end_date]; + const defaultVdiff = [date_picker_store.start_date_cp, date_picker_store.end_date_cp]; return (
+ { + date_picker_store.onChange_dataPicker(e); + if (typeof this.props.onChange === 'function') { + this.props.onChange(e); + } + } + } ranges={{ 本周: [moment().startOf("week"), moment().endOf("week")], 上周: [moment().startOf("week").subtract(7, "days"), moment().endOf("week").subtract(7, "days")], @@ -40,19 +60,27 @@ class DatePickerCharts extends Component { 去年: [moment().subtract(1, "year").startOf("year"), moment().subtract(1, "year").endOf("year")], }} /> + {this.props.hide_vs ? ( "" ) : ( + { + if (typeof this.props.onChange === 'function') { + this.props.onChange(value); + } + date_picker_store?.onChange_dataPicker_cp(value); + }} ranges={{ 上一时间段: date_picker_store.previous_date(), 去年同期: date_picker_store.previous_year(), @@ -62,7 +90,7 @@ class DatePickerCharts extends Component { 前三个月: [moment().subtract(5, "month").startOf("month"), moment().subtract(3, "month").endOf("month")], 去年: [moment().subtract(1, "year").startOf("year"), moment().subtract(1, "year").endOf("year")], }} - /> + /> )} diff --git a/src/components/search/GroupSelect.jsx b/src/components/search/GroupSelect.jsx index 95a0e6e..24daa00 100644 --- a/src/components/search/GroupSelect.jsx +++ b/src/components/search/GroupSelect.jsx @@ -10,23 +10,29 @@ class GroupSelect extends Component { render() { const { store, mode, value, onChange, show_all, ...extProps } = this.props; + const _mode = mode || store?.group_select_mode || null; + const _show_all = ['tags', 'multiple'].includes(_mode) ? false : show_all; return (
+ {options} + + ); + } +} +export default observer(SearchInput); diff --git a/src/components/search/SearchForm.jsx b/src/components/search/SearchForm.jsx new file mode 100644 index 0000000..1a4a40a --- /dev/null +++ b/src/components/search/SearchForm.jsx @@ -0,0 +1,361 @@ +import { createContext, useContext } from 'react'; +import { toJS } from 'mobx'; +import { observer } from 'mobx-react'; +import { DATE_FORMAT, stores_Context } from './../../config'; +import { SearchOutlined } from '@ant-design/icons'; +import { Form, Row, Col, Select, Button, Space, DatePicker } from 'antd'; +import moment from 'moment'; +// import locale from 'antd/es/date-picker/locale/zh_CN'; +import BusinessSelect from './BusinessSelect'; +import BusinessUnitSelect from './BusinessUnitSelect'; +import GroupSelect from './GroupSelect'; +import SiteSelect from './SiteSelect'; +import DateTypeSelect from './DataTypeSelect'; +import DatePickerCharts from './DatePickerCharts'; +import YearPickerCharts from './YearPickerCharts'; +import SearchInput from './Input'; +import { objectMapper, at } from './../../utils/commons'; + +import './search.css'; + +const EditableContext = createContext(); +const Option = Select.Option; + +/** + * 搜索表单 + * @property defaultValue { initialValue, fieldProps, hides, shows, sort } + * * {object} initialValue 默认值 + * * {object} fieldProps 表单项属性 + * * {array} hides 隐藏的表单项 + * * {array} shows 显示的表单项 + * * {object} sort 表单项排序 + * @property onSubmit + */ +export default observer((props) => { + const { date_picker_store: searchFormStore } = useContext(stores_Context); + const [form] = Form.useForm(); + const { sort, initialValue, hides, shows, fieldProps } = { + sort: '', + initialValue: '', + fieldProps: '', + hides: [], + shows: [], + ...props.defaultValue, + }; + const { onSubmit, confirmText } = props; + + const onFinish = (values) => { + console.log('Received values of form, origin form value: ', values); + const destinationObject = { + 'DateType': { + key: 'DateType', + transform: (value) => value?.key || '', + default: '', + }, + 'HTBusinessUnits': { + key: 'HTBusinessUnits', + transform: (value) => { + return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? (!isNaN(parseInt(value.key), 10) ? value.key : '') : '-1'; + }, + default: '', + }, + 'businessUnits': { + key: 'businessUnits', + transform: (value) => { + return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? (!isNaN(parseInt(value.key), 10) ? value.key : '') : '-1'; + }, + default: '', + }, + 'DepartmentList': { + key: 'DepartmentList', + transform: (value) => { + return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? value.key : 'ALL'; + }, + default: '', + }, + 'WebCode': { + key: 'WebCode', + transform: (value) => { + return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? value.key : 'ALL'; + }, + default: '', + }, + 'IncludeTickets': { + key: 'IncludeTickets', + transform: (value) => value?.key || '', + default: '', + }, + 'operator': { + key: 'operator', + transform: (value) => value?.key || '', + default: '', + }, + 'applyDate': [ + { + key: 'Date1', + transform: (value) => (value === '' || !Array.isArray(value) ? undefined : moment(value[0]).format(DATE_FORMAT)), + default: '', + }, + { + key: 'Date2', + transform: (value) => (value === '' || !Array.isArray(value) ? undefined : moment(value[1]).format(`${DATE_FORMAT} 23:59:59`)), + default: '', + }, + ], + 'applyDate2': [ + { + key: 'DateDiff1', + transform: (value) => (value === '' || !Array.isArray(value) ? undefined : value[0] ? moment(value[0]).format(DATE_FORMAT) : undefined), + default: '', + }, + { + key: 'DateDiff2', + transform: (value) => (value === '' || !Array.isArray(value) ? undefined : value[1] ? moment(value[1]).format(`${DATE_FORMAT} 23:59:59`) : undefined), + default: '', + }, + ], + 'year': [ + { + key: 'Date1', + transform: (value) => (value ? moment(value).format(`YYYY-01-01`) : undefined), + default: '', + }, + { + key: 'Date2', + transform: (value) => (value ? moment(value).format(`YYYY-12-31 23:59:59`) : undefined), + default: '', + }, + ], + 'yearDiff': [ + { + key: 'DateDiff1', + transform: (value) => (value ? moment(value).format(`YYYY-01-01`) : undefined), + default: '', + }, + { + key: 'DateDiff2', + transform: (value) => (value ? moment(value).format(`YYYY-12-31 23:59:59`) : undefined), + default: '', + }, + ], + 'country': { + key: 'country', + transform: (value) => value?.key || '', + default: '', + }, + }; + let dest = {}; + const { applyDate, applyDate2, year, yearDiff, ...omittedValue } = values; + dest = { ...omittedValue, ...objectMapper(values, destinationObject) }; + for (const key in dest) { + if (Object.prototype.hasOwnProperty.call(dest, key)) { + dest[key] = typeof dest[key] === 'string' ? (dest[key] || '').trim() : dest[key]; + } + } + // omit empty + Object.keys(dest).forEach((key) => (dest[key] == null || dest[key] === '' || dest[key].length === 0) && delete dest[key]); + console.log('form value send to onSubmit:', dest); + const str = new URLSearchParams(dest).toString(); + searchFormStore.setFormValues(values); + searchFormStore.setFormValuesToSub(dest); + if (typeof onSubmit === 'function') { + onSubmit(null, dest, values, str); + } + }; + + const onReset = () => { + form.setFieldsValue({ + // 'DateType': undefined, + }); + }; + const onValuesChange = (...args) => { + const [changedValues, allValues] = args; + console.log('form onValuesChange', args); + searchFormStore.setFormValues(allValues); + }; + + return ( + // layout="inline" +
+ + + {getFields({ sort, initialValue, hides, shows, fieldProps, form })} + {/* 'textAlign': 'right' */} + + + + {/* */} + + + + +
+ ); +}); + +function getFields(props) { + const { fieldProps, form } = props; + const bigCol = 4 * 2; + const midCol = 6; + const layoutProps = { + gutter: { xs: 8, sm: 8, lg: 16 }, + lg: { span: 4 }, + sm: { span: 12 }, + xs: { span: 24 }, + }; + const item = (name, sort = 0, render, col) => { + const customCol = col || 4; + return { + 'key': '', + sort, + name, + render, + 'hide': false, + 'col': { lg: { span: customCol } }, + }; + }; + let baseChildren = []; + baseChildren = [ + item( + 'HTBusinessUnits', + 99, + + + + ), + item( + 'businessUnits', + 99, + + + + ), + item( + 'DepartmentList', + 99, + + + + ), + item( + 'WebCode', + 99, + + + + ), + item( + 'IncludeTickets', + 99, + // value={orders_store.include_tickets} onChange={orders_store.handleChange_include_tickets} + + + , + 2 + ), + // + item( + 'DateType', + 99, + + + , + 2 + ), + item( + 'dates', + 99, + + + , + midCol + ), + item( + 'years', + 99, + + {/* */} + + , + 2 + ), + item( + 'months', + 99, + + + , + 2 + ), + item( + 'operator', + 99, + + + + ), + item( + 'country', + 99, + + + + ), + ]; + baseChildren = baseChildren + .map((x) => { + x.hide = false; + if (props.sort === undefined) { + return x; + } + const tmpSort = props.sort; + for (const key in tmpSort) { + if (Object.prototype.hasOwnProperty.call(tmpSort, key)) { + if (x.name === key) { + x.sort = tmpSort[key]; + } + } + } + return x; + }) + .map((x) => { + if (props.hides.length === 0 && props.shows.length === 0) { + return x; + } + if (props.hides.length === 0) { + x.hide = !props.shows.includes(x.name); + } else if (props.shows.length === 0) { + x.hide = props.hides.includes(x.name); + } + return x; + }) + .filter((x) => !x.hide) + .sort((a, b) => { + return a.sort < b.sort ? -1 : 1; + }); + const children = []; + const leftStyle = {}; // { borderRight: '1px solid #dedede' }; + for (let i = 0; i < baseChildren.length; i++) { + let style = { padding: '0px 2px' }; + style = i % 2 === 0 && baseChildren[i].col === 12 ? { ...style, ...leftStyle } : style; + style = !baseChildren[i].hide ? { ...style, display: 'block' } : { ...style, display: 'none' }; + const Item = ( + + {baseChildren[i].render} + + ); + children.push(Item); + } + return children; +} diff --git a/src/components/search/SiteSelect.jsx b/src/components/search/SiteSelect.jsx index abb138b..3d22f93 100644 --- a/src/components/search/SiteSelect.jsx +++ b/src/components/search/SiteSelect.jsx @@ -11,22 +11,28 @@ class SiteSelect extends Component { render() { const { store, mode, value, onChange, show_all, ...extProps } = this.props; - return ( + const _mode = mode || store?.group_select_mode || null; + const _show_all = ['tags', 'multiple'].includes(_mode) ? false : show_all; + return (
diff --git a/src/components/search/YearPickerCharts.jsx b/src/components/search/YearPickerCharts.jsx new file mode 100644 index 0000000..1a5a6f7 --- /dev/null +++ b/src/components/search/YearPickerCharts.jsx @@ -0,0 +1,70 @@ +import React, { Component } from 'react'; +import { Col, DatePicker, Row, Form } from 'antd'; +import { observer } from 'mobx-react'; +import * as config from '../../config'; +import moment from 'moment'; +import 'moment/locale/zh-cn'; +import locale from 'antd/es/date-picker/locale/zh_CN'; +import { stores_Context } from '../../config'; + +// 用于日期选择,计算上一时间段、同比时间等 +class DatePickerCharts extends Component { + static contextType = stores_Context; + + constructor(props) { + super(props); + } + + render() { + const { date_picker_store } = this.context; + return ( +
+ + + + { + const fullYear = [e.clone().set('month', 0).set('date', 1), e.clone().set('month', 11).set('date', 31)]; + date_picker_store.onChange_dataPicker(fullYear); + if (typeof this.props.onChange === 'function') { + this.props.onChange(fullYear); + } + }} + /> + + + {this.props.hide_vs ? ( + '' + ) : ( + + + { + const fullYear = [value.clone().set('month', 0).set('date', 1), value.clone().set('month', 11).set('date', 31)]; + if (typeof this.props.onChange === 'function') { + this.props.onChange(fullYear); + } + date_picker_store?.onChange_dataPicker_cp(fullYear); + }} + /> + + + )} + +
+ ); + } +} + +export default observer(DatePickerCharts); diff --git a/src/components/search/search.css b/src/components/search/search.css new file mode 100644 index 0000000..9f8f546 --- /dev/null +++ b/src/components/search/search.css @@ -0,0 +1,4 @@ +.ant-form-item{ + margin: 0; + margin-bottom: 8px; +} diff --git a/src/libs/ht.js b/src/libs/ht.js index ed2c7cc..6f9cc80 100644 --- a/src/libs/ht.js +++ b/src/libs/ht.js @@ -7,29 +7,52 @@ export const biz = [ { key: '2', label: '国际事业部', code: '' }, { key: '4', label: '孵化学院', code: '' }, ]; +/** + * HT 事业部 + */ +export const bu = [ + { key: '91001', value: '91001', label: 'CH事业部' }, + { key: '91002', value: '91002', label: '商旅事业部' }, + { key: '91003', value: '91003', label: '国际事业部' }, + { key: '91004', value: '91004', label: 'CT事业部' }, + { key: '91005', value: '91005', label: '德语事业部' }, + { key: '91006', value: '91006', label: 'AH亚洲项目组' }, + { key: '91009', value: '91009', label: 'Trippest项目组' }, + { key: '91010', value: '91010', label: '花梨鹰' }, + { key: '91012', value: '91012', label: '西语组' }, +]; +/** + * HT 销售小组 + */ +export const deptUnits = [ + { key: '43001', value: '43001', label: '英文A组(骆梅玉)' }, + { key: '43002', value: '43002', label: '英文B组(王健)' }, + { key: '43003', value: '43003', label: '目的地组(杨新玲)' }, + { key: '43005', value: '43005', label: '其他' }, +]; /** * 小组 */ export const groups = [ - { key: '1,2,28,7,33', label: 'GH事业部', code: 'GH', children: [] }, - { key: '8,9,11,12,20,21', label: '国际事业部', code: 'INT', children: [] }, - { key: '10,18,16,30', label: '孵化学院', code: '', children: [] }, - { key: '1', label: 'CH直销', code: '', children: [] }, - { key: '2', label: 'CH大客户', code: '', children: [] }, - { key: '28', label: 'AH亚洲项目组', code: 'AH', children: [] }, - { key: '33', label: 'GH项目组', code: '', children: [] }, - { key: '7', label: '市场推广', code: '', children: [] }, - { key: '8', label: '德语', code: '', children: [] }, - { key: '9', label: '日语', code: '', children: [] }, - { key: '11', label: '法语', code: '', children: [] }, - { key: '12', label: '西语', code: '', children: [] }, - { key: '20', label: '俄语', code: '', children: [] }, - { key: '21', label: '意语', code: '', children: [] }, - { key: '10', label: '商旅', code: '', children: [] }, - { key: '18', label: 'CT', code: 'CT', children: [] }, - { key: '16', label: 'APP', code: 'APP', children: [] }, - { key: '30', label: 'Trippest', code: 'TP', children: [] }, - { key: '31', label: '花梨鹰', code: '', children: [] }, + { value: '1,2,28,7,33', key: '1,2,28,7,33', label: 'GH事业部', code: 'GH', children: [1, 2, 28, 7, 33] }, + { value: '8,9,11,12,20,21', key: '8,9,11,12,20,21', label: '国际事业部', code: 'INT', children: [8, 9, 11, 12, 20, 21] }, + { value: '10,18,16,30', key: '10,18,16,30', label: '孵化学院', code: '', children: [10, 18, 16, 30] }, + { value: '1', key: '1', label: 'CH直销', code: '', children: [] }, + { value: '2', key: '2', label: 'CH大客户', code: '', children: [] }, + { value: '28', key: '28', label: 'AH亚洲项目组', code: 'AH', children: [] }, + { value: '33', key: '33', label: 'GH项目组', code: '', children: [] }, + { value: '7', key: '7', label: '市场推广', code: '', children: [] }, + { value: '8', key: '8', label: '德语', code: '', children: [] }, + { value: '9', key: '9', label: '日语', code: '', children: [] }, + { value: '11', key: '11', label: '法语', code: '', children: [] }, + { value: '12', key: '12', label: '西语', code: '', children: [] }, + { value: '20', key: '20', label: '俄语', code: '', children: [] }, + { value: '21', key: '21', label: '意语', code: '', children: [] }, + { value: '10', key: '10', label: '商旅', code: '', children: [] }, + { value: '18', key: '18', label: 'CT', code: 'CT', children: [] }, + { value: '16', key: '16', label: 'APP', code: 'APP', children: [] }, + { value: '30', key: '30', label: 'Trippest', code: 'TP', children: [] }, + { value: '31', key: '31', label: '花梨鹰', code: '', children: [] }, ]; export const groupsMappedByCode = groups.reduce((a, c) => ({ ...a, [String(c.code || c.key)]: c }), {}); @@ -37,32 +60,84 @@ export const groupsMappedByCode = groups.reduce((a, c) => ({ ...a, [String(c.cod * 来源 */ export const sites = [ - { key: '2', label: 'CHT', code: 'CHT' }, - { key: '8', label: 'AH', code: 'AH' }, - { key: '163', label: 'GH', code: 'GH' }, - { key: '28', label: '客运中国', code: 'GHKYZG' }, - { key: '7', label: '客运海外', code: 'GHKYHW' }, - { key: '172', label: 'GHToB 海外', code: 'GHTOBHW' }, - { key: '176', label: 'GHToB 中国', code: 'GHTOBZG' }, - { key: '11,12,20,21,10,18', label: '国际(入境)', code: 'JP,VAC,IT,GM,RU,VC' }, - { key: '122,200,211,100,188', label: '国际(海外)', code: 'VACHW,ITHW,GMHW,RUHW,VCHW' }, - { key: '11', label: '日语', code: 'JP' }, - { key: '12', label: '西语', code: 'VAC' }, - { key: '122', label: '西语海外', code: 'VACHW' }, - { key: '20', label: '意大利', code: 'IT' }, - { key: '200', label: '意大利海外', code: 'ITHW' }, - { key: '21', label: '德语', code: 'GM' }, - { key: '211', label: '德语海外', code: 'GMHW' }, - { key: '10', label: '俄语', code: 'RU' }, - { key: '100', label: '俄语海外', code: 'RUHW' }, - { key: '18', label: '法语', code: 'VC' }, - { key: '188', label: '法语海外', code: 'VCHW' }, - { key: '16', label: 'CT', code: 'CT' }, - { key: '30', label: 'TP', code: 'trippest' }, - { key: '31', label: '花梨鹰', code: 'HLY' }, + { value: '2', key: '2', label: 'CHT', code: 'CHT' }, + { value: '8', key: '8', label: 'AH', code: 'AH' }, + { value: '163', key: '163', label: 'GH', code: 'GH' }, + { value: '28', key: '28', label: '客运中国', code: 'GHKYZG' }, + { value: '7', key: '7', label: '客运海外', code: 'GHKYHW' }, + { value: '172', key: '172', label: 'GHToB 海外', code: 'GHTOBHW' }, + { value:'176',key: '176', label: 'GHGH TO B 中国', code: 'GHTOBZG' }, + { value: '11,12,20,21,10,18', key: '11,12,20,21,10,18', label: '国际(入境)', code: 'JP,VAC,IT,GM,RU,VC' }, + { value: '122,200,211,100,188', key: '122,200,211,100,188', label: '国际(海外)', code: 'VACHW,ITHW,GMHW,RUHW,VCHW' }, + { value: '11', key: '11', label: '日语', code: 'JP' }, + { value: '12', key: '12', label: '西语', code: 'VAC' }, + { value: '122', key: '122', label: '西语海外', code: 'VACHW' }, + { value: '20', key: '20', label: '意大利', code: 'IT' }, + { value: '200', key: '200', label: '意大利海外', code: 'ITHW' }, + { value: '21', key: '21', label: '德语', code: 'GM' }, + { value: '211', key: '211', label: '德语海外', code: 'GMHW' }, + { value: '10', key: '10', label: '俄语', code: 'RU' }, + { value: '100', key: '100', label: '俄语海外', code: 'RUHW' }, + { value: '18', key: '18', label: '法语', code: 'VC' }, + { value: '188', key: '188', label: '法语海外', code: 'VCHW' }, + { value: '16', key: '16', label: 'CT', code: 'CT' }, + { value: '30', key: '30', label: 'TP', code: 'trippest' }, + { value: '31', key: '31', label: '花梨鹰', code: 'HLY' }, ]; export const dateTypes = [ - { key: 'applyDate', label: '提交日期' }, - { key: 'ConfirmDate', label: '确认日期' }, - { key: 'startDate', label: '走团日期' }, + { key: 'applyDate', value: 'applyDate', label: '提交日期' }, + { key: 'ConfirmDate', value: 'ConfirmDate', label: '确认日期' }, + { key: 'startDate', value: 'startDate', label: '走团日期' }, +]; + +/** + * 结果字段 + */ +export const dataFieldOptions = [ + { label: '毛利', value: 'SumML', formatter: (v) => `${v / 10000} 万`, nestkey: { p: 'MLKPIrates', v: 'MLKPIvalue' } }, + { label: '订单数', value: 'SumOrder', formatter: (v) => v, nestkey: { p: 'OrderKPIrates', v: 'OrderKPIvalue' } }, + { label: '成交数', value: 'ConfirmOrder', formatter: (v) => v, nestkey: { p: 'ConfirmOrderKPIrates', v: 'ConfirmOrderKPIvalue' } }, + { label: '成交率', value: 'ConfirmRates', formatter: (v) => v, nestkey: { p: 'ConfirmRatesKPIrates', v: 'ConfirmRatesKPIvalue' } }, + // { label: '人数', value: 'CJPersonNum', formatter: (v) => v }, + // todo: more... +]; +/** + * 结果字段alias + */ +export const dataFieldAlias = dataFieldOptions.reduce( + (a, c) => ({ + ...a, + [c.value]: { ...c, alias: c.label, formatter: (v) => c.formatter(v) }, + [c.nestkey.v]: { ...c, value: c.nestkey.v, alias: `${c.label}目标`, formatter: (v) => c.formatter(v) }, + }), + {} +); + +/** + * KPI对象 + */ +export const KPIObjects = [ + { key: 'overview', value: 'overview', label: '海纳' }, + { key: 'bu', value: 'bu', label: '事业部', data: bu }, + { key: 'dept', value: 'dept', label: '小组', data: groups }, + { key: 'du', value: 'du', label: '销售小组', data: deptUnits }, + { key: 'operator', value: 'operator', label: '顾问' }, + { key: 'destination', value: 'destination', label: '目的地' }, + { key: 'country', value: 'country', label: '国籍' }, +]; +export const KPISubjects = [ + { key: 'sum_profit', value: 'sum_profit', label: '毛利' }, + { key: 'in_order_count', value: 'in_order_count', label: '订单数' }, + { key: 'confirm_order_count', value: 'confirm_order_count', label: '成团' }, + { key: 'depart_order_count', value: 'depart_order_count', label: '走团' }, + { key: 'confirm_rates', value: 'confirm_rates', label: '成型率' }, + { key: 'praise_rates', value: 'praise_rates', label: '表扬率' }, + // { key: 'first_reply_rates', value: 'first_reply_rates', label: '首报回复率'}, + // { key: 'quote_rates', value: 'quote_rates', label: '报价率'}, + // { key: 'first_post_time', value: 'first_post_time', label: '订单到首邮发送时间'}, + // { key: 'reply_rates_wechat', value: 'reply_rates_wechat', label: '微信回复率'}, + // { key: 'reply_rates_wa', value: 'reply_rates_wa', label: 'WA回复率'}, + // { key: 'reply_eff_wechat', value: 'reply_eff_wechat', label: '微信回复效率'}, + // { key: 'reply_eff_wa', value: 'reply_eff_wa', label: 'WA回复效率'}, + { key: 'sum_person_num', value: 'sum_person_num', label: '人数' }, ]; diff --git a/src/mock/2.0/1.json b/src/mock/2.0/1.json deleted file mode 100644 index 9b25a55..0000000 --- a/src/mock/2.0/1.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "get|/service-web/QueryData/GetOrderCount/test": { - "errcode": "", - "errmsg": "", - "data": null, - "ordercount1|10": [ - { - "id|10-99": 1, - "key|10-99": 1, - "orderCount|1-100": 5, - "WebCode|1": ["ah", "cht"], - "groups": "groups1", - "ApplyDate": "@date(\"2023-08-dd\")" - } - ], - "ordercount2|10": [ - { - "id|100-200": 1, - "key|100-200": 1, - "orderCount|1-100": 5, - "WebCode|1": ["ah", "cht"], - "groups": "groups2", - "ApplyDate": "@date(\"2023-08-dd\")" - } - ] - } -} diff --git a/src/mock/2.0/baseinfo.json b/src/mock/2.0/baseinfo.json new file mode 100644 index 0000000..e02e285 --- /dev/null +++ b/src/mock/2.0/baseinfo.json @@ -0,0 +1,19 @@ +{ + "get|/service-web/baseinfo/operator/test": { + "errcode": 0, + "errmsg": "", + "data": null, + "loading": null, + "result|10": [ + { + "mobile": "13@integer(99999999,999999999)", + "op_id": "@integer(10,99)", + "cn_name": "@cname", + "email": "@email", + "en_name": "@first", + "code": "@word(2,3)", + "key": "@increment" + } + ] + } +} diff --git a/src/mock/2.0/trade.json b/src/mock/2.0/trade.json index 1007b49..6d65617 100644 --- a/src/mock/2.0/trade.json +++ b/src/mock/2.0/trade.json @@ -5,42 +5,152 @@ "data": null, "loading": false, "result1": { - "SumML|999-9999": 27018, - "SumMLrate|-20-100": 23, - "SumMLKPIrate|20-100": 23, - "SumOrder|999-999": 27018, + "SumML": "@float(999,9999,2,2)", + "SumMLrate": "@float(-20,100,2,2)", + "SumMLKPIrate": "@float(20,100,2,2)", + "SumOrder": "@integer(99,999)", "SumOrderrate": "@float(-20,20,2,2)", "SumOrderKPIrate|20-100": 25, - "SumPersonNum|999-999": 27018, + "SumPersonNum": "@integer(999,9999)", "SumPersonNumrate|-50-1": 33, - "SumPersonNumKPIrate|20-100": 33, + "SumPersonNumKPIrate": 0, "groups": "2023-05-01~2023-05-31", "key": "@increment" }, "result2": { - "SumML|999-9999": 27018, - "SumOrder|999-999": 27018, - "SumPersonNum|999-999": 27018, + "SumML": "@float(999,9999,2,2)", + "SumOrder": "@integer(99,999)", + "SumPersonNum": "@integer(99,999)", "groups": "2022-05-01~2023-05-31", "key": "@increment" } }, - "get|/service-web/QueryData/GetYJ": { + "get|/service-web/QueryData/GetTradeByMonth": { "errcode": 0, "errmsg": "", - "data": null, "loading": false, - "result1|10": [ + "data|24": [ { - "AvgML|999-9999": 27018, + "biz_side|1": [ + "inside", + "outside" + ], + "SumML": "@float(999,9999,2,2)", + "SumMLKPIrate": "@float(0,70,2,2)", "COLI_Department": "1,2,28,7", - "OPI_SN": "@id", - "OPI_Name": "@cname", - "COLI_YJLY|999-99999": 215493, - "groups": "2023-05-01~2023-05-31", + "month": "@date('MM')", + "key": "@increment" + } + ] + }, + "get|/service-web/QueryData/GetTradeOrderByType": { + "errcode": 0, + "errmsg": "", + "loading": false, + "data": null, + "result1|5": [ + { + "OrderTypeSN": "@integer(1,10)", + "OrderType": "@cname", + "OrderCount": "@integer(9,999)", + "OrderCountKPI": "@integer(100,1000)", + "CJCount": "@integer(9,999)", + "CJCountKPI": "@integer(100,1000)", + "CJPersonNum": "@integer(9,999)", + "YJLY": "@integer(99,9999)", + "CJrate": "@float(1,99,0,2)", + "CJrateKPI": "@float(1,99,0,2)", + "Ordervalue": "@integer(9,999)", + "SumML": "@integer(99,9999)", + "SumMLKPI": "@integer(99,9999)", + "SumMLrate": "@float(-20,100,0,2)", + "SumMLKPIrate": "@float(20,100,0,2)", + "SumOrder": "@integer(9,999)", + "OrderCountVSrate": "@float(-20,20,0,2)", + "OrderCountKPIrate": "@float(20,100,0,2)", + "SumPersonNum": "@integer(99,9999)", + "SumPersonNumrate": "@float(-50,1,0,2)", + "SumPersonNumKPIrate": "@float(20,100,0,2)", + "groups": "2023-06-12~2023-06-18", "key": "@increment" } ], - "result2": [] + "result2": [ + {} + ] + }, + "get|/service-Analyse2/GetTradeProcess/test": { + "errcode": 0, + "errmsg": "", + "loading": false, + "data": null, + "result1|24": [ + { + "groups|1": "@pick([\"inside\",\"outside\"])", + "groupsLabel|1": "@pick([\"inside\",\"outside\"])", + "groupDateVal": "@date('2023-MM')", + "SumML": "@increment(1000)", + "SumMLVSrate": "@float(0,70,2,2)", + "SumMLKPI": "@integer(1000,10000)", + "SumMLKPIrate": "@float(0,70,2,2)", + "SumOrder": "@integer(9,999)", + "SumOrderVSrate": "@float(-20,20,0,2)", + "SumOrderKPIrate": "@float(20,100,0,2)", + "SumPersonNum": "@integer(99,9999)", + "SumPersonNumrate": "@float(-50,1,0,2)", + "SumPersonNumKPIrate": "@float(20,100,0,2)", + "key": "@increment" + }], + "result2": [ + {} + ] + }, + "get|/service-web/QueryData/GetTradeSection": { + "errcode": 0, + "errmsg": "", + "loading": false, + "data": null, + "result1|24": [ + { + "groups|1": "@pick([\"1\",\"2_5\"])", + "groupDateVal": "@date('2023-MM')", + "key": "@increment", + "SumML": "@integer(99,9999)", + "SumOrder": "@integer(99,9999)", + "SumPersonNum": "@integer(99,9999)", + "ConfirmOrder": "@integer(99,9999)", + "ConfirmRates": "@float(20,100,0,2)", + "AvgML": "@integer(99,9999)" + }], + "result2": [ + {} + ] + }, + "get|/service-Analyse2/getkpi/test": { + "errcode": 0, + "errmsg": "", + "loading": false, + "data": null, + "result|10": [ + { + "object|1": "@pick([\"dept\",\"sales\", \"group\"])", + "subject|1": "@pick([\"OrderCount\",\"SumML\", \"AvgML\", \"SuccessRate\"])", + "object_id": "@integer(10,100)", + "object_name": "@cname", + "date_type": "@pick([\"ConfirmDate\",\"startDate\", \"applyDate\"])", + "start_date": "@date(\"2023-MM-dd\")", + "end_date": "@datetime(\"yyyy-MM-dd HH:mm:ss\")", + "value": "@integer(99,9999)", + "key": "@increment" + }], + "result2": [ + {} + ] + }, + "post|/service-Analyse2/setkpi_multi/test": { + "errcode": 0, + "errmsg": "", + "loading": false, + "data": null } } diff --git a/src/stores/DashboardStore.js b/src/stores/DashboardStore.js index 8930d63..52b44ce 100644 --- a/src/stores/DashboardStore.js +++ b/src/stores/DashboardStore.js @@ -1,5 +1,6 @@ import { makeAutoObservable, runInAction } from "mobx"; import * as config from "../config"; +import { resultDataCb } from '../components/DateGroupRadio/date'; class DashboardStore { constructor(rootStore) { @@ -18,6 +19,15 @@ class DashboardStore { getOrderCount_all: this.getOrderCount_all.bind(this), }; + ordersCountDataRaw = {}; + orderCountDataMapper = { 'data1': 'ordercount1', 'data2': 'ordercount2' }; + orderCountDataFieldMapper ={ 'dateKey': 'ApplyDate', 'valueKey': 'orderCount', 'seriesKey': 'WebCode', _f: 'sum' }; + onChangeDateGroup = (value, data, avg1) => { + // this.lineChartXGroup = value; + this.orders_data.data = data; + // this.avgLine1 = avg1; + }; + getOrderCount_all() { // 统计所有站点订单数量 this.orders_data.loading = true; @@ -29,7 +39,9 @@ class DashboardStore { .then(response => response.json()) .then(json => { runInAction(() => { - this.orders_data.data = json.ordercount1; + this.ordersCountDataRaw = json; + resultDataCb(json, 'day', this.orderCountDataMapper, this.orderCountDataFieldMapper, this.onChangeDateGroup); + // this.orders_data.data = json.ordercount1; this.orders_data.loading = false; }); }) diff --git a/src/stores/DatePickerStore.js b/src/stores/DatePickerStore.js index ff7ac74..9735607 100644 --- a/src/stores/DatePickerStore.js +++ b/src/stores/DatePickerStore.js @@ -1,6 +1,8 @@ import {makeAutoObservable} from "mobx"; import moment from "moment"; - +/** + * 管理搜索组件的状态 + */ class DatePickerStore { constructor(rootStore) { @@ -8,6 +10,9 @@ class DatePickerStore { makeAutoObservable(this); } + formValues = {}; + formValuesToSub = {}; + start_date = moment().startOf('week').subtract(7, 'days'); end_date = moment().endOf('week').subtract(7, 'days'); start_date_cp = false; @@ -38,8 +43,14 @@ class DatePickerStore { return [moment(this.start_date).subtract(1, 'year'), moment(this.end_date).subtract(1, 'year')]; } -} + setFormValues(data){ + this.formValues = data; + } + setFormValuesToSub(data){ + this.formValuesToSub = data; + } +} export default DatePickerStore; diff --git a/src/stores/DictData.js b/src/stores/DictData.js new file mode 100644 index 0000000..916d8a5 --- /dev/null +++ b/src/stores/DictData.js @@ -0,0 +1,62 @@ +import { makeAutoObservable, runInAction, toJS } from 'mobx'; +import * as req from '../utils/request'; +import { isEmpty, sortBy, objectMapper } from '../utils/commons'; + +const modelMapper = { + 'operator': { + url: '/service-Analyse2/GetOperatorInfo', + mapper: { + op_id: [{ key: 'key' }, { key: 'value' }], + cn_name: { key: 'label' }, + en_name: { key: 'label_alias' }, + }, + }, + 'country': { + url: '/service-Analyse2/GetCountryInfo', + mapper: { + c_id: [{ key: 'key' }, { key: 'value' }], + cn_name: { key: 'label' }, + en_name: { key: 'label_alias' }, + }, + }, + 'vendor': { + url: '/service-web/QueryData/GetVEIName', + mapper: { + CAV_VEI_SN: [{ key: 'key' }, { key: 'value' }], + VEI2_CompanyBN: { key: 'label' }, + }, + }, + 'creditcardbilltype': { + url: '/service-web/QueryData/GetCreditCardBillType', + mapper: { + cb_billtype: [{ key: 'key' }, { key: 'value' }, { key: 'label' }], + }, + }, +}; + +class DictData { + constructor(appStore) { + this.appStore = appStore; + makeAutoObservable(this); + } + + async fetchDictData(model = '', param={}) { + const mkey = model.toLowerCase(); + this[mkey] = { loading: true, dataSource: [] }; + const json = await req.fetchJSON(modelMapper[mkey].url, param); + if (json.errcode === 0) { + runInAction(() => { + this[mkey].loading = false; + this[mkey].dataSource = objectMapper(json.result, modelMapper[mkey].mapper); + console.log({ loading: false, ...json }, model, 'DictData', toJS(this[mkey])); + }); + } + return this[mkey]; + } + + data = {}; + operator = { loading: false, dataSource: [] }; + vendor = { loading: false, dataSource: [] }; + creditcardbilltype = { loading: false, dataSource: [] }; +} +export default DictData; diff --git a/src/stores/Index.js b/src/stores/Index.js index d7948a2..0d38106 100644 --- a/src/stores/Index.js +++ b/src/stores/Index.js @@ -11,7 +11,8 @@ import WechatStore from "./Wechat"; import WhatsAppStore from "./WhatsApp"; import CustomerServicesStore from "./CustomerServices"; import TradeStore from "./Trade"; - +import KPI from "./KPI"; +import DictData from "./DictData"; class Index { constructor() { this.dashboard_store = new DashboardStore(this); @@ -26,6 +27,8 @@ class Index { this.whatsAppStore = new WhatsAppStore(this); this.customerServicesStore = new CustomerServicesStore(this); this.TradeStore = new TradeStore(this); + this.KPIStore = new KPI(this); + this.DictDataStore = new DictData(this); makeAutoObservable(this); } diff --git a/src/stores/KPI.js b/src/stores/KPI.js new file mode 100644 index 0000000..40e5b69 --- /dev/null +++ b/src/stores/KPI.js @@ -0,0 +1,127 @@ +import { makeAutoObservable, runInAction, toJS } from 'mobx'; +import * as req from '../utils/request'; +import { isEmpty, sortBy, groupBy, cloneDeep, fixTo4Decimals, flush } from '../utils/commons'; +import moment from 'moment'; + +class KPI { + constructor(appStore) { + this.appStore = appStore; + makeAutoObservable(this); + } + + async delByID(ids) { + const data = { 'kpi_ids': ids }; + const json = await req.delJSON('/service-Analyse2/delkpi_multi', data); + return json.errcode === 0; + } + + async saveOrUpdate(tableData) { + const data = { 'kpis': tableData }; + const json = await req.postJSON('/service-Analyse2/setkpi_multi', data); + return json.errcode === 0; + } + + async onSubmit(tableData, { delQueue }) { + const flushData = tableData.filter(row => !isEmpty(row.value) || !isEmpty(row?.kpi_id)); + const postRes = isEmpty(flushData) ? true : await this.saveOrUpdate(flushData); + const delRes = isEmpty(flush(delQueue)) ? true : await this.delByID(delQueue); + return postRes && delRes; + } + + getList(param = {}) { + const _param = { + date_type: 'applyDate', + start_date: '2020-01-01', + end_date: '2024-12-31 23:59:59', + ...param, + object_id: [0, -1, 'ALL'].includes(param?.object_id || 0) ? '' : param.object_id, + }; + this.listLoading = true; + this.pageData = []; + return req.fetchJSON('/service-Analyse2/getkpi', _param).then((json) => { + if (json.errcode === 0) { + runInAction(() => { + this.listLoading = false; + this.originData = json.result; + const yearData = parseKPI(json.result, ['subject', 'object_id']); + console.log(111, yearData, yearData[this.settingYear]); + this.pageData = yearData?.[this.settingYear]?.[this.settingSubject] || []; + }); + } + return this.pageData; + }); + } + + settingYear = moment().year(); + setSettingYear(v) { + this.settingYear = v; + } + + listLoading = false; + setListLoading(v) { + this.listLoading = v; + } + + settingSubject = 'sum_profit'; + setSettingSubject(v) { + this.settingSubject = v; + } + + originData =[]; + pageData = []; +} + +/** + * 把kpi数据按照对象和类型转换格式 + * @param {array} keyArr 转换的字段的顺序, 返回结果的key层级 + * @example + * * parseKPI(json.result, ['object_id', 'subject']); + * // => { 2023: { 114: [{...}, {...}], 216: [...] } } + * * parseKPI(json.result, ['subject', 'object_id']); + * // => { 2023: { in_order_count: [{...}, {...}], sum_profit: [...] } } + */ +export const parseKPI = (kpis, keyArr = []) => { + const result = kpis.map((row) => ({ + ...row, + yearIndex: moment(row.start_date).year(), + monthIndex: moment(row.start_date).month() + 1, + monthRange: [moment(row.start_date).month() + 1, moment(row.end_date).month() + 1], + fullYear: moment(row.start_date).month() === 0 && moment(row.end_date).month() === 11, + })); + const byYear = groupBy(result, (ele) => ele.yearIndex); + const yearData = {}; + const initialPercentKey = new Array(12).fill(1).reduce((r, v, i) => ({ ...r, [`M${i+1}Percent`]: 0 }), {}); + const ret = {}; + const [key0, key1] = keyArr; + Object.keys(byYear).map((_yearVal) => { + const _subjectRet = groupBy(byYear[_yearVal], (ele) => `${ele[key0]}`); + Object.keys(_subjectRet).map((_subject) => { + const subjectObject = groupBy(_subjectRet[_subject], (row) => row[key1]); + const afterGroup = Object.keys(subjectObject).map((oID) => { + const _ByFull = subjectObject[oID].reduce((r, v) => { + (r[String(v.fullYear)] || (r[String(v.fullYear)] = [])).push(v); + return r; + }, {}); + const kpiYear = (_ByFull?.true || []).reduce((r, v) => { + // r.push({ monthIndex: v.monthIndex, yearIndex: v.yearIndex, value: v.value, kpi_id: v.kpi_id }); + return { monthIndex: v.monthIndex, yearIndex: v.yearIndex, value: v.value, kpi_id: v.kpi_id }; + }, {}); + const kpiData = (_ByFull?.false || []).reduce((r, v) => { + r.push({ monthIndex: v.monthIndex, yearIndex: v.yearIndex, value: v.value, kpi_id: v.kpi_id, percentVal: (fixTo4Decimals(v.value/kpiYear.value)*100) }); + return r; + }, []); + const kpiDataMapped = kpiData.reduce((r, v) => ({...r, [`M${v.monthIndex}`]: v }), {}); + const kpiDataFlat = kpiData.reduce((r, v) => ({...r, [`M${v.monthIndex}Val`]: v.value, [`M${v.monthIndex}Percent`]: v.percentVal}), {}); + const { start_date, end_date, kpi_id, value, unit, monthIndex, monthRange, ...objectEle } = subjectObject[oID][0]; + const allKey = !isEmpty(kpiData) ? kpiData.map(ek => ek.kpi_id).join('_') : `${Object.values(kpiYear).join('_')}`; + return { ...cloneDeep(initialPercentKey), ...objectEle, ...kpiDataFlat, kpiData, kpiDataMapped, kpiYear, yearValue: kpiYear?.value || 0, key: allKey }; + }); + ret[_subject] = afterGroup; + return 1; + }); + Object.assign(yearData, { [_yearVal]: ret }); + return _yearVal; + }); + return yearData; +}; +export default KPI; diff --git a/src/stores/OrdersStore.js b/src/stores/OrdersStore.js index f3f942d..50ab2a4 100644 --- a/src/stores/OrdersStore.js +++ b/src/stores/OrdersStore.js @@ -6,6 +6,7 @@ import * as comm from "../utils/commons"; import moment from "moment"; import { NavLink } from "react-router-dom"; import { groupsMappedByCode } from './../libs/ht'; +import { resultDataCb } from '../components/DateGroupRadio/date'; class OrdersStore { constructor(rootStore) { @@ -23,6 +24,7 @@ class OrdersStore { // diff_count_day = 0; //开始日期和结束日期的间隔,用于计算平均数 active_tab_key = "Form"; // 当前切换的标签页 active_tab_key_sub = "detail"; // 当前切换的子维度标签页 + orderCountDataRaw = []; orderCountData = []; // 订单统计数据源 orderCountData_type = []; // 子维度订单统计 orderCountData_Form = []; // 表单类型统计数据源 @@ -30,6 +32,11 @@ class OrdersStore { diff_days1 = 0; // 日期相差天数,用于计算日平均值 diff_days2 = 0; // 日期相差天数,比较数据时使用 + lineChartXGroup = ''; // x轴: 按 日/月/年 + avgLine1 = 0; + orderCountDataMapper = { 'data1': 'ordercount1', data2: 'ordercount2' }; + orderCountDataFieldMapper ={ 'dateKey': 'ApplyDate', 'valueKey': 'orderCount', 'seriesKey': 'WebCode', _f: 'sum' }; + // 选择事业部 group_handleChange(value) { this.groups = value; @@ -40,7 +47,7 @@ class OrdersStore { const date_picker_store = this.rootStore.date_picker_store; const _start_date = moment(date_picker_store.start_date.format(config.DATE_FORMAT)); const _end_date = moment(date_picker_store.end_date.format(config.DATE_FORMAT)); - return _end_date.diff(_start_date, "days") + 1; + return _end_date.diff(_start_date, `${this.lineChartXGroup}s`) + 1; } // 下单日期、确认日期、出发日期 @@ -103,6 +110,31 @@ class OrdersStore { return comm.set_array_index(result); } + /** + * 更新值: orderCountData + * @author LYT + * @returns void + */ + onChangeDateGroup = (value, data, avg1) => { + this.lineChartXGroup = value; + const groupByDate = data.reduce((r, v) => { + (r[v.ApplyDate] || (r[v.ApplyDate] = [])).push(v); + return r; + }, {}); + this.orderCountData = Object.keys(groupByDate) + .reduce((r, _d) => { + const summaryVal = groupByDate[_d].reduce((rows, row) => rows + row.orderCount, 0); + r.push({ ...groupByDate[_d][0], orderCount: summaryVal }); + return r; + }, []) + .map((row) => ({ xField: row.ApplyDate, yField: row.orderCount, seriesField: row.groups })); + this.avgLine1 = avg1; + }; + + parseOrderCount = (orderCountData, dateGroup) => { + resultDataCb(orderCountData, dateGroup, this.orderCountDataMapper, this.orderCountDataFieldMapper, this.onChangeDateGroup); + }; + // 网站订单数量,根据类型 getOrderCount_type(ordertype, ordertype_sub) { this.loading = true; @@ -143,7 +175,9 @@ class OrdersStore { .then(response => response.json()) .then(json => { runInAction(() => { - this.orderCountData = this.format_data_source(json, date_picker_store.start_date, date_picker_store.start_date_cp); + this.orderCountDataRaw = json; + // 第一次得到数据 + this.parseOrderCount(json, 'day'); this.loading = false; }); }) diff --git a/src/stores/Trade.js b/src/stores/Trade.js index 68f3006..e165dae 100644 --- a/src/stores/Trade.js +++ b/src/stores/Trade.js @@ -1,13 +1,7 @@ -import { makeAutoObservable, runInAction } from 'mobx'; +import { makeAutoObservable, runInAction, toJS } from 'mobx'; import * as req from '../utils/request'; -import { isEmpty } from '../utils/commons'; - -/** - * 计算变化值 - */ -const calcRate = (r1, r2) => { - // 的 -}; +import { isEmpty, sortBy, pick } from '../utils/commons'; +import { dataFieldAlias } from './../libs/ht'; class Trade { constructor(rootStore) { @@ -15,30 +9,153 @@ class Trade { makeAutoObservable(this); } - fetchSummaryData() { + /** + * 年度总额 + */ + fetchSummaryData(queryData) { this.summaryData.loading = true; - req.fetchJSON('/service-web/QueryData/GetTradeSummary').then((json) => { + queryData.groupType = 'overview'; + // queryData.groupDateType = 'year'; + this.fetchTradeData(queryData).then((json) => { + if (json.errcode === 0) { + runInAction(() => { + const summary = json.result1?.[0] || {}; + const summaryData = { + loading: false, + dataSource: [ + { + title: '成团', + value: summary?.ConfirmOrder, + // VSrate: summary?.ConfirmOrderrate, + KPIrate: summary?.[dataFieldAlias.ConfirmOrder.nestkey.p], + // hasKPI: !isEmpty(summary?.[dataFieldAlias.ConfirmOrder.nestkey.p]), + hasKPI: false + }, + { title: '毛利', value: summary?.SumML, KPIrate: summary?.[dataFieldAlias.SumML.nestkey.p], hasKPI: false }, + { title: '完成率', value: `${summary?.[dataFieldAlias.SumML.nestkey.p] || ''}%`, hasKPI: false }, + { + title: '人数', + value: summary?.SumPersonNum, + // VSrate: summary?.SumPersonNumrate, + // KPIrate: summary?.[dataFieldAlias.SumPersonNum.nestkey.p], + hasKPI: false, // // !isEmpty(summary?.[dataFieldAlias.SumPersonNum.nestkey.p]), + }, + ], + }; + this.summaryData = summaryData; + const kpi = { label: '', value: summary.MLKPIvalue }; + this.summaryData.kpi = kpi; + }); + } + }); + } + + /** + * 时间轴 + */ + fetchTradeDataByDate(queryData) { + this.timeData.loading = true; + queryData = queryData || this.searchPayloadHome; + Object.assign(queryData, { groupType: 'overview', groupDateType: this.timeLineKey }); + this.fetchTradeData(queryData).then((json) => { + if (json.errcode === 0) { + runInAction(() => { + const data = json.result1; + // 标注KPI + + this.timeData.loading = false; + this.timeData.dataSource = data; + }); + } + }); + } + + /** + * 事业部年度 + */ + fetchTradeDataByBU(queryData) { + this.BuData.loading = true; + Object.assign(queryData, { groupType: 'bu', groupDateType: 'year' }); + this.fetchTradeData(queryData).then((json) => { if (json.errcode === 0) { runInAction(() => { - this.summaryData = { loading: false, ...json }; + const data = json.result1; + // 标注KPI + + this.BuData.loading = false; + this.BuData.dataSource = data; }); } }); } - fetchTradeData() { - this.yearlyData.loading = true; - req.fetchJSON('/service-web/QueryData/GetYJ').then((json) => { + /** + * 业务区域, 按月 + */ + fetchTradeDataByMonth(queryData) { + this.sideData.loading = true; + Object.assign(queryData, { groupType: 'bizarea', groupDateType: 'month' }); + this.fetchTradeData(queryData).then((json) => { if (json.errcode === 0) { runInAction(() => { - this.yearlyData = { loading: false, ...json }; + const sortResult = json.result1.sort(sortBy('groupDateVal')); + const groupsData = sortResult.reduce((r, v) => { + if (v.groupsLabel ) { // && ['91001', '91006'].includes(v.groupsKey) + (r[v.groupsLabel] || (r[v.groupsLabel] = [])).push(v); + } + return r; + }, {}); + this.sideData.loading = false; + this.sideData.dataSource = groupsData; + this.sideData.monthData = sortResult; }); } }); } - summaryData = { loading: false }; - yearlyData = { loading: false }; + /** + * TOP + */ + fetchTradeDataByType(orderType, queryData) { + this.topData[orderType] = { loading: true, dataSource: [], originData: [] }; + Object.assign(queryData, { groupType: orderType, groupDateType: 'year' }); + this.fetchTradeData(queryData).then((json) => { + if (json.errcode === 0) { + runInAction(() => { + this.topData[orderType].loading = false; + this.topData[orderType].dataSource = json.result1; + }); + } + }); + } + + /** + * 获取业绩数据 + */ + async fetchTradeData(queryData) { + const json = await req.fetchJSON('/service-Analyse2/GetTradeProcess', queryData); + if (json.errcode === 0) { + return json; + } + return null; + } + + setStateSearch(body) { + this.searchPayloadHome = body; + } + + timeLineKey = 'week'; + setTimeLineKey(v) { + this.timeLineKey = v; + } + + summaryData = { loading: false, dataSource: [], kpi: {}, }; + timeData = { loading: false, dataSource: [] }; + BuData = { loading: false, dataSource: [] }; + sideData = { loading: false, dataSource: {}, monthData: [] }; + dataForSort = {}; + topData = {}; + searchPayloadHome = {}; } export default Trade; diff --git a/src/utils/commons.js b/src/utils/commons.js index 14c35c5..6a9adff 100644 --- a/src/utils/commons.js +++ b/src/utils/commons.js @@ -275,3 +275,234 @@ export function set_array_index(result) { } return result_array; } + +/** + * 排序 + */ +export const sortBy = (key) => { + return (a, b) => (a[key] > b[key]) ? 1 : ((b[key] > a[key]) ? -1 : 0); +}; + +/** + * 合并Object, 递归地 + */ +export function merge(...objects) { + const isDeep = objects.some(obj => obj !== null && typeof obj === 'object'); + + const result = objects[0] ?? {}; + + for (let i = 1; i < objects.length; i++) { + const obj = objects[i]; + + if (!obj) continue; + + Object.keys(obj).forEach(key => { + const val = obj[key]; + + if (isDeep) { + if (Array.isArray(val)) { + result[key] = [...result[key] || [], ...val]; + } else if (typeof val === 'object') { + result[key] = merge(result[key], val); + } else { + result[key] = val; + } + } else { + result[key] = typeof val === 'boolean' ? val : result[key]; + } + }); + } + + return result; +} + +/** + * 数组分组 + * - 相当于 lodash 的 _.groupBy + * @see https://www.lodashjs.com/docs/lodash.groupBy#_groupbycollection-iteratee_identity + */ +export function groupBy(array, callback) { + return array.reduce((groups, item) => { + const key = callback(item); + + if (!groups[key]) { + groups[key] = []; + } + + groups[key].push(item); + return groups; + }, {}); +} + +/** + * 创建一个从 object 中选中的属性的对象。 + * @param {*} object + * @param {array} keys + */ +export function pick(object, keys) { + return keys.reduce((obj, key) => { + if (object && Object.prototype.hasOwnProperty.call(object, key)) { + obj[key] = object[key]; + } + return obj; + }, {}); +} + +/** + * 深拷贝 + */ +export function cloneDeep(value) { + if (typeof value !== 'object' || value === null) { + return value; + } + + const result = Array.isArray(value) ? [] : {}; + + for (const key in value) { + if (Object.prototype.hasOwnProperty.call(value, key)) { + result[key] = cloneDeep(value[key]); + } + } + + return result; +} + +/** + * 向零四舍五入, 固定精度设置 + */ +function curriedFix(precision = 0) { + return function(number) { + // Shift number by precision places + const shift = Math.pow(10, precision); + const shiftedNumber = number * shift; + + // Round to nearest integer + const roundedNumber = Math.round(shiftedNumber); + + // Shift back decimal place + return roundedNumber / shift; + }; +} +/** + * 向零四舍五入, 保留2位小数 + */ +export const fixTo2Decimals = curriedFix(2); +/** + * 向零四舍五入, 保留4位小数 + */ +export const fixTo4Decimals = curriedFix(4); +export const fixToInt = curriedFix(0); + +/** + * 映射 + * @example + * const keyMap = { + a: [{key: 'a1'}, {key: 'a2', transform: v => v * 2}], + b: {key: 'b1'} + }; + const result = objectMapper({a: 1, b: 3}, keyMap); + // result = {a1: 1, a2: 2, b1: 3} + * + */ +export function objectMapper(input, keyMap) { + // Loop through array mapping + if (Array.isArray(input)) { + return input.map((obj) => objectMapper(obj, keyMap)); + } + + if (typeof input === 'object') { + const mappedObj = {}; + + Object.keys(input).forEach((key) => { + // Keep original keys not in keyMap + if (!keyMap[key]) { + mappedObj[key] = input[key]; + } + // Handle array of maps + if (Array.isArray(keyMap[key])) { + keyMap[key].forEach((map) => { + let value = input[key]; + if (map.transform) value = map.transform(value); + mappedObj[map.key] = value; + }); + + // Handle single map + } else { + const map = keyMap[key]; + if (map) { + let value = input[key]; + if (map.transform) value = map.transform(value); + mappedObj[map.key || key] = value; + } + } + }); + + return mappedObj; + } + + return input; +} + +/** + * 创建一个对应于对象路径的值数组 + */ +export function at(obj, path) { + let result; + if (Array.isArray(obj)) { + // array case + const indexes = path.split('.').map((i) => parseInt(i)); + result = []; + for (let i = 0; i < indexes.length; i++) { + result.push(obj[indexes[i]]); + } + } else { + // object case + const indexes = path.split('.').map((i) => i); + result = [obj]; + for (let i = 0; i < indexes.length; i++) { + result = [result[0][indexes[i]]]; + } + } + return result; +} +/** + * 删除 null/undefined + */ +export function flush(collection) { + let result, len, i; + if (!collection) { + return undefined; + } + if (Array.isArray(collection)) { + result = []; + len = collection.length; + for (i = 0; i < len; i++) { + const elem = collection[i]; + if (elem != null) { + result.push(elem); + } + } + return result; + } + if (typeof collection === 'object') { + result = {}; + const keys = Object.keys(collection); + len = keys.length; + for (i = 0; i < len; i++) { + const key = keys[i]; + const value = collection[key]; + if (value != null) { + result[key] = value; + } + } + return result; + } + return undefined; +} + +/** + * 千分位 格式化数字 + */ +export const numberFormatter = (number) => { + return new Intl.NumberFormat().format(number); +}; diff --git a/src/utils/request.js b/src/utils/request.js index 663f389..d954743 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -51,7 +51,8 @@ export function postForm(url, data) { } export function postJSON(url, obj) { - return fetch(url, { + const host = /^https?:\/\//i.test(url) ? '': HT_HOST; + return fetch(`${host}${url}`, { method: 'POST', body: JSON.stringify(obj), headers: { @@ -77,3 +78,18 @@ export function postStream(url, obj) { throw error; }); } + +export function delJSON(url, obj) { + const host = /^https?:\/\//i.test(url) ? '': HT_HOST; + return fetch(`${host}${url}`, { + method: 'DELETE', + body: JSON.stringify(obj), + headers: { + 'Content-type': 'application/json; charset=UTF-8' + } + }).then(checkStatus) + .then(response => response.json()) + .catch(error => { + throw error; + }); +} diff --git a/src/views/Home.jsx b/src/views/Home.jsx index 635e274..07a9b72 100644 --- a/src/views/Home.jsx +++ b/src/views/Home.jsx @@ -1,77 +1,239 @@ -import { useContext, useEffect } from 'react'; +import { useContext, useEffect, useState } from 'react'; import { observer } from 'mobx-react'; -import { Row, Col, Spin, Card, Statistic, Progress } from 'antd'; +import { Row, Col, Spin, Space, Radio } from 'antd'; +import { CheckCircleTwoTone, MoneyCollectTwoTone, FlagTwoTone, SmileTwoTone, } from '@ant-design/icons'; import { stores_Context } from '../config'; import { useNavigate } from 'react-router-dom'; -import { SlackOutlined, SketchOutlined, AntCloudOutlined, RedditOutlined, GithubOutlined, ArrowUpOutlined, ArrowDownOutlined } from '@ant-design/icons'; -import { isEmpty } from './../utils/commons'; +import StatisticCard from '../components/StatisticCard'; +import Bullet from '../components/BulletWithSort'; +import Waterfall from '../components/Waterfall'; +import DataFieldRadio from '../components/DataFieldRadio'; +import { datePartOptions } from './../components/DateGroupRadio/date'; +import SearchForm from './../components/search/SearchForm'; +import { empty, cloneDeep, isEmpty } from './../utils/commons'; +import { dataFieldAlias } from './../libs/ht'; +import { Line } from '@ant-design/charts'; import './home.css'; -const Home = () => { - const navigate = useNavigate(); - const { TradeStore } = useContext(stores_Context); - const { yearlyData, summaryData } = TradeStore; +const topSeries = [ + { key: 'country', label: '国籍' }, + { key: 'dept', label: '小组' }, + { key: 'operator', label: '顾问' }, + { key: 'destination', label: '目的地' }, + // { key: 'GuestGroupType', label: '客群类别' }, +]; + +// const iconSets = [CheckCircleTwoTone, , , , ,,]; +const iconSets = [CheckCircleTwoTone, MoneyCollectTwoTone, FlagTwoTone, SmileTwoTone]; + +export default observer(() => { + // const navigate = useNavigate(); + const { TradeStore, date_picker_store: searchFormStore } = useContext(stores_Context); + const { sideData, summaryData, BuData, topData, timeData, timeLineKey } = TradeStore; + const { formValues, } = searchFormStore; useEffect(() => { - if (isEmpty(summaryData?.result1)) { - TradeStore.fetchSummaryData(); - } - if (isEmpty(yearlyData?.result1)) { - TradeStore.fetchTradeData(); + if (empty(summaryData.dataSource)) { + // pageRefresh(); } return () => {}; }, []); - const StatisticCard = (props) => { - const valueStyle = { color: props.VSrate < 0 ? '#cf1322' : '#3f8600' }; - const VSIcon = () => (props.VSrate < 0 ? : ); - return ( - - - - {props.VSrate} - % - - ) - } - {...props} - /> - {props.showProgress !== false && `${props.KPIrate}%`} />} - - ); + const pageRefresh = (queryData) => { + TradeStore.fetchSummaryData(queryData); + TradeStore.fetchTradeDataByDate(queryData); + TradeStore.fetchTradeDataByBU(queryData); + TradeStore.fetchTradeDataByMonth(queryData); + for (const iterator of topSeries) { + TradeStore.fetchTradeDataByType(iterator.key, queryData); + } + }; + + const layoutProps = { + gutter: { xs: 8, sm: 8, lg: 16 }, + lg: { span: 6 }, + sm: { span: 12 }, + xs: { span: 24 }, + }; + + const layoutProps3 = { + gutter: { xs: 8, sm: 8, lg: 16 }, + lg: { span: 8 }, + sm: { span: 12 }, + xs: { span: 24 }, }; + const [valueKey, setValueKey] = useState('SumML'); + const [BulletConfig, setBulletConfig] = useState({ + measureField: 'SumML', // + rangeField: 'SumMLRange', // + targetField: 'MLKPIvalue', // + xField: 'groupsLabel', + }); + const handleChangeValueKey = (key) => { + setValueKey(key); + setBulletConfig({ + measureField: key, + rangeField: `${key}Range`, + // targetField: `${key}KPI`, + targetField: dataFieldAlias[key].nestkey.v, + xField: 'groupsLabel', + }); + }; + + const WaterfallConfig = { + xField: 'groupDateVal', + yField: 'SumML', + seriesField: 'groupsLabel', + meta: { + groupDateVal: { + alias: '月份', + // type: 'cat', + }, + }, + label: { + formatter: (v) => summaryData.kpi.value === 0 ? (dataFieldAlias.SumML?.formatter(v.SumML) || v.SumML) : ((v.SumML / summaryData.kpi.value) * 100).toFixed(2) + '%', + }, + }; + + const BUConfig = { + measureField: 'SumML', // + rangeField: 'SumMLRange', // + targetField: 'MLKPIvalue', // + xField: 'groupsLabel', + layout: 'vertical', + }; + + const lineConfigSet = { + // data: orders_data.data, + padding: 'auto', + xField: 'groupDateVal', + yField: 'SumML', + seriesField: 'groupsLabel', + xAxis: { + type: 'cat', + }, + smooth: true, + point: { + size: 4, + shape: "cicle", + }, + legend: false, + meta: { ...cloneDeep(dataFieldAlias) + // [extProps.yField]: { + // alias: dataFieldAlias[extProps.yField]?.alias || extProps.yField, + // formatter: (v) => dataFieldAlias[extProps.yField]?.formatter(v) || v, + // max: Math.ceil(yMax / 0.95), + // }, + }, + }; + const [timeDataField, setTimeDataField] = useState('SumML'); + const [lineConfig, setLineConfig] = useState(cloneDeep(lineConfigSet)); + const handleChangetimeDataField = (key) => { + setTimeDataField(key); + setLineConfig({ + ...lineConfig, + yField: key, + tooltip: { + customItems: (originalItems) => { + // process originalItems, + const items = originalItems.map((ele) => ({ ...ele, name: dataFieldAlias[key]?.alias || key })); + return items; + }, + }, + }); + }; + const [dateField, setDateField] = useState(timeLineKey); + const handleChangeDateType = ({target: {value}}) => { + setDateField(value); + TradeStore.setTimeLineKey(value); + if (!isEmpty(TradeStore.searchPayloadHome)) { + TradeStore.fetchTradeDataByDate(); + } + }; return ( <> -

年度业绩

+ + {/* style={{ margin: '-16px -8px', padding: 0 }} */} + + { + TradeStore.setStateSearch(obj); + pageRefresh(obj); + }} + /> + +
+ +

年度业绩

+
- - - - - - - - - - - - + + {summaryData.dataSource.map((item, i) => ( + + + + ))} + + +
+
+ +

走势

+ + +
+ + + +
+
+

市场进度

+ + + + +

{`各事业部总业绩`}

+ {Object.keys(sideData.dataSource).map((key) => ( + + +

{`${key}每月业绩`}

+ + ))}
- + +

TOP

+
+ +
+
+ + {topSeries.map((item) => ( + + +

{item.label}

+ +
+ + ))} +
); -}; - -export default observer(Home); +}); diff --git a/src/views/KPI.jsx b/src/views/KPI.jsx new file mode 100644 index 0000000..288e041 --- /dev/null +++ b/src/views/KPI.jsx @@ -0,0 +1,94 @@ +import { useContext, useEffect, useState } from 'react'; +import { stores_Context } from './../config'; +import { observer } from 'mobx-react'; +import { Row, Col, Tabs, Spin } from 'antd'; +import { flush, objectMapper } from './../utils/commons'; +import { KPIObjects } from './../libs/ht'; +import ObjectPanel from '../components/kpi/ObjectPanel'; +import OverviewPanel from './../components/kpi/OverviewPanel'; +import './kpi.css'; + +const objectComponents = { + 'overview': OverviewPanel, + 'bu': ObjectPanel, + 'dept': ObjectPanel, + 'du': ObjectPanel, + 'operator': ObjectPanel, + 'destination': ObjectPanel, + 'country': ObjectPanel, +}; +const objectFilterKey = { + 'bu': 'HTBusinessUnits', + 'dept': 'DepartmentList', + // 'du': 'du', + // 'operator': 'operator', + // 'destination': 'destination', + // 'country': 'country', +}; +export default observer((props) => { + const { KPIStore, DictDataStore, date_picker_store: searchFormStore } = useContext(stores_Context); + // useEffect(() => { + // return () => {}; + // }, []); + const [curObject, setCurObject] = useState('overview'); + const onObjectChange = (object) => { + setCurObject(object); + setRetObjects([]); + }; + useEffect(() => { + onSearchSubmit(searchFormStore.formValuesToSub); + + return () => {}; + }, [curObject]); + + const [retObjects, setRetObjects] = useState([]); + const onSearchSubmit = (obj, formVal={}) => { + const getkpiParam = objectMapper(obj, { + DateType: { key: 'date_type' }, + Date1: { key: 'start_date' }, + Date2: { key: 'end_date' }, + HTBusinessUnits: { key: 'object_id' }, + DepartmentList: { key: 'object_id' }, + businessUnits: { key: 'object_id' }, + WebCode: { key: 'object_id' }, + operator: { key: 'object_id' }, + country: { key: 'object_id' }, + }); + Object.assign(getkpiParam, { object: curObject }); + KPIStore.setSettingYear(formVal?.year?.year() || KPIStore.settingYear); + console.log('invoke on search', obj, formVal, getkpiParam); + KPIStore.getList(getkpiParam).then((data) => { + // setDataSource(data); + if (objectFilterKey?.[curObject]) { + const selectItem = searchFormStore.formValues[objectFilterKey[curObject]]; + if (selectItem) { + selectItem.value = selectItem.key; + } + setRetObjects(flush([selectItem])); + } + }); + }; + return ( + <> + + + { + const ObjectItemPanel = objectComponents[ele.key]; + return { + ...ele, + children: ( + + + + ), + }; + })} + /> + + + + ); +}); diff --git a/src/views/Orders.jsx b/src/views/Orders.jsx index 7442d8d..50588cf 100644 --- a/src/views/Orders.jsx +++ b/src/views/Orders.jsx @@ -1,5 +1,5 @@ import React, { Component } from "react"; -import { Row, Col, Button, Tabs, Table, Divider, Select } from "antd"; +import { Row, Col, Button, Tabs, Table, Divider, Select, Radio } from "antd"; import { ContainerOutlined, CarryOutOutlined, BlockOutlined, SmileOutlined, TagsOutlined, GlobalOutlined, SearchOutlined, FullscreenOutlined, DingtalkOutlined } from "@ant-design/icons"; import { stores_Context } from "../config"; import { Line, Pie } from "@ant-design/charts"; @@ -12,7 +12,7 @@ import * as config from "../config"; import { NavLink } from "react-router-dom"; import * as comm from "../utils/commons"; import { utils, writeFileXLSX } from "xlsx"; - +import DateGroupRadio from '../components/DateGroupRadio'; class Orders extends Component { static contextType = stores_Context; @@ -110,7 +110,7 @@ class Orders extends Component { has_same_type = false; // 数组1在数组2中相同的类型 for (const item2 of data.ordercount2) { - if (item.OrderType == item2.OrderType) { + if (item.OrderType === item2.OrderType) { has_same_type = true; result.dataSource.push({ key: item.key, @@ -126,7 +126,7 @@ class Orders extends Component { } } // 数组1中不在数组2的类型 - if (has_same_type == false) { + if (has_same_type === false) { result.dataSource.push({ key: item.key, OrderType: item.OrderType, @@ -144,11 +144,11 @@ class Orders extends Component { for (const item2 of data.ordercount2) { has_same_type = false; for (const item of data.ordercount1) { - if (item.OrderType == item2.OrderType) { + if (item.OrderType === item2.OrderType) { has_same_type = true; } } - if (has_same_type == false) { + if (has_same_type === false) { result.dataSource.push({ key: item2.key, OrderType: item2.OrderType, @@ -222,7 +222,7 @@ class Orders extends Component { const { orders_store } = this.context; const table_data = orders_store.orderCountData_Form ? this.format_data(orders_store.orderCountData_Form) : []; const data_source = orders_store.orderCountData ? orders_store.orderCountData : []; - const avg_line_y = data_source.length ? Math.round(data_source.reduce((a, b) => a + b.yField, 0) / orders_store.diff_count_day) : 0; // 平均值,显示一条平均线 + const avg_line_y = Math.round(orders_store.avgLine1); const pie_data = comm.empty(orders_store.orderCountData_Form) ? [] : orders_store.orderCountData_Form.ordercount1; // 饼图的显示 const pie_data2 = comm.empty(orders_store.orderCountData_Form) ? [] : orders_store.orderCountData_Form.ordercount2; @@ -232,9 +232,9 @@ class Orders extends Component { xField: "xField", yField: "yField", seriesField: "seriesField", - xAxis: { - type: "timeCat", - }, + // xAxis: { + // type: "timeCat", + // }, point: { size: 4, shape: "cicle", @@ -270,12 +270,21 @@ class Orders extends Component { }, }, tooltip: { - // customContent: (title, items) => { - // const data = items[0]?.data || {}; - // return `
${title}
${data.seriesField} ${data.yField}
`; - // } + customItems: (originalItems) => { + // process originalItems, + return originalItems.map(ele => ({...ele, name: ele.data?.seriesKey || ele.data?.xField})); + }, title: (title, datum) => { - return title + " " + comm.getWeek(datum.xField); // 显示周几 + let ret = title; + switch (orders_store.lineChartXGroup) { + case 'day': + ret = `${title} ${comm.getWeek(datum.xField)}`; // 显示周几 + break; + + default: + break; + } + return ret; }, }, smooth: true, @@ -346,7 +355,17 @@ class Orders extends Component { - + + + + diff --git a/src/views/kpi.css b/src/views/kpi.css new file mode 100644 index 0000000..ac1d799 --- /dev/null +++ b/src/views/kpi.css @@ -0,0 +1,17 @@ +.ant-tabs.ant-tabs-card > .ant-tabs-nav { + margin-bottom: 0; +} +.ant-tabs.ant-tabs-left .ant-tabs-content-holder{ + padding: 0; +} +.ant-tabs-content.ant-tabs-content-left .ant-tabs-tabpane.ant-tabs-tabpane-active{ + padding-left: 0; +} +.ant-tabs-content.ant-tabs-content-left .ant-tabs-tabpane .ant-pro-table .ant-pro-card-body{ + padding: 0; +} + +.ant-form-item-control-input .ant-input-affix-wrapper{ + padding-left: 4px; + padding-right: 4px; +}