jiangping
2024-08-26 a1e663eeb588f419b1622ca07b23fb9d44292ee9
Merge remote-tracking branch 'origin/master'
已添加13个文件
已修改52个文件
1938 ■■■■ 文件已修改
admin/package-lock.json 166 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/home_func1.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/home_func2.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/home_func3.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/home_func4.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/home_icon1.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/home_icon2.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/home_icon3.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/home_icon4.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/system/department.svg 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/system/dictionary.svg 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/system/listener.svg 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/system/log-login.svg 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/system/log-opera.svg 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/system/log.svg 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/system/permission.svg 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/system/position.svg 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/system/role.svg 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/style/style.scss 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/style/variables.scss 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/base/BaseOpera.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCarEventHkWindow.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCarUseBookWindow.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCarsWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaDeviceRoleWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaHiddenDangerParamWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaHiddenDangerWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaInternalCompanyWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaMemberRoleWindow.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaProblemsWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaVisitsHkWindow.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/operaVisitsReportWindow.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/operaVisitsWindow.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/CommonHeader.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/DepartmentSelect.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/ImportWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/Menu.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/MenuItems.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/companySelect.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/operation/HiddenDangerParam.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/system/department/DepartmentUserWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/layouts/AppLayout.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/layouts/TableLayout.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/utils/config.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/deviceBroadcast.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/index.vue 1054 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/bookings.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/components/OperaBookingsWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/components/OperaRoomsWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/roomStatistics.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/rooms.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/userStatistics.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/danger/record.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/serviceCar/apprRecord.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/platform.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/.gitignore 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/login.vue 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/register.vue 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/taskDetail.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/login/login.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/visitorApprove.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staffLogin/forgetPsd.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/driver/position.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/package-lock.json
@@ -1876,63 +1876,6 @@
          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
          "dev": true
        },
        "ansi-styles": {
          "version": "4.3.0",
          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-convert": "^2.0.1"
          }
        },
        "chalk": {
          "version": "4.1.2",
          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
          "dev": true,
          "optional": true,
          "requires": {
            "ansi-styles": "^4.1.0",
            "supports-color": "^7.1.0"
          }
        },
        "color-convert": {
          "version": "2.0.1",
          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-name": "~1.1.4"
          }
        },
        "color-name": {
          "version": "1.1.4",
          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
          "dev": true,
          "optional": true
        },
        "has-flag": {
          "version": "4.0.0",
          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
          "dev": true,
          "optional": true
        },
        "loader-utils": {
          "version": "2.0.4",
          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
          "dev": true,
          "optional": true,
          "requires": {
            "big.js": "^5.2.2",
            "emojis-list": "^3.0.0",
            "json5": "^2.1.2"
          }
        },
        "ssri": {
          "version": "8.0.1",
          "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
@@ -1940,28 +1883,6 @@
          "dev": true,
          "requires": {
            "minipass": "^3.1.1"
          }
        },
        "supports-color": {
          "version": "7.2.0",
          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
          "dev": true,
          "optional": true,
          "requires": {
            "has-flag": "^4.0.0"
          }
        },
        "vue-loader-v16": {
          "version": "npm:vue-loader@16.8.3",
          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
          "dev": true,
          "optional": true,
          "requires": {
            "chalk": "^4.1.0",
            "hash-sum": "^2.0.0",
            "loader-utils": "^2.0.0"
          }
        }
      }
