Forráskód Böngészése

校园报修后台管理系统 v 1.0.2

4 éve
szülő
commit
9db9d5b275
70 módosított fájl, 6677 hozzáadás és 315 törlés
  1. BIN
      .DS_Store
  2. 4 5
      config/index.js
  3. 1 1
      dist/index.html
  4. 0 2
      dist/static/css/app.a691ce5b28276980741d5f4361c70180.css
  5. 0 1
      dist/static/css/app.a691ce5b28276980741d5f4361c70180.css.map
  6. 2 0
      dist/static/css/app.e99ca772302ce9c2d21907c365678d97.css
  7. 1 0
      dist/static/css/app.e99ca772302ce9c2d21907c365678d97.css.map
  8. 0 2
      dist/static/js/app.336f04c7e8c4ede1fa0b.js
  9. 0 1
      dist/static/js/app.336f04c7e8c4ede1fa0b.js.map
  10. 2 0
      dist/static/js/app.73f143bb621d0815ccb2.js
  11. 1 0
      dist/static/js/app.73f143bb621d0815ccb2.js.map
  12. 2 2
      dist/static/js/manifest.2ae2e69a05c33dfc65f8.js
  13. 1 0
      dist/static/js/manifest.15fc3d274cf3e70124f6.js.map
  14. 0 1
      dist/static/js/manifest.2ae2e69a05c33dfc65f8.js.map
  15. 33 0
      dist/static/js/vendor.131b1eebfcf5ce8c5e71.js
  16. 1 0
      dist/static/js/vendor.131b1eebfcf5ce8c5e71.js.map
  17. 0 27
      dist/static/js/vendor.463ba66acc17e5fc8d15.js
  18. 0 1
      dist/static/js/vendor.463ba66acc17e5fc8d15.js.map
  19. 13 0
      node_modules/.package-lock.json
  20. 0 1
      node_modules/default-passive-events
  21. 0 0
      node_modules/default-passive-events/LICENSE
  22. 0 0
      node_modules/default-passive-events/README.md
  23. 0 0
      node_modules/default-passive-events/dist/index.js
  24. 0 0
      node_modules/default-passive-events/dist/index.js.map
  25. 0 0
      node_modules/default-passive-events/dist/index.modern.js
  26. 0 0
      node_modules/default-passive-events/dist/index.modern.js.map
  27. 0 0
      node_modules/default-passive-events/dist/index.module.js
  28. 0 0
      node_modules/default-passive-events/dist/index.module.js.map
  29. 0 0
      node_modules/default-passive-events/dist/index.umd.js
  30. 0 0
      node_modules/default-passive-events/dist/index.umd.js.map
  31. 2 5
      node_modules/_default-passive-events@2.0.0@default-passive-events/package.json
  32. 0 0
      node_modules/default-passive-events/src/index.js
  33. 0 0
      node_modules/default-passive-events/src/utils.js
  34. 0 0
      node_modules/default-passive-events/yarn.lock
  35. 314 0
      node_modules/vuex/CHANGELOG.md
  36. 21 0
      node_modules/vuex/LICENSE
  37. 33 0
      node_modules/vuex/README.md
  38. 17 0
      node_modules/vuex/dist/logger.d.ts
  39. 155 0
      node_modules/vuex/dist/logger.js
  40. 1093 0
      node_modules/vuex/dist/vuex.common.js
  41. 1052 0
      node_modules/vuex/dist/vuex.esm.browser.js
  42. 6 0
      node_modules/vuex/dist/vuex.esm.browser.min.js
  43. 1092 0
      node_modules/vuex/dist/vuex.esm.js
  44. 1099 0
      node_modules/vuex/dist/vuex.js
  45. 6 0
      node_modules/vuex/dist/vuex.min.js
  46. 87 0
      node_modules/vuex/package.json
  47. 86 0
      node_modules/vuex/types/helpers.d.ts
  48. 159 0
      node_modules/vuex/types/index.d.ts
  49. 18 0
      node_modules/vuex/types/vue.d.ts
  50. 27 1
      package-lock.json
  51. 2 1
      package.json
  52. 35 0
      src/components/complaint/complaint.css
  53. 84 35
      src/components/complaint/complaint.vue
  54. 19 33
      src/components/index/Index.css
  55. 24 18
      src/components/index/Index.vue
  56. 27 3
      src/components/login/Login.vue
  57. 219 0
      src/components/notice/RecNotice.vue
  58. 17 3
      src/components/notice/notice.css
  59. 52 23
      src/components/notice/notice.vue
  60. 319 0
      src/components/order/BackOrder/BackOrder.vue
  61. 66 3
      src/components/order/DeliOrder/DeliOrder.css
  62. 197 66
      src/components/order/DeliOrder/DeliOrder.vue
  63. 60 2
      src/components/order/SearOrder/SearOrder.css
  64. 123 46
      src/components/order/SearOrder/SearOrder.vue
  65. 9 1
      src/components/people/RepairPeo.css
  66. 41 22
      src/components/people/RepairPeo.vue
  67. 4 0
      src/main.js
  68. 0 0
      src/pages/OrderDetail.vue
  69. 18 9
      src/router/index.js
  70. 33 0
      src/store/index.js

BIN
.DS_Store


+ 4 - 5
config/index.js

