Browse Source

Merge remote-tracking branch 'origin/main' into java

# Conflicts:
#	springboot/pom.xml
#	springboot/target/classes/application-druid.yml
#	springboot/target/classes/com/example/SpringbootApplication.class
#	springboot/target/classes/com/example/common/Constants.class
#	springboot/target/classes/com/example/common/Result.class
#	springboot/target/classes/com/example/common/config/CorsConfig.class
#	springboot/target/classes/com/example/common/config/DruidConfig$1.class
#	springboot/target/classes/com/example/common/config/DruidConfig.class
#	springboot/target/classes/com/example/common/config/JwtInterceptor.class
#	springboot/target/classes/com/example/common/config/Properties/DruidProperties.class
#	springboot/target/classes/com/example/common/config/WebConfig.class
#	springboot/target/classes/com/example/common/enums/OrderStatusDELIVERY.class
#	springboot/target/classes/com/example/common/enums/OrderStatusToShop.class
#	springboot/target/classes/com/example/common/enums/OrderType.class
#	springboot/target/classes/com/example/common/enums/ResultCodeEnum.class
#	springboot/target/classes/com/example/common/enums/RoleEnum.class
#	springboot/target/classes/com/example/controller/AdminController.class
#	springboot/target/classes/com/example/controller/AdminstoreController.class
#	springboot/target/classes/com/example/controller/AuditsController.class
#	springboot/target/classes/com/example/controller/FileController.class
#	springboot/target/classes/com/example/controller/NoticeController.class
#	springboot/target/classes/com/example/controller/OrdersController.class
#	springboot/target/classes/com/example/controller/ProductController.class
#	springboot/target/classes/com/example/controller/ProductypeController.class
#	springboot/target/classes/com/example/controller/SaleStatementController.class
#	springboot/target/classes/com/example/controller/StoreController.class
#	springboot/target/classes/com/example/controller/UserController.class
#	springboot/target/classes/com/example/controller/WebController.class
#	springboot/target/classes/com/example/entity/Account.class
#	springboot/target/classes/com/example/entity/Admin.class
#	springboot/target/classes/com/example/entity/Adminstore.class
#	springboot/target/classes/com/example/entity/Audits.class
#	springboot/target/classes/com/example/entity/Notice.class
#	springboot/target/classes/com/example/entity/Orders.class
#	springboot/target/classes/com/example/entity/Product.class
#	springboot/target/classes/com/example/entity/Productype.class
#	springboot/target/classes/com/example/entity/SaleStatement.class
#	springboot/target/classes/com/example/entity/Store.class
#	springboot/target/classes/com/example/entity/User.class
#	springboot/target/classes/com/example/exception/CustomException.class
#	springboot/target/classes/com/example/exception/GlobalExceptionHandler.class
#	springboot/target/classes/com/example/mapper/AdminMapper.class
#	springboot/target/classes/com/example/mapper/AdminstoreMapper.class
#	springboot/target/classes/com/example/mapper/AuditsMapper.class
#	springboot/target/classes/com/example/mapper/NoticeMapper.class
#	springboot/target/classes/com/example/mapper/OrdersMapper.class
#	springboot/target/classes/com/example/mapper/ProductMapper.class
#	springboot/target/classes/com/example/mapper/ProductypeMapper.class
#	springboot/target/classes/com/example/mapper/SaleStatementMapper.class
#	springboot/target/classes/com/example/mapper/StoreMapper.class
#	springboot/target/classes/com/example/mapper/UserMapper.class
#	springboot/target/classes/com/example/service/AdminService.class
#	springboot/target/classes/com/example/service/AdminStoreService.class
#	springboot/target/classes/com/example/service/AuditsService.class
#	springboot/target/classes/com/example/service/NoticeService.class
#	springboot/target/classes/com/example/service/OrdersService.class
#	springboot/target/classes/com/example/service/ProductService.class
#	springboot/target/classes/com/example/service/ProductypeService.class
#	springboot/target/classes/com/example/service/SaleStatementService.class
#	springboot/target/classes/com/example/service/StoreService.class
#	springboot/target/classes/com/example/service/UserService.class
#	springboot/target/classes/com/example/utils/TokenUtils.class
#	springboot/target/classes/com/example/utils/generate/CodeGenerator.class
#	springboot/target/classes/com/example/utils/generate/ControllerGenerator.class
#	springboot/target/classes/com/example/utils/generate/EntityGenerator.class
#	springboot/target/classes/com/example/utils/generate/MapperGenerator.class
#	springboot/target/classes/com/example/utils/generate/ServiceGenerator.class
#	springboot/target/classes/com/example/utils/generate/Table.class
#	springboot/target/classes/com/example/utils/generate/TableColumn.class
#	springboot/target/classes/com/example/utils/generate/VueGenerator.class
#	vue/package-lock.json
#	vue/package.json
0714Star 1 year ago
parent
commit
af52c2588a

