DOVER-GLOBAL\11047086 преди 10 месеца
родител
ревизия
1d7a309e60
променени са 16 файла, в които са добавени 791 реда и са изтрити 922 реда
  1. 163 0
      admin.ui.plus-master/package-lock.json
  2. 77 0
      admin.ui.plus-master/src/api/admin/productionManagement/QRBookDto.ts
  3. 7 1
      admin.ui.plus-master/src/api/admin/productionManagement/README.md
  4. 71 0
      admin.ui.plus-master/src/api/admin/productionManagement/qrBookApi.ts
  5. 2 2
      admin.ui.plus-master/src/components/my-upload-file/index.vue
  6. 2 1
      admin.ui.plus-master/src/stores/globalCacheStore.ts
  7. 141 0
      admin.ui.plus-master/src/views/admin/product/qrBook/components/qrbook-edit.vue
  8. 79 0
      admin.ui.plus-master/src/views/admin/product/qrBook/components/qrbook-upload.vue
  9. 238 0
      admin.ui.plus-master/src/views/admin/product/qrBook/index.vue
  10. 3 2
      admin.ui.plus-master/src/views/admin/visualization/KeyWatchMonitoring/index.vue
  11. 0 255
      admin.ui.plus-master/src/views/admin/visualization/deviceVision/indexs/left-bottom.vue
  12. 0 194
      admin.ui.plus-master/src/views/admin/visualization/deviceVision/indexs/right-bottom.vue
  13. 0 163
      admin.ui.plus-master/src/views/admin/visualization/deviceVision/indexs/right-center.vue
  14. 0 299
      admin.ui.plus-master/src/views/admin/visualization/deviceVision/indexs/right-top.vue
  15. 5 3
      admin.ui.plus-master/src/views/admin/visualization/deviceVision/test.vue
  16. 3 2
      admin.ui.plus-master/src/views/admin/visualization/fueldepotmonitoringdata/index.vue

+ 163 - 0
admin.ui.plus-master/package-lock.json

@@ -11,8 +11,11 @@
       "dependencies": {
         "@element-plus/icons": "^0.0.11",
         "@element-plus/icons-vue": "^2.1.0",
+<<<<<<< HEAD
         "@jiaminghi/data-view": "^2.10.0",
         "@kjgl77/datav-vue3": "^1.7.3",
+=======
+>>>>>>> origin/develop
         "@types/date-fns": "^2.6.0",
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor-for-vue": "^5.1.12",
@@ -21,7 +24,11 @@
         "countup.js": "^2.6.2",
         "cropperjs": "^1.5.13",
         "date-fns": "^3.6.0",
+<<<<<<< HEAD
         "echarts": "^5.5.0",
+=======
+        "echarts": "^5.4.2",
+>>>>>>> origin/develop
         "echarts-gl": "^2.0.9",
         "echarts-wordcloud": "^2.1.0",
         "element-plus": "^2.4.3",
@@ -214,7 +221,11 @@
     },
     "node_modules/@element-plus/icons": {
       "version": "0.0.11",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@element-plus/icons/-/icons-0.0.11.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@element-plus/icons/-/icons-0.0.11.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-iKQXSxXu131Ai+I9Ymtcof9WId7kaXvB1+WRfAfpQCW7UiAMYgdNDqb/u0hgTo2Yq3MwC4MWJnNuTBEpG8r7+A==",
       "deprecated": "Please use @element-plus/icons-vue instead."
     },
