coys 2 tahun lalu
induk
melakukan
986f6cd8cb

+ 247 - 71
package-lock.json

@@ -1953,49 +1953,6 @@
         "webpack-merge": "^5.7.3",
         "webpack-virtual-modules": "^0.4.2",
         "whatwg-fetch": "^3.6.2"
-      },
-      "dependencies": {
-        "@vue/vue-loader-v15": {
-          "version": "npm:vue-loader@15.10.1",
-          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.1.tgz",
-          "integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
-          "dev": true,
-          "requires": {
-            "@vue/component-compiler-utils": "^3.1.0",
-            "hash-sum": "^1.0.2",
-            "loader-utils": "^1.1.0",
-            "vue-hot-reload-api": "^2.3.0",
-            "vue-style-loader": "^4.1.0"
-          },
-          "dependencies": {
-            "hash-sum": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",
-              "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
-              "dev": true
-            }
-          }
-        },
-        "json5": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz",
-          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-          "dev": true,
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.2",
-          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz",
-          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
-          "dev": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        }
       }
     },
     "@vue/cli-shared-utils": {
@@ -2160,6 +2117,47 @@
         }
       }
     },
+    "@vue/vue-loader-v15": {
+      "version": "npm:vue-loader@15.10.2",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.2.tgz",
+      "integrity": "sha512-ndeSe/8KQc/nlA7TJ+OBhv2qalmj1s+uBs7yHDRFaAXscFTApBzY9F1jES3bautmgWjDlDct0fw8rPuySDLwxw==",
+      "dev": true,
+      "requires": {
+        "@vue/component-compiler-utils": "^3.1.0",
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.1.0",
+        "vue-hot-reload-api": "^2.3.0",
+        "vue-style-loader": "^4.1.0"
+      },
+      "dependencies": {
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+          "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
+          "dev": true
+        },
+        "json5": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        },
+        "loader-utils": {
+          "version": "1.4.2",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
+          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
     "@vue/web-component-wrapper": {
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
@@ -2536,15 +2534,6 @@
         "object.assign": "^4.1.0"
       }
     },
-    "babel-plugin-import": {
-      "version": "1.13.8",
-      "resolved": "https://registry.npmmirror.com/babel-plugin-import/-/babel-plugin-import-1.13.8.tgz",
-      "integrity": "sha512-36babpjra5m3gca44V6tSTomeBlPA7cHUynrE2WiQIm3rEGD9xy28MKsx5IdO45EbnpJY7Jrgd00C6Dwt/l/2Q==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-module-imports": "^7.0.0"
-      }
-    },
     "babel-plugin-polyfill-corejs2": {
       "version": "0.4.5",
       "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz",
@@ -2602,8 +2591,7 @@
     "big.js": {
       "version": "5.2.2",
       "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz",
-      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
-      "dev": true
+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
     },
     "binary-extensions": {
       "version": "2.2.0",
@@ -3107,6 +3095,14 @@
       "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
       "dev": true
     },
+    "copy-anything": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
+      "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
+      "requires": {
+        "is-what": "^3.14.1"
+      }
+    },
     "copy-webpack-plugin": {
       "version": "9.1.0",
       "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz",
@@ -3403,6 +3399,24 @@
       "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz",
       "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
     },
+    "date-fns": {
+      "version": "2.30.0",
+      "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+      "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+      "requires": {
+        "@babel/runtime": "^7.21.0"
+      }
+    },
+    "date-fns-tz": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.8.tgz",
+      "integrity": "sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ=="
+    },
+    "dayjs": {
+      "version": "1.11.9",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
+      "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
+    },
     "debug": {
       "version": "4.3.4",
       "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
@@ -3681,8 +3695,7 @@
     "emojis-list": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz",
-      "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-      "dev": true
+      "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
     },
     "encodeurl": {
       "version": "1.0.2",
@@ -3715,6 +3728,15 @@
       "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
       "dev": true
     },
+    "errno": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+      "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+      "optional": true,
+      "requires": {
+        "prr": "~1.0.1"
+      }
+    },
     "error-ex": {
       "version": "1.3.2",
       "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz",
@@ -4166,8 +4188,7 @@
     "graceful-fs": {
       "version": "4.2.11",
       "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
-      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
-      "dev": true
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
     },
     "gzip-size": {
       "version": "6.0.0",
@@ -4430,6 +4451,12 @@
       "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
       "dev": true
     },
+    "image-size": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+      "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
+      "optional": true
+    },
     "immutable": {
       "version": "4.3.1",
       "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.1.tgz",
@@ -4567,6 +4594,11 @@
       "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
       "dev": true
     },
+    "is-what": {
+      "version": "3.14.1",
+      "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
+      "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA=="
+    },
     "is-wsl": {
       "version": "2.2.0",
       "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz",
@@ -4724,6 +4756,81 @@
         "launch-editor": "^2.6.0"
       }
     },
+    "less": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz",
+      "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==",
+      "requires": {
+        "copy-anything": "^2.0.1",
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "make-dir": "^2.1.0",
+        "mime": "^1.4.1",
+        "needle": "^3.1.0",
+        "parse-node-version": "^1.0.1",
+        "source-map": "~0.6.0",
+        "tslib": "^2.3.0"
+      },
+      "dependencies": {
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+          "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+          "optional": true,
+          "requires": {
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
+          }
+        },
+        "semver": {
+          "version": "5.7.2",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+          "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+          "optional": true
+        }
+      }
+    },
+    "less-loader": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz",
+      "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==",
+      "requires": {
+        "clone": "^2.1.1",
+        "loader-utils": "^1.1.0",
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+          "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
+        },
+        "json5": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        },
+        "loader-utils": {
+          "version": "1.4.2",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
+          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^1.0.1"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="
+        }
+      }
+    },
     "lilconfig": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz",