+ 1 - 0
springboot/src/main/resources/application-druid.yml

@@ -1,6 +1,7 @@
 # 数据源配置
 spring:
   datasource:
+
     type: com.alibaba.druid.pool.DruidDataSource
     driverClassName: com.mysql.cj.jdbc.Driver
     druid:

+ 32 - 340
vue/package-lock.json

@@ -14,6 +14,7 @@
         "element-china-area-data": "^6.1.0",
         "element-ui": "^2.15.14",
         "spark-md5": "^3.0.2",
+        "highcharts": "^11.4.1",
         "vue": "^2.6.14",
         "vue-router": "^3.5.1"
       },
@@ -3020,6 +3021,7 @@
       "version": "1.3.8",
       "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
       "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+      "dev": true,
       "dependencies": {
         "mime-types": "~2.1.34",
         "negotiator": "0.6.3"
@@ -3168,7 +3170,8 @@
     "node_modules/any-promise": {
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz",
-      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+      "dev": true
     },
     "node_modules/anymatch": {
       "version": "3.1.3",
@@ -3559,18 +3562,6 @@
         "node": ">= 0.8"
       }
     },
-    "node_modules/cache-content-type": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/cache-content-type/-/cache-content-type-1.0.1.tgz",
-      "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==",
-      "dependencies": {
-        "mime-types": "^2.1.18",
-        "ylru": "^1.2.0"
-      },
-      "engines": {
-        "node": ">= 6.0.0"
-      }
-    },
     "node_modules/call-bind": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
@@ -3650,11 +3641,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/china-division": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmmirror.com/china-division/-/china-division-2.7.0.tgz",
-      "integrity": "sha512-4uUPAT+1WfqDh5jytq7omdCmHNk3j+k76zEG/2IqaGcYB90c2SwcixttcypdsZ3T/9tN1TTpBDoeZn+Yw/qBEA=="
-    },
     "node_modules/chokidar": {
       "version": "3.5.3",
       "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz",
@@ -3875,15 +3861,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmmirror.com/co/-/co-4.6.0.tgz",
-      "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
-      "engines": {
-        "iojs": ">= 1.0.0",
-        "node": ">= 0.12.0"
-      }
-    },
     "node_modules/color-convert": {
       "version": "1.9.3",
       "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz",
@@ -4020,6 +3997,7 @@
       "version": "0.5.4",
       "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz",
       "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+      "dev": true,
       "dependencies": {
         "safe-buffer": "5.2.1"
       },
@@ -4031,6 +4009,7 @@
       "version": "1.0.5",
       "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
       "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+      "dev": true,
       "engines": {
         "node": ">= 0.6"
       }
@@ -4056,18 +4035,6 @@
       "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
       "dev": true
     },
-    "node_modules/cookies": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmmirror.com/cookies/-/cookies-0.9.1.tgz",
-      "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==",
-      "dependencies": {
-        "depd": "~2.0.0",
-        "keygrip": "~1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
     "node_modules/copy-webpack-plugin": {
       "version": "9.1.0",
       "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz",
@@ -4456,6 +4423,7 @@
       "version": "4.3.4",
       "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
       "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dev": true,
       "dependencies": {
         "ms": "2.1.2"
       },
@@ -4468,11 +4436,6 @@
         }
       }
     },
-    "node_modules/deep-equal": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.0.1.tgz",
-      "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw=="
-    },
     "node_modules/deepmerge": {
       "version": "1.5.2",
       "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz",
@@ -4656,15 +4619,11 @@
         "node": ">=0.4.0"
       }
     },
