Ver Fonte

修复表格修改配置弹窗BUG,修改提交加入二次确认,修复折线图数据显示BUG,图表增加缓存,更改图表Y轴刻度显示

fxs há 9 meses atrás
pai
commit
473b479ba4

+ 720 - 0
package-lock.json

@@ -42,6 +42,7 @@
         "rollup-plugin-visualizer": "^5.12.0",
         "sharp": "^0.33.5",
         "terser": "^5.31.6",
+        "tester": "^1.4.5",
         "typescript": "~5.4.0",
         "unplugin-auto-import": "^0.18.2",
         "unplugin-icons": "^0.19.2",
@@ -2206,6 +2207,72 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
+    "node_modules/ansy": {
+      "version": "1.0.15",
+      "resolved": "https://registry.npmmirror.com/ansy/-/ansy-1.0.15.tgz",
+      "integrity": "sha512-mQyNSn58HN7aEthofkap0hn8jg7/5SJWrB0ypExgcECOwLppc0njH+QBA9X5VMiEN9SM0JlFZWJQGycxxInAqg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^3.0.0",
+        "custom-return": "^1.0.0",
+        "supports-color": "^3.1.2",
+        "ul": "^5.2.1"
+      }
+    },
+    "node_modules/ansy/node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/ansy/node_modules/color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/ansy/node_modules/color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/ansy/node_modules/has-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-1.0.0.tgz",
+      "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/ansy/node_modules/supports-color": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-3.2.3.tgz",
+      "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
     "node_modules/anymatch": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
@@ -2532,6 +2599,17 @@
         "node": ">=6"
       }
     },
+    "node_modules/camelo": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/camelo/-/camelo-1.2.1.tgz",
+      "integrity": "sha512-5O6lYuw6JR8viGfxFQhJTaO7cPTsnEaJUK2Gj0JeZ0O+iO78kxfeF47ocx6Ml0K8KWbE/JgBbgi3zF6lcUkvGw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "regex-escape": "^3.4.10",
+        "uc-first-array": "^1.1.10"
+      }
+    },
     "node_modules/chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
@@ -2549,6 +2627,13 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
+    "node_modules/charm": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/charm/-/charm-0.1.2.tgz",
+      "integrity": "sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==",
+      "dev": true,
+      "license": "MIT/X11"
+    },
     "node_modules/chokidar": {
       "version": "3.6.0",
       "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
@@ -2700,6 +2785,19 @@
         "node": ">=7.0.0"
       }
     },
+    "node_modules/color-it": {
+      "version": "1.2.12",
+      "resolved": "https://registry.npmmirror.com/color-it/-/color-it-1.2.12.tgz",
+      "integrity": "sha512-15ymoygmMjfsrjfnxFcKGXk/7TFo0kuZ2ETBinKpBw4T4H5MZWDFa21fmwlwcJnOz4RzSGbYwi7lnUf2264vKw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "couleurs": "^6.0.6",
+        "flat-colors": "^3.1.0",
+        "iterate-object": "^1.1.0",
+        "typpy": "^2.3.3"
+      }
+    },
     "node_modules/color-name": {
       "version": "1.1.4",
       "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
@@ -2803,6 +2901,36 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/couleurs": {
+      "version": "6.0.11",
+      "resolved": "https://registry.npmmirror.com/couleurs/-/couleurs-6.0.11.tgz",
+      "integrity": "sha512-y5WUDtgQKw/tVViZCj3ACX8VseU0ONxiet8SRsE89uH4s/otRLXGOMymfVbKMFzedKOdxQpTcYWukRwkvgRYdw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansy": "^1.0.0",
+        "color-convert": "^1.0.0",
+        "iterate-object": "^1.3.1",
+        "typpy": "^2.3.1"
+      }
+    },
+    "node_modules/couleurs/node_modules/color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/couleurs/node_modules/color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/cross-spawn": {
       "version": "7.0.3",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -2960,6 +3088,16 @@
       "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
       "license": "MIT"
     },
+    "node_modules/custom-return": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmmirror.com/custom-return/-/custom-return-1.0.12.tgz",
+      "integrity": "sha512-Xy6IlEV6gW5Iu4YRoQe0A5RG1mzezawcTXzAk7u28oB2UilRfbbOc1C7RmWE6AJ1inSm8gghCkIpo0LUQfLbvw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "noop6": "^1.0.0"
+      }
+    },
     "node_modules/data-view-buffer": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
@@ -3057,6 +3195,16 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/deffy": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmmirror.com/deffy/-/deffy-2.2.4.tgz",
+      "integrity": "sha512-pLc9lsbsWjr6RxmJ2OLyvm+9l4j1yK69h+TML/gUit/t3vTijpkNGh8LioaJYTGO7F25m6HZndADcUOo2PsiUg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "typpy": "^2.0.0"
+      }
+    },
     "node_modules/define-data-property": {
       "version": "1.1.4",
       "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -3132,6 +3280,21 @@
         "node": ">=8"
       }
     },
+    "node_modules/difflet": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/difflet/-/difflet-1.0.1.tgz",
+      "integrity": "sha512-M5odUun54PsYRWAVCUOTF975cuQN1MBYgi46lxZ+00X7A0wbkJTp+1zyr979lVpRS/gOMpekqhDMlBKmP2oXjg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "charm": "0.1.x",
+        "deep-is": "0.1.x",
+        "traverse": "0.6.x"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
     "node_modules/dir-glob": {
       "version": "3.0.1",
       "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -3256,6 +3419,22 @@
         "vue": "^3.2.0"
       }
     },