@@ -6,16 +6,15 @@ const path = require('path')
 
 module.exports = {
   dev: {
-
     // Paths
     assetsSubDirectory: 'static',
     assetsPublicPath: '/',
     proxyTable: {
-      '/testapi': {
-        target: 'http://my2t2k.natappfree.cc',//设置你调用的接口域名和端口号 别忘了加http
+      '/baoxiu/repairApi': {
+        target: 'https://jtishfw.ncjti.edu.cn/baoxiu/repairApi',//设置你调用的接口域名和端口号 别忘了加http
         changeOrigin: true,
         pathRewrite: {
-          '^/testapi': '/'//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可
+          '^/baoxiu/repairApi': '/'//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可
         }
       }
     },
@@ -50,7 +49,7 @@ module.exports = {
     // Paths
     assetsRoot: path.resolve(__dirname, '../dist'),
     assetsSubDirectory: 'static',
-    assetsPublicPath: '/',
+    assetsPublicPath: '/baoxiu/repair-manage/',
 
     /**
      * Source Maps

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 1
dist/index.html


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 2
dist/static/css/app.a691ce5b28276980741d5f4361c70180.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 1
dist/static/css/app.a691ce5b28276980741d5f4361c70180.css.map


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 2 - 0
dist/static/css/app.e99ca772302ce9c2d21907c365678d97.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
dist/static/css/app.e99ca772302ce9c2d21907c365678d97.css.map


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 2
dist/static/js/app.336f04c7e8c4ede1fa0b.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 1
dist/static/js/app.336f04c7e8c4ede1fa0b.js.map


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 2 - 0
dist/static/js/app.73f143bb621d0815ccb2.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
dist/static/js/app.73f143bb621d0815ccb2.js.map


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 2 - 2
dist/static/js/manifest.2ae2e69a05c33dfc65f8.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
dist/static/js/manifest.15fc3d274cf3e70124f6.js.map


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 1
dist/static/js/manifest.2ae2e69a05c33dfc65f8.js.map


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 33 - 0
dist/static/js/vendor.131b1eebfcf5ce8c5e71.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
dist/static/js/vendor.131b1eebfcf5ce8c5e71.js.map


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 27
dist/static/js/vendor.463ba66acc17e5fc8d15.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 1
dist/static/js/vendor.463ba66acc17e5fc8d15.js.map


+ 13 - 0
node_modules/.package-lock.json

@@ -3581,6 +3581,11 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/default-passive-events": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/default-passive-events/-/default-passive-events-2.0.0.tgz",
+      "integrity": "sha512-eMtt76GpDVngZQ3ocgvRcNCklUMwID1PaNbCNxfpDXuiOXttSh0HzBbda1HU9SIUsDc02vb7g9+3I5tlqe/qMQ=="
+    },
     "node_modules/define-properties": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -13111,6 +13116,14 @@
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "dev": true
     },
+    "node_modules/vuex": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.4.0.tgz",
+      "integrity": "sha512-ajtqwEW/QhnrBZQsZxCLHThZZaa+Db45c92Asf46ZDXu6uHXgbfVuBaJ4gzD2r4UX0oMJHstFwd2r2HM4l8umg==",
+      "peerDependencies": {
+        "vue": "^2.0.0"
+      }
+    },
     "node_modules/watchpack": {
       "version": "1.7.5",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",

+ 0 - 1
node_modules/default-passive-events

@@ -1 +0,0 @@
-_default-passive-events@2.0.0@default-passive-events

node_modules/_default-passive-events@2.0.0@default-passive-events/LICENSE → node_modules/default-passive-events/LICENSE


node_modules/_default-passive-events@2.0.0@default-passive-events/README.md → node_modules/default-passive-events/README.md


node_modules/_default-passive-events@2.0.0@default-passive-events/dist/index.js → node_modules/default-passive-events/dist/index.js


node_modules/_default-passive-events@2.0.0@default-passive-events/dist/index.js.map → node_modules/default-passive-events/dist/index.js.map


node_modules/_default-passive-events@2.0.0@default-passive-events/dist/index.modern.js → node_modules/default-passive-events/dist/index.modern.js


node_modules/_default-passive-events@2.0.0@default-passive-events/dist/index.modern.js.map → node_modules/default-passive-events/dist/index.modern.js.map


node_modules/_default-passive-events@2.0.0@default-passive-events/dist/index.module.js → node_modules/default-passive-events/dist/index.module.js


node_modules/_default-passive-events@2.0.0@default-passive-events/dist/index.module.js.map → node_modules/default-passive-events/dist/index.module.js.map


node_modules/_default-passive-events@2.0.0@default-passive-events/dist/index.umd.js → node_modules/default-passive-events/dist/index.umd.js


node_modules/_default-passive-events@2.0.0@default-passive-events/dist/index.umd.js.map → node_modules/default-passive-events/dist/index.umd.js.map


+ 2 - 5
node_modules/_default-passive-events@2.0.0@default-passive-events/package.json

@@ -41,8 +41,5 @@
   ],
   "jest": {
     "resetMocks": true
-  },
-  "__npminstall_done": "Tue Mar 15 2022 19:45:31 GMT+0800 (中国标准时间)",
-  "_from": "default-passive-events@2.0.0",
-  "_resolved": "https://registry.npmmirror.com/default-passive-events/-/default-passive-events-2.0.0.tgz"
-}
+  }
+}

node_modules/_default-passive-events@2.0.0@default-passive-events/src/index.js → node_modules/default-passive-events/src/index.js


node_modules/_default-passive-events@2.0.0@default-passive-events/src/utils.js → node_modules/default-passive-events/src/utils.js


node_modules/_default-passive-events@2.0.0@default-passive-events/yarn.lock → node_modules/default-passive-events/yarn.lock


+ 314 - 0
node_modules/vuex/CHANGELOG.md

@@ -0,0 +1,314 @@
+# [3.4.0](https://github.com/vuejs/vuex/compare/v3.3.0...v3.4.0) (2020-05-11)
+
+
+### Features
+
+* Allow action subscribers to catch rejections. ([#1740](https://github.com/vuejs/vuex/issues/1740)) ([6ebbe64](https://github.com/vuejs/vuex/commit/6ebbe64c5821d19e55a41dc8b1d81cfce6cbd195)), closes [#1489](https://github.com/vuejs/vuex/issues/1489) [#1558](https://github.com/vuejs/vuex/issues/1558) [#1625](https://github.com/vuejs/vuex/issues/1625)
+
+
+
+# [3.3.0](https://github.com/vuejs/vuex/compare/v3.2.0...v3.3.0) (2020-04-25)
+
+
+### Bug Fixes
+
+* Prepend devtool handler ([#1358](https://github.com/vuejs/vuex/issues/1358)) ([a39d076](https://github.com/vuejs/vuex/commit/a39d0767e4041cdd5cf8050774106c01d39024e0)), closes [vuejs/vue-devtools#678](https://github.com/vuejs/vue-devtools/issues/678)
+* **types:** Add `devtools` to store options type ([#1478](https://github.com/vuejs/vuex/issues/1478)) ([38c11dc](https://github.com/vuejs/vuex/commit/38c11dcbaea7d7e661a1623cabb5aef7c6e47ba7))
+
+
+### Features
+
+* Add `prepend` option for `subscribe` and `subscribeAction` ([#1358](https://github.com/vuejs/vuex/issues/1358)) ([a39d076](https://github.com/vuejs/vuex/commit/a39d0767e4041cdd5cf8050774106c01d39024e0))
+* **logger:** `createLogger` can optionally log actions ([#987](https://github.com/vuejs/vuex/issues/987)) ([18be128](https://github.com/vuejs/vuex/commit/18be128ad933d1fca6da05c060f7664ce0c819ae))
+
+
+
+# [3.2.0](https://github.com/vuejs/vuex/compare/v3.1.3...v3.2.0) (2020-04-19)
+
+
+### Features
+
+* add Store#hasModule(path) API ([#834](https://github.com/vuejs/vuex/issues/834)) ([d65d142](https://github.com/vuejs/vuex/commit/d65d14276e87aca17cfbd3fbf4af9e8dbb808f24))
+
+
+
+## [3.1.3](https://github.com/vuejs/vuex/compare/v3.1.2...v3.1.3) (2020-03-09)
+
+
+### Bug Fixes
+
+* Prevent invalidating subscription iterator  ([#1438](https://github.com/vuejs/vuex/issues/1438)) ([e012653](https://github.com/vuejs/vuex/commit/e0126533301febf66072f1865cf9a77778cf2176))
+
+
+
+## [3.1.2](https://github.com/vuejs/vuex/compare/v3.1.1...v3.1.2) (2019-11-10)
+
+
+### Bug Fixes
+
+* tweak mapping helper warning message ([#1641](https://github.com/vuejs/vuex/issues/1641)) ([e60bc76](https://github.com/vuejs/vuex/commit/e60bc76154bb05c12b24342617b946d9a6e2f476))
+* **types:** avoid broadening vue instance type when using map helpers ([#1639](https://github.com/vuejs/vuex/issues/1639)) ([9a96720](https://github.com/vuejs/vuex/commit/9a9672050bcfee198c379069ec0e1b03ca6cb965))
+* add warnings when the different namespaced modules has the same names… ([#1554](https://github.com/vuejs/vuex/issues/1554)) ([91f3e69](https://github.com/vuejs/vuex/commit/91f3e69ed9e290cf91f8885c6d5ae2c97fa7ab81))
+* Should vuex mapState print error message [#1093](https://github.com/vuejs/vuex/issues/1093) ([#1297](https://github.com/vuejs/vuex/issues/1297)) ([e5ca2d5](https://github.com/vuejs/vuex/commit/e5ca2d52e89a126bd48bd8a6003be77379960ea9))
+* Warn about conflicts between state and module ([#1365](https://github.com/vuejs/vuex/issues/1365)) ([538ee58](https://github.com/vuejs/vuex/commit/538ee5803bbca2fc8077208fb30c8d56d8be5cae))
+* **docs:** Clearify state object type ([#1601](https://github.com/vuejs/vuex/issues/1601)) ([de06f76](https://github.com/vuejs/vuex/commit/de06f76380e7429489c0eb15acc8e0b34a383860))
+
+
+### Performance Improvements
+
+* Implementing a cache for the gettersProxy object creation ([#1546](https://github.com/vuejs/vuex/issues/1546)) ([4003382](https://github.com/vuejs/vuex/commit/40033825b7259c2e9b702bdf94e0b24ed4511d7c))
+
+
+
+## [3.1.1](https://github.com/vuejs/vuex/compare/v3.1.0...v3.1.1) (2019-05-08)
+
+
+### Bug Fixes
+
+* Memory leak happening while using registerModule/u… ([#1508](https://github.com/vuejs/vuex/issues/1508)) ([cb9986a](https://github.com/vuejs/vuex/commit/cb9986ae5a62e002a1d876e881ee5f31dd410888)), closes [issue#1507](https://github.com/issue/issues/1507)
+* **types:** Make mutation and action payload optional in definition file ([#1517](https://github.com/vuejs/vuex/issues/1517)) ([0e109e2](https://github.com/vuejs/vuex/commit/0e109e2a38dafdc0c2bd6bd3892bc66cfe252b16)), closes [#1491](https://github.com/vuejs/vuex/issues/1491)
+
+
+### Features
+
+* **devtool:** allow usage in non-browser environments ([#1404](https://github.com/vuejs/vuex/issues/1404)) ([665455f](https://github.com/vuejs/vuex/commit/665455f8daf8512e7adbf63c2842bc0b1e39efdb))
+* **esm build:** build ES modules for browser ([#1533](https://github.com/vuejs/vuex/issues/1533)) ([d7c7f98](https://github.com/vuejs/vuex/commit/d7c7f9844831f98c5c9aaca213746c4ccc5d6929))
+
+
+
+# [3.1.0](https://github.com/vuejs/vuex/compare/v3.0.1...v3.1.0) (2019-01-17)
+
+
+### Bug Fixes
+
+* **types:** add helpers to default export type declaration as in sources ([#1408](https://github.com/vuejs/vuex/issues/1408)) ([404d0de](https://github.com/vuejs/vuex/commit/404d0de9531322a1a462e53dfd858d20f0bd99af))
+* **types:** add type annotation for the context of actions ([#1322](https://github.com/vuejs/vuex/issues/1322)) ([d1b5c66](https://github.com/vuejs/vuex/commit/d1b5c66961ab53e0172cbc706ff616227bcb5c77))
+* **types:** allow a function type for root `state` option ([#1132](https://github.com/vuejs/vuex/issues/1132)) ([d39791b](https://github.com/vuejs/vuex/commit/d39791bd05830b1889705761ef5779449e35e97f))
+* Add key to v-for ([#1369](https://github.com/vuejs/vuex/issues/1369)) ([a9bd047](https://github.com/vuejs/vuex/commit/a9bd047ea147cacfcb4003946aeebccd2c5e1e4e))
+* avoid to call root state function twice ([#1034](https://github.com/vuejs/vuex/issues/1034)) ([86677eb](https://github.com/vuejs/vuex/commit/86677ebcbfaecf712f339b73a568150fc9fd5f5e))
+* fix [#1032](https://github.com/vuejs/vuex/issues/1032), relax vue typing in helpers ([#1044](https://github.com/vuejs/vuex/issues/1044)) ([7c7ed1d](https://github.com/vuejs/vuex/commit/7c7ed1d37ee8a5058082d763d80529e5fef86a0b))
+
+
+### Features
+
+* add ability to turn off devtools on vuex by passing an off options ([#1407](https://github.com/vuejs/vuex/issues/1407)) ([be75d41](https://github.com/vuejs/vuex/commit/be75d41cf54d50177a7db7e9218e8d1c820ae830))
+* ensure errors in action subscribers do not break actions ([acd7249](https://github.com/vuejs/vuex/commit/acd72492eaffff3661f75860a3d7ab37b73c3906))
+
+
+### Reverts
+
+* Revert "Update util find (#1205)" (fix #1286) ([273bf86](https://github.com/vuejs/vuex/commit/273bf86b330ee580a73176c300919996b7d9c2c3)), closes [#1286](https://github.com/vuejs/vuex/issues/1286)
+
+
+
+## [3.0.1](https://github.com/vuejs/vuex/compare/v3.0.0...v3.0.1) (2017-11-01)
+
+
+
+# [3.0.0](https://github.com/vuejs/vuex/compare/v2.5.0...v3.0.0) (2017-10-11)
+
+
+### Features
+
+* **typings:** adapt to the new Vue typings ([#909](https://github.com/vuejs/vuex/issues/909)) ([65dbfec](https://github.com/vuejs/vuex/commit/65dbfec40d5fe7aac05aab333c7b70768997ca7f))
+
+
+### BREAKING CHANGES
+
+* **typings:** It is no longer compatible with the old Vue typings
+
+* chore(package): bump typescript and vue core typings
+
+* chore: bump vue
+
+* Update package.json
+
+
+
+# [2.5.0](https://github.com/vuejs/vuex/compare/v2.4.1...v2.5.0) (2017-10-11)
+
+
+### Bug Fixes
+
+* initialize root state as an empty object if state function returns no value ([#927](https://github.com/vuejs/vuex/issues/927)) ([0e9756b](https://github.com/vuejs/vuex/commit/0e9756b93c5de8e03286d93f0b50af5f8dfd3bac))
+
+
+### Features
+
+* add logger plugin logger config support ([#771](https://github.com/vuejs/vuex/issues/771)) ([804c3bb](https://github.com/vuejs/vuex/commit/804c3bbd2e60f11412f5a7cb7694969f8f6c215c))
+* preserve state with registerModule ([#837](https://github.com/vuejs/vuex/issues/837)) ([4c1841e](https://github.com/vuejs/vuex/commit/4c1841e79e63ca0ca95d0cc1b218fde258f23c20))
+* root actions in namespaced modules ([#941](https://github.com/vuejs/vuex/issues/941)) ([73189eb](https://github.com/vuejs/vuex/commit/73189eb35509de7d49bd2b577900ad560d37dcb0))
+* subscribeAction ([#960](https://github.com/vuejs/vuex/issues/960)) ([a8326b1](https://github.com/vuejs/vuex/commit/a8326b1bd77158e7e5903eed4cc98b52599e3dbd))
+
+
+
+## [2.4.1](https://github.com/vuejs/vuex/compare/v2.4.0...v2.4.1) (2017-09-27)
+
+
+### Bug Fixes
+
+* allow installation on extended Vue copies ([c87b72f](https://github.com/vuejs/vuex/commit/c87b72f2ff7f65e708c4b59a752ef234d0f28d1f))
+* link to details of mutations in components ([#930](https://github.com/vuejs/vuex/issues/930)) ([e82782b](https://github.com/vuejs/vuex/commit/e82782ba81c398dd5b78a195257a9d1c3a6d85ef))
+* move auto installation code into the store constructor ([#914](https://github.com/vuejs/vuex/issues/914)) ([852ac43](https://github.com/vuejs/vuex/commit/852ac43ea4813ecaeb1e5106c4a29c74e57c2fd7))
+
+
+### Features
+
+* allow to passing functions in mapActions/mapMutations (fix [#750](https://github.com/vuejs/vuex/issues/750)) ([#924](https://github.com/vuejs/vuex/issues/924)) ([be15f32](https://github.com/vuejs/vuex/commit/be15f32c0077d8fe9bafa38c1b319b655cfd5f86))
+
+
+
+# [2.4.0](https://github.com/vuejs/vuex/compare/v2.3.0...v2.4.0) (2017-08-29)
+
+
+### Bug Fixes
+
+* **typings:** watch() returns an unwatch function ([#922](https://github.com/vuejs/vuex/issues/922)) ([a4bd081](https://github.com/vuejs/vuex/commit/a4bd0816838cc4a843d833363b9aa412c1256e5e))
+* add missing typings and docs of createNamespacedHelpers ([#910](https://github.com/vuejs/vuex/issues/910)) ([7ad573b](https://github.com/vuejs/vuex/commit/7ad573bba59d23dbd66e3a25e6614296aeb98d42))
+
+
+### Features
+
+* **store:** bind mutation and action handlers to store ([#872](https://github.com/vuejs/vuex/issues/872)) ([67da622](https://github.com/vuejs/vuex/commit/67da6225552e46266ed059c7f0d0128294cd08ed))
+
+
+### Performance Improvements
+
+* do not connect devtools if Vue.config.devtools == false ([#881](https://github.com/vuejs/vuex/issues/881)) ([dd7f817](https://github.com/vuejs/vuex/commit/dd7f8178d93e6121a447c410b9c652f40cd80937))
+
+
+
+# [2.3.0](https://github.com/vuejs/vuex/compare/v2.2.1...v2.3.0) (2017-04-13)
+
+
+* Add '-loader' suffix to webpack config (#722) ([84b4634](https://github.com/vuejs/vuex/commit/84b463438ea4133f7f326dc18212e3d4b7b5a177)), closes [#722](https://github.com/vuejs/vuex/issues/722)
+
+
+### BREAKING CHANGES
+
+* It's no longer allowed to omit the '-loader' suffix when using loaders. You need to specify 'babel-loader' instead of 'babel'.
+My version of webpack: 2.2.0-rc.3
+Adding the '-loader' suffix fixed the problem.
+Not sure though how safe it is to use 'babel-loader' instead of 'babel' with previous webpack versions...
+
+
+
+## [2.2.1](https://github.com/vuejs/vuex/compare/v2.2.0...v2.2.1) (2017-02-26)
+
+
+
+# [2.2.0](https://github.com/vuejs/vuex/compare/v2.1.2...v2.2.0) (2017-02-26)
+
+
+
+## [2.1.2](https://github.com/vuejs/vuex/compare/v2.1.1...v2.1.2) (2017-02-06)
+
+
+### Reverts
+
+* Revert "Update modules.md (#534)" ([5e145b3](https://github.com/vuejs/vuex/commit/5e145b3a2d45977b52cfff41b3b663f629d67e74)), closes [#534](https://github.com/vuejs/vuex/issues/534)
+
+
+
+## [2.1.1](https://github.com/vuejs/vuex/compare/v2.1.0...v2.1.1) (2016-12-17)
+
+
+
+# [2.1.0](https://github.com/vuejs/vuex/compare/v2.0.0...v2.1.0) (2016-12-16)
+
+
+
+# [2.0.0](https://github.com/vuejs/vuex/compare/v2.0.0-rc.6...v2.0.0) (2016-09-30)
+
+
+
+# [2.0.0-rc.6](https://github.com/vuejs/vuex/compare/v2.0.0-rc.5...v2.0.0-rc.6) (2016-09-24)
+
+
+
+# [2.0.0-rc.5](https://github.com/vuejs/vuex/compare/v2.0.0-rc.4...v2.0.0-rc.5) (2016-08-15)
+
+
+
+# [2.0.0-rc.4](https://github.com/vuejs/vuex/compare/v2.0.0-rc.3...v2.0.0-rc.4) (2016-08-05)
+
+
+
+# [2.0.0-rc.3](https://github.com/vuejs/vuex/compare/v2.0.0-rc.1...v2.0.0-rc.3) (2016-07-11)
+
+
+
+# [2.0.0-rc.1](https://github.com/vuejs/vuex/compare/v1.0.0-rc...v2.0.0-rc.1) (2016-07-05)
+
+
+
+# [1.0.0-rc](https://github.com/vuejs/vuex/compare/v0.8.2...v1.0.0-rc) (2016-07-01)
+
+
+
+## [0.8.2](https://github.com/vuejs/vuex/compare/v0.8.1...v0.8.2) (2016-06-28)
+
+
+
+## [0.8.1](https://github.com/vuejs/vuex/compare/v0.8.0...v0.8.1) (2016-06-28)
+
+
+
+# [0.8.0](https://github.com/vuejs/vuex/compare/v0.7.1...v0.8.0) (2016-06-23)
+
+
+
+## [0.7.1](https://github.com/vuejs/vuex/compare/v0.7.0...v0.7.1) (2016-06-22)
+
+
+
+# [0.7.0](https://github.com/vuejs/vuex/compare/v0.6.3...v0.7.0) (2016-06-21)
+
+
+
+## [0.6.3](https://github.com/vuejs/vuex/compare/v0.6.2...v0.6.3) (2016-04-23)
+
+
+
+## [0.6.2](https://github.com/vuejs/vuex/compare/v0.6.1...v0.6.2) (2016-03-08)
+
+
+
+## [0.6.1](https://github.com/vuejs/vuex/compare/v0.6.0...v0.6.1) (2016-03-07)
+
+
+
+# [0.6.0](https://github.com/vuejs/vuex/compare/v0.5.1...v0.6.0) (2016-03-07)
+
+
+
+## [0.5.1](https://github.com/vuejs/vuex/compare/v0.5.0...v0.5.1) (2016-03-04)
+
+
+
+# [0.5.0](https://github.com/vuejs/vuex/compare/v0.4.2...v0.5.0) (2016-03-04)
+
+
+
+## [0.4.2](https://github.com/vuejs/vuex/compare/v0.4.1...v0.4.2) (2016-03-02)
+
+
+
+## [0.4.1](https://github.com/vuejs/vuex/compare/v0.4.0...v0.4.1) (2016-03-01)
+
+
+
+# [0.4.0](https://github.com/vuejs/vuex/compare/v0.3.0...v0.4.0) (2016-03-01)
+
+
+
+# [0.3.0](https://github.com/vuejs/vuex/compare/4a22523b8cf4a1954ec95a0083ddef6c085f4905...v0.3.0) (2016-02-16)
+
+
+### Bug Fixes
+
+* **api:** fix typo ([4a22523](https://github.com/vuejs/vuex/commit/4a22523b8cf4a1954ec95a0083ddef6c085f4905))
+* **forms:** fix typo ([50094a6](https://github.com/vuejs/vuex/commit/50094a604f32d00ceb784a3fbf07c82c502faca2))
+
+
+

+ 21 - 0
node_modules/vuex/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Evan You
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 33 - 0
node_modules/vuex/README.md

@@ -0,0 +1,33 @@
+# Vuex [![Build Status](https://circleci.com/gh/vuejs/vuex/tree/dev.png?style=shield)](https://circleci.com/gh/vuejs/vuex)
+
+> Centralized State Management for Vue.js.
+
+<p align="center">
+  <img width="700px" src="https://raw.githubusercontent.com/vuejs/vuex/dev/docs/.vuepress/public/vuex.png">
+</p>
+
+- [What is Vuex?](https://vuex.vuejs.org/)
+- [Full Documentation](http://vuex.vuejs.org/)
+
+## Examples
+
+- [Counter](https://github.com/vuejs/vuex/tree/dev/examples/counter)
+- [Counter with Hot Reload](https://github.com/vuejs/vuex/tree/dev/examples/counter-hot)
+- [TodoMVC](https://github.com/vuejs/vuex/tree/dev/examples/todomvc)
+- [Flux Chat](https://github.com/vuejs/vuex/tree/dev/examples/chat)
+- [Shopping Cart](https://github.com/vuejs/vuex/tree/dev/examples/shopping-cart)
+
+Running the examples:
+
+``` bash
+$ npm install
+$ npm run dev # serve examples at localhost:8080
+```
+
+## Contribution
+
+Please make sure to read the [Contributing Guide](https://github.com/vuejs/vuex/blob/dev/.github/contributing.md) before making a pull request.
+
+## License
+
+[MIT](http://opensource.org/licenses/MIT)

+ 17 - 0
node_modules/vuex/dist/logger.d.ts

@@ -0,0 +1,17 @@
+// Types for the logger plugin. This file must be put alongside the bundled
+// JavaScript file of the logger.
+
+import { Payload, Plugin } from "../types/index";
+
+export interface LoggerOption<S> {
+  collapsed?: boolean;
+  filter?: <P extends Payload>(mutation: P, stateBefore: S, stateAfter: S) => boolean;
+  transformer?: (state: S) => any;
+  mutationTransformer?: <P extends Payload>(mutation: P) => any;
+  actionFilter?: <P extends Payload>(action: P, state: S) => boolean;
+  actionTransformer?: <P extends Payload>(action: P) => any;
+  logMutations?: boolean;
+  logActions?: boolean;
+}
+
+export default function createLogger<S>(option?: LoggerOption<S>): Plugin<S>;

+ 155 - 0
node_modules/vuex/dist/logger.js

@@ -0,0 +1,155 @@
+/*!
+ * vuex v3.4.0
+ * (c) 2020 Evan You
+ * @license MIT
+ */
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = global || self, global.Vuex = factory());
+}(this, (function () { 'use strict';
+
+  /**
+   * Get the first item that pass the test
+   * by second argument function
+   *
+   * @param {Array} list
+   * @param {Function} f
+   * @return {*}
+   */
+  function find (list, f) {
+    return list.filter(f)[0]
+  }
+
+  /**
+   * Deep copy the given object considering circular structure.
+   * This function caches all nested objects and its copies.
+   * If it detects circular structure, use cached copy to avoid infinite loop.
+   *
+   * @param {*} obj
+   * @param {Array<Object>} cache
+   * @return {*}
+   */
+  function deepCopy (obj, cache) {
+    if ( cache === void 0 ) cache = [];
+
+    // just return if obj is immutable value
+    if (obj === null || typeof obj !== 'object') {
+      return obj
+    }
+
+    // if obj is hit, it is in circular structure
+    var hit = find(cache, function (c) { return c.original === obj; });
+    if (hit) {
+      return hit.copy
+    }
+
+    var copy = Array.isArray(obj) ? [] : {};
+    // put the copy into cache at first
+    // because we want to refer it in recursive deepCopy
+    cache.push({
+      original: obj,
+      copy: copy
+    });
+
+    Object.keys(obj).forEach(function (key) {
+      copy[key] = deepCopy(obj[key], cache);
+    });
+
+    return copy
+  }
+
+  // Credits: borrowed code from fcomb/redux-logger
+
+  function createLogger (ref) {
+    if ( ref === void 0 ) ref = {};
+    var collapsed = ref.collapsed; if ( collapsed === void 0 ) collapsed = true;
+    var filter = ref.filter; if ( filter === void 0 ) filter = function (mutation, stateBefore, stateAfter) { return true; };
+    var transformer = ref.transformer; if ( transformer === void 0 ) transformer = function (state) { return state; };
+    var mutationTransformer = ref.mutationTransformer; if ( mutationTransformer === void 0 ) mutationTransformer = function (mut) { return mut; };
+    var actionFilter = ref.actionFilter; if ( actionFilter === void 0 ) actionFilter = function (action, state) { return true; };
+    var actionTransformer = ref.actionTransformer; if ( actionTransformer === void 0 ) actionTransformer = function (act) { return act; };
+    var logMutations = ref.logMutations; if ( logMutations === void 0 ) logMutations = true;
+    var logActions = ref.logActions; if ( logActions === void 0 ) logActions = true;
+    var logger = ref.logger; if ( logger === void 0 ) logger = console;
+
+    return function (store) {
+      var prevState = deepCopy(store.state);
+
+      if (typeof logger === 'undefined') {
+        return
+      }
+
+      if (logMutations) {
+        store.subscribe(function (mutation, state) {
+          var nextState = deepCopy(state);
+
+          if (filter(mutation, prevState, nextState)) {
+            var formattedTime = getFormattedTime();
+            var formattedMutation = mutationTransformer(mutation);
+            var message = "mutation " + (mutation.type) + formattedTime;
+
+            startMessage(logger, message, collapsed);
+            logger.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState));
+            logger.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation);
+            logger.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState));
+            endMessage(logger);
+          }
+
+          prevState = nextState;
+        });
+      }
+
+      if (logActions) {
+        store.subscribeAction(function (action, state) {
+          if (actionFilter(action, state)) {
+            var formattedTime = getFormattedTime();
+            var formattedAction = actionTransformer(action);
+            var message = "action " + (action.type) + formattedTime;
+
+            startMessage(logger, message, collapsed);
+            logger.log('%c action', 'color: #03A9F4; font-weight: bold', formattedAction);
+            endMessage(logger);
+          }
+        });
+      }
+    }
+  }
+
+  function startMessage (logger, message, collapsed) {
+    var startMessage = collapsed
+      ? logger.groupCollapsed
+      : logger.group;
+
+    // render
+    try {
+      startMessage.call(logger, message);
+    } catch (e) {
+      logger.log(message);
+    }
+  }
+
+  function endMessage (logger) {
+    try {
+      logger.groupEnd();
+    } catch (e) {
+      logger.log('—— log end ——');
+    }
+  }
+
+  function getFormattedTime () {
+    var time = new Date();
+    return (" @ " + (pad(time.getHours(), 2)) + ":" + (pad(time.getMinutes(), 2)) + ":" + (pad(time.getSeconds(), 2)) + "." + (pad(time.getMilliseconds(), 3)))
+  }
+
+  function repeat (str, times) {
+    return (new Array(times + 1)).join(str)
+  }
+
+  function pad (num, maxLength) {
+    return repeat('0', maxLength - num.toString().length) + num
+  }
+
+  return createLogger;
+
+})));

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1093 - 0
node_modules/vuex/dist/vuex.common.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1052 - 0
node_modules/vuex/dist/vuex.esm.browser.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 6 - 0
node_modules/vuex/dist/vuex.esm.browser.min.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1092 - 0
node_modules/vuex/dist/vuex.esm.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1099 - 0
node_modules/vuex/dist/vuex.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 6 - 0
node_modules/vuex/dist/vuex.min.js