-    "node_modules/delegates": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz",
-      "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
-    },
     "node_modules/depd": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
       "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+      "dev": true,
       "engines": {
         "node": ">= 0.8"
       }
@@ -4673,6 +4632,7 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
       "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+      "dev": true,
       "engines": {
         "node": ">= 0.8",
         "npm": "1.2.8000 || >= 1.4.16"
@@ -4803,22 +4763,11 @@
         "node": ">=6.0.0"
       }
     },
-    "node_modules/echart": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmmirror.com/echart/-/echart-0.1.3.tgz",
-      "integrity": "sha512-DbTrEjHnYrSEqzRBkLhVs0T512ZZwSDW8hIE57lY2Rwui5j6sdFoO37W0tDq/Tb7Q25MaRAwiQMkMCzOX4FjWw==",
-      "dependencies": {
-        "koa": "^2.2.0",
-        "koa-router": "^7.1.1"
-      },
-      "bin": {
-        "mock": "bin/mock"
-      }
-    },
     "node_modules/ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+      "dev": true
     },
     "node_modules/electron-to-chromium": {
       "version": "1.4.554",
@@ -4826,14 +4775,6 @@
       "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==",
       "dev": true
     },
-    "node_modules/element-china-area-data": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmmirror.com/element-china-area-data/-/element-china-area-data-6.1.0.tgz",
-      "integrity": "sha512-IkpcjwQv2A/2AxFiSoaISZ+oMw1rZCPUSOg5sOCwT5jKc96TaawmKZeY81xfxXsO0QbKxU5LLc6AirhG52hUmg==",
-      "dependencies": {
-        "china-division": "^2.7.0"
-      }
-    },
     "node_modules/element-ui": {
       "version": "2.15.14",
       "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.14.tgz",
@@ -4869,6 +4810,7 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
       "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+      "dev": true,
       "engines": {
         "node": ">= 0.8"
       }
@@ -4937,7 +4879,8 @@
     "node_modules/escape-html": {
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "dev": true
     },
     "node_modules/escape-string-regexp": {
       "version": "1.0.5",
@@ -5307,6 +5250,7 @@
       "version": "0.5.2",
       "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
       "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+      "dev": true,
       "engines": {
         "node": ">= 0.6"
       }
@@ -5534,17 +5478,7 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
       "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/has-tostringtag": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
-      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
-      "dependencies": {
-        "has-symbols": "^1.0.3"
-      },
+      "dev": true,
       "engines": {
         "node": ">= 0.4"
       }
@@ -5688,49 +5622,6 @@
         "entities": "^2.0.0"
       }
     },