+    "node_modules/emoji-logger": {
+      "version": "1.0.15",
+      "resolved": "https://registry.npmmirror.com/emoji-logger/-/emoji-logger-1.0.15.tgz",
+      "integrity": "sha512-f1psExXXMEbYHDXDUntohNPAW/fPRefy0ONzcOIyEMCBgLYM4RP0gcFFRsl83WfPTOu8EtnAhaHZaQOIUE/9gA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-it": "^1.2.0",
+        "deffy": "^2.2.2",
+        "emojic": "^1.1.0",
+        "err": "^1.1.0",
+        "indento": "^1.1.0",
+        "is-win": "^1.0.4",
+        "ul": "^5.2.0"
+      }
+    },
     "node_modules/emoji-regex": {
       "version": "8.0.0",
       "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -3263,6 +3442,26 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/emojic": {
+      "version": "1.1.17",
+      "resolved": "https://registry.npmmirror.com/emojic/-/emojic-1.1.17.tgz",
+      "integrity": "sha512-o6eKBKh02CxD6lhJ5famk+phxXmQfgdITLN7qB3kcEZnJ+7l0oXVTQe+tShSOEgw1+/8q6iPUUdMqvt5Vlj7zw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "camelo": "^1.2.1",
+        "emojilib": "^2.0.2",
+        "iterate-object": "^1.2.0",
+        "r-json": "^1.1.0"
+      }
+    },
+    "node_modules/emojilib": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmmirror.com/emojilib/-/emojilib-2.4.0.tgz",
+      "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/emojis-list": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz",
@@ -3284,6 +3483,16 @@
         "url": "https://github.com/fb55/entities?sponsor=1"
       }
     },
+    "node_modules/err": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/err/-/err-1.1.1.tgz",
+      "integrity": "sha512-N97Ybd2jJHVQ+Ft3Q5+C2gM3kgygkdeQmEqbN2z15UTVyyEsIwLA1VK39O1DHEJhXbwIFcJLqm6iARNhFANcQA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "typpy": "^2.2.0"
+      }
+    },
     "node_modules/errno": {
       "version": "0.1.8",
       "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz",
@@ -3378,6 +3587,34 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/es-get-iterator": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+      "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.1.3",
+        "has-symbols": "^1.0.3",
+        "is-arguments": "^1.1.1",
+        "is-map": "^2.0.2",
+        "is-set": "^2.0.2",
+        "is-string": "^1.0.7",
+        "isarray": "^2.0.5",
+        "stop-iteration-iterator": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/es-get-iterator/node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/es-object-atoms": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
@@ -3826,6 +4063,39 @@
       "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "license": "MIT"
     },
+    "node_modules/expect": {
+      "version": "1.20.2",
+      "resolved": "https://registry.npmmirror.com/expect/-/expect-1.20.2.tgz",
+      "integrity": "sha512-vUOB6rNLhhRgchrNzJZH72FXDgiHmmEqX07Nlb1363HyZm/GFzkNMq0X0eIygMtdc4f2okltziddtVM4D5q0Jw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "define-properties": "~1.1.2",
+        "has": "^1.0.1",
+        "is-equal": "^1.5.1",
+        "is-regex": "^1.0.3",
+        "object-inspect": "^1.1.0",
+        "object-keys": "^1.0.9",
+        "tmatch": "^2.0.1"
+      }
+    },
+    "node_modules/expect/node_modules/define-properties": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.1.4.tgz",
+      "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-property-descriptors": "^1.0.0",
+        "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/extend-shallow": {
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz",
@@ -3979,6 +4249,13 @@
         "node": "^10.12.0 || >=12.0.0"
       }
     },
+    "node_modules/flat-colors": {
+      "version": "3.3.12",
+      "resolved": "https://registry.npmmirror.com/flat-colors/-/flat-colors-3.3.12.tgz",
+      "integrity": "sha512-SYIhhJ+ElZbyyz6+e+xpyN3EboppIg1h6nZaMyEeDwXSY6a3jjp/gANDBmj8xwu+mMflj4UWCPkxRIH+rExDMQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/flatted": {
       "version": "3.3.1",
       "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz",
@@ -4094,6 +4371,16 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/function.name": {
+      "version": "1.0.13",
+      "resolved": "https://registry.npmmirror.com/function.name/-/function.name-1.0.13.tgz",
+      "integrity": "sha512-mVrqdoy5npWZyoXl4DxCeuVF6delDcQjVS9aPdvLYlBxtMTZDR2B5GVEQEoM1jJyspCqg3C0v4ABkLE7tp9xFA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "noop6": "^1.0.1"
+      }
+    },
     "node_modules/function.prototype.name": {
       "version": "1.1.6",
       "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
@@ -4326,6 +4613,16 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/has": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/has/-/has-1.0.4.tgz",
+      "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
     "node_modules/has-ansi": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz",
@@ -4602,6 +4899,13 @@
         "node": ">=0.8.19"
       }
     },