+ 87 - 0
node_modules/vuex/package.json

@@ -0,0 +1,87 @@
+{
+  "name": "vuex",
+  "version": "3.4.0",
+  "description": "state management for Vue.js",
+  "main": "dist/vuex.common.js",
+  "module": "dist/vuex.esm.js",
+  "unpkg": "dist/vuex.js",
+  "jsdelivr": "dist/vuex.js",
+  "typings": "types/index.d.ts",
+  "sideEffects": false,
+  "files": [
+    "dist",
+    "types/index.d.ts",
+    "types/helpers.d.ts",
+    "types/vue.d.ts"
+  ],
+  "scripts": {
+    "dev": "node examples/server.js",
+    "build": "npm run build:main && npm run build:logger",
+    "build:main": "node scripts/build-main.js",
+    "build:logger": "node scripts/build-logger.js",
+    "lint": "eslint src test",
+    "test": "npm run lint && npm run test:types && npm run test:unit && npm run test:ssr && npm run test:e2e",
+    "test:unit": "jest --testPathIgnorePatterns test/e2e",
+    "test:e2e": "node test/e2e/runner.js",
+    "test:ssr": "cross-env VUE_ENV=server jest --testPathIgnorePatterns test/e2e",
+    "test:types": "tsc -p types/test",
+    "coverage": "jest --testPathIgnorePatterns test/e2e --coverage",
+    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
+    "release": "node scripts/release.js",
+    "docs": "vuepress dev docs",
+    "docs:build": "vuepress build docs"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vuejs/vuex.git"
+  },
+  "author": "Evan You",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vuejs/vuex/issues"
+  },
+  "homepage": "https://github.com/vuejs/vuex#readme",
+  "peerDependencies": {
+    "vue": "^2.0.0"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.9.6",
+    "@babel/preset-env": "^7.9.6",
+    "@rollup/plugin-buble": "^0.21.3",
+    "@rollup/plugin-commonjs": "^11.1.0",
+    "@rollup/plugin-node-resolve": "^7.1.3",
+    "@rollup/plugin-replace": "^2.3.2",
+    "@types/node": "^13.13.5",
+    "babel-jest": "^26.0.1",
+    "babel-loader": "^8.1.0",
+    "brotli": "^1.3.2",
+    "chalk": "^4.0.0",
+    "chromedriver": "^80.0.1",
+    "conventional-changelog-cli": "^2.0.31",
+    "cross-env": "^5.2.0",
+    "cross-spawn": "^6.0.5",
+    "css-loader": "^2.1.0",
+    "enquirer": "^2.3.5",
+    "eslint": "^6.8.0",
+    "eslint-plugin-vue-libs": "^4.0.0",
+    "execa": "^4.0.0",
+    "express": "^4.17.1",
+    "jest": "^26.0.1",
+    "nightwatch": "^1.3.1",
+    "nightwatch-helpers": "^1.2.0",
+    "regenerator-runtime": "^0.13.5",
+    "rollup": "^2.8.2",
+    "rollup-plugin-terser": "^5.3.0",
+    "semver": "^7.3.2",
+    "todomvc-app-css": "^2.1.0",
+    "typescript": "^3.8.3",
+    "vue": "^2.5.22",
+    "vue-loader": "^15.2.1",
+    "vue-template-compiler": "^2.5.22",
+    "vuepress": "^0.14.1",
+    "vuepress-theme-vue": "^1.1.0",
+    "webpack": "^4.43.0",
+    "webpack-dev-middleware": "^3.7.2",
+    "webpack-hot-middleware": "^2.25.0"
+  }
+}

+ 86 - 0
node_modules/vuex/types/helpers.d.ts

@@ -0,0 +1,86 @@
+import Vue from 'vue';
+import { Dispatch, Commit } from './index';
+
+type Computed = () => any;
+type InlineComputed<T extends Function> = T extends (...args: any[]) => infer R ? () => R : never
+type MutationMethod = (...args: any[]) => void;
+type ActionMethod = (...args: any[]) => Promise<any>;
+type InlineMethod<T extends (fn: any, ...args: any[]) => any> = T extends (fn: any, ...args: infer Args) => infer R ? (...args: Args) => R : never
+type CustomVue = Vue & Record<string, any>;
+
+interface Mapper<R> {
+  <Key extends string>(map: Key[]): { [K in Key]: R };
+  <Map extends Record<string, string>>(map: Map): { [K in keyof Map]: R };
+}
+
+interface MapperWithNamespace<R> {
+  <Key extends string>(namespace: string, map: Key[]): { [K in Key]: R };
+  <Map extends Record<string, string>>(namespace: string, map: Map): { [K in keyof Map]: R };
+}
+
+interface MapperForState {
+  <S, Map extends Record<string, (this: CustomVue, state: S, getters: any) => any> = {}>(
+    map: Map
+  ): { [K in keyof Map]: InlineComputed<Map[K]> };
+}
+
+interface MapperForStateWithNamespace {
+  <S, Map extends Record<string, (this: CustomVue, state: S, getters: any) => any> = {}>(
+    namespace: string,
+    map: Map
+  ): { [K in keyof Map]: InlineComputed<Map[K]> };
+}
+
+interface MapperForAction {
+  <Map extends Record<string, (this: CustomVue, dispatch: Dispatch, ...args: any[]) => any>>(
+    map: Map
+  ): { [K in keyof Map]: InlineMethod<Map[K]> };
+}
+
+interface MapperForActionWithNamespace {
+  <Map extends Record<string, (this: CustomVue, dispatch: Dispatch, ...args: any[]) => any>>(
+    namespace: string,
+    map: Map
+  ): { [K in keyof Map]: InlineMethod<Map[K]> };
+}
+
+interface MapperForMutation {
+  <Map extends Record<string, (this: CustomVue, commit: Commit, ...args: any[]) => any>>(
+    map: Map
+  ): { [K in keyof Map]: InlineMethod<Map[K]> };
+}
+
+interface MapperForMutationWithNamespace {
+  <Map extends Record<string, (this: CustomVue, commit: Commit, ...args: any[]) => any>>(
+    namespace: string,
+    map: Map
+  ): { [K in keyof Map]: InlineMethod<Map[K]> };
+}
+
+
+interface NamespacedMappers {
+  mapState: Mapper<Computed> & MapperForState;
+  mapMutations: Mapper<MutationMethod> & MapperForMutation;
+  mapGetters: Mapper<Computed>;
+  mapActions: Mapper<ActionMethod> & MapperForAction;
+}
+
+export declare const mapState: Mapper<Computed>
+  & MapperWithNamespace<Computed>
+  & MapperForState
+  & MapperForStateWithNamespace;
+
+export declare const mapMutations: Mapper<MutationMethod>
+  & MapperWithNamespace<MutationMethod>
+  & MapperForMutation
+  & MapperForMutationWithNamespace;
+
+export declare const mapGetters: Mapper<Computed>
+  & MapperWithNamespace<Computed>;
+
+export declare const mapActions: Mapper<ActionMethod>
+  & MapperWithNamespace<ActionMethod>
+  & MapperForAction
+  & MapperForActionWithNamespace;
+
+export declare function createNamespacedHelpers(namespace: string): NamespacedMappers;