-    "node_modules/http-assert": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmmirror.com/http-assert/-/http-assert-1.5.0.tgz",
-      "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==",
-      "dependencies": {
-        "deep-equal": "~1.0.1",
-        "http-errors": "~1.8.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/http-assert/node_modules/depd": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz",
-      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/http-assert/node_modules/http-errors": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.8.1.tgz",
-      "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
-      "dependencies": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.4",
-        "setprototypeof": "1.2.0",
-        "statuses": ">= 1.5.0 < 2",
-        "toidentifier": "1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/http-assert/node_modules/statuses": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",
-      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
     "node_modules/http-deceiver": {
       "version": "1.2.7",
       "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz",
@@ -5871,7 +5762,8 @@
     "node_modules/inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "dev": true
     },
     "node_modules/ipaddr.js": {
       "version": "2.1.0",
@@ -5948,17 +5840,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/is-generator-function": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz",
-      "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/is-glob": {
       "version": "4.0.3",
       "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
@@ -6181,17 +6062,6 @@
         "graceful-fs": "^4.1.6"
       }
     },
-    "node_modules/keygrip": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/keygrip/-/keygrip-1.1.0.tgz",
-      "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
-      "dependencies": {
-        "tsscmp": "1.0.6"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
     "node_modules/kind-of": {
       "version": "6.0.3",
       "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz",
@@ -6210,164 +6080,6 @@
         "node": ">= 8"
       }
     },
-    "node_modules/koa": {
-      "version": "2.15.3",
-      "resolved": "https://registry.npmmirror.com/koa/-/koa-2.15.3.tgz",
-      "integrity": "sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==",
-      "dependencies": {
-        "accepts": "^1.3.5",
-        "cache-content-type": "^1.0.0",
-        "content-disposition": "~0.5.2",
-        "content-type": "^1.0.4",
-        "cookies": "~0.9.0",
-        "debug": "^4.3.2",
-        "delegates": "^1.0.0",
-        "depd": "^2.0.0",
-        "destroy": "^1.0.4",
-        "encodeurl": "^1.0.2",
-        "escape-html": "^1.0.3",
-        "fresh": "~0.5.2",
-        "http-assert": "^1.3.0",
-        "http-errors": "^1.6.3",
-        "is-generator-function": "^1.0.7",
-        "koa-compose": "^4.1.0",
-        "koa-convert": "^2.0.0",
-        "on-finished": "^2.3.0",
-        "only": "~0.0.2",
-        "parseurl": "^1.3.2",
-        "statuses": "^1.5.0",
-        "type-is": "^1.6.16",
-        "vary": "^1.1.2"
-      },
-      "engines": {
-        "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4"
-      }
-    },
-    "node_modules/koa-compose": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/koa-compose/-/koa-compose-4.1.0.tgz",
-      "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw=="
-    },
-    "node_modules/koa-convert": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/koa-convert/-/koa-convert-2.0.0.tgz",
-      "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==",
-      "dependencies": {
-        "co": "^4.6.0",
-        "koa-compose": "^4.1.0"
-      },
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/koa-router": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmmirror.com/koa-router/-/koa-router-7.4.0.tgz",
-      "integrity": "sha512-IWhaDXeAnfDBEpWS6hkGdZ1ablgr6Q6pGdXCyK38RbzuH4LkUOpPqPw+3f8l8aTDrQmBQ7xJc0bs2yV4dzcO+g==",
-      "deprecated": "**IMPORTANT 10x+ PERFORMANCE UPGRADE**: Please upgrade to v12.0.1+ as we have fixed an issue with debuglog causing 10x slower router benchmark performance, see https://github.com/koajs/router/pull/173",
-      "dependencies": {
-        "debug": "^3.1.0",
-        "http-errors": "^1.3.1",
-        "koa-compose": "^3.0.0",
-        "methods": "^1.0.1",
-        "path-to-regexp": "^1.1.1",
-        "urijs": "^1.19.0"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/koa-router/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/koa-router/node_modules/depd": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz",
-      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/koa-router/node_modules/http-errors": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.8.1.tgz",
-      "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
-      "dependencies": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.4",
-        "setprototypeof": "1.2.0",
-        "statuses": ">= 1.5.0 < 2",
-        "toidentifier": "1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/koa-router/node_modules/isarray": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz",
-      "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
-    },
-    "node_modules/koa-router/node_modules/koa-compose": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmmirror.com/koa-compose/-/koa-compose-3.2.1.tgz",
-      "integrity": "sha512-8gen2cvKHIZ35eDEik5WOo8zbVp9t4cP8p4hW4uE55waxolLRexKKrqfCpwhGVppnB40jWeF8bZeTVg99eZgPw==",
-      "dependencies": {
-        "any-promise": "^1.1.0"
-      }
-    },
-    "node_modules/koa-router/node_modules/path-to-regexp": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
-      "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
-      "dependencies": {
-        "isarray": "0.0.1"
-      }
-    },
-    "node_modules/koa-router/node_modules/statuses": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",
-      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/koa/node_modules/http-errors": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.8.1.tgz",
-      "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
-      "dependencies": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.4",
-        "setprototypeof": "1.2.0",
-        "statuses": ">= 1.5.0 < 2",
-        "toidentifier": "1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/koa/node_modules/http-errors/node_modules/depd": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz",
-      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/koa/node_modules/statuses": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",
-      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
     "node_modules/launch-editor": {
       "version": "2.6.1",
       "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.1.tgz",
@@ -6754,6 +6466,7 @@
       "version": "0.3.0",
       "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",
       "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+      "dev": true,
       "engines": {
         "node": ">= 0.6"
       }
@@ -6804,6 +6517,7 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
       "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+      "dev": true,
       "engines": {
         "node": ">= 0.6"
       }
@@ -6993,7 +6707,8 @@
     "node_modules/ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "dev": true
     },
     "node_modules/multicast-dns": {
       "version": "7.2.5",
@@ -7034,6 +6749,7 @@
       "version": "0.6.3",
       "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
       "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+      "dev": true,
       "engines": {
         "node": ">= 0.6"
       }
@@ -7218,6 +6934,7 @@
       "version": "2.4.1",
       "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",
       "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "dev": true,
       "dependencies": {
         "ee-first": "1.1.1"
       },
@@ -7255,11 +6972,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/only": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmmirror.com/only/-/only-0.0.2.tgz",
-      "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ=="
-    },
     "node_modules/open": {
       "version": "8.4.2",
       "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz",
@@ -7484,6 +7196,7 @@
       "version": "1.3.3",
       "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
       "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "dev": true,
       "engines": {
         "node": ">= 0.8"
       }
@@ -8565,7 +8278,8 @@
     "node_modules/safe-buffer": {
       "version": "5.2.1",
       "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "dev": true
     },
     "node_modules/safer-buffer": {
       "version": "2.1.2",
@@ -8764,7 +8478,8 @@
     "node_modules/setprototypeof": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
-      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+      "dev": true
     },
     "node_modules/shallow-clone": {
       "version": "3.0.1",
@@ -8882,11 +8597,6 @@
         "source-map": "^0.6.0"
       }
     },
