From ec8b39c08dde9a2c921176a1e3d63806773b8986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B9=E8=AF=9A=E8=AF=9A?= Date: Mon, 19 Sep 2022 16:59:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BAexcel=20=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=94=B9=E4=B8=BA=E4=B8=AD=E6=96=87=20?= =?UTF-8?q?=E5=91=A8=E4=B8=80=E6=98=AF=E6=AF=8F=E5=91=A8=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 360 ++------------------------ package.json | 3 +- src/App.js | 3 +- src/charts/Customer_care_inchina.js | 176 +++++++------ src/charts/Customer_care_potential.js | 174 ++++++------- src/charts/Customer_care_regular.js | 176 +++++++------ src/charts/DatePickerCharts.js | 12 +- src/config.js | 4 +- src/stores/CustomerStore.js | 55 ++-- 9 files changed, 310 insertions(+), 653 deletions(-) diff --git a/package-lock.json b/package-lock.json index 91925e4..577aadb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,14 +10,14 @@ "dependencies": { "@ant-design/charts": "^1.4.2", "antd": "^4.22.6", - "babel-plugin-transform-decorators-legacy": "^1.3.5", "mobx": "^6.6.1", "mobx-react": "^7.5.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.3.0", "react-scripts": "5.0.1", - "web-vitals": "^2.1.4" + "web-vitals": "^2.1.4", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.18.11/xlsx-0.18.11.tgz" } }, "node_modules/@amap/amap-jsapi-loader": { @@ -5763,71 +5763,6 @@ "resolved": "https://registry.npmmirror.com/axobject-query/-/axobject-query-2.2.0.tgz", "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==" - }, - "node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmmirror.com/babel-jest/-/babel-jest-27.5.1.tgz", @@ -5938,14 +5873,6 @@ "node": ">= 8.9.0" } }, - "node_modules/babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmmirror.com/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -6049,21 +5976,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmmirror.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha512-AWj19x2aDm8qFQ5O2JcD6pwJDW1YdcnO+1b81t7gxrGjz5VHiUqeYWAR4h7zueWMalRelrQDXprv2FrY1dbpbw==" - }, - "node_modules/babel-plugin-transform-decorators-legacy": { - "version": "1.3.5", - "resolved": "https://registry.npmmirror.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", - "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", - "dependencies": { - "babel-plugin-syntax-decorators": "^6.1.18", - "babel-runtime": "^6.2.0", - "babel-template": "^6.3.0" - } - }, "node_modules/babel-plugin-transform-react-remove-prop-types": { "version": "0.4.24", "resolved": "https://registry.npmmirror.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", @@ -6129,75 +6041,6 @@ "babel-plugin-transform-react-remove-prop-types": "^0.4.24" } }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "node_modules/babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmmirror.com/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "bin": { - "babylon": "bin/babylon.js" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", @@ -6769,13 +6612,6 @@ "toggle-selection": "^1.0.6" } }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true - }, "node_modules/core-js-compat": { "version": "3.25.0", "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.25.0.tgz", @@ -9554,14 +9390,6 @@ "node": ">=0.10.0" } }, - "node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", @@ -10120,14 +9948,6 @@ "node": ">= 0.4" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/inversify": { "version": "5.1.1", "resolved": "https://registry.npmmirror.com/inversify/-/inversify-5.1.1.tgz", @@ -19045,6 +18865,18 @@ } } }, + "node_modules/xlsx": { + "version": "0.18.11", + "resolved": "https://cdn.sheetjs.com/xlsx-0.18.11/xlsx-0.18.11.tgz", + "integrity": "sha512-+q621V6l7SsX4c07IFLlW4f7HbblWrrNJMQmVobWKGPmIE7aFIkHFslclK1S75AEjk0L/Y0oupN/aroqONtIyg==", + "license": "Apache-2.0", + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -23576,58 +23408,6 @@ "resolved": "https://registry.npmmirror.com/axobject-query/-/axobject-query-2.2.0.tgz", "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" - } - } - }, "babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmmirror.com/babel-jest/-/babel-jest-27.5.1.tgz", @@ -23711,14 +23491,6 @@ } } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmmirror.com/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", - "requires": { - "babel-runtime": "^6.22.0" - } - }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -23800,21 +23572,6 @@ "@babel/helper-define-polyfill-provider": "^0.3.2" } }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmmirror.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha512-AWj19x2aDm8qFQ5O2JcD6pwJDW1YdcnO+1b81t7gxrGjz5VHiUqeYWAR4h7zueWMalRelrQDXprv2FrY1dbpbw==" - }, - "babel-plugin-transform-decorators-legacy": { - "version": "1.3.5", - "resolved": "https://registry.npmmirror.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", - "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", - "requires": { - "babel-plugin-syntax-decorators": "^6.1.18", - "babel-runtime": "^6.2.0", - "babel-template": "^6.3.0" - } - }, "babel-plugin-transform-react-remove-prop-types": { "version": "0.4.24", "resolved": "https://registry.npmmirror.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", @@ -23871,73 +23628,6 @@ "babel-plugin-transform-react-remove-prop-types": "^0.4.24" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmmirror.com/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==" - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmmirror.com/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", @@ -24419,11 +24109,6 @@ "toggle-selection": "^1.0.6" } }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, "core-js-compat": { "version": "3.25.0", "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.25.0.tgz", @@ -26582,11 +26267,6 @@ } } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", @@ -27032,14 +26712,6 @@ "side-channel": "^1.0.4" } }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, "inversify": { "version": "5.1.1", "resolved": "https://registry.npmmirror.com/inversify/-/inversify-5.1.1.tgz", @@ -33873,6 +33545,10 @@ "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "requires": {} }, + "xlsx": { + "version": "https://cdn.sheetjs.com/xlsx-0.18.11/xlsx-0.18.11.tgz", + "integrity": "sha512-+q621V6l7SsX4c07IFLlW4f7HbblWrrNJMQmVobWKGPmIE7aFIkHFslclK1S75AEjk0L/Y0oupN/aroqONtIyg==" + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz", diff --git a/package.json b/package.json index ebf9b81..8af6a14 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "react-dom": "^18.2.0", "react-router-dom": "^6.3.0", "react-scripts": "5.0.1", - "web-vitals": "^2.1.4" + "web-vitals": "^2.1.4", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.18.11/xlsx-0.18.11.tgz" }, "scripts": { "start": "react-scripts start", diff --git a/src/App.js b/src/App.js index 51bb257..4f1ef08 100644 --- a/src/App.js +++ b/src/App.js @@ -28,6 +28,7 @@ class App extends Component { const menu_items = [ {key: 1, label: 主页, icon: }, {key: 2, label: 订单数据, icon: ,}, + {key: 5, label: 仪表盘, icon: }, { key: 3, label: '客运', icon: , children: [ @@ -45,7 +46,7 @@ class App extends Component { {key: 41, label: 信用卡账单}, ] }, - {key: 5, label: 仪表盘, icon: }, + ]; diff --git a/src/charts/Customer_care_inchina.js b/src/charts/Customer_care_inchina.js index c4da4d1..e084691 100644 --- a/src/charts/Customer_care_inchina.js +++ b/src/charts/Customer_care_inchina.js @@ -1,5 +1,5 @@ import React, {useContext, useEffect} from 'react'; -import {Row, Col, Button, Divider, Table, Space, Radio} from 'antd'; +import {Row, Col, Button, Divider, Table, Space, Radio, Tooltip} from 'antd'; import { ContainerOutlined, SearchOutlined, @@ -13,6 +13,7 @@ import * as comm from "../utils/commons"; import * as config from "../config"; import SiteSelect from "../charts/SiteSelect"; import GroupSelect from "../charts/GroupSelect"; +import {utils, writeFileXLSX} from "xlsx"; const Customer_care_inchina = () => { @@ -48,14 +49,9 @@ const Customer_care_inchina = () => { - @@ -83,7 +79,7 @@ const Customer_care_inchina = () => { title: '成行率', dataIndex: 'SUCRate', key: 'SUCRate', - render: (text, record) => {text * 100}% + render: (text, record) => {Math.round(text * 100)}% }, { title: '毛利', @@ -96,91 +92,93 @@ const Customer_care_inchina = () => { key: 'PersonNum', }, ] - } size="small" pagination={false} rowKey={record => record.OrderNum} + } size="small" pagination={false} rowKey={record => record.ItemName} /> inchina_data.onChange_show_detail_table()}>{inchina_data.show_detail_table ? '隐藏列表' : '显示列表'} | - 导出excel - {inchina_data.show_detail_table ? - record.COLI_ID} - /> - : ''} + onClick={() => { + const wb = utils.table_to_book(document.getElementById("table_to_xlsx").getElementsByTagName('table')[0]); + writeFileXLSX(wb, "在华客人.xlsx"); + }}>导出excel +
{text == 1 ? '成行' : '未成行'}, + sorter: (a, b) => b.OrderState - a.OrderState, + }, + { + title: '毛利', + dataIndex: 'ML', + key: 'ML', + }, + { + title: '人数', + dataIndex: 'PersonNum', + key: 'PersonNum', + }, + { + title: '天数', + dataIndex: 'COLI_Days', + key: 'COLI_Days', + }, + { + title: '人天数', + dataIndex: 'CGI_PersonDays', + key: 'CGI_PersonDays', + }, + { + title: '走团日期', + dataIndex: 'COLI_OrderStartDate', + key: 'COLI_OrderStartDate', + }, + { + title: '小组', + dataIndex: 'Department', + key: 'Department', + }, + { + title: '老客户', + dataIndex: 'COLI_IsOld', + key: 'COLI_IsOld', + }, + { + title: '老客户推荐', + dataIndex: 'COLI_IsCusCommend', + key: 'COLI_IsCusCommend', + }, + { + title: '网站', + dataIndex: 'COLI_WebCode', + key: 'COLI_WebCode', + }, + { + title: '来源', + dataIndex: 'SourceType', + key: 'SourceType', + }, + { + title: '在华', + dataIndex: 'ZH', + key: 'ZH', + }, + ] + } size="small" + rowKey={record => record.COLI_ID} + /> diff --git a/src/charts/Customer_care_potential.js b/src/charts/Customer_care_potential.js index df88788..eb1c5de 100644 --- a/src/charts/Customer_care_potential.js +++ b/src/charts/Customer_care_potential.js @@ -1,5 +1,5 @@ import React, {useContext, useEffect} from 'react'; -import {Row, Col, Button, Divider, Table, Space, Radio} from 'antd'; +import {Row, Col, Button, Divider, Table, Space, Radio, Tooltip} from 'antd'; import { ContainerOutlined, SearchOutlined, @@ -13,6 +13,7 @@ import * as comm from "../utils/commons"; import * as config from "../config"; import SiteSelect from "../charts/SiteSelect"; import GroupSelect from "../charts/GroupSelect"; +import {utils, writeFileXLSX} from "xlsx"; const Customer_care_potential = () => { @@ -48,14 +49,9 @@ const Customer_care_potential = () => { - @@ -78,7 +74,7 @@ const Customer_care_potential = () => { title: '成行率', dataIndex: 'SUCRate', key: 'SUCRate', - render: (text, record) => {text * 100}% + render: (text, record) => {Math.round(text * 100)}% }, { title: '毛利', @@ -96,86 +92,88 @@ const Customer_care_potential = () => { potential_data.onChange_show_detail_table()}>{potential_data.show_detail_table ? '隐藏列表' : '显示列表'} | - 导出excel - {potential_data.show_detail_table ? -
record.COLI_ID} - /> - : ''} + onClick={() => { + const wb = utils.table_to_book(document.getElementById("table_to_xlsx").getElementsByTagName('table')[0]); + writeFileXLSX(wb, "潜力客户.xlsx"); + }}>导出excel +
{text == 1 ? '成行' : '未成行'}, + sorter: (a, b) => b.OrderState - a.OrderState, + }, + { + title: '毛利', + dataIndex: 'ML', + key: 'ML', + }, + { + title: '人数', + dataIndex: 'PersonNum', + key: 'PersonNum', + }, + { + title: '天数', + dataIndex: 'COLI_Days', + key: 'COLI_Days', + }, + { + title: '人天数', + dataIndex: 'CGI_PersonDays', + key: 'CGI_PersonDays', + }, + { + title: '走团日期', + dataIndex: 'COLI_OrderStartDate', + key: 'COLI_OrderStartDate', + }, + { + title: '小组', + dataIndex: 'Department', + key: 'Department', + }, + { + title: '老客户', + dataIndex: 'COLI_IsOld', + key: 'COLI_IsOld', + }, + { + title: '老客户推荐', + dataIndex: 'COLI_IsCusCommend', + key: 'COLI_IsCusCommend', + }, + { + title: '网站', + dataIndex: 'COLI_WebCode', + key: 'COLI_WebCode', + }, + { + title: '来源', + dataIndex: 'SourceType', + key: 'SourceType', + }, + { + title: '在华', + dataIndex: 'ZH', + key: 'ZH', + }, + ] + } size="small" + rowKey={record => record.COLI_ID} + /> diff --git a/src/charts/Customer_care_regular.js b/src/charts/Customer_care_regular.js index 3607eff..3b6a9d8 100644 --- a/src/charts/Customer_care_regular.js +++ b/src/charts/Customer_care_regular.js @@ -1,5 +1,6 @@ import React, {useContext, useEffect} from 'react'; -import {Row, Col, Button, Divider, Table, Space, Radio} from 'antd'; +import {Row, Col, Button, Divider, Table, Space, Radio, Tooltip} from 'antd'; +import {read, utils, writeFileXLSX} from 'xlsx'; import { ContainerOutlined, SearchOutlined, @@ -48,14 +49,9 @@ const Customer_care_regular = () => { - @@ -83,7 +79,7 @@ const Customer_care_regular = () => { title: '成行率', dataIndex: 'SUCRate', key: 'SUCRate', - render: (text, record) => {text * 100}% + render: (text, record) => {Math.round(text * 100)}% }, { title: '毛利', @@ -96,91 +92,93 @@ const Customer_care_regular = () => { key: 'PersonNum', }, ] - } size="small" pagination={false} rowKey={record => record.OrderNum} + } size="small" pagination={false} rowKey={record => record.ItemName} /> regular_data.onChange_show_detail_table()}>{regular_data.show_detail_table ? '隐藏列表' : '显示列表'} | - 导出excel - {regular_data.show_detail_table ? -
record.COLI_ID} - /> - : ''} + onClick={() => { + const wb = utils.table_to_book(document.getElementById("table_to_xlsx").getElementsByTagName('table')[0]); + writeFileXLSX(wb, "老客户.xlsx"); + }}>导出excel +
{text == 1 ? '成行' : '未成行'}, + sorter: (a, b) => b.OrderState - a.OrderState, + }, + { + title: '毛利', + dataIndex: 'ML', + key: 'ML', + }, + { + title: '人数', + dataIndex: 'PersonNum', + key: 'PersonNum', + }, + { + title: '天数', + dataIndex: 'COLI_Days', + key: 'COLI_Days', + }, + { + title: '人天数', + dataIndex: 'CGI_PersonDays', + key: 'CGI_PersonDays', + }, + { + title: '走团日期', + dataIndex: 'COLI_OrderStartDate', + key: 'COLI_OrderStartDate', + }, + { + title: '小组', + dataIndex: 'Department', + key: 'Department', + }, + { + title: '老客户', + dataIndex: 'COLI_IsOld', + key: 'COLI_IsOld', + }, + { + title: '老客户推荐', + dataIndex: 'COLI_IsCusCommend', + key: 'COLI_IsCusCommend', + }, + { + title: '网站', + dataIndex: 'COLI_WebCode', + key: 'COLI_WebCode', + }, + { + title: '来源', + dataIndex: 'SourceType', + key: 'SourceType', + }, + { + title: '在华', + dataIndex: 'ZH', + key: 'ZH', + }, + ] + } size="small" + rowKey={record => record.COLI_ID} + /> diff --git a/src/charts/DatePickerCharts.js b/src/charts/DatePickerCharts.js index 3537fc5..fa03019 100644 --- a/src/charts/DatePickerCharts.js +++ b/src/charts/DatePickerCharts.js @@ -3,6 +3,8 @@ import {Col, DatePicker, Row} from 'antd'; import {observer} from 'mobx-react'; import * as config from "../config"; import moment from "moment"; +import 'moment/locale/zh-cn'; +import locale from 'antd/es/date-picker/locale/zh_CN'; import {stores_Context} from "../config"; //用于日期选择,计算上一时间段、同比时间等 @@ -11,6 +13,12 @@ class DatePickerCharts extends Component { constructor(props) { super(props); + //设置全局日期为中国 + moment.locale("zh-cn", { + week: { + dow: 1 //周一是每周的第一天 + } + }); } @@ -20,7 +28,7 @@ class DatePickerCharts extends Component {
- {this.props.hide_vs ? '' : - response.json()) .then((json) => { runInAction(() => { - if (this.potential_data.show_detail) { + if (get_detail) { this.potential_data.data_detail = json; } else { this.potential_data.data = json; } this.potential_data.loading = false; - this.potential_data.loading_detail = false; }) }) .catch((error) => { this.potential_data.loading = false; - this.potential_data.loading_detail = false; console.log('fetch data failed', error); }); } @@ -69,9 +64,6 @@ class CustomerStore { potential_data = { loading: false, - loading_detail: false, - show_detail: false, - show_detail_table: false, data: [], data_detail: [], webcode: 'GHKYHW', @@ -88,9 +80,9 @@ class CustomerStore { // 潜力客户 end - // 老客户 beign - regular_customer_order() { + regular_customer_order(get_detail = false) { + this.regular_data.loading = true; const date_picker_store = this.rootStore.date_picker_store; let url = '/service-tourdesign/RegularCusOrder' url += '?Website=' + this.regular_data.webcode + '&DEI_SNList=' + this.regular_data.groups.toString(); @@ -101,30 +93,25 @@ class CustomerStore { } url += '&ApplydateStart=' + date_picker_store.start_date.format(config.DATE_FORMAT) + '&ApplydateEnd=' + date_picker_store.end_date.format(config.DATE_FORMAT) + '%2023:59:59'; url += '&EntrancedateStart=' + date_picker_store.start_date.format(config.DATE_FORMAT) + '&EntrancedateEnd=' + date_picker_store.end_date.format(config.DATE_FORMAT) + '%2023:59:59'; - if (this.regular_data.show_detail) { + if (get_detail) { url += '&IsDetail=1' - this.regular_data.loading_detail = true; - this.regular_data.show_detail_table = true; } else { url += '&IsDetail=0' - this.regular_data.loading = true; } fetch(config.HT_HOST + url) .then((response) => response.json()) .then((json) => { runInAction(() => { - if (this.regular_data.show_detail) { + if (get_detail) { this.regular_data.data_detail = json; } else { this.regular_data.data = json; } this.regular_data.loading = false; - this.regular_data.loading_detail = false; }) }) .catch((error) => { this.regular_data.loading = false; - this.regular_data.loading_detail = false; console.log('fetch data failed', error); }); } @@ -147,9 +134,6 @@ class CustomerStore { regular_data = { loading: false, - loading_detail: false, - show_detail: false, - show_detail_table: false, data: [], data_detail: [], webcode: 'ALL', @@ -166,8 +150,9 @@ class CustomerStore { // 老客户 end - // 老客户 beign - inchina_customer_order() { + // 在华客人 beign + inchina_customer_order(get_detail = false) { + this.inchina_data.loading = true; const date_picker_store = this.rootStore.date_picker_store; let url = '/service-tourdesign/RegularCusOrder' url += '?Website=' + this.inchina_data.webcode + '&DEI_SNList=' + this.inchina_data.groups.toString(); @@ -176,32 +161,27 @@ class CustomerStore { } else { url += '&ApplydateCheck=0&EntrancedateCheck=1'; } - url += '&ApplydateStart=' + date_picker_store.start_date.format(config.DATE_FORMAT) + '&ApplydateEnd=' + date_picker_store.end_date.format(config.DATE_FORMAT) + '%2023:59:59'; - url += '&EntrancedateStart=' + date_picker_store.start_date.format(config.DATE_FORMAT) + '&EntrancedateEnd=' + date_picker_store.end_date.format(config.DATE_FORMAT) + '%2023:59:59'; - if (this.inchina_data.show_detail) { + if (get_detail) { url += '&IsDetail=1' - this.inchina_data.loading_detail = true; - this.inchina_data.show_detail_table = true; } else { url += '&IsDetail=0' - this.inchina_data.loading = true; } + url += '&ApplydateStart=' + date_picker_store.start_date.format(config.DATE_FORMAT) + '&ApplydateEnd=' + date_picker_store.end_date.format(config.DATE_FORMAT) + '%2023:59:59'; + url += '&EntrancedateStart=' + date_picker_store.start_date.format(config.DATE_FORMAT) + '&EntrancedateEnd=' + date_picker_store.end_date.format(config.DATE_FORMAT) + '%2023:59:59'; fetch(config.HT_HOST + url) .then((response) => response.json()) .then((json) => { runInAction(() => { - if (this.inchina_data.show_detail) { + if (get_detail) { this.inchina_data.data_detail = json; } else { this.inchina_data.data = json; } this.inchina_data.loading = false; - this.inchina_data.loading_detail = false; }) }) .catch((error) => { this.inchina_data.loading = false; - this.inchina_data.loading_detail = false; console.log('fetch data failed', error); }); } @@ -224,9 +204,6 @@ class CustomerStore { inchina_data = { loading: false, - loading_detail: false, - show_detail: false, - show_detail_table: false, data: [], data_detail: [], webcode: 'ALL', @@ -240,7 +217,7 @@ class CustomerStore { onChange_show_detail_table: this.onChange_show_detail_table_inchina.bind(this), handleChange_webcode: this.handleChange_webcode_inchina.bind(this), } -// 老客户 end +// 在华客人 end }