+ 159 - 0
node_modules/vuex/types/index.d.ts

@@ -0,0 +1,159 @@
+import _Vue, { WatchOptions } from "vue";
+
+// augment typings of Vue.js
+import "./vue";
+
+import { mapState, mapMutations, mapGetters, mapActions, createNamespacedHelpers } from "./helpers";
+
+export * from "./helpers";
+
+export declare class Store<S> {
+  constructor(options: StoreOptions<S>);
+
+  readonly state: S;
+  readonly getters: any;
+
+  replaceState(state: S): void;
+
+  dispatch: Dispatch;
+  commit: Commit;
+
+  subscribe<P extends MutationPayload>(fn: (mutation: P, state: S) => any, options?: SubscribeOptions): () => void;
+  subscribeAction<P extends ActionPayload>(fn: SubscribeActionOptions<P, S>, options?: SubscribeOptions): () => void;
+  watch<T>(getter: (state: S, getters: any) => T, cb: (value: T, oldValue: T) => void, options?: WatchOptions): () => void;
+
+  registerModule<T>(path: string, module: Module<T, S>, options?: ModuleOptions): void;
+  registerModule<T>(path: string[], module: Module<T, S>, options?: ModuleOptions): void;
+
+  unregisterModule(path: string): void;
+  unregisterModule(path: string[]): void;
+
+  hasModule(path: string): boolean;
+  hasModule(path: string[]): boolean;
+
+  hotUpdate(options: {
+    actions?: ActionTree<S, S>;
+    mutations?: MutationTree<S>;
+    getters?: GetterTree<S, S>;
+    modules?: ModuleTree<S>;
+  }): void;
+}
+
+export declare function install(Vue: typeof _Vue): void;
+
+export interface Dispatch {
+  (type: string, payload?: any, options?: DispatchOptions): Promise<any>;
+  <P extends Payload>(payloadWithType: P, options?: DispatchOptions): Promise<any>;
+}
+
+export interface Commit {
+  (type: string, payload?: any, options?: CommitOptions): void;
+  <P extends Payload>(payloadWithType: P, options?: CommitOptions): void;
+}
+
+export interface ActionContext<S, R> {
+  dispatch: Dispatch;
+  commit: Commit;
+  state: S;
+  getters: any;
+  rootState: R;
+  rootGetters: any;
+}
+
+export interface Payload {
+  type: string;
+}
+
+export interface MutationPayload extends Payload {
+  payload: any;
+}
+
+export interface ActionPayload extends Payload {
+  payload: any;
+}
+
+export interface SubscribeOptions {
+  prepend?: boolean
+}
+
+export type ActionSubscriber<P, S> = (action: P, state: S) => any;
+export type ActionErrorSubscriber<P, S> = (action: P, state: S, error: Error) => any;
+
+export interface ActionSubscribersObject<P, S> {
+  before?: ActionSubscriber<P, S>;
+  after?: ActionSubscriber<P, S>;
+  error?: ActionErrorSubscriber<P, S>;
+}
+
+export type SubscribeActionOptions<P, S> = ActionSubscriber<P, S> | ActionSubscribersObject<P, S>;
+
+export interface DispatchOptions {
+  root?: boolean;
+}
+
+export interface CommitOptions {
+  silent?: boolean;
+  root?: boolean;
+}
+
+export interface StoreOptions<S> {
+  state?: S | (() => S);
+  getters?: GetterTree<S, S>;
+  actions?: ActionTree<S, S>;
+  mutations?: MutationTree<S>;
+  modules?: ModuleTree<S>;
+  plugins?: Plugin<S>[];
+  strict?: boolean;
+  devtools?: boolean;
+}
+
+export type ActionHandler<S, R> = (this: Store<R>, injectee: ActionContext<S, R>, payload?: any) => any;
+export interface ActionObject<S, R> {
+  root?: boolean;
+  handler: ActionHandler<S, R>;
+}
+
+export type Getter<S, R> = (state: S, getters: any, rootState: R, rootGetters: any) => any;
+export type Action<S, R> = ActionHandler<S, R> | ActionObject<S, R>;
+export type Mutation<S> = (state: S, payload?: any) => any;
+export type Plugin<S> = (store: Store<S>) => any;
+
+export interface Module<S, R> {
+  namespaced?: boolean;
+  state?: S | (() => S);
+  getters?: GetterTree<S, R>;
+  actions?: ActionTree<S, R>;
+  mutations?: MutationTree<S>;
+  modules?: ModuleTree<R>;
+}
+
+export interface ModuleOptions {
+  preserveState?: boolean;
+}
+
+export interface GetterTree<S, R> {
+  [key: string]: Getter<S, R>;
+}
+
+export interface ActionTree<S, R> {
+  [key: string]: Action<S, R>;
+}
+
+export interface MutationTree<S> {
+  [key: string]: Mutation<S>;
+}
+
+export interface ModuleTree<R> {
+  [key: string]: Module<any, R>;
+}
+
+declare const _default: {
+  Store: typeof Store;
+  install: typeof install;
+  mapState: typeof mapState,
+  mapMutations: typeof mapMutations,
+  mapGetters: typeof mapGetters,
+  mapActions: typeof mapActions,
+  createNamespacedHelpers: typeof createNamespacedHelpers,
+};
+export default _default;

+ 18 - 0
node_modules/vuex/types/vue.d.ts

@@ -0,0 +1,18 @@
+/**
+ * Extends interfaces in Vue.js
+ */
+
+import Vue, { ComponentOptions } from "vue";
+import { Store } from "./index";
+
+declare module "vue/types/options" {
+  interface ComponentOptions<V extends Vue> {
+    store?: Store<any>;
+  }
+}
+
+declare module "vue/types/vue" {
+  interface Vue {
+    $store: Store<any>;
+  }
+}

+ 27 - 1
package-lock.json

@@ -9,9 +9,11 @@
       "version": "1.0.0",
       "dependencies": {
         "axios": "^0.26.1",
+        "default-passive-events": "^2.0.0",
         "element-ui": "^2.15.6",
         "vue": "^2.5.2",
-        "vue-router": "^3.0.1"
+        "vue-router": "^3.0.1",
+        "vuex": "^3.4.0"
       },
       "devDependencies": {
         "autoprefixer": "^7.1.2",
@@ -3632,6 +3634,11 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/default-passive-events": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/default-passive-events/-/default-passive-events-2.0.0.tgz",
+      "integrity": "sha512-eMtt76GpDVngZQ3ocgvRcNCklUMwID1PaNbCNxfpDXuiOXttSh0HzBbda1HU9SIUsDc02vb7g9+3I5tlqe/qMQ=="
+    },
     "node_modules/define-properties": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -13162,6 +13169,14 @@
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "dev": true
     },
+    "node_modules/vuex": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.4.0.tgz",
+      "integrity": "sha512-ajtqwEW/QhnrBZQsZxCLHThZZaa+Db45c92Asf46ZDXu6uHXgbfVuBaJ4gzD2r4UX0oMJHstFwd2r2HM4l8umg==",
+      "peerDependencies": {
+        "vue": "^2.0.0"
+      }
+    },
     "node_modules/watchpack": {
       "version": "1.7.5",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
@@ -17417,6 +17432,11 @@
       "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
       "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
     },
+    "default-passive-events": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/default-passive-events/-/default-passive-events-2.0.0.tgz",
+      "integrity": "sha512-eMtt76GpDVngZQ3ocgvRcNCklUMwID1PaNbCNxfpDXuiOXttSh0HzBbda1HU9SIUsDc02vb7g9+3I5tlqe/qMQ=="
+    },
     "define-properties": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -25154,6 +25174,12 @@
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "dev": true
     },
+    "vuex": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.4.0.tgz",
+      "integrity": "sha512-ajtqwEW/QhnrBZQsZxCLHThZZaa+Db45c92Asf46ZDXu6uHXgbfVuBaJ4gzD2r4UX0oMJHstFwd2r2HM4l8umg==",
+      "requires": {}
+    },
     "watchpack": {
       "version": "1.7.5",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",

+ 2 - 1
package.json

@@ -14,7 +14,8 @@
     "default-passive-events": "^2.0.0",
     "element-ui": "^2.15.6",
     "vue": "^2.5.2",
-    "vue-router": "^3.0.1"
+    "vue-router": "^3.0.1",
+    "vuex": "^3.4.0"
   },
   "devDependencies": {
     "autoprefixer": "^7.1.2",

+ 35 - 0
src/components/complaint/complaint.css

@@ -9,6 +9,9 @@
 }
 
 .el-table {
+  width: 100%;
+  height: 100%;
+  overflow-y: scroll;
   box-sizing: border-box;
 }
 
@@ -69,3 +72,35 @@
 >>>.el-button {
   margin-right: 20px;
 }
+
+>>>.el-button--text {
+  margin-right: 0px !important;
+}
+
+>>>.el-table::before {
+  background-color: transparent !important;
+}
+
+>>>.el-table__fixed-right::before,
+.el-table__fixed::before {
+  background-color: transparent !important;
+}
+
+>>>.el-dialog__body .form_itm {
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  width: 100%;
+  height: 30px;
+  margin-bottom: 15px;
+}
+
+>>>.el-dialog__body {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-around;
+}
+
+>>>.el-dialog {
+  box-shadow: 0 1px 3px rgb(0 0 0 / 0%) !important;
+}

+ 84 - 35
src/components/complaint/complaint.vue

@@ -23,22 +23,21 @@
       </div>
     </div>
     <!-- 评价订单列表 -->
-    <el-table :data="tableData" style="width: 100%" id="table_field">
-      <el-table-column prop="orderId" label="订单号" width="150">
-      </el-table-column>
-      <el-table-column
-        prop="repairsFault.faultName"
-        label="故障类型"
-        width="180"
-      >
-      </el-table-column>
-      <el-table-column prop="orderCompleteTime" label="维修时间" width="250">
+    <el-table
+      :data="tableData"
+      style="width: 100%"
+      id="table_field"
+      height="150"
+    >
+      <el-table-column prop="orderId" label="订单号"> </el-table-column>
+      <el-table-column prop="repairsFault.faultName" label="故障类型">
       </el-table-column>
-      <el-table-column prop="repairsWork.workName" label="维修人员" width="150">
+      <el-table-column prop="orderCompleteTime" label="维修时间">
       </el-table-column>
-      <el-table-column prop="orderAdvice" label="修后评价" width="260">
+      <el-table-column prop="repairsWork.workName" label="维修人员">
       </el-table-column>
-      <el-table-column fixed="right" label="操作" width="100">
+      <el-table-column prop="orderAdvice" label="修后评价"> </el-table-column>
+      <el-table-column label="操作">
         <template slot-scope="scope">
           <!-- 按钮1——查看详情模块 -->
           <el-button
@@ -51,7 +50,7 @@
           <template v-if="detailObj != null">
             <el-dialog
               title="订单信息"
-              :visible.sync="detailVisible"
+              :visible.sync="detailObj.detailVisible"
               width="30%"
               append-to-body
             >
@@ -80,12 +79,39 @@
                   ><span>{{ detailObj.repairsStudent.studentOtherPhone }}</span>
                 </div>
                 <div class="form_itm">
-                  <span>故障图片:</span
-                  ><span>{{ detailObj.orderImages }}</span>
+                  <span>故障图片:</span>
+                  <template v-if="imgArr != null">
+                    <div class="img_field" v-for="(item, i) in imgArr" :key="i">
+                      <img
+                        @click="item.innerVisible = true"
+                        :src="item.img"
+                        alt=""
+                        style="
+                          max-width: 35px;
+                          max-height: 35px;
+                          margin-right: 20px;
+                        "
+                      />
+                      <el-dialog
+                        width="30%"
+                        title="故障图片"
+                        :visible.sync="item.innerVisible"
+                        append-to-body
+                      >
+                        <img
+                          :src="item.img"
+                          alt="故障图片"
+                          style="width: 100%; max-height: 100%"
+                        />
+                      </el-dialog>
+                    </div>
+                  </template>
                 </div>
               </div>
               <span slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="detailVisible = false"
+                <el-button
+                  type="primary"
+                  @click="detailObj.detailVisible = false"
                   >确 定</el-button
                 >
               </span>
@@ -101,7 +127,7 @@
       @current-change="handleCurrentChange"
       background
       layout="prev, pager, next"
-      :total="10000"
+      :total="1000"
     >
     </el-pagination>
   </div>
@@ -137,11 +163,12 @@ export default {
         ]
       },
       curpage: 1, //页码
-      pageSize: 10, //一页条数
+      pageSize: 15, //一页条数
       sear_data: "", // 查询时间
       workers: null, //工人列表
       searchWork: "", //查询指定