-    "node_modules/spark-md5": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmmirror.com/spark-md5/-/spark-md5-3.0.2.tgz",
-      "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
-    },
     "node_modules/spdx-correct": {
       "version": "3.2.0",
       "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -9293,6 +9003,7 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",
       "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+      "dev": true,
       "engines": {
         "node": ">=0.6"
       }
@@ -9318,14 +9029,6 @@
       "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
       "dev": true
     },
-    "node_modules/tsscmp": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmmirror.com/tsscmp/-/tsscmp-1.0.6.tgz",
-      "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
-      "engines": {
-        "node": ">=0.6.x"
-      }
-    },
     "node_modules/type-fest": {
       "version": "0.6.0",
       "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz",
@@ -9339,6 +9042,7 @@
       "version": "1.6.18",
       "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz",
       "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "dev": true,
       "dependencies": {
         "media-typer": "0.3.0",
         "mime-types": "~2.1.24"
@@ -9436,11 +9140,6 @@
         "punycode": "^2.1.0"
       }
     },
-    "node_modules/urijs": {
-      "version": "1.19.11",
-      "resolved": "https://registry.npmmirror.com/urijs/-/urijs-1.19.11.tgz",
-      "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="
-    },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -9485,6 +9184,7 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
       "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "dev": true,
       "engines": {
         "node": ">= 0.8"
       }
@@ -10176,14 +9876,6 @@
       "engines": {
         "node": ">=10"
       }
-    },
-    "node_modules/ylru": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/ylru/-/ylru-1.4.0.tgz",
-      "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==",
-      "engines": {
-        "node": ">= 4.0.0"
-      }
     }
   }
 }

+ 1 - 1
vue/package.json

@@ -12,7 +12,7 @@
     "echart": "^0.1.3",
     "element-china-area-data": "^6.1.0",
     "element-ui": "^2.15.14",
-    "spark-md5": "^3.0.2",
+    "highcharts": "^11.4.1",
     "vue": "^2.6.14",
     "vue-router": "^3.5.1"
   },

+ 1 - 1
vue/src/router/index.js