@@ -4765,8 +4872,7 @@
     "lodash": {
       "version": "4.17.21",
       "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-      "dev": true
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
     },
     "lodash.debounce": {
       "version": "4.0.8",
@@ -5047,8 +5153,7 @@
     "mime": {
       "version": "1.6.0",
       "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
-      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
-      "dev": true
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
     },
     "mime-db": {
       "version": "1.52.0",
@@ -5137,8 +5242,7 @@
     "minimist": {
       "version": "1.2.8",
       "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
-      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-      "dev": true
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
     },
     "minipass": {
       "version": "3.3.6",
@@ -5181,8 +5285,7 @@
     "ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
     },
     "multicast-dns": {
       "version": "7.2.5",
@@ -5210,6 +5313,37 @@
       "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz",
       "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
     },
+    "needle": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz",
+      "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==",
+      "optional": true,
+      "requires": {
+        "debug": "^3.2.6",
+        "iconv-lite": "^0.6.3",
+        "sax": "^1.2.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+          "optional": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "iconv-lite": {
+          "version": "0.6.3",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+          "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+          "optional": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3.0.0"
+          }
+        }
+      }
+    },
     "negotiator": {
       "version": "0.6.3",
       "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
@@ -5540,6 +5674,11 @@
         "lines-and-columns": "^1.1.6"
       }
     },
+    "parse-node-version": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+      "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA=="
+    },
     "parse5": {
       "version": "5.1.1",
       "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz",
@@ -5626,6 +5765,12 @@
       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
       "dev": true
     },
+    "pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+      "optional": true
+    },
     "pkg-dir": {
       "version": "4.2.0",
       "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -6067,6 +6212,12 @@
       "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
       "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
     },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+      "optional": true
+    },
     "pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -6353,8 +6504,7 @@
     "safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "dev": true
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
     "sass": {
       "version": "1.64.2",
@@ -6376,6 +6526,12 @@
         "neo-async": "^2.6.2"
       }
     },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+      "optional": true
+    },
     "schema-utils": {
       "version": "2.7.1",
       "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz",
@@ -6964,8 +7120,7 @@
     "tslib": {
       "version": "2.6.1",
       "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.1.tgz",
-      "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
-      "dev": true
+      "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig=="
     },
     "type-fest": {
       "version": "0.6.0",
@@ -7066,6 +7221,17 @@
       "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
       "dev": true
     },
+    "v-calendar": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/v-calendar/-/v-calendar-2.4.1.tgz",
+      "integrity": "sha512-nhzOlHM2cinv+8jIcnAx+nTo63U40szv3Ig41uLMpGK1U5sApgCP6ggigprsnlMOM5VRq1G/1B8rNHkRrLbGjw==",
+      "requires": {
+        "core-js": "^3.15.2",
+        "date-fns": "^2.22.1",
+        "date-fns-tz": "^1.1.4",
+        "lodash": "^4.17.21"
+      }
+    },
     "validate-npm-package-license": {
       "version": "3.0.4",
       "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -7105,7 +7271,7 @@
     },
     "vue-hot-reload-api": {
       "version": "2.3.4",
-      "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
+      "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
       "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
       "dev": true
     },
@@ -7176,6 +7342,16 @@
         }
       }
     },