@@ -4606,9 +4527,9 @@
      "dev": true
    },
    "dayjs": {
      "version": "1.11.11",
      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz",
      "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg=="
      "version": "1.11.13",
      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
    },
    "de-indent": {
      "version": "1.0.2",
@@ -13986,6 +13907,87 @@
        }
      }
    },
    "vue-loader-v16": {
      "version": "npm:vue-loader@16.8.3",
      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
      "dev": true,
      "optional": true,
      "requires": {
        "chalk": "^4.1.0",
        "hash-sum": "^2.0.0",
        "loader-utils": "^2.0.0"
      },
      "dependencies": {
        "ansi-styles": {
          "version": "4.3.0",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-convert": "^2.0.1"
          }
        },
        "chalk": {
          "version": "4.1.2",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
          "dev": true,
          "optional": true,
          "requires": {
            "ansi-styles": "^4.1.0",
            "supports-color": "^7.1.0"
          }
        },
        "color-convert": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-name": "~1.1.4"
          }
        },
        "color-name": {
          "version": "1.1.4",
          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
          "dev": true,
          "optional": true
        },
        "has-flag": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
          "dev": true,
          "optional": true
        },
        "loader-utils": {
          "version": "2.0.4",
          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
          "dev": true,
          "optional": true,
          "requires": {
            "big.js": "^5.2.2",
            "emojis-list": "^3.0.0",
            "json5": "^2.1.2"
          }
        },
        "supports-color": {
          "version": "7.2.0",
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
          "dev": true,
          "optional": true,
          "requires": {
            "has-flag": "^4.0.0"
          }
        }
      }
    },
    "vue-property-decorator": {
      "version": "8.5.1",
      "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz",
admin/package.json
@@ -17,6 +17,7 @@
    "@wangeditor/editor-for-vue": "^1.0.2",
    "axios": "^0.21.1",
    "core-js": "^3.6.5",
    "dayjs": "^1.11.13",
    "echarts": "^5.4.3",
    "el-tree-transfer": "^2.4.7",
    "element-tiptap": "^1.27.1",
admin/src/assets/icons/home_func1.png
admin/src/assets/icons/home_func2.png
admin/src/assets/icons/home_func3.png
admin/src/assets/icons/home_func4.png
admin/src/assets/icons/home_icon1.png
admin/src/assets/icons/home_icon2.png
admin/src/assets/icons/home_icon3.png
admin/src/assets/icons/home_icon4.png
admin/src/assets/icons/system/department.svg
@@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621750709361" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7590" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M890.96986 479.671711 545.11094 479.671711 545.11094 271.38592 684.78875 271.38592 684.78875 64.500013 343.028339 64.500013 343.028339 271.38592 480.338121 271.38592 480.338121 479.671711 133.397522 479.671711 133.397522 532.849864 133.397522 548.629245 133.397522 755.515153 64.284683 755.515153 64.284683 959.499987 270.160836 959.499987 270.160836 755.515153 202.498081 755.515153 202.498081 548.629245 480.338121 548.629245 480.338121 755.515153 409.786454 755.515153 409.786454 959.499987 615.662607 959.499987 615.662607 755.515153 545.11094 755.515153 545.11094 548.629245 822.225426 548.629245 822.225426 755.515153 753.863725 755.515153 753.863725 959.499987 959.714294 959.499987 959.714294 755.515153 890.96986 755.515153Z" p-id="7591" fill="#f7f7f7"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621750709361" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7590" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M890.96986 479.671711 545.11094 479.671711 545.11094 271.38592 684.78875 271.38592 684.78875 64.500013 343.028339 64.500013 343.028339 271.38592 480.338121 271.38592 480.338121 479.671711 133.397522 479.671711 133.397522 532.849864 133.397522 548.629245 133.397522 755.515153 64.284683 755.515153 64.284683 959.499987 270.160836 959.499987 270.160836 755.515153 202.498081 755.515153 202.498081 548.629245 480.338121 548.629245 480.338121 755.515153 409.786454 755.515153 409.786454 959.499987 615.662607 959.499987 615.662607 755.515153 545.11094 755.515153 545.11094 548.629245 822.225426 548.629245 822.225426 755.515153 753.863725 755.515153 753.863725 959.499987 959.714294 959.499987 959.714294 755.515153 890.96986 755.515153Z" p-id="7591" fill="#333333"></path></svg>
admin/src/assets/icons/system/dictionary.svg
@@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621751616853" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12750" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M225.5 596.7h63.8V652h-63.8v-55.3z m0-165.8h63.8v55.3h-63.8v-55.3z m0-165.7h63.8v55.3h-63.8v-55.3z m127.6 331.5h446.3V652H353.1v-55.3z m0-165.8h446.3v55.3H353.1v-55.3z m0-165.7h446.3v55.3H353.1v-55.3zM98 156.3v694.3c0 46.6 45 77.7 96.4 77.7h732.5v-46.6H194.4c-19.3 0-32.2-10.4-32.2-25.9 0-15.5 12.8-25.9 32.2-25.9h732.5V99.4H168.7c-32.1 5.1-64.3 31.1-70.7 56.9z" fill="#f7f7f7" p-id="12751"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621751616853" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12750" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M225.5 596.7h63.8V652h-63.8v-55.3z m0-165.8h63.8v55.3h-63.8v-55.3z m0-165.7h63.8v55.3h-63.8v-55.3z m127.6 331.5h446.3V652H353.1v-55.3z m0-165.8h446.3v55.3H353.1v-55.3z m0-165.7h446.3v55.3H353.1v-55.3zM98 156.3v694.3c0 46.6 45 77.7 96.4 77.7h732.5v-46.6H194.4c-19.3 0-32.2-10.4-32.2-25.9 0-15.5 12.8-25.9 32.2-25.9h732.5V99.4H168.7c-32.1 5.1-64.3 31.1-70.7 56.9z" fill="#333333" p-id="12751"></path></svg>
admin/src/assets/icons/system/listener.svg
@@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621751666911" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13701" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M64.28 671v80.3c0 34.76 26.84 62.94 60 62.94h297.47v94.15H285.53c-24.17 0-48.38-0.49-72.54 0h-1.06c-12.54 0-24.55 11.58-24 25.18s10.53 25.17 24 25.17h525.88c24.16 0 48.37 0.49 72.53 0h1.06c12.54 0 24.56-11.58 24-25.17s-10.54-25.18-24-25.18H601.59v-94.11H899.1c33.11 0 59.95-28.18 59.95-62.94V671zM899.77 65H124.9A60 60 0 0 0 65 125v499.3h894.72V125a60 60 0 0 0-59.95-60zM757.46 296.75l-6.89 7.53-77 84.15-36.78 40.22c0.08 1.2 0.14 2.41 0.14 3.63a51.09 51.09 0 1 1-100.6-12.67l-55.74-65.31-38.46-45a51 51 0 0 1-21.7 0.18l-6 5.78-71.92 69.71-30.85 29.9a45.45 45.45 0 1 1-36.1-35.1l2.85-2.76 71.92-69.72 32.2-31.21A51.09 51.09 0 1 1 482 259.44a51.66 51.66 0 0 1-1.28 11.34l10.62 12.44L561.13 365l14.72 17.23a51.85 51.85 0 0 1 10-1 50.84 50.84 0 0 1 22.14 5l76.82-84q15.3-16.73 30.59-33.44a45.42 45.42 0 1 1 42 28z" p-id="13702" fill="#f7f7f7"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621751666911" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13701" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M64.28 671v80.3c0 34.76 26.84 62.94 60 62.94h297.47v94.15H285.53c-24.17 0-48.38-0.49-72.54 0h-1.06c-12.54 0-24.55 11.58-24 25.18s10.53 25.17 24 25.17h525.88c24.16 0 48.37 0.49 72.53 0h1.06c12.54 0 24.56-11.58 24-25.17s-10.54-25.18-24-25.18H601.59v-94.11H899.1c33.11 0 59.95-28.18 59.95-62.94V671zM899.77 65H124.9A60 60 0 0 0 65 125v499.3h894.72V125a60 60 0 0 0-59.95-60zM757.46 296.75l-6.89 7.53-77 84.15-36.78 40.22c0.08 1.2 0.14 2.41 0.14 3.63a51.09 51.09 0 1 1-100.6-12.67l-55.74-65.31-38.46-45a51 51 0 0 1-21.7 0.18l-6 5.78-71.92 69.71-30.85 29.9a45.45 45.45 0 1 1-36.1-35.1l2.85-2.76 71.92-69.72 32.2-31.21A51.09 51.09 0 1 1 482 259.44a51.66 51.66 0 0 1-1.28 11.34l10.62 12.44L561.13 365l14.72 17.23a51.85 51.85 0 0 1 10-1 50.84 50.84 0 0 1 22.14 5l76.82-84q15.3-16.73 30.59-33.44a45.42 45.42 0 1 1 42 28z" p-id="13702" fill="#333333"></path></svg>
admin/src/assets/icons/system/log-login.svg
@@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622347607410" class="icon" viewBox="0 0 1038 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3794" width="64.875" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M76.778433 76.778433h776.41112v328.249368h77.209773v-345.071609A59.956192 59.956192 0 0 0 872.599832 0H59.956192A59.956192 59.956192 0 0 0 0 59.956192v898.048863a59.956192 59.956192 0 0 0 59.956192 59.956192H474.473463v-75.915754H76.778433z" p-id="3795" fill="#f7f7f7"></path><path d="M209.631003 256.647009h513.294018v81.091828H209.631003zM209.631003 472.748104h389.068239v81.091829H209.631003zM209.631003 684.535805h278.213984v81.091828H209.631003zM914.871104 774.685762a163.046335 163.046335 0 1 0-227.747262 0 180.731255 180.731255 0 0 0-122.069082 180.731256c0 68.582982 102.227464 68.582982 243.706824 68.582982h86.267902c59.956192 0 101.364785-3.450716 125.088458-27.605729a57.799495 57.799495 0 0 0 17.68492-43.133951 172.535805 172.535805 0 0 0-122.93176-178.574558zM733.277169 590.503791a94.894693 94.894693 0 0 1 67.288964-28.037068 92.306655 92.306655 0 1 1-67.288964 26.74305z m122.500422 364.913227h-46.584668a862.679023 862.679023 0 0 1-172.535804-10.352149c5.607414-99.639427 92.737995-121.206403 166.065712-121.206402 144.498736 0 164.771693 70.73968 166.497051 125.951137a480.943555 480.943555 0 0 1-113.442291 5.607414z" p-id="3796" fill="#f7f7f7"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622347607410" class="icon" viewBox="0 0 1038 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3794" width="64.875" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M76.778433 76.778433h776.41112v328.249368h77.209773v-345.071609A59.956192 59.956192 0 0 0 872.599832 0H59.956192A59.956192 59.956192 0 0 0 0 59.956192v898.048863a59.956192 59.956192 0 0 0 59.956192 59.956192H474.473463v-75.915754H76.778433z" p-id="3795" fill="#333333"></path><path d="M209.631003 256.647009h513.294018v81.091828H209.631003zM209.631003 472.748104h389.068239v81.091829H209.631003zM209.631003 684.535805h278.213984v81.091828H209.631003zM914.871104 774.685762a163.046335 163.046335 0 1 0-227.747262 0 180.731255 180.731255 0 0 0-122.069082 180.731256c0 68.582982 102.227464 68.582982 243.706824 68.582982h86.267902c59.956192 0 101.364785-3.450716 125.088458-27.605729a57.799495 57.799495 0 0 0 17.68492-43.133951 172.535805 172.535805 0 0 0-122.93176-178.574558zM733.277169 590.503791a94.894693 94.894693 0 0 1 67.288964-28.037068 92.306655 92.306655 0 1 1-67.288964 26.74305z m122.500422 364.913227h-46.584668a862.679023 862.679023 0 0 1-172.535804-10.352149c5.607414-99.639427 92.737995-121.206403 166.065712-121.206402 144.498736 0 164.771693 70.73968 166.497051 125.951137a480.943555 480.943555 0 0 1-113.442291 5.607414z" p-id="3796" fill="#333333"></path></svg>
admin/src/assets/icons/system/log-opera.svg
@@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622347629380" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4602" width="64.0625" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M548.075474 961.502824H37.281249a39.060735 39.060735 0 0 1-37.257932-40.262603V103.368526a39.060735 39.060735 0 0 1 37.257932-40.262604h717.515653a39.060735 39.060735 0 0 1 37.257931 40.262604V513.205775h-60.093438V128.006836H61.919559v773.40255H487.982036l60.093438 63.699045z" fill="#f7f7f7" p-id="4603"></path><path d="M733.764198 513.205775a223.54759 223.54759 0 1 1-225.350393 223.54759 227.153197 227.153197 0 0 1 225.350393-223.54759m0-63.699045A287.246635 287.246635 0 1 0 1022.813636 736.753365a287.246635 287.246635 0 0 0-289.049438-287.246635zM210.951285 0.007812h18.028032a22.835507 22.835507 0 0 1 22.835506 22.835507v145.42612a23.436441 23.436441 0 0 1-22.835506 23.436441h-18.028032a23.436441 23.436441 0 0 1-23.436441-23.436441V25.247056a22.835507 22.835507 0 0 1 22.835507-25.239244z m385.19894 0h18.028031a22.835507 22.835507 0 0 1 23.436441 22.835507v145.42612a23.436441 23.436441 0 0 1-23.436441 23.436441h-18.028031a23.436441 23.436441 0 0 1-22.835507-23.436441V25.247056a22.835507 22.835507 0 0 1 22.835507-25.239244zM157.468125 321.507707h514.399832a31.849522 31.849522 0 0 1 31.849522 31.849522 31.849522 31.849522 0 0 1-31.849522 31.849522H157.468125a31.849522 31.849522 0 0 1-31.849522-31.849522 31.849522 31.849522 0 0 1 31.849522-31.849522z m0 191.698068h257.199916a31.849522 31.849522 0 0 1 31.849522 31.849522 31.849522 31.849522 0 0 1-31.849522 31.849522H157.468125a31.849522 31.849522 0 0 1-31.849522-31.849522 31.849522 31.849522 0 0 1 31.849522-31.849522z m0 191.698068h192.899937a31.248588 31.248588 0 0 1 31.849522 31.849522 31.849522 31.849522 0 0 1-31.849522 31.849522H157.468125a31.849522 31.849522 0 0 1-31.849522-31.849522 31.849522 31.849522 0 0 1 31.849522-31.849522z" fill="#f7f7f7" p-id="4604"></path><path d="M870.777237 829.29726h-152.637333v-212.730771a30.647654 30.647654 0 0 1 30.647654-30.647654 30.647654 30.647654 0 0 1 30.647653 30.647654v152.036398h91.342026a30.046719 30.046719 0 0 1 30.04672 30.647654 30.046719 30.046719 0 0 1-30.04672 30.046719z" fill="#f7f7f7" p-id="4605"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622347629380" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4602" width="64.0625" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M548.075474 961.502824H37.281249a39.060735 39.060735 0 0 1-37.257932-40.262603V103.368526a39.060735 39.060735 0 0 1 37.257932-40.262604h717.515653a39.060735 39.060735 0 0 1 37.257931 40.262604V513.205775h-60.093438V128.006836H61.919559v773.40255H487.982036l60.093438 63.699045z" fill="#333333" p-id="4603"></path><path d="M733.764198 513.205775a223.54759 223.54759 0 1 1-225.350393 223.54759 227.153197 227.153197 0 0 1 225.350393-223.54759m0-63.699045A287.246635 287.246635 0 1 0 1022.813636 736.753365a287.246635 287.246635 0 0 0-289.049438-287.246635zM210.951285 0.007812h18.028032a22.835507 22.835507 0 0 1 22.835506 22.835507v145.42612a23.436441 23.436441 0 0 1-22.835506 23.436441h-18.028032a23.436441 23.436441 0 0 1-23.436441-23.436441V25.247056a22.835507 22.835507 0 0 1 22.835507-25.239244z m385.19894 0h18.028031a22.835507 22.835507 0 0 1 23.436441 22.835507v145.42612a23.436441 23.436441 0 0 1-23.436441 23.436441h-18.028031a23.436441 23.436441 0 0 1-22.835507-23.436441V25.247056a22.835507 22.835507 0 0 1 22.835507-25.239244zM157.468125 321.507707h514.399832a31.849522 31.849522 0 0 1 31.849522 31.849522 31.849522 31.849522 0 0 1-31.849522 31.849522H157.468125a31.849522 31.849522 0 0 1-31.849522-31.849522 31.849522 31.849522 0 0 1 31.849522-31.849522z m0 191.698068h257.199916a31.849522 31.849522 0 0 1 31.849522 31.849522 31.849522 31.849522 0 0 1-31.849522 31.849522H157.468125a31.849522 31.849522 0 0 1-31.849522-31.849522 31.849522 31.849522 0 0 1 31.849522-31.849522z m0 191.698068h192.899937a31.248588 31.248588 0 0 1 31.849522 31.849522 31.849522 31.849522 0 0 1-31.849522 31.849522H157.468125a31.849522 31.849522 0 0 1-31.849522-31.849522 31.849522 31.849522 0 0 1 31.849522-31.849522z" fill="#333333" p-id="4604"></path><path d="M870.777237 829.29726h-152.637333v-212.730771a30.647654 30.647654 0 0 1 30.647654-30.647654 30.647654 30.647654 0 0 1 30.647653 30.647654v152.036398h91.342026a30.046719 30.046719 0 0 1 30.04672 30.647654 30.046719 30.046719 0 0 1-30.04672 30.046719z" fill="#333333" p-id="4605"></path></svg>
admin/src/assets/icons/system/log.svg
@@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622347409604" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2382" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M299.1872 255.5904a42.496 42.496 0 0 0 42.5728-42.5472V42.752a42.5728 42.5728 0 0 0-85.1712 0v170.24c0 23.552 19.0464 42.5984 42.5984 42.5984zM512.1536 255.5904a42.496 42.496 0 0 0 42.5984-42.5472V42.752a42.5728 42.5728 0 1 0-85.1712 0v170.24c0 23.552 19.0976 42.5984 42.5728 42.5984zM384.4096 81.792h42.5984v85.0688h-42.5984zM597.4784 81.792h42.5728v85.0688H597.504z" fill="#f7f7f7" p-id="2383"></path><path d="M1023.3088 896.1024v-691.2c0.1536-70.6048-57.2416-127.6928-127.744-127.6928h-85.1712v85.0688h85.1712c23.4752 0 42.7264 19.072 42.7264 42.5216v691.3024c0 23.4496-19.2512 42.5984-42.752 42.5984H128.768a42.7264 42.7264 0 0 1-42.5728-42.5984H85.504l0.6656-691.2c0-23.4752 19.0976-42.5472 42.5728-42.5472h85.1712V77.2096H128.768A127.6928 127.6928 0 0 0 1.024 204.8768v691.2a127.616 127.616 0 0 0 127.744 127.6928h766.7968a127.3344 127.3344 0 0 0 127.232-121.344c0.0768-0.3584 0.512-0.7936 0.512-1.152v-3.7888c0-0.512 0.1536-0.9472 0.1536-1.4592h-0.1536v0.0768z" fill="#f7f7f7" p-id="2384"></path><path d="M725.248 255.5904c23.4496 0 42.5728-19.0208 42.5728-42.5472V42.752a42.5728 42.5728 0 0 0-85.1712 0v170.24c0 23.552 18.8672 42.5984 42.5728 42.5984zM255.872 426.4448h511.2064c23.3472 0 42.5728-19.072 42.5728-42.5216 0-23.552-19.2256-42.5472-42.5728-42.5472H255.8464a42.496 42.496 0 1 0 0 85.0688zM767.0784 551.3728H255.8464a42.5728 42.5728 0 1 0 0 85.0688h511.232c23.3216 0 42.5728-19.0976 42.5728-42.5472 0-23.4496-19.2512-42.5216-42.5728-42.5216zM767.0784 769.5872H255.8464a42.5216 42.5216 0 1 0 0 85.0688h511.232c23.3216 0 42.5728-19.1488 42.5728-42.6752 0-23.3984-19.2512-42.3936-42.5728-42.3936z" fill="#f7f7f7" p-id="2385"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622347409604" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2382" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M299.1872 255.5904a42.496 42.496 0 0 0 42.5728-42.5472V42.752a42.5728 42.5728 0 0 0-85.1712 0v170.24c0 23.552 19.0464 42.5984 42.5984 42.5984zM512.1536 255.5904a42.496 42.496 0 0 0 42.5984-42.5472V42.752a42.5728 42.5728 0 1 0-85.1712 0v170.24c0 23.552 19.0976 42.5984 42.5728 42.5984zM384.4096 81.792h42.5984v85.0688h-42.5984zM597.4784 81.792h42.5728v85.0688H597.504z" fill="#333333" p-id="2383"></path><path d="M1023.3088 896.1024v-691.2c0.1536-70.6048-57.2416-127.6928-127.744-127.6928h-85.1712v85.0688h85.1712c23.4752 0 42.7264 19.072 42.7264 42.5216v691.3024c0 23.4496-19.2512 42.5984-42.752 42.5984H128.768a42.7264 42.7264 0 0 1-42.5728-42.5984H85.504l0.6656-691.2c0-23.4752 19.0976-42.5472 42.5728-42.5472h85.1712V77.2096H128.768A127.6928 127.6928 0 0 0 1.024 204.8768v691.2a127.616 127.616 0 0 0 127.744 127.6928h766.7968a127.3344 127.3344 0 0 0 127.232-121.344c0.0768-0.3584 0.512-0.7936 0.512-1.152v-3.7888c0-0.512 0.1536-0.9472 0.1536-1.4592h-0.1536v0.0768z" fill="#333333" p-id="2384"></path><path d="M725.248 255.5904c23.4496 0 42.5728-19.0208 42.5728-42.5472V42.752a42.5728 42.5728 0 0 0-85.1712 0v170.24c0 23.552 18.8672 42.5984 42.5728 42.5984zM255.872 426.4448h511.2064c23.3472 0 42.5728-19.072 42.5728-42.5216 0-23.552-19.2256-42.5472-42.5728-42.5472H255.8464a42.496 42.496 0 1 0 0 85.0688zM767.0784 551.3728H255.8464a42.5728 42.5728 0 1 0 0 85.0688h511.232c23.3216 0 42.5728-19.0976 42.5728-42.5472 0-23.4496-19.2512-42.5216-42.5728-42.5216zM767.0784 769.5872H255.8464a42.5216 42.5216 0 1 0 0 85.0688h511.232c23.3216 0 42.5728-19.1488 42.5728-42.6752 0-23.3984-19.2512-42.3936-42.5728-42.3936z" fill="#333333" p-id="2385"></path></svg>
admin/src/assets/icons/system/permission.svg
@@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621746809427" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4923" width="64.0625" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M928.612599 95.57028a325.17778 325.17778 0 0 0-523.501496 370.143341l-383.852354 383.852354a72.018013 72.018013 0 0 0 0 102.177841L73.352997 1002.741343a72.018013 72.018013 0 0 0 102.177841 0L329.254566 847.920893l19.192618 19.192618a73.114734 73.114734 0 0 0 102.177841 0l51.180314-51.180314a73.114734 73.114734 0 0 0 0-102.177841L482.978295 694.928312l75.490963-75.490963A325.17778 325.17778 0 0 0 928.612599 95.57028zM777.447886 402.469376a109.672101 109.672101 0 1 1-2.741802-155.186023 109.672101 109.672101 0 0 1 2.741802 155.186023z" p-id="4924" fill="#f7f7f7"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621746809427" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4923" width="64.0625" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M928.612599 95.57028a325.17778 325.17778 0 0 0-523.501496 370.143341l-383.852354 383.852354a72.018013 72.018013 0 0 0 0 102.177841L73.352997 1002.741343a72.018013 72.018013 0 0 0 102.177841 0L329.254566 847.920893l19.192618 19.192618a73.114734 73.114734 0 0 0 102.177841 0l51.180314-51.180314a73.114734 73.114734 0 0 0 0-102.177841L482.978295 694.928312l75.490963-75.490963A325.17778 325.17778 0 0 0 928.612599 95.57028zM777.447886 402.469376a109.672101 109.672101 0 1 1-2.741802-155.186023 109.672101 109.672101 0 0 1 2.741802 155.186023z" p-id="4924" fill="#333333"></path></svg>
admin/src/assets/icons/system/position.svg
@@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621751435396" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11906" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M870 96H154c-49.5 0-90 40.6-90 90.2v651.6c0 49.6 40.5 90.2 90 90.2h716c49.5 0 90-40.6 90-90.2V186.2c0-49.6-40.5-90.2-90-90.2zM177.5 314.4h167.3v59.9H177.5v-59.9z m0 223.5h167.3v59.9H177.5v-59.9z m646.4 229.9v-0.2H362.8v0.2h-59.7c0-20.1 2.3-39.9 6.9-59.1v-1.2h0.3c3.8-15.7 9.1-31 16-46 14.8-32.3 35.9-61.3 62.7-86.1 36.8-34 81.6-57.7 130.5-69.7-39.8-24.8-66.3-69-66.3-119.4 0-77.6 62.7-140.6 140.2-140.6 77.5 0 140.2 63 140.2 140.6 0 50.4-26.5 94.6-66.3 119.4 48.9 11.9 93.7 35.6 130.5 69.7 26.8 24.8 47.9 53.8 62.7 86.1 15.4 33.7 23.2 69.4 23.2 106.3h-59.8z" fill="#f7f7f7" p-id="11907"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621751435396" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11906" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M870 96H154c-49.5 0-90 40.6-90 90.2v651.6c0 49.6 40.5 90.2 90 90.2h716c49.5 0 90-40.6 90-90.2V186.2c0-49.6-40.5-90.2-90-90.2zM177.5 314.4h167.3v59.9H177.5v-59.9z m0 223.5h167.3v59.9H177.5v-59.9z m646.4 229.9v-0.2H362.8v0.2h-59.7c0-20.1 2.3-39.9 6.9-59.1v-1.2h0.3c3.8-15.7 9.1-31 16-46 14.8-32.3 35.9-61.3 62.7-86.1 36.8-34 81.6-57.7 130.5-69.7-39.8-24.8-66.3-69-66.3-119.4 0-77.6 62.7-140.6 140.2-140.6 77.5 0 140.2 63 140.2 140.6 0 50.4-26.5 94.6-66.3 119.4 48.9 11.9 93.7 35.6 130.5 69.7 26.8 24.8 47.9 53.8 62.7 86.1 15.4 33.7 23.2 69.4 23.2 106.3h-59.8z" fill="#333333" p-id="11907"></path></svg>
admin/src/assets/icons/system/role.svg
@@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621750614796" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6622" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M782.215429 604.888761l-18.436207-15.623905-4.609052-3.749737c-3.827857-3.2029-7.811952-6.249562-11.48357-9.296223l-5.234008-3.905976-1.093673-0.859315-6.56204-4.765291c-3.359139-2.421705-6.796398-4.765291-10.233658-7.030757l-2.343585-1.56239a382.082586 382.082586 0 0 0-109.367332-49.293419 264.668943 264.668943 0 1 0-204.438791 0 385.129247 385.129247 0 0 0-108.0393 48.98094l-2.265466 1.562391c-3.515379 2.265466-6.952638 4.609052-10.233658 7.030757l-6.640159 4.84341-0.937434 0.624957-5.312128 4.062215c-3.905976 2.968542-7.811952 6.093323-11.952287 9.608701l-4.062215 3.437259-18.592446 15.623905 0.937434 0.546836A397.159653 397.159653 0 0 0 122.183582 889.321943V914.085832a109.757929 109.757929 0 0 0 109.757929 109.367331h559.257663a109.757929 109.757929 0 0 0 109.367332-109.367331v-24.998248a396.847175 396.847175 0 0 0-119.288511-283.730106z" fill="#f7f7f7" p-id="6623"></path><path d="M232.253989 576.297015c3.984096-3.359139 7.811952-6.327681 11.327331-9.139984l5.858964-4.452813 0.859315-0.624956 6.952637-5.077769 10.936734-7.811952 2.421705-1.562391a403.409215 403.409215 0 0 1 74.526024-38.512924 286.698648 286.698648 0 0 1-138.115316-244.748465c0-6.405801 0-12.733482 0.703076-18.983044a171.081755 171.081755 0 0 0 24.52953 330.914298zM225.926308 581.609143a252.951015 252.951015 0 0 0-102.805292 39.059761l-1.562391 1.015554c-2.265466 1.56239-4.530932 3.046661-6.718278 4.687171l-4.374694 3.202901c-1.406151 1.015554-2.812303 2.031108-4.140334 3.124781-2.577944 1.952988-5.155888 3.984096-7.811953 6.093322l-0.859314 0.781196-2.187347 1.718629A262.950313 262.950313 0 0 0 5.004298 839.872285v17.342534a63.979889 63.979889 0 0 0 63.979889 63.979889h12.186645v-21.482869a421.220466 421.220466 0 0 1 107.648703-281.230281zM678.863301 509.426704a406.221518 406.221518 0 0 1 74.526024 38.512925l2.343586 1.56239 11.014853 7.811952 6.874518 5.077769 0.937434 0.624956 5.858964 4.452813c3.593498 2.812303 7.343235 5.780845 11.327331 9.139984a171.081755 171.081755 0 0 0 24.52953-330.914298c0.390598 6.249562 0.703076 12.577243 0.703076 18.983044A286.698648 286.698648 0 0 1 678.863301 509.426704zM928.220817 641.136219l-2.109227-1.718629-0.937434-0.781196c-2.499825-2.109227-4.999649-4.140335-7.811953-6.093322l-4.140334-3.124781-4.374694-3.202901c-2.187347-1.64051-4.452813-3.124781-6.796398-4.687171l-1.484271-1.015554a253.341612 253.341612 0 0 0-102.805292-39.059761l37.106773 36.716175a421.142347 421.142347 0 0 1 107.570583 281.230282v21.482869h12.186646a64.058009 64.058009 0 0 0 64.058008-63.979889v-17.030056a262.715955 262.715955 0 0 0-90.462407-198.736066z" fill="#f7f7f7" p-id="6624"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621750614796" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6622" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M782.215429 604.888761l-18.436207-15.623905-4.609052-3.749737c-3.827857-3.2029-7.811952-6.249562-11.48357-9.296223l-5.234008-3.905976-1.093673-0.859315-6.56204-4.765291c-3.359139-2.421705-6.796398-4.765291-10.233658-7.030757l-2.343585-1.56239a382.082586 382.082586 0 0 0-109.367332-49.293419 264.668943 264.668943 0 1 0-204.438791 0 385.129247 385.129247 0 0 0-108.0393 48.98094l-2.265466 1.562391c-3.515379 2.265466-6.952638 4.609052-10.233658 7.030757l-6.640159 4.84341-0.937434 0.624957-5.312128 4.062215c-3.905976 2.968542-7.811952 6.093323-11.952287 9.608701l-4.062215 3.437259-18.592446 15.623905 0.937434 0.546836A397.159653 397.159653 0 0 0 122.183582 889.321943V914.085832a109.757929 109.757929 0 0 0 109.757929 109.367331h559.257663a109.757929 109.757929 0 0 0 109.367332-109.367331v-24.998248a396.847175 396.847175 0 0 0-119.288511-283.730106z" fill="#333333" p-id="6623"></path><path d="M232.253989 576.297015c3.984096-3.359139 7.811952-6.327681 11.327331-9.139984l5.858964-4.452813 0.859315-0.624956 6.952637-5.077769 10.936734-7.811952 2.421705-1.562391a403.409215 403.409215 0 0 1 74.526024-38.512924 286.698648 286.698648 0 0 1-138.115316-244.748465c0-6.405801 0-12.733482 0.703076-18.983044a171.081755 171.081755 0 0 0 24.52953 330.914298zM225.926308 581.609143a252.951015 252.951015 0 0 0-102.805292 39.059761l-1.562391 1.015554c-2.265466 1.56239-4.530932 3.046661-6.718278 4.687171l-4.374694 3.202901c-1.406151 1.015554-2.812303 2.031108-4.140334 3.124781-2.577944 1.952988-5.155888 3.984096-7.811953 6.093322l-0.859314 0.781196-2.187347 1.718629A262.950313 262.950313 0 0 0 5.004298 839.872285v17.342534a63.979889 63.979889 0 0 0 63.979889 63.979889h12.186645v-21.482869a421.220466 421.220466 0 0 1 107.648703-281.230281zM678.863301 509.426704a406.221518 406.221518 0 0 1 74.526024 38.512925l2.343586 1.56239 11.014853 7.811952 6.874518 5.077769 0.937434 0.624956 5.858964 4.452813c3.593498 2.812303 7.343235 5.780845 11.327331 9.139984a171.081755 171.081755 0 0 0 24.52953-330.914298c0.390598 6.249562 0.703076 12.577243 0.703076 18.983044A286.698648 286.698648 0 0 1 678.863301 509.426704zM928.220817 641.136219l-2.109227-1.718629-0.937434-0.781196c-2.499825-2.109227-4.999649-4.140335-7.811953-6.093322l-4.140334-3.124781-4.374694-3.202901c-2.187347-1.64051-4.452813-3.124781-6.796398-4.687171l-1.484271-1.015554a253.341612 253.341612 0 0 0-102.805292-39.059761l37.106773 36.716175a421.142347 421.142347 0 0 1 107.570583 281.230282v21.482869h12.186646a64.058009 64.058009 0 0 0 64.058008-63.979889v-17.030056a262.715955 262.715955 0 0 0-90.462407-198.736066z" fill="#333333" p-id="6624"></path></svg>
admin/src/assets/style/style.scss
@@ -62,7 +62,6 @@
    font-size: 14px;
  }
}
.doumee-element-table {
  border-color: #DFE2E8;
  tr, th, td {
@@ -142,6 +141,18 @@
  padding: 30px;
  margin: 0 16px;
}
.fs12{
  font-size: 12px;
}
.fs13{
  font-size: 13px;
}
.fs15{
  font-size: 15px;
}
.fs17{
  font-size: 17px;
}
.query_btns{
  border-bottom: 1px solid #eee;
  padding-bottom: 10px;
admin/src/assets/style/variables.scss
@@ -17,7 +17,7 @@
// å¤´éƒ¨é«˜åº¦
$header-height: 60px;
// èœå•宽度
$menu-width: 250px;
$menu-width: 220px;
// é¡µé¢æœ€å°å®½åº¦
$page-min-width: 1000px;
admin/src/components/base/BaseOpera.vue
@@ -1,6 +1,5 @@
<script>
export default {
  name: 'BaseOpera',
  data () {
    return {
      title: '',
admin/src/components/business/OperaCarEventHkWindow.vue
@@ -24,7 +24,6 @@
import GlobalWindow from '@/components/common/GlobalWindow'
import { syncByDate } from '@/api/business/carEvent'
export default {
  name: 'OperaVisitsHkWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
@@ -60,7 +59,7 @@
            this.$emit('success')
          })
          .catch(e => {
            this.$tip.apiFailed(e)
            // this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
admin/src/components/business/OperaCarUseBookWindow.vue
@@ -244,16 +244,12 @@
    },
    agreeOpen () {
      this.isShowProblem = true
      this.dealForm = {
        driveId: null,
        checkInfo: null
      }
      this.$set(this.dealForm, 'checkInfo', '')
      this.loadMemberList()
    },
    jectOpen () {
      this.isBackProblem = true
      this.dealForm = {
        driveId: null,
      this.backForm = {
        checkInfo: null
      }
    },
@@ -375,6 +371,7 @@
          }
          .value {
            flex: 1;
            color: #111111;
          }
        }
admin/src/components/business/OperaCarsWindow.vue
@@ -95,7 +95,7 @@
          this.memberList = res
        })
        .catch(e => {
          this.$tip.apiFailed(e)
          // this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking = false
admin/src/components/business/OperaDeviceRoleWindow.vue
@@ -119,7 +119,7 @@
              this.$emit('success')
            })
            .catch(e => {
              this.$tip.apiFailed(e)
              // this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking = false
@@ -148,7 +148,7 @@
              this.$emit('success')
            })
            .catch(e => {
              this.$tip.apiFailed(e)
              // this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking = false
admin/src/components/business/OperaHiddenDangerParamWindow.vue
@@ -99,7 +99,7 @@
          this.memberList = res
        })
        .catch(e => {
          this.$tip.apiFailed(e)
          // this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking = false
admin/src/components/business/OperaHiddenDangerWindow.vue
@@ -43,7 +43,6 @@
                  <video
                      v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')"
                      ref="videoRef"
                      autoplay
                      controls
                      preload="auto"
                      style="width: 80px;height: 80px;object-fit: contain;"
@@ -616,6 +615,7 @@
          .value {
            color: #111111;
            flex: 1;
          }
        }
      }
admin/src/components/business/OperaInternalCompanyWindow.vue
@@ -126,7 +126,7 @@
              this.$emit('success')
            })
            .catch(e => {
              this.$tip.apiFailed(e)
             //  this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking = false
@@ -144,7 +144,7 @@
              this.$emit('success')
            })
            .catch(e => {
              this.$tip.apiFailed(e)
              // this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking = false
admin/src/components/business/OperaMemberRoleWindow.vue
@@ -66,7 +66,7 @@
          return
      }
      callback()
    };
    }
    return {
      // è¡¨å•数据
     time:null,
@@ -104,8 +104,8 @@
  },
  methods: {
    filterMethod(query, item) {
      if (!query) return item;
      return item.label.indexOf(query) > -1 ;
      if (!query) return item
      return item.label.indexOf(query) > -1
    },
    seleTime (e) {
      if(e && e.length >= 2){
@@ -124,12 +124,11 @@
        if (this.form.roleIds == null || this.form.roleIds.length == 0) {
          this.$dialog.actionConfirm('权限为空,提交后即清除所选人员已分配权限!请谨慎操作', '您确认进行该操作吗?')
              .then(() => {
                this.confirmDo();
              this.confirmDo()
              })
              .catch(() => {})
        } else {
          this.confirmDo();
          this.confirmDo()
        }
      })
    },