@@ -26,7 +26,7 @@ const routes = [
       { path: 'shopOrders', name: 'ShopOrders', meta: { name: '店铺订单' }, component: () => import('../views/manager/Shop/ShopOrders.vue') },
       { path: 'shopProducts', name: 'ShopProducts', meta: { name: '店铺产品' }, component: () => import('../views/manager/Shop/ShopProducts.vue') },
       { path: 'corpGrown', name: 'CorpGrown', meta: { name: '作物生长模块' }, component: () => import('../views/manager/AI/CorpGrown.vue') },
-      { path: 'shopStatements', name: 'ShopStatements', meta: { name: '店铺报表' }, component: () => import('../views/manager/AI/CorpGrown.vue') },
+      { path: 'shopStatements', name: 'ShopStatements', meta: { name: '店铺报表' }, component: () => import('../views/manager/Shop/ShopStatements.vue') },
       { path: 'monitor', name: 'Monitor', meta: { name: '农村监控模块' }, component: () => import('../views/manager/AI/Monitor.vue') },
       { path: 'pestAnalysis', name: 'PestAnalysis', meta: { name: '害虫识别模块' }, component: () => import('../views/manager/AI/PestAnalysis.vue') },
       // { path: 'audit', name: 'Audit', meta: { name: '店铺申请审核' }, component: () => import('../views/manager/Manager/Audit.vue') },

+ 387 - 10
vue/src/views/manager/Shop/ShopStatements.vue

@@ -1,17 +1,394 @@
+<template>
+  <div class="data-statistics">
+    <h2>数据统计</h2>
+    <div class="month-turnover-box">
+      <div class="month-turnover">
+        <h1>
+          本月营业额 <br>
+          <span>{{ monthTurnover }}</span>
+        </h1>
+      </div>
+      <div id="sales-category-chart"></div>
+    </div>
+    <h3>本月销售前二十商品</h3>
+    <div id="ranking-twenty-chart"></div>
+    <h3>年度销售统计</h3>
+    <div id="year-turnover-chart"></div>
+  </div>
+</template>
+
 <script>
+
+import Highcharts from 'highcharts/highstock'
+import HighchartsMore from 'highcharts/highcharts-more'
+import HighchartsDrilldown from 'highcharts/modules/drilldown'
+import Highcharts3D from 'highcharts/highcharts-3d'
+import Highmaps from 'highcharts/modules/map'
+
+HighchartsMore(Highcharts)
+HighchartsDrilldown(Highcharts)
+Highcharts3D(Highcharts)
+Highmaps(Highcharts)
+
 export default {
-  name: "ShopStatements"
+  data () {
+    return {
+      categoryChart: null,
+      rankingTwentyChart: null,
+      yearTurnoverChart: null,
+      cashRegisterList: this.$store.state.cashRegister.cashRegisterList
+    }
+  },
+  mounted () {
+    let _this = this;
+    this.categoryChart = new Highcharts.Chart(document.getElementById('sales-category-chart'), {
+      chart: {
+        plotBackgroundColor: null,
+        plotBorderWidth: null,
+        plotShadow: false
+      },
+      title: {
+        text: '本月各类商品销售占比图'
+      },
+      tooltip: {
+        headerFormat: '{series.name}<br>',
+        pointFormat: '{point.name}: <b>{point.percentage:.1f}%</b>'
+      },
+      plotOptions: {
+        pie: {
+          allowPointSelect: true,
+          cursor: 'pointer',
+          dataLabels: {
+            enabled: false
+          },
+          showInLegend: true
+        }
+      },
+      series: [
+        {
+          type: 'pie',
+          name: '商品销售占比',
+          data: [
+            ['休闲零食', _this.categoryTurnover[0] / _this.monthTurnover * 100],
+            ['酒水饮料', _this.categoryTurnover[1] / _this.monthTurnover * 100],
+            ['粮油副食', _this.categoryTurnover[2] / _this.monthTurnover * 100],
+            ['生鲜水果', _this.categoryTurnover[3] / _this.monthTurnover * 100],
+            ['日常洗护', _this.categoryTurnover[4] / _this.monthTurnover * 100],
+            ['厨卫用品', _this.categoryTurnover[5] / _this.monthTurnover * 100],
+            ['其它品类', _this.categoryTurnover[6] / _this.monthTurnover * 100]
+          ]
+        }
+      ]
+    });
+    this. rankingTwentyChart = new Highcharts.Chart(document.getElementById('ranking-twenty-chart'), {
+      chart: {
+        type: 'bar'
+      },
+      title: {
+        text: '本月销售前二十商品统计图'
+      },
+      xAxis: {
+        categories: _this.rankingTwentyName,
+        title: {
+          text: null
+        }
+      },
+      yAxis: {
+        min: 0,
+        title: {
+          text: '本月销售金额 (元)',
+          align: 'high'
+        },
+        labels: {
+          overflow: 'justify'
+        }
+      },
+      tooltip: {
+        valueSuffix: ' 元'
+      },
+      plotOptions: {
+        bar: {
+          dataLabels: {
+            enabled: true,
+            allowOverlap: true
+          }
+        }
+      },
+      legend: {
+        layout: 'vertical',
+        align: 'right',
+        verticalAlign: 'top',
+        x: -40,
+        y: 100,
+        floating: true,
+        borderWidth: 1,
+        backgroundColor: ((Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'),
+        shadow: true
+      },
+      credits: {
+        enabled: false
+      },
+      series: [
+        {
+          name: '销售金额',
+          data: _this.rankingTwentyTotal
+        },
+        // {
+        //     name: '销售数量',
+        //     data: _this.rankingTwentyCount
+        // }
+      ]
+    });
+    this.yearTurnoverChart = new Highcharts.Chart(document.getElementById('year-turnover-chart'), {
+      chart: {
+        type: 'column'
+      },
+      title: {
+        text: '年度销售统计图'
+      },
+      xAxis: {
+        categories: [
+          '一月',
+          '二月',
+          '三月',
+          '四月',
+          '五月',
+          '六月',
+          '七月',
+          '八月',
+          '九月',
+          '十月',
+          '十一月',
+          '十二月'
+        ],
+        crosshair: true
+      },
+      yAxis: {
+        min: 0,
+        title: {
+          text: '月销量 (件)'
+        }
+      },
+      tooltip: {
+        headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
+        pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
+            '<td style="padding:0"><b>{point.y:.1f} 元</b></td></tr>',
+        footerFormat: '</table>',
+        shared: true,
+        useHTML: true
+      },
+      plotOptions: {
+        column: {
+          pointPadding: 0.2,
+          borderWidth: 0
+        }
+      },
+      series: [
+        {
+          name: '本月营业额',
+          data: _this.yearTurnover
+        }
+      ]
+    });
+  },
+  computed: {
+    // 本月营业额
+    monthTurnover: function () {
+      let nowMonth = new Date().getMonth();
+      let all = 0;
+      for (let i = 0, len = this.cashRegisterList.length; i < len; i++) {
+        if (new Date(this.cashRegisterList[i].time).getMonth() === nowMonth) {
+          all += this.cashRegisterList[i].allTotal;
+        }
+      }
+      return all;
+    },
+    // 各类商品营业额
+    categoryTurnover: function () {
+      let arr = [0, 0, 0, 0, 0, 0, 0];
+      let nowYear = new Date().getFullYear();
+      let nowMonth = new Date().getMonth();
+      for (let i = 0, len = this.cashRegisterList.length; i < len; i++) {
+        if (new Date(this.cashRegisterList[i].time).getFullYear() === nowYear && new Date(this.cashRegisterList[i].time).getMonth() === nowMonth) {
+          for (let j = 0, len = this.cashRegisterList[i].goodsList.length; j < len; j++) {
+            switch (this.cashRegisterList[i].goodsList[j].category) {
+              case '休闲零食':
+                arr[0] += this.cashRegisterList[i].goodsList[j].total;
+                break;
+              case '酒水饮料':
+                arr[1] += this.cashRegisterList[i].goodsList[j].total;
+                break;
+              case '粮油副食':
+                arr[2] += this.cashRegisterList[i].goodsList[j].total;
+                break;
+              case '生鲜水果':
+                arr[3] += this.cashRegisterList[i].goodsList[j].total;
+                break;
+              case '日常洗护':
+                arr[4] += this.cashRegisterList[i].goodsList[j].total;
+                break;
+              case '厨卫用品':
+                arr[5] += this.cashRegisterList[i].goodsList[j].total;
+                break;
+              case '其它品类':
+                arr[6] += this.cashRegisterList[i].goodsList[j].total;
+                break;
+              default: break;
+            }
+          }
+        }
+      }
+      return arr;
+    },
+
+    // 本月销售排名前二十商品
+    rankingTwenty () {
+      let arr = [];
+      let nowYear = new Date().getFullYear();
+      let nowMonth = new Date().getMonth();
+      for (let i = 0, len = this.cashRegisterList.length; i < len; i++) {
+        if (new Date(this.cashRegisterList[i].time).getFullYear() === nowYear && new Date(this.cashRegisterList[i].time).getMonth() === nowMonth) {
+          for (let j = 0, len = this.cashRegisterList[i].goodsList.length; j < len; j++) {
+            let flag = true;
+            for (let z = 0, len = arr.length; z < len;  z++) {
+              if (this.cashRegisterList[i].goodsList[j].coding === arr[z].coding) {
+                arr[z].count += this.cashRegisterList[i].goodsList[j].count;
+                arr[z].total += this.cashRegisterList[i].goodsList[j].total;
+                flag = false;
+                break;
+              }
+            }
+            if (flag) {
+              let obj = new Object();
+              obj.coding = this.cashRegisterList[i].goodsList[j].coding;
+              obj.name = this.cashRegisterList[i].goodsList[j].name;
+              obj.count = this.cashRegisterList[i].goodsList[j].count;
+              obj.total = this.cashRegisterList[i].goodsList[j].total;
+              arr.push(obj);
+            }
+          }
+        }
+      }
+      return arr;
+    },
+    // 本月销售排名前二十商品名称
+    rankingTwentyName () {
+      let arr = [];
+      let rankingTwenty = this.rankingTwenty;
+      rankingTwenty.sort(function (a, b) {
+        return b.total - a.total;
+      });
+      rankingTwenty.slice(0, 20).forEach(function (element) {
+        arr.push(element.name);
+      });
+      return arr;
+    },
+    // 本月销售排名前二十商品销售额
+    rankingTwentyTotal () {
+      let arr = [];
+      let rankingTwenty = this.rankingTwenty;
+      rankingTwenty.sort(function (a, b) {
+        return b.total - a.total;
+      });
+      rankingTwenty.slice(0, 20).forEach(function (element) {
+        arr.push(element.total);
+      });
+      return arr;
+    },
+    // 本月销售排名前二十商品销售数量
+    rankingTwentyCount () {
+      let arr = [];
+      let rankingTwenty = this.rankingTwenty;
+      rankingTwenty.sort(function (a, b) {
+        return b.total - a.total;
+      });
+      rankingTwenty.slice(0, 20).forEach(function (element) {
+        arr.push(element.count);
+      });
+      return arr;
+    },
+    // 年度每月营业额
+    yearTurnover () {
+      let arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
+      let nowYear = new Date().getFullYear();
+      for (let i = 0, len = this.cashRegisterList.length; i < len; i++) {
+        if (new Date(this.cashRegisterList[i].time).getFullYear() === nowYear) {
+          switch (new Date(this.cashRegisterList[i].time).getMonth()) {
+            case 0:
+              arr[0] += this.cashRegisterList[i].allTotal;
+              break;
+            case 1:
+              arr[1] += this.cashRegisterList[i].allTotal;
+              break;
+            case 2:
+              arr[2] += this.cashRegisterList[i].allTotal;
+              break;
+            case 3:
+              arr[3] += this.cashRegisterList[i].allTotal;
+              break;
+            case 4:
+              arr[4] += this.cashRegisterList[i].allTotal;
+              break;
+            case 5:
+              arr[5] += this.cashRegisterList[i].allTotal;
+              break;
+            case 6:
+              arr[6] += this.cashRegisterList[i].allTotal;
+              break;
+            case 7:
+              arr[7] += this.cashRegisterList[i].allTotal;
+              break;
+            case 8:
+              arr[8] += this.cashRegisterList[i].allTotal;
+              break;
+            case 9:
+              arr[9] += this.cashRegisterList[i].allTotal;
+              break;
+            case 10:
+              arr[10] += this.cashRegisterList[i].allTotal;
+              break;
+            case 11:
+              arr[11] += this.cashRegisterList[i].allTotal;
+              break;
+            default: break;
+          }
+        }
+      }
+      return arr;
+    }
+  }
 }
 </script>
 
-<template>
-<div>
-  店铺报表
-  店铺商品报表用echart绘制多张图找好看的背景扽等
-  实现选择框选择 日 | 月 | 年数据的展示
-</div>
-</template>
-
 <style scoped>
-
+.data-statistics h1 {
+  text-align: center;
+}
+.data-statistics h1 span {
+  color: #ff9900;
+}
+.data-statistics h2 {
+  padding: 10px;
+}
+.data-statistics h3 {
+  padding: 10px;
+}
+.month-turnover-box {
+  display: flex;
+  height: 400px;
+  align-content: center;
+  background-color: white;
+}
+.month-turnover {
+  width: 30%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+#sales-category-chart {
+  width: 70%;
+}
+#ranking-twenty-chart {
+  height: 600px;
+}
 </style>