+    "vue-quick-calendar": {
+      "version": "1.0.92",
+      "resolved": "https://registry.npmjs.org/vue-quick-calendar/-/vue-quick-calendar-1.0.92.tgz",
+      "integrity": "sha512-VyqAXSo7aidOjwSTnC6vkfAnRzGHTXzDdfuP1pnZvuF3g47P/UDLX4nVkWzzRQibLsLl5kOXq3E+EhvAsbNsrg==",
+      "requires": {
+        "less": "^4.1.1",
+        "less-loader": "^4.1.0",
+        "vue": "^2.5.11"
+      }
+    },
     "vue-router": {
       "version": "3.6.5",
       "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz",

+ 2 - 0
src/api/public.js

@@ -1,5 +1,7 @@
 import request from '@/utils/request'
 
+
+
 // 登录方法
 export function login(data) {
   return request({

+ 67 - 0
src/api/toConsult.js

@@ -0,0 +1,67 @@
+// 调阅相关接口
+import request from '@/utils/request'
+
+// 获取调阅列表
+export function login(data) {
+  return request({
+    url: '/auth/login',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data
+  })
+}
+// 获取调阅列表
+export function selectListApp(data) {
+  return request({
+    url: '/core/task/selectListApp',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    data
+  })
+}
+
+//新增调阅接口NFC||图片接口
+export function registration(data) {
+  return request({
+    url: '/core/registration',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data
+  })
+}
+//获取任务详情列表
+export function registrationList(query) {
+  return request({
+    url: '/core/registration/list',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    params:query
+  })
+}
+//根据字典类型查询字典值接口
+export function getDict(query) {
+  return request({
+    url: '/system/dict/data/type',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    params:query
+  })
+}
+
+// 查询机构下拉树结构
+export function deptTreeList() {
+  return request({
+    url: '/system/dept/deptTree',
+    method: 'get'
+  })
+}

+ 0 - 0
src/assets/img/未标题-1.png → src/assets/img/NFCphone.png


TEMPAT SAMPAH
src/assets/img/icon/NFC扫描-01.png


TEMPAT SAMPAH
src/assets/img/icon/camera-fill.png


TEMPAT SAMPAH
src/assets/img/icon/camera.png


TEMPAT SAMPAH
src/assets/img/icon/edit-square.png


+ 25 - 0
src/assets/svg/NFC扫描.svg

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#333333;}
+</style>
+<title>无线电波</title>
+<g id="icon">
+	<g id="其他" transform="translate(-160.000000, 0.000000)">
+		<path id="形状结合" class="st0" d="M185.5,6.3c2.7,2.6,4.2,6.1,4.2,9.7c0,3.7-1.5,7.1-4.2,9.7c-0.4,0.4-1,0.4-1.4,0
+			c-0.4-0.4-0.4-1,0-1.3c2.3-2.2,3.6-5.2,3.6-8.4c0-3.2-1.3-6.2-3.6-8.4c-0.4-0.4-0.4-1,0-1.3C184.5,6,185.1,6,185.5,6.3z
+			 M167.8,6.3c0.4,0.4,0.4,1,0,1.3c-2.3,2.2-3.6,5.2-3.6,8.4c0,3.2,1.3,6.2,3.6,8.4c0.4,0.4,0.4,1,0,1.3c-0.4,0.4-1,0.4-1.4,0
+			c-2.7-2.6-4.2-6.1-4.2-9.7c0-3.7,1.5-7.1,4.2-9.7C166.9,6,167.5,6,167.8,6.3z M170.5,8.9c0.4,0.4,0.4,1,0,1.3
+			c-1.6,1.5-2.5,3.6-2.5,5.8c0,2.2,0.9,4.3,2.5,5.8c0.3,0.2,0.4,0.6,0.3,0.9c-0.1,0.3-0.4,0.6-0.7,0.7c-0.3,0.1-0.7,0-1-0.3
+			c-2-1.9-3.1-4.4-3.1-7.1c0-2.7,1.1-5.2,3.1-7.1C169.5,8.5,170.1,8.5,170.5,8.9z M182.9,8.9c2,1.9,3.1,4.4,3.1,7.1
+			c0,2.7-1.1,5.2-3.1,7.1c-0.4,0.4-1,0.4-1.4,0c-0.4-0.4-0.4-1,0-1.3c1.6-1.5,2.5-3.6,2.5-5.8c0-2.2-0.9-4.3-2.5-5.8
+			c-0.3-0.2-0.4-0.6-0.3-0.9c0.1-0.3,0.4-0.6,0.7-0.7C182.2,8.5,182.6,8.6,182.9,8.9z M173.2,11.5c0.4,0.4,0.4,1,0,1.3
+			c-0.9,0.8-1.4,2-1.4,3.2c0,1.2,0.5,2.4,1.4,3.2c0.4,0.4,0.4,1,0,1.3s-1,0.4-1.4,0c-1.2-1.2-2-2.8-1.9-4.5c0-1.7,0.7-3.3,1.9-4.5
+			C172.2,11.1,172.8,11.1,173.2,11.5z M180.2,11.5c1.2,1.2,2,2.8,1.9,4.5c0,1.7-0.7,3.3-1.9,4.5c-0.4,0.4-1,0.4-1.4,0s-0.4-1,0-1.3
+			c0.9-0.8,1.4-2,1.4-3.2c0-1.2-0.5-2.4-1.4-3.2c-0.3-0.2-0.4-0.6-0.3-0.9c0.1-0.3,0.4-0.6,0.7-0.7
+			C179.6,11.1,179.9,11.2,180.2,11.5z M178,16.1c0,1.1-0.9,2-2,2s-2-0.9-2-2s0.9-2,2-2S178,15,178,16.1z"/>
+	</g>
+</g>
+</svg>

+ 12 - 0
src/assets/svg/camera.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg fill="#409bf2" width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 63.1 (92452) - https://sketch.com -->
+    <title>camera</title>
+    <desc>Created with Sketch.</desc>
+    <g id="SVG" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="camera" fill="#333333" fill-rule="nonzero">
+            <rect id="矩形" opacity="0" x="0" y="0" width="32" height="32"></rect>
+            <path d="M27,7.75 L22.75,7.75 L21.7375,4.9125 C21.59375,4.515625 21.21875,4.25 20.79375,4.25 L11.20625,4.25 C10.784375,4.25 10.40625,4.515625 10.265625,4.9125 L9.25,7.75 L5,7.75 C3.61875,7.75 2.5,8.86875 2.5,10.25 L2.5,24.5 C2.5,25.88125 3.61875,27 5,27 L27,27 C28.38125,27 29.5,25.88125 29.5,24.5 L29.5,10.25 C29.5,8.86875 28.38125,7.75 27,7.75 Z M27.25,24.5 C27.25,24.6375 27.1375,24.75 27,24.75 L5,24.75 C4.8625,24.75 4.75,24.6375 4.75,24.5 L4.75,10.25 C4.75,10.1125 4.8625,10 5,10 L10.834375,10 L11.36875,8.50625 L12.084375,6.5 L19.9125,6.5 L20.628125,8.50625 L21.1625,10 L27,10 C27.1375,10 27.25,10.1125 27.25,10.25 L27.25,24.5 Z M16,12 C13.2375,12 11,14.2375 11,17 C11,19.7625 13.2375,22 16,22 C18.7625,22 21,19.7625 21,17 C21,14.2375 18.7625,12 16,12 Z M16,20 C14.34375,20 13,18.65625 13,17 C13,15.34375 14.34375,14 16,14 C17.65625,14 19,15.34375 19,17 C19,18.65625 17.65625,20 16,20 Z" id="形状"></path>
+        </g>
+    </g>
+</svg>

+ 223 - 0
src/components/BomttomSelect/index.vue

@@ -0,0 +1,223 @@
+<template>
+    <div class="select-container">
+      <div class="input-wrapper">
+        <span class="input-prefix">{{ prefix }}</span>
+        <input
+          v-model="selectedValue"
+          type="text"
+          class="input"
+          :placeholder="placeholder"
+          :readonly="readonly"
+          @click="handleClick(selectedValue)"
+        >
+        <span class="input-suffix">
+          <i v-if='showOptions' class="iconfont qywx-xiala1"/>
+          <i v-else class="iconfont qywx-xiala"/>
+        </span>
+      </div>
+      <div
+        v-if="showOptions"
+        class="options-container"
+      >
+        <ul class="options">
+          <li
+            v-for="(option, index) in options"
+            :key="index"
+            class="option"
+            :class="{'active': option[valueProp] === selectedValue, 'disabled': option.isDisabled,'hidden': !option.visible}"
+            @click="handleSelect(option)"
+          >
+            <span> {{ option[labelProp] }}</span>
+            <span v-if="option[valueProp] === selectedValue">
+              <i class="iconfont qywx-a-xuanzhonglansexuanzhong"/>
+            </span>
+          </li>
+          <li
+            v-if="filteredOptions.length === 0 && selectedValue !== ''"
+            class="option disabled"
+          >
+            无搜索结果
+          </li>
+        </ul>
+      </div>
+    </div>
+  </template>
+  
+  <script>
+  export default {
+    name: 'Select',
+    props: {
+      prefix: {
+        type: String,
+        default: ''
+      },
+      selectedValue: {
+        type: [String, Number],
+        default: ''
+      },
+      options: {
+        type: Array,
+        required: true
+      },
+      readonly: {
+        type: Boolean,
+        default: false
+      },
+      placeholder: {
+        type: String,
+        default: '请选择'
+      },
+      labelProp: {
+        type: String,
+        default: 'label'
+      },
+      valueProp: {
+        type: String,
+        default: 'value'
+      }
+    },
+    model: {
+      prop: 'selectedValue',
+      event: 'change'
+    },
+    data() {
+      return {
+        showOptions: false,
+      }
+    },
+    computed: {
+      filteredOptions() {
+        const searchValue = this.selectedValue.trim().toLowerCase();
+        const labelProp = this.labelProp;
+        return this.options.map(option => {
+          option.visible = option[labelProp].toLowerCase().includes(searchValue)
+          return option;
+        })
+      }
+    },
+    methods: {
+      handleClick(selectedValue) {
+        this.selectedValue = '';
+        if(!selectedValue) {
+          this.$emit('change', selectedValue);
+        }
+        this.showOptions = !this.showOptions;
+        if (this.showOptions) {
+          const selectedOption = this.options.find(option => option[this.labelProp] === selectedValue);
+          if (selectedOption && !selectedOption.isDisabled) {
+            // 更新dom
+            this.$nextTick(() => {
+              // 如果有选中的选项,则将其高亮
+              const optionIndex = this.options.indexOf(selectedOption);
+              const optionsList = this.$el.querySelector('.options');
+              const selectedOptionEl = optionsList.children[optionIndex];
+              selectedOptionEl.classList.add('active');
+            })
+  
+          }
+        }
+      },
+      handleSelect(option) {
+        if(!option.isDisabled){
+          this.showOptions = false;
+          this.$emit('change', option);
+        }
+  
+      }
+    }
+  }
+  </script>
+  <style lang="scss" scoped>
+  .select-container {
+      position: relative;
+  }
+  
+  .input-wrapper {
+      position: relative;
+      display: flex;
+      align-items: center;
+  }
+  
+  .input-prefix {
+      padding: 0 5px;
+      color: #999;
+      font-size: 14px;
+  }
+  
+  .input {
+      flex: 1;
+      height: 40px;
+      line-height: 40px;
+      padding: 0 10px;
+      //border: 1px solid #dcdfe6;
+      border: none;
+      border-radius: 4px;
+      font-size: 14px;
+  }
+  
+  .input-suffix {
+      display: flex;
+      align-items: center;
+      padding: 0 10px;
+      color: #999;
+      font-size: 14px;
+      cursor: pointer;
+  }
+  
+  .options-container {
+      position: absolute;
+      top: 45px;
+      //left: 0;
+      //right: 0;
+      background-color: #fff;
+      box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.15);
+      z-index: 99;
+      //width: 100%;
+      //margin: 4px 37px 4px 39px;
+      flex: 1;
+      width: -webkit-fill-available;
+      height: 120px;
+      overflow: auto;
+  }
+  
+  .options {
+      list-style: none;
+      margin: 0;
+      padding: 0;
+  }
+  .hidden {
+    display: none;
+  }
+  .option {
+      height: 40px;
+      line-height: 40px;
+      padding: 0 10px;
+      cursor: pointer;
+      color: #000000;
+  }
+  
+  .option:hover {
+      background-color: #f5f5f5;
+  }
+  
+  .active {
+      background-color: #eaf2ff;
+      color: #0075f9;
+  }
+  .disabled {
+      color: #c6c7c9;
+  }
+  .iconfont {
+      font-size: 16px;
+  }
+  
+  .icon-xiala:before {
+      content: '\e645';
+  }
+  
+  .icon-xuanzhong:before {
+      content: '\e648';
+  }
+  </style>
+  
+  

+ 2 - 0
src/main.js

@@ -22,7 +22,9 @@ import 'amfe-flexible'
 import './filters'
 Vue.config.productionTip = false
 import VCalendar from 'v-calendar';
+import globals from "@/utils/global.js"//全局混入
 Vue.use(Vant);
+Vue.use(globals);
 Vue.use(VueQuickCalendar);
 Vue.use(VCalendar,{
   componentPrefix: 'vc',  // Use <vc-calendar /> instead of <v-calendar />

+ 20 - 1
src/router/router.config.js

@@ -16,6 +16,18 @@ export let routers = [
     },
   },
   {
+    path: '/consultInfo/:id',
+    name: 'consultInfo',
+    component: () => import('@/views/menu/monitoringCall/components/consultInfo'),
+    meta: { title: '监控调阅', keepAlive: false }
+  },
+  {
+    path: '/addInfo',
+    name: 'addInfo',
+    component: () => import('@/views/menu/monitoringCall/components/addInfo'),
+    meta: { title: '添加监控调阅', keepAlive: false }
+  },
+  {
     path: '/home',
     component: () => import('@/components/layouts/index'),
     redirect:'/works',
@@ -59,7 +71,14 @@ export let routers = [
         name: 'lvzhi',
         component: () => import('@/views/menu/LZRegister/index'),
         meta: { title: '履职登记', keepAlive: false }
-      }
+      },
+      {
+        path: '/monitoringCall',
+        name: 'monitoringCall',
+        component: () => import('@/views/menu/monitoringCall/index'),
+        meta: { title: '监控调阅', keepAlive: false }
+      },
+      
     ],
   },
 

+ 25 - 0
src/utils/global.js

@@ -0,0 +1,25 @@
+import {globalMixins} from "./globalMixins" 
+
+const globals = {
+    install: function (Vue, option) {
+      // 全局混入
+      Vue.mixin(globalMixins);
+      
+  
+    //   // 全局过滤
+    //   Object.keys(filters).forEach((key) => {
+    //     Vue.filter(key, filters[key]);
+    //   });
+  
+    //   // 全局指令
+    //   Object.keys(directives).forEach((key) => {
+    //     Vue.directive(key, directives[key]);
+    //   });
+  
+    //   // 全局属性和方法
+    //   Object.keys(propertiesAndMethods).forEach((key) => {
+    //     Vue.prototype[key] = propertiesAndMethods[key];
+    //   });
+    },
+  }
+  export default globals

+ 23 - 0
src/utils/globalMixins.js

@@ -0,0 +1,23 @@
+import { getDict } from '@/api/toConsult.js'
+
+export const globalMixins = {
+  data() {
+    return {}
+  },
+  methods: {
+    //根据字典类型获取字典值
+    getDictHandler(dictType,callBack) {
+      getDict({ dictType: dictType }).then(res => {
+        let { code, data, msg } = res
+        if (code == 200) {
+            callBack(data) 
+        }
+      })
+    }
+    //组件使用方法参考下边注释
+    // this.getDictHandler('core_check_type',res=>{
+    //     console.log(res);
+    // })
+  }
+ 
+}

+ 4 - 0
src/views/home/menu.vue

@@ -48,6 +48,10 @@ export default {
               menu:'履职登记',
             },
             {
+              menu:'监控调阅',
+              path:'/monitoringCall'
+            },
+            {
               menu:'视频调阅',
             },
             {

+ 205 - 0
src/views/menu/monitoringCall/components/addInfo.vue

@@ -0,0 +1,205 @@
+<template>
+  <div>
+    <NavBar />
+    <div class="bigBox">
+      <van-row>
+        <van-col span="24">
+          <!-- <van-cell title="任务名称" value="每周监控调阅(0501~0507)" /> -->
+          <div class="textTitle">任务名称:每周监控调阅(0501~0507)</div>
+        </van-col>
+        <van-col span="24">
+          <!-- <van-cell title="调阅开始时间" value="2023-05-05 10:12" /> -->
+          <div class="text">调阅开始时间:2023-05-05 10:12</div>
+        </van-col>
+      </van-row>
+
+      <!-- 主机选择 -->
+      <van-row>
+        <van-col span="24">
+          <van-field v-model="fieldValue" is-link readonly label="监控主机" placeholder="" @click="showStatus = true" />
+          <van-popup v-model="showStatus" round position="bottom">
+            <van-picker
+              title="监控主机"
+              show-toolbar
+              :columns="columns"
+              @confirm="onConfirm"
+              @cancel="onCancel"
+              @change="onChange"
+            /> </van-popup
+        ></van-col>
+      </van-row>
+      <!-- 视频通道 -->
+      <van-row>
+        <van-col span="24">
+          <van-field v-model="fieldValue" is-link readonly label="视频通道" placeholder="" @click="showStatus = true" />
+          <van-popup v-model="showStatus" round position="bottom">
+            <van-picker
+              title="视频通道"
+              show-toolbar
+              :columns="columns"
+              @confirm="onConfirm"
+              @cancel="onCancel"
+              @change="onChange"
+            /> </van-popup
+        ></van-col>
+      </van-row>
+      <van-row>
+        <van-col span="24">
+          <van-notice-bar color="#1989fa" background="#ecf9ff" left-icon="info-o">
+            请选择实际调阅项目进行填写,不需要编辑所有项目
+          </van-notice-bar>
+        </van-col>
+      </van-row>
+
+      <div>
+        <!-- 主体选择项 -->
+        <van-collapse v-model="activeNames" :is-link="false">
+          <van-collapse-item name="1">
+            <template #title>
+              <div>
+                <van-checkbox v-model="checked" shape="square">复选框</van-checkbox>
+              </div>
+            </template>
+
+            <van-row>
+              <van-col span="24">
+                <van-dropdown-menu>
+                  <van-dropdown-item v-model="value1" :options="option1" />
+                </van-dropdown-menu>
+              </van-col>
+            </van-row>
+            <van-row>
+              <van-col span="24">
+                <van-field
+                  v-model="message"
+                  rows="2"
+                  autosize
+                  label="异常说明"
+                  type="textarea"
+                  placeholder="请输入异常说明"
+                  show-word-limit
+                />
+              </van-col>
+            </van-row>
+          </van-collapse-item>
+          <van-collapse-item name="2">
+            <template #title>
+              <div>
+                <van-checkbox v-model="checked1" shape="square">复选框</van-checkbox>
+              </div>
+            </template>
+
+            <van-row>
+              <van-col span="24">
+                <van-dropdown-menu>
+                  <van-dropdown-item v-model="value1" :options="option1" />
+                </van-dropdown-menu>
+              </van-col>
+            </van-row>
+            <van-row>
+              <van-col span="24">
+                <van-field
+                    v-show="value1==0"
+                  v-model="message"
+                  rows="2"
+                  autosize
+                  label="异常说明"
+                  type="textarea"
+                  placeholder="请输入异常说明"
+                  show-word-limit
+                />
+              </van-col>
+            </van-row>
+          </van-collapse-item>
+        </van-collapse>
+      </div>
+      <!-- 底部按钮 -->
+      <div class="bottomClass">
+        <van-row>
+          <van-col span="24">
+            <van-button type="info">添加</van-button>
+          </van-col>
+        </van-row>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import NavBar from '@/components/NavBar'
+// 主机列表组件
+import MonitoingList from './monitoringList.vue'
+import { Col, Row, Dialog, Icon, Picker } from 'vant'
+
+export default {
+  data() {
+    return {
+      columns: ['全部', '已调阅', '调阅中', '待调阅'],
+      showStatus: false,
+      checked: false,
+      checked1: false,
+      fieldValue: '',
+      value1: 0,
+      option1: [
+        { text: '异常', value: 0 },
+        { text: '正常', value: 1 }
+      ],
+      activeNames: ['']
+    }
+  },
+  components: {
+    NavBar,
+    Dialog,
+    Icon,
+    Picker,
+    Col,
+    Row,
+    MonitoingList
+  },
+  computed: {
+    monitor() {
+      return 'monitor'
+    }
+  },
+  methods: {
+    onConfirm(value, index) {
+      Toast(`当前值:${value}, 当前索引:${index}`)
+    },
+    onChange(picker, value, index) {
+      Toast(`当前值:${value}, 当前索引:${index}`)
+    },
+    onCancel() {
+      Toast('取消')
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.bigBox {
+  height: calc(100vh - 260px);
+  overflow: scroll;
+}
+.van-button {
+  width: 100%;
+  margin-top: 10px;
+  border-radius: 10px;
+}
+.bottomClass {
+  position: fixed;
+  width: 100%;
+  bottom: 0%;
+}
+.condition {
+  font-size: 50px !important;
+  line-height: 50px;
+  color: #1989fa;
+}
+.textTitle {
+  font-size: 40px;
+  font-weight: bold;
+  padding: 20px;
+}
+.text {
+  padding: 20px;
+  font-size: 26px;
+}
+</style>

+ 115 - 0
src/views/menu/monitoringCall/components/consultInfo.vue

@@ -0,0 +1,115 @@
+<template>
+  <div>
+    <NavBar />
+    <div class="bigBox">
+      <van-row>
+        <van-col span="24">
+          <div class="textTitle">任务名称:{{ taskData?.taskName }}</div>
+        </van-col>
+        <van-col span="24">
+          <div class="text">调阅开始时间:{{ taskData?.taskStartTime }}</div>
+        </van-col>
+      </van-row>
+      <div v-if="taskData?.coreMonitoringTaskRegistrationMonitorVOList">
+        <!-- 调阅列表 -->
+        <div class="topBox" v-for="item in taskData.coreMonitoringTaskRegistrationMonitorVOList" :key="item.id">
+          <!-- //主机列表组件 -->
+          <MonitoingList :list="item"></MonitoingList>
+        </div>
+      </div>
+
+      <!-- 底部按钮 -->
+      <div class="bottomClass">
+        <van-row>
+          <van-col span="24">
+            <van-button type="info" @click="addInfoHandler">添加调阅记录</van-button>
+          </van-col>
+        </van-row>
+        <van-row>
+          <van-col span="24">
+            <van-button type="info">结束调阅</van-button>
+          </van-col>
+        </van-row>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import NavBar from '@/components/NavBar'
+// 主机列表组件
+import MonitoingList from './monitoringList.vue'
+import { Col, Row, Dialog, Icon, Picker } from 'vant'
+import { registrationList } from '@/api/toConsult.js'
+
+export default {
+  data() {
+    return {
+      taskData: {}
+    }
+  },
+  components: {
+    NavBar,
+    Dialog,
+    Icon,
+    Picker,
+    Col,
+    Row,
+    MonitoingList
+  },
+
+  created() {
+    // this.init()
+    console.log(this);
+    
+    this.getDictHandler('core_check_type',res=>{
+      console.log(res);
+    })
+  },
+  methods: {
+    //项目初始化获取数据
+    init() {
+      //获取组织机构数据
+      registrationList({ taskId: this.$route.params.id }).then(res => {
+        let { code, data, msg } = res
+        if (code == 200) {
+          this.taskData = data
+        }
+      })
+    },
+    addInfoHandler() {
+      this.$router.push('/addInfo')
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.bigBox {
+  height: calc(100vh - 260px);
+  overflow: scroll;
+  // height: 100vh;
+  // background-color: #d5d8d8;
+  .textTitle {
+    font-size: 40px;
+    font-weight: bold;
+    padding: 20px;
+  }
+  .text {
+    padding: 20px;
+    font-size: 26px;
+  }
+  .topBox {
+    margin-bottom: 10px;
+    margin: 20px;
+  }
+  .bottomClass {
+    position: fixed;
+    width: 100%;
+    bottom: 0%;
+  }
+  .van-button {
+    width: 100%;
+    margin-top: 10px;
+    border-radius: 10px;
+  }
+}
+</style>

+ 91 - 0
src/views/menu/monitoringCall/components/monitoringList.vue

@@ -0,0 +1,91 @@
+<template>
+  <div>
+    <div class="topBox">
+      <div>
+        <img class="img" @click="editHandler" src="../../../../assets/img/icon/edit-square.png" alt="" />
+      </div>
+      <div class="title">监控主机:{{ list?.hostName }}</div>
+      <div class="title">视频通道:{{ list?.videoChannelName }}</div>
+      <van-row class="List titleList">
+        <van-col class="vancol" span="6">项目</van-col>
+        <van-col class="vancol" span="6">检查情况</van-col>
+        <van-col class="vancol" span="12">异常说明</van-col>
+      </van-row>
+      <van-row class="List" v-for="item in list.coreMonitoringTaskMonitorInfoList" :key="item.id">
+        <van-col class="vancol" span="6">{{ item.project }}</van-col>
+        <van-col class="vancol" span="6"><span :style="{'color':item.situation == 1 ? '#d97b7e':'#7de46f'}">{{ item.situation == 1 ? '异常' : '正常' }}</span></van-col>
+        <van-col class="vancol" span="12">{{ item.abnormalIllustrate }}</van-col>
+      </van-row>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  name: 'SocAppMonitoringList',
+  props: {
+    list: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    }
+  },
+  data() {
+    return {}
+  },
+  created(){
+    
+  },
+  mounted() {},
+
+  methods: {
+    //编辑
+    editHandler() {},
+    //新增
+    addHandler() {}
+  }
+}
+</script>
+<style lang="scss" scoped>
+.topBox {
+  position: relative;
+  background-color: #abc9d1;
+  width: 100%;
+  border-radius: 10px;
+  padding: 10px;
+
+  font-size: 26px;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+.title {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+.van-row {
+  text-align: center;
+}
+
+.List {
+  border: 1px solid #ccc;
+  background-color: #dfeaee;
+  margin-bottom: -1px;
+  text-align: left;
+}
+.titleList {
+  font-size: 26px;
+  text-align: center;
+  font-weight: bold;
+}
+.vancol {
+  height: 60px;
+  line-height: 60px;
+  border-left: 1px solid #ccc;
+  padding-left: 5px;
+}
+.img {
+  width: 50px;
+  height: 50px;
+  position: absolute;
+  right: 20px;
+}
+</style>

+ 310 - 0
src/views/menu/monitoringCall/index.vue

@@ -0,0 +1,310 @@
+<template>
+  <div>
+    <NavBar />
+    <van-row>
+      <van-col span="24"
+        ><van-field v-model="value1" is-link readonly label="机构" placeholder="" @click="show = true" />
+        <van-popup v-model="show" round position="bottom" :close-on-click-overlay="false">
+          <van-cascader
+            v-model="cascaderValue"
+            title="组织机构"
+            :options="options"
+            @close="closeDialog"
+            @change="changeCascader"
+            @finish="onFinish"
+            :field-names="fieldNames"
+          />
+        </van-popup>
+      </van-col>
+    </van-row>
+    <van-row>
+      <van-col span="12"
+        ><van-field v-model="fieldValue" is-link readonly label="状态" placeholder="" @click="showStatus = true" />
+        <van-popup v-model="showStatus" round position="bottom">
+          <van-picker
+            title="调阅状态"
+            show-toolbar
+            :columns="columns"
+            @confirm="onConfirm"
+            @cancel="onCancel"
+            @change="onChange"
+            :close-on-click-overlay="false"
+          /> </van-popup
+      ></van-col>
+      <van-col span="12">
+        <van-field v-model="currentDate" is-link readonly label="月份" placeholder="" @click="showDate = true" />
+        <van-popup v-model="showDate" round position="bottom">
+          <van-datetime-picker v-model="currentDate" type="year-month" title="月份" />
+        </van-popup>
+      </van-col>
+    </van-row>
+    <!-- 调阅列表 -->
+    <div class="topBox" @click="endMonitorHandler(item.status,item.id)" v-for="item in taskList" :key="item.id">
+      <div class="sonLeftBox">
+        <!-- 待调阅按钮 -->
+        <p>
+          <span :class="monitor[item.status]">{{ item.status | statusFilter }}</span>
+        </p>
+        <h3 class="title">{{ item.taskName }}</h3>
+        <p class="time">开始时间:{{ item.planStartTime }}</p>
+        <p class="time">结束时间:{{ item.planEndTime }}</p>
+      </div>
+      <div class="startMonitor" v-if="item.status <= 1" @click="startMonitorHandler(item.id)">开始调阅</div>
+      <div class="endMonitor" v-else @click="lookInfoHandler"><van-icon name="arrow" /></div>
+    </div>
+
+    <!-- 扫描弹框 -->
+    <van-dialog v-model="showDialog" title="" width="" :showConfirmButton="false">
+      <span class="spanimg">
+        <img class="close" @click="showDialog = false" src="../../../assets/img/icon/u58.png" alt="" />
+      </span>
+      <p class="text">用手机背面贴近NFC标签完成扫描</p>
+      <div class="img_box">
+        <img class="img" src="../../../assets/img/NFCphone.png" />
+      </div>
+      <div class="btns">
+        <div class="nfcPhoto" @click="nfcHandler">
+          <img class="nfcPng" src="../../../assets/img/icon/NFC扫描-01.png" alt="" />
+
+          <div>扫NFC</div>
+        </div>
+        <div class="nfcPhoto" @click="photoHandler">
+          <img class="nfcPng" src="../../../assets/img/icon/camera.png" alt="" />
+
+          <div>拍照</div>
+        </div>
+      </div>
+    </van-dialog>
+  </div>
+</template>
+<script>
+import NavBar from '@/components/NavBar'
+import { Col, Row, Cascader, Dialog, DatetimePicker, Icon, Picker } from 'vant'
+import { deptTreeList, selectListApp, registration } from '@/api/toConsult.js'
+import { Toast } from 'vant'
+export default {
+  data() {
+    return {
+      fieldValue: '',
+      monitor: ['monitor','aaaa','bbb','ccc'], //状态样式
+      value1: '', //输入框model
+      currentDate: '',
+      cascaderValue: '',
+      columns: ['调阅中', '待调阅', '已调阅'],
+      show: false,
+      showStatus: false,
+      showDate: false,
+      showDialog: false,
+      fieldNames: {
+        text: 'name',
+        value: 'id',
+        children: 'children'
+      },
+      taskId:'',//当前点击所属任务ID
+      taskList: [], //任务数组集合
+      options: [] //机构数组
+    }
+  },
+  components: {
+    NavBar,
+    Dialog,
+    Icon,
+    DatetimePicker,
+    Picker,
+    Col,
+    Row,
+    Cascader
+  },
+
+  filters: {
+    statusFilter: function (value) {
+      let str = ''
+      // 0待调阅,1调阅中,2已调阅,3已超期
+      switch (value) {
+        case 0:
+          str = '待调阅'
+
+          break
+        case 1:
+          str = '调阅中'
+          break
+
+        case 2:
+          str = '已调阅'
+          break
+
+        case 3:
+          str = '已超期'
+          break
+      }
+      return str
+    }
+  },
+  created() {
+    this.init()
+  },
+  methods: {
+    //初始化
+    init() {
+      //获取组织机构数据
+      deptTreeList().then(res => {
+        let { code, data, msg } = res
+        if (code == 200) {
+          this.options = data
+        }
+      })
+      //获取任务列表
+      selectListApp().then(res => {
+        let { code, data, msg } = res
+        if (code == 200) {
+          this.taskList = data
+        }
+      })
+    },
+    //扫描NFC
+    nfcHandler() {
+      //NFC和图片对应字段先写死后期接入app之后再做更改
+      let obj = {
+        nfc: 'nfc',
+        taskId: this.taskId
+      }
+      registration(obj).then(res => {
+        let { code, data, msg } = res
+        if (code == 200) {
+          Toast.success('扫描成功')
+          this.$router.push('/consultInfo/'+this.taskId)
+        }
+      })
+    },
+    //扫描图片
+    photoHandler() {
+      let obj = {
+        picture: 'picture',
+        taskId: this.taskId
+      }
+      registration(obj).then(res => {
+        let { code, data, msg } = res
+        if (code == 200) {
+          Toast.success('扫描成功')
+          this.$router.push('/consultInfo/'+this.taskId)
+        }
+      })
+    },
+    //关闭弹框事件
+    closeDialog() {
+      this.show = false
+      this.value1 = this.fieldValue
+    },
+    // 开始调阅事件
+    startMonitorHandler(taskId) {
+      this.taskId=taskId
+      this.showDialog = true
+    },
+    //已调阅事件
+    endMonitorHandler(status,taskId) {
+      // 0待调阅,1调阅中,2已调阅,3已超期
+      //跳转详情
+      if (status <= 1) return
+      this.$router.push('/consultInfo/'+taskId)
+    },
+    //查看调阅详情
+    lookInfoHandler() {},
+    //级联选择当前任意层级触发
+    changeCascader(val) {
+      console.log(val)
+      let { selectedOptions } = val
+      //级联值
+      this.cascaderValue = selectedOptions[selectedOptions.length - 1].id
+      //输入框值
+      this.fieldValue = selectedOptions[selectedOptions.length - 1].name
+    },
+    onFinish() {},
+    //搜索选择状态时触发
+    onConfirm(value, index) {
+      console.log(value)
+    },
+    onChange(picker, value, index) {},
+    onCancel() {}
+  }
+}
+</script>
+<style lang="scss" scoped>
+.topBox {
+  border: 1px solid #ccc;
+  margin: 20px;
+
+  display: flex;
+  .sonLeftBox {
+    padding: 10px;
+    flex: 1;
+    background-color: #e6ebeb;
+  }
+}
+.monitor {
+  color: white;
+  padding: 10px;
+  border-radius: 10px;
+  background-color: #8cb585;
+}
+.title {
+  margin: 10px;
+  margin-left: 0px;
+  font-size: 40px;
+}
+.time {
+  font-size: 32px;
+}
+.startMonitor {
+  background-color: #87b2be;
+  color: white;
+  width: 160px;
+  line-height: 200px;
+  font-size: 36px;
+  text-align: center;
+}
+.endMonitor {
+  background-color: #e6ebeb;
+  color: #87b2be;
+  width: 160px;
+  line-height: 200px;
+  font-size: 36px;
+  text-align: center;
+}
+.img_box {
+  text-align: center;
+  .img {
+    width: 200px;
+    height: 200px;
+  }
+}
+.text {
+  text-align: center;
+  font-size: 30px;
+  margin-top: 30px;
+  margin-bottom: 100px;
+}
+.btns {
+  margin-top: 40px;
+  margin-bottom: 40px;
+  display: flex;
+  justify-content: space-around;
+  .nfcPhoto {
+    color: #409bf2;
+    div {
+      width: 100%;
+      text-align: center;
+    }
+  }
+}
+.van-dialog {
+  padding: 30px;
+}
+.spanimg {
+  display: flex;
+  justify-content: end;
+  .close {
+    width: 50px;
+    height: 50px;
+  }
+}
+</style>

+ 4 - 2
vue.config.js

@@ -53,7 +53,9 @@ module.exports = defineConfig({
     proxy: {
       //配置跨域
       '/luojun': {
-          target: "http://10.87.10.49:8080",
+          // target: "http://10.87.10.49:8080",
+          target: "http://10.87.10.47:8080",
+         
           // ws:true,
           changOrigin:true,
           pathRewrite:{
@@ -61,7 +63,7 @@ module.exports = defineConfig({
           }
       },
       '/luowei': {
-        target: "http://10.87.10.49:8080",
+        target: "http://10.87.10.47:8080",
         // ws:true,
         changOrigin:true,
         pathRewrite:{