+    "node_modules/indento": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmmirror.com/indento/-/indento-1.1.13.tgz",
+      "integrity": "sha512-YZWk3mreBEM7sBPddsiQnW9Z8SGg/gNpFfscJq00HCDS7pxcQWWWMSVKJU7YkTRyDu1Zv2s8zaK8gQWKmCXHlg==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/inflight": {
       "version": "1.0.6",
       "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
@@ -4646,6 +4950,23 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/is-arguments": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz",
+      "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-array-buffer": {
       "version": "3.0.4",
       "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
@@ -4669,6 +4990,35 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/is-arrow-function": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/is-arrow-function/-/is-arrow-function-2.0.3.tgz",
+      "integrity": "sha512-iDStzcT1FJMzx+TjCOK//uDugSe/Mif/8a+T0htydQ3qkJGvSweTZpVYz4hpJH0baloSPiAFQdA8WslAgJphvQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-callable": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-async-function": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/is-async-function/-/is-async-function-2.0.0.tgz",
+      "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-bigint": {
       "version": "1.0.4",
       "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz",
@@ -4799,6 +5149,50 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/is-equal": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmmirror.com/is-equal/-/is-equal-1.7.0.tgz",
+      "integrity": "sha512-hErktGR9jmoYXNWlbrwGjc8eHh09mbY6TWSTTFtnMcKaCuSMN8z+Ni5ma/8mkbVpe4CbB7V6kN1MkCg9bCx5bA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-get-iterator": "^1.1.3",
+        "es-to-primitive": "^1.2.1",
+        "functions-have-names": "^1.2.3",
+        "has-bigints": "^1.0.2",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0",
+        "is-arrow-function": "^2.0.3",
+        "is-bigint": "^1.0.4",
+        "is-boolean-object": "^1.1.2",
+        "is-callable": "^1.2.7",
+        "is-date-object": "^1.0.5",
+        "is-generator-function": "^1.0.10",
+        "is-number-object": "^1.0.7",
+        "is-regex": "^1.1.4",
+        "is-string": "^1.0.7",
+        "is-symbol": "^1.0.4",
+        "isarray": "^2.0.5",
+        "object-inspect": "^1.13.1",
+        "object.entries": "^1.1.7",
+        "object.getprototypeof": "^1.0.5",
+        "which-boxed-primitive": "^1.0.2",
+        "which-collection": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-equal/node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/is-extendable": {
       "version": "0.1.1",
       "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz",
@@ -4817,6 +5211,19 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/is-finalizationregistry": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz",
+      "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-fullwidth-code-point": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -4827,6 +5234,22 @@
         "node": ">=8"
       }
     },
+    "node_modules/is-generator-function": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz",
+      "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-glob": {
       "version": "4.0.3",
       "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
@@ -4839,6 +5262,19 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/is-map": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/is-map/-/is-map-2.0.3.tgz",
+      "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-negative-zero": {
       "version": "2.0.3",
       "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
@@ -4931,6 +5367,19 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-set": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/is-set/-/is-set-2.0.3.tgz",
+      "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-shared-array-buffer": {
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
@@ -5004,6 +5453,19 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-weakmap": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/is-weakmap/-/is-weakmap-2.0.2.tgz",
+      "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-weakref": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz",
@@ -5016,12 +5478,36 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-weakset": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/is-weakset/-/is-weakset-2.0.3.tgz",
+      "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "get-intrinsic": "^1.2.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-what": {
       "version": "3.14.1",
       "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz",
       "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
       "license": "MIT"
     },
+    "node_modules/is-win": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmmirror.com/is-win/-/is-win-1.0.10.tgz",
+      "integrity": "sha512-tJ9PPj5RW2RUaZ2lAIVRqQjMSynA44Ln89h+Ue+pOecoWIv6dLHvN6dtLxeCi/h5epPJPSVyuaNObLAMq62OEA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/is-windows": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz",
@@ -5069,6 +5555,13 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/iterate-object": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmmirror.com/iterate-object/-/iterate-object-1.3.4.tgz",
+      "integrity": "sha512-4dG1D1x/7g8PwHS9aK6QV5V94+ZvyP4+d19qDv43EzImmrndysIl4prmJ1hWWIGCqrZHyaHBm6BSEWHOLnpoNw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/js-base64": {
       "version": "2.6.4",
       "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz",
@@ -5649,6 +6142,13 @@
         "node": ">= 4.4.x"
       }
     },
+    "node_modules/noop6": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmmirror.com/noop6/-/noop6-1.0.9.tgz",
+      "integrity": "sha512-DB3Hwyd89dPr5HqEPg3YHjzvwh/mCqizC1zZ8vyofqc+TQRyPDnT4wgXXbLGF4z9YAzwwTLi8pNLhGqcbSjgkA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -5859,6 +6359,40 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/object.entries": {
+      "version": "1.1.8",
+      "resolved": "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.8.tgz",
+      "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/object.getprototypeof": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/object.getprototypeof/-/object.getprototypeof-1.0.6.tgz",
+      "integrity": "sha512-gUiHHFVGLDayJsXfudx6KQEA6iMhPnsmAqL0vdBXhtKzTupcgNTGDJfW1a8xw81jjyWN07IRsVsCKyTn9wiJvQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0",
+        "reflect.getprototypeof": "^1.0.5"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/object.pick": {
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz",
@@ -6357,6 +6891,13 @@
         "node": ">=6"
       }
     },
+    "node_modules/queoid": {
+      "version": "1.1.9",
+      "resolved": "https://registry.npmmirror.com/queoid/-/queoid-1.1.9.tgz",
+      "integrity": "sha512-53H4q1OymjcOhRBQmIXHP/xcioNE9lPWEe/qxspbcoV8ssHgZRT37PveyEDZV1afsUvrap9mZ2HFhV8qmrabdA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/query-string": {
       "version": "4.3.4",
       "resolved": "https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz",
@@ -6390,6 +6931,16 @@
       ],
       "license": "MIT"
     },
+    "node_modules/r-json": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/r-json/-/r-json-1.3.0.tgz",
+      "integrity": "sha512-xesd+RHCpymPCYd9DvDvUr1w1IieSChkqYF1EpuAYrvCfLXji9NP36DvyYZJZZB5soVDvZ0WUtBoZaU1g5Yt9A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "w-json": "1.3.10"
+      }
+    },
     "node_modules/read-package-json-fast": {
       "version": "3.0.2",
       "resolved": "https://registry.npmmirror.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz",
@@ -6431,6 +6982,35 @@
         "node": ">=8.10.0"
       }
     },
+    "node_modules/reflect.getprototypeof": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
+      "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.1",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4",
+        "globalthis": "^1.0.3",
+        "which-builtin-type": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/regex-escape": {
+      "version": "3.4.10",
+      "resolved": "https://registry.npmmirror.com/regex-escape/-/regex-escape-3.4.10.tgz",
+      "integrity": "sha512-qEqf7uzW+iYcKNLMDFnMkghhQBnGdivT6KqVQyKsyjSWnoFyooXVnxrw9dtv3AFLnD6VBGXxtZGAQNFGFTnCqA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/regex-not": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz",
@@ -7179,6 +7759,19 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/stop-iteration-iterator": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
+      "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "internal-slot": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/strict-uri-encode": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
@@ -7633,6 +8226,21 @@
       "devOptional": true,
       "license": "MIT"
     },
+    "node_modules/tester": {
+      "version": "1.4.5",
+      "resolved": "https://registry.npmmirror.com/tester/-/tester-1.4.5.tgz",
+      "integrity": "sha512-u1yemL+9y5Hi84XNunjadJ+oxYo0y3FE1FWG621HWFwM2J4lGktxG++ptyno9wQyp8z7a7gfzHhqivK32YED+w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "difflet": "^1.0.1",
+        "emoji-logger": "^1.0.11",
+        "expect": "^1.13.0",
+        "is-win": "^1.0.7",
+        "queoid": "^1.0.0",
+        "try-async": "^1.0.0"
+      }
+    },
     "node_modules/text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