@@ -228,7 +239,11 @@
     },
     "node_modules/@esbuild/android-arm": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
       "cpu": [
         "arm"
@@ -244,7 +259,11 @@
     },
     "node_modules/@esbuild/android-arm64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
       "cpu": [
         "arm64"
@@ -260,7 +279,11 @@
     },
     "node_modules/@esbuild/android-x64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
       "cpu": [
         "x64"
@@ -276,7 +299,11 @@
     },
     "node_modules/@esbuild/darwin-arm64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
       "cpu": [
         "arm64"
@@ -292,7 +319,11 @@
     },
     "node_modules/@esbuild/darwin-x64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
       "cpu": [
         "x64"
@@ -308,7 +339,11 @@
     },
     "node_modules/@esbuild/freebsd-arm64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
       "cpu": [
         "arm64"
@@ -324,7 +359,11 @@
     },
     "node_modules/@esbuild/freebsd-x64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
       "cpu": [
         "x64"
@@ -340,7 +379,11 @@
     },
     "node_modules/@esbuild/linux-arm": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
       "cpu": [
         "arm"
@@ -356,7 +399,11 @@
     },
     "node_modules/@esbuild/linux-arm64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
       "cpu": [
         "arm64"
@@ -372,7 +419,11 @@
     },
     "node_modules/@esbuild/linux-ia32": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
       "cpu": [
         "ia32"
@@ -388,7 +439,11 @@
     },
     "node_modules/@esbuild/linux-loong64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
       "cpu": [
         "loong64"
@@ -404,7 +459,11 @@
     },
     "node_modules/@esbuild/linux-mips64el": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
       "cpu": [
         "mips64el"
@@ -420,7 +479,11 @@
     },
     "node_modules/@esbuild/linux-ppc64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
       "cpu": [
         "ppc64"
@@ -436,7 +499,11 @@
     },
     "node_modules/@esbuild/linux-riscv64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
       "cpu": [
         "riscv64"
@@ -452,7 +519,11 @@
     },
     "node_modules/@esbuild/linux-s390x": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
       "cpu": [
         "s390x"
@@ -468,7 +539,11 @@
     },
     "node_modules/@esbuild/linux-x64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
       "cpu": [
         "x64"
@@ -484,7 +559,11 @@
     },
     "node_modules/@esbuild/netbsd-x64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
       "cpu": [
         "x64"
@@ -500,7 +579,11 @@
     },
     "node_modules/@esbuild/openbsd-x64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
       "cpu": [
         "x64"
@@ -516,7 +599,11 @@
     },
     "node_modules/@esbuild/sunos-x64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
       "cpu": [
         "x64"
@@ -532,7 +619,11 @@
     },
     "node_modules/@esbuild/win32-arm64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
       "cpu": [
         "arm64"
@@ -548,7 +639,11 @@
     },
     "node_modules/@esbuild/win32-ia32": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
       "cpu": [
         "ia32"
@@ -564,7 +659,11 @@
     },
     "node_modules/@esbuild/win32-x64": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
       "cpu": [
         "x64"
@@ -1122,7 +1221,11 @@
     },
     "node_modules/@types/date-fns": {
       "version": "2.6.0",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/@types/date-fns/-/date-fns-2.6.0.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/@types/date-fns/-/date-fns-2.6.0.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-9DSw2ZRzV0Tmpa6PHHJbMcZn79HHus+BBBohcOaDzkK/G3zMjDUDYjJIWBFLbkh+1+/IOS0A59BpQfdr37hASg==",
       "deprecated": "This is a stub types definition for date-fns (https://github.com/date-fns/date-fns). date-fns provides its own type definitions, so you don't need @types/date-fns installed!",
       "dependencies": {
@@ -2280,7 +2383,11 @@
     },
     "node_modules/date-fns": {
       "version": "3.6.0",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-3.6.0.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
       "funding": {
         "type": "github",
@@ -2537,7 +2644,11 @@
     },
     "node_modules/esbuild": {
       "version": "0.18.20",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
       "dev": true,
       "hasInstallScript": true,
@@ -3054,7 +3165,11 @@
     },
     "node_modules/fs": {
       "version": "0.0.1-security",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/fs/-/fs-0.0.1-security.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==",
       "dev": true
     },
@@ -3065,7 +3180,11 @@
     },
     "node_modules/fs-extra": {
       "version": "11.2.0",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.2.0.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
       "dependencies": {
         "graceful-fs": "^4.2.0",
@@ -3083,7 +3202,11 @@
     },
     "node_modules/fsevents": {
       "version": "2.3.3",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
       "dev": true,
       "hasInstallScript": true,
@@ -3888,7 +4011,11 @@
     },
     "node_modules/nanoid": {
       "version": "3.3.7",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
       "funding": [
         {
@@ -4146,7 +4273,11 @@
     },
     "node_modules/path": {
       "version": "0.12.7",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/path/-/path-0.12.7.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
       "dependencies": {
         "process": "^0.11.1",
@@ -4226,7 +4357,11 @@
     },
     "node_modules/postcss": {
       "version": "8.4.38",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.38.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
       "funding": [
         {
@@ -4305,7 +4440,11 @@
     },
     "node_modules/process": {
       "version": "0.11.10",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
       "engines": {
         "node": ">= 0.6.0"
@@ -4461,7 +4600,11 @@
     },
     "node_modules/rollup": {
       "version": "3.29.4",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.29.4.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
       "dev": true,
       "bin": {
@@ -4707,7 +4850,11 @@
     },
     "node_modules/source-map-js": {
       "version": "1.2.0",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
       "engines": {
         "node": ">=0.10.0"
@@ -5087,7 +5234,11 @@
     },
     "node_modules/util": {
       "version": "0.10.4",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/util/-/util-0.10.4.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
       "dependencies": {
         "inherits": "2.0.3"
@@ -5100,7 +5251,11 @@
     },
     "node_modules/util/node_modules/inherits": {
       "version": "2.0.3",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="
     },
     "node_modules/uuid": {
@@ -5113,7 +5268,11 @@
     },
     "node_modules/vite": {
       "version": "4.5.3",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-4.5.3.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==",
       "dev": true,
       "dependencies": {
@@ -5182,7 +5341,11 @@
     },
     "node_modules/vite-plugin-compression/node_modules/fs-extra": {
       "version": "10.1.0",
+<<<<<<< HEAD
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+=======
+      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz",
+>>>>>>> origin/develop
       "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
       "dev": true,
       "dependencies": {

+ 77 - 0
admin.ui.plus-master/src/api/admin/productionManagement/QRBookDto.ts

@@ -0,0 +1,77 @@
+/**
+ *  * 生产管理 - 电子二维码说明书
+ *  数据对象的Dto
+ */
+
+/**
+ * 查询过滤
+ */
+export interface QRBookFilter {
+    /** 上传人 */ 
+    Author?: string
+    /** 说明书文件名 */
+    FileName?: string
+    /** 开始查询时间 */
+    StartTime?: string | null
+    /** 结束查询时间 */
+    EndTime?: string | null
+}
+
+/**
+ * 分页查询请求
+ */
+export interface QRBookPageSearchRequest {
+    /**
+   * 当前页标
+   * @format int32
+   */
+  CurrentPage?: number
+  /**
+   * 每页大小
+   * @format int32
+   */
+  PageSize?: number
+  Filter?: QRBookFilter
+}
+
+/**
+ * 表数据
+ */
+export interface QRBookTableInfo {
+    /** 文件信息id */
+    id: number
+    /** 文件guid */
+    guid:string
+    /** 说明书文件名 */
+    fileName:string
+    /** 说明书后缀名 */
+    extension:string
+    /** 状态 */
+    status: number
+    /** 上传人 */
+    author:string
+    /** 备注 */
+    remark:string
+    /**上传时间 */
+    uploadTime:string
+    /**修改时间 */
+    updateTime:string
+}
+
+/**
+ * 分页查询响应
+ */
+export interface QRBookPageSearchResponse {
+    total:number,
+    list: QRBookTableInfo[]
+}
+
+/**
+ * 上传/修改文件信息
+ */
+export interface QRBookFileInfoRequset {
+    fileName?:string
+    status:number
+    author?:string
+    remark?:string
+}

+ 7 - 1
admin.ui.plus-master/src/api/admin/productionManagement/README.md

@@ -36,4 +36,10 @@
 
 #### groupLogoKeyDto.ts
 
-	生产管理 - 团标密钥 数据对象的DTO
+	生产管理 - 团标密钥 数据对象的DTO
+
+#### qrBookApi.ts
+	生产管理 - 电子二维码说明书后端请求
+
+#### QRBookDto.ts
+	生产管理 - 电子二维码说明书 数据对象DTO

+ 71 - 0
admin.ui.plus-master/src/api/admin/productionManagement/qrBookApi.ts

@@ -0,0 +1,71 @@
+import { storeToRefs } from "pinia";
+import { QRBookFileInfoRequset } from "./QRBookDto";
+import {ContentType, HttpClient, RequestParams} from "/@/api/admin/http-client";
+import {AxiosResponse} from "axios";
+import { useUserInfo } from "/@/stores/userInfo";
+import { number } from "echarts";
+
+export class QRBookApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+    /**
+     * 分页查询
+     * @param data 
+     * @returns 
+     */
+    getPage = (query:any ,params: RequestParams = {}) : any  => 
+        this.request<AxiosResponse,any>({
+            path:'/api/app/qr-book/get-page',
+            method: 'GET',
+            query:query,
+            secure: true,
+            format: 'json',
+            ...params
+          })
+    
+
+    /**
+     * 上传/修改文件信息
+     * @param data 
+     * @returns 
+     */
+    uploadFile = (data:QRBookFileInfoRequset) => 
+        this.request<AxiosResponse,any>({
+            path: `/api/app/qr-book/upload`,
+            method: 'POST',
+            body: data,
+            secure: true,
+            type: ContentType.Json,
+            format: 'json',
+        })
+
+    /**
+     * 下载文件
+     * @param id 下载文件对应 id
+     * @param type 下载类型—— 0:文件;1:二维码
+     * @param FileName 下载文件名
+     */
+    donwloadFile = (id:string, type:number,fileName:string) => {
+        const { userInfos } = storeToRefs(useUserInfo());
+        const accessToken = userInfos.value.token
+        const token = `Bearer ${accessToken}`
+        var myHeaders = new Headers();
+        myHeaders.append("Authorization", token);
+
+        const requestOptions: RequestInit = {
+            method: 'GET',
+            headers: myHeaders,
+            redirect: 'follow', // 此处使用枚举值 'follow'
+        };
+
+        const fileUrl = import.meta.env.VITE_API_URL +'/api/app/qr-book/download?id='+id+'&type='+type; // 替换为实际文件URL
+        fetch(fileUrl,requestOptions)
+            .then(response => response.blob())
+            .then(blob => {
+                const link = document.createElement('a');
+                link.href = URL.createObjectURL(blob);
+                link.download = fileName;
+                link.click();
+            }).catch(error => {
+                console.error('下载失败:', error);
+            });
+    }
+}

+ 2 - 2
admin.ui.plus-master/src/components/my-upload-file/index.vue

@@ -69,8 +69,8 @@ const handleAvatarSuccess: UploadProps['onSuccess'] = (
 }
 
 const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
-  if (rawFile.size / 1024 / 1024 > 10) {
-    ElMessage.error('文件超过10MB!')
+  if (rawFile.size / 1024 / 1024 > 20) {
+    ElMessage.error('文件超过20MB!')
     return false
   }
   return true

+ 2 - 1
admin.ui.plus-master/src/stores/globalCacheStore.ts

@@ -18,7 +18,8 @@ const arr =
     'softwareType',
     'equipmentType',
     'softwarePackageStatus',
-    'oilEngineStatus'
+    'oilEngineStatus',
+    'qrBookFileStatus'
   ]
 
 export const useGlobalCacheStore = defineStore('globalCacheStore', {

+ 141 - 0
admin.ui.plus-master/src/views/admin/product/qrBook/components/qrbook-edit.vue

@@ -0,0 +1,141 @@
+<template>
+    <div class="admin-authorize-editInfo">
+      <el-dialog :title="formData.titleText" v-model="formData.isShowDialog" draggable width="769px">
+        <el-form :model="formData.editData"
+                 :rules="rules"
+                 ref="formRef"
+                 v-loading="formData.loading"
+                 size="default"
+                 label-width="80px">
+          <el-row :gutter="35">
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+              <el-form-item label="文件名" prop="fileName">
+                <el-input v-model="formData.editData.fileName" placeholder="上传文件会自动填写文件名" clearable></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+              <el-form-item label="上传人" prop="author">
+                <el-input v-model="formData.editData.author" placeholder="请输入上传人" clearable></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+            <el-form-item label="状态" prop="status">
+              <el-select  v-model="formData.editData.status" placeholder="请设置文件状态" >
+                <el-option v-for="(value, key) in statusType" :key="key" :label="value[1].name"  :value="Number(value[1].value)" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+              <el-form-item label="备注" prop="remark">
+                <el-input v-model="formData.editData.remark" placeholder="请输入备注" rows="6" clearable type="textarea"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <QRBookUpload v-model="formData.fileValue" ref="uploadFileRef" :file="{fileName:formData.editData.fileName}" @onUpload="onUpload"/>
+        </el-form>
+        <template #footer>
+          <span class="dialog-footer">
+            <el-button @click="onCancel" icon="ele-CircleClose" size="default">取 消</el-button>
+            <el-button type="primary" :icon="formData.editIcon" @click="onSubmit" size="default">{{formData.buttonText}}</el-button>
+          </span>
+        </template>
+      </el-dialog>
+    </div>
+  </template>
+  
+  <script setup lang="ts">
+  import {defineAsyncComponent, reactive, ref, watch} from "vue";
+  import {FormRules} from "element-plus";
+  import {useGlobalCacheStore} from "/@/stores/globalCacheStore";
+  import { QRBookFileInfoRequset, QRBookTableInfo } from "/@/api/admin/productionManagement/QRBookDto";
+  import { QRBookApi } from "/@/api/admin/productionManagement/qrBookApi";
+  import eventBus from "/@/utils/mitt";
+  
+  /** 引入组件 */
+  const QRBookUpload = defineAsyncComponent(() => import('./qrbook-upload.vue'))
+  
+  /** 获取全局缓存 */
+  const globalCacheStore = useGlobalCacheStore()
+  /** 获取文件状态 */
+  const statusType = ref(globalCacheStore.getGlobalStore().get('qrBookFileStatus'))
+  
+  /**数据对象 */
+  const formData = reactive({
+    loading: false,
+    titleText:'',
+    editIcon:'',
+    buttonText:'',
+    isShowDialog: false,
+    editData:{} as QRBookTableInfo,
+    fileValue: null
+  })
+
+  /**表单校验*/
+  const rules = reactive<FormRules>({
+    fileName: [
+      { required: true, message: '请输入文件名', trigger: 'blur' },
+    ]
+  })
+  
+  /**
+   * 表单对象
+   */
+  const formRef = ref()
+  
+  const openDialog = (val) => {
+    formData.isShowDialog = true
+    if(val){
+      formData.editData = JSON.parse(JSON.stringify(val))
+      formData.titleText = '更新说明书'
+      formData.buttonText = '更新'
+      formData.editIcon = 'ele-Refresh'
+    }else {
+      formData.editData = {} as QRBookTableInfo
+      formData.titleText = '添加说明书'
+      formData.buttonText = '添加'
+      formData.editData.status = 1
+      formData.editIcon = 'ele-CirclePlus'
+    }
+  }
+  
+  const onCancel = () => {
+    formData.editData = {} as QRBookTableInfo
+    formData.isShowDialog = false
+  }
+  
+  /***监听弹窗关   闭表单验证*/
+  watch(() => formData.isShowDialog,(newVal) => {
+    if(newVal) formRef.value?.resetFields()
+  })
+  
+  const onUpload = (val) => {
+    formData.editData.guid = val.guid
+    formData.editData.fileName = val.fileName + val.extension
+    formData.editData.extension = val.extension
+  }
+  
+  const uploadFileRef = ref(null);
+  
+  const onSubmit =  () => {
+    formRef.value.validate(async (valid: boolean) =>{
+      if(!valid) return
+  
+      formData.loading = true
+      let request = JSON.parse(JSON.stringify(formData.editData)) 
+      let res = await new QRBookApi().uploadFile(request as QRBookFileInfoRequset)
+      if(res?.data?.value) eventBus.emit('refreshView')
+
+      formData.editData = {} as QRBookTableInfo
+      formData.isShowDialog = false
+      formData.loading = false
+    })
+  }
+  
+  defineExpose({
+    openDialog,
+  })
+  </script>
+  <style scoped lang="scss">
+  
+  </style>
+  

+ 79 - 0
admin.ui.plus-master/src/views/admin/product/qrBook/components/qrbook-upload.vue

@@ -0,0 +1,79 @@
+<template>
+    <el-upload
+      class="upload-demo"
+      v-model:file-list="fileList"
+      drag
+      :headers="{ Authorization:  'Bearer ' + useUserInfoStores.getToken()}"
+      :action='baseUrl+"/api/app/qr-book/upload-file"'
+      :on-success="handleAvatarSuccess"
+      :before-upload="beforeAvatarUpload"
+    >
+      <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+      <div class="el-upload__text">
+        将文件拖到此处/<em>点击上传</em>
+      </div>
+      <template #tip>
+        <div class="el-upload__tip">
+          说明书上传
+        </div>
+      </template>
+    </el-upload>
+  </template>
+  
+  <script setup lang="ts">
+  import { UploadFilled} from "@element-plus/icons-vue";
+  import { useUserInfo } from '/@/stores/userInfo'
+  import {ElMessage, UploadProps, UploadUserFile} from "element-plus";
+  import { onMounted, ref, watch } from "vue";
+  
+  const useUserInfoStores = useUserInfo()
+  
+  const emits = defineEmits(['onUpload'])
+
+  const fileList = ref<UploadUserFile[]>([])
+
+  const baseUrl = import.meta.env.VITE_API_URL
+  
+  //接受父组件的传值
+  const props = defineProps({
+    file:{} as any
+  })
+  const file = ref(props.file)
+
+  // watch(() => props.file.fileUrl, (val)=> {
+  //   file.value.fileUrl = val
+  //   if(file.value.fileUrl) {
+  //     fileList.value = [{name:file.value.fileName,url:file.value.fileUrl} as UploadUserFile]
+  //   }else{
+  //     fileList.value = []
+  //   }
+  // })
+  watch(() => props.file.fileName, (val)=> {
+    file.value.fileName = val
+    if(val) fileList.value = [{name:val}]
+  })
+  
+  const handleAvatarSuccess: UploadProps['onSuccess'] = (
+    response,
+  ) => {
+    const res = response?.data
+    fileList.value = [{name:res.fileName+res.extension}]
+    file.value.guid = res.guid
+    file.value.fileName = res.fileName,
+    file.value.extension = res.extension
+    emits('onUpload',file.value)
+  }
+  
+  const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
+    if (rawFile.size / 1024 / 1024 > 20) {
+      ElMessage.error('文件超过20MB!')
+      return false
+    }
+    return true
+  }
+  
+  onMounted(()=>{
+    if(file.value.fileName) fileList.value = [{name:file.value.fileName} as UploadUserFile]
+  })
+  </script>
+  

+ 238 - 0
admin.ui.plus-master/src/views/admin/product/qrBook/index.vue

@@ -0,0 +1,238 @@
+<template>
+    <div class="layout-pd">
+        <el-row>
+            <!-- 操作 -->
+            <el-col :xs="24">
+                <el-card class="mt8" shadow="hover">
+                    <el-form :model="qrBookData.Filter" :inline="true" @submit.stop.prevent>
+                        <el-form-item prop="name" style="width: 100%;">
+                            <el-col :xs="15" :sm="6" :md="5" :lg="5" class="mb20">
+                                <el-form-item label="上传人">
+                                    <el-input v-model="qrBookData.Filter.Author" placeholder="单行输入" clearable></el-input>
+                                </el-form-item>
+                            </el-col>
+                        
+                            <el-col :xs="24" :sm="12" :md="8" :lg="8" class="mb20">
+                                <el-form-item label="说明书名称">
+                                    <el-input v-model="qrBookData.Filter.FileName" placeholder="单行输入" clearable></el-input>
+                                </el-form-item>
+                            </el-col>
+
+                            <el-col :xs="24" :md="8" :lg="8" :xl="4" class="mb20">
+                                <el-form-item label="选择时间">
+                                    <el-date-picker
+                                        v-model="qrBookData.time"
+                                        type="datetimerange"
+                                        value-format="YYYY-MM-DD HH:mm:ss"
+                                        range-separator="To"
+                                        start-placeholder="Start date"
+                                        end-placeholder="End date" />
+                                </el-form-item>
+                            </el-col>
+
+                            <el-col :xs="24" :md="8" :lg="8" :xl="4" class="mb20">
+                                <el-form-item>
+                                    <el-button type="primary" icon="ele-Search" @click="getData()">查询</el-button>
+                                    <el-button type="primary" plain icon="ele-RefreshRight" @click="clear()">清空</el-button>
+                                </el-form-item>
+                            </el-col>
+                        </el-form-item>
+                        
+                        <div class="my-flex my-flex-end">
+                            <el-button type="primary" icon="ele-CirclePlus" @click="uploadDialog">上传说明书</el-button>
+                        </div>
+                    </el-form>
+                </el-card>
+            </el-col>
+
+            <!-- 表格 -->
+             <el-col :xs="24">
+                <el-card style="height: 70vh;" class="my-fill mt8" shadow="hover">
+                    <el-table v-loading="qrBookData.loading" stripe :data="qrBookData.tableModel" row-key="id" style="width: 100%;">
+                        <el-table-column v-for="column in qrBookData.dynamicColumns" :key="column.prop" :prop="column.prop" :label="column.label">
+                            <template #default="{row}">
+                                <span :style="getColor(column.prop,row)">
+                                    {{getName(column.prop,row)}}
+                                </span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column label="操作" fixed="right" align="center" header-align="center" class="right-operation" width="140">
+                            <template #default="{row}">
+                                <el-link class="my-el-link mr12 ml12" type="primary" :underline="false" target="_blank" icon="ele-Edit" @click="editDialog(row)">编辑</el-link>
+                                <el-link class="my-el-link mr12 ml12"  type="primary" :underline="false" target="_blank" icon="ele-Download" @click="download(row,0)">下载文件</el-link>
+                                <el-link class="my-el-link mr12 ml12"  type="primary" :underline="false" target="_blank" icon="ele-Download" @click="download(row,1)">下载二维码</el-link>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <div class="my-flex my-flex-end" style="margin-top: 20px">
+                        <el-pagination
+                            v-model:currentPage="qrBookData.PageInput.CurrentPage"
+                            v-model:page-size="qrBookData.PageInput.PageSize"
+                            :total="qrBookData.total"
+                            :page-sizes="[10, 20, 50, 100]"
+                            small
+                            background
+                            @size-change="onSizeChange"
+                            @current-change="onCurrentChange"
+                            layout="total, sizes, prev, pager, next, jumper"/>
+                    </div>
+                    <template>
+                        <a ref="downloadLink" style="display: none;"></a>
+                    </template>
+                </el-card>
+             </el-col>
+        </el-row>
+        <FileEditDialog ref="fileEditRef"></FileEditDialog>
+    </div>
+    
+</template>
+
+<script setup lang="ts">
+import { defineAsyncComponent, onBeforeMount, onMounted, reactive, ref, watch } from "vue";
+import { QRBookFilter, QRBookPageSearchResponse } from "/@/api/admin/productionManagement/QRBookDto";
+import { pageInput } from "/@/api/admin/shareDto/shareDto";
+import { QRBookApi } from "/@/api/admin/productionManagement/qrBookApi";
+import eventBus from "/@/utils/mitt";
+import { useGlobalCacheStore } from "/@/stores/globalCacheStore";
+
+/**引入组件*/
+const FileEditDialog = defineAsyncComponent(() => import('./components/qrbook-edit.vue'))
+const fileEditRef = ref()
+
+/** 获取全局缓存 */
+const globalCacheStore = useGlobalCacheStore()
+  /** 获取文件状态 */
+  const statusType = ref(globalCacheStore.getGlobalStore().get('qrBookFileStatus'))
+
+const downloadLink = ref()
+
+const qrBookData = reactive({
+    // 是否加载
+    loading : false,
+    time:'',
+    // 查询条件
+    Filter:{
+        Author:"",
+        FileName:"",
+        StartTime: null,
+        EndTime: null
+    } as QRBookFilter,
+    // 表数据
+    tableModel:[] as QRBookPageSearchResponse[],
+    // 表头
+    dynamicColumns: [
+        { prop: 'fileName', label: '说明书文件名' },
+        { prop: 'author', label: '上传人' },
+        { prop: 'status', label: '状态' },
+        { prop: 'uploadTime', label: '上传时间' },
+        { prop: 'updateTime', label: '修改时间' },
+        { prop: 'remark', label: '备注' }
+    ],
+    /**分页标识 */
+    PageInput:{
+        CurrentPage: 1,
+        PageSize: 10,
+  } as pageInput,
+  /**分页总数 */
+  total: 0
+})
+
+//获取数据
+const getData = async () => {
+    qrBookData.loading = true
+    let res = await new QRBookApi().getPage({
+        ...qrBookData.PageInput,
+        "Filter.Author":qrBookData.Filter.Author,
+        "Filter.FileName":qrBookData.Filter.FileName,
+        "Filter.StartTime":qrBookData.Filter.StartTime,
+        "Filter.EndTime":qrBookData.Filter.EndTime
+    })
+    qrBookData.tableModel = res?.data?.list ?? []
+    qrBookData.total = res?.data?.total ?? 0
+    qrBookData.loading = false
+}
+
+//清除查询条件
+const clear = () => {
+    qrBookData.Filter = {
+        author:"",
+        fileName:"",
+        startTime: null,
+        endTime: null
+    } as QRBookFilter
+
+}
+
+//下载
+const download = async (row,type) => {
+    let fileName = ""
+    switch(type) {
+        case 0:
+            fileName = removeExtension(row.fileName) + row.extension
+            break
+        case 1:
+            fileName = removeExtension(row.fileName) + ".PNG"
+            break
+    }
+    let res = await new QRBookApi().donwloadFile(row.id,type,fileName)
+    
+}
+//去除文件名后缀
+const removeExtension = (filename:string) => {
+    const dotIndex = filename.lastIndexOf('.');  
+    if (dotIndex < 0) {  
+        // 如果没有找到'.',则返回原始文件名  
+        return filename;  
+    }  
+    // 返回去除最后一个'.'及其之后的所有字符的字符串  
+    return filename.slice(0, dotIndex);  
+}
+
+//打开上传文件弹窗
+const uploadDialog = () => {
+    fileEditRef.value.openDialog()
+}
+//打开编辑文件弹窗
+const editDialog = (row) => {
+    fileEditRef.value.openDialog(row)
+}
+
+const onSizeChange = () => {
+    getData()
+}
+
+const onCurrentChange = () => {
+    getData()
+}
+
+//获取颜色值
+const getColor = (val,row) => {
+    if(val === "status") return {color: statusType.value.get(String(row[val])).color}
+    return {}
+}
+
+//获取名称值
+const getName = (val,row) => {
+    if(val === "status") return statusType.value.get(String(row[val])).name
+    return row[val]
+}
+
+watch(() => qrBookData.time,(val) => {
+    if(val?.length === 0) return
+    qrBookData.Filter.StartTime = val?.[0].toString()
+    qrBookData.Filter.EndTime = val?.[1].toString()
+})
+
+onMounted(() => {
+    getData()
+    eventBus.off('refreshView')
+    eventBus.on('refreshView', async () => {
+        await getData()
+    })
+})
+
+onBeforeMount(() => {
+    eventBus.off('refreshView')
+})
+
+</script>

+ 3 - 2
admin.ui.plus-master/src/views/admin/visualization/KeyWatchMonitoring/index.vue

@@ -7,9 +7,9 @@
 -->
 <template>
    
-    <div class="iframe-container">  
+<!--     <div class="iframe-container">  
      <iframe :src="iframeUrl" frameborder="0" class="fill-container"></iframe>  
-   </div> 
+   </div>  -->
    </template>
  
  <script>
@@ -36,6 +36,7 @@
    computed: {},
    created() {},
    mounted() {
+    window.open('http://47.101.220.106:8012', '_blank');
      this.timeFn();
      this.cancelLoading();
    },

+ 0 - 255
admin.ui.plus-master/src/views/admin/visualization/deviceVision/indexs/left-bottom.vue

@@ -1,255 +0,0 @@
-<!--
- * @Author: daidai
- * @Date: 2022-03-01 09:43:37
- * @LastEditors: Please set LastEditors
- * @LastEditTime: 2022-09-09 11:40:22
- * @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
--->
-<template>
-    <div
-      v-if="pageflag"
-      class="left_boottom_wrap beautify-scroll-def"
-      :class="{ 'overflow-y-auto': !sbtxSwiperFlag }"
-    >
-      <component :is="components" :data="list" :class-option="defaultOption">
-        <ul class="left_boottom">
-          <li class="left_boottom_item" v-for="(item, i) in list" :key="i">
-            <span class="orderNum doudong">{{ i + 1 }}</span>
-            <div class="inner_right">
-              <div class="dibu"></div>
-              <div class="flex">
-                <div class="info">
-                  <span class="labels">设备ID:</span>
-                  <span class="contents zhuyao doudong wangguan">
-                    {{ item.gatewayno }}</span
-                  >
-                </div>
-                <div class="info">
-                  <span class="labels">时间:</span>
-                  <span class="contents " style="font-size: 12px">
-                    {{ item.createTime }}</span
-                  >
-                </div>
-              </div>
-  
-                <span
-                  class="types doudong"
-                  :class="{
-                    typeRed: item.onlineState == 0,
-                    typeGreen: item.onlineState == 1,
-                  }"
-                  >{{ item.onlineState == 1 ? "上线" : "下线" }}</span
-                >
-  
-              <div class="info addresswrap">
-                <span class="labels">地址:</span>
-                <span class="contents ciyao" style="font-size: 12px">
-                  {{ addressHandle(item) }}</span
-                >
-              </div>
-            </div>
-          </li>
-        </ul>
-      </component>
-    </div>
-  
-    <Reacquire v-else @onclick="getData" style="line-height: 200px" />
-  </template>
-  
-  <script>
-  import { currentGET } from "api";
-  import vueSeamlessScroll from "vue-seamless-scroll"; // vue2引入方式
-  import Kong from "../../components/kong.vue";
-  export default {
-    components: { vueSeamlessScroll, Kong },
-    data() {
-      return {
-        list: [],
-        pageflag: true,
-        components: vueSeamlessScroll,
-        defaultOption: {
-          ...this.$store.state.setting.defaultOption,
-          singleHeight: 240,
-          limitMoveNum: 5, 
-          step: 0,
-        },
-      };
-    },
-    computed: {
-      sbtxSwiperFlag() {
-        let sbtxSwiper = this.$store.state.setting.sbtxSwiper;
-        if (sbtxSwiper) {
-          this.components = vueSeamlessScroll;
-        } else {
-          this.components = Kong;
-        }
-        return sbtxSwiper;
-      },
-    },
-    created() {
-      
-    },
-  
-    mounted() {
-      this.getData();
-    },
-    methods: {
-      addressHandle(item) {
-        let name = item.provinceName;
-        if (item.cityName) {
-          name += "/" + item.cityName;
-          if (item.countyName) {
-            name += "/" + item.countyName;
-          }
-        }
-        return name;
-      },
-      getData() {
-        this.pageflag = true;
-        // this.pageflag =false
-        currentGET("big3", { limitNum: 20 }).then((res) => {
-          console.log("设备提醒", res);
-          if (res.success) {
-            this.countUserNumData = res.data;
-            this.list = res.data.list;
-            let timer = setTimeout(() => {
-              clearTimeout(timer);
-              this.defaultOption.step =
-                this.$store.state.setting.defaultOption.step;
-            }, this.$store.state.setting.defaultOption.waitTime);
-          } else {
-            this.pageflag = false;
-            this.$Message({
-              text: res.msg,
-              type: "warning",
-            });
-          }
-        });
-      },
-    },
-  };
-  </script>
-  <style lang='scss' scoped>
-  .left_boottom_wrap {
-    overflow: hidden;
-    width: 100%;
-    height: 100%;
-  }
-  
-  .doudong {
-    //  vertical-align:middle;
-    overflow: hidden;
-    -webkit-backface-visibility: hidden;
-    -moz-backface-visibility: hidden;
-    -ms-backface-visibility: hidden;
-    backface-visibility: hidden;
-  }
-  
-  .overflow-y-auto {
-    overflow-y: auto;
-  }
-  
-  .left_boottom {
-    width: 100%;
-    height: 100%;
-  
-    .left_boottom_item {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      padding: 8px;
-      font-size: 14px;
-      margin: 10px 0;
-      .orderNum {
-        margin: 0 16px 0 -20px;
-      }
-  
-      .info {
-        margin-right: 10px;
-        display: flex;
-        align-items: center;
-        color: #fff;
-  
-        .labels {
-          flex-shrink: 0;
-          font-size: 12px;
-          color: rgba(255, 255, 255, 0.6);
-        }
-  
-        .zhuyao {
-          color: $primary-color;
-          font-size: 15px;
-        }
-  
-        .ciyao {
-          color: rgba(255, 255, 255, 0.8);
-        }
-  
-        .warning {
-          color: #e6a23c;
-          font-size: 15px;
-        }
-      }
-  
-      .inner_right {
-        position: relative;
-        height: 100%;
-        width: 380px;
-        flex-shrink: 0;
-        line-height: 1;
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        flex-wrap: wrap;
-        .dibu {
-          position: absolute;
-          height: 2px;
-          width: 104%;
-          background-image: url("../../assets/img/zuo_xuxian.png");
-          bottom: -10px;
-          left: -2%;
-          background-size: cover;
-        }
-        .addresswrap {
-          width: 100%;
-          display: flex;
-          margin-top: 8px;
-        }
-      }
-  
-      .wangguan {
-        color: #1890ff;
-        font-weight: 900;
-        font-size: 15px;
-        width: 80px;
-        flex-shrink: 0;
-      }
-  
-  
-      .time {
-        font-size: 12px;
-        // color: rgba(211, 210, 210,.8);
-        color: #fff;
-      }
-  
-      .address {
-        font-size: 12px;
-        cursor: pointer;
-        // @include text-overflow(1);
-      }
-  
-      .types {
-        width: 30px;
-        flex-shrink: 0;
-      }
-  
-      .typeRed {
-        color: #fc1a1a;
-      }
-  
-      .typeGreen {
-        color: #29fc29;
-      }
-    }
-  }
-  </style>

+ 0 - 194
admin.ui.plus-master/src/views/admin/visualization/deviceVision/indexs/right-bottom.vue

@@ -1,194 +0,0 @@
-<!--
- * @Author: daidai
- * @Date: 2022-03-01 15:27:58
- * @LastEditors: Please set LastEditors
- * @LastEditTime: 2022-05-07 11:24:14
- * @FilePath: \web-pc\src\pages\big-screen\view\indexs\right-center.vue
--->
-<template>
-    <div v-if="pageflag" class="right_center_wrap beautify-scroll-def" :class="{ 'overflow-y-auto': !sbtxSwiperFlag }">
-      <component :is="components" :data="list" :class-option="defaultOption">
-        <ul class="right_center ">
-          <li class="right_center_item" v-for="(item, i) in list" :key="i">
-            <span class="orderNum">{{ i + 1 }}</span>
-            <div class="inner_right">
-              <div class="dibu"></div>
-              <div class="flex">
-                <div class="info">
-                  <span class="labels ">设备ID:</span>
-                  <span class="contents zhuyao"> {{ item.gatewayno }}</span>
-                </div>
-                <div class="info">
-                  <span class="labels">型号:</span>
-                  <span class="contents "> {{ item.terminalno }}</span>
-                </div>
-                <div class="info">
-                  <span class="labels">告警值:</span>
-                  <span class="contents warning"> {{ item.alertvalue | montionFilter }}</span>
-                </div>
-              </div>
-  
-  
-              <div class="flex">
-  
-                <div class="info">
-                  <span class="labels"> 地址:</span>
-                  <span class="contents ciyao" style="font-size:12px"> {{ item.provinceName }}/{{ item.cityName }}/{{ item.countyName }}</span>
-                </div>
-                <div class="info time">
-                  <span class="labels">时间:</span>
-                  <span class="contents" style="font-size:12px"> {{ item.createtime }}</span>
-                </div>
-  
-              </div>
-              <div class="flex">
-  
-                <div class="info">
-                  <span class="labels">报警内容:</span>
-                  <span class="contents ciyao" :class="{ warning: item.alertdetail }"> {{ item.alertdetail || '无'
-                  }}</span>
-                </div>
-              </div>
-            </div>
-          </li>
-        </ul>
-      </component>
-    </div>
-    <Reacquire v-else @onclick="getData" style="line-height:200px" />
-  
-  </template>
-  
-  <script>
-  import { currentGET } from 'api/modules'
-  import vueSeamlessScroll from 'vue-seamless-scroll'  // vue2引入方式
-  import Kong from '../../components/kong.vue'
-  export default {
-    components: { vueSeamlessScroll, Kong },
-  
-    data() {
-      return {
-        list: [],
-        pageflag: true,
-        defaultOption: {
-          ...this.$store.state.setting.defaultOption,
-          limitMoveNum: 3, 
-          singleHeight: 250, 
-          step:0,
-        }
-  
-      };
-    },
-    computed: {
-      sbtxSwiperFlag() {
-        let ssyjSwiper = this.$store.state.setting.ssyjSwiper
-        if (ssyjSwiper) {
-          this.components = vueSeamlessScroll
-        } else {
-          this.components = Kong
-        }
-        return ssyjSwiper
-      }
-    },
-    created() {
-      this.getData()
-    },
-  
-    mounted() { },
-    methods: {
-      getData() {
-        this.pageflag = true
-        // this.pageflag =false
-        currentGET('big5', { limitNum: 50 }).then(res => {
-          console.log('实时预警', res);
-          if (res.success) {
-            this.list = res.data.list
-            let timer = setTimeout(() => {
-                clearTimeout(timer)
-                this.defaultOption.step=this.$store.state.setting.defaultOption.step
-            }, this.$store.state.setting.defaultOption.waitTime);
-          } else {
-            this.pageflag = false
-            this.$Message.warning(res.msg)
-          }
-        })
-      },
-  
-    },
-  };
-  </script>
-  <style lang='scss' scoped>
-  .right_center {
-    width: 100%;
-    height: 100%;
-  
-    .right_center_item {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      height: auto;
-      padding: 10px;
-      font-size: 14px;
-      color: #fff;
-  
-      .orderNum {
-        margin: 0 20px 0 -20px;
-      }
-  
-  
-      .inner_right {
-        position: relative;
-        height: 100%;
-        width: 400px;
-        flex-shrink: 0;
-        line-height: 1.5;
-  
-        .dibu {
-          position: absolute;
-          height: 2px;
-          width: 104%;
-          background-image: url("../../assets/img/zuo_xuxian.png");
-          bottom: -12px;
-          left: -2%;
-          background-size: cover;
-        }
-      }
-  
-      .info {
-        margin-right: 10px;
-        display: flex;
-        align-items: center;
-  
-        .labels {
-          flex-shrink: 0;
-          font-size: 12px;
-          color: rgba(255, 255, 255, 0.6);
-        }
-  
-        .zhuyao {
-          color: $primary-color;
-          font-size: 15px;
-        }
-  
-        .ciyao {
-          color: rgba(255, 255, 255, 0.8);
-        }
-  
-        .warning {
-          color: #E6A23C;
-          font-size: 15px;
-        }
-      }
-  
-    }
-  }
-  
-  .right_center_wrap {
-    overflow: hidden;
-    width: 100%;
-    height: 250px;
-  }
-  
-  .overflow-y-auto {
-    overflow-y: auto;
-  }
-  </style>

+ 0 - 163
admin.ui.plus-master/src/views/admin/visualization/deviceVision/indexs/right-center.vue

@@ -1,163 +0,0 @@
-<!--
- * @Author: daidai
- * @Date: 2022-03-01 15:51:43
- * @LastEditors: Please set LastEditors
- * @LastEditTime: 2022-09-29 15:12:46
- * @FilePath: \web-pc\src\pages\big-screen\view\indexs\right-bottom.vue
--->
-<template>
-    <div class="right_bottom">
-      <dv-capsule-chart :config="config" style="width:100%;height:260px" />
-    </div>
-  </template>
-  
-  <script>
-  import { currentGET } from 'api/modules'
-  export default {
-    data() {
-      return {
-        gatewayno: '',
-        config: {
-          showValue: true,
-          unit: "次",
-          data: []
-        },
-  
-      };
-    },
-    created() {
-      this.getData()
-  
-    },
-    computed: {
-    },
-    mounted() { },
-    beforeDestroy() {
-      this.clearData()
-    },
-    methods: {
-      clearData() {
-        if (this.timer) {
-          clearInterval(this.timer)
-          this.timer = null
-        }
-      },
-      //轮询
-      switper() {
-        if (this.timer) {
-          return
-        }
-        let looper = (a) => {
-          this.getData()
-        };
-        this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
-      },
-      getData() {
-        this.pageflag = true
-        // this.pageflag =false
-        currentGET('big7', { gatewayno: this.gatewayno }).then(res => {
-  
-          if (!this.timer) {
-            console.log('报警排名', res);
-          }
-          if (res.success) {
-            this.config = {
-              ...this.config,
-              data: res.data
-            }
-            this.switper()
-          } else {
-            this.pageflag = false
-            this.srcList = []
-            this.$Message({
-              text: res.msg,
-              type: 'warning'
-            })
-          }
-        })
-      },
-    },
-  };
-  </script>
-  <style lang='scss' scoped>
-  .list_Wrap {
-    height: 100%;
-    overflow: hidden;
-    :deep(.kong)   {
-      width: auto;
-    }
-  }
-  
-  .sbtxSwiperclass {
-    .img_wrap {
-      overflow-x: auto;
-    }
-  
-  }
-  
-  .right_bottom {
-    box-sizing: border-box;
-    padding: 0 16px;
-  
-    .searchform {
-      height: 80px;
-      display: flex;
-      align-items: center;
-      justify-content: center;
-  
-      .searchform_item {
-        display: flex;
-        justify-content: center;
-        align-items: center;
-  
-        label {
-          margin-right: 10px;
-          color: rgba(255, 255, 255, 0.8);
-        }
-  
-        button {
-          margin-left: 30px;
-        }
-  
-        input {}
-      }
-    }
-  
-    .img_wrap {
-      display: flex;
-      // justify-content: space-around;
-      box-sizing: border-box;
-      padding: 0 0 20px;
-      // overflow-x: auto;
-  
-      li {
-        width: 105px;
-        height: 137px;
-        border-radius: 6px;
-        overflow: hidden;
-        cursor: pointer;
-        // background: #84ccc9;
-        // border: 1px solid #ffffff;
-        overflow: hidden;
-        flex-shrink: 0;
-        margin: 0 10px;
-  
-        img {
-          flex-shrink: 0;
-        }
-      }
-  
-  
-  
-  
-    }
-  
-    .noData {
-      width: 100%;
-      line-height: 100px;
-      text-align: center;
-      color: rgb(129, 128, 128);
-  
-    }
-  }
-  </style>

+ 0 - 299
admin.ui.plus-master/src/views/admin/visualization/deviceVision/indexs/right-top.vue

@@ -1,299 +0,0 @@
-<!--
- * @Author: daidai
- * @Date: 2022-03-01 14:13:04
- * @LastEditors: Please set LastEditors
- * @LastEditTime: 2022-09-27 15:04:49
- * @FilePath: \web-pc\src\pages\big-screen\view\indexs\right-top.vue
--->
-<template>
-    <Echart
-      id="rightTop"
-      :options="option"
-      class="right_top_inner"
-      v-if="pageflag"
-      ref="charts"
-    />
-    <Reacquire v-else @onclick="getData" style="line-height: 200px">
-      重新获取
-    </Reacquire>
-  </template>
-  
-  <script>
-  import { currentGET } from "api/modules";
-  import {graphic} from "echarts"
-  export default {
-    data() {
-      return {
-        option: {},
-        pageflag: false,
-        timer: null,
-      };
-    },
-    created() {
-     
-    },
-  
-    mounted() {
-       this.getData();
-    },
-    beforeDestroy() {
-      this.clearData();
-    },
-    methods: {
-      clearData() {
-        if (this.timer) {
-          clearInterval(this.timer);
-          this.timer = null;
-        }
-      },
-      getData() {
-        this.pageflag = true;
-        // this.pageflag =false
-        currentGET("big4").then((res) => {
-          if (!this.timer) {
-            console.log("报警次数", res);
-          }
-          if (res.success) {
-            this.countUserNumData = res.data;
-            this.$nextTick(() => {
-              this.init(res.data.dateList, res.data.numList, res.data.numList2),
-                this.switper();
-            });
-          } else {
-            this.pageflag = false;
-            this.$Message({
-              text: res.msg,
-              type: "warning",
-            });
-          }
-        });
-      },
-      //轮询
-      switper() {
-        if (this.timer) {
-          return;
-        }
-        let looper = (a) => {
-          this.getData();
-        };
-        this.timer = setInterval(
-          looper,
-          this.$store.state.setting.echartsAutoTime
-        );
-        let myChart = this.$refs.charts.chart;
-        myChart.on("mouseover", (params) => {
-          this.clearData();
-        });
-        myChart.on("mouseout", (params) => {
-          this.timer = setInterval(
-            looper,
-            this.$store.state.setting.echartsAutoTime
-          );
-        });
-      },
-      init(xData, yData, yData2) {
-        this.option = {
-          xAxis: {
-            type: "category",
-            data: xData,
-            boundaryGap: false, // 不留白,从原点开始
-            splitLine: {
-              show: true,
-              lineStyle: {
-                color: "rgba(31,99,163,.2)",
-              },
-            },
-            axisLine: {
-              // show:false,
-              lineStyle: {
-                color: "rgba(31,99,163,.1)",
-              },
-            },
-            axisLabel: {
-              color: "#7EB7FD",
-              fontWeight: "500",
-            },
-          },
-          yAxis: {
-            type: "value",
-            splitLine: {
-              show: true,
-              lineStyle: {
-                color: "rgba(31,99,163,.2)",
-              },
-            },
-            axisLine: {
-              lineStyle: {
-                color: "rgba(31,99,163,.1)",
-              },
-            },
-            axisLabel: {
-              color: "#7EB7FD",
-              fontWeight: "500",
-            },
-          },
-          tooltip: {
-            trigger: "axis",
-            backgroundColor: "rgba(0,0,0,.6)",
-            borderColor: "rgba(147, 235, 248, .8)",
-            textStyle: {
-              color: "#FFF",
-            },
-          },
-          grid: {
-            //布局
-            show: true,
-            left: "10px",
-            right: "30px",
-            bottom: "10px",
-            top: "28px",
-            containLabel: true,
-            borderColor: "#1F63A3",
-          },
-          series: [
-            {
-              data: yData,
-              type: "line",
-              smooth: true,
-              symbol: "none", //去除点
-              name: "报警1次数",
-              color: "rgba(252,144,16,.7)",
-              areaStyle: {
-                  //右,下,左,上
-                  color: new graphic.LinearGradient(
-                    0,
-                    0,
-                    0,
-                    1,
-                    [
-                      {
-                        offset: 0,
-                        color: "rgba(252,144,16,.7)",
-                      },
-                      {
-                        offset: 1,
-                        color: "rgba(252,144,16,.0)",
-                      },
-                    ],
-                    false
-                  ),
-              },
-              markPoint: {
-                data: [
-                  {
-                    name: "最大值",
-                    type: "max",
-                    valueDim: "y",
-                    symbol: "rect",
-                    symbolSize: [60, 26],
-                    symbolOffset: [0, -20],
-                    itemStyle: {
-                      color: "rgba(0,0,0,0)",
-                    },
-                    label: {
-                      color: "#FC9010",
-                      backgroundColor: "rgba(252,144,16,0.1)",
-                      borderRadius: 6,
-                      padding: [7, 14],
-                      borderWidth: 0.5,
-                      borderColor: "rgba(252,144,16,.5)",
-                      formatter: "报警1:{c}",
-                    },
-                  },
-                  {
-                    name: "最大值",
-                    type: "max",
-                    valueDim: "y",
-                    symbol: "circle",
-                    symbolSize: 6,
-                    itemStyle: {
-                      color: "#FC9010",
-                      shadowColor: "#FC9010",
-                      shadowBlur: 8,
-                    },
-                    label: {
-                      formatter: "",
-                    },
-                  },
-                ],
-              },
-            },
-            {
-              data: yData2,
-              type: "line",
-              smooth: true,
-              symbol: "none", //去除点
-              name: "报警2次数",
-              color: "rgba(9,202,243,.7)",
-              areaStyle: {
-                  //右,下,左,上
-                  color: new graphic.LinearGradient(
-                    0,
-                    0,
-                    0,
-                    1,
-                    [
-                      {
-                        offset: 0,
-                        color: "rgba(9,202,243,.7)",
-                      },
-                      {
-                        offset: 1,
-                        color: "rgba(9,202,243,.0)",
-                      },
-                    ],
-                    false
-                  ),
-              },
-              markPoint: {
-                data: [
-                  {
-                    name: "最大值",
-                    type: "max",
-                    valueDim: "y",
-                    symbol: "rect",
-                    symbolSize: [60, 26],
-                    symbolOffset: [0, -20],
-                    itemStyle: {
-                      color: "rgba(0,0,0,0)",
-                    },
-                    label: {
-                      color: "#09CAF3",
-                      backgroundColor: "rgba(9,202,243,0.1)",
-  
-                      borderRadius: 6,
-                      borderColor: "rgba(9,202,243,.5)",
-                      padding: [7, 14],
-                      formatter: "报警2:{c}",
-                      borderWidth: 0.5,
-                    },
-                  },
-                  {
-                    name: "最大值",
-                    type: "max",
-                    valueDim: "y",
-                    symbol: "circle",
-                    symbolSize: 6,
-                    itemStyle: {
-                      color: "#09CAF3",
-                      shadowColor: "#09CAF3",
-                      shadowBlur: 8,
-                    },
-                    label: {
-                      formatter: "",
-                    },
-                  },
-                ],
-              },
-            },
-          ],
-        };
-      },
-    },
-  };
-  </script>
-  <style lang='scss' scoped>
-  .right_top_inner {
-    margin-top: -8px;
-  }
-  </style>

+ 5 - 3
admin.ui.plus-master/src/views/admin/visualization/deviceVision/test.vue

@@ -7,9 +7,10 @@
 -->
 <template>
    
-   <div class="iframe-container">  
+<!--    <div class="iframe-container">  
     <iframe :src="iframeUrl" frameborder="0" class="fill-container"></iframe>  
-  </div> 
+    
+  </div>  -->
   </template>
 
 <script>
@@ -25,7 +26,7 @@ export default {
       dateYear: null,
       dateWeek: null,
       weekday: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
-      iframeUrl:"http://localhost:8080/#/index"
+      iframeUrl:"http://47.101.220.106:8013/"
     };
   },
   filters: {
@@ -36,6 +37,7 @@ export default {
   computed: {},
   created() {},
   mounted() {
+    window.open('http://47.101.220.106:8013', '_blank');
     this.timeFn();
     this.cancelLoading();
   },

+ 3 - 2
admin.ui.plus-master/src/views/admin/visualization/fueldepotmonitoringdata/index.vue

@@ -7,9 +7,9 @@
 -->
 <template>
    
-    <div class="iframe-container">  
+  <!--   <div class="iframe-container">  
      <iframe :src="iframeUrl" frameborder="0" class="fill-container"></iframe>  
-   </div> 
+   </div>  -->
    </template>
  
  <script>
@@ -36,6 +36,7 @@
    computed: {},
    created() {},
    mounted() {
+    window.open('http://47.101.220.106:8011', '_blank');
      this.timeFn();
      this.cancelLoading();
    },