diff --git a/package-lock.json b/package-lock.json index 2080b6635..69d6155f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,35 +1,40 @@ { - "name": "educoder", - "version": "0.1.0", + "name": "forge", + "version": "3.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@ant-design/colors": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-3.2.2.tgz", - "integrity": "sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==", + "resolved": "https://registry.npm.taobao.org/@ant-design/colors/download/@ant-design/colors-3.2.2.tgz?cache=0&sync_timestamp=1612935637470&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40ant-design%2Fcolors%2Fdownload%2F%40ant-design%2Fcolors-3.2.2.tgz", + "integrity": "sha1-WtQ9YZ6RHzSI66wwPWBuZqhCOQM=", "requires": { "tinycolor2": "^1.4.1" } }, "@ant-design/create-react-context": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@ant-design/create-react-context/-/create-react-context-0.2.5.tgz", - "integrity": "sha512-1rMAa4qgP2lfl/QBH9i78+Gjxtj9FTMpMyDGZsEBW5Kih72EuUo9958mV8PgpRkh4uwPSQ7vVZWXeyNZXVAFDg==", + "resolved": "https://registry.npm.taobao.org/@ant-design/create-react-context/download/@ant-design/create-react-context-0.2.5.tgz", + "integrity": "sha1-9fWpFjtHcgl3EoNzl60w4i55+Fg=", "requires": { "gud": "^1.0.0", "warning": "^4.0.3" } }, + "@ant-design/css-animation": { + "version": "1.7.3", + "resolved": "https://registry.npm.taobao.org/@ant-design/css-animation/download/@ant-design/css-animation-1.7.3.tgz?cache=0&sync_timestamp=1596106749762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40ant-design%2Fcss-animation%2Fdownload%2F%40ant-design%2Fcss-animation-1.7.3.tgz", + "integrity": "sha1-YKHJcAFOhrKPlAUQ1p5QPkKPETY=" + }, "@ant-design/icons": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-2.1.1.tgz", - "integrity": "sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w==" + "resolved": "https://registry.npm.taobao.org/@ant-design/icons/download/@ant-design/icons-2.1.1.tgz", + "integrity": "sha1-e5wI3/1PXUHbZn2dvl4BB9C9mko=" }, "@ant-design/icons-react": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@ant-design/icons-react/-/icons-react-2.0.1.tgz", - "integrity": "sha512-r1QfoltMuruJZqdiKcbPim3d8LNsVPB733U0gZEUSxBLuqilwsW28K2rCTWSMTjmFX7Mfpf+v/wdiFe/XCqThw==", + "resolved": "https://registry.npm.taobao.org/@ant-design/icons-react/download/@ant-design/icons-react-2.0.1.tgz", + "integrity": "sha1-F6JRNXGrMXrKKSfljOol3THlNvs=", "requires": { "@ant-design/colors": "^3.1.0", "babel-runtime": "^6.26.0" @@ -446,8 +451,8 @@ }, "@types/react-slick": { "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.4.tgz", - "integrity": "sha512-vXoIy4GUfB7/YgqubR4H7RALo+pRdMYCeLgWwV3MPwl5pggTlEkFBTF19R7u+LJc85uMqC7RfsbkqPLMQ4ab+A==", + "resolved": "https://registry.npm.taobao.org/@types/react-slick/download/@types/react-slick-0.23.4.tgz", + "integrity": "sha1-yX4qnn49GTPGhZO46CdS+rHozlM=", "requires": { "@types/react": "*" } @@ -863,9 +868,9 @@ } }, "antd": { - "version": "3.26.16", - "resolved": "https://registry.npmjs.org/antd/-/antd-3.26.16.tgz", - "integrity": "sha512-EYRwlEf8FCPCVRk5yDcgjSZOC0exu+m75SwlSQU+Mh17f9wGhLeL2/DV7/Sra1r+BZlfiahFdkgrLY7UgMMBEQ==", + "version": "3.26.20", + "resolved": "https://registry.nlark.com/antd/download/antd-3.26.20.tgz", + "integrity": "sha1-8/Vw76qllQoUSULyHrKqqgiOlAc=", "requires": { "@ant-design/create-react-context": "^0.2.4", "@ant-design/icons": "~2.1.1", @@ -925,16 +930,16 @@ "dependencies": { "raf": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "resolved": "https://registry.npm.taobao.org/raf/download/raf-3.4.1.tgz", + "integrity": "sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk=", "requires": { "performance-now": "^2.1.0" } }, "rc-pagination": { - "version": "1.20.14", - "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-1.20.14.tgz", - "integrity": "sha512-sNKwbFrxiqATqcIIShfrFs8BT03n4UUwTAMYae+JhHTmILQmXdvimEnZbVuWcno6G02DAJcLrFpmkn1h2tmEJw==", + "version": "1.20.15", + "resolved": "https://registry.npm.taobao.org/rc-pagination/download/rc-pagination-1.20.15.tgz", + "integrity": "sha1-zLTNDpvU5H9y8p6kMsA1C/ez2Ac=", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.6", @@ -944,8 +949,8 @@ }, "rc-rate": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.5.1.tgz", - "integrity": "sha512-3iJkNJT8xlHklPCdeZtUZmJmRVUbr6AHRlfSsztfYTXVlHrv2TcPn3XkHsH+12j812WVB7gvilS2j3+ffjUHXg==", + "resolved": "https://registry.npm.taobao.org/rc-rate/download/rc-rate-2.5.1.tgz?cache=0&sync_timestamp=1605573559401&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-rate%2Fdownload%2Frc-rate-2.5.1.tgz", + "integrity": "sha1-Vfxf0j6p3MciULmoiYA0efSEKWE=", "requires": { "classnames": "^2.2.5", "prop-types": "^15.5.8", @@ -955,8 +960,8 @@ }, "rc-select": { "version": "9.2.3", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-9.2.3.tgz", - "integrity": "sha512-WhswxOMWiNnkXRbxyrj0kiIvyCfo/BaRPaYbsDetSIAU2yEDwKHF798blCP5u86KLOBKBvtxWLFCkSsQw1so5w==", + "resolved": "https://registry.nlark.com/rc-select/download/rc-select-9.2.3.tgz?cache=0&sync_timestamp=1618886345948&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frc-select%2Fdownload%2Frc-select-9.2.3.tgz", + "integrity": "sha1-ZDQOLW72TovDz8b0aP/ShiVYmsI=", "requires": { "babel-runtime": "^6.23.0", "classnames": "2.x", @@ -974,8 +979,8 @@ }, "rc-tree": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-2.1.4.tgz", - "integrity": "sha512-Xey794Iavgs8YldFlXcZLOhfcIhlX5Oz/yfKufknBXf2AlZCOkc7aHqSM9uTF7fBPtTGPhPxNEfOqHfY7b7xng==", + "resolved": "https://registry.npm.taobao.org/rc-tree/download/rc-tree-2.1.4.tgz?cache=0&sync_timestamp=1615350038621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-tree%2Fdownload%2Frc-tree-2.1.4.tgz", + "integrity": "sha1-73WfPnmaIbQ8Hs+ceU6hwU5wtZs=", "requires": { "@ant-design/create-react-context": "^0.2.4", "classnames": "2.x", @@ -985,6 +990,18 @@ "react-lifecycles-compat": "^3.0.4", "warning": "^4.0.3" } + }, + "react-slick": { + "version": "0.25.2", + "resolved": "https://registry.nlark.com/react-slick/download/react-slick-0.25.2.tgz", + "integrity": "sha1-VjMbZ9R9i8/i3OtqyrHI/VvR9rw=", + "requires": { + "classnames": "^2.2.5", + "enquire.js": "^2.1.6", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + } } } }, @@ -1083,8 +1100,8 @@ }, "array-tree-filter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", - "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + "resolved": "https://registry.npm.taobao.org/array-tree-filter/download/array-tree-filter-2.1.0.tgz", + "integrity": "sha1-hzrAD+yDdJ8lWsjdCDgUtPYykZA=" }, "array-union": { "version": "1.0.2", @@ -1256,7 +1273,7 @@ }, "babel-cli": { "version": "6.26.0", - "resolved": "https://registry.npm.taobao.org/babel-cli/download/babel-cli-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", "dev": true, "requires": { @@ -1279,7 +1296,7 @@ "dependencies": { "chokidar": { "version": "1.7.0", - "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-1.7.0.tgz?cache=0&sync_timestamp=1602585438968&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-1.7.0.tgz", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "optional": true, @@ -1297,7 +1314,7 @@ }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } @@ -1396,7 +1413,7 @@ }, "babel-helper-bindify-decorators": { "version": "6.24.1", - "resolved": "https://registry.npm.taobao.org/babel-helper-bindify-decorators/download/babel-helper-bindify-decorators-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { @@ -1459,7 +1476,7 @@ }, "babel-helper-explode-class": { "version": "6.24.1", - "resolved": "https://registry.npm.taobao.org/babel-helper-explode-class/download/babel-helper-explode-class-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { @@ -1659,7 +1676,7 @@ }, "babel-plugin-syntax-async-generators": { "version": "6.13.0", - "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-async-generators/download/babel-plugin-syntax-async-generators-6.13.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", "dev": true }, @@ -1670,7 +1687,7 @@ }, "babel-plugin-syntax-decorators": { "version": "6.13.0", - "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-decorators/download/babel-plugin-syntax-decorators-6.13.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", "dev": true }, @@ -1706,7 +1723,7 @@ }, "babel-plugin-transform-async-generator-functions": { "version": "6.24.1", - "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-async-generator-functions/download/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { @@ -1738,7 +1755,7 @@ }, "babel-plugin-transform-decorators": { "version": "6.24.1", - "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-decorators/download/babel-plugin-transform-decorators-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { @@ -2043,7 +2060,7 @@ }, "babel-plugin-transform-runtime": { "version": "6.23.0", - "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-runtime/download/babel-plugin-transform-runtime-6.23.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", "requires": { "babel-runtime": "^6.22.0" @@ -2060,9 +2077,8 @@ }, "babel-polyfill": { "version": "6.26.0", - "resolved": "https://registry.npm.taobao.org/babel-polyfill/download/babel-polyfill-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, "requires": { "babel-runtime": "^6.26.0", "core-js": "^2.5.0", @@ -2071,9 +2087,8 @@ "dependencies": { "regenerator-runtime": { "version": "0.10.5", - "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.10.5.tgz?cache=0&sync_timestamp=1595456367497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" } } }, @@ -2116,7 +2131,7 @@ }, "babel-preset-es2015": { "version": "6.24.1", - "resolved": "https://registry.npm.taobao.org/babel-preset-es2015/download/babel-preset-es2015-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { @@ -2164,7 +2179,7 @@ }, "babel-preset-react": { "version": "6.24.1", - "resolved": "https://registry.npm.taobao.org/babel-preset-react/download/babel-preset-react-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", "requires": { "babel-plugin-syntax-jsx": "^6.3.13", @@ -2197,7 +2212,7 @@ }, "babel-preset-stage-2": { "version": "6.24.1", - "resolved": "https://registry.npm.taobao.org/babel-preset-stage-2/download/babel-preset-stage-2-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { @@ -2209,7 +2224,7 @@ }, "babel-preset-stage-3": { "version": "6.24.1", - "resolved": "https://registry.npm.taobao.org/babel-preset-stage-3/download/babel-preset-stage-3-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { @@ -2362,6 +2377,12 @@ } } }, + "base16": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/base16/download/base16-1.0.0.tgz", + "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=", + "dev": true + }, "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", @@ -3486,7 +3507,7 @@ }, "code-prettify": { "version": "0.1.0", - "resolved": "https://registry.npm.taobao.org/code-prettify/download/code-prettify-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/code-prettify/-/code-prettify-0.1.0.tgz", "integrity": "sha1-RocMyMGlDQm61TmzOpg9vUqjSx4=" }, "codemirror": { @@ -3760,8 +3781,8 @@ }, "copy-to-clipboard": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "resolved": "https://registry.npm.taobao.org/copy-to-clipboard/download/copy-to-clipboard-3.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-to-clipboard%2Fdownload%2Fcopy-to-clipboard-3.3.1.tgz", + "integrity": "sha1-EVqhqZmP+rYZb5MHatbaO5E2Yq4=", "requires": { "toggle-selection": "^1.0.6" } @@ -3854,6 +3875,23 @@ "warning": "^4.0.3" } }, + "cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.nlark.com/cross-fetch/download/cross-fetch-3.1.4.tgz", + "integrity": "sha1-lyPzo6JHv4uJA586OAqSROj6Lzk=", + "dev": true, + "requires": { + "node-fetch": "2.6.1" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.nlark.com/node-fetch/download/node-fetch-2.6.1.tgz?cache=0&sync_timestamp=1626684741221&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnode-fetch%2Fdownload%2Fnode-fetch-2.6.1.tgz", + "integrity": "sha1-BFvTI2Mfdu0uK1VXM5RBa2OaAFI=", + "dev": true + } + } + }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -3888,11 +3926,6 @@ "randomfill": "^1.0.3" } }, - "crypto-js": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/crypto-js/download/crypto-js-4.0.0.tgz", - "integrity": "sha1-KQSrJnep0EKFai6i74DekuSjbcw=" - }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -5018,8 +5051,8 @@ }, "draft-js": { "version": "0.10.5", - "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.10.5.tgz", - "integrity": "sha512-LE6jSCV9nkPhfVX2ggcRLA4FKs6zWq9ceuO/88BpXdNCS7mjRTgs0NsV6piUCJX9YxMsB9An33wnkMmU2sD2Zg==", + "resolved": "https://registry.npm.taobao.org/draft-js/download/draft-js-0.10.5.tgz", + "integrity": "sha1-v6m+sBj+BTPbsI1mdcNxprCPp0I=", "requires": { "fbjs": "^0.8.15", "immutable": "~3.7.4", @@ -6204,6 +6237,41 @@ "bser": "2.1.1" } }, + "fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/fbemitter/download/fbemitter-3.0.0.tgz", + "integrity": "sha1-ALKhr1QRJUqrQWzXX55iib7kv/M=", + "dev": true, + "requires": { + "fbjs": "^3.0.0" + }, + "dependencies": { + "fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/fbjs/download/fbjs-3.0.0.tgz?cache=0&sync_timestamp=1602048313843&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffbjs%2Fdownload%2Ffbjs-3.0.0.tgz", + "integrity": "sha1-CQcGf7P1enj0XZXx6s/8rNYjwWU=", + "dev": true, + "requires": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "dev": true, + "requires": { + "asap": "~2.0.3" + } + } + } + }, "fbjs": { "version": "0.8.17", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", @@ -6233,6 +6301,12 @@ } } }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/fbjs-css-vars/download/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha1-IWVRE2rgL+JVkyw+yHdfGOLAeLg=", + "dev": true + }, "fecha": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", @@ -6677,6 +6751,42 @@ "readable-stream": "^2.3.6" } }, + "flux": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/flux/download/flux-4.0.1.tgz", + "integrity": "sha1-eENQKwKEHUqqU0rws3MDSh917lw=", + "dev": true, + "requires": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.0" + }, + "dependencies": { + "fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/fbjs/download/fbjs-3.0.0.tgz?cache=0&sync_timestamp=1602048313843&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffbjs%2Fdownload%2Ffbjs-3.0.0.tgz", + "integrity": "sha1-CQcGf7P1enj0XZXx6s/8rNYjwWU=", + "dev": true, + "requires": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "dev": true, + "requires": { + "asap": "~2.0.3" + } + } + } + }, "flv.js": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/flv.js/-/flv.js-1.5.0.tgz", @@ -9185,9 +9295,9 @@ } }, "is-mobile": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-2.2.1.tgz", - "integrity": "sha512-6zELsfVFr326eq2CI53yvqq6YBanOxKBybwDT+MbMS2laBnK6Ez8m5XHSuTQQbnKRfpDzCod1CMWW5q3wZYMvA==" + "version": "2.2.2", + "resolved": "https://registry.nlark.com/is-mobile/download/is-mobile-2.2.2.tgz", + "integrity": "sha1-9snF1Q7gElTOBec5vdg18e1OmVQ=" }, "is-npm": { "version": "1.0.0", @@ -10320,6 +10430,12 @@ "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=" }, + "lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/lodash.curry/download/lodash.curry-4.1.1.tgz", + "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=", + "dev": true + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -10330,6 +10446,12 @@ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" }, + "lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/lodash.flow/download/lodash.flow-3.5.0.tgz", + "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=", + "dev": true + }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", @@ -11419,8 +11541,8 @@ }, "omit.js": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-1.0.2.tgz", - "integrity": "sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ==", + "resolved": "https://registry.npm.taobao.org/omit.js/download/omit.js-1.0.2.tgz", + "integrity": "sha1-kaFPDrqEBm36AVvzDkdMR/MLyFg=", "requires": { "babel-runtime": "^6.23.0" } @@ -11551,7 +11673,7 @@ }, "output-file-sync": { "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/output-file-sync/download/output-file-sync-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { @@ -13960,6 +14082,12 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/pure-color/download/pure-color-1.3.0.tgz", + "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=", + "dev": true + }, "purgecss": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.1.2.tgz", @@ -14223,9 +14351,9 @@ } }, "rc-calendar": { - "version": "9.15.10", - "resolved": "https://registry.npmjs.org/rc-calendar/-/rc-calendar-9.15.10.tgz", - "integrity": "sha512-xh1A3rYejKskAvkjnd9BcHXFbBnAYsHMGHBdtoAkbwp43B6yEieNL0g0Tzz8s1gApDZV2j5vF1jJ9IIpPYFNLw==", + "version": "9.15.11", + "resolved": "https://registry.npm.taobao.org/rc-calendar/download/rc-calendar-9.15.11.tgz", + "integrity": "sha1-zh5eqOTXdDW+ZqjHfbEvHw+aNF8=", "requires": { "babel-runtime": "6.x", "classnames": "2.x", @@ -14238,8 +14366,8 @@ }, "rc-cascader": { "version": "0.17.5", - "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-0.17.5.tgz", - "integrity": "sha512-WYMVcxU0+Lj+xLr4YYH0+yXODumvNXDcVEs5i7L1mtpWwYkubPV/zbQpn+jGKFCIW/hOhjkU4J1db8/P/UKE7A==", + "resolved": "https://registry.npm.taobao.org/rc-cascader/download/rc-cascader-0.17.5.tgz?cache=0&sync_timestamp=1610107054432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-cascader%2Fdownload%2Frc-cascader-0.17.5.tgz", + "integrity": "sha1-T96R0jt2CMQgJjw47unAaH+A99w=", "requires": { "array-tree-filter": "^2.1.0", "prop-types": "^15.5.8", @@ -14252,8 +14380,8 @@ }, "rc-checkbox": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.1.8.tgz", - "integrity": "sha512-6qOgh0/by0nVNASx6LZnhRTy17Etcgav+IrI7kL9V9kcDZ/g7K14JFlqrtJ3NjDq/Kyn+BPI1st1XvbkhfaJeg==", + "resolved": "https://registry.npm.taobao.org/rc-checkbox/download/rc-checkbox-2.1.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-checkbox%2Fdownload%2Frc-checkbox-2.1.8.tgz", + "integrity": "sha1-7t2e+cLzr1s7jlzeUlSqia0aiAo=", "requires": { "babel-runtime": "^6.23.0", "classnames": "2.x", @@ -14263,8 +14391,8 @@ }, "rc-collapse": { "version": "1.11.8", - "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-1.11.8.tgz", - "integrity": "sha512-8EhfPyScTYljkbRuIoHniSwZagD5UPpZ3CToYgoNYWC85L2qCbPYF7+OaC713FOrIkp6NbfNqXsITNxmDAmxog==", + "resolved": "https://registry.npm.taobao.org/rc-collapse/download/rc-collapse-1.11.8.tgz?cache=0&sync_timestamp=1606217065785&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-collapse%2Fdownload%2Frc-collapse-1.11.8.tgz", + "integrity": "sha1-ZqQAidRpUZ6UJACasckn4hQEHYA=", "requires": { "classnames": "2.x", "css-animation": "1.x", @@ -14277,8 +14405,8 @@ }, "rc-dialog": { "version": "7.6.1", - "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-7.6.1.tgz", - "integrity": "sha512-KUKf+2eZ4YL+lnXMG3hR4ZtIhC9glfH27NtTVz3gcoDIPAf3uUvaXVRNoDCiSi+OGKLyIb/b6EoidFh6nQC5Wg==", + "resolved": "https://registry.npm.taobao.org/rc-dialog/download/rc-dialog-7.6.1.tgz?cache=0&sync_timestamp=1614949683544&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-dialog%2Fdownload%2Frc-dialog-7.6.1.tgz", + "integrity": "sha1-EVRczAuUWTT6dgeXJuDYU+UtcF8=", "requires": { "babel-runtime": "6.x", "rc-animate": "2.x", @@ -14287,8 +14415,8 @@ }, "rc-drawer": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-3.1.3.tgz", - "integrity": "sha512-2z+RdxmzXyZde/1OhVMfDR1e/GBswFeWSZ7FS3Fdd0qhgVdpV1wSzILzzxRaT481ItB5hOV+e8pZT07vdJE8kg==", + "resolved": "https://registry.npm.taobao.org/rc-drawer/download/rc-drawer-3.1.3.tgz?cache=0&sync_timestamp=1614159639291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-drawer%2Fdownload%2Frc-drawer-3.1.3.tgz", + "integrity": "sha1-y8sE1MB/C2by7OEdhH9KG9gOoLc=", "requires": { "classnames": "^2.2.6", "rc-util": "^4.16.1", @@ -14297,8 +14425,8 @@ }, "rc-dropdown": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-2.4.1.tgz", - "integrity": "sha512-p0XYn0wrOpAZ2fUGE6YJ6U8JBNc5ASijznZ6dkojdaEfQJAeZtV9KMEewhxkVlxGSbbdXe10ptjBlTEW9vEwEg==", + "resolved": "https://registry.npm.taobao.org/rc-dropdown/download/rc-dropdown-2.4.1.tgz?cache=0&sync_timestamp=1600332782526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-dropdown%2Fdownload%2Frc-dropdown-2.4.1.tgz", + "integrity": "sha1-qu9us6UVLN2ZgolcKnjZtfBGzew=", "requires": { "babel-runtime": "^6.26.0", "classnames": "^2.2.6", @@ -14309,8 +14437,8 @@ }, "rc-editor-core": { "version": "0.8.10", - "resolved": "https://registry.npmjs.org/rc-editor-core/-/rc-editor-core-0.8.10.tgz", - "integrity": "sha512-T3aHpeMCIYA1sdAI7ynHHjXy5fqp83uPlD68ovZ0oClTSc3tbHmyCxXlA+Ti4YgmcpCYv7avF6a+TIbAka53kw==", + "resolved": "https://registry.npm.taobao.org/rc-editor-core/download/rc-editor-core-0.8.10.tgz", + "integrity": "sha1-byFbxd+cM/+p9sWzDKc6favoq3w=", "requires": { "babel-runtime": "^6.26.0", "classnames": "^2.2.5", @@ -14323,8 +14451,8 @@ }, "rc-editor-mention": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/rc-editor-mention/-/rc-editor-mention-1.1.13.tgz", - "integrity": "sha512-3AOmGir91Fi2ogfRRaXLtqlNuIwQpvla7oUnGHS1+3eo7b+fUp5IlKcagqtwUBB5oDNofoySXkLBxzWvSYNp/Q==", + "resolved": "https://registry.npm.taobao.org/rc-editor-mention/download/rc-editor-mention-1.1.13.tgz", + "integrity": "sha1-nxyrEGX4awFSOEAyF5DCqxKsXos=", "requires": { "babel-runtime": "^6.23.0", "classnames": "^2.2.5", @@ -14352,9 +14480,9 @@ } }, "rc-hammerjs": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/rc-hammerjs/-/rc-hammerjs-0.6.9.tgz", - "integrity": "sha512-4llgWO3RgLyVbEqUdGsDfzUDqklRlQW5VEhE3x35IvhV+w//VPRG34SBavK3D2mD/UaLKaohgU41V4agiftC8g==", + "version": "0.6.10", + "resolved": "https://registry.npm.taobao.org/rc-hammerjs/download/rc-hammerjs-0.6.10.tgz", + "integrity": "sha1-GDGjvY8hmXAL/MWtayCjVjCuteA=", "requires": { "babel-runtime": "6.x", "hammerjs": "^2.0.8", @@ -14362,9 +14490,9 @@ } }, "rc-input-number": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-4.5.6.tgz", - "integrity": "sha512-AXbL4gtQ1mSQnu6v/JtMv3UbGRCzLvQznmf0a7U/SAtZ8+dCEAqD4JpJhkjv73Wog53eRYhw4l7ApdXflc9ymg==", + "version": "4.5.9", + "resolved": "https://registry.nlark.com/rc-input-number/download/rc-input-number-4.5.9.tgz?cache=0&sync_timestamp=1619578110950&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frc-input-number%2Fdownload%2Frc-input-number-4.5.9.tgz", + "integrity": "sha1-HL9zXiT+I8TrmkMBAxcguV8qPj0=", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.0", @@ -14375,8 +14503,8 @@ }, "rc-mentions": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-0.4.2.tgz", - "integrity": "sha512-DTZurQzacLXOfVuiHydGzqkq7cFMHXF18l2jZ9PhWUn2cqvOSY3W4osN0Pq29AOMOBpcxdZCzgc7Lb0r/bgkDw==", + "resolved": "https://registry.npm.taobao.org/rc-mentions/download/rc-mentions-0.4.2.tgz?cache=0&sync_timestamp=1610510822768&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-mentions%2Fdownload%2Frc-mentions-0.4.2.tgz", + "integrity": "sha1-wYq3Ae+55LdbOFGgwNLdaYZA4kY=", "requires": { "@ant-design/create-react-context": "^0.2.4", "classnames": "^2.2.6", @@ -14404,8 +14532,8 @@ }, "rc-notification": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-3.3.1.tgz", - "integrity": "sha512-U5+f4BmBVfMSf3OHSLyRagsJ74yKwlrQAtbbL5ijoA0F2C60BufwnOcHG18tVprd7iaIjzZt1TKMmQSYSvgrig==", + "resolved": "https://registry.npm.taobao.org/rc-notification/download/rc-notification-3.3.1.tgz?cache=0&sync_timestamp=1614675471156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-notification%2Fdownload%2Frc-notification-3.3.1.tgz", + "integrity": "sha1-C6o+cPjUCrAVzo+njCYMSQ/HvrQ=", "requires": { "babel-runtime": "6.x", "classnames": "2.x", @@ -14426,9 +14554,9 @@ } }, "rc-progress": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-2.5.2.tgz", - "integrity": "sha512-ajI+MJkbBz9zYDuE9GQsY5gsyqPF7HFioZEDZ9Fmc+ebNZoiSeSJsTJImPFCg0dW/5WiRGUy2F69SX1aPtSJgA==", + "version": "2.5.3", + "resolved": "https://registry.npm.taobao.org/rc-progress/download/rc-progress-2.5.3.tgz", + "integrity": "sha1-APAblb2+GFbTpfgiQgUZAui3qOc=", "requires": { "babel-runtime": "6.x", "prop-types": "^15.5.8" @@ -14445,8 +14573,8 @@ }, "rc-resize-observer": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-0.1.3.tgz", - "integrity": "sha512-uzOQEwx83xdQSFOkOAM7x7GHIQKYnrDV4dWxtCxyG1BS1pkfJ4EvDeMfsvAJHSYkQXVBu+sgRHGbRtLG3qiuUg==", + "resolved": "https://registry.npm.taobao.org/rc-resize-observer/download/rc-resize-observer-0.1.3.tgz?cache=0&sync_timestamp=1608864858155&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-resize-observer%2Fdownload%2Frc-resize-observer-0.1.3.tgz", + "integrity": "sha1-CXGR+cOrGG7ZB7VTum71Zd8Rwkk=", "requires": { "classnames": "^2.2.1", "rc-util": "^4.13.0", @@ -14474,8 +14602,8 @@ }, "rc-slider": { "version": "8.7.1", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.7.1.tgz", - "integrity": "sha512-WMT5mRFUEcrLWwTxsyS8jYmlaMsTVCZIGENLikHsNv+tE8ThU2lCoPfi/xFNUfJFNFSBFP3MwPez9ZsJmNp13g==", + "resolved": "https://registry.npm.taobao.org/rc-slider/download/rc-slider-8.7.1.tgz?cache=0&sync_timestamp=1616675519253&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-slider%2Fdownload%2Frc-slider-8.7.1.tgz", + "integrity": "sha1-ntBzYtyTSJo45lSyG4EirXD9PEI=", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.5", @@ -14489,8 +14617,8 @@ }, "rc-steps": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-3.5.0.tgz", - "integrity": "sha512-2Vkkrpa7PZbg7qPsqTNzVDov4u78cmxofjjnIHiGB9+9rqKS8oTLPzbW2uiWDr3Lk+yGwh8rbpGO1E6VAgBCOg==", + "resolved": "https://registry.npm.taobao.org/rc-steps/download/rc-steps-3.5.0.tgz", + "integrity": "sha1-NrKn8fSZB7DZA2OISxhiPK+ftgA=", "requires": { "babel-runtime": "^6.23.0", "classnames": "^2.2.3", @@ -14499,9 +14627,9 @@ } }, "rc-switch": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-1.9.0.tgz", - "integrity": "sha512-Isas+egaK6qSk64jaEw4GgPStY4umYDbT7ZY93bZF1Af+b/JEsKsJdNOU2qG3WI0Z6tXo2DDq0kJCv8Yhu0zww==", + "version": "1.9.2", + "resolved": "https://registry.npm.taobao.org/rc-switch/download/rc-switch-1.9.2.tgz?cache=0&sync_timestamp=1603791200779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-switch%2Fdownload%2Frc-switch-1.9.2.tgz", + "integrity": "sha1-eSHHZkEf6aZCZRDDQpAi1rpN/eI=", "requires": { "classnames": "^2.2.1", "prop-types": "^15.5.6", @@ -14510,8 +14638,8 @@ }, "rc-table": { "version": "6.10.15", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-6.10.15.tgz", - "integrity": "sha512-LAr0M/gqt+irOjvPNBLApmQ0CUHNOfKsEBhu1uIuB3OlN1ynA9z+sdoTQyNd9+8NSl0MYnQOOfhtLChAY7nU0A==", + "resolved": "https://registry.nlark.com/rc-table/download/rc-table-6.10.15.tgz", + "integrity": "sha1-GB9McMT9dPZX7o8jGW5+sIoDZco=", "requires": { "classnames": "^2.2.5", "component-classes": "^1.2.6", @@ -14525,8 +14653,8 @@ }, "rc-tabs": { "version": "9.7.0", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-9.7.0.tgz", - "integrity": "sha512-kvmgp8/MfLzFZ06hWHignqomFQ5nF7BqKr5O1FfhE4VKsGrep52YSF/1MvS5oe0NPcI9XGNS2p751C5v6cYDpQ==", + "resolved": "https://registry.npm.taobao.org/rc-tabs/download/rc-tabs-9.7.0.tgz?cache=0&sync_timestamp=1608866453009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-tabs%2Fdownload%2Frc-tabs-9.7.0.tgz", + "integrity": "sha1-rglpW+9ZY9bmTnvBBSHHbf3YRIs=", "requires": { "@ant-design/create-react-context": "^0.2.4", "babel-runtime": "6.x", @@ -14543,8 +14671,8 @@ "dependencies": { "raf": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "resolved": "https://registry.npm.taobao.org/raf/download/raf-3.4.1.tgz", + "integrity": "sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk=", "requires": { "performance-now": "^2.1.0" } @@ -14553,8 +14681,8 @@ }, "rc-time-picker": { "version": "3.7.3", - "resolved": "https://registry.npmjs.org/rc-time-picker/-/rc-time-picker-3.7.3.tgz", - "integrity": "sha512-Lv1Mvzp9fRXhXEnRLO4nW6GLNxUkfAZ3RsiIBsWjGjXXvMNjdr4BX/ayElHAFK0DoJqOhm7c5tjmIYpEOwcUXg==", + "resolved": "https://registry.npm.taobao.org/rc-time-picker/download/rc-time-picker-3.7.3.tgz?cache=0&sync_timestamp=1576572941972&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-time-picker%2Fdownload%2Frc-time-picker-3.7.3.tgz", + "integrity": "sha1-ZajekECTJQrpyCsCpJBeD5leI+I=", "requires": { "classnames": "2.x", "moment": "2.x", @@ -14566,8 +14694,8 @@ "dependencies": { "raf": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "resolved": "https://registry.npm.taobao.org/raf/download/raf-3.4.1.tgz", + "integrity": "sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk=", "requires": { "performance-now": "^2.1.0" } @@ -14576,8 +14704,8 @@ }, "rc-tooltip": { "version": "3.7.3", - "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-3.7.3.tgz", - "integrity": "sha512-dE2ibukxxkrde7wH9W8ozHKUO4aQnPZ6qBHtrTH9LoO836PjDdiaWO73fgPB05VfJs9FbZdmGPVEbXCeOP99Ww==", + "resolved": "https://registry.npm.taobao.org/rc-tooltip/download/rc-tooltip-3.7.3.tgz?cache=0&sync_timestamp=1614588684791&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-tooltip%2Fdownload%2Frc-tooltip-3.7.3.tgz", + "integrity": "sha1-KArsavyqROjf8EgPuv+eh/wArsw=", "requires": { "babel-runtime": "6.x", "prop-types": "^15.5.8", @@ -14625,8 +14753,8 @@ }, "rc-tree-select": { "version": "2.9.4", - "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-2.9.4.tgz", - "integrity": "sha512-0HQkXAN4XbfBW20CZYh3G+V+VMrjX42XRtDCpyv6PDUm5vikC0Ob682ZBCVS97Ww2a5Hf6Ajmu0ahWEdIEpwhg==", + "resolved": "https://registry.nlark.com/rc-tree-select/download/rc-tree-select-2.9.4.tgz", + "integrity": "sha1-aqeU4fDmXGbEBqoKKg50/QpVewk=", "requires": { "classnames": "^2.2.1", "dom-scroll-into-view": "^1.2.1", @@ -14643,8 +14771,8 @@ "dependencies": { "rc-tree": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-2.1.4.tgz", - "integrity": "sha512-Xey794Iavgs8YldFlXcZLOhfcIhlX5Oz/yfKufknBXf2AlZCOkc7aHqSM9uTF7fBPtTGPhPxNEfOqHfY7b7xng==", + "resolved": "https://registry.npm.taobao.org/rc-tree/download/rc-tree-2.1.4.tgz?cache=0&sync_timestamp=1615350038621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-tree%2Fdownload%2Frc-tree-2.1.4.tgz", + "integrity": "sha1-73WfPnmaIbQ8Hs+ceU6hwU5wtZs=", "requires": { "@ant-design/create-react-context": "^0.2.4", "classnames": "2.x", @@ -14657,8 +14785,8 @@ }, "rc-trigger": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-3.0.0.tgz", - "integrity": "sha512-hQxbbJpo23E2QnYczfq3Ec5J5tVl2mUDhkqxrEsQAqk16HfADQg+iKNWzEYXyERSncdxfnzYuaBgy764mNRzTA==", + "resolved": "https://registry.nlark.com/rc-trigger/download/rc-trigger-3.0.0.tgz?cache=0&sync_timestamp=1619590696046&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frc-trigger%2Fdownload%2Frc-trigger-3.0.0.tgz", + "integrity": "sha1-9tmx2oomsrLR2RKgaHbBpIb1mA8=", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.6", @@ -14670,18 +14798,14 @@ }, "dependencies": { "rc-animate": { - "version": "3.0.0-rc.6", - "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.0.0-rc.6.tgz", - "integrity": "sha512-oBLPpiT6Q4t6YvD/pkLcmofBP1p01TX0Otse8Q4+Mxt8J+VSDflLZGIgf62EwkvRwsQUkLPjZVFBsldnPKLzjg==", + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/rc-animate/download/rc-animate-3.1.1.tgz?cache=0&sync_timestamp=1601018005635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frc-animate%2Fdownload%2Frc-animate-3.1.1.tgz", + "integrity": "sha1-3v3YY/VoFsIiU05Nxo/t3s0IE4Y=", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "component-classes": "^1.2.6", - "fbjs": "^0.8.16", - "prop-types": "15.x", + "@ant-design/css-animation": "^1.7.2", + "classnames": "^2.2.6", "raf": "^3.4.0", - "rc-util": "^4.5.0", - "react-lifecycles-compat": "^3.0.4" + "rc-util": "^4.15.3" } } } @@ -14735,6 +14859,18 @@ "prop-types": "^15.6.2" } }, + "react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/react-base16-styling/download/react-base16-styling-0.6.0.tgz", + "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "dev": true, + "requires": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, "react-beautiful-dnd": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-10.1.1.tgz", @@ -15100,6 +15236,18 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npm.taobao.org/react-json-view/download/react-json-view-1.21.3.tgz", + "integrity": "sha1-8YQgnujxvzdPsMQbCBPP9UVJxHU=", + "dev": true, + "requires": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + } + }, "react-jss": { "version": "8.6.1", "resolved": "https://registry.npmjs.org/react-jss/-/react-jss-8.6.1.tgz", @@ -15120,9 +15268,9 @@ } }, "react-lazy-load": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/react-lazy-load/-/react-lazy-load-3.0.13.tgz", - "integrity": "sha1-OwqS0zbUPT8Nc8vm81sXBQsIuCQ=", + "version": "3.1.13", + "resolved": "https://registry.npm.taobao.org/react-lazy-load/download/react-lazy-load-3.1.13.tgz?cache=0&sync_timestamp=1593654792284&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-lazy-load%2Fdownload%2Freact-lazy-load-3.1.13.tgz", + "integrity": "sha1-I2lD92twhMyEWHFtljKhyYU+pc0=", "requires": { "eventlistener": "0.0.1", "lodash.debounce": "^4.0.0", @@ -15259,9 +15407,9 @@ } }, "react-slick": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.25.2.tgz", - "integrity": "sha512-8MNH/NFX/R7zF6W/w+FS5VXNyDusF+XDW1OU0SzODEU7wqYB+ZTGAiNJ++zVNAVqCAHdyCybScaUB+FCZOmBBw==", + "version": "0.28.1", + "resolved": "https://registry.nlark.com/react-slick/download/react-slick-0.28.1.tgz", + "integrity": "sha1-EsGNmRtZQy35w3V7pUCiJ7P7hbk=", "requires": { "classnames": "^2.2.5", "enquire.js": "^2.1.6", @@ -15288,6 +15436,34 @@ "prop-types": "^15.5.4" } }, + "react-textarea-autosize": { + "version": "8.3.3", + "resolved": "https://registry.nlark.com/react-textarea-autosize/download/react-textarea-autosize-8.3.3.tgz?cache=0&sync_timestamp=1622628433420&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-textarea-autosize%2Fdownload%2Freact-textarea-autosize-8.3.3.tgz", + "integrity": "sha1-9wkTlFNp2kU/1VTBaPa6rNH6BNg=", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.0.0", + "use-latest": "^1.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.14.8.tgz", + "integrity": "sha1-cRmlb0IQGIUmlCkLn5FICXORtEY=", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&sync_timestamp=1626993001371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz", + "integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=", + "dev": true + } + } + }, "react-transition-group": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", @@ -16105,8 +16281,8 @@ }, "rmc-feedback": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/rmc-feedback/-/rmc-feedback-2.0.0.tgz", - "integrity": "sha512-5PWOGOW7VXks/l3JzlOU9NIxRpuaSS8d9zA3UULUCuTKnpwBHNvv1jSJzxgbbCQeYzROWUpgKI4za3X4C/mKmQ==", + "resolved": "https://registry.npm.taobao.org/rmc-feedback/download/rmc-feedback-2.0.0.tgz", + "integrity": "sha1-y8bLOuY8emNe7w4l5PuvWsNm7qo=", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.5" @@ -16689,8 +16865,8 @@ }, "shallow-equal": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", - "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + "resolved": "https://registry.npm.taobao.org/shallow-equal/download/shallow-equal-1.2.1.tgz", + "integrity": "sha1-TBar+lYEOqINBQMk76aJQLDaedo=" }, "shallowequal": { "version": "1.1.0", @@ -17044,6 +17220,11 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npm.taobao.org/slick-carousel/download/slick-carousel-1.8.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslick-carousel%2Fdownload%2Fslick-carousel-1.8.1.tgz", + "integrity": "sha1-pL+ykBSIe7Zs5Si5C9DNomLMj40=" + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -18378,6 +18559,12 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "dev": true }, + "ts-essentials": { + "version": "2.0.12", + "resolved": "https://registry.nlark.com/ts-essentials/download/ts-essentials-2.0.12.tgz", + "integrity": "sha1-yTA/PXT3X6dSjD1JuA4ImrCdh0U=", + "dev": true + }, "tslib": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", @@ -18887,9 +19074,33 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "use-composed-ref": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/use-composed-ref/download/use-composed-ref-1.1.0.tgz", + "integrity": "sha1-kiDk6UqXt7AtfSfq6rCzcDRDi7w=", + "dev": true, + "requires": { + "ts-essentials": "^2.0.3" + } + }, + "use-isomorphic-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/use-isomorphic-layout-effect/download/use-isomorphic-layout-effect-1.1.1.tgz", + "integrity": "sha1-e7ZYkXDNKYehUgQvkIT57/t1wiU=", + "dev": true + }, + "use-latest": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/use-latest/download/use-latest-1.2.0.tgz", + "integrity": "sha1-pE9lcrgojgly7EEb3QhAraNm8jI=", + "dev": true, + "requires": { + "use-isomorphic-layout-effect": "^1.0.0" + } + }, "user-home": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", "dev": true }, @@ -18946,7 +19157,7 @@ }, "v8flags": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/v8flags/download/v8flags-2.1.1.tgz?cache=0&sync_timestamp=1590964281452&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8flags%2Fdownload%2Fv8flags-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { @@ -20490,6 +20701,16 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, + "xterm": { + "version": "4.8.1", + "resolved": "https://registry.npm.taobao.org/xterm/download/xterm-4.8.1.tgz", + "integrity": "sha1-FVoXKaQ+Gom0BlJOIsVjQznjnKE=" + }, + "xterm-addon-fit": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/xterm-addon-fit/download/xterm-addon-fit-0.4.0.tgz", + "integrity": "sha1-BuDF0KaqrPsAnvVl76HIHpPZAZM=" + }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", diff --git a/public/css/iconfont.css b/public/css/iconfont.css index 32cb789aa..a15df586f 100644 --- a/public/css/iconfont.css +++ b/public/css/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 2340181 */ - src: url('iconfont.woff2?t=1625800786751') format('woff2'), - url('iconfont.woff?t=1625800786751') format('woff'), - url('iconfont.ttf?t=1625800786751') format('truetype'); + src: url('iconfont.woff2?t=1628841816999') format('woff2'), + url('iconfont.woff?t=1628841816999') format('woff'), + url('iconfont.ttf?t=1628841816999') format('truetype'); } .iconfont { @@ -13,6 +13,286 @@ -moz-osx-font-smoothing: grayscale; } +.icon-xinjian2:before { + content: "\e8b0"; +} + +.icon-xieyiicon:before { + content: "\e870"; +} + +.icon-neicunicon:before { + content: "\e891"; +} + +.icon-zishuwenjian_icon:before { + content: "\e8a6"; +} + +.icon-dianzan_icon:before { + content: "\e8ba"; +} + +.icon-quxiaoguanzhu:before { + content: "\e8bb"; +} + +.icon-daimakuicon:before { + content: "\e8a9"; +} + +.icon-zhuyeicon:before { + content: "\e884"; +} + +.icon-biaoqianicon:before { + content: "\e882"; +} + +.icon-a-bianji:before { + content: "\e883"; +} + +.icon-cangkushezhiicon:before { + content: "\e885"; +} + +.icon-fuzhiicon:before { + content: "\e886"; +} + +.icon-lianjieicon:before { + content: "\e887"; +} + +.icon-hebingqingqiuicon:before { + content: "\e888"; +} + +.icon-lichengbeiicon:before { + content: "\e889"; +} + +.icon-gongzuoliuicon:before { + content: "\e88a"; +} + +.icon-dongtaiicon:before { + content: "\e88b"; +} + +.icon-morendianzan_icon:before { + content: "\e88e"; +} + +.icon-muluicon:before { + content: "\e894"; +} + +.icon-a-shezhi:before { + content: "\e899"; +} + +.icon-wenjian5:before { + content: "\e89a"; +} + +.icon-tijiaoicon:before { + content: "\e89e"; +} + +.icon-morenguanzhu_ICON:before { + content: "\e89f"; +} + +.icon-wenjianjia3:before { + content: "\e8a2"; +} + +.icon-xialaanniu1:before { + content: "\e8a4"; +} + +.icon-zuohuaicon:before { + content: "\e8b5"; +} + +.icon-master_icon:before { + content: "\e8b6"; +} + +.icon-morenfuke_icon:before { + content: "\e8b7"; +} + +.icon-a-wikiicon:before { + content: "\e8b8"; +} + +.icon-yixiuicon:before { + content: "\e8b9"; +} + +.icon-suofang:before { + content: "\e87f"; +} + +.icon-fangdaicon:before { + content: "\e881"; +} + +.icon-sousuo_icon1:before { + content: "\e873"; +} + +.icon-huanying_icon:before { + content: "\e878"; +} + +.icon-wenjianjia2:before { + content: "\e879"; +} + +.icon-shanchuicon1:before { + content: "\e87a"; +} + +.icon-qingqiuicon:before { + content: "\e871"; +} + +.icon-xiangyingicon:before { + content: "\e87c"; +} + +.icon-duoxuanxuanzhong:before { + content: "\e88f"; +} + +.icon-cuowuicon:before { + content: "\e890"; +} + +.icon-chenggongicon:before { + content: "\e892"; +} + +.icon-weixuanzhongxiangyingicon:before { + content: "\e893"; +} + +.icon-bitianicon:before { + content: "\e895"; +} + +.icon-weixuanzhongxiangmubiaoqianicon:before { + content: "\e897"; +} + +.icon-liebiaoicon:before { + content: "\e898"; +} + +.icon-weixuanzhongqingqiuicon:before { + content: "\e89b"; +} + +.icon-xiezuozheguanliicon:before { + content: "\e8a1"; +} + +.icon-xuanzhongfenzhiicon:before { + content: "\e8a3"; +} + +.icon-xuanzhongjibenshezhiicon:before { + content: "\e8a5"; +} + +.icon-xuanzhongxiangmubiaoqianicon:before { + content: "\e8aa"; +} + +.icon-a-xuanzhongwebhookicon:before { + content: "\e8af"; +} + +.icon-shanchu_tc_icon:before { + content: "\e88c"; +} + +.icon-wiki_icon:before { + content: "\e88d"; +} + +.icon-daorumoban_icon:before { + content: "\e86f"; +} + +.icon-cuowu:before { + content: "\e872"; +} + +.icon-gengduo_icon:before { + content: "\e874"; +} + +.icon-fucengguanbi_icon:before { + content: "\e875"; +} + +.icon-fuzhi_icon:before { + content: "\e876"; +} + +.icon-shanchuicon:before { + content: "\e877"; +} + +.icon-sousuo_shanchuicon:before { + content: "\e87b"; +} + +.icon-sousuo_icon:before { + content: "\e87d"; +} + +.icon-wendangyulan_icon:before { + content: "\e87e"; +} + +.icon-xialaanniu:before { + content: "\e880"; +} + +.icon-erciqueren_icon:before { + content: "\e867"; +} + +.icon-xuanzhongssh_icon:before { + content: "\e868"; +} + +.icon-weixuanzhonganquanshezhi_icon:before { + content: "\e869"; +} + +.icon-weixuanzhongssh_icon:before { + content: "\e86a"; +} + +.icon-xuanzhonganquanshezhi_icon:before { + content: "\e86b"; +} + +.icon-shanchu_icon:before { + content: "\e86c"; +} + +.icon-liebiaossh_icon:before { + content: "\e86e"; +} + .icon-file-submodule:before { content: "\e866"; } diff --git a/public/css/iconfont.js b/public/css/iconfont.js index c4fb710fb..94af421b3 100644 --- a/public/css/iconfont.js +++ b/public/css/iconfont.js @@ -1 +1 @@ -!function(c){var l,a,h,i,o,z,t='',p=(p=document.getElementsByTagName("script"))[p.length-1].getAttribute("data-injectcss");if(p&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function v(){o||(o=!0,h())}l=function(){var c,l,a;(a=document.createElement("div")).innerHTML=t,t=null,(l=a.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",c=l,(a=document.body).firstChild?(l=a.firstChild).parentNode.insertBefore(c,l):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(a=function(){document.removeEventListener("DOMContentLoaded",a,!1),l()},document.addEventListener("DOMContentLoaded",a,!1)):document.attachEvent&&(h=l,i=c.document,o=!1,(z=function(){try{i.documentElement.doScroll("left")}catch(c){return void setTimeout(z,50)}v()})(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,v())})}(window); \ No newline at end of file +!function(c){var l,a,h,i,o,z='',t=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss"),p=function(c,l){l.parentNode.insertBefore(c,l)};if(t&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function v(){o||(o=!0,h())}function m(){try{i.documentElement.doScroll("left")}catch(c){return void setTimeout(m,50)}v()}l=function(){var c,l;(l=document.createElement("div")).innerHTML=z,z=null,(c=l.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",l=c,(c=document.body).firstChild?p(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(a=function(){document.removeEventListener("DOMContentLoaded",a,!1),l()},document.addEventListener("DOMContentLoaded",a,!1)):document.attachEvent&&(h=l,i=c.document,o=!1,m(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,v())})}(window); diff --git a/public/css/iconfont.json b/public/css/iconfont.json index 43c5fbfbb..7f25b322f 100644 --- a/public/css/iconfont.json +++ b/public/css/iconfont.json @@ -5,6 +5,496 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "23572260", + "name": "新建", + "font_class": "xinjian2", + "unicode": "e8b0", + "unicode_decimal": 59568 + }, + { + "icon_id": "23567674", + "name": "协议icon", + "font_class": "xieyiicon", + "unicode": "e870", + "unicode_decimal": 59504 + }, + { + "icon_id": "23567675", + "name": "内存icon", + "font_class": "neicunicon", + "unicode": "e891", + "unicode_decimal": 59537 + }, + { + "icon_id": "23567676", + "name": "自述文件_icon", + "font_class": "zishuwenjian_icon", + "unicode": "e8a6", + "unicode_decimal": 59558 + }, + { + "icon_id": "23492900", + "name": "点赞_icon", + "font_class": "dianzan_icon", + "unicode": "e8ba", + "unicode_decimal": 59578 + }, + { + "icon_id": "23492901", + "name": "取消关注", + "font_class": "quxiaoguanzhu", + "unicode": "e8bb", + "unicode_decimal": 59579 + }, + { + "icon_id": "23473151", + "name": "代码库icon", + "font_class": "daimakuicon", + "unicode": "e8a9", + "unicode_decimal": 59561 + }, + { + "icon_id": "23473104", + "name": "主页icon", + "font_class": "zhuyeicon", + "unicode": "e884", + "unicode_decimal": 59524 + }, + { + "icon_id": "23472253", + "name": "标签icon", + "font_class": "biaoqianicon", + "unicode": "e882", + "unicode_decimal": 59522 + }, + { + "icon_id": "23472254", + "name": "编 辑", + "font_class": "a-bianji", + "unicode": "e883", + "unicode_decimal": 59523 + }, + { + "icon_id": "23472256", + "name": "仓库设置icon", + "font_class": "cangkushezhiicon", + "unicode": "e885", + "unicode_decimal": 59525 + }, + { + "icon_id": "23472257", + "name": "复制icon", + "font_class": "fuzhiicon", + "unicode": "e886", + "unicode_decimal": 59526 + }, + { + "icon_id": "23472258", + "name": "链接icon", + "font_class": "lianjieicon", + "unicode": "e887", + "unicode_decimal": 59527 + }, + { + "icon_id": "23472259", + "name": "合并请求icon", + "font_class": "hebingqingqiuicon", + "unicode": "e888", + "unicode_decimal": 59528 + }, + { + "icon_id": "23472260", + "name": "里程碑icon", + "font_class": "lichengbeiicon", + "unicode": "e889", + "unicode_decimal": 59529 + }, + { + "icon_id": "23472261", + "name": "工作流icon", + "font_class": "gongzuoliuicon", + "unicode": "e88a", + "unicode_decimal": 59530 + }, + { + "icon_id": "23472262", + "name": "动态icon", + "font_class": "dongtaiicon", + "unicode": "e88b", + "unicode_decimal": 59531 + }, + { + "icon_id": "23472263", + "name": "默认点赞_icon", + "font_class": "morendianzan_icon", + "unicode": "e88e", + "unicode_decimal": 59534 + }, + { + "icon_id": "23472265", + "name": "目录icon", + "font_class": "muluicon", + "unicode": "e894", + "unicode_decimal": 59540 + }, + { + "icon_id": "23472267", + "name": "设 置", + "font_class": "a-shezhi", + "unicode": "e899", + "unicode_decimal": 59545 + }, + { + "icon_id": "23472268", + "name": "文件", + "font_class": "wenjian5", + "unicode": "e89a", + "unicode_decimal": 59546 + }, + { + "icon_id": "23472269", + "name": "提交icon", + "font_class": "tijiaoicon", + "unicode": "e89e", + "unicode_decimal": 59550 + }, + { + "icon_id": "23472270", + "name": "默认关注_ICON", + "font_class": "morenguanzhu_ICON", + "unicode": "e89f", + "unicode_decimal": 59551 + }, + { + "icon_id": "23472271", + "name": "文件夹", + "font_class": "wenjianjia3", + "unicode": "e8a2", + "unicode_decimal": 59554 + }, + { + "icon_id": "23472272", + "name": "下拉按钮", + "font_class": "xialaanniu1", + "unicode": "e8a4", + "unicode_decimal": 59556 + }, + { + "icon_id": "23472276", + "name": "左滑icon", + "font_class": "zuohuaicon", + "unicode": "e8b5", + "unicode_decimal": 59573 + }, + { + "icon_id": "23472277", + "name": "master_icon", + "font_class": "master_icon", + "unicode": "e8b6", + "unicode_decimal": 59574 + }, + { + "icon_id": "23472278", + "name": "默认复刻_icon", + "font_class": "morenfuke_icon", + "unicode": "e8b7", + "unicode_decimal": 59575 + }, + { + "icon_id": "23472279", + "name": "wiki icon", + "font_class": "a-wikiicon", + "unicode": "e8b8", + "unicode_decimal": 59576 + }, + { + "icon_id": "23472280", + "name": "易修icon", + "font_class": "yixiuicon", + "unicode": "e8b9", + "unicode_decimal": 59577 + }, + { + "icon_id": "23436350", + "name": "缩放", + "font_class": "suofang", + "unicode": "e87f", + "unicode_decimal": 59519 + }, + { + "icon_id": "23436351", + "name": "放大icon", + "font_class": "fangdaicon", + "unicode": "e881", + "unicode_decimal": 59521 + }, + { + "icon_id": "23384231", + "name": "搜索_icon", + "font_class": "sousuo_icon1", + "unicode": "e873", + "unicode_decimal": 59507 + }, + { + "icon_id": "23384232", + "name": "欢迎_icon", + "font_class": "huanying_icon", + "unicode": "e878", + "unicode_decimal": 59512 + }, + { + "icon_id": "23384233", + "name": "文件夹", + "font_class": "wenjianjia2", + "unicode": "e879", + "unicode_decimal": 59513 + }, + { + "icon_id": "23384234", + "name": "删除icon", + "font_class": "shanchuicon1", + "unicode": "e87a", + "unicode_decimal": 59514 + }, + { + "icon_id": "23261798", + "name": "请求icon", + "font_class": "qingqiuicon", + "unicode": "e871", + "unicode_decimal": 59505 + }, + { + "icon_id": "23261799", + "name": "响应icon", + "font_class": "xiangyingicon", + "unicode": "e87c", + "unicode_decimal": 59516 + }, + { + "icon_id": "23144143", + "name": "多选选中", + "font_class": "duoxuanxuanzhong", + "unicode": "e88f", + "unicode_decimal": 59535 + }, + { + "icon_id": "23144144", + "name": "错误icon", + "font_class": "cuowuicon", + "unicode": "e890", + "unicode_decimal": 59536 + }, + { + "icon_id": "23144146", + "name": "成功icon", + "font_class": "chenggongicon", + "unicode": "e892", + "unicode_decimal": 59538 + }, + { + "icon_id": "23144147", + "name": "未选中响应icon", + "font_class": "weixuanzhongxiangyingicon", + "unicode": "e893", + "unicode_decimal": 59539 + }, + { + "icon_id": "23144149", + "name": "必填icon", + "font_class": "bitianicon", + "unicode": "e895", + "unicode_decimal": 59541 + }, + { + "icon_id": "23144151", + "name": "未选中项目标签icon", + "font_class": "weixuanzhongxiangmubiaoqianicon", + "unicode": "e897", + "unicode_decimal": 59543 + }, + { + "icon_id": "23144152", + "name": "列表icon", + "font_class": "liebiaoicon", + "unicode": "e898", + "unicode_decimal": 59544 + }, + { + "icon_id": "23144155", + "name": "未选中请求icon", + "font_class": "weixuanzhongqingqiuicon", + "unicode": "e89b", + "unicode_decimal": 59547 + }, + { + "icon_id": "23144158", + "name": "协作者管理icon", + "font_class": "xiezuozheguanliicon", + "unicode": "e8a1", + "unicode_decimal": 59553 + }, + { + "icon_id": "23144160", + "name": "选中分支icon", + "font_class": "xuanzhongfenzhiicon", + "unicode": "e8a3", + "unicode_decimal": 59555 + }, + { + "icon_id": "23144162", + "name": "选中基本设置icon", + "font_class": "xuanzhongjibenshezhiicon", + "unicode": "e8a5", + "unicode_decimal": 59557 + }, + { + "icon_id": "23144165", + "name": "选中项目标签icon", + "font_class": "xuanzhongxiangmubiaoqianicon", + "unicode": "e8aa", + "unicode_decimal": 59562 + }, + { + "icon_id": "23144167", + "name": "选中webhook icon", + "font_class": "a-xuanzhongwebhookicon", + "unicode": "e8af", + "unicode_decimal": 59567 + }, + { + "icon_id": "23046290", + "name": "shanchu_tc_icon", + "font_class": "shanchu_tc_icon", + "unicode": "e88c", + "unicode_decimal": 59532 + }, + { + "icon_id": "23046293", + "name": "wiki_icon", + "font_class": "wiki_icon", + "unicode": "e88d", + "unicode_decimal": 59533 + }, + { + "icon_id": "23046244", + "name": "导入模版_icon", + "font_class": "daorumoban_icon", + "unicode": "e86f", + "unicode_decimal": 59503 + }, + { + "icon_id": "23046252", + "name": "错误", + "font_class": "cuowu", + "unicode": "e872", + "unicode_decimal": 59506 + }, + { + "icon_id": "23046255", + "name": "更多_icon", + "font_class": "gengduo_icon", + "unicode": "e874", + "unicode_decimal": 59508 + }, + { + "icon_id": "23046258", + "name": "复层关闭_icon", + "font_class": "fucengguanbi_icon", + "unicode": "e875", + "unicode_decimal": 59509 + }, + { + "icon_id": "23046262", + "name": "复制_icon", + "font_class": "fuzhi_icon", + "unicode": "e876", + "unicode_decimal": 59510 + }, + { + "icon_id": "23046268", + "name": "删除icon", + "font_class": "shanchuicon", + "unicode": "e877", + "unicode_decimal": 59511 + }, + { + "icon_id": "23046273", + "name": "搜索_删除icon", + "font_class": "sousuo_shanchuicon", + "unicode": "e87b", + "unicode_decimal": 59515 + }, + { + "icon_id": "23046275", + "name": "搜索_icon", + "font_class": "sousuo_icon", + "unicode": "e87d", + "unicode_decimal": 59517 + }, + { + "icon_id": "23046276", + "name": "文档预览_icon", + "font_class": "wendangyulan_icon", + "unicode": "e87e", + "unicode_decimal": 59518 + }, + { + "icon_id": "23046278", + "name": "下拉按钮", + "font_class": "xialaanniu", + "unicode": "e880", + "unicode_decimal": 59520 + }, + { + "icon_id": "22906287", + "name": "二次确认_icon", + "font_class": "erciqueren_icon", + "unicode": "e867", + "unicode_decimal": 59495 + }, + { + "icon_id": "22906288", + "name": "选中ssh_icon", + "font_class": "xuanzhongssh_icon", + "unicode": "e868", + "unicode_decimal": 59496 + }, + { + "icon_id": "22906289", + "name": "未选中安全设置_icon", + "font_class": "weixuanzhonganquanshezhi_icon", + "unicode": "e869", + "unicode_decimal": 59497 + }, + { + "icon_id": "22906290", + "name": "未选中ssh_icon", + "font_class": "weixuanzhongssh_icon", + "unicode": "e86a", + "unicode_decimal": 59498 + }, + { + "icon_id": "22906291", + "name": "选中安全设置_icon", + "font_class": "xuanzhonganquanshezhi_icon", + "unicode": "e86b", + "unicode_decimal": 59499 + }, + { + "icon_id": "22906292", + "name": "删除_icon", + "font_class": "shanchu_icon", + "unicode": "e86c", + "unicode_decimal": 59500 + }, + { + "icon_id": "22906293", + "name": "列表ssh_icon", + "font_class": "liebiaossh_icon", + "unicode": "e86e", + "unicode_decimal": 59502 + }, { "icon_id": "17575494", "name": "file-submodule", diff --git a/public/css/iconfont.ttf b/public/css/iconfont.ttf index 96f61dcb8..484348baf 100644 Binary files a/public/css/iconfont.ttf and b/public/css/iconfont.ttf differ diff --git a/public/css/iconfont.woff b/public/css/iconfont.woff index 67761f2ca..bfdd0b9cb 100644 Binary files a/public/css/iconfont.woff and b/public/css/iconfont.woff differ diff --git a/public/css/iconfont.woff2 b/public/css/iconfont.woff2 index ca08e83e2..386dde005 100644 Binary files a/public/css/iconfont.woff2 and b/public/css/iconfont.woff2 differ diff --git a/src/App.js b/src/App.js index 77f5a53dd..89e6a195f 100644 --- a/src/App.js +++ b/src/App.js @@ -73,10 +73,18 @@ const EducoderLogin = Loadable({ loader: () => import('./modules/login/EducoderLogin'), loading: Loading, }) +const Search = Loadable({ + loader: () => import('./modules/search/'), + loading: Loading, +}) +const WikiPreview = Loadable({ + loader: () => import('./forge/Wiki/Preview'), + loading: Loading, +}) const ProjectIndex = Loadable({ - loader: () => import("./forge/Main/Index"), - loading: Loading, + loader: () => import("./forge/Index"), + loading: Loading, }); class App extends Component { constructor(props) { @@ -190,9 +198,16 @@ class App extends Component { this.Modifyloginvalue()}> - + + {/* wiki预览 */} + { + return () + } + } /> + {/*项目*/} {/*404*/} + + {/* 查询 */} + + + {/* 个人主页 */} import('../DevOps/Index'), loading: Loading, -}) +}); +const Wiki = Loadable({ + loader: () => import('../Wiki/Index'), + loading: Loading, +}); +const WikiEdit = Loadable({ + loader: () => import('../Wiki/EditWiki'), + loading: Loading, +}); /** * permission:Manager:管理员,Reporter:报告人员(只有读取权限),Developer:开发人员(除不能设置仓库信息外) */ @@ -151,6 +159,8 @@ function checkPathname(projectsId,owner,pathname){ name="devops" }else if(url.indexOf(`/source`)>-1){ name="source" + }else if(url.indexOf(`/wiki`)>-1){ + name="wiki" } } return name; @@ -565,6 +575,24 @@ class Detail extends Component { () => () } > + {/* wiki新增文件 */} + () + } + > + {/* wiki编辑文件 */} + () + } + > + {/* wiki */} + () + } + > {/* 工作流 */} 0 && projectDetail ?
    { - menuName.map((item,key)=>{ + Array.isArray(menuName)&& menuName.map((item,key)=>{ return( - + { item.menu_name === "home" &&
  • @@ -65,6 +65,15 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
  • :"" } + { + item.menu_name === "wiki" && +
  • + + + Wiki + +
  • + } { item.menu_name === "devops" && platform ?
  • diff --git a/src/forge/Settings/Setting.js b/src/forge/Settings/Setting.js index 5b4f07c29..5cd1bbc45 100644 --- a/src/forge/Settings/Setting.js +++ b/src/forge/Settings/Setting.js @@ -12,6 +12,7 @@ const menu = [ {name:"代码库",index:"code"}, {name:"易修 (Issue)",index:"issues"}, {name:"合并请求",index:"pulls"}, + {name:"Wiki",index:"wiki"}, {name:"工作流(beta版)",index:"devops"}, // {name:"资源库",index:"resources"}, {name:"里程碑",index:"versions"}, diff --git a/src/forge/Wiki/EditWiki.jsx b/src/forge/Wiki/EditWiki.jsx new file mode 100644 index 000000000..633bf02f8 --- /dev/null +++ b/src/forge/Wiki/EditWiki.jsx @@ -0,0 +1,223 @@ +import React, { useEffect, useCallback, useState } from 'react'; +import { Button, Checkbox, Form, Icon, Radio, Input, message } from 'antd'; +import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor"; +import DelModal from './components/ModalFun'; +import { weekModal, monthModal } from './components/config'; +import { getWiki, wikiPages, addWiki, updateWiki } from './api'; +import './Index.scss'; + + +export default Form.create()(({ form, history, showNotification, projectDetail, match, project }) => { + // const permission = projectDetail && projectDetail.permission !== "Reporter"; + const permission = projectDetail && projectDetail.permission && projectDetail.permission !== "Reporter"; + + const { getFieldDecorator, validateFields, setFieldsValue } = form; + const [fileArrInit, setFileArrInit] = useState(null); + let projectsId = match.params.projectsId; + let owner = match.params.owner; + + let wikiName = history.location.pathname.split('/').pop(); + if (wikiName === 'add') { + wikiName = ''; + } + + const [content, setContent] = useState(undefined); + const [modal, setModal] = useState(false); + const [modalType, setModalType] = useState(); + + + useEffect(() => { + wikiName && getWiki({ + owner, + repo: projectsId, + pagename: wikiName, + projectId: project.id + }).then(res => { + if (res && res.data) { + setContent(res.data.md_content); + setFieldsValue({ + name: res.data.name, + content: res.data.md_content, + }); + } + }); + }, [owner, wikiName]); + + // 加载wiki列表 + useEffect(() => { + project && wikiPages({ + owner: owner, + repo: projectsId, + projectId: project.id + }).then(res => { + if (res && res.message === "200" && Array.isArray(res.data)) { + setFileArrInit(res.data); + } else { + setFileArrInit([]); + } + }); + }, [project]); + + const helper = useCallback( + (label, name, rules, widget, initialValue, rightComponent) => ( + + {getFieldDecorator(name, { rules, initialValue, validateFirst: true, })(widget)} + {rightComponent} + + ), []); + + + function onContentChange(value) { + setContent(value); + setFieldsValue({ + content: value + }); + }; + + // 保存wiki文件,包括新增和修改 + function saveFile() { + validateFields((err, values) => { + if (!err) { + let regEn = /[\[\]`\/:*?''<>|%-+_]/g; + if (regEn.test(values.name)) { + message.error('文件名不能有特殊字符'); + return; + } + if (wikiName) { + updateWiki({ + owner, + repo: projectsId, + projectId: project.id, + pagename: wikiName, + ...values, + commit_message: '', + }).then(res => dealRes(res)); + } else { + if (Array.isArray(fileArrInit)) { + for (const item of fileArrInit) { + if (item.name === values.name) { + message.error('不能与已有文件标题相同'); + return false; + } + } + } + addWiki({ + owner, + repo: projectsId, + projectId: project.id, + pagename: values.name, + ...values, + commit_message: '', + }).then(res => dealRes(res)); + } + } + }) + } + + function dealRes(res) { + if (res && res.message === "200") { + showNotification("操作成功"); + goBack(); + } else if (res && res.message === "500") { + message.error('请检查格式是否正确或文件名是否重复'); + } else { + showNotification(res.message || "操作失败"); + } + } + + function goBack() { + history.push(`/projects/${owner}/${projectsId}/wiki`); + } + + function changeModal(e) { + setModal(e.target.checked); + if (!e.target.checked) { + setModalType(); + } + } + + function changeModalType(e) { + let value = e.target.value; + if (!content) { + setModalContent(value); + return; + } + DelModal({ + title: '添加模版', + contentTitle: `您确定要添加“${value}”模板吗`, + content: `此操作会将“${value}”模板替换编辑栏内所有内容,请确认以防文件的丢失`, + okText: '确认添加', + onOk: () => { + setModalType(value); + setModal(true); + setModalContent(value); + } + }); + } + + function setModalContent(value) { + if (value === '周报') { + setContent(weekModal); + setFieldsValue({ + content: weekModal + }); + } else if (value === '月报') { + setContent(monthModal); + setFieldsValue({ + content: monthModal + }); + } + } + + + return ( +
    +
    + Wiki 编辑页面 +
    + +
    +

    标题

    + {helper( + "", + "name", + [ + { required: true, message: "请输入标题" }, + // { pattern: /[^`\[\]\/:*?''<>|%-+_]/g, message: '不允许部分特殊字符' } + ], + + )} + + + + {getFieldDecorator('content', { + rules: [{ required: true, message: "请输入wiki内容" }], + validateFirst: true + })()} + + + 添加模版 + + + 周报 + 月报 + + +
    + + {permission && } +
    + + ) +}) \ No newline at end of file diff --git a/src/forge/Wiki/Index.jsx b/src/forge/Wiki/Index.jsx new file mode 100644 index 000000000..ed5c48996 --- /dev/null +++ b/src/forge/Wiki/Index.jsx @@ -0,0 +1,298 @@ +import React, { useEffect, useCallback, useState } from 'react'; +import { Button, Dropdown, Icon, Input, Menu, Tooltip, Select, Upload, message, Spin } from 'antd'; +import { getImageUrl, timeAgo } from 'educoder'; +import cookie from 'react-cookies'; +// import Loading from "../../Loading"; +import DelModal from './components/ModalFun'; +import Welcome from './Welcome'; +import { wikiPages, getWiki, deleteWiki } from './api'; +import { httpUrl, TokenKey } from './fetch'; +import './Index.scss'; +import { isArray } from 'lodash'; +const Search = Input.Search; +const InputGroup = Input.Group; +const { Option } = Select; + +export default (props) => { + const { match, current_user, history, showNotification, project, projectDetail } = props; + // const permission = projectDetail && projectDetail.permission !== "Reporter"; + const permission = projectDetail && projectDetail.permission && projectDetail.permission !== "Reporter"; + + let projectsId = match.params.projectsId; + let owner = match.params.owner; + + console.log(project); + + const [fileArrInit, setFileArrInit] = useState(null); + const [checkItem, setCheckItem] = useState({}); + const [itemDetail, setItemDetail] = useState({}); + + const [fileArr, setFileArr] = useState([]); + const [reload, setReload] = useState(); + + const [urlType, setUrlType] = useState('HTTPS'); + + // 加载wiki列表 + useEffect(() => { + project && wikiPages({ + owner: owner, + repo: projectsId, + projectId: project.id + }).then(res => { + if (res && res.message === "200" && isArray(res.data)) { + setFileArr(res.data); + setFileArrInit(res.data); + if (res.data.length) { + setCheckItem(res.data[0]); + }; + } else { + setFileArr([]); + setFileArrInit([]); + } + }); + }, [project, reload]) + + // 加载单个wiki详情,参数尽量用驼峰,此处由于后端太麻烦所以不标准 + useEffect(() => { + project && checkItem.name && getWiki({ + owner: owner, + repo: projectsId, + pagename: checkItem.name, + projectId: project.id + }).then(res => { + if (res && res.message === "200") { + setItemDetail(res.data); + } else { + showNotification("加载失败") + } + }); + }, [project, checkItem]); + + function changeSearchValue(e) { + let value = e.target.value; + let newFileArr = []; + for (const item of fileArrInit) { + if (item.name.indexOf(value) > -1) { + newFileArr.push(item); + } + } + setFileArr(newFileArr); + } + + // 删除wiki模态框 + function deleteFileModal(e, item) { + e.stopPropagation(); + DelModal({ + title: '删除页面', + contentTitle: `您确定要删除“${item.name}”此页面吗?`, + content: '此操作将删除该页面,请进行确认以防文件的丢失。', + onOk: () => { + deleteWiki({ + owner: owner, + repo: projectsId, + pagename: item.name, + projectId: project.id + }).then(res => { + if (res && res.message === "200") { + message.success('删除成功'); + setReload(Math.random()); + } else { + message.error('删除失败'); + } + }); + } + }); + } + + + function goUser(login) { + window.location.href = `/users/${login}`; + } + + // 复制链接 + const copyUrl = useCallback(() => { + let wikiUrl = document.getElementById("wikiUrl"); + wikiUrl.select(); + if (document.execCommand('copy')) { + document.execCommand('copy'); + } + message.success('复制成功'); + wikiUrl.blur(); + }, []) + + function addFile() { + history.push(`/projects/${owner}/${projectsId}/wiki/add`); + } + + function goEdit() { + history.push(`/projects/${owner}/${projectsId}/wiki/edit/${encodeURI(checkItem.name)}`); + } + + function preview() { + window.open(`/projects/${owner}/${projectsId}/wiki/preview/${encodeURI(project.name)}/${project.id}`); + } + + // 支持 Markdown,Html,Pdf格式文件 + const menu = ( + + { downloadWiki('markdown') }}> + Markdown + + { downloadWiki('html') }}> + HTML + + { downloadWiki('pdf') }}> + PDF + + + ); + + function downloadWiki(type) { + window.open(`${httpUrl}/api/wikiExport/wikiExport-wrapper?repoName=${projectsId}&owner=${owner}&type=${type}&projectName=${project.name}&projectId=${project.id}`); + } + + function beforeUpload(file) { + if (!['md', 'txt'].includes(file.name.split('.').pop())) { + message.error('只能上传md、txt文件'); + return false; + } + + let regEn = /[\[\]`\/:*?''<>|%-+_]/g; + if (regEn.test(file.name)) { + message.error('文件名不能有特殊字符'); + return; + } + + for (const item of fileArrInit) { + if (item.name === file.name) { + message.error('不能上传与已有文件相同文件名的文件'); + return false; + } + } + const isLt100M = file.size / 1024 / 1024 < 100; + if (!isLt100M) { + showNotification(`文件大小必须小于${100}MB!`); + } + return isLt100M; + } + + const uploadProps = { + name: 'multipartFile', + withCredentials: true, + action: `${httpUrl}/api/wikiExport/uploadWiki/${owner}/${projectsId}/${project && project.id}`, //?token=${sessionStorage.taskToken} + showUploadList: false, + headers: { + Authorization: cookie.load(TokenKey) || sessionStorage.taskToken, + }, + beforeUpload: beforeUpload, + onChange(info) { + if (info.file.status === 'uploading') { + console.log(info.file, info.fileList); + } + if (info.file.status === 'done') { + if (info.file.response.message === '200') { + message.success(`${info.file.name} 上传成功`); + setReload(Math.random()); + } else if (info.file.response.message === '500') { + let data = JSON.parse(info.file.response.data); + message.error(data && data.message ? data.message : '文件上传失败'); + } else { + message.error('文件上传失败'); + } + } else if (info.file.status === 'error') { + message.error(`${info.file.name} 上传失败`); + } + }, + }; + + return ( + < Spin spinning={!fileArrInit} className="opacitySpin"> + {fileArrInit && fileArrInit.length ? +
    +
    + + + { + permission ? + + : "Wiki文档" + } + +
    + { + permission && + + + + + + } + + + + +
    +
    + +
    +
    +
    + + + { + fileArr.map(item => { + return
    +
    { setCheckItem(item) }}> +
    + + {item.name} +
    + {permission && { deleteFileModal(e, item) }}>} +
    +
    + }) + } +
    + + + {checkItem.wiki_clone_link && + + + + + + } + +
    + +
    +
    +
    +

    {checkItem.name}

    + { goUser(current_user.login) }}> + {itemDetail.image_url && 头像} + {checkItem.commit ? checkItem.commit.author.name : ''} + + 上次修改于{checkItem.commit && timeAgo(checkItem.commit.author.when)} +
    + {permission && } +
    + +
    +
    +
    +
    + : + + } + + ) +} diff --git a/src/forge/Wiki/Index.scss b/src/forge/Wiki/Index.scss new file mode 100644 index 000000000..c571da25f --- /dev/null +++ b/src/forge/Wiki/Index.scss @@ -0,0 +1,381 @@ +$wikiColor: #466aff; +$primaryBtnHover: #6482ff; +body { + width: 100% !important; +} +.ant-spin-nested-loading > div > .ant-spin.opacitySpin{ + max-height: 100vh; + background: rgba(255,255,255,1); +} +.wiki-main { + width: 1200px; + min-height: 400px; + margin: 20px auto; + + .ant-btn-primary { + background-color: $wikiColor; + border-color: $wikiColor; + &:hover, + &:focus, + &:active { + background-color: $primaryBtnHover; + } + } + + .ant-btn-default:hover, + .ant-btn-default:active, + .ant-btn-default:focus { + background: #f3f4f6; + color: #333; + border-color: #d0d0d0; + } + + .wiki-head { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + height: 64px; + background: #fafcff; + box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.13); + border-radius: 4px; + border-bottom-left-radius: 0; + .ant-btn .anticon { + margin: 0 -3px 0 0; + } + } + + .head-title { + font-size: 20px; + color: #05101a; + line-height: 30px; + font-weight: 500; + + .anticon-right { + color: #666; + font-size: 0.9rem; + } + } + + .back-wiki { + color: $wikiColor; + cursor: pointer; + &:hover { + color: $primaryBtnHover; + } + } + + .head-log-middle { + width: 3rem; + height: 3rem; + margin-right: 0.35rem; + border-radius: 50%; + } + + .head-log-small { + width: 1.25rem; + height: 1.25rem; + margin-right: 0.35rem; + border-radius: 50%; + } + + .user-box { + font-size: 12px; + font-family: "PingFangSC-Medium"; + color: $wikiColor; + cursor: pointer; + &:hover { + color: $primaryBtnHover; + } + .head-log-small { + position: relative; + top: -2px; + } + } + + .time-ago { + font-size: 12px; + color: #333; + letter-spacing: 0; + line-height: 17px; + font-weight: 400; + font-family: "PingFangSC-Regular"; + } + + .has-error .ant-form-explain, + .has-error .ant-form-split { + position: absolute; + } + .wiki-nav { + max-height: 60vh; + .wiki-search { + padding: 0 14px; + .ant-input { + padding-left: 30px; + } + .ant-input-suffix { + left: 26px; + right: auto; + } + &:hover .ant-input, + &:focus .ant-input { + border-color: $wikiColor !important; + } + } + } + + .wiki-nav-parent { + width: 260px; + flex: none; + } + + .ant-form-item-children .ant-input:hover { + border-color: $wikiColor !important; + } + + .ant-checkbox-checked .ant-checkbox-inner { + background-color: $wikiColor; + border-color: $wikiColor; + } + .ant-radio-checked .ant-radio-inner, + .ant-radio-checked::after { + border-color: $wikiColor; + } + + .ant-radio-inner::after { + background-color: $wikiColor; + } + + .ant-radio-group { + display: block; + margin: 10px 0 0 30px; + } + + .ant-radio-wrapper:hover .ant-radio, + .ant-radio:hover .ant-radio-inner, + .ant-radio-input:focus + .ant-radio-inner { + border-color: $wikiColor; + } +} + +#wikiUrl:focus { + border-right: 1px solid #d9d9d9 !important; +} + +.wiki-body { + display: flex; +} + +.wiki-content { + flex: auto; + width: 75%; +} + +.wiki-content-detail { + padding: 0 20px; + word-break: break-all; +} + +.ant-input-group.ant-input-group-compact.copy-url { + display: flex; + margin-top: 20px; + .ant-select-selection__rendered { + margin: 0 14px 0 5px; + width: 3rem; + font-size: 12px; + } + .ant-select-arrow { + right: 4px; + } + .ant-input { + font-size: 12px; + font-family: "PingFangSC-Regular"; + color: #666; + letter-spacing: 0; + font-weight: 400; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + word-break: break-all; + } + + .copy-svg { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 5px; + background: #fff; + font-size: 1rem !important; + border: 1px solid #d9d9d9; + border-left: 0; + color: $wikiColor; + cursor: pointer; + } +} + +.wiki-url-type { + .ant-select-dropdown-menu-item { + font-size: 12px; + } +} + +.wiki-nav { + min-height: 300px; + padding: 20px 0; + background: #ffffff; + border: 1px solid rgba(153, 153, 153, 0.22); + overflow-y: scroll; + flex: none; + color: #333; +} + +.wiki-nav-title { + display: flex; + justify-content: space-between; + align-items: center; + height: 50px; + padding: 0 10px 0 10px; + font-size: 14px; + letter-spacing: 0; + font-weight: 400; + font-family: "PingFangSC-Regular"; + border-bottom: 1px solid #eee; + line-height: 16px; + cursor: pointer; + + .delete-title-icon { + display: none; + } + + &:hover { + background-color: #fbfbfb; + .delete-title-icon { + display: inline-block; + } + } +} + +.wiki-nav-title-parent { + padding: 0 14px; + &:hover { + background: #fbfbfb; + } +} + +.wiki-nav-title.active { + color: $wikiColor; +} + +.wiki-content-head { + margin: 20px 0 20px 20px; + padding: 0 20px 20px 0; + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid #eee; +} + +.wiki-content-head-left { + width: 90%; +} + +.nav-title-left { + display: inline-flex; + max-width: 90%; + svg { + margin-right: 0.5rem; + flex: none; + } + .nav-title-left-text { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } +} + +.wiki-detail-title { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +// 预览页面样式文件 +.wiki-preview { + overflow-y: scroll; + height: 100%; + .wiki-body { + width: 90%; + } + .ant-btn-primary { + background-color: $wikiColor; + border-color: $wikiColor; + &:hover, + &:focus, + &:active { + background-color: $primaryBtnHover; + } + } + .preview-head { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 12rem 0 2rem; + width: 100%; + height: 80px; + background: rgb(39, 47, 76); + color: #fff; + } + + .preview-head-left { + display: inline-flex; + align-items: center; + font-size: 24px; + cursor: pointer; + + .icon-wendangyulan_icon { + font-size: 24px !important; + font-weight: 700; + } + } + + .preview-head-right { + display: flex; + + .copy-url { + margin-top: 0; + } + .copy-desc { + width: 6rem; + padding-top: 1px; + } + } + + .wiki-nav-title { + padding: 0 10px 0 40px; + } + .wiki-nav-title.active { + background-color: #f3f4f6; + } + + .wiki-content-head { + padding: 10px 20px 10px 20px; + } + + .wiki-nav { + padding: 20px 0; + width: 20vw; + border-bottom: 0; + height: 80vh; + } + .wiki-content-detail { + padding: 0 40px; + img { + max-width: 100%; + } + } + + .ant-btn:hover { + background: #f3f4f6; + color: #333; + border-color: #d0d0d0; + } +} diff --git a/src/forge/Wiki/Preview.jsx b/src/forge/Wiki/Preview.jsx new file mode 100644 index 000000000..20645246a --- /dev/null +++ b/src/forge/Wiki/Preview.jsx @@ -0,0 +1,157 @@ +import React, { useEffect, useCallback, useState } from 'react'; +import { Input, Button, Tooltip, Select, Dropdown, Icon, Menu, message } from 'antd'; +import { wikiPages, getWiki, } from './api'; +import { httpUrl } from './fetch'; +import './Index.scss'; +const InputGroup = Input.Group; +const { Option } = Select; + +export default (props) => { + + const { match, history, showNotification, project, projectDetail } = props; + const permission = projectDetail && projectDetail.permission && projectDetail.permission !== "Reporter"; + + let projectsId = match.params.projectsId; + let owner = match.params.owner; + + let projectName = match.params.projectName; + let projectId = match.params.projectId; + + console.log('projectName:'); + console.log(projectName); + + const [checkItem, setCheckItem] = useState({}); + const [itemDetail, setItemDetail] = useState({}); + + const [fileArr, setFileArr] = useState([]); + const [urlType, setUrlType] = useState('HTTPS'); + + useEffect(() => { + projectsId && wikiPages({ + owner: owner, + repo: projectsId, + projectId: projectId, + }).then(res => { + if (res && res.message === "200") { + setFileArr(res.data); + if (res.data.length) { + setCheckItem(res.data[0]); + }; + } else { + showNotification("加载失败") + } + }); + }, [project]) + + + useEffect(() => { + projectsId && checkItem.name && getWiki({ + owner: owner, + repo: projectsId, + pagename: checkItem.name, + projectId: projectId, + }).then(res => { + if (res && res.message === "200") { + setItemDetail(res.data); + } else { + showNotification("加载失败") + } + }); + }, [project, checkItem]); + + const copyUrl = useCallback(() => { + let wikiUrl = document.getElementById("wikiUrl"); + wikiUrl.select(); + if (document.execCommand('copy')) { + document.execCommand('copy'); + } + message.success('复制成功'); + wikiUrl.blur(); + }, []); + + function goEdit() { + history.push(`/projects/${owner}/${projectsId}/wiki/edit/${checkItem.name}`); + } + + function goBack() { + history.push(`/projects/${owner}/${projectsId}/wiki`); + } + + // 支持 Markdown,Html,Pdf格式文件 + const menu = ( + + { downloadWiki('markdown') }}> + Markdown + + { downloadWiki('html') }}> + HTML + + { downloadWiki('pdf') }}> + PDF + + + ); + + function downloadWiki(type) { + window.open(`${httpUrl}/api/wikiExport/wikiExport-wrapper?repoName=${projectsId}&owner=${owner}&type=${type}&projectName=${projectName}&projectId=${projectId}`); + } + + + return ( +
    +
    +
    + + {projectName} +
    +
    + 克隆地址 + { + checkItem.wiki_clone_link && + + + + + + + } + + + + +
    +
    + + +
    +
    + { + fileArr.map(item => { + return
    { setCheckItem(item) }}> + + + {item.name} + +
    + }) + } + +
    + +
    +
    +

    {checkItem.name}

    + {permission && } +
    + +
    +
    +
    + + +
    + ) +} \ No newline at end of file diff --git a/src/forge/Wiki/Welcome/index.jsx b/src/forge/Wiki/Welcome/index.jsx new file mode 100644 index 000000000..78cd34e45 --- /dev/null +++ b/src/forge/Wiki/Welcome/index.jsx @@ -0,0 +1,50 @@ +import React from 'react'; +import { Button } from 'antd'; +// import { addWiki } from '../api'; +import './index.scss'; + +export default ({ project, isManager, history, showNotification, match, reloadList }) => { + + let projectsId = match.params.projectsId; + let owner = match.params.owner; + + // function addFile() { + // addWiki({ + // owner, + // repo: projectsId, + // pagename: 'Home', + // name: 'Home', + // content: 'Welcome to the wiki!', + // commit_message: '', + // }).then(res => { + // if (res.message === "200") { + // reloadList(Math.random()); + // showNotification("创建成功"); + // } else { + // showNotification("创建失败"); + // } + // }); + // } + + function addFile() { + history.push(`/projects/${owner}/${projectsId}/wiki/add`); + } + + return ( +
    + +

    欢迎使用  + + {project && project.name} + +  Wiki

    +

    Wiki主要是您项目的产品设计、文档描述、注释等等

    +
    + + { + isManager ? + :

    该项目暂时没有创建Wiki

    + } +
    + ) +} \ No newline at end of file diff --git a/src/forge/Wiki/Welcome/index.scss b/src/forge/Wiki/Welcome/index.scss new file mode 100644 index 000000000..b931fa622 --- /dev/null +++ b/src/forge/Wiki/Welcome/index.scss @@ -0,0 +1,55 @@ +.welcome-main { + display: flex; + flex-flow: column nowrap; + justify-content: center; + align-items: center; + width: 1200px; + min-height: 400px; + padding: 20px; + margin: 20px auto; + background: rgba(250, 252, 255, 1); + font-family: "PingFangSC-Medium"; + border-radius: 4px; + border: 1px solid rgba(42, 97, 255, 0.23); + + .icon-huanying_icon { + font-size: 48px !important; + font-weight: 700; + } + + .welcome-title { + display: inline-flex; + align-items: center; + margin: 10px 0; + font-size: 26px; + color: #333333; + font-weight: 500; + } + + .wiki-title { + display: inline-block; + max-width: 20em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .welcome-content { + font-size: 14px; + color: #333333; + font-weight: 400; + } + + .wiki-line { + margin: 50px 0 40px; + width: 400px; + height: 1px; + background: #eeeeee; + } + + .welcome-des { + font-size: 16px; + color: #333333; + font-weight: 500; + } +} diff --git a/src/forge/Wiki/api.js b/src/forge/Wiki/api.js new file mode 100644 index 000000000..353383221 --- /dev/null +++ b/src/forge/Wiki/api.js @@ -0,0 +1,48 @@ +import fetch from './fetch'; +// import { notification } from 'antd'; + +// 获取wiki列表 +export function wikiPages(params) { + return fetch({ + url: '/api/wiki/wikiPages', + method: 'get', + params + }); +} + +// 获取单个wiki +export function getWiki(params) { + return fetch({ + url: '/api/wiki/getWiki', + method: 'get', + params + }); +} + +//新增wiki +export function addWiki(data) { + return fetch({ + url: '/api/wiki/createWiki', + method: 'post', + data: data + }); +} + +//更新wiki +export function updateWiki(data) { + return fetch({ + url: '/api/wiki/updateWiki', + method: 'PUT', + data: data + }); +} + +//删除wiki +export function deleteWiki(data) { + return fetch({ + url: '/api/wiki/deleteWiki', + method: 'DELETE', + data, + }); +} + diff --git a/src/forge/Wiki/components/FolderTree/index.js b/src/forge/Wiki/components/FolderTree/index.js new file mode 100644 index 000000000..bbcdb3906 --- /dev/null +++ b/src/forge/Wiki/components/FolderTree/index.js @@ -0,0 +1,244 @@ +import * as React from 'react'; +import classNames from 'classnames'; +import { Icon, Tree } from 'antd'; +import omit from 'omit.js'; +import debounce from 'lodash/debounce'; +import { conductExpandParent, convertTreeToEntities } from 'rc-tree/lib/util'; +import { polyfill } from 'react-lifecycles-compat'; +import { ConfigConsumer } from '../../../../../node_modules/antd/lib/config-provider'; +import { + calcRangeKeys, + getFullKeyList, + convertDirectoryKeysToNodes, + getFullKeyListByTreeData, +} from '../../../../../node_modules/antd/lib/tree/util'; + +import { FolderSvg, FolderExpandSvg, FileSvg } from '../../Svg'; +import './index.scss'; + + +function getIcon(props) { + // console.log(props); + // console.log(props.expanded); + const { isLeaf, expanded ,selected} = props; + if (isLeaf) { + return ; + } + return expanded ? : + // return +} + +class DirectoryTree extends React.Component { + static defaultProps = { + showIcon: true, + expandAction: 'click', + }; + + static getDerivedStateFromProps(nextProps) { + const newState = {}; + if ('expandedKeys' in nextProps) { + newState.expandedKeys = nextProps.expandedKeys; + } + if ('selectedKeys' in nextProps) { + newState.selectedKeys = nextProps.selectedKeys; + } + return newState; + } + + // state: DirectoryTreeState; + + // tree: Tree; + + // onDebounceExpand: (event: React.MouseEvent, node: AntTreeNode) => void; + + // Shift click usage + // lastSelectedKey?: string; + + // cachedSelectedKeys?: string[]; + + constructor(props) { + super(props); + + const { + defaultExpandAll, + defaultExpandParent, + expandedKeys, + defaultExpandedKeys, + children, + } = props; + const { keyEntities } = convertTreeToEntities(children); + + // Selected keys + this.state = { + selectedKeys: props.selectedKeys || props.defaultSelectedKeys || [], + }; + + // Expanded keys + if (defaultExpandAll) { + if (props.treeData) { + this.state.expandedKeys = getFullKeyListByTreeData(props.treeData); + } else { + this.state.expandedKeys = getFullKeyList(props.children); + } + } else if (defaultExpandParent) { + this.state.expandedKeys = conductExpandParent( + expandedKeys || defaultExpandedKeys, + keyEntities, + ); + } else { + this.state.expandedKeys = expandedKeys || defaultExpandedKeys; + } + + this.onDebounceExpand = debounce(this.expandFolderNode, 200, { + leading: true, + }); + } + + onExpand = (expandedKeys, info) => { + const { onExpand } = this.props; + + this.setUncontrolledState({ expandedKeys }); + + // Call origin function + if (onExpand) { + return onExpand(expandedKeys, info); + } + + return undefined; + }; + + onClick = (event, node) => { + const { onClick, expandAction } = this.props; + + // Expand the tree + if (expandAction === 'click') { + this.onDebounceExpand(event, node); + } + + if (onClick) { + onClick(event, node); + } + }; + + onDoubleClick = (event, node) => { + const { onDoubleClick, expandAction } = this.props; + + // Expand the tree + if (expandAction === 'doubleClick') { + this.onDebounceExpand(event, node); + } + + if (onDoubleClick) { + onDoubleClick(event, node); + } + }; + + onSelect = (keys, event) => { + const { onSelect, multiple, children } = this.props; + const { expandedKeys = [] } = this.state; + const { node, nativeEvent } = event; + const { eventKey = '' } = node.props; + + const newState = {}; + + // We need wrap this event since some value is not same + const newEvent = { + ...event, + selected: true, // Directory selected always true + }; + + // Windows / Mac single pick + const ctrlPick = nativeEvent.ctrlKey || nativeEvent.metaKey; + const shiftPick = nativeEvent.shiftKey; + + // Generate new selected keys + let newSelectedKeys; + if (multiple && ctrlPick) { + // Control click + newSelectedKeys = keys; + this.lastSelectedKey = eventKey; + this.cachedSelectedKeys = newSelectedKeys; + newEvent.selectedNodes = convertDirectoryKeysToNodes(children, newSelectedKeys); + } else if (multiple && shiftPick) { + // Shift click + newSelectedKeys = Array.from( + new Set([ + ...(this.cachedSelectedKeys || []), + ...calcRangeKeys(children, expandedKeys, eventKey, this.lastSelectedKey), + ]), + ); + newEvent.selectedNodes = convertDirectoryKeysToNodes(children, newSelectedKeys); + } else { + // Single click + newSelectedKeys = [eventKey]; + this.lastSelectedKey = eventKey; + this.cachedSelectedKeys = newSelectedKeys; + newEvent.selectedNodes = [event.node]; + } + newState.selectedKeys = newSelectedKeys; + + if (onSelect) { + onSelect(newSelectedKeys, newEvent); + } + + this.setUncontrolledState(newState); + }; + + setTreeRef = (node) => { + this.tree = node; + }; + + expandFolderNode = (event, node) => { + const { isLeaf } = node.props; + + if (isLeaf || event.shiftKey || event.metaKey || event.ctrlKey) { + return; + } + + // Get internal rc-tree + const internalTree = this.tree.tree; + + // Call internal rc-tree expand function + // https://github.com/ant-design/ant-design/issues/12567 + internalTree.onNodeExpand(event, node); + }; + + setUncontrolledState = (state) => { + const newState = omit(state, Object.keys(this.props)); + if (Object.keys(newState).length) { + this.setState(newState); + } + }; + + renderDirectoryTree = ({ getPrefixCls }) => { + const { prefixCls: customizePrefixCls, className, ...props } = this.props; + const { expandedKeys, selectedKeys } = this.state; + + const prefixCls = getPrefixCls('tree', customizePrefixCls); + const connectClassName = classNames(`${prefixCls}-directory`, className); + + return ( + + ); + }; + + render() { + return {this.renderDirectoryTree}; + } +} + +polyfill(DirectoryTree); + +export default DirectoryTree; diff --git a/src/forge/Wiki/components/FolderTree/index.scss b/src/forge/Wiki/components/FolderTree/index.scss new file mode 100644 index 000000000..f74cfaf93 --- /dev/null +++ b/src/forge/Wiki/components/FolderTree/index.scss @@ -0,0 +1,61 @@ +.hide-file-icon.ant-tree.ant-tree-directory { + li span.ant-tree-switcher { + display: none !important; + } + + // li[role="treeitem"]:hover > span.ant-tree-switcher, + // li.ant-tree-treenode-selected > span.ant-tree-switcher { + // z-index: 1000; + // display: inline-block !important; + // } + + .ant-tree-node-content-wrapper{ + display: inline-flex; + width: 100%; + } + + .tree-title-icon{ + display: none; + } + + .ant-tree-node-content-wrapper:hover .tree-title-icon{ + transition: all 0.3s; + display: inline-block; + } + + &.ant-tree.ant-tree-directory + > li.ant-tree-treenode-selected + > span.ant-tree-node-content-wrapper::before, + &.ant-tree.ant-tree-directory + .ant-tree-child-tree + > li.ant-tree-treenode-selected + > span.ant-tree-node-content-wrapper::before { + background: #fff; + margin-top: -3px; + } + + &.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper::before, + &.ant-tree.ant-tree-directory + .ant-tree-child-tree + > li + span.ant-tree-node-content-wrapper::before { + margin-top: -3px; + } + + > li span.ant-tree-node-content-wrapper.ant-tree-node-selected, + .ant-tree-child-tree + > li + span.ant-tree-node-content-wrapper.ant-tree-node-selected { + color: #2a61ff; + } + + + + .ant-tree-title{ + display: inline-flex; + justify-content:space-between; + flex: auto; + } +} + + diff --git a/src/forge/Wiki/components/Login/index.jsx b/src/forge/Wiki/components/Login/index.jsx new file mode 100644 index 000000000..9574a9a51 --- /dev/null +++ b/src/forge/Wiki/components/Login/index.jsx @@ -0,0 +1,44 @@ +import React, { useState } from 'react'; +import * as ReactDOM from 'react-dom'; +import LoginDialog from '../../../../modules/login/LoginDialog'; +import './index.scss'; + +// 使用函数调用删除组件 +export default function DelModal(props) { + const div = document.createElement('div'); + document.body.appendChild(div); + + function destroy() { + const unmountResult = ReactDOM.unmountComponentAtNode(div); + if (unmountResult && div.parentNode) { + div.parentNode.removeChild(div); + } + } + + function render() { + /** + * Sync render blocks React event. Let's make this async. + */ + setTimeout(() => { + ReactDOM.render( + + , + div, + ); + }); + } + + render(); +} + +function MyLoginDialog({afterClose}) { + const [isRender, setIsRender] = useState(true); + return ( + {setIsRender(false);afterClose()}} + /> + ) +} + + diff --git a/src/forge/Wiki/components/Login/index.scss b/src/forge/Wiki/components/Login/index.scss new file mode 100644 index 000000000..13d160665 --- /dev/null +++ b/src/forge/Wiki/components/Login/index.scss @@ -0,0 +1,56 @@ +.delete-modal { + .ant-modal-header { + padding: 9px 24px; + background: #f8f8f8; + border-bottom: 1px solid #eee; + } + .ant-modal-title { + text-align: left; + } + .ant-modal-close { + top: 0px !important; + } + .ant-modal-close-x { + font-size: 24px; + } + .ant-modal-body { + text-align: center; + } + .delete-title { + display: flex; + justify-content: center; + align-items: center; + margin: 2rem 0 1rem !important; + font-size: 16px; + color: #333; + letter-spacing: 0; + line-height: 29px; + font-weight: 400; + } + .red-circle { + align-self: flex-start; + color: #ca0002; + font-size: 1.5rem !important; + } + .delete-descibe { + font-size: 14px; + color: #666; + line-height: 33px; + font-weight: 400; + } + .ant-modal-footer { + padding: 2rem 0; + text-align: center; + border: 0; + .ant-btn { + width: 6rem; + } + } + .foot-submit { + margin-left: 3rem; + color: #df0002; + &:hover { + border-color: #df0002; + } + } +} \ No newline at end of file diff --git a/src/forge/Wiki/components/ModalFun/index.jsx b/src/forge/Wiki/components/ModalFun/index.jsx new file mode 100644 index 000000000..661eca31b --- /dev/null +++ b/src/forge/Wiki/components/ModalFun/index.jsx @@ -0,0 +1,149 @@ +import React, { useState } from 'react'; +import * as ReactDOM from 'react-dom'; +import { Modal, Button } from 'antd'; +import './index.scss'; + +// 使用函数调用删除组件 +export default function DelModal(props) { + renderModal({ ...props, type: 'delete' }) +} + +export function confirmModal(props) { + renderModal({ ...props, type: 'confirm' }) +} + +function renderModal(props) { + const type = props.type; + const div = document.createElement('div'); + document.body.appendChild(div); + + function destroy() { + const unmountResult = ReactDOM.unmountComponentAtNode(div); + if (unmountResult && div.parentNode) { + div.parentNode.removeChild(div); + } + } + + function modalType(type) { + if (type === 'delete') { + return + } else if (type === 'confirm') { + return + } else { + return + } + } + + function render() { + /** + * Sync render blocks React event. Let's make this async. + */ + setTimeout(() => { + ReactDOM.render( + modalType(type), + div, + ); + }); + } + render(); +} + +// 真正的删除组件 +function DeleteModal({ + onCancel, + onOk, + title, + contentTitle, + content, + afterClose, + okText, + cancelText, +}) { + + const [visible, setVisible] = useState(true); + + function onCancelModal() { + setVisible(false); + onCancel && onCancel() + } + + function onSuccess() { + setVisible(false); + onOk && onOk(); + } + + return ( + + {cancelText||'取消'} + , + , + ]} + > +
    +

    + + {contentTitle}

    +

    {content}

    +
    +
    + ) +} + +// 选择组件 +function ConfirmModal({ + onCancel, + onOk, + title, + contentTitle, + content, + okText, + cancelText, + afterClose, +}) { + + const [visible, setVisible] = useState(true); + + function onCancelModal() { + setVisible(false); + onCancel && onCancel() + } + + function onSuccess() { + setVisible(false); + onOk && onOk(); + } + + return ( + + {cancelText||'取消'} + , + , + ]} + > +
    + {contentTitle &&

    {contentTitle}

    } +

    {content}

    +
    +
    + ) +} diff --git a/src/forge/Wiki/components/ModalFun/index.scss b/src/forge/Wiki/components/ModalFun/index.scss new file mode 100644 index 000000000..a598d2bf0 --- /dev/null +++ b/src/forge/Wiki/components/ModalFun/index.scss @@ -0,0 +1,56 @@ +.myself-modal { + .ant-modal-header { + padding: 9px 24px; + background: #f8f8f8; + border-bottom: 1px solid #eee; + } + .ant-modal-title { + text-align: left; + } + .ant-modal-close { + top: 0px !important; + } + .ant-modal-close-x { + font-size: 24px; + } + .ant-modal-body { + text-align: center; + } + .delete-title { + display: flex; + justify-content: center; + align-items: center; + margin: 2rem 0 1rem !important; + font-size: 16px; + color: #333; + letter-spacing: 0; + line-height: 29px; + font-weight: 400; + } + .red-circle { + align-self: flex-start; + color: #ca0002; + font-size: 1.5rem !important; + } + .delete-descibe { + font-size: 14px; + color: #666; + line-height: 33px; + font-weight: 400; + } + .ant-modal-footer { + padding: 2rem 0; + text-align: center; + border: 0; + .ant-btn { + width: 6rem; + } + } + .foot-submit { + margin-left: 3rem; + color: #df0002; + &:hover { + border-color: #df0002; + } + } +} \ No newline at end of file diff --git a/src/forge/Wiki/components/config.js b/src/forge/Wiki/components/config.js new file mode 100644 index 000000000..bda413390 --- /dev/null +++ b/src/forge/Wiki/components/config.js @@ -0,0 +1,29 @@ +import { httpUrl } from '../fetch'; + +export const editorConfig = { + placeholder: '请输入', + uploadImgServer: httpUrl + '/busiAttachments/upload', + uploadFileName: 'file', + uploadImgHeaders: { + 'X-Requested-With': 'XMLHttpRequest' + }, + excludeMenus: [ + 'list', + 'todo', + 'emoticon', + 'video' + ], + uploadImgHooks: { + // 图片上传并返回了结果,想要自己把图片插入到编辑器中 + customInsert: function (insertImgFn, result) { + // insertImgFn 可把图片插入到编辑器,传入图片 src ,执行函数即可 + if (result && result.data && result.data.id) { + insertImgFn(`${httpUrl}/busiAttachments/view/${result.data.id}`); + } + } + }, +} + + +export const weekModal="| 工作项目 | 本周工作计划 | 本周完成情况 |下周计划 | 待协同事项 |\n| ------------ | ------------ | ------------ | ------------ | ------------ |\n| | | | | |\n| | | | | |\n| | | | | |\n| | | | | |\n\n 备注:"; +export const monthModal="|工作项目 | 工作内容 | 项目进度情况 | 问题列表及解决方案| 下月工作计划 | 遗留未解决的问题 |\n| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |\n| | | | | | |\n| | | | | | |\n| | | | | | |\n| | | | | | |\n\n 月度总结:"; diff --git a/src/forge/Wiki/fetch.js b/src/forge/Wiki/fetch.js new file mode 100644 index 000000000..ccb9676a2 --- /dev/null +++ b/src/forge/Wiki/fetch.js @@ -0,0 +1,106 @@ +import { notification ,message} from 'antd'; +import axios from 'axios'; +import cookie from 'react-cookies'; +import Login from './components/Login'; + +let actionUrl = ''; +if (window.location.href.indexOf('localhost') > -1) { + // actionUrl = 'http://117.50.100.12:8008'; + // actionUrl = 'http://192.168.31.74:8081'; + actionUrl = "https://test-search.trustie.net"; +} else if(window.location.href.indexOf('testforgeplus')>-1){ + actionUrl = "https://test-search.trustie.net"; + // actionUrl = 'https://testforgeplus.trustie.net'; + axios.defaults.withCredentials = true; +}else if (window.location.href.indexOf('wiki-api') > -1) { + actionUrl = "https://wiki-api.trustie.net"; + axios.defaults.withCredentials = true; +} + +export const httpUrl = actionUrl; +export const TokenKey = 'autologin_trustie'; + +// 创建axios实例 +const service = axios.create({ + baseURL: httpUrl, + timeout: 10000, // 请求超时时间 +}); + +// request拦截器 +service.interceptors.request.use(config => { + if (cookie.load(TokenKey)) { + console.log(cookie.load(TokenKey)); + config.headers['Authorization'] = cookie.load(TokenKey); // 让每个请求携带自定义token 请根据实际情况自行修改 + } + if (window.location.port === "3007") { + // 模拟token为登录用户 + const taskToken = sessionStorage.taskToken; + if (config.url.indexOf('?') === -1) { + config.url = `${config.url}?token=${taskToken}`; + } else { + config.url = `${config.url}&token=${taskToken}`; + } + } + return config; +}, error => { + // Do something with request error + console.log(error); // for debug + // Promise.reject(error); +}); +// respone拦截器 +service.interceptors.response.use( + response => { + const res = response||{}; + if (res.status === 400) { + message.error(res.data.message || '操作失败'); + return Promise.reject('error'); + } + if (res.status === 401) { + message.error(res.data.message || '登录信息已过期'); + return Promise.reject('error'); + } + if (res.status === 403) { + message.error(res.data.message || '无权限!'); + return Promise.reject('error'); + } + if (res.status === 40001) { + notification.open({ + message: "提示", + description: '账户或密码错误!', + }); + return Promise.reject('error'); + } + if (response.status !== 200 && res.status !== 200) { + notification.open({ + message: "提示", + description: res.message, + }); + } else { + return response.data; + } + }, + error => { + console.log(error); + let res = error.response||{}; + if (res.status === 400) { + message.error(res.data.message || '操作失败'); + return Promise.reject('error'); + } + if (res.status === 401) { + message.error(res.data.message || '登录信息已过期'); + Login(); + return Promise.reject('error'); + } + if (res.status === 403) { + message.error(res.data.message || '无权限!'); + return Promise.reject('error'); + } + notification.open({ + message: "提示", + description: error.message, + }); + return Promise.reject(error); + } +); + +export default service;