@@ -7640,6 +8248,13 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/tmatch": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/tmatch/-/tmatch-2.0.1.tgz",
+      "integrity": "sha512-OHn/lzGWAsh5MBNTXUiHc595HAbIASCs6M+hDrkMObbSzsXej0SCKrQxr4J6EmRHbdo3qwyetPzuzEktkZiy4g==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/to-fast-properties": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -7764,6 +8379,13 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/try-async": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmmirror.com/try-async/-/try-async-1.1.10.tgz",
+      "integrity": "sha512-R//xexQ218FCzb29ch2t//yi3LeW1+ihI7fkWSAkGNWKEmAEZwWweIp4y/2/x+sgeF97rG47LfMHMLq4apiM8g==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/ts-api-utils": {
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
@@ -7926,6 +8548,33 @@
         "node": ">=14.17"
       }
     },
+    "node_modules/typpy": {
+      "version": "2.3.13",
+      "resolved": "https://registry.npmmirror.com/typpy/-/typpy-2.3.13.tgz",
+      "integrity": "sha512-vOxIcQz9sxHi+rT09SJ5aDgVgrPppQjwnnayTrMye1ODaU8gIZTDM19t9TxmEElbMihx2Nq/0/b/MtyKfayRqA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "function.name": "^1.0.3"
+      }
+    },
+    "node_modules/uc-first-array": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmmirror.com/uc-first-array/-/uc-first-array-1.1.10.tgz",
+      "integrity": "sha512-tX2PJLrqtexTxVN9hTTY+K5gPnF2gyj7SfjPF4Q2Xhbi1fSNiO12I/G+AoMzxJLwr9R50CmVn8iAhWCvZlJm3A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ucfirst": "^1.0.0"
+      }
+    },
+    "node_modules/ucfirst": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/ucfirst/-/ucfirst-1.0.0.tgz",
+      "integrity": "sha512-xbB/CQ0GdkxqH4IElZqenn/dL/tnyx7DCDASWJPE92ePbFM21kKemXI2LBeYtEvblf1Ol98hyJJS43Wu5JMQSQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/ufo": {
       "version": "1.5.4",
       "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz",
@@ -7933,6 +8582,17 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/ul": {
+      "version": "5.2.15",
+      "resolved": "https://registry.npmmirror.com/ul/-/ul-5.2.15.tgz",
+      "integrity": "sha512-svLEUy8xSCip5IWnsRa0UOg+2zP0Wsj4qlbjTmX6GJSmvKMHADBuHOm1dpNkWqWPIGuVSqzUkV3Cris5JrlTRQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "deffy": "^2.2.2",
+        "typpy": "^2.3.4"
+      }
+    },
     "node_modules/unbox-primitive": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -8455,6 +9115,13 @@
         "typescript": ">=5.0.0"
       }
     },