-      detailVisible: false // 详情弹出
+      token: null,
+      imgArr: null
     };
   },
   watch: {
@@ -154,17 +181,26 @@ export default {
     }
   },
   created() {
-    this.getAllComplaintList(null);
-    this.getWorker();
+    this.token = sessionStorage.getItem("token");
+    if (this.token) {
+      this.getAllComplaintList(null);
+      this.getWorker();
+    } else {
+      this.$message({
+        message: "授权失效,请重新登录",
+        type: "warning"
+      });
+      this.$router.push({ path: "/" });
+    }
   },
   methods: {
     //获取维修人员列表
     async getWorker() {
       let { data } = await this.$axios({
         method: "post",
-        url: `/testapi/work/queryAllWorkStatus?pageSize=${100}`,
+        url: `/baoxiu/repairApi/work/queryAllWorkStatus?pageSize=${100}`,
         headers: {
-          access_token: this.token
+          token: this.token
         }
       });
       if (data.status == 200) {
@@ -189,9 +225,9 @@ export default {
       if (sear_data) {
         this.$axios({
           method: "post",
-          url: `/testapi/order/queryAllOrderByAdvice?pageNum=${this.curpage}&pageSize=${this.pageSize}&time=${sear_data}`,
+          url: `/baoxiu/repairApi/order/queryAllOrderByAdvice?pageNum=${this.curpage}&pageSize=${this.pageSize}&time=${sear_data}`,
           headers: {
-            access_token: this.token
+            token: this.token
           }
         })
           .then(({ data }) => {
@@ -210,9 +246,9 @@ export default {
       } else {
         this.$axios({
           method: "post",
-          url: `/testapi/order/queryAllOrderByAdvice?pageNum=${this.curpage}&pageSize=${this.pageSize}`,
+          url: `/baoxiu/repairApi/order/queryAllOrderByAdvice?pageNum=${this.curpage}&pageSize=${this.pageSize}`,
           headers: {
-            access_token: this.token
+            token: this.token
           }
         })
           .then(({ data }) => {
@@ -246,9 +282,9 @@ export default {
       });
       this.$axios({
         method: "post",
-        url: `/testapi/order/queryOrderByWorkIDAdvice?pageNum=${this.curpage}&workId=${this.searchWork}&pageSize=${this.pageSize}`,
+        url: `/baoxiu/repairApi/order/queryOrderByWorkIDAdvice?pageNum=${this.curpage}&workId=${this.searchWork}&pageSize=${this.pageSize}`,
         headers: {
-          access_token: this.token
+          token: this.token
         }
       })
         .then(({ data }) => {
@@ -267,18 +303,31 @@ export default {
     },
     //获取详情信息
     getOrderDetail(order_id) {
-      this.detailObj = null;
+      // this.detailObj = null;
       this.detailVisible = true;
       // console.log(order_id);
       this.$axios({
         method: "post",
-        url: `/testapi/order/queryByOrderId?orderId=${order_id}`,
+        url: `/baoxiu/repairApi/order/queryByOrderId?orderId=${order_id}`,
         headers: {
-          access_token: this.token
+          token: this.token
         }
       })
-        .then(res => {
-          this.detailObj = res.data.data;
+        .then(({ data }) => {
+          // console.log(data.data);
+          this.detailObj = data.data;
+          this.$set(this.detailObj, "detailVisible", true);
+          this.imgArr = this.detailObj.orderImages.match(/[^\;]+/g);
+          this.imgArr = this.imgArr.map(ite => {
+            return { innerVisible: false, img: ite };
+          });
+          // console.log(this.imgArr);
+          if (data.status != 200) {
+            this.$message({
+              message: data.message,
+              type: "warning"
+            });
+          }
         })
         .catch(err => {
           this.$message({

+ 19 - 33
src/components/index/Index.css

@@ -53,6 +53,7 @@
 }
 
 >>>.el-submenu__title {
+  margin-top: 20px;
   padding-left: 30px !important;
   height: 60px;
   font-size: 14px;
@@ -74,6 +75,8 @@
   line-height: 40px;
 }
 
+
+
 .el-menu-item:hover,
 #menu-item:hover {
   background: #134a7a !important;
@@ -88,17 +91,17 @@
   background: #298DEF !important;
 }
 
-.el-menu-item span {
+/* .el-menu-item span {
   height: 20px;
   padding-left: 6px;
   font-size: 14px;
   font-family: Microsoft YaHei-3970(82674968);
   font-weight: 400;
   color: #FFFFFF;
-  line-height: 54px;
-}
 
-.el-menu-item .el-icon-notice {
+} */
+
+>>>.el-submenu__title .el-icon-notice {
   width: 18px;
   height: 18px;
   background: url(../../../static/images/susheguanli.png) center center no-repeat;
@@ -169,34 +172,6 @@
   padding-right: 51px;
 }
 
-/* .tx {
-	width: 24px;
-	height: 24px;
-	border-radius: 50%;
-	background: url(../../../static/images/touxiang.jpg) no-repeat;
-	background-size: 54px 54px;
-	border: 1px solid #EEEEEE;
-} */
-
-/* .shuxian {
-	width: 1px;
-	height: 36px;
-	background: #CCCCCC;
-	margin: 0 21px 0 23px;
-}
-
-.user-name {
-	height: 54px;
-	line-height: 54px;
-	font-size: 20px;
-	font-family: Microsoft YaHei-3970(82674968);
-	font-weight: 400;
-	color: #333333;
-	margin-left: 18px;
-	text-align: center;
-	white-space: nowrap;
-} */
-
 .logout-btn {
   width: 50px;
   height: 50px;
@@ -214,9 +189,20 @@
   margin: 20px 1px 0 20px;
   padding: 20px 63px 28px 50px;
   width: calc(100% - 21px);
-  height: 100%;
+  height: calc(100vh - 70px);
   background: #FFFFFF;
   overflow-y: scroll;
 }
 
+>>>.el-table::before {
+  background-color: transparent !important;
+}
+
+>>>.el-table__fixed-right::before,
+.el-table__fixed::before {
+  background-color: transparent !important;
+}
+
+
+
 /* main */

+ 24 - 18
src/components/index/Index.vue

@@ -36,6 +36,11 @@
                   >查询订单</el-menu-item
                 >
               </router-link>
+              <router-link to="BackOrder">
+                <el-menu-item id="menu-item" index="/index/BackOrder"
+                  >查询退回</el-menu-item
+                >
+              </router-link>
             </el-submenu>
             <router-link to="RepairPeo">
               <el-menu-item index="/index/RepairPeo">
@@ -43,16 +48,26 @@
                 <span slot="title">工人管理</span>
               </el-menu-item>
             </router-link>
-            <router-link to="Notice">
-              <el-menu-item index="/index/Notice">
+            <el-submenu index="2">
+              <template slot="title">
                 <i class="el-icon-notice"></i>
-                <span slot="title">发布公告</span>
-              </el-menu-item>
-            </router-link>
+                <span>公告管理</span>
+              </template>
+              <router-link to="Notice">
+                <el-menu-item id="menu-item" index="/index/Notice">
+                  <span slot="title">发布公告</span>
+                </el-menu-item>
+              </router-link>
+              <router-link to="RecNotice">
+                <el-menu-item id="menu-item" index="/index/RecNotice">
+                  <span slot="title">公告记录</span>
+                </el-menu-item>
+              </router-link>
+            </el-submenu>
             <router-link to="Complaint">
               <el-menu-item index="/index/Complaint">
                 <i class="el-icon-complaint"></i>
-                <span slot="title">意见投诉</span>
+                <span slot="title">修后评价</span>
               </el-menu-item>
             </router-link>
           </el-menu>
@@ -80,13 +95,7 @@
 
 <script>
 export default {
-  data() {
-    return {
-      token:
-        "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDY5OTA1MDAsInVzZXJJZCI6IjEifQ.D4nAou3NRFKhqewVZODCJdsIafXgFiIrlC7CaxvCjbA"
-    };
-  },
-  mounted() {},
+  created() {},
   methods: {
     // 退出登陆
     logout() {
@@ -97,12 +106,9 @@ export default {
         type: "warning"
       })
         .then(_ => {
-          // console.log(_);
-          _this.$router.replace("/");
+          _this.$router.push({ path: "/" });
         })
-        .catch(_ => {
-          // console.log(_);
-        });
+        .catch(_ => {});
     }
   }
 };

+ 27 - 3
src/components/login/Login.vue

@@ -99,9 +99,33 @@ export default {
   },
   methods: {
     submitForm(formName) {
-      if (this.ruleForm.uname == "admin" && this.ruleForm.upass == "123456") {
-        this.$router.push({ path: "/index" });
-      }
+      // if (this.ruleForm.uname == "admin" && this.ruleForm.upass == "123456") {
+      //   this.$router.push({ path: "/index" });
+      // }
+      this.$axios
+        .post(
+          `/baoxiu/repairApi/login/loginAdmin?name=${this.ruleForm.uname}&password
+=${this.ruleForm.upass}`
+        )
+        .then(({ data }) => {
+          // console.log(data.data);
+          sessionStorage.setItem("token", data.data);
+          // console.log(this.$store.state.token);
+          if (data.status != 200) {
+            this.$message({
+              message: data.message,
+              type: "warning"
+            });
+          } else {
+            this.$router.push({ path: "/index" });
+          }
+        })
+        .catch(err => {
+          this.$message({
+            message: err,
+            type: "warning"
+          });
+        });
     }
     //#region
     // submitForm(formName) {

+ 219 - 0
src/components/notice/RecNotice.vue

@@ -0,0 +1,219 @@
+<template>
+  <div id="container">
+    <div class="block">
+      <el-button round @click="rest()">全部订单</el-button>
+      <el-date-picker
+        v-model="sear_data"
+        type="date"
+        placeholder="选择日期"
+        :picker-options="pickerOptions"
+        value-format="yyyy-MM-dd"
+      >
+      </el-date-picker>
+    </div>
+    <el-table
+      :data="tableData"
+      style="width: 100%"
+      id="table_field"
+      height="150"
+    >
+      <el-table-column prop="noticeTime" label="发布时间"> </el-table-column>
+      <el-table-column prop="noticeContent" label="公告内容"> </el-table-column>
+      <el-table-column prop="repairsAdmin.adminName" label="发布人员">
+      </el-table-column>
+      <el-table-column label="操作">
+        <template slot-scope="scope">
+          <el-button
+            @click.native.prevent="
+              deleteRow(scope.$index, tableData, scope.row.noticeId)
+            "
+            type="text"
+            size="small"
+          >
+            删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 分页器 -->
+    <el-pagination
+      :current-page="curpage"
+      :pager-count="11"
+      @current-change="handleCurrentChange"
+      background
+      layout="prev, pager, next"
+      :total="1000"
+    >
+    </el-pagination>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      tableData: null, //列表数据
+      detailObj: null, //详情内容
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() > Date.now();
+        },
+        shortcuts: [
+          {
+            text: "今天",
+            onClick(picker) {
+              picker.$emit("pick", new Date());
+            }
+          },
+          {
+            text: "昨天",
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() - 3600 * 1000 * 24);
+              picker.$emit("pick", date);
+            }
+          }
+        ]
+      },
+      sear_data: null, // 查询时间
+      curpage: 1, //页码
+      pageSize: 15, //一页条数
+      token:
+        "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDY5OTA1MDAsInVzZXJJZCI6IjEifQ.D4nAou3NRFKhqewVZODCJdsIafXgFiIrlC7CaxvCjbA"
+    };
+  },
+  watch: {
+    sear_data(newQuestion, oldQuestion) {
+      this.getNoticeRecoder(newQuestion);
+    }
+  },
+  created() {
+    this.token = sessionStorage.getItem("token");
+    if (this.token) {
+      this.getNoticeRecoder(null);
+    } else {
+      this.$message({
+        message: "授权失效,请重新登录",
+        type: "warning"
+      });
+      this.$router.push({ path: "/" });
+    }
+  },
+  methods: {
+    //当改变当前页数的时候触发的事件
+    handleCurrentChange(currentPage) {
+      // console.log(this.sear_data);
+      this.curpage = currentPage;
+      this.getNoticeRecoder(this.sear_data);
+    },
+    //获取公告记录
+    getNoticeRecoder(sear_data) {
+      const loading = this.$loading({
+        lock: true,
+        text: "Loading",
+        spinner: "el-icon-loading",
+        background: "rgba(0, 0, 0, 0.7)"
+      });
+
+      if (sear_data) {
+        this.$axios({
+          method: "post",
+          url: `/baoxiu/repairApi/notice/queryAllNotice?pageNum=${this.curpage}&pageSize=${this.pageSize}&time=${sear_data}`,
+          headers: {
+            token: this.token
+          }
+        })
+          .then(({ data }) => {
+            // console.log(data.data.list);
+            this.tableData = [];
+            this.tableData = data.data.list;
+            loading.close();
+          })
+          .catch(err => {
+            loading.close();
+            this.$message({
+              message: err,
+              type: "warning"
+            });
+          });
+      } else {
+        this.$axios({
+          method: "post",
+          url: `/baoxiu/repairApi/notice/queryAllNotice?pageNum=${this.curpage}&pageSize=${this.pageSize}`,
+
+          headers: {
+            token: this.token
+          }
+        })
+          .then(({ data }) => {
+            // console.log(data.data.list);
+            this.tableData = [];
+            this.tableData = data.data.list;
+            loading.close();
+          })
+          .catch(err => {
+            loading.close();
+            this.$message({
+              message: err,
+              type: "warning"
+            });
+          });
+      }
+    },
+    //移除人员
+    deleteRow(index, rows, notice_Id) {
+      notice_Id = String(notice_Id);
+      this.$axios({
+        method: "post",
+        url: `/baoxiu/repairApi/notice/updateNotice?noticeId=${notice_Id}`,
+        headers: {
+          token: this.token
+        }
+      })
+        .then(({ data }) => {
+          console.log(typeof notice_Id);
+          if (data.status == 200) {
+            this.$confirm("此操作将永久删除该公告, 是否继续?", "提示", {
+              confirmButtonText: "确定",
+              cancelButtonText: "取消",
+              type: "warning"
+            })
+              .then(() => {
+                this.$message({
+                  type: "success",
+                  message: "删除成功!"
+                });
+                rows.splice(index, 1); // 删除人员
+              })
+              .catch(() => {
+                this.$message({
+                  type: "info",
+                  message: "已取消删除"
+                });
+              });
+          } else {
+            this.$message({
+              message: data.message,
+              type: "warning"
+            });
+          }
+        })
+        .catch(err => {
+          this.$message({
+            message: err,
+            type: "warning"
+          });
+        });
+    },
+    //重置列表
+    rest() {
+      this.sear_data = null;
+      this.getNoticeRecoder(null);
+    }
+  }
+};
+</script>
+
+<style scoped>
+@import url("../order/SearOrder/SearOrder.css");
+</style>

+ 17 - 3
src/components/notice/notice.css

@@ -1,13 +1,27 @@
 #container {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-start;
   width: 100%;
   height: 100%;
-  min-height: 680px;
+  box-sizing: border-box;
+}
+
+>>>.el-form {
+  width: 80%;
+  height: 320px !important;
 }
 
 >>>.el-textarea__inner {
-  height: 200px;
+  height: 300px;
 }
 
 >>>.el-form-item__label {
-  font-weight: 700;
+  font-weight: 800;
+}
+
+.block {
+  display: flex;
+  justify-content: flex-end;
+  width: 80%;
 }

+ 52 - 23
src/components/notice/notice.vue

@@ -1,16 +1,18 @@
 <template>
-  <el-form label-width="80px" id="container">
-    <!-- 公告框 -->
-    <el-form-item label="公告:">
-      <el-input type="textarea" v-model="desc"></el-input>
-    </el-form-item>
+  <div id="container">
+    <el-form label-width="50px">
+      <!-- 公告框 -->
+      <el-form-item label="公告:">
+        <el-input type="textarea" v-model="desc" resize="none"></el-input>
+      </el-form-item>
+    </el-form>
     <!-- 按钮 -->
-    <el-form-item>
+    <div class="block">
       <el-button type="primary" @click="to()" :disabled="state"
         >立即发布</el-button
       >
-    </el-form-item>
-  </el-form>
+    </div>
+  </div>
 </template>
 
 <script>
@@ -23,27 +25,54 @@ export default {
         "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDY5OTA1MDAsInVzZXJJZCI6IjEifQ.D4nAou3NRFKhqewVZODCJdsIafXgFiIrlC7CaxvCjbA"
     };
   },
+
+  created() {
+    this.token = sessionStorage.getItem("token");
+    if (this.token) {
+      return;
+    } else {
+      this.$message({
+        message: "授权失效,请重新登录",
+        type: "warning"
+      });
+      this.$router.push({ path: "/" });
+    }
+  },
   methods: {
-    async to() {
+    to() {
       if (this.desc != "") {
-        let { data } = await this.$axios({
+        this.$axios({
           method: "post",
-          url: `/testapi/notice/addNotice?noticeContent=${this.desc}`,
+          url: `/baoxiu/repairApi/notice/addNotice?noticeContent=${this.desc}`,
           headers: {
-            access_token: this.token
+            token: this.token
           }
-        });
-        if (data.status == 200) {
-          // console.log(data);
-          this.$message({
-            message: "公告发布成功",
-            type: "success"
+        })
+          .then(({ data }) => {
+            // console.log(this.token);
+            if (data.status != 200) {
+              this.$message({
+                message: data.message,
+                type: "warning"
+              });
+            }
+            this.$message({
+              message: "公告发布成功",
+              type: "success"
+            });
+            clearInterval(timer);
+            this.desc = "";
+            this.state = true;
+            let timer = setInterval(() => {
+              this.state = false;
+            }, 4000);
+          })
+          .catch(err => {
+            this.$message({
+              message: err,
+              type: "warning"
+            });
           });
-          this.state = true;
-        }
-        setInterval(() => {
-          this.state = false;
-        }, 4000);
       } else {
         this.$message({
           message: "内容不能为空",

+ 319 - 0
src/components/order/BackOrder/BackOrder.vue

@@ -0,0 +1,319 @@
+<template>
+  <div id="container">
+    <!--  筛选按钮(条件筛选、时间筛选) -->
+    <div class="block">
+      <el-button round @click.capture="deriveExcel()" :disabled="state">
+        导出Excel
+      </el-button>
+      <el-button round @click="rest()">全部订单</el-button>
+      <el-date-picker
+        v-model="sear_data"
+        type="date"
+        placeholder="选择日期"
+        :picker-options="pickerOptions"
+        value-format="yyyy-MM-dd"
+      >
+      </el-date-picker>
+    </div>
+    <!-- 订单列表 -->
+
+    <el-table
+      :data="tableData"
+      style="width: 100%"
+      id="table_field"
+      height="150"
+    >
+      <el-table-column prop="orderId" label="订单号"> </el-table-column>
+      <el-table-column prop="repairsFault.faultName" label="故障类型">
+      </el-table-column>
+      <el-table-column prop="repairsStudent.dormNumber" label="宿舍楼栋">
+      </el-table-column>
+      <el-table-column prop="orderBack" label="退回理由"> </el-table-column>
+      <el-table-column label="状态">
+        <template slot-scope="scope">
+          <span :style="order_sty[scope.row.orderStatus]">
+            {{ order_sta[scope.row.orderStatus] }}</span
+          >
+        </template>
+      </el-table-column>
+      <el-table-column label="操作">
+        <template slot-scope="scope">
+          <!-- 按钮1——查看详情模块 -->
+          <el-button
+            @click="getOrderDetail(scope.row.orderId)"
+            type="text"
+            size="small"
+            >查看</el-button
+          >
+          <!-- 订单详情弹窗 -->
+          <template v-if="detailObj != null">
+            <el-dialog
+              title="订单信息"
+              :visible.sync="detailObj.detailVisible"
+              width="30%"
+              append-to-body
+            >
+              <div class="dialog_form">
+                <div class="form_itm">
+                  <span>订单号:</span><span>{{ detailObj.orderId }}</span>
+                </div>
+                <div class="form_itm">
+                  <span>报修类型:</span
+                  ><span>{{ detailObj.repairsFault.faultName }}</span>
+                </div>
+                <div class="form_itm">
+                  <span>宿舍楼栋:</span
+                  ><span>{{ detailObj.repairsStudent.dormNumber }}</span>
+                </div>
+                <div class="form_itm">
+                  <span>预期时间:</span
+                  ><span>{{ detailObj.orderExpectedTime }}</span>
+                </div>
+                <div class="form_itm">
+                  <span>联系电话:</span
+                  ><span>{{ detailObj.repairsStudent.studentPhone }}</span>
+                </div>
+                <div class="form_itm">
+                  <span>备选电话:</span
+                  ><span>{{ detailObj.repairsStudent.studentOtherPhone }}</span>
+                </div>
+                <div class="form_itm">
+                  <span>故障图片:</span>
+                  <template v-if="imgArr != null">
+                    <div class="img_field" v-for="(item, i) in imgArr" :key="i">
+                      <img
+                        @click="item.innerVisible = true"
+                        :src="item.img"
+                        alt=""
+                        style="
+                          max-width: 35px;
+                          max-height: 35px;
+                          margin-right: 20px;
+                        "
+                      />
+                      <el-dialog
+                        width="30%"
+                        title="故障图片"
+                        :visible.sync="item.innerVisible"
+                        append-to-body
+                      >
+                        <img
+                          :src="item.img"
+                          alt="故障图片"
+                          style="width: 100%; max-height: 100%"
+                        />
+                      </el-dialog>
+                    </div>
+                  </template>
+                </div>
+              </div>
+              <span slot="footer" class="dialog-footer">
+                <el-button
+                  type="primary"
+                  @click="detailObj.detailVisible = false"
+                  >确 定</el-button
+                >
+              </span>
+            </el-dialog>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 分页器 -->
+    <el-pagination
+      :current-page="curpage"
+      :pager-count="11"
+      @current-change="handleCurrentChange"
+      background
+      layout="prev, pager, next"
+      :total="1000"
+    >
+    </el-pagination>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      order_sta: ["新订单", "待接单", "已接单", "已维修", "已退回"],
+      order_sty: [
+        "color:green",
+        "color:red",
+        "color:orange",
+        "color:green",
+        "color:purple"
+      ],
+      state: false, //按钮禁用状态
+      // 订单表
+      tableData: null,
+      detailObj: null, //详情信息
+      imgArr: null, //图片数组
+      // 今天、昨天快捷键配置
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() > Date.now();
+        },
+        shortcuts: [
+          {
+            text: "今天",
+            onClick(picker) {
+              picker.$emit("pick", new Date());
+            }
+          },
+          {
+            text: "昨天",
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() - 3600 * 1000 * 24);
+              picker.$emit("pick", date);
+            }
+          }
+        ]
+      },
+      sear_data: "", // 查询时间
+      innerVisible: false, //故障图片弹窗
+      curpage: 1, //页码
+      pageSize: 15, //一页条数
+      orderList: 4,
+      token: null
+    };
+  },
+  watch: {
+    sear_data(newQuestion, oldQuestion) {
+      this.getAllOrderList(newQuestion, this.orderList);
+    }
+  },
+  created() {
+    this.token = sessionStorage.getItem("token");
+    if (this.token) {
+      this.getAllOrderList(null, 4);
+    } else {
+      this.$message({
+        message: "授权失效,请重新登录",
+        type: "warning"
+      });
+      this.$router.push({ path: "/" });
+    }
+  },
+  methods: {
+    //当改变当前页数的时候触发的事件
+    handleCurrentChange(currentPage) {
+      // console.log(this.sear_data);
+      this.curpage = currentPage;
+      this.getAllOrderList(this.sear_data, this.orderList);
+    },
+    //获取订单列表
+    getAllOrderList(sear_data, orderStatus) {
+      const loading = this.$loading({
+        lock: true,
+        text: "Loading",
+        spinner: "el-icon-loading",
+        background: "rgba(0, 0, 0, 0.7)"
+      });
+      this.orderList = orderStatus;
+      if (sear_data) {
+        this.$axios({
+          method: "post",
+          url: `/baoxiu/repairApi/order/queryAllOrderByDate?pageNum=${this.curpage}&pageSize=${this.pageSize}&time=${sear_data}&orderStatus=${orderStatus}`,
+          headers: {
+            token: this.token
+          }
+        })
+          .then(({ data }) => {
+            // console.log(data.data.list);
+            this.tableData = [];
+            this.tableData = data.data.list;
+            loading.close();
+          })
+          .catch(err => {
+            loading.close();
+            this.$message({
+              message: err,
+              type: "warning"
+            });
+          });
+      } else {
+        this.$axios({
+          method: "post",
+          url: `/baoxiu/repairApi/order/queryAllOrderByDate?pageNum=${this.curpage}&pageSize=${this.pageSize}&orderStatus=${orderStatus}`,
+
+          headers: {
+            token: this.token
+          }
+        })
+          .then(({ data }) => {
+            // console.log(data.data.list);
+            this.tableData = [];
+            this.tableData = data.data.list;
+            loading.close();
+          })
+          .catch(err => {
+            loading.close();
+            this.$message({
+              message: err,
+              type: "warning"
+            });
+          });
+      }
+    },
+    //重置列表
+    rest() {
+      this.sear_data = null;
+      this.getAllOrderList(null, 4);
+    },
+    //获取详情信息
+    getOrderDetail(order_id) {
+      this.$axios({
+        method: "post",
+        url: `/baoxiu/repairApi/order/queryByOrderId?orderId=${order_id}`,
+        headers: {
+          token: this.token
+        }
+      })
+        .then(({ data }) => {
+          // console.log(data.data);
+          this.detailObj = data.data;
+          this.$set(this.detailObj, "detailVisible", true);
+          this.imgArr = this.detailObj.orderImages.match(/[^\;]+/g);
+          this.imgArr = this.imgArr.map(ite => {
+            return { innerVisible: false, img: ite };
+          });
+          // console.log(this.imgArr);
+          if (data.status != 200) {
+            this.$message({
+              message: data.message,
+              type: "warning"
+            });
+          }
+        })
+        .catch(err => {
+          this.$message({
+            message: err,
+            type: "warning"
+          });
+        });
+    },
+    //导出表格
+    deriveExcel() {
+      this.sear_data == null
+        ? (window.location.href = `/baoxiu/repairApi/order/backOrderExecl`)
+        : (window.location.href = `/baoxiu/repairApi/order/backOrderExecl?time=${this.sear_data}`);
+      clearInterval(timer);
+      this.state = true;
+      let timer = setInterval(() => {
+        this.state = false;
+      }, 2500);
+      this.$message({
+        message: "导出成功",
+        type: "success"
+      });
+    }
+  }
+};
+</script>
+
+<style scoped>
+@import url("../SearOrder/SearOrder.css");
+</style>

+ 66 - 3
src/components/order/DeliOrder/DeliOrder.css

@@ -1,10 +1,24 @@
 #container {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
   width: 100%;
   height: 100%;
-  min-height: 630px;
+  min-height: 680px;
+  box-sizing: border-box;
+}
+
+.block {
+  display: flex;
+  justify-content: flex-end;
+  align-items: center;
+  margin: 10px 0 25px 0 !important;
 }
 
 .el-table {
+  width: 100%;
+  height: 100%;
+  overflow-y: scroll;
   box-sizing: border-box;
 }
 
@@ -13,11 +27,31 @@
   margin-bottom: 10px;
 }
 
-#container /deep/.el-table .cell {
+
+>>>.el-dialog__body .form_itm {
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  width: 100%;
+  height: 30px;
+  margin-bottom: 15px;
+}
+
+>>>.el-dialog__body {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-around;
+}
+
+>>>.el-dialog {
+  box-shadow: 0 1px 3px rgb(0 0 0 / 0%) !important;
+}
+
+#container>>>.el-table .cell {
   text-align: center !important;
 }
 
-#container /deep/.el-table th>.cell {
+#container>>>.el-table th>.cell {
   text-align: center !important;
 }
 
@@ -26,3 +60,32 @@
   margin-top: 20px;
   text-align: center;
 }
+
+>>>.el-button--text {
+  margin-left: 0px !important;
+  margin-right: 0px !important;
+}
+
+/* >>>.el-radio-group{
+  display: flex;
+  
+} */
+>>>.el-radio {
+  margin-bottom: 50px;
+  margin-right: 50px;
+}
+
+>>>.el-button.is-round {
+  margin-right: 20px;
+}
+
+>>>.el-button+.el-button {
+  margin-left: 0px;
+}
+
+a:-webkit-any-link {
+  color: #606266;
+  cursor: pointer;
+  text-decoration: none;
+
+}

+ 197 - 66
src/components/order/DeliOrder/DeliOrder.vue

@@ -1,24 +1,36 @@
 
 <template>
-  <div>
-    <el-table :data="tableData" style="width: 100%" id="container">
-      <el-table-column prop="orderId" label="订单号" width="200">
-      </el-table-column>
-      <el-table-column
-        prop="repairsFault.faultName"
-        label="故障类型"
-        width="200"
+  <div id="container">
+    <div class="block">
+      <el-button round @click.capture="deriveExcel()" :disabled="state">
+        导出Excel
+      </el-button>
+      <el-button
+        round
+        @click="
+          sear_data = null;
+          getAllOrderList(null, 0);
+        "
+        >全部订单</el-button
       >
-      </el-table-column>
-      <el-table-column
-        prop="repairsStudent.dormNumber"
-        label="宿舍楼栋"
-        width="200"
+      <el-date-picker
+        v-model="sear_data"
+        type="date"
+        placeholder="选择日期"
+        :picker-options="pickerOptions"
+        value-format="yyyy-MM-dd"
       >
+      </el-date-picker>
+    </div>
+    <el-table :data="tableData" style="width: 100%" height="150">
+      <el-table-column prop="orderId" label="订单号"> </el-table-column>
+      <el-table-column prop="repairsFault.faultName" label="故障类型">
+      </el-table-column>
+      <el-table-column prop="repairsStudent.dormNumber" label="宿舍楼栋">
       </el-table-column>
-      <el-table-column prop="orderExpectedTime" label="预期时间" width="240">
+      <el-table-column prop="orderExpectedTime" label="预期时间">
       </el-table-column>
-      <el-table-column fixed="right" label="操作" width="240">
+      <el-table-column label="操作">
         <template slot-scope="scope">
           <!-- 按钮1——查看详情模块 -->
           <el-button
@@ -31,7 +43,7 @@
           <template v-if="detailObj != null">
             <el-dialog
               title="订单信息"
-              :visible.sync="detailVisible"
+              :visible.sync="detailObj.detailVisible"
               width="30%"
               append-to-body
             >
@@ -60,12 +72,39 @@
                   ><span>{{ detailObj.repairsStudent.studentOtherPhone }}</span>
                 </div>
                 <div class="form_itm">
-                  <span>故障图片:</span
-                  ><span>{{ detailObj.orderImages }}</span>
+                  <span>故障图片:</span>
+                  <template v-if="imgArr != null">
+                    <div class="img_field" v-for="(item, i) in imgArr" :key="i">
+                      <img
+                        @click="item.innerVisible = true"
+                        :src="item.img"
+                        alt=""
+                        style="
+                          max-width: 35px;
+                          max-height: 35px;
+                          margin-right: 20px;
+                        "
+                      />
+                      <el-dialog
+                        width="30%"
+                        title="故障图片"
+                        :visible.sync="item.innerVisible"
+                        append-to-body
+                      >
+                        <img
+                          :src="item.img"
+                          alt="故障图片"
+                          style="width: 100%; max-height: 100%"
+                        />
+                      </el-dialog>
+                    </div>
+                  </template>
                 </div>
               </div>
               <span slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="detailVisible = false"
+                <el-button
+                  type="primary"
+                  @click="detailObj.detailVisible = false"
                   >确 定</el-button
                 >
               </span>
@@ -159,72 +198,152 @@ export default {
   name: "DeliOrder",
   data() {
     return {
+      state: false, //按钮禁用状态
       // 报修单统计表
       tableData: [],
-      detailVisible: false, // 详情弹出
+      exportUrl: "`/baoxiu/repairApi/order/sendOrderExecl`",
+      // 今天、昨天快捷键配置
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() > Date.now();
+        },
+        shortcuts: [
+          {
+            text: "今天",
+            onClick(picker) {
+              picker.$emit("pick", new Date());
+            }
+          },
+          {
+            text: "昨天",
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() - 3600 * 1000 * 24);
+              picker.$emit("pick", date);
+            }
+          }
+        ]
+      },
       backVisible: false, // 退回弹出
       deliveryVisible: false, // 派单弹出
       curpage: 1, //页码
-      pageSize: 10, //一页条数
+      pageSize: 15, //一页条数
       detailObj: null, //详情信息
+      imgArr: null,
       workers: null, //工人列表
       workId: 0, // 指定维修人员
-      orderBack: "" // 退回理由
+      orderBack: "", // 退回理由
+      sear_data: "", // 查询时间
+      orderList: 0,
+      token:
+        "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDY5OTA1MDAsInVzZXJJZCI6IjEifQ.D4nAou3NRFKhqewVZODCJdsIafXgFiIrlC7CaxvCjbA"
     };
   },
   created() {
-    this.getDeliOrderList();
-    this.getWorker();
+    this.token = sessionStorage.getItem("token");
+    if (this.token) {
+      this.getAllOrderList(null, 0);
+      this.getWorker();
+    } else {
+      this.$message({
+        message: "授权失效,请重新登录",
+        type: "warning"
+      });
+      this.$router.push({ path: "/" });
+    }
+  },
+  watch: {
+    sear_data(newQuestion, oldQuestion) {
+      this.getAllOrderList(newQuestion, this.orderList);
+    }
   },
   methods: {
-    //当改变当前页数的时候触发的事件
-    handleCurrentChange(currentPage) {
-      // console.log(currentPage); //点击第几页
-      this.curpage = currentPage;
-      this.getDeliOrderList();
-    },
-    //获取派送订单列表
-    getDeliOrderList() {
+    //获取订单列表
+    getAllOrderList(sear_data, orderStatus) {
       const loading = this.$loading({
         lock: true,
         text: "Loading",
         spinner: "el-icon-loading",
         background: "rgba(0, 0, 0, 0.7)"
       });
-      this.tableData.length = 0;
-      this.$axios({
-        method: "post",
-        url: `/testapi/order/queryAllOrderByDate?pageNum=${this.curpage}&pageSize=${this.pageSize}&orderStatus=0`,
-        headers: {
-          access_token: this.token
-        }
-      })
-        .then(({ data }) => {
-          this.tableData = data.data.list;
-          loading.close();
+      this.orderList = orderStatus;
+      if (sear_data) {
+        this.$axios({
+          method: "post",
+          url: `/baoxiu/repairApi/order/queryAllOrderByDate?pageNum=${this.curpage}&pageSize=${this.pageSize}&time=${sear_data}&orderStatus=${orderStatus}`,
+          headers: {
+            token: this.token
+          }
         })
-        .catch(err => {
-          loading.close();
-          this.$message({
-            message: err,
-            type: "warning"
+          .then(({ data }) => {
+            // console.log(data.data);
+            this.tableData = [];
+            this.tableData = data.data.list;
+            loading.close();
+          })
+          .catch(err => {
+            loading.close();
+            this.$message({
+              message: err,
+              type: "warning"
+            });
           });
-        });
+      } else {
+        this.$axios({
+          method: "post",
+          url: `/baoxiu/repairApi/order/queryAllOrderByDate?pageNum=${this.curpage}&pageSize=${this.pageSize}&orderStatus=${orderStatus}`,
+
+          headers: {
+            token: this.token
+          }
+        })
+          .then(({ data }) => {
+            // console.log(data.data.list);
+            this.tableData = [];
+            this.tableData = data.data.list;
+            loading.close();
+          })
+          .catch(err => {
+            loading.close();
+            this.$message({
+              message: err,
+              type: "warning"
+            });
+          });
+      }
+    },
+    //当改变当前页数的时候触发的事件
+    handleCurrentChange(currentPage) {
+      // console.log(currentPage); //点击第几页
+      this.curpage = currentPage;
+      this.getAllOrderList(this.sear_data, this.orderList);
     },
     //获取详情信息
     getOrderDetail(order_id) {
-      this.detailObj = null;
-      this.detailVisible = true;
-      // console.log(order_id);
       this.$axios({
         method: "post",
-        url: `/testapi/order/queryByOrderIdNotWork?orderId=${order_id}`,
+        url: `/baoxiu/repairApi/order/queryByOrderIdNotWork?orderId=${order_id}`,
         headers: {
-          access_token: this.token
+          token: this.token
         }
       })
-        .then(res => {
-          this.detailObj = res.data.data;
+        .then(({ data }) => {
+          if (data.status != 200) {
+            this.$message({
+              message: data.message,
+              type: "warning"
+            });
+          } else {
+            // console.log(data.data);
+            // this.detailObj = {};
+            this.detailObj = data.data;
+            this.$set(this.detailObj, "detailVisible", true);
+            this.imgArr = this.detailObj.orderImages.match(/[^\;]+/g);
+            this.imgArr = this.imgArr.map(ite => {
+              return { innerVisible: false, img: ite };
+            });
+            // console.log(this.imgArr);
+          }
         })
         .catch(err => {
           this.$message({
@@ -232,19 +351,15 @@ export default {
             type: "warning"
           });
         });
-      // if (data.status == 200) {
-      //   // console.log(data.data);
-      //   this.detailObj = data.data;
-      // }
     },
     //获取维修人员列表
     async getWorker() {
       let { data } = await this.$axios({
         method: "post",
-        url: `/testapi/work/queryAllWorkStatus?pageSize=100`,
+        url: `/baoxiu/repairApi/work/queryAllWorkStatus?pageSize=100`,
 
         headers: {
-          access_token: this.token
+          token: this.token
         }
       });
       if (data.status == 200) {
@@ -263,9 +378,9 @@ export default {
         this.deliveryVisible = false;
         let { data } = await this.$axios({
           method: "post",
-          url: `/testapi/order/updateRepairsOrderBath?orderId=${order_id}&workId=${work_id}`,
+          url: `/baoxiu/repairApi/order/updateRepairsOrderBath?orderId=${order_id}&workId=${work_id}`,
           headers: {
-            access_token: this.token
+            token: this.token
           }
         });
         if (data.status == 200) {
@@ -283,9 +398,9 @@ export default {
       this.backVisible = false;
       let { data } = await this.$axios({
         method: "post",
-        url: `/testapi/order/updateOrderBack?orderId=${order_id}&orderBack=${this.orderBack}`,
+        url: `/baoxiu/repairApi/order/updateOrderBack?orderId=${order_id}&orderBack=${this.orderBack}`,
         headers: {
-          access_token: this.token
+          token: this.token
         }
       });
       if (data.status == 200) {
@@ -294,7 +409,23 @@ export default {
           message: "已退回",
           type: "success"
         });
+        this.getDeliOrderList();
       }
+    },
+    //导出表格
+    deriveExcel() {
+      this.sear_data == null
+        ? (window.location.href = `/baoxiu/repairApi/order/sendOrderExecl`)
+        : (window.location.href = `/baoxiu/repairApi/order/sendOrderExecl?time=${this.sear_data}`);
+      clearInterval(timer);
+      this.state = true;
+      let timer = setInterval(() => {
+        this.state = false;
+      }, 2500);
+      this.$message({
+        message: "导出成功",
+        type: "success"
+      });
     }
   }
 };

+ 60 - 2
src/components/order/SearOrder/SearOrder.css

@@ -9,29 +9,60 @@
 }
 
 .el-table {
+  width: 100%;
+  height: 100%;
+  overflow-y: scroll;
   box-sizing: border-box;
 }
 
+>>>.el-table::before {
+  background-color: transparent !important;
+}
+
+>>>.el-table__fixed-right::before,
+.el-table__fixed::before {
+  background-color: transparent !important;
+}
+
 .block {
   text-align: right;
   margin: 10px 0 25px 0 !important;
 }
 
+a:-webkit-any-link {
+  color: #606266;
+  cursor: pointer;
+  text-decoration: none;
+
+}
+
+.el-select {
+  margin-right: 20px;
+}
+
 /* .demonstration{
   margin-right: 20px;
   color:#1D3251;
   font-weight: 700;
 } */
-#table_field {
+/* #table_field {
   height: 100%;
-}
+} */
 
 #container>>>.el-table .cell {
   text-align: center !important;
+  display: flex;
+  justify-content: center;
+}
+
+>>>.el-button--text {
+  margin-right: 0px !important;
 }
 
 #container>>>.el-table th>.cell {
   text-align: center !important;
+  display: flex;
+  justify-content: center;
 }
 
 .block {
@@ -70,3 +101,30 @@
 >>>.el-button+.el-button {
   margin-left: 0px;
 }
+
+>>>.el-dialog__body .form_itm {
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  width: 100%;
+  height: 30px;
+  margin-bottom: 15px;
+}
+
+>>>.el-dialog__body .form_itm .img_field {
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+
+}
+
+
+>>>.el-dialog__body {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-around;
+}
+
+>>>.el-dialog {
+  box-shadow: 0 1px 3px rgb(0 0 0 / 0%) !important;
+}

+ 123 - 46
src/components/order/SearOrder/SearOrder.vue

@@ -2,11 +2,20 @@
   <div id="container">
     <!--  筛选按钮(条件筛选、时间筛选) -->
     <div class="block">
+      <el-button round @click.capture="deriveExcel()" :disabled="state">
+        导出Excel
+      </el-button>
       <el-button round @click="rest()">全部订单</el-button>
-      <!-- <div class="btn_field"> -->
-      <el-button round @click="getAllOrderList(null, 3)">已维修订单</el-button>
-      <el-button round @click="getAllOrderList(null, 2)">已接受订单</el-button>
-      <!-- </div> -->
+      <div class="search_peo">
+        <el-select v-model="searStatus" placeholder="订单筛选">
+          <el-option
+            v-for="(item, index) in order_sta"
+            :label="item"
+            :value="++index"
+            :key="index"
+          ></el-option>
+        </el-select>
+      </div>
       <el-date-picker
         v-model="sear_data"
         type="date"
@@ -17,33 +26,30 @@
       </el-date-picker>
     </div>
     <!-- 订单列表 -->
-    <el-table :data="tableData" style="width: 100%" id="table_field">
-      <el-table-column prop="orderId" label="订单号" width="180">
-      </el-table-column>
-      <el-table-column
-        prop="repairsFault.faultName"
-        label="故障类型"
-        width="180"
-      >
+
+    <el-table
+      :data="tableData"
+      style="width: 100%"
+      id="table_field"
+      height="150"
+    >
+      <el-table-column prop="orderId" label="订单号"> </el-table-column>
+      <el-table-column prop="repairsFault.faultName" label="故障类型">
       </el-table-column>
-      <el-table-column
-        prop="repairsStudent.dormNumber"
-        label="宿舍楼栋"
-        width="200"
-      >
+      <el-table-column prop="repairsStudent.dormNumber" label="宿舍楼栋">
       </el-table-column>
-      <el-table-column prop="orderCompleteTime" label="维修时间" width="240">
+      <el-table-column prop="orderCompleteTime" label="维修时间">
       </el-table-column>
-      <el-table-column prop="repairsWork.workName" label="维修人员" width="100">
+      <el-table-column prop="repairsWork.workName" label="维修人员">
       </el-table-column>
-      <el-table-column label="状态" width="100">
+      <el-table-column label="状态">
         <template slot-scope="scope">
           <span :style="order_sty[scope.row.orderStatus]">
-            {{ order_sta[scope.row.orderStatus] }}</span
+            {{ order_sta_w[scope.row.orderStatus] }}</span
           >
         </template>
       </el-table-column>
-      <el-table-column fixed="right" label="操作" width="100">
+      <el-table-column label="操作">
         <template slot-scope="scope">
           <!-- 按钮1——查看详情模块 -->
           <el-button
@@ -56,7 +62,7 @@
           <template v-if="detailObj != null">
             <el-dialog
               title="订单信息"
-              :visible.sync="detailVisible"
+              :visible.sync="detailObj.detailVisible"
               width="30%"
               append-to-body
             >
@@ -85,12 +91,39 @@
                   ><span>{{ detailObj.repairsStudent.studentOtherPhone }}</span>
                 </div>
                 <div class="form_itm">
-                  <span>故障图片:</span
-                  ><span>{{ detailObj.orderImages }}</span>
+                  <span>故障图片:</span>
+                  <template v-if="imgArr != null">
+                    <div class="img_field" v-for="(item, i) in imgArr" :key="i">
+                      <img
+                        @click="item.innerVisible = true"
+                        :src="item.img"
+                        alt=""
+                        style="
+                          max-width: 35px;
+                          max-height: 35px;
+                          margin-right: 20px;
+                        "
+                      />
+                      <el-dialog
+                        width="30%"
+                        title="故障图片"
+                        :visible.sync="item.innerVisible"
+                        append-to-body
+                      >
+                        <img
+                          :src="item.img"
+                          alt="故障图片"
+                          style="width: 100%; max-height: 100%"
+                        />
+                      </el-dialog>
+                    </div>
+                  </template>
                 </div>
               </div>
               <span slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="detailVisible = false"
+                <el-button
+                  type="primary"
+                  @click="detailObj.detailVisible = false"
                   >确 定</el-button
                 >
               </span>
@@ -99,6 +132,7 @@
         </template>
       </el-table-column>
     </el-table>
+
     <!-- 分页器 -->
     <el-pagination
       :current-page="curpage"
@@ -116,11 +150,14 @@
 export default {
   data() {
     return {
-      order_sta: ["新订单", "待接单", "已接单", "已维修"],
-      order_sty: ["color:green", "color:green", "color:orange", "color:green"],
+      order_sta: ["待接单", "已接单", "已维修"],
+      order_sta_w: ["新订单", "待接单", "已接单", "已维修"],
+      order_sty: ["color:green", "color:red", "color:orange", "color:green"],
       // 订单表
-      tableData: [],
+      tableData: null, //表单数据
       detailObj: null, //详情信息
+      imgArr: null, //图片数组
+      state: false, //按钮禁用状态
       // 今天、昨天快捷键配置
       pickerOptions: {
         disabledDate(time) {
@@ -144,19 +181,34 @@ export default {
         ]
       },
       sear_data: "", // 查询时间
-      detailVisible: false, // 详情弹出
       curpage: 1, //页码
-      pageSize: 9, //一页条数
-      orderList: 23
+      pageSize: 15, //一页条数
+      orderList: 123,
+      searStatus: null,
+      token:
+        "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDY5OTA1MDAsInVzZXJJZCI6IjEifQ.D4nAou3NRFKhqewVZODCJdsIafXgFiIrlC7CaxvCjbA"
     };
   },
   watch: {
     sear_data(newQuestion, oldQuestion) {
       this.getAllOrderList(newQuestion, this.orderList);
+    },
+    searStatus(newQuestion, oldQuestion) {
+      // console.log(newQuestion);
+      this.getAllOrderList(this.sear_data, newQuestion);
     }
   },
   created() {
-    this.getAllOrderList(null, 23);
+    this.token = sessionStorage.getItem("token");
+    if (this.token) {
+      this.getAllOrderList(null, 123);
+    } else {
+      this.$message({
+        message: "授权失效,请重新登录",
+        type: "warning"
+      });
+      this.$router.push({ path: "/" });
+    }
   },
   methods: {
     //当改变当前页数的时候触发的事件
@@ -177,9 +229,9 @@ export default {
       if (sear_data) {
         this.$axios({
           method: "post",
-          url: `/testapi/order/queryAllOrderByDate?pageNum=${this.curpage}&pageSize=${this.pageSize}&time=${sear_data}&orderStatus=${orderStatus}`,
+          url: `/baoxiu/repairApi/order/queryAllOrderByDate?pageNum=${this.curpage}&pageSize=${this.pageSize}&time=${sear_data}&orderStatus=${orderStatus}`,
           headers: {
-            access_token: this.token
+            token: this.token
           }
         })
           .then(({ data }) => {
@@ -198,14 +250,14 @@ export default {
       } else {
         this.$axios({
           method: "post",
-          url: `/testapi/order/queryAllOrderByDate?pageNum=${this.curpage}&pageSize=${this.pageSize}&orderStatus=${orderStatus}`,
+          url: `/baoxiu/repairApi/order/queryAllOrderByDate?pageNum=${this.curpage}&pageSize=${this.pageSize}&orderStatus=${orderStatus}`,
 
           headers: {
-            access_token: this.token
+            token: this.token
           }
         })
           .then(({ data }) => {
-            // console.log(data.data);
+            // console.log(data.data.list);
             this.tableData = [];
             this.tableData = data.data.list;
             loading.close();
@@ -222,22 +274,32 @@ export default {
     //重置列表
     rest() {
       this.sear_data = null;
-      this.getAllOrderList(null, 23);
+      this.getAllOrderList(null, 123);
     },
     //获取详情信息
     getOrderDetail(order_id) {
-      this.detailObj = null;
-      this.detailVisible = true;
-      // console.log(order_id);
       this.$axios({
         method: "post",
-        url: `/testapi/order/queryByOrderId?orderId=${order_id}`,
+        url: `/baoxiu/repairApi/order/queryByOrderId?orderId=${order_id}`,
         headers: {
-          access_token: this.token
+          token: this.token
         }
       })
-        .then(res => {
-          this.detailObj = res.data.data;
+        .then(({ data }) => {
+          // console.log(data.data);
+          this.detailObj = data.data;
+          this.$set(this.detailObj, "detailVisible", true);
+          this.imgArr = this.detailObj.orderImages.match(/[^\;]+/g);
+          this.imgArr = this.imgArr.map(ite => {
+            return { innerVisible: false, img: ite };
+          });
+          // console.log(this.imgArr);
+          if (data.status != 200) {
+            this.$message({
+              message: data.message,
+              type: "warning"
+            });
+          }
         })
         .catch(err => {
           this.$message({
@@ -245,6 +307,21 @@ export default {
             type: "warning"
           });
         });
+    },
+    //导出表格
+    deriveExcel() {
+      this.sear_data == null
+        ? (window.location.href = `/baoxiu/repairApi/order/queryOrderExecl?orderType=${this.orderList}`)
+        : (window.location.href = `/baoxiu/repairApi/order/queryOrderExecl?time=${this.sear_data}&orderType=${this.orderList}`);
+      clearInterval(timer);
+      this.state = true;
+      let timer = setInterval(() => {
+        this.state = false;
+      }, 2500);
+      this.$message({
+        message: "导出成功",
+        type: "success"
+      });
     }
   }
 };

+ 9 - 1
src/components/people/RepairPeo.css

@@ -1,9 +1,17 @@
 section {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  width: 100%;
+  height: 100%;
+  min-height: 680px;
   box-sizing: border-box;
 }
 
 section .el-table {
-  min-height: 560px;
+  width: 100%;
+  height: 100%;
+  overflow-y: scroll;
   box-sizing: border-box;
 }
 

+ 41 - 22
src/components/people/RepairPeo.vue

@@ -2,7 +2,7 @@
   <section>
     <!-- 添加员工模块 -->
     <div class="block">
-      <el-button round @click="addPeoVisible = true">添加员工</el-button>
+      <el-button round @click="clearValidate()">添加员工</el-button>
     </div>
     <!-- 添加员工弹窗 -->
     <el-dialog title="员工信息" :visible.sync="addPeoVisible" width="30%">
@@ -45,19 +45,16 @@
       </span>
     </el-dialog>
     <!-- 员工列表模块 -->
-    <el-table :data="tableData" style="width: 100%">
-      <el-table-column prop="workName" label="姓名" width="200">
-      </el-table-column>
-      <el-table-column prop="workPhone" label="手机号" width="240">
-      </el-table-column>
-      <el-table-column prop="workPassword" label="密码" width="210">
-      </el-table-column>
-      <el-table-column label="校区" width="220">
+    <el-table :data="tableData" style="width: 100%" height="150">
+      <el-table-column prop="workName" label="姓名"> </el-table-column>
+      <el-table-column prop="workPhone" label="手机号"> </el-table-column>
+      <el-table-column prop="workPassword" label="密码"> </el-table-column>
+      <el-table-column label="校区">
         <template slot-scope="scope">
           {{ Campus[scope.row.workCampus] }}</template
         >
       </el-table-column>
-      <el-table-column fixed="right" label="操作" width="120">
+      <el-table-column label="操作">
         <template slot-scope="scope">
           <el-button
             @click.native.prevent="
@@ -154,12 +151,22 @@ export default {
         ]
       },
       curpage: 1, //页码
-      pageSize: 10, //一页条数
-      Campus: ["黄家湖校区", "墨轩湖校区"]
+      pageSize: 15, //一页条数
+      Campus: ["黄家湖校区", "墨轩湖校区"],
+      token: null
     };
   },
   created() {
-    this.getWorker();
+    this.token = sessionStorage.getItem("token");
+    if (this.token) {
+      this.getWorker();
+    } else {
+      this.$message({
+        message: "授权失效,请重新登录",
+        type: "warning"
+      });
+      this.$router.push({ path: "/" });
+    }
   },
   methods: {
     //当改变当前页数的时候触发的事件
@@ -178,9 +185,9 @@ export default {
       });
       this.$axios({
         method: "post",
-        url: `/testapi/work/queryAllWorkStatus?pageNum=${this.curpage}&pageSize=${this.pageSize}`,
+        url: `/baoxiu/repairApi/work/queryAllWorkStatus?pageNum=${this.curpage}&pageSize=${this.pageSize}`,
         headers: {
-          access_token: this.token
+          token: this.token
         }
       })
         .then(({ data }) => {
@@ -203,13 +210,25 @@ export default {
           });
         });
     },
+    //清楚表单校验
+    clearValidate() {
+      this.addPeoVisible = true;
+      //清空
+      this.registerForm.workPhone = "";
+      this.registerForm.workName = "";
+      this.registerForm.workCampus = "";
+      this.registerForm.workPassword = "";
+      this.$nextTick(() => {
+        this.$refs["registerForm"].clearValidate();
+      });
+    },
     //维修人员注册
     registerWork() {
       this.$axios({
         method: "post",
-        url: `/testapi/work/insertWork?workPhone=${this.registerForm.workPhone}&workCampus=${this.registerForm.workCampus}&workPassword=${this.registerForm.workPassword}&workName=${this.registerForm.workName}`,
+        url: `/baoxiu/repairApi/work/insertWork?workPhone=${this.registerForm.workPhone}&workCampus=${this.registerForm.workCampus}&workPassword=${this.registerForm.workPassword}&workName=${this.registerForm.workName}`,
         headers: {
-          access_token: this.token
+          token: this.token
         }
       })
         .then(({ data }) => {
@@ -243,14 +262,14 @@ export default {
     deleteRow(index, rows, work_id) {
       this.$axios({
         method: "post",
-        url: `/testapi/work/removeWorkStatus?workId=${work_id}`,
+        url: `/baoxiu/repairApi/work/removeWorkStatus?workId=${work_id}`,
         headers: {
-          access_token: this.token
+          token: this.token
         }
       })
         .then(({ data }) => {
           if (data.status == 200) {
-            this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
+            this.$confirm("此操作将永久移除该员工, 是否继续?", "提示", {
               confirmButtonText: "确定",
               cancelButtonText: "取消",
               type: "warning"
@@ -258,14 +277,14 @@ export default {
               .then(() => {
                 this.$message({
                   type: "success",
-                  message: "除成功!"
+                  message: "除成功!"
                 });
                 rows.splice(index, 1); // 删除人员
               })
               .catch(() => {
                 this.$message({
                   type: "info",
-                  message: "已取消除"
+                  message: "已取消除"
                 });
               });
           } else {

+ 4 - 0
src/main.js

@@ -8,6 +8,9 @@ import Axios from 'axios'
 Vue.prototype.$axios  = Axios
 import 'element-ui/lib/theme-chalk/index.css'
 import 'default-passive-events'
+import store from "./store"
+
+
 
 Vue.use(ElementUI);
 Vue.config.productionTip = false
@@ -16,6 +19,7 @@ Vue.config.productionTip = false
 new Vue({
   el: '#app',
   router,
+  store,
   components: { App },
   template: '<App/>'
 })

+ 0 - 0
src/pages/OrderDetail.vue


+ 18 - 9
src/router/index.js

@@ -2,17 +2,18 @@ import Vue from 'vue'
 import Router from 'vue-router'
 import Login from '@/components/login/Login'  // 登陆
 import Index from '@/components/index/Index'  // 首页
+import DeliOrder from '../components/order/DeliOrder/DeliOrder.vue'//派发订单
+import SearOrder from '../components/order/SearOrder/SearOrder.vue'//查询订单
+import BackOrder from '../components/order/BackOrder/BackOrder.vue'//退回订单
+import RepairPeo from '../components/people/RepairPeo.vue'//工人管理
+import Complaint from "../components/complaint/complaint.vue"//评论管理
+import Notice from '../components/notice/notice.vue'//公告发布
+import RecNotice from '../components/notice/RecNotice.vue'//公告发布
 
-
-import DeliOrder from '../components/order/DeliOrder/DeliOrder.vue'
-import SearOrder from '../components/order/SearOrder/SearOrder.vue'
-import RepairPeo from '../components/people/RepairPeo.vue'
-import Complaint from "../components/complaint/complaint.vue"
-import Notice from '../components/notice/notice.vue'
 Vue.use(Router)
 
 export default new Router({
-	base: '/repairs-system/',
+	base: '/baoxiu/repair-manage/',
 	mode: 'history',
 	routes: [
 		{
@@ -34,17 +35,25 @@ export default new Router({
 			name: 'SearOrder',
 			component: SearOrder // 查询订单
 		}, {
+			path: 'BackOrder',
+			name: 'BackOrder',
+			component: BackOrder // 退回订单查询
+		}, {
 			path: 'RepairPeo',
 			name: 'RepairPeo',
 			component: RepairPeo // 人员管理
 		}, {
 			path: 'Complaint',
 			name: 'Complaint',
-			component: Complaint // 发布公告
+			component: Complaint // 评论管理
 		}, {
 			path: 'Notice',
 			name: 'Notice',
-			component: Notice // 意见投诉
+			component: Notice // 发布公告
+		},{
+			path: 'RecNotice',
+			name: 'RecNotice',
+			component: RecNotice // 公告记录
 		}]
 	}]
 })

+ 33 - 0
src/store/index.js

@@ -0,0 +1,33 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+// import specimen from "./modules/specimen.js"
+
+Vue.use(Vuex);
+
+const state = {
+   
+}
+
+const getters = {
+
+}
+
+const mutations = {
+	
+}
+
+const actions = {
+	
+}
+
+export default new Vuex.Store({
+  state,
+  getters,
+  mutations,
+  actions,
+//   modules: {
+//     specimen  // specimen模块命名为specimen,要在specimen.js声明namespaced: true才有用
+//   }
+})
+