@@ -149,7 +148,7 @@
              this.$emit('success')
            })
            .catch(e => {
              this.$tip.apiFailed(e)
          //  this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking = false
@@ -178,8 +177,8 @@
      this.$nextTick(() => {
        this.$refs.form.resetFields()
        this.form[this.configData['field.id']] = null
        this.form.ids = ids;
        this.form.names =names;
        this.form.ids = ids
        this.form.names = names
        console.log(names)
      })
admin/src/components/business/OperaProblemsWindow.vue
@@ -159,7 +159,7 @@
              this.$emit('success')
            })
            .catch(e => {
              this.$tip.apiFailed(e)
              // this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking = false
@@ -182,7 +182,7 @@
              this.$emit('success')
            })
            .catch(e => {
              this.$tip.apiFailed(e)
             //  this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking = false
admin/src/components/business/OperaVisitsHkWindow.vue
@@ -24,7 +24,6 @@
import GlobalWindow from '@/components/common/GlobalWindow'
import { syncByDate } from '@/api/business/visits'
export default {
  name: 'OperaVisitsHkWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
@@ -60,7 +59,7 @@
            this.$emit('success')
          })
          .catch(e => {
            this.$tip.apiFailed(e)
           //  this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
admin/src/components/business/operaVisitsReportWindow.vue
@@ -10,7 +10,7 @@
    <el-form :model="param" ref="paramRef" :rules="rules">
      <div class="title_tip">访客预约</div>
      <el-form-item label="被访人" prop="startTime">
        {{ userInfo.realname }} {{ userInfo.company.companyNamePath }}
        {{ userInfo.realname }} <template v-if="userInfo.company && userInfo.company.companyNamePath">{{ userInfo.company.companyNamePath }}</template>
      </el-form-item>
      <el-form-item label="入园时间" prop="starttime">
        <el-date-picker
@@ -85,7 +85,6 @@
import dayjs from 'dayjs'
import { createVisit, getVisitedVisitReason } from '@/api/business/visits'
export default {
  name: 'OperaVisitsHkWindow',
  extends: BaseOpera,
  components: {
    GlobalWindow,
@@ -220,7 +219,7 @@
            this.$emit('close')
          })
          .catch(e => {
            this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
admin/src/components/business/operaVisitsWindow.vue
@@ -61,7 +61,7 @@
      <div class="title_tip" style="margintop: 60px">访客预约</div>
      <el-form-item label="被访人" prop="receptMemberId">
        <el-select v-model="param.receptMemberId" placeholder="请选择">
        <el-select v-model="param.receptMemberId" disabled placeholder="请选择">
          <el-option
            v-for="item in memberList"
            :key="item.id"
@@ -130,7 +130,6 @@
import dayjs from 'dayjs'
import { createFk, getVisitedVisitReason, getVisitedMember } from '@/api/business/visits'
export default {
  name: 'OperaVisitsHkWindow',
  extends: BaseOpera,
  components: {
    GlobalWindow,
admin/src/components/common/CommonHeader.vue
@@ -3,6 +3,13 @@
    <div class="header">
      <div class="logo">
        <div>{{ title }}</div>
        <div class="list">
          <div class="item">服务中心</div>
          <div class="item">安防中心</div>
          <div class="item">消防中心</div>
          <div class="item">能管中心</div>
          <div class="item">驾驶舱</div>
        </div>
        <!-- <div class="title-en">Diagnosis of Intelligent Manufacturing Integrated Service Platfrom</div> -->
      </div>
      <div class="user">
@@ -168,7 +175,7 @@
            this.visible.changePwd = false
          })
          .catch(e => {
            this.$tip.apiFailed(e)
           //  this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking.changePwd = false
@@ -185,7 +192,7 @@
          window.location.reload()
        })
        .catch(e => {
          this.$tip.apiFailed(e)
          // this.$tip.apiFailed(e)
        })
    }
  }
@@ -215,6 +222,8 @@
    font-size: 22px;
    font-weight: 600;
    color: #fff;
    display: flex;
    align-items: center;
    // display: inline;
    .title-en {
      font-size: 11px;
admin/src/components/common/DepartmentSelect.vue
@@ -59,7 +59,7 @@
          this.__fillData(this.data, records)
        })
        .catch(e => {
          this.$tip.apiFailed(e)
         //  this.$tip.apiFailed(e)
        })
    },
    // å¡«å……部门树
admin/src/components/common/ImportWindow.vue
@@ -119,7 +119,7 @@
          this.$emit('success')
        })
        .catch(e => {
          this.$tip.apiFailed(e)
         //  this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking = false
admin/src/components/common/Menu.vue
@@ -4,15 +4,20 @@
      <el-menu
        ref="menu"
        :default-active="activeIndex"
        text-color="#fff"
        active-text-color="#fff"
        text-color="#333333"
        active-text-color="#207FF7"
        :collapse="menuData.collapse"
        :default-openeds="defaultOpeneds"
        :collapse-transition="false"
        unique-opened
        @select="handleSelect"
      >
        <MenuItems v-for="menu in menuData.list" :key="menu.index" :menu="menu" :is-root-menu="true"/>
        <MenuItems
          v-for="menu in menuData.list"
          :key="menu.index"
          :menu="menu"
          :is-root-menu="true"
        />
      </el-menu>
    </scrollbar>
  </div>
@@ -107,46 +112,49 @@
.el-menu {
  border-right: 0 !important;
  user-select: none;
  background: $primary-color !important;
  background: #fff !important;
  .el-menu-item {
    background: $primary-color;
    background: #fff;
    height: 48px;
    line-height: 48px;
    // é€‰ä¸­çŠ¶æ€
    &.is-active {
      background: $primary-color-sel !important;
      background: #eff5fe !important;
    }
    // æ‚¬æµ®
    &:hover {
      background-color: $primary-color-hover;
      background-color: #eff5fe;
    }
    &:focus {
      background: $primary-color;
      background: #eff5fe;
    }
  }
  // å­èœå•
  .el-submenu {
    .el-submenu__title{
      background-color: $primary-color;
      background-color: #fff;
    }
    &.is-active {
      .el-submenu__title{
        background-color: $icon-background-color;
        background-color: #fff;
      }
      .el-menu .el-menu-item{
        background-color: $icon-background-color;
        background-color: #fff;
        // æ‚¬æµ®
        &:hover {
          background-color: $icon-background-color;
          background-color: #eff5fe;
        }
      }
    }
    // èœå•上下箭头
    .el-submenu__title i {
      color: #f7f7f7;
      color: #979797;
      font-size: 14px;
    }
  }
  // èœå•图标
  i:not(.el-submenu__icon-arrow) {
    color: #f7f7f7 !important;
    color: #333333 !important;
    position: relative;
    top: -1px;
    // è‡ªå®šä¹‰å›¾æ ‡
admin/src/components/common/MenuItems.vue
@@ -5,7 +5,7 @@
  </el-menu-item>
  <el-submenu v-else :index="menu.index">
    <template slot="title">
      <i :class="menu.icon"></i>
      <i :class="menu.icon" style="color: #333333 !important"></i>
      <span slot="title">{{menu.label}}</span>
    </template>
    <MenuItems v-for="child in menu.children" :menu="child" :key="child.index"/>
admin/src/components/common/companySelect.vue
@@ -53,7 +53,7 @@
          this.__fillData(this.data, records)
        })
        .catch(e => {
          this.$tip.apiFailed(e)
         //  this.$tip.apiFailed(e)
        })
    },
    // å¡«å……菜单树
admin/src/components/operation/HiddenDangerParam.vue
@@ -105,7 +105,6 @@
import { allList, memberList } from '@/api/business/hiddenDangerParam'
import { create } from '@/api/business/hiddenDanger'
export default {
  name: 'OperaVisitsHkWindow',
  extends: BaseOpera,
  components: {
    GlobalWindow
admin/src/components/system/department/DepartmentUserWindow.vue
@@ -134,7 +134,7 @@
          this.tableData.pagination.total = data.total
        })
        .catch(e => {
          this.$tip.apiFailed(e)
         //  this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking.search = false
admin/src/layouts/AppLayout.vue
@@ -10,7 +10,6 @@
        <header>
          <AppHeader/>
        </header>
        <div style="height:10px;"></div>
        <main ref="containerS">
          <transition name="fade">
<!--            <keep-alive>-->
@@ -69,8 +68,8 @@
    height: calc(100vh - 80px);
    overflow-y: scroll;
    overflow-x: hidden;
    background: $primary-color;
    color: #fff;
    background: #fff;
    color: #333333;
    transition: width ease .3s;
    scrollbar-width: none; /* firefox */
    -ms-overflow-style: none; /* IE 10+ */
admin/src/layouts/TableLayout.vue
@@ -6,6 +6,7 @@
        <el-breadcrumb-item v-for="path in paths" :key="path">{{path}}</el-breadcrumb-item>
      </el-breadcrumb>
    </div>-->
    <div style="height:10px;"></div>
    <Profile :roles="roles" :permissions="permissions">
      <!-- æœç´¢è¡¨å•部分 -->
      <div class="table-search-form">
admin/src/utils/config.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
export const weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
admin/src/views/business/deviceBroadcast.vue
@@ -89,7 +89,7 @@
              this.search()
            })
            .catch(e => {
              this.$tip.apiFailed(e)
             //  this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking.delete = false
admin/src/views/index.vue
@@ -1,387 +1,853 @@
<template>
  <div class="home">
    <div class="home_total">
      <div class="home_total_head">在园人员总览</div>
      <div class="home_total_list">
        <div class="home_total_list_item a">
          <span>{{ head && head.workerCount ? head.workerCount : 0 }}</span>
          <span>内部员工</span>
  <div class="main_home">
    <div class="home_header">
      <div class="mb10 fs17">下午好,系统管理员</div>
      <div class="fs13">
        ä»Šå¤©æ˜¯ {{ nowDate }} {{ nowWeek }},欢迎回到智慧物流园区安消一体化系统
        </div>
        <div class="home_total_list_item b">
          <span>{{ head && head.visitorCount ? head.visitorCount : 0 }}</span>
          <span>访客</span>
        </div>
        <div class="home_total_list_item c">
          <span>{{ head && head.lwCount ? head.lwCount : 0 }}</span>
          <span>劳务人员</span>
    <div class="main">
      <div class="app_content">
        <div class="static_card">
          <div class="card">
            <div class="header">
              <div class="left">
                <div class="fs15">今日在园人数(人)</div>
                <div class="num">300</div>
        </div>
        <div class="home_total_list_item d">
          <span>{{
            head && head.presenceCarCount ? head.presenceCarCount : 0
          }}</span>
          <span>在场车辆</span>
              <img src="@/assets/icons/home_icon1.png" alt="" />
        </div>
        <div class="home_total_list_item e">
          <span>{{ head && head.longCarCount ? head.longCarCount : 0 }}</span>
          <span>长期车辆</span>
            <div class="content">
              <div>入园人次(人):600</div>
              <div>出园人次(人):300</div>
        </div>
        <div class="home_total_list_item f">
          <span>{{
            head && head.visitorCarCount ? head.visitorCarCount : 0
          }}</span>
          <span>预约车辆</span>
        </div>
        <div class="home_total_list_item g">
          <span>{{ head && head.supplierCount ? head.supplierCount : 0 }}</span>
          <span>供应商</span>
          <div class="card">
            <div class="header">
              <div class="left">
                <div class="fs15">在园访客数(人)</div>
                <div class="num">300</div>
              </div>
              <img src="@/assets/icons/home_icon2.png" alt="" />
            </div>
            <div class="content">
              <div>访客人次(人):200</div>
              <div>签离人次(人):300</div>
            </div>
          </div>
          <div class="card">
            <div class="header">
              <div class="left">
                <div class="fs15">在园长期相关方数(人)</div>
                <div class="num">300</div>
              </div>
              <img src="@/assets/icons/home_icon3.png" alt="" />
            </div>
            <div class="content">
              <div>入园人次(人):600</div>
              <div>出园人次(人):300</div>
            </div>
          </div>
          <div class="card">
            <div class="header">
              <div class="left">
                <div class="fs15">在园长期相关方数(人)</div>
                <div class="num">300</div>
              </div>
              <img src="@/assets/icons/home_icon4.png" alt="" />
            </div>
            <div class="content">
              <div>入园车次(辆):600</div>
              <div>出园车次(辆):300</div>
        </div>
      </div>
    </div>
    <div class="home_charts">
      <div class="home_charts_item">
        <div class="home_charts_item_label">在园人员占比</div>
        <div class="home_charts_item_charts" id="chart1"></div>
      </div>
      <div class="home_charts_item">
        <div class="home_charts_item_label">劳务人员分布总览</div>
        <div class="home_charts_item_charts" id="chart2"></div>
        <div class="funcs">
          <div class="home_title">常用功能</div>
          <div class="list">
            <div v-for="item in funcList" :key="item.name" class="item">
              <img class="mb10" :src="item.url" alt="" />
              <div>{{ item.name }}</div>
      </div>
    </div>
    <div class="home_table">
      <div class="home_table_head">超时预警人员({{ total }})</div>
      <div class="home_table_box">
        <el-table
          :data="list"
          :header-cell-style="{
            background: '#dcdde2',
            color: 'rgb(51, 51, 51)',
          }"
          border
          style="width: 100%"
        >
          <el-table-column prop="name" label="访客姓名"> </el-table-column>
          <el-table-column prop="phone" label="访客电话"> </el-table-column>
          <el-table-column prop="companyName" label="访客组织">
          </el-table-column>
          <el-table-column label="人员类型">
            <template slot-scope="{ row }">
              <span v-if="row.type === 0">劳务访客</span>
              <span v-if="row.type === 1">普通访客</span>
              <span v-if="row.type === 2">内部人员</span>
            </template>
          </el-table-column>
          <el-table-column prop="outDate" label="授权到期时间">
          </el-table-column>
          <el-table-column label="状态">
            <template slot-scope="{ row }">
              <span v-if="row.outStatus === 0">未超时</span>
              <span style="color: red" v-if="row.outStatus === 1">已超时</span>
              <span v-if="row.outStatus === 2">即将超时</span>
            </template>
          </el-table-column>
          <el-table-column prop="address" label="处理" width="80">
            <template slot-scope="scope">
              <el-button
                type="text"
                @click="departure(scope.row.id)"
                v-if="scope.row.outStatus === 1"
                >离厂</el-button
              >
            </template>
          </el-table-column>
        </el-table>
        <el-pagination
          style="margin-top: 20px"
          @current-change="handleCurrentChange"
          :current-page="page"
          :page-size="10"
          layout="total, prev, pager, next, jumper"
          :total="total"
        >
        </el-pagination>
        </div>
        <div class="static_wrap">
          <div class="df mb10">
            <div class="wrap static1">
              <div class="header">
                <div class="home_title">在场人员占比</div>
                <div class="df_ac more">
                  æ›´å¤š<i class="el-icon-arrow-right"></i>
                </div>
              </div>
              <div class="content">
                <div class="echart_wrap">
                  <div class="pie_text">
                    <div class="fs13">总数</div>
                    <div class="fs15"><strong>300</strong></div>
                  </div>
                  <div class="echart" id="echart1"></div>
                </div>
                <div class="list">
                  <div class="item">
                    <div class="icon"></div>
                    <div class="text">访客</div>
                    <div class="num">100</div>
                  </div>
                  <div class="item">
                    <div :style="{ background: colors[0] }" class="icon"></div>
                    <div class="text">访客</div>
                    <div class="num">100</div>
                  </div>
                  <div class="item">
                    <div :style="{ background: colors[1] }" class="icon"></div>
                    <div class="text">访客</div>
                    <div class="num">100</div>
                  </div>
                </div>
              </div>
            </div>
            <div class="wrap static2">
              <div class="header">
                <div class="home_title">长期相关方分布</div>
                <div class="df_ac more">
                  æ›´å¤š<i class="el-icon-arrow-right"></i>
                </div>
              </div>
              <div class="echart" id="echart2"></div>
            </div>
          </div>
          <div class="df">
            <div class="wrap static3">
              <div class="header">
                <div class="home_title">7日访客统计</div>
                <div class="df_ac more">
                  æ›´å¤š<i class="el-icon-arrow-right"></i>
                </div>
              </div>
              <div class="echart" id="echart3"></div>
            </div>
            <div class="wrap static4">
              <div class="header">
                <div class="home_title">7日车辆统计</div>
                <div class="df_ac more">
                  æ›´å¤š<i class="el-icon-arrow-right"></i>
                </div>
              </div>
              <div class="echart" id="echart4"></div>
            </div>
          </div>
        </div>
      </div>
      <div class="app_side">
        <div class="task">
          <div class="header df_sb">
            <div class="home_title df">
              <span>待办事项</span>
              <span class="num">10</span>
            </div>
            <div class="df_ac more">
              æ›´å¤š<i class="el-icon-arrow-right"></i>
            </div>
          </div>
          <div class="list">
            <div class="item">
              <div class="content">
                <div class="title">点点滴滴</div>
                <div class="time">time</div>
              </div>
              <div class="btn">处理</div>
            </div>
            <div class="item">
              <div class="content">
                <div class="title">点点滴滴</div>
                <div class="time">time</div>
              </div>
              <div class="btn">处理</div>
            </div>
          </div>
        </div>
        <div class="warnning">
          <div class="header df_sb">
            <div class="home_title df">
              <span>超时预警</span>
              <span class="num">10</span>
            </div>
            <div class="df_ac more">
              æ›´å¤š<i class="el-icon-arrow-right"></i>
            </div>
          </div>
          <div class="list">
            <div class="item">
              <div class="name_wrap df_sb">
                <div class="name">袁隆平</div>
                <div class="identity">普通访客</div>
              </div>
              <div class="line">联系电话:1888</div>
              <div class="line">访客公司:安徽豆米</div>
              <div class="auth df_sb">
                <div class="time">授权期限:</div>
                <div class="btn">离场</div>
              </div>
            </div>
            <div class="item">
              <div class="name_wrap df_sb">
                <div class="name">袁隆平</div>
                <div class="identity">普通访客</div>
              </div>
              <div class="line">联系电话:1888</div>
              <div class="line">访客公司:安徽豆米</div>
              <div class="auth df_sb">
                <div class="time">授权期限:</div>
                <div class="btn">离场</div>
              </div>
            </div>
            <div class="item">
              <div class="name_wrap df_sb">
                <div class="name">袁隆平</div>
                <div class="identity">普通访客</div>
              </div>
              <div class="line">联系电话:1888</div>
              <div class="line">访客公司:安徽豆米</div>
              <div class="auth df_sb">
                <div class="time">授权期限:</div>
                <div class="btn">离场</div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import dayjs from 'dayjs'
import * as echarts from 'echarts'
import { body, head, timeoutPage, level } from '@/api/business/staging'
import { weeks } from '@/utils/config'
const colors = ['#52a4f7', '#7678f7', '#5fc6d5']
export default {
  name: 'Index',
  data() {
    return {
      head: null,
      list: [],
      total: 0,
      data1: [],
      data2: [[], []],
      page: 1
      colors,
      nowDate: '',
      nowWeek: '',
      funcList: [
        { name: '访客报备', path: '', url: require('@/assets/icons/home_func1.png') },
        { name: '隐患随手拍', path: '', url: require('@/assets/icons/home_func2.png') },
        { name: '预约会议室', path: '', url: require('@/assets/icons/home_func3.png') },
        { name: '考勤工作台', path: '', url: require('@/assets/icons/home_func4.png') }
      ]
    }
  },
  created() {
    this.getHeader()
    this.getData()
    this.updateDate()
    setInterval(() => {
      this.updateDate()
    }, 1000 * 60 * 60)
  },
  mounted() {
    // this.getcharts2()
    this.initData()
  },
  methods: {
    departure(id) {
      this.$confirm('确定离场吗, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        level(id)
          .then(res => {
            this.page = 1
            this.getData()
          })
      }).catch(() => {
      })
    updateDate () {
      this.nowDate = dayjs().format('YYYYå¹´M月D日')
      this.nowWeek = weeks[new Date().getDay()]
    },
    getData() {
      timeoutPage({
        capacity: 10,
        page: this.page,
        model: {}
      }).then(res => {
        this.list = res.records
        this.total = res.total
      })
    initData () {
      this.initEchart1()
      this.initEchart2()
      this.initEchart3()
      this.initEchart4()
    },
    getHeader() {
      head().then(res => {
        this.head = res
      })
      body().then(res => {
        this.data1 = res.retentionUsers.map(item => {
          let name = ''
          if (item.memberType === 0) {
            name = '劳务访客'
          } else if (item.memberType === 1) {
            name = '普通访客'
          } else if (item.memberType === 2) {
            name = '内部员工'
          }
          return {
            value: item.memberCount,
            name
          }
        })
        let arr1 = res.companyUsers.map(item => item.companyName)
        let arr2 = res.companyUsers.map(item => item.memberCount)
        if (arr1.length > 0) {
          this.data2 = [arr1, arr2]
          this.getcharts2()
        }
        this.getcharts1()
      })
    },
    handleCurrentChange(page) {
      this.page = page
      this.getData()
    },
    getcharts1() {
      const myChart = echarts.init(document.getElementById('chart1'))
      // ç»˜åˆ¶å›¾è¡¨
      myChart.setOption({
        tooltip: {
          trigger: 'item'
        },
        grid: {
          bottom: '5%',
          top: '5%'
        },
        legend: {
          bottom: '0%',
          left: 'center',
          icon: 'circle'
        },
    initEchart1 () {
      const myChart = echarts.init(document.getElementById('echart1'))
      const option = {
        series: [
          {
            type: 'pie',
            radius: ['40%', '70%'],
            radius: ['42%', '90%'],
            label: {
              formatter: '{b} {d}%'
              show: false,
              position: 'center'
            },
            data: this.data1,
            color: colors,
            labelLine: {
              show: false
            },
            data: [
              { value: 1048, name: 'Search Engine' },
              { value: 735, name: 'Direct' },
              { value: 580, name: 'Email' }
            ]
          }
        ]
      }
      myChart.setOption(option)
      window.addEventListener('resize', function () { // æ‰§è¡Œ
        myChart.resize()
      })
    },
    initEchart2 () {
      const myChart = echarts.init(document.getElementById('echart2'))
      myChart.setOption({
        grid: {
          top: '4%',
          left: '2%',
          right: '6%',
          bottom: '2%',
          containLabel: true
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'line'
          }
        },
        xAxis: {
          type: 'value',
          position: 'bottom',
          splitLine: {
            show: true,
            lineStyle: {
              // è¿™é‡Œè¾“入线条的样式
              color: 'rgba(255,255,255,0.14)'
            }
          }
        },
        yAxis: {
          type: 'category',
          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
        },
        series: [
          {
            data: [120, 200, 150, 80, 70, 110, 130],
            type: 'bar',
            barWidth: 10,
            itemStyle: {
              normal: {
                color: function (colors) {
                  var colorList = [
                    '#fc8251',
                    '#5470c6',
                    '#91cd77'
                color: new echarts.graphic.LinearGradient(
                  1, 0, 0, 0,
                  [
                    { offset: 0, color: '#56abf8' },
                    { offset: 1, color: '#407ff0' }
                  ]
                  return colorList[colors.dataIndex]
                }
              }
            },
            emphasis: {
              itemStyle: {
                shadowBlur: 10,
                shadowOffsetX: 0,
                shadowColor: 'rgba(0, 0, 0, 0.5)'
                ),
                barBorderRadius: [0, 10, 10, 0]
              }
            }
          }
        ]
      })
      window.addEventListener('resize', function () { // æ‰§è¡Œ
        myChart.resize()
      })
    },
    getcharts2() {
      const myChart = echarts.init(document.getElementById('chart2'))
    initEchart3 () {
      const myChart = echarts.init(document.getElementById('echart3'))
      myChart.setOption({
        tooltip: {
          trigger: 'item'
          trigger: 'axis',
          axisPointer: {
            type: 'line'
        },
        grid: {
          bottom: '5%',
          top: '5%'
          formatter: function (params) {
            return `
          <div style="background-color: #15323f;margin: -12px;padding: 14px;border: 2px solid rgba(1,217,254,0.5);color: #fff;">
            <div>${params[0].name}日客流</div>
            <div style="display: flex;align-items: center;">
              <div style="width: 10px;height: 10px;border-radius: 50%;background-color: #6feef0;"></div>
              <span style="margin-left: 6px;">${params[0].value}</span>
              <div>人</div>
            </div>
          </div>
        `
          }
        },
        xAxis: {
          max: 'dataMax'
          type: 'category',
          boundaryGap: false,
          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
        },
        yAxis: {
          type: 'category',
          data: this.data2[0]
          type: 'value',
          name: '人数',
          nameTextStyle: {
            padding: [0, 0, 4, -30] // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
          },
          splitLine: {
            show: true,
            lineStyle: {
              // è¿™é‡Œè¾“入线条的样式
              color: 'rgba(255,255,255,0.14)'
            }
          }
        },
        grid: {
          top: '16%',
          left: '2%',
          right: '2%',
          bottom: '4%',
          containLabel: true
        },
        series: [
          {
            realtimeSort: true,
            type: 'bar',
            data: this.data2[1],
            data: [150, 230, 224, 218, 135, 147, 260],
            type: 'line',
            areaStyle: {
              normal: {
                color: {
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  colorStops: [{
                    offset: 0,
                    color: '#207FF7' // 0% å¤„的颜色
                  }, {
                    offset: 1,
                    color: 'rgba(255,255,255,.2)' // 100% å¤„的颜色
                  }],
                  globalCoord: false // ç¼ºçœä¸º false
                }
              }
            },
            lineStyle: { // çº¿æ¡æ ·å¼
              color: {
                type: 'linear',
                x: 0,
                y: 0,
                x2: 0,
                y2: 1,
                colorStops: [{
                  offset: 0, color: '#207FF7' // 0% å¤„的颜色
                }, {
                  offset: 1, color: '#207FF7' // 100% å¤„的颜色
                }]
              },
              width: 2 // çº¿æ¡ç²—细
            },
            symbol: 'circle',
            symbolSize: 10,
            itemStyle: {
              normal: {
                color: '#fc8251'
                color: '#207FF7' // æŠ˜çº¿ç‚¹çš„颜色
              }
            }
            },
            smooth: false
          }
        ]
      })
      window.addEventListener('resize', function () { // æ‰§è¡Œ
        myChart.resize()
      })
    },
    initEchart4 () {
      const myChart = echarts.init(document.getElementById('echart4'))
      myChart.setOption({
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'line'
          },
          formatter: function (params) {
            return `
          <div style="background-color: #15323f;margin: -12px;padding: 14px;border: 2px solid rgba(1,217,254,0.5);color: #fff;">
            <div>${params[0].name}日客流</div>
            <div style="display: flex;align-items: center;">
              <div style="width: 10px;height: 10px;border-radius: 50%;background-color: #6feef0;"></div>
              <span style="margin-left: 6px;">${params[0].value}</span>
              <div>人</div>
            </div>
          </div>
        `
          }
        },
        xAxis: {
          type: 'category',
          boundaryGap: false,
          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
        },
        yAxis: {
          type: 'value',
          name: '车辆数',
          nameTextStyle: {
            padding: [0, 0, 4, -30] // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
          },
          splitLine: {
            show: true,
            lineStyle: {
              // è¿™é‡Œè¾“入线条的样式
              color: 'rgba(255,255,255,0.14)'
            }
          }
        },
        grid: {
          top: '16%',
          left: '2%',
          right: '2%',
          bottom: '4%',
          containLabel: true
        },
        series: [
          {
            data: [150, 230, 224, 218, 135, 147, 260],
            type: 'line',
            areaStyle: {
              normal: {
                color: {
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  colorStops: [{
                    offset: 0,
                    color: '#42D49D' // 0% å¤„的颜色
                  }, {
                    offset: 1,
                    color: 'rgba(255,255,255,.5)' // 100% å¤„的颜色
                  }],
                  globalCoord: false // ç¼ºçœä¸º false
                }
              }
            },
            lineStyle: { // çº¿æ¡æ ·å¼
              color: {
                type: 'linear',
                x: 0,
                y: 0,
                x2: 0,
                y2: 1,
                colorStops: [{
                  offset: 0, color: '#42D49D' // 0% å¤„的颜色
                }, {
                  offset: 1, color: '#42D49D' // 100% å¤„的颜色
                }]
              },
              width: 2 // çº¿æ¡ç²—细
            },
            symbol: 'circle',
            symbolSize: 10,
            itemStyle: {
              normal: {
                color: '#42D49D' // æŠ˜çº¿ç‚¹çš„颜色
              }
            },
            smooth: false
          }
        ]
      })
      window.addEventListener('resize', function () { // æ‰§è¡Œ
        myChart.resize()
      })
    }
  }
}
</script>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
.home {
  width: 100%;
  .home_table {
    width: 100%;
    padding: 20px;
<style lang="scss" scoped>
div {
    box-sizing: border-box;
    background: #ffffff;
    margin-top: 20px;
    .home_table_head {
      font-size: 16px;
}
.home_title {
      font-weight: 600;
      color: black;
  font-size: 16px;
  color: #222222;
  line-height: 22px;
    }
    .home_table_box {
      width: 100%;
      margin-top: 15px;
    }
  }
  .home_charts {
    width: 100%;
    margin-top: 20px;
.main {
    display: flex;
    align-items: center;
  position: relative;
  z-index: 99;
  .app_content {
    flex: 1;
    .static_card {
      height: 187px;
      color: #fff;
      display: flex;
    justify-content: space-between;
    .home_charts_item {
      padding: 20px;
      box-sizing: border-box;
      .card {
      flex: 1;
        height: 187px;
        background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%);
        box-shadow: 0px 2px 10px 0px rgba(32, 127, 247, 0.4);
        border-radius: 8px;
        margin-right: 14px;
        &:nth-of-type(2) {
          background: linear-gradient(270deg, #8383ff 0%, #6b6eff 100%);
        }
        &:nth-of-type(3) {
          background: linear-gradient(270deg, #42d49d 0%, #12bb8b 100%);
        }
        &:nth-of-type(4) {
          margin-right: 0;
          background: linear-gradient(270deg, #30d3de 0%, #04b7cd 100%);
        }
        .header {
          height: 103px;
          display: flex;
          justify-content: space-between;
          align-items: center;
          padding: 20px 20px 12px;
          border-bottom: 1px solid rgba(255, 255, 255, 0.2);
          img {
            width: 40px;
            height: 40px;
          }
          .num {
            font-weight: 600;
            font-size: 30px;
            margin-top: 12px;
          }
        }
        .content {
          height: 82px;
      display: flex;
      flex-direction: column;
      margin-right: 20px;
      background: #ffffff;
      .home_charts_item_label {
        font-size: 16px;
        font-weight: 600;
        color: black;
      }
      .home_charts_item_charts {
        width: 100%;
        height: 300px;
      }
      &:last-child {
        margin: 0 !important;
          justify-content: space-between;
          font-size: 13px;
          padding: 15px 20px 20px;
      }
    }
  }
  .home_total {
    width: 100%;
    background: #ffffff;
    margin-top: 20px;
    .home_total_head {
      width: 100%;
      font-size: 16px;
      font-weight: 600;
      color: black;
      padding: 10px 20px;
      box-sizing: border-box;
      border-bottom: 1px solid #ececec;
    }
    .home_total_list {
      width: 100%;
    .funcs {
      height: 149px;
      padding: 20px;
      box-sizing: border-box;
      background: #fff;
      margin: 10px 0;
      .list {
      display: flex;
      align-items: center;
      .a {
        border-left: 5px solid rgba(129, 211, 248, 1) !important;
      }
      .b {
        border-left: 5px solid rgba(236, 128, 141, 1) !important;
      }
      .c {
        border-left: 5px solid rgba(250, 205, 145, 1) !important;
      }
      .d {
        border-left: 5px solid rgba(245, 154, 35, 1) !important;
      }
      .e {
        border-left: 5px solid rgba(128, 128, 255, 1) !important;
      }
      .f {
        border-left: 5px solid rgba(202, 249, 130, 1) !important;
      }
      .g {
        border-left: 5px solid rgba(194, 128, 255, 1) !important;
      }
      .home_total_list_item {
        flex: 1;
        padding-top: 20px;
        .item {
        display: flex;
        align-items: center;
        flex-direction: column;
          align-items: center;
        justify-content: center;
        height: 80px;
        border-radius: 5px;
        border: 1px solid #ececec;
        margin-right: 15px;
        &:last-child {
          margin: 0 !important;
          margin-right: 24px;
          img {
            width: 44px;
            height: 44px;
        }
        span {
          &:first-child {
            font-weight: 500;
            font-size: 24px;
            color: black;
          }
          &:last-child {
      }
    }
  }
  .app_side {
    width: 408px;
    margin-left: 10px;
    .task {
      background: #fff;
      border-radius: 2px;
      border: 1px solid #eeeeee;
      padding: 20px;
      height: 346px;
      margin-bottom: 10px;
      .header {
        .num {
          position: relative;
          top: 3px;
          height: 16px;
          line-height: 16px;
          font-size: 12px;
          color: #ffffff;
          padding: 0 6px;
            font-weight: 400;
            font-size: 14px;
          background: red;
          border-radius: 8px;
          margin-left: 13px;
        }
        .more {
          font-size: 13px;
          color: #999999;
        }
      }
      .list {
        .item {
          display: flex;
          align-items: center;
          margin-top: 15px;
          .content {
            flex: 1;
            .title {
              color: #222222;
              margin-bottom: 5px;
            }
            .time {
              color: #999999;
              font-size: 12px;
            }
          }
          .btn {
            margin-left: 10px;
            width: 58px;
            text-align: center;
            height: 30px;
            line-height: 30px;
            background: #ffffff;
            border-radius: 2px;
            border: 1px solid #207ff7;
            font-size: 13px;
            color: #207ff7;
          }
        }
      }
    }
    .warnning {
      background: #fff;
      border-radius: 2px;
      border: 1px solid #eeeeee;
      padding: 20px;
      height: 508px;
      .header {
        .num {
          position: relative;
          top: 3px;
          height: 16px;
          line-height: 16px;
          font-size: 12px;
          color: #ffffff;
          padding: 0 6px;
          font-weight: 400;
          background: red;
          border-radius: 8px;
          margin-left: 13px;
        }
        .more {
          font-size: 13px;
          color: #999999;
        }
      }
      .list {
        padding-top: 6px;
        .item {
          margin-top: 10px;
          padding: 15px;
          width: 100%;
          height: 140px;
          background: rgba(32, 127, 247, 0.05);
          border-radius: 4px;
          .name_wrap {
            margin-bottom: 10px;
            .name {
              font-weight: 600;
              color: #222222;
            }
            .identity {
              font-size: 13px;
              color: #207ff7;
            }
          }
          .line {
            color: #666666;
            margin-top: 2px;
            margin-bottom: 8px;
            font-size: 13px;
          }
          .auth {
            .time {
              font-weight: 600;
              font-size: 13px;
              color: #ee3821;
            }
            .btn{
              margin-left: 10px;
              width: 58px;
              text-align: center;
              height: 30px;
              line-height: 30px;
              background: #ffffff;
              border-radius: 2px;
              border: 1px solid #207ff7;
              font-size: 13px;
              color: #207ff7;
          }
        }
      }
    }
  }
}
  .static_wrap {
    .wrap {
      background: #fff;
      padding: 20px 20px 10px;
      border-radius: 2px;
      border: 1px solid #eeeeee;
      height: 250px;
      flex: 1;
      &:nth-of-type(2n) {
        margin-left: 10px;
      }
      .echart {
        width: 100%;
        height: 190px;
      }
      .header {
        display: flex;
        justify-content: space-between;
        align-items: center;
        .more {
          font-size: 13px;
          color: #999999;
        }
      }
    }
    .static1 {
      .content {
        display: flex;
        justify-content: center;
        align-items: center;
        .echart_wrap {
          position: relative;
          .pie_text {
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);
            z-index: 999;
          }
        }
        .echart {
          width: 150px;
          height: 150px;
        }
        .list {
          margin-left: 36px;
          .item {
            display: flex;
            align-items: center;
            margin: 8px 0;
            .icon {
              width: 16px;
              height: 16px;
              border-radius: 50%;
              margin-right: 6px;
              background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%);
            }
            .text {
              margin-right: 6px;
            }
          }
        }
      }
    }
  }
}
.main_home {
  background: #f4f7fc;
  position: relative;
  width: 100%;
  height: 100%;
  overflow: auto;
  padding: 20px;
  padding-top: 92px;
  .home_header {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 200px;
    padding: 20px;
    color: #fff;
    background: linear-gradient(180deg, #207ff7 0%, rgba(32, 127, 247, 0) 100%);
  }
}
</style>
admin/src/views/meeting/bookings.vue
@@ -420,7 +420,7 @@
          this.tableData.pagination.total = data.total
        })
        .catch(e => {
          this.$tip.apiFailed(e)
          // this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking.search = false
admin/src/views/meeting/components/OperaBookingsWindow.vue
@@ -390,7 +390,7 @@
            this.$emit('success')
          })
          .catch(e => {
            this.$tip.apiFailed(e)
            // this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
@@ -436,7 +436,7 @@
            this.$emit('success')
          })
          .catch(e => {
            this.$tip.apiFailed(e)
            // this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
admin/src/views/meeting/components/OperaRoomsWindow.vue
@@ -224,7 +224,7 @@
            this.$emit('success')
          })
          .catch(e => {
            this.$tip.apiFailed(e)
            // this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
@@ -260,7 +260,7 @@
            this.$emit('success')
          })
          .catch(e => {
            this.$tip.apiFailed(e)
            // this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
admin/src/views/meeting/roomStatistics.vue
@@ -183,7 +183,7 @@
              this.download(response)
            })
            .catch(e => {
              this.$tip.apiFailed(e)
             //  this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking.export = false
@@ -200,7 +200,7 @@
          // this.tableData.pagination.total = data.total
        })
        .catch(e => {
          this.$tip.apiFailed(e)
         //  this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking.search = false
admin/src/views/meeting/rooms.vue
@@ -200,7 +200,7 @@
          this.tableData.pagination.total = data.total
        })
        .catch(e => {
          this.$tip.apiFailed(e)
          // this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking.search = false
admin/src/views/meeting/userStatistics.vue
@@ -192,7 +192,7 @@
              this.download(response)
            })
            .catch(e => {
              this.$tip.apiFailed(e)
              // this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking.export = false
@@ -215,7 +215,7 @@
          this.tableData.pagination.total = data.total
        })
        .catch(e => {
          this.$tip.apiFailed(e)
          // this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking.search = false
admin/src/views/operation/danger/record.vue
@@ -162,7 +162,6 @@
              this.download(response)
            })
            .catch(e => {
              this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.exLoading = false
admin/src/views/operation/serviceCar/apprRecord.vue
@@ -312,7 +312,6 @@
              this.download(response)
            })
            .catch(e => {
              this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.exLoading = false
admin/src/views/platform/platform.vue
@@ -149,7 +149,7 @@
              this.search()
            })
            .catch(e => {
              this.$tip.apiFailed(e)
              // this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking.working = false
@@ -167,7 +167,7 @@
              this.search()
            })
            .catch(e => {
              this.$tip.apiFailed(e)
              // this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking.working = false
h5/.gitignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
.DS_Store
coderd.json
node_modules
.env.development
uview-ui
/dist
# local env files
.env.local
.env.*.local
unpackage
admin
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
h5/pages.json
@@ -405,6 +405,24 @@
                "enablePullDownRefresh": false
            }
        }
        ,{
            "path" : "pages/driver/login",
            "style" :
            {
                "navigationBarTitleText": "登录",
                "enablePullDownRefresh": false
            }
        }
        ,{
            "path" : "pages/driver/register",
            "style" :
            {
                "navigationBarTitleText": "注册",
                "enablePullDownRefresh": false
            }
        }
    ],
    "subPackages": [
        {
h5/pages/driver/login.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,220 @@
<template>
  <view class="login">
    <image class="login_bg" src="@/static/login_bg@2x.png" />
    <image class="login_logo" src="@/static/logo@2x.png" mode="widthFix" />
    <view class="login_title">安泰物流智慧园区</view>
    <view class="login_title">物流车司机登录</view>
    <view class="login_list">
      <view class="login_list_item">
        <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
        <input v-model="form.phone" maxlength="18" placeholder="手机号" />
      </view>
      <view class="login_list_item">
        <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
        <input
          v-model="form.password"
          type="password"
          placeholder="密码"
        />
      </view>
    </view>
    <view class="login_btn">
      <view class="login_btn_n" @click="onLogin">立即登录</view>
    </view>
    <!--  -->
        <view class="btns">
            <view class="btn" @click="handleRegister">立即注册</view>
            <view class="btn separate"> | </view>
            <view class="btn">忘记密码</view>
        </view>
  </view>
</template>
<script>
import { resetPassword, sendSms } from '@/api'
export default {
  data() {
    return {
      form: {
      },
      isShowProtocol: false,
      countDown: 0
    }
  },
  onLoad() {
  },
  methods: {
        handleRegister() {
            uni.navigateTo({
                url: "/pages/driver/register"
            })
        },
    dealChange(e) {
      console.log(e)
    },
    initCaptcha() {
      if (!this.form.phone) return uni.showToast({
        title: '手机号不能为空',
        icon: 'none'
      })
      sendSms({ phone: this.form.phone }).then(res => {
        this.countDown = 60
        setInterval(() => {
          if (this.countDown == 0) return
          this.countDown--
        }, 1000)
      })
    },
    onLogin() {
      const { form } = this
      if (!form.phone) return uni.showToast({
        title: '手机号不能为空',
        icon: 'none'
      })
      if (!form.password) return uni.showToast({
        title: '密码不能为空',
        icon: 'none'
      })
      resetPassword({
        ...form
      }).then(res => {
        if (res && res.code == 200) {
          setTimeout(() => {
            uni.showToast({
              title: '密码修改成功,请重新登录',
              icon: 'success',
              duration: 2000
            })
          })
          uni.redirectTo({
            url: "/pages/staffLogin/login"
          })
        }
      })
    }
  }
}
</script>
<style lang="scss" scoped>
.login {
  width: 100%;
  display: flex;
  padding-top: 100rpx;
  box-sizing: border-box;
  align-items: center;
  flex-direction: column;
  background: linear-gradient(
    180deg,
    rgba(39, 155, 170, 0.2) 0%,
    rgba(39, 155, 170, 0) 100%
  );
  .login_logo {
    width: 180rpx;
    height: 180rpx;
        margin-bottom: 40rpx;
  }
  .login_bg {
    position: absolute;
    top: 0;
    width: 750rpx;
  }
  .login_title {
    font-size: 44rpx;
    font-weight: 600;
    color: #333333;
  }
  .login_list {
        margin-top: 60rpx;
    width: 100%;
    padding: 0 60rpx;
    box-sizing: border-box;
    .login_list_item {
      width: 100%;
      border-radius: 50rpx;
      height: 98rpx;
      padding: 0 40rpx;
      box-sizing: border-box;
      background: #ffffff;
      margin-bottom: 40rpx;
      display: flex;
      align-items: center;
      justify-content: space-between;
      &:last-child {
        margin-bottom: 0 !important;
      }
      image {
        flex-shrink: 0;
        width: 40rpx;
        height: 40rpx;
      }
      .captcha {
        color: $uni-color-primary;
      }
      input {
        flex: 1;
        height: 100%;
        color: #666666;
        margin-left: 24rpx;
        border: none;
      }
    }
  }
  .login_btn {
    width: 100%;
    padding: 0 60rpx;
    box-sizing: border-box;
    margin-top: 80rpx;
    .for_psd {
      color: $uni-color-primary;
      margin-top: 40rpx;
      width: 140rpx;
      text-align: center;
      margin: 40rpx auto;
    }
    .login_btn_n {
      width: 100%;
      height: 98rpx;
      background: $uni-color-primary;
      box-shadow: 0rpx 12rpx 24rpx 0rpx rgba(39, 155, 170, 0.2);
      display: flex;
      align-items: center;
      justify-content: center;
      font-weight: 600;
      font-size: 32rpx;
      color: #ffffff;
      border-radius: 50rpx;
    }
  }
  .deal_wrap {
    position: absolute;
    width: 100%;
    left: 0;
    text-align: center;
    bottom: 108rpx;
    .deal {
      color: $uni-color-primary;
    }
  }
    .btns{
        display: flex;
        align-items: center;
        justify-content: center;
        position: fixed;
        bottom: 60rpx;
        left: 0;
        width: 100%;
        .btn{
            font-size: 30rpx;
            color: $uni-color-primary;
        }
        .separate{ margin: 0 8rpx; }
    }
}
.modal {
  padding: 32rpx;
}
</style>
h5/pages/driver/register.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,227 @@
<template>
  <view class="login">
    <image class="login_bg" src="@/static/login_bg@2x.png" />
    <image class="login_logo" src="@/static/logo@2x.png" mode="widthFix" />
    <view class="login_title">安泰物流智慧园区</view>
    <view class="login_title">物流车司机登录</view>
    <view class="login_list">
      <view class="login_list_item">
        <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
        <input v-model="form.name" maxlength="18" placeholder="请输入姓名" />
      </view>
            <view class="login_list_item">
              <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
              <input v-model="form.phone" maxlength="18" placeholder="请输入手机号" />
            </view>
      <view class="login_list_item">
        <image src="@/static/ic_captcha.png" mode="widthFix"></image>
        <input
          v-model="form.validCode"
          placeholder="请输入验证码"
          type="text"
        />
        <text class="captcha" v-if="countDown == 0" @click="initCaptcha"
          >获取验证码</text
        >
        <text class="placeholder9" v-else>{{ countDown }}</text>
      </view>
      <view class="login_list_item">
        <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
        <input
          v-model="form.password"
          type="password"
          placeholder="请输入密码"
        />
      </view>
    </view>
    <view class="login_btn">
      <view class="login_btn_n" @click="onLogin">立即注册</view>
    </view>
    <!--  -->
    <u-popup
      :show="isShowProtocol"
      @close="isShowProtocol = false"
      mode="center"
    >
      <view class="modal">111</view>
    </u-popup>
  </view>
</template>
<script>
import { resetPassword, sendSms } from '@/api'
export default {
  data() {
    return {
      form: {
      },
      isShowProtocol: false,
      countDown: 0
    }
  },
  onLoad() {
  },
  methods: {
    dealChange(e) {
      console.log(e)
    },
    initCaptcha() {
      if (!this.form.phone) return uni.showToast({
        title: '手机号不能为空',
        icon: 'none'
      })
      sendSms({ phone: this.form.phone }).then(res => {
        this.countDown = 60
        setInterval(() => {
          if (this.countDown == 0) return
          this.countDown--
        }, 1000)
      })
    },
    onLogin() {
      const { form } = this
            if (!form.name) return uni.showToast({
              title: '手机号姓名',
              icon: 'none'
            })
      if (!form.phone) return uni.showToast({
        title: '手机号不能为空',
        icon: 'none'
      })
      if (!form.validCode) return uni.showToast({
        title: '验证码不能为空',
        icon: 'none'
      })
      if (!form.password) return uni.showToast({
        title: '密码不能为空',
        icon: 'none'
      })
      resetPassword({
        ...form
      }).then(res => {
        if (res && res.code == 200) {
          setTimeout(() => {
            uni.showToast({
              title: '注册成功,请前往登录',
              icon: 'success',
              duration: 2000
            })
          })
          uni.redirectTo({
            url: "/pages/driver/login"
          })
        }
      })
    }
  }
}
</script>
<style lang="scss" scoped>
.login {
  width: 100%;
  display: flex;
  padding-top: 100rpx;
  box-sizing: border-box;
  align-items: center;
  flex-direction: column;
  background: linear-gradient(
    180deg,
    rgba(39, 155, 170, 0.2) 0%,
    rgba(39, 155, 170, 0) 100%
  );
  .login_logo {
    width: 180rpx;
    height: 180rpx;
        margin-bottom: 40rpx;
  }
  .login_bg {
    position: absolute;
    top: 0;
    width: 750rpx;
  }
  .login_title {
    font-size: 44rpx;
    font-weight: 600;
    color: #333333;
  }
  .login_list {
        margin-top: 60rpx;
    width: 100%;
    padding: 0 60rpx;
    box-sizing: border-box;
    .login_list_item {
      width: 100%;
      border-radius: 50rpx;
      height: 98rpx;
      padding: 0 40rpx;
      box-sizing: border-box;
      background: #ffffff;
      margin-bottom: 40rpx;
      display: flex;
      align-items: center;
      justify-content: space-between;
      &:last-child {
        margin-bottom: 0 !important;
      }
      image {
        flex-shrink: 0;
        width: 40rpx;
        height: 40rpx;
      }
      .captcha {
        color: $uni-color-primary;
      }
      input {
        flex: 1;
        height: 100%;
        color: #666666;
        margin-left: 24rpx;
        border: none;
      }
    }
  }
  .login_btn {
    width: 100%;
    padding: 0 60rpx;
    box-sizing: border-box;
    margin-top: 80rpx;
    .for_psd {
      color: $uni-color-primary;
      margin-top: 40rpx;
      width: 140rpx;
      text-align: center;
      margin: 40rpx auto;
    }
    .login_btn_n {
      width: 100%;
      height: 98rpx;
      background: $uni-color-primary;
      box-shadow: 0rpx 12rpx 24rpx 0rpx rgba(39, 155, 170, 0.2);
      display: flex;
      align-items: center;
      justify-content: center;
      font-weight: 600;
      font-size: 32rpx;
      color: #ffffff;
      border-radius: 50rpx;
    }
  }
  .deal_wrap {
    position: absolute;
    width: 100%;
    left: 0;
    text-align: center;
    bottom: 108rpx;
    .deal {
      color: $uni-color-primary;
    }
  }
}
.modal {
  padding: 32rpx;
}
</style>
h5/pages/driver/taskDetail.vue
@@ -41,11 +41,7 @@
        <view class="value">
          <view class="">0 å…¬é‡Œ</view>
          <view class="btn" @click="getLocation">
            <u-icon
              name="map"
              :color="$store.state.primaryColor"
              class="mr6"
            ></u-icon>
                        <image class="icon mr6" src="../../static/driver/position.png"></image>
            é‡æ–°å®šä½
          </view>
        </view>
@@ -209,6 +205,11 @@
          font-size: 28rpx;
          color: $uni-color-primary;
          display: flex;
                    align-items: center;
                    .icon{
                        width: 30rpx;
                        height: 30rpx;
                    }
        }
      }
    }
h5/pages/login/login.vue
@@ -19,7 +19,7 @@
      </view>
      <u-icon name="arrow-right" size="24" color="#979797" />
    </view>
    <view class="item">
    <view class="item" @click="driverLogin">
      <image class="avatar" src="@/static/ic_driver@2x.png" />
      <view class="content">
        <view class="name">我是物流车司机</view>
@@ -39,6 +39,18 @@
        url
      })
    },
        driverLogin() {
            const driverInfo = uni.getStorageSync('driverInfo') || {}
            if (driverInfo && driverInfo.memberId) {
              uni.navigateTo({
                url: '/pages/driver/index'
              })
            }else{
              uni.navigateTo({
                url: '/pages/driver/login'
              })
            }
        },
    staffLogin() {
      const userInfo = uni.getStorageSync('userInfo') || {}
      if (userInfo && userInfo.memberId) {
h5/pages/staff/task/visitorApprove.vue
@@ -199,8 +199,8 @@
      statusMap: {
        0: '待审批',
        1: '审批中',
        2: '审批通过',
        3: '审批未通过',
        2: '已通过',
        3: '已拒绝',
        4: '已取消',
        5: '他人或签',
        6: '他人拒绝',
h5/pages/staffLogin/forgetPsd.vue
@@ -40,14 +40,6 @@
    <view class="login_btn">
      <view class="login_btn_n" @click="onLogin">确认修改</view>
    </view>
    <!--  -->
    <u-popup
      :show="isShowProtocol"
      @close="isShowProtocol = false"
      mode="center"
    >
      <view class="modal">111</view>
    </u-popup>
  </view>
</template>
@@ -58,7 +50,6 @@
    return {
      form: {
      },
      isShowProtocol: false,
      countDown: 0
    }
  },
h5/static/driver/position.png