+    "node_modules/w-json": {
+      "version": "1.3.10",
+      "resolved": "https://registry.npmmirror.com/w-json/-/w-json-1.3.10.tgz",
+      "integrity": "sha512-XadVyw0xE+oZ5FGApXsdswv96rOhStzKqL53uSe5UaTadABGkWIg1+DTx8kiZ/VqTZTBneoL0l65RcPe4W3ecw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/webpack-sources": {
       "version": "3.2.3",
       "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz",
@@ -8504,6 +9171,59 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/which-builtin-type": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz",
+      "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "function.prototype.name": "^1.1.6",
+        "has-tostringtag": "^1.0.2",
+        "is-async-function": "^2.0.0",
+        "is-date-object": "^1.0.5",
+        "is-finalizationregistry": "^1.0.2",
+        "is-generator-function": "^1.0.10",
+        "is-regex": "^1.1.4",
+        "is-weakref": "^1.0.2",
+        "isarray": "^2.0.5",
+        "which-boxed-primitive": "^1.0.2",
+        "which-collection": "^1.0.2",
+        "which-typed-array": "^1.1.15"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/which-builtin-type/node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/which-collection": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/which-collection/-/which-collection-1.0.2.tgz",
+      "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-map": "^2.0.3",
+        "is-set": "^2.0.3",
+        "is-weakmap": "^2.0.2",
+        "is-weakset": "^2.0.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/which-typed-array": {
       "version": "1.1.15",
       "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.15.tgz",

+ 1 - 0
package.json

@@ -47,6 +47,7 @@
     "rollup-plugin-visualizer": "^5.12.0",
     "sharp": "^0.33.5",
     "terser": "^5.31.6",
+    "tester": "^1.4.5",
     "typescript": "~5.4.0",
     "unplugin-auto-import": "^0.18.2",
     "unplugin-icons": "^0.19.2",

+ 3 - 3
src/components/Table.vue

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-20 18:16:18
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-08-31 18:04:39
+ * @LastEditTime: 2024-09-02 15:57:42
  * @FilePath: \Game-Backstage-Management-System\src\components\Table.vue
  * @Description: 
  * 
@@ -119,6 +119,7 @@ const getData = () => {
   return new Promise((resolve, reject) => {
     if (props.dataList) {
       tableData.splice(0, tableData.length, ...props.dataList)
+      paginationConfig2.total = props.paginationConfig.total
       loading.value = false
       resolve(true)
     } else {
@@ -270,7 +271,7 @@ const changePageLimit = watch(
       // resetTableData()
     }
     if (newGid != oldGid) reqconfig.otherOptions.gid = newGid
-    console.log('gidchange', newGid, oldGid)
+
     if (newLimit != oldLimit || !tableData[paginationConfig2.currentPage] || newGid != oldGid) {
       getData()
     }
@@ -421,7 +422,6 @@ onMounted(() => {
         v-loading="loading"
         :row-key="createRowKey()"
       >
-        <!-- 这里还有问题,需要计算一下 -->
         <el-table-column
           v-if="props.needRowindex"
           align="center"

+ 46 - 33
src/components/dataAnalysis/StatisticText.vue

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-26 13:57:37
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-08-30 12:02:19
+ * @LastEditTime: 2024-09-02 15:50:11
  * @FilePath: \Game-Backstage-Management-System\src\components\dataAnalysis\StatisticText.vue
  * @Description: 用于展示统计数据,如总览页面上方的总览数据
  * 
@@ -11,7 +11,7 @@
 <script setup lang="ts">
 import type { StaticDataInfo, StaticField } from '@/types/dataAnalysis'
 import { decimalToPercentage } from '@/utils/common'
-import { onMounted, reactive, watchEffect, ref } from 'vue'
+import { onMounted, reactive, ref, watch } from 'vue'
 import axiosInstance from '@/utils/axios/axiosInstance'
 const props = defineProps<StaticDataInfo>()
 const dataList = reactive<Array<StaticField>>([])
@@ -22,42 +22,46 @@ const dataState = ref(false) // 数据是否加载成功
  * @return {*}
  */
 const getData = () => {
-  if (props.requestConfig) {
-    axiosInstance
-      .post(props.requestConfig.url, props.requestConfig.otherOptions)
-      .then((info) => {
+  try {
+    if (props.requestConfig) {
+      axiosInstance
+        .post(props.requestConfig.url, props.requestConfig.otherOptions)
+        .then((info) => {
+          dataList.splice(0, dataList.length) // 清空一下
+          let data = info.data
+          props.fieldsInfo.map((item) => {
+            dataList.push({
+              name: item.name,
+              cnName: item.cnName,
+              value: data[item.name]
+            })
+          })
+
+          dataState.value = true
+        })
+        .catch(() => {
+          dataState.value = false
+        })
+    } else {
+      let hasNull = props.fieldsInfo.every((item) => item.value !== '')
+
+      if (hasNull) {
         dataList.splice(0, dataList.length) // 清空一下
-        let data = info.data
         props.fieldsInfo.map((item) => {
           dataList.push({
             name: item.name,
             cnName: item.cnName,
-            value: data[item.name]
+            value: item.value
           })
         })
-
         dataState.value = true
-      })
-      .catch(() => {
+      } else {
         dataState.value = false
-      })
-  } else {
-    let hasNull = props.fieldsInfo.every((item) => item.value !== '')
-
-    if (hasNull) {
-      dataList.splice(0, dataList.length) // 清空一下
-      props.fieldsInfo.map((item) => {
-        dataList.push({
-          name: item.name,
-          cnName: item.cnName,
-          value: item.value
-        })
-      })
-
-      dataState.value = true
-    } else {
-      dataState.value = false
+      }
     }
+  } catch (err) {
+    console.log(err)
+    throw new Error('数据获取失败')
   }
 }
 
@@ -65,13 +69,22 @@ const getData = () => {
  * @description: 监听requesconfig的变化,一旦变化就重新请求
  * @return {*}
  */
-watchEffect(() => getData())
-
-onMounted(() => {})
+watch(
+  () => [
+    props.requestConfig?.otherOptions.gid,
+    props.requestConfig?.otherOptions.pf,
+    props.fieldsInfo
+  ],
+  () => {
+    getData()
+  }
+)
 
-defineExpose({
-  // getData
+onMounted(() => {
+  getData()
 })
+
+defineExpose({})
 </script>
 
 <template>

+ 152 - 56
src/components/dataAnalysis/TemporalTrend.vue

@@ -8,7 +8,7 @@
 
 <script setup lang="ts">
 import { onMounted, reactive, ref, watch } from 'vue'
-import { type TemporalTrendProps, type OptionsProps } from '@/types/dataAnalysis'
+import type { TemporalTrendProps, OptionsProps, StaticField, ReqConfig } from '@/types/dataAnalysis'
 import type { TablePaginationSetting, TableFieldInfo } from '@/types/table'
 import Table from '../Table.vue'
 import TimeLineChart from '../echarts/TimeLineChart.vue'
@@ -20,26 +20,28 @@ const props = defineProps<TemporalTrendProps>()
 const activeTab = ref<string>('') // 激活的Tab
 const iconSize = ref(20) // 图标的尺寸
 
+interface CacheData {
+  paginationConfig: TablePaginationSetting
+  tableDataList: Array<any>
+  tableFieldsInfo: Array<any>
+  chartInfo: OptionsProps
+  statisticFieldsInfo: Array<StaticField>
+}
+
 // 缓存数据
-// const cacheData: Record<
-//   string,
-//   {
-//     paginationConfig: object
-//     tableDataList: Array<any>
-//     tableFieldsInfo: Array<any>
-//     chartInfo: object
-//   }
-// > = {
-//   t: {
-//     paginationConfig: {},
-//     tableDataList: [],
-//     tableFieldsInfo: [],
-//     chartInfo: {}
-//   }
-// }
+const cacheData: Record<string, CacheData> = {}
+
+/**
+ * @description: 请求参数
+ * @return {*}
+ */
+const requestInfo = reactive<ReqConfig>({
+  url: '',
+  otherOptions: {}
+})
 
 // 表格数据
-const tableDataList = reactive<Array<any>>([])
+let tableDataList = reactive<Array<any>>([])
 
 // 数据的加载情况
 const loadDataState = reactive({
@@ -47,27 +49,35 @@ const loadDataState = reactive({
   state: false
 })
 
-// 配置表格分页数据
-const paginationConfig = reactive<TablePaginationSetting>({
+const initPageConfig = {
   limit: 6, // 每页展示个数
   currentPage: 1, // 当前页码
   total: 0, // 数据总数
   pagesizeList: [6], // 页数大小列表
   hasLodingData: 0 // 已经加载的数据
-})
+}
+
+// 配置表格分页数据
+let paginationConfig = reactive<TablePaginationSetting>({ ...initPageConfig })
 
 // 表格字段信息
-const tableFieldsInfo = reactive<Array<TableFieldInfo>>([])
+let tableFieldsInfo = reactive<Array<TableFieldInfo>>([])
+
+// 统计数据字段的信息
+let statisticFieldsInfo = reactive<Array<StaticField>>([])
 
 // 图表的展示形式,曲线图或者是表格
 const selectShape = ref(1)
 
-// 图表的信息,包括图例,数据,以及x轴的刻度label
-const chartInfo = reactive<OptionsProps>({
+const initChartInfo = {
   legendData: [],
   xAxisData: [],
-  seriesData: [],
-  loadingState: loadDataState.loading
+  seriesData: []
+}
+
+// 图表的信息,包括图例,数据,以及x轴的刻度label
+let chartInfo = reactive<OptionsProps>({
+  ...initChartInfo
 })
 
 /**
@@ -86,7 +96,6 @@ const changeSelectShape = (name: number) => {
 const createTableField = () => {
   //  生成表格的字段信息
   tableFieldsInfo.splice(0, tableFieldsInfo.length)
-
   for (const [key, value] of Object.entries(props.tableFieldsInfo)) {
     // 根据传入的信息,生成table需要的字段信息
     tableFieldsInfo.push({
@@ -104,6 +113,7 @@ const createTableField = () => {
  */
 const createTableData = (data: any) => {
   // 图表的x轴信息
+
   const xInfo = Object.keys(data[props.resDataFieldsInfo['xAxis']])
   const valInfo: any = {}
   // 把所有的表格需要的数据假如valInfo,其中index字段需要单独拿出来用x轴的信息填充
@@ -138,46 +148,124 @@ const createTableData = (data: any) => {
 const createOptions = (data: any) => {
   const valInfo: any = {}
   const xInfo = Object.keys(data[props.resDataFieldsInfo['xAxis']])
-  // 把所有的表格需要的数据假如valInfo,其中index字段需要单独拿出来用x轴的信息填充
+
+  // 把所有的表格需要的数据加入valInfo,其中index字段需要单独拿出来用x轴的信息填充
   props.resDataFieldsInfo['values'].map((key: string) => {
     valInfo[key] = Object.values(data[key])
   })
 
   chartInfo.xAxisData = xInfo
+  chartInfo.seriesData = [] // 重置一下seriesData,不然会累加
 
   chartInfo.legendData = tableFieldsInfo
     .filter((item) => item.name !== 'index')
-    .map((val) => val.cnName)
+    .map((val) => {
+      chartInfo.seriesData.push({
+        name: val.cnName,
+        data: valInfo[val.name]
+      })
+      return val.cnName
+    })
+}
 
-  chartInfo.seriesData = Object.values(valInfo)
+/**
+ * @description: 有tab页的情况下对数据进行缓存
+ * @return {*}
+ */
+
+const setCacheData = (isUse: boolean = false) => {
+  if (isUse) {
+    // 使用缓存
+    const cachedData = cacheData[activeTab.value]
+
+    if (cachedData) {
+      ;({ tableFieldsInfo, tableDataList, paginationConfig, statisticFieldsInfo, chartInfo } =
+        JSON.parse(JSON.stringify(cachedData)))
+      console.log(statisticFieldsInfo)
+    } else {
+      console.warn('No cached data found for the current tab.')
+    }
+  } else {
+    // 缓存数据
+    cacheData[activeTab.value] = {
+      tableFieldsInfo: JSON.parse(JSON.stringify(tableFieldsInfo)),
+      tableDataList: JSON.parse(JSON.stringify(tableDataList)),
+      paginationConfig: JSON.parse(JSON.stringify(paginationConfig)),
+      statisticFieldsInfo: JSON.parse(JSON.stringify(statisticFieldsInfo)),
+      chartInfo: JSON.parse(JSON.stringify(chartInfo))
+    }
+  }
 }
 
-const getData = async (type: number) => {
-  // chartInfo.loadingState = true
+/**
+ * @description: 清除缓存数据
+ * @return {*}
+ */
+const clearCacheData = () => {
+  Object.keys(cacheData).forEach((key) => delete cacheData[key])
+}
+
+/**
+ * @description: 监测数据是否合法,看其中的x轴信息和折线图数据是否齐全
+ * @param {*} data  返回的数据
+ * @return {*}
+ */
+const isLegalData = (data: any): boolean => {
+  let x = data[props.resDataFieldsInfo['xAxis']]
+  let val = props.resDataFieldsInfo['values'].every((item) => data[item])
+  return x && val
+}
 
+/**
+ * @description: 获取数据,如果有tab页的话同时缓存数据
+ * @param {*} type  如果有type的话,type为请求的不同类型的数据
+ * @return {*}
+ */
+const getData = async (type: number) => {
+  loadDataState.state = false
+  loadDataState.loading = true
   axiosInstance
-    .post(props.requestConfig.url, { ...props.requestConfig.otherOptions, type })
+    .post(requestInfo.url, { ...requestInfo.otherOptions, type })
     .then((info) => {
       let data = info.data
       loadDataState.state = true
-      // 生成表格字段
-      createTableField()
-      // 生成表格数据
-      if (props.needTable) {
-        createTableData(info.data)
-      }
 
-      // 如果有统计数据的配置,则生成
-      if (props.staticFields) {
-        props.staticFields.forEach((item, index, array) => {
-          array[index].value = data[item.name]
-        })
+      if (!isLegalData(data)) {
+        paginationConfig = reactive({ ...initPageConfig })
+
+        chartInfo = reactive<OptionsProps>({ ...initChartInfo })
+
+        tableDataList.splice(0, tableDataList.length)
+        tableFieldsInfo.splice(0, tableFieldsInfo.length)
+        statisticFieldsInfo.splice(0, statisticFieldsInfo.length)
+      } else {
+        // 生成表格字段
+        createTableField()
+
+        // 生成表格数据
+        if (props.needTable) {
+          createTableData(info.data)
+        }
+
+        // 如果有统计数据的配置,则生成
+        if (props.staticFields) {
+          statisticFieldsInfo.splice(0, statisticFieldsInfo.length)
+          props.staticFields.map((item) => {
+            statisticFieldsInfo.push({
+              name: item.name,
+              cnName: item.cnName,
+              value: data[item.name]
+            })
+          })
+        }
+
+        // options配置赋值
+        if (props.needCharts) {
+          createOptions(info.data)
+        }
       }
 
-      // options配置赋值
-      if (props.needCharts) {
-        createOptions(info.data)
-      }
+      if (activeTab.value) setCacheData() // 如果有tab的话再去缓存
     })
     .catch((err) => {
       loadDataState.state = false
@@ -189,26 +277,33 @@ const getData = async (type: number) => {
 }
 
 /**
- * @description: 当标签页切换的时候,重新获取数据,这里可能会改为修改配置,而不是修改url
+ * @description: 当标签页切换的时候,重新获取数据,如果有缓存数据则直接使用缓存数据
  * @param {*} tabName 对应的tabName,去tabinfo中找到对应的url
  * @return {*}
  */
 const tabChange = (tabName: string) => {
   if (props.tabInfo) {
-    // if(cacheData[tabName])
-    let type = props.tabInfo.find((item) => item.name === tabName)?.type
-    if (type) getData(type)
-    else throw new Error('No match type')
+    if (cacheData[tabName]) {
+      setCacheData(true)
+    } else {
+      let type = props.tabInfo.find((item) => item.name === tabName)?.type
+      if (type) getData(type)
+      else throw new Error('No match type')
+    }
   }
 }
 
+// 在挂载之前给requestinfo赋值,不然会导致watch在挂载的时候执行一次
+Object.assign(requestInfo, props.requestConfig)
+
 /**
  * @description: 监听请求参数的变化,有变化了之后重新请求数据,并且把tab置为第一个
  * @return {*}
  */
 watch(
-  () => [props.requestConfig.otherOptions],
+  () => [requestInfo.otherOptions],
   () => {
+    clearCacheData()
     if (props.tabInfo) activeTab.value = props.tabInfo[0].name
     getData(1)
   },
@@ -218,7 +313,8 @@ watch(
 )
 
 onMounted(() => {
-  if (!props.waitTimeSelect) getData(1)
+  // if (!props.waitTimeSelect) getData(1)
+  getData(1)
 
   if (props.tabInfo) activeTab.value = props.tabInfo[0].name
 })
@@ -253,7 +349,7 @@ onMounted(() => {
           <div class="yesterDayDataBox">
             <StatisticText
               v-if="staticFields && loadDataState.state"
-              :fields-info="staticFields"
+              :fields-info="statisticFieldsInfo"
               :value-class="'chartStaticValue'"
             ></StatisticText>
           </div>

+ 24 - 14
src/components/echarts/TimeLineChart.vue

@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { onMounted, ref, shallowRef, watch } from 'vue'
+import { onMounted, ref, shallowRef, watch, useAttrs } from 'vue'
 import echarts from '.'
 import { nextTick } from 'vue'
 import { debounceFunc } from '@/utils/common'
@@ -8,6 +8,9 @@ import type { OptionsProps } from '@/types/dataAnalysis'
 // 图表需要的props
 const props = defineProps<OptionsProps>()
 
+// 传入的attrs
+const attrs = useAttrs()
+
 // 图表实例
 const linechart = shallowRef()
 
@@ -59,12 +62,16 @@ const initOptions = () => {
     xAxis: {
       type: 'category',
       data: [],
+      axisLabel: {
+        showMaxLabel: true
+      },
       axisTick: {
         alignWithLabel: true
       }
     },
     yAxis: {
-      type: 'value'
+      type: 'value',
+      minInterval: 1
     },
     tooltip: {
       trigger: 'axis',
@@ -102,7 +109,6 @@ const initOptions = () => {
     name: '今日新增',
     data: [10, 22, 28, 43, 49],
     type: 'line',
-    stack: 'x',
     smooth: true
   }
 
@@ -111,13 +117,16 @@ const initOptions = () => {
   if (props.seriesData.length) {
     // 最终的siries数组
     let finalSeriesList: any = []
-    // const finalSeriesList: Array<any> = []
 
     props.legendData.map((item, index) => {
       const seriesClone = JSON.parse(JSON.stringify(baseSeries))
       // 设置克隆的属性
       seriesClone.name = item
-      seriesClone.data = props.seriesData[index]
+      let reuslt = props.seriesData.find((val) => {
+        return val.name === item
+      })
+
+      seriesClone.data = Object.values(reuslt.data)
       seriesClone.itemStyle.borderColor = colorList[index]
       seriesClone.lineStyle.color = colorList[index]
 
@@ -126,7 +135,7 @@ const initOptions = () => {
     })
 
     options.series = finalSeriesList
-    options.legend.data = props.legendData as any
+    options.legend.data = Object.values(props.legendData as any)
     options.xAxis.data = props.xAxisData as any
   } else {
     options = {
@@ -141,6 +150,7 @@ const initOptions = () => {
       }
     }
   }
+
   linechart.value.setOption(options, true)
 }
 
@@ -154,16 +164,16 @@ const changeLoading = (state: boolean) => {
 watch(
   () => [props.legendData, props.seriesData, props.xAxisData],
   () => {
+    console.log(props.seriesData)
     initOptions()
-  }
+  },
+  { deep: true }
 )
 
-// 监听加载状态
 watch(
-  () => props.loadingState,
-  (val) => {
-    changeLoading(val)
-    if (!val) initOptions()
+  () => attrs['loading-state'] as boolean,
+  (newval: boolean) => {
+    changeLoading(newval)
   },
   { deep: true }
 )
@@ -172,8 +182,8 @@ onMounted(() => {
   nextTick(() => {
     // 开始的时候,不要去直接初始化,先展示加载状态,等到数据加载完状态改变,再去设置
     linechart.value = echarts.init(chart.value)
-    changeLoading(props.loadingState)
-    if (!props.loadingState) initOptions()
+
+    if (!attrs['loading-state']) initOptions()
 
     /**
      * @description: 只监听window会导致当侧边栏缩放时,dom大小变化但无法resize

+ 53 - 32
src/hooks/useDialog.ts

@@ -1,19 +1,28 @@
+/*
+ * @Author: fxs bjnsfxs@163.com
+ * @Date: 2024-08-21 17:23:32
+ * @LastEditors: fxs bjnsfxs@163.com
+ * @LastEditTime: 2024-09-02 16:22:53
+ * @FilePath: \Game-Backstage-Management-System\src\hooks\useDialog.ts
+ * @Description:
+ *
+ */
 import type { DialogSetting } from '@/types/table'
 import type { FormInstance } from 'element-plus'
 import { useRequest } from './useRequest'
 import axiosInstance from '@/utils/axios/axiosInstance'
-import { ElMessage } from 'element-plus'
+import { ElMessage, ElMessageBox } from 'element-plus'
 import { nextTick } from 'vue'
 import 'element-plus/theme-chalk/el-message.css'
 import 'element-plus/theme-chalk/el-message-box.css'
 
-export function useDialog() {
-  const { analysisResCode } = useRequest()
+const { analysisResCode } = useRequest()
 
+export function useDialog() {
   // 对话框关闭
   const dialogClose = (formEl: FormInstance | undefined, dialogConfig: DialogSetting) => {
     if (!formEl) return
-    console.log('asdas')
+
     dialogConfig.dialogVisible = false
     formEl.resetFields()
   }
@@ -26,38 +35,48 @@ export function useDialog() {
     formData: any
   ) => {
     return new Promise((reslove, reject) => {
-      try {
-        if (!formEl) {
-          reject(new Error('no formEl'))
-          return
-        }
-        formEl.validate(async (valid, field) => {
-          if (valid) {
-            let result = await axiosInstance.post(url, formData)
-            let info = JSON.parse(JSON.stringify(result))
+      ElMessageBox.confirm('确认提交吗?', '警告', {
+        confirmButtonText: '确认',
+        cancelButtonText: '取消',
+        type: 'warning'
+      })
+        .then(() => {
+          try {
+            if (!formEl) {
+              reject(new Error('no formEl'))
+              return
+            }
+            formEl.validate(async (valid, field) => {
+              if (valid) {
+                let result = await axiosInstance.post(url, formData)
+                let info = JSON.parse(JSON.stringify(result))
 
-            analysisResCode(info)
-              .then(() => {
-                dialogConfig.dialogVisible = false
-                reslove(true)
-              })
-              .catch((err) => {
-                reject(err)
-                console.log(err)
-              })
-          } else {
-            console.log(field)
-            console.log('表单校验不通过')
+                analysisResCode(info)
+                  .then(() => {
+                    dialogConfig.dialogVisible = false
+                    reslove(true)
+                  })
+                  .catch((err) => {
+                    reject(err)
+                    console.log(err)
+                  })
+              } else {
+                console.log(field)
+                console.log('表单校验不通过')
+              }
+            })
+          } catch (err) {
+            console.log(err)
+            ElMessage({
+              type: 'error',
+              message: '未知错误'
+            })
+            throw new Error('other err')
           }
         })
-      } catch (err) {
-        console.log(err)
-        ElMessage({
-          type: 'error',
-          message: '未知错误'
+        .catch(() => {
+          reject(false)
         })
-        throw new Error('other err')
-      }
     })
   }
 
@@ -77,6 +96,8 @@ export function useDialog() {
         }
       }
     })
+    console.log(dialogConfig)
+    // throw new Error('test')
   }
 
   const addNeweItem = (dialogConfig: DialogSetting) => {

+ 1 - 1
src/hooks/useRequest.ts

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-20 17:24:06
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-08-31 12:59:30
+ * @LastEditTime: 2024-09-02 15:38:34
  * @FilePath: \Game-Backstage-Management-System\src\hooks\useRequest.ts
  * @Description:
  *

+ 1 - 2
src/types/dataAnalysis.ts

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-23 14:58:29
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-08-30 17:10:35
+ * @LastEditTime: 2024-09-02 15:23:17
  * @FilePath: \Game-Backstage-Management-System\src\types\dataAnalysis.ts
  * @Description:用于dataAnalysis相关组件的type
  *
@@ -66,7 +66,6 @@ export interface OptionsProps {
   xAxisData: Array<any> // x轴的刻度lable
   legendData: Array<any> // 图例的信息
   seriesData: Array<any> // 数据
-  loadingState: boolean // 加载状态
 }
 
 // 返回的数据中每个字段的分类信息

+ 1 - 0
src/views/Home/Analysis/UserTrendView.vue

@@ -260,6 +260,7 @@ const getDetailData = () => {
           })
         }
         detailDataTableData.splice(0, detailDataTableData.length, ...newList)
+        console.log(newList.length)
         detailDataTableInfo.paginationConfig.total = newList.length
       })
     })

+ 3 - 3
src/views/Home/InfoManage/GameManageView.vue

@@ -40,7 +40,7 @@ const paginationConfig: TablePaginationSetting = {
   limit: 15, // 每页展示个数
   currentPage: 1, // 当前页码
   total: 0, // 数据总数
-  pagesizeList: [15, 20], // 页数大小列表
+  pagesizeList: [15, 30], // 页数大小列表
 
   hasLodingData: 0 // 已经加载的数据
 }
@@ -80,12 +80,12 @@ const filedsInfo = reactive<Array<TableFieldInfo>>([
 ])
 
 // 游戏配置对话框设置
-const dialogConfig = {
+const dialogConfig = reactive({
   dialogVisible: false,
   title: '游戏配置',
   formLabelWidth: '150px',
   type: 0 // 0 是新增 1是修改
-}
+})
 
 // 表单校验规则
 const gameFormRule = reactive({

+ 8 - 6
src/views/Home/InfoManage/PlayerManageView.vue

@@ -230,15 +230,17 @@ const blockedPlayer = (row: any) => {
 
 // 游戏配置提交
 const submiteOptionChange = (isEncrypt: boolean = false) => {
+  let option = optionFormData.option
   if (isEncrypt) {
     let message = `${optionFormData.gid}${optionFormData.userId}${optionFormData.pf}`
-    optionFormData.option = CryptoJS.HmacMD5(message, optionFormData.option).toString()
+    option = CryptoJS.HmacMD5(message, optionFormData.option).toString()
   }
-  submitDialog(playerDialogFormRef.value, dialogConfig, AllApi.addOption, optionFormData).then(
-    () => {
-      playerTableRef.value.getData()
-    }
-  )
+  submitDialog(playerDialogFormRef.value, dialogConfig, AllApi.addOption, {
+    ...optionFormData,
+    option
+  }).then(() => {
+    playerTableRef.value.getData()
+  })
 }
 
 watch(

+ 1 - 1
src/views/Home/Overview/OverView.vue

@@ -100,7 +100,7 @@ const periodInfo = reactive<TemporalTrendInfo>({
   ]),
   resDataField: toRaw({
     xAxis: 'today', // x轴的刻度信息所在的字段
-    values: ['yesterday', 'today'] // 值所在的字段
+    values: ['today', 'yesterday'] // 值所在的字段
   }),
   trendTableFields: toRaw({
     index: '时间段',

+ 4 - 1
vite.config.ts

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-20 14:06:49
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-08-31 12:20:29
+ * @LastEditTime: 2024-09-02 16:27:01
  * @FilePath: \Game-Backstage-Management-System\vite.config.ts
  * @Description:
  *
@@ -108,6 +108,9 @@ export default defineConfig({
     }
   },
 
+  esbuild: {
+    drop: ['console', 'debugger']
+  },
   plugins: [
     vue(),
     ViteImageOptimizer(DEFAULT_OPTIONS),