Compare commits

..

25 Commits
main ... dev

Author SHA1 Message Date
RogerWork b8b50efadc 修复查询时间戳的问题 2 weeks ago
RogerWork 2465bb696d 优化座位显示效果 1 month ago
RogerWork 4d9b592ef4 完善redis数据区分环境影院渠道等信息 1 month ago
RogerWork 0a370cd1d0 完成锁座购票的选择项逻辑 2 months ago
RogerWork a74490afd8 基本完成添加券的逻辑,准备开始完成锁座购票的逻辑 2 months ago
RogerWork e8e0b0860f 1. 完成卖品和联名卡接口 3 months ago
RogerWork 024627801f 1. 优化数据更新逻辑,通过时间戳判断数据是否过期 3 months ago
RogerWork aa4d107806 优化重新获取推荐值的逻辑,优化发送按键的处理逻辑 3 months ago
RogerWork 73825303c9 1. 支持xml格式化显示 3 months ago
RogerWork f31a304359 简单修改一下 3 months ago
RogerWork 3ad2bc10a3 增加参数推荐逻辑 3 months ago
RogerWork a928823497 优化反复请求时,清除上次的结果,显示初始值 3 months ago
RogerWork d16ea26dea 优化接口下拉列表支持筛选功能, 修复清空接口时获取到undefined问题,修复keepalive页面跳转报错的问题 3 months ago
RogerWork 15f2edc594 修复非id=1的接口选择时报错的问题 3 months ago
RogerWork 12441cfb0c 修改返回结果显示组件为Vue3AceEditor,增加xml返回值的支持 3 months ago
RogerWork 34c5d2e180 修改返回结果显示组件为Vue3AceEditor,增加xml返回值的支持 3 months ago
RogerWork 56f661fe4d 启用keepalive的页面缓存功能 4 months ago
RogerWork 1a2ba162cf 修复页面切换后回填参数的逻辑错误 4 months ago
RogerWork 97eb387f10 添加回复默认值,和错误参数兼容 4 months ago
RogerWork 16ac0df5b6 基本功能,发送请求和展示结果已完成 4 months ago
RogerWork adbe61b2e9 基本页面差不多了 4 months ago
RogerWork 7c2d423419 修复了点标签报错的问题 4 months ago
RogerWork 2987a25871 代码好像能工作 4 months ago
RogerWork eaaa4286e5 BasicConfig相关代码重构已完成 4 months ago
RogerWork d911bafdfc 电商平台开发代码 5 months ago
  1. 538
      package-lock.json
  2. 3
      package.json
  3. BIN
      public/main.jpeg
  4. 59
      src/VueAceEditor/aceConfig.js
  5. 171
      src/apis/ec_api.js
  6. 2
      src/apis/update.js
  7. 3
      src/components/HelloWorld.vue
  8. 63
      src/components/ec_api/ApiLockBuySelector.vue
  9. 323
      src/components/ec_api/BasicConfig.vue
  10. 186
      src/components/ec_api/CheckQuan.vue
  11. 244
      src/components/ec_api/CinemaGoods.vue
  12. 147
      src/components/ec_api/EcardLevel.vue
  13. 47
      src/components/ec_api/GoodsDiscount.vue
  14. 143
      src/components/ec_api/MovieShow.vue
  15. 117
      src/components/ec_api/PackageSelector.vue
  16. 282
      src/components/ec_api/SeatStatus.vue
  17. 702
      src/components/ec_api/TabArea.vue
  18. 48
      src/components/ec_api/TicketDiscount.vue
  19. 42
      src/components/update/CinemaUpdate.vue
  20. 9
      src/components/update/Tips.vue
  21. 6
      src/layout/components/PageAside.vue
  22. 10
      src/layout/index.vue
  23. 12
      src/main.js
  24. 8
      src/request/config.js
  25. 2
      src/request/index.js
  26. 24
      src/router/index.js
  27. 64
      src/store/index.js
  28. 16
      src/views/ec_api/index.vue
  29. 2
      src/views/update/index.vue
  30. 532
      yarn.lock

538
package-lock.json generated

@ -15,10 +15,12 @@
"element-plus": "^2.4.3", "element-plus": "^2.4.3",
"json-editor-vue3": "^1.0.9", "json-editor-vue3": "^1.0.9",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"sortablejs": "^1.15.2",
"vite-plugin-commonjs": "^0.10.1", "vite-plugin-commonjs": "^0.10.1",
"vue": "^3.3.8", "vue": "^3.3.8",
"vue-router": "^4.0.13", "vue-router": "^4.0.13",
"vuex": "^4.0.2" "vuex": "^4.0.2",
"ws": "^8.16.0"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^4.5.0", "@vitejs/plugin-vue": "^4.5.0",
@ -68,10 +70,26 @@
"vue": "^3.2.0" "vue": "^3.2.0"
} }
}, },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
"integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"aix"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-arm": { "node_modules/@esbuild/android-arm": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
"integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -85,9 +103,9 @@
} }
}, },
"node_modules/@esbuild/android-arm64": { "node_modules/@esbuild/android-arm64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
"integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -101,9 +119,9 @@
} }
}, },
"node_modules/@esbuild/android-x64": { "node_modules/@esbuild/android-x64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
"integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -117,9 +135,9 @@
} }
}, },
"node_modules/@esbuild/darwin-arm64": { "node_modules/@esbuild/darwin-arm64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
"integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -133,9 +151,9 @@
} }
}, },
"node_modules/@esbuild/darwin-x64": { "node_modules/@esbuild/darwin-x64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
"integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -149,9 +167,9 @@
} }
}, },
"node_modules/@esbuild/freebsd-arm64": { "node_modules/@esbuild/freebsd-arm64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
"integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -165,9 +183,9 @@
} }
}, },
"node_modules/@esbuild/freebsd-x64": { "node_modules/@esbuild/freebsd-x64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
"integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -181,9 +199,9 @@
} }
}, },
"node_modules/@esbuild/linux-arm": { "node_modules/@esbuild/linux-arm": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
"integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -197,9 +215,9 @@
} }
}, },
"node_modules/@esbuild/linux-arm64": { "node_modules/@esbuild/linux-arm64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
"integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -213,9 +231,9 @@
} }
}, },
"node_modules/@esbuild/linux-ia32": { "node_modules/@esbuild/linux-ia32": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
"integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@ -244,9 +262,9 @@
} }
}, },
"node_modules/@esbuild/linux-mips64el": { "node_modules/@esbuild/linux-mips64el": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
"integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
"cpu": [ "cpu": [
"mips64el" "mips64el"
], ],
@ -260,9 +278,9 @@
} }
}, },
"node_modules/@esbuild/linux-ppc64": { "node_modules/@esbuild/linux-ppc64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
"integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@ -276,9 +294,9 @@
} }
}, },
"node_modules/@esbuild/linux-riscv64": { "node_modules/@esbuild/linux-riscv64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
"integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@ -292,9 +310,9 @@
} }
}, },
"node_modules/@esbuild/linux-s390x": { "node_modules/@esbuild/linux-s390x": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
"integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@ -308,9 +326,9 @@
} }
}, },
"node_modules/@esbuild/linux-x64": { "node_modules/@esbuild/linux-x64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
"integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -324,9 +342,9 @@
} }
}, },
"node_modules/@esbuild/netbsd-x64": { "node_modules/@esbuild/netbsd-x64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
"integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -340,9 +358,9 @@
} }
}, },
"node_modules/@esbuild/openbsd-x64": { "node_modules/@esbuild/openbsd-x64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
"integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -356,9 +374,9 @@
} }
}, },
"node_modules/@esbuild/sunos-x64": { "node_modules/@esbuild/sunos-x64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
"integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -372,9 +390,9 @@
} }
}, },
"node_modules/@esbuild/win32-arm64": { "node_modules/@esbuild/win32-arm64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
"integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -388,9 +406,9 @@
} }
}, },
"node_modules/@esbuild/win32-ia32": { "node_modules/@esbuild/win32-ia32": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
"integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@ -404,14 +422,13 @@
} }
}, },
"node_modules/@esbuild/win32-x64": { "node_modules/@esbuild/win32-x64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
"integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"win32" "win32"
@ -563,15 +580,209 @@
} }
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
"integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-android-arm64": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
"integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
"integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-darwin-x64": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
"integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
"integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
"integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
"integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
"integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
"integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
"integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
"integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
"cpu": [
"s390x"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
"integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
"integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
"integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
"integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": { "node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.6.1", "version": "4.18.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
"integrity": "sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==", "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"win32" "win32"
@ -887,12 +1098,11 @@
} }
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"license": "MIT",
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@ -1010,12 +1220,11 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/esbuild": { "node_modules/esbuild": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
"integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT",
"bin": { "bin": {
"esbuild": "bin/esbuild" "esbuild": "bin/esbuild"
}, },
@ -1023,28 +1232,29 @@
"node": ">=12" "node": ">=12"
}, },
"optionalDependencies": { "optionalDependencies": {
"@esbuild/android-arm": "0.19.8", "@esbuild/aix-ppc64": "0.20.2",
"@esbuild/android-arm64": "0.19.8", "@esbuild/android-arm": "0.20.2",
"@esbuild/android-x64": "0.19.8", "@esbuild/android-arm64": "0.20.2",
"@esbuild/darwin-arm64": "0.19.8", "@esbuild/android-x64": "0.20.2",
"@esbuild/darwin-x64": "0.19.8", "@esbuild/darwin-arm64": "0.20.2",
"@esbuild/freebsd-arm64": "0.19.8", "@esbuild/darwin-x64": "0.20.2",
"@esbuild/freebsd-x64": "0.19.8", "@esbuild/freebsd-arm64": "0.20.2",
"@esbuild/linux-arm": "0.19.8", "@esbuild/freebsd-x64": "0.20.2",
"@esbuild/linux-arm64": "0.19.8", "@esbuild/linux-arm": "0.20.2",
"@esbuild/linux-ia32": "0.19.8", "@esbuild/linux-arm64": "0.20.2",
"@esbuild/linux-loong64": "0.19.8", "@esbuild/linux-ia32": "0.20.2",
"@esbuild/linux-mips64el": "0.19.8", "@esbuild/linux-loong64": "0.20.2",
"@esbuild/linux-ppc64": "0.19.8", "@esbuild/linux-mips64el": "0.20.2",
"@esbuild/linux-riscv64": "0.19.8", "@esbuild/linux-ppc64": "0.20.2",
"@esbuild/linux-s390x": "0.19.8", "@esbuild/linux-riscv64": "0.20.2",
"@esbuild/linux-x64": "0.19.8", "@esbuild/linux-s390x": "0.20.2",
"@esbuild/netbsd-x64": "0.19.8", "@esbuild/linux-x64": "0.20.2",
"@esbuild/openbsd-x64": "0.19.8", "@esbuild/netbsd-x64": "0.20.2",
"@esbuild/sunos-x64": "0.19.8", "@esbuild/openbsd-x64": "0.20.2",
"@esbuild/win32-arm64": "0.19.8", "@esbuild/sunos-x64": "0.20.2",
"@esbuild/win32-ia32": "0.19.8", "@esbuild/win32-arm64": "0.20.2",
"@esbuild/win32-x64": "0.19.8" "@esbuild/win32-ia32": "0.20.2",
"@esbuild/win32-x64": "0.20.2"
} }
}, },
"node_modules/esbuild-android-64": { "node_modules/esbuild-android-64": {
@ -1348,9 +1558,9 @@
} }
}, },
"node_modules/esbuild/node_modules/@esbuild/linux-loong64": { "node_modules/esbuild/node_modules/@esbuild/linux-loong64": {
"version": "0.19.8", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
"integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
"cpu": [ "cpu": [
"loong64" "loong64"
], ],
@ -1426,10 +1636,9 @@
} }
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"license": "MIT",
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
}, },
@ -1438,16 +1647,15 @@
} }
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.3", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh" "url": "https://github.com/sponsors/RubenVerborgh"
} }
], ],
"license": "MIT",
"engines": { "engines": {
"node": ">=4.0" "node": ">=4.0"
}, },
@ -1471,6 +1679,20 @@
"node": ">= 6" "node": ">= 6"
} }
}, },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/function-bind": { "node_modules/function-bind": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@ -1564,7 +1786,6 @@
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"license": "MIT",
"engines": { "engines": {
"node": ">=0.12.0" "node": ">=0.12.0"
} }
@ -1872,9 +2093,9 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.32", "version": "8.4.38",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
"integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@ -1889,11 +2110,10 @@
"url": "https://github.com/sponsors/ai" "url": "https://github.com/sponsors/ai"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"nanoid": "^3.3.7", "nanoid": "^3.3.7",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
"source-map-js": "^1.0.2" "source-map-js": "^1.2.0"
}, },
"engines": { "engines": {
"node": "^10 || ^12 || >=14" "node": "^10 || ^12 || >=14"
@ -1976,11 +2196,13 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "4.6.1", "version": "4.18.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.6.1.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
"integrity": "sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==", "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
"dev": true, "dev": true,
"license": "MIT", "dependencies": {
"@types/estree": "1.0.5"
},
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
}, },
@ -1989,18 +2211,22 @@
"npm": ">=8.0.0" "npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.6.1", "@rollup/rollup-android-arm-eabi": "4.18.0",
"@rollup/rollup-android-arm64": "4.6.1", "@rollup/rollup-android-arm64": "4.18.0",
"@rollup/rollup-darwin-arm64": "4.6.1", "@rollup/rollup-darwin-arm64": "4.18.0",
"@rollup/rollup-darwin-x64": "4.6.1", "@rollup/rollup-darwin-x64": "4.18.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.6.1", "@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
"@rollup/rollup-linux-arm64-gnu": "4.6.1", "@rollup/rollup-linux-arm-musleabihf": "4.18.0",
"@rollup/rollup-linux-arm64-musl": "4.6.1", "@rollup/rollup-linux-arm64-gnu": "4.18.0",
"@rollup/rollup-linux-x64-gnu": "4.6.1", "@rollup/rollup-linux-arm64-musl": "4.18.0",
"@rollup/rollup-linux-x64-musl": "4.6.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
"@rollup/rollup-win32-arm64-msvc": "4.6.1", "@rollup/rollup-linux-riscv64-gnu": "4.18.0",
"@rollup/rollup-win32-ia32-msvc": "4.6.1", "@rollup/rollup-linux-s390x-gnu": "4.18.0",
"@rollup/rollup-win32-x64-msvc": "4.6.1", "@rollup/rollup-linux-x64-gnu": "4.18.0",
"@rollup/rollup-linux-x64-musl": "4.18.0",
"@rollup/rollup-win32-arm64-msvc": "4.18.0",
"@rollup/rollup-win32-ia32-msvc": "4.18.0",
"@rollup/rollup-win32-x64-msvc": "4.18.0",
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
@ -2052,11 +2278,15 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/sortablejs": {
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz",
"integrity": "sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA=="
},
"node_modules/source-map-js": { "node_modules/source-map-js": {
"version": "1.0.2", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"license": "BSD-3-Clause",
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -2091,7 +2321,6 @@
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"is-number": "^7.0.0" "is-number": "^7.0.0"
}, },
@ -2250,15 +2479,14 @@
} }
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "5.0.6", "version": "5.2.13",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.0.6.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz",
"integrity": "sha512-MD3joyAEBtV7QZPl2JVVUai6zHms3YOmLR+BpMzLlX2Yzjfcc4gTgNi09d/Rua3F4EtC8zdwPU8eQYyib4vVMQ==", "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"esbuild": "^0.19.3", "esbuild": "^0.20.1",
"postcss": "^8.4.32", "postcss": "^8.4.38",
"rollup": "^4.2.0" "rollup": "^4.13.0"
}, },
"bin": { "bin": {
"vite": "bin/vite.js" "vite": "bin/vite.js"
@ -2419,6 +2647,26 @@
"integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
},
"node_modules/ws": {
"version": "8.17.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
"integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
} }
} }
} }

@ -12,13 +12,16 @@
"@element-plus/icons-vue": "^2.3.1", "@element-plus/icons-vue": "^2.3.1",
"@originjs/vite-plugin-commonjs": "^1.0.3", "@originjs/vite-plugin-commonjs": "^1.0.3",
"@types/node": "^20.10.4", "@types/node": "^20.10.4",
"ace-builds": "^1.35.4",
"axios": "^1.6.2", "axios": "^1.6.2",
"element-plus": "^2.4.3", "element-plus": "^2.4.3",
"json-editor-vue3": "^1.0.9", "json-editor-vue3": "^1.0.9",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"sortablejs": "^1.15.2",
"vite-plugin-commonjs": "^0.10.1", "vite-plugin-commonjs": "^0.10.1",
"vue": "^3.3.8", "vue": "^3.3.8",
"vue-router": "^4.0.13", "vue-router": "^4.0.13",
"vue3-ace-editor": "^2.2.4",
"vuex": "^4.0.2", "vuex": "^4.0.2",
"ws": "^8.16.0" "ws": "^8.16.0"
}, },

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

@ -0,0 +1,59 @@
// ace配置,使用动态加载来避免第一次加载开销
import ace from 'ace-builds'
// 导入不同的主题模块,并设置对应 URL
import themeGithubUrl from 'ace-builds/src-noconflict/theme-github?url'
ace.config.setModuleUrl('ace/theme/github', themeGithubUrl)
import themeChromeUrl from 'ace-builds/src-noconflict/theme-chrome?url'
ace.config.setModuleUrl('ace/theme/chrome', themeChromeUrl)
import themeMonokaiUrl from 'ace-builds/src-noconflict/theme-monokai?url'
ace.config.setModuleUrl('ace/theme/monokai', themeMonokaiUrl)
// 导入不同语言的语法模式模块,并设置对应 URL (所有支持的主题和模式:node_modules/ace-builds/src-noconflict)
import modeJsonUrl from 'ace-builds/src-noconflict/mode-json?url'
ace.config.setModuleUrl('ace/mode/json', modeJsonUrl)
import modeJavascriptUrl from 'ace-builds/src-noconflict/mode-javascript?url'
ace.config.setModuleUrl('ace/mode/javascript', modeJavascriptUrl)
import modeHtmlUrl from 'ace-builds/src-noconflict/mode-html?url'
ace.config.setModuleUrl('ace/mode/html', modeHtmlUrl)
import modePythonUrl from 'ace-builds/src-noconflict/mode-python?url'
ace.config.setModuleUrl('ace/mode/yaml', modePythonUrl)
// 用于完成语法检查、代码提示、自动补全等代码编辑功能,必须注册模块 ace/mode/lang _ worker,并设置选项 useWorker: true
import workerBaseUrl from 'ace-builds/src-noconflict/worker-base?url'
ace.config.setModuleUrl('ace/mode/base', workerBaseUrl)
import workerJsonUrl from 'ace-builds/src-noconflict/worker-json?url' // for vite
ace.config.setModuleUrl('ace/mode/json_worker', workerJsonUrl)
import workerJavascriptUrl from 'ace-builds/src-noconflict/worker-javascript?url'
ace.config.setModuleUrl('ace/mode/javascript_worker', workerJavascriptUrl)
import workerHtmlUrl from 'ace-builds/src-noconflict/worker-html?url'
ace.config.setModuleUrl('ace/mode/html_worker', workerHtmlUrl)
// 导入不同语言的代码片段,提供代码自动补全和代码块功能
import snippetsJsonUrl from 'ace-builds/src-noconflict/snippets/json?url'
ace.config.setModuleUrl('ace/snippets/json', snippetsJsonUrl)
import snippetsJsUrl from 'ace-builds/src-noconflict/snippets/javascript?url'
ace.config.setModuleUrl('ace/snippets/javascript', snippetsJsUrl)
import snippetsHtmlUrl from 'ace-builds/src-noconflict/snippets/html?url'
ace.config.setModuleUrl('ace/snippets/html', snippetsHtmlUrl)
import snippetsPyhontUrl from 'ace-builds/src-noconflict/snippets/python?url'
ace.config.setModuleUrl('ace/snippets/javascript', snippetsPyhontUrl)
// 启用自动补全等高级编辑支持,
import extSearchboxUrl from 'ace-builds/src-noconflict/ext-searchbox?url'
ace.config.setModuleUrl('ace/ext/searchbox', extSearchboxUrl)
// 启用自动补全等高级编辑支持
// import 'ace-builds/src-noconflict/ext-language_tools'
// ace.require('ace/ext/language_tools')

@ -0,0 +1,171 @@
import request from "@/request/index.js";
export const get_ec_api_env = () => {
return request({
url: 'ec/get_env',
method: 'get',
})
}
export const get_ec_api_cinema = () => {
return request({
url: 'ec/get_cinema_ids',
method: 'get',
})
}
export const get_ec_api_channel = () => {
return request({
url: 'ec/get_channel',
method: 'get',
})
}
export const get_ec_api_api = (api_type) => {
return request({
url: 'ec/get_api',
method: 'get',
params: {
type: api_type
}
})
}
export const get_ec_api_api_params = (api_id) => {
return request({
url: 'ec/get_api_params',
method: 'get',
params: {
api_id: api_id
}
})
}
export const get_ec_api_api_params_by_type = (api_type) => {
return request({
url: 'ec/get_params_by_type',
method: 'get',
params: {
type: api_type
}
})
}
export const get_ec_api_api_group = (api_type) => {
return request({
url: 'ec/get_api_group',
method: 'get',
params: {
type: api_type
}
})
}
export const get_ec_api_request_url = (req_data) => {
return request({
url: 'ec/get_url',
method: 'post',
data: {
env: req_data.env,
member_type: req_data.type,
api: req_data.api,
params: req_data.params
}
})
}
export const ec_api_send_request = (req_data) => {
return request({
url: 'ec/send_request',
method: 'post',
data: {
env: req_data.env,
member_type: req_data.type,
api: req_data.api,
cid: req_data.cid,
pid: req_data.pid,
params: req_data.params,
}
})
}
export const ec_api_get_suggest = (api_type, api, env, cid, pid, options) => {
let req_params = {
member_type: api_type,
api: api,
env: env,
cid: cid,
pid: pid,
}
console.log('ec_api_get_suggest -- options', options)
if (options) {
req_params['options'] = options
}
return request({
url: 'ec/get_suggest_params',
method: 'get',
params: req_params
})
}
export const ec_api_get_suggest_timestamp = (api_type, api, env, cid, pid, options = null) => {
let req_params = {
member_type: api_type,
api: api,
env: env,
cid: cid,
pid: pid,
}
if (options !== null) {
req_params['options'] = options
}
return request({
url: 'ec/get_suggest_params_timestamp',
method: 'get',
params: req_params
})
}
export const ec_api_set_user_data = (req_data) => {
return request({
url: 'ec/set_user_data',
method: 'post',
data: {
api: req_data.api,
member_type: req_data.member_type,
format: req_data.format,
user_data: req_data.user_data,
env: req_data.env,
cid: req_data.cid,
pid: req_data.pid,
}
})
}
export const ec_api_clear_user_data = (req_data) => {
return request({
url: 'ec/clear_user_data',
method: 'post',
data: {
api: req_data.api,
member_type: req_data.member_type,
env: req_data.env,
cid: req_data.cid,
pid: req_data.pid,
}
})
}
export const get_ec_api_get_quan = (cid, card) => {
return request({
url: 'ec/get_quan',
method: 'get',
params: {
cid: cid,
card_num: card
}
})
}

@ -80,6 +80,6 @@ export const handle_update = (params) => {
url: '/update/update_cine/', url: '/update/update_cine/',
method: 'get', method: 'get',
params: params, params: params,
timeout: 6*60*1000, timeout: 3*60*1000,
}) })
} }

@ -4,7 +4,8 @@
<template> <template>
<div> <div>
<el-text size="large" style="font-size: xxx-large">鼎新工具箱</el-text> <el-text size="large" style="font-size: xxx-large">鼎新工具箱</el-text><br>
<el-image src="/main.jpeg" style="width: 600px"></el-image>
</div> </div>
</template> </template>

@ -0,0 +1,63 @@
<script setup>
import {ref, watch} from 'vue'
//
const selectSaleType = ref('ticket')
const selectPayType = ref('cash')
// emits
const emits = defineEmits(["getSaleType", "getPayType"])
//
watch( ()=>selectSaleType.value, ()=>{
emits("getSaleType", selectSaleType.value)
})
//
watch( ()=>selectPayType.value, ()=>{
emits("getPayType", selectPayType.value)
})
</script>
<template>
<el-row type="flex" justify="start" align="middle" style="margin: 20px 0 10px 20px">
<el-col :span="1" style="font-size: 14px; font-weight: bold; color: #919399;" class="col-right">售卖类型</el-col>
<el-col :span="6" class="col-left">
<el-radio-group v-model="selectSaleType">
<el-radio label="ticket">单影票</el-radio>
<el-radio label="goods">单卖品</el-radio>
<el-radio label="all">影票加卖品</el-radio>
</el-radio-group>
</el-col>
</el-row>
<el-row type="flex" justify="start" align="middle" style="margin: 0 0 30px 20px">
<el-col :span="1" style="font-size: 14px; font-weight: bold; color: #919399;" class="col-right">支付方式</el-col>
<el-col :span="7" class="col-left">
<el-radio-group v-model="selectPayType">
<el-radio label="cash">普通支付</el-radio>
<el-radio label="ecard">联名卡</el-radio>
<el-radio label="yushouquan">扫码券</el-radio>
<el-radio label="equan">会员卡赠券</el-radio>
</el-radio-group>
</el-col>
</el-row>
</template>
<style scoped>
.col-right {
display: flex;
justify-content: end;
align-items: center;
height: 100%;
}
.col-left {
display: flex;
justify-content: start;
align-items: center;
height: 100%;
margin-left: 20px;
}
</style>

@ -0,0 +1,323 @@
<script setup>
import {
get_ec_api_env,
get_ec_api_cinema,
get_ec_api_channel,
get_ec_api_api,
get_ec_api_api_group,
get_ec_api_api_params,
get_ec_api_api_params_by_type
} from "@/apis/ec_api.js";
import {ref, reactive, toRefs} from "vue";
import {onMounted} from "vue";
import {useStore} from "vuex";
import {change_cinema_user} from "@/apis/update.js";
// store
const store = useStore()
//
const Env = ref({})
const EnvArray = ref([])
const SelectEnv = ref('')
//
const Cinema = ref({})
let CinemaByEnv = ref([])
const SelectCinema = ref('')
//
const ApiType = ref([{name: "非会员", value: "nonmember"}, {name: "会员", value: "member"}])
const SelectType = ref('')
//
const Channel = ref({})
let ChannelByType = ref([])
const SelectChannel = ref('')
//
const Api = ref([]) //
const SelectApiId = ref([]) //
const SelectApi = ref([]) //
//
const ApiGroup = ref({})
const SelectApiGroup = ref([])
//
const ApiParams = ref({})
const SelectApiParams = ref({})
//
function env_on_change() {
//
CinemaByEnv.value = []
SelectCinema.value = ''
SelectType.value = ''
SelectChannel.value = ''
//
Cinema.value.forEach(data => {
if (data.env === SelectEnv.value) {
CinemaByEnv.value.push(data)
}
})
}
//
function type_on_change() {
//
ChannelByType.value = []
SelectChannel.value = ''
SelectApiId.value = []
SelectApiGroup.value = []
//
Channel.value.forEach(data => {
if (data.type === SelectType.value && data.env === SelectEnv.value) {
ChannelByType.value.push(data)
}
})
//
get_api_group_by_type(SelectType.value)
//
get_api_by_type(SelectType.value)
//
get_api_params_by_type(SelectType.value)
}
function basic_info_change() {
store_data()
}
//
async function get_api_env() {
await get_ec_api_env().then(res => {
Env.value = res
Env.value.forEach(data => {
if (!EnvArray.value.some(item => item.name === data.name)) {
EnvArray.value.push({name: data.name, code: data.code})
}
})
});
}
//
async function get_api_cinema() {
get_ec_api_cinema().then(res => {
Cinema.value = res
})
}
//
async function get_api_channel() {
await get_ec_api_channel().then(res => {
Channel.value = res
})
}
//
async function get_api_by_type(api_type) {
await get_ec_api_api(api_type).then(res => {
Api.value = res
})
}
//
async function get_api_group_by_type(api_type) {
await get_ec_api_api_group(api_type).then(res => {
ApiGroup.value = res
})
}
//
async function get_api_params_by_type(api_type) {
await get_ec_api_api_params_by_type(api_type).then(res => {
ApiParams.value = res
})
}
// OnChange
//
function api_group_on_change() {
SelectApiId.value = JSON.parse(String(SelectApiGroup.value))
handle_api_data()
store_data()
}
//
function api_on_change() {
SelectApiGroup.value = []
handle_api_data()
store_data()
}
function handle_api_data() {
// api
SelectApi.value = []
SelectApiId.value.forEach(api_id => {
Api.value.forEach(api => {
if (api.id === api_id) {
SelectApi.value.push(api)
}
})
})
// first_tab_api
store.state.ecApiModule.first_tab_api_id = SelectApi.value[0] ? SelectApi.value[0]['id'] : 0
// api
SelectApiId.value.forEach(api_id => {
if (ApiParams.value.hasOwnProperty(api_id)) {
SelectApiParams.value[api_id] = ApiParams.value[api_id]
SelectApiParams.value[api_id].forEach(item => item['is_preset'] = true)
}
})
}
//
function store_data() {
let select_data = ref({
env: SelectEnv.value,
cinema: SelectCinema.value,
channel: SelectChannel.value,
select_api_id: SelectApiId.value,
type: SelectType.value,
api_group: SelectApiGroup.value,
cinema_env: CinemaByEnv.value,
channel_type: ChannelByType.value,
select_api: SelectApi.value,
api: SelectApi.value,
api_params: SelectApiParams.value
})
// store
store.commit('ecApiModule/add_ec_api_data', select_data.value)
store.commit('ecApiModule/change_ec_select_api', SelectApi.value)
}
onMounted(() => {
console.log('onMounted BasicConfig')
SelectType.value = store.state.ecApiModule.ec_api_data.type
//
get_api_env()
//
get_api_cinema()
//
get_api_channel()
//
get_api_group_by_type(SelectType.value)
//
get_api_by_type(SelectType.value)
//
get_api_params_by_type(SelectType.value)
})
</script>
<template>
<div class="row-container">
<el-row justify="start">
<el-col :span="6">
<label class="name-label">环境</label>
<el-select v-model="SelectEnv" placeholder="请选择" style="width: 240px" size="default"
@change="env_on_change">
<el-option
v-for="item in EnvArray"
:key="item.code"
:label="item.name"
:value="item.code"
>
</el-option>
</el-select>
</el-col>
<el-col :span="5">
<label class="name-label">影院</label>
<el-select v-model="SelectCinema" placeholder="请选择" style="width: 160px" size="default"
@change="basic_info_change">
<el-option
v-for="item in CinemaByEnv"
:key="item.id"
:label="item.cinema_name"
:value="item.cid"
>
</el-option>
</el-select>
</el-col>
<el-col :span="5">
<label class="name-label">接口类型</label>
<el-select v-model="SelectType" placeholder="请选择" style="width: 120px" size="default"
@change="type_on_change">
<el-option
v-for="item in ApiType"
:key="item.value"
:label="item.name"
:value="item.value"
>
</el-option>
</el-select>
</el-col>
<el-col :span="5">
<label class="name-label">渠道</label>
<el-select v-model="SelectChannel" placeholder="请选择" style="width: 160px" size="default"
@change="basic_info_change">
<el-option
v-for="item in ChannelByType"
:key="item.id"
:label="item.name"
:value="item.pid"
>
</el-option>
</el-select>
</el-col>
</el-row>
</div>
<div class="row-container">
<el-row justify="start">
<el-col :span="6">
<label class="name-label">常用场景</label>
<el-select v-model="SelectApiGroup" placeholder="请选择" style="width: 240px" size="default"
@change="api_group_on_change">
<el-option
v-for="item in ApiGroup"
:key="item.group_id"
:label="item.name"
:value="item.api_id"
>
</el-option>
</el-select>
</el-col>
</el-row>
</div>
<div class="row-container">
<el-row justify="start">
<el-col :span="6">
<label class="name-label">接口</label>
<el-select v-model="SelectApiId" placeholder="请选择" style="width: 240px" size="default" multiple collapse-tags filterable
collapse-tags-tooltip :clearable="true" @change="api_on_change">
<el-option
v-for="item in Api"
:key="item.id"
:label="item.description"
:value="item.id"
>
</el-option>
</el-select>
</el-col>
</el-row>
</div>
</template>
<style scoped>
.row-container {
margin-bottom: 20px;
}
.name-label {
width: 80px;
display: inline-block;
text-align: right;
}
</style>

@ -0,0 +1,186 @@
<script setup>
import {ref, watch, onBeforeMount} from 'vue'
import {get_ec_api_get_quan} from "@/apis/ec_api.js";
// props
const props = defineProps(['cid'])
// emits
const emits = defineEmits(['getQuan', 'getSaleType'])
//
const quan_type = ref('yushouquan')
//
const quanArray = ref([])
const selectQuan = ref([])
//
const cardNum = ref('')
const cardQuanArray = ref([])
const selectCardQuan = ref()
const selectCardQuanArray = ref([])
const useCardQuanNum = ref(1)
const useCardQuanNumMax = ref(1)
const allSelectCardQuan = ref([])
//
const selectSaleType = ref('ticket')
//
async function get_quan() {
console.log('get_quan')
await get_ec_api_get_quan(props.cid, cardNum.value).then(
res => {
quanArray.value = res.quan
cardQuanArray.value = res.card_quan
cardQuanArray.value.forEach(item => {
item['label'] = item['cinema_quan_name'] + ' 可用数量' + item['quan_remain_nums']
})
console.log('quanArray.value', quanArray.value)
console.log('cardQuanArray.value', cardQuanArray.value)
}
).catch(
err => {
console.log(err)
}
)
}
//
function get_card_quan() {
if (cardNum.value === '') {
alert('请输入卡号后查询!')
return
}
get_quan()
}
//
function add_card_quan() {
cardQuanArray.value.forEach(item => {
if (item['card_quan_order_id'] === selectCardQuan.value) {
if (selectCardQuanArray.value.indexOf(selectCardQuan.value) < 0) {
allSelectCardQuan.value.push(
{
'card_num': cardNum.value,
'card_coupon_order_id': selectCardQuan.value,
'num': useCardQuanNum.value
}
)
selectCardQuanArray.value.push(selectCardQuan.value)
}else{
alert('此卡券已添加请选择其他卡券!')
}
}
})
console.log('allSelectCardQuan.value', allSelectCardQuan.value)
console.log('checkQuan-')
emits('getQuan', selectQuan.value, allSelectCardQuan.value, quan_type.value)
}
function clear_card_quan() {
allSelectCardQuan.value = []
selectCardQuanArray.value = []
emits('getQuan', selectQuan.value, allSelectCardQuan.value, quan_type.value)
}
onBeforeMount(() => {
get_quan()
})
//
watch(() => selectQuan.value, () => {
console.log('selectQuan', selectQuan.value)
console.log('selectSaleType.value', selectSaleType.value)
emits('getQuan', selectQuan.value, allSelectCardQuan.value, quan_type.value)
})
//
watch(() => selectCardQuan.value, () => {
cardQuanArray.value.forEach(item => {
if (item['card_quan_order_id'] === selectCardQuan.value) {
useCardQuanNumMax.value = item['quan_remain_nums']
}
})
})
watch( ()=>selectSaleType.value, () => {
emits('getSaleType', selectSaleType.value)
})
//
function test() {
console.log('selectCardQuan', selectCardQuan.value)
}
</script>
<template>
<div>
<el-row type="flex" justify="start" align="middle" style="margin-left: 20px">
<el-col :span="1" style="font-size: 14px; font-weight: bold; color: #919399;" class="col-right">售卖类型</el-col>
<el-col :span="5" class="col-left">
<el-radio-group v-model="selectSaleType">
<el-radio label="ticket">单影票</el-radio>
<el-radio label="goods">单卖品</el-radio>
<el-radio label="all">影票加卖品</el-radio>
</el-radio-group>
</el-col>
</el-row>
<el-row type="flex" justify="start" align="middle" style="margin: 20px 0 0 20px">
<el-col :span="1" style="font-size: 14px; font-weight: bold; color: #919399;" class="col-right">券类型</el-col>
<el-col :span="5" class="col-left">
<el-radio-group v-model="quan_type" @change="test">
<el-radio label="yushouquan">扫码券</el-radio>
<el-radio label="equan">会员卡赠券</el-radio>
</el-radio-group>
</el-col>
</el-row>
<el-row v-if="quan_type==='yushouquan'" style="margin: 20px 0 30px 100px">
<el-select-v2
v-model="selectQuan"
filterable
:options="quanArray"
placeholder="选择券,可多选"
multiple
clearable="clearable"
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="2"
style="width: 460px"
/>
</el-row>
<el-row v-if="quan_type==='equan'" style="margin: 20px 0 30px 100px">
<el-input style="width: 240px; margin-right: 20px" v-model="cardNum"></el-input>
<el-button style="margin-right: 20px" @click="get_card_quan">查找</el-button>
<el-select v-model="selectCardQuan" placeholder="选择卡内赠券"
clearable="clearable" style="margin-right: 20px">
<el-option v-for="item in cardQuanArray" :key="item['card_quan_order_id']" :label="item['label']"
:value="item['card_quan_order_id']">
{{ item['label'] }}
</el-option>
</el-select>
<el-input-number v-model="useCardQuanNum" :min="1" :max="useCardQuanNumMax"
style="margin-right: 20px"></el-input-number>
<el-button @click="add_card_quan">追加</el-button>
<el-button @click="clear_card_quan">重选</el-button>
</el-row>
</div>
</template>
<style scoped>
.col-right {
display: flex;
justify-content: end;
align-items: center;
height: 100%;
}
.col-left {
display: flex;
justify-content: start;
align-items: center;
height: 100%;
margin-left: 20px;
}
</style>

@ -0,0 +1,244 @@
<script setup>
import {ref, reactive, computed, watch, onMounted, onBeforeMount} from 'vue'
import {ec_api_set_user_data, ec_api_clear_user_data} from '@/apis/ec_api.js'
import {ElMessage} from "element-plus";
import PackageSelector from "@/components/ec_api/PackageSelector.vue";
import GoodsDiscount from "@/components/ec_api/GoodsDiscount.vue";
// TabArea
const props = defineProps(['goods', 'data', 'base_info'])
//
const selectGoods = ref([])
const goodsList = reactive([])
//
const goodsDialogVisible = ref(false)
const optionalPackageInfo = ref({})
//
const discountDialogVisible = ref(false)
const discountDetail = ref({})
//
async function handle_set_user_data() {
let selectGoodsData = []
props.goods.forEach((item) => {
selectGoods.value.forEach((select) => {
if (select['id'] === item['id']) {
selectGoodsData.push(select)
}
}
)
})
const req_data = {
api: props.data.path,
member_type: props.data.type,
format: props.data.format,
user_data: JSON.stringify(selectGoodsData),
env: props.base_info.env,
cid: props.base_info.cinema,
pid: props.base_info.channel,
}
console.log('handle_set_user_data', req_data)
await ec_api_set_user_data(req_data).then(
(req) => {
if (req['result'] === 'success') {
ElMessage({message: '选择的卖品已做为后续测试数据!', type: 'success'})
} else {
ElMessage({message: '设置用户选择卖品数据失败!', type: 'error'})
}
}
).catch(
(err) => {
console.log(err)
ElMessage({message: '设置用户选择卖品数据失败!', type: 'error'})
}
)
}
//
async function handle_clear_user_data() {
const req_data = {
api: props.data.path,
member_type: props.data.type,
env: props.base_info.env,
cid: props.base_info.cinema,
pid: props.base_info.channel,
}
console.log('handle_clear_user_data', req_data)
await ec_api_clear_user_data(req_data).then(
(req) => {
if (req['result'] === 'success') {
clearLocalData()
ElMessage({message: '选择的卖品已清除,推荐参数将使用随机值!', type: 'success'})
} else {
ElMessage({message: '清除用户选择卖品数据失败!', type: 'error'})
}
}
).catch(
(err) => {
console.log(err)
ElMessage({message: '清除用户选择卖品数据失败!', type: 'error'})
}
)
}
//
function openOptionalPackageDialog(goods_type, goods_info) {
if (goods_type === '可选套餐') {
goodsDialogVisible.value = true
optionalPackageInfo.value = goods_info
console.log('可选套餐弹窗')
}
}
//
function numChange(goods_id, goods_num) {
selectGoods.value.forEach((goods) => {
if (goods.id === goods_id) {
goods['buy_num'] = goods_num
}
})
handle_set_user_data()
}
function clearLocalData() {
selectGoods.value = []
}
//
const getOptionalPackageDetail = (select) => {
console.log('getOptionalPackageDetail', select)
goodsDialogVisible.value = false
selectGoods.value.forEach((item) => {
if (item.id === select.id) {
item['user_select'] = select['user_select']
}
})
handle_set_user_data()
}
//
const getDiscountDetail = (discount) => {
console.log('getDiscountDetail', discount)
discountDialogVisible.value = false
discount.forEach((item) => {
selectGoods.value.forEach((select) => {
if (select.id === discount.id) {
select.discount1 = item.discount1
select.discount2 = item.discount2
}
})
})
console.log('getDiscountDetail-selectGoods.value', selectGoods.value)
handle_set_user_data()
}
onBeforeMount(() => {
//
props.goods.forEach((item) => {
//
item['show_name'] = item['id'] + ' ' + item['name']
//
if (item['type'] === 'package') {
item['show_type'] = item['packageType'] === '2' ? '可选套餐' : '固定套餐'
item['show_selector'] = item['packageType'] === '2'
} else {
item['show_type'] = '单品'
item['show_selector'] = false
}
//
if (item.hasOwnProperty('partnerPrice') && item['partnerPrice'] !== null) {
item['final_price'] = parseFloat(item['partnerPrice']).toFixed(2)
item['show_price'] = '合作商价:' + item['partnerPrice']
} else {
item['final_price'] = parseFloat(item['onlinePrice']).toFixed(2)
item['show_price'] = '网售价:' + item['onlinePrice']
}
//
item['buy_num'] = 1
item['is_select'] = false
//
item['discount1'] = 0
item['discount2'] = 0
goodsList.push(item)
})
})
watch(() => selectGoods.value, () => {
console.log('selectGoods.value', selectGoods.value)
handle_set_user_data()
})
</script>
<template>
<hr id="break_line"/>
<div style="font-size: 16px; font-weight: bold; color: #909399; text-align: left; margin-bottom: 10px">选择卖品
<el-button size="small" type="primary" @click="discountDialogVisible=true">设置卖品折扣</el-button>
<el-tooltip
class="box-item"
effect="dark"
content="点击清除选择后会将后台服务器中记录的选择内容清空,其他接口将通过随机获取的方式从此接口返回的数据中模拟参数"
placement="right"
>
<el-button size="small" style="font-weight: bold;color: #909399" @click="handle_clear_user_data">清除选择
</el-button>
</el-tooltip>
</div>
<el-form style="max-width: 1000px; margin-left: 20px">
<el-form-item>
<el-checkbox-group v-model="selectGoods">
<el-row v-for="g in goodsList" style="width: 1000px">
<el-col :span="5">
<el-checkbox-button :label="g" :value="g.id" :key="g.id"
@change="openOptionalPackageDialog(g.show_type, g)">
<div style="margin-top: 5px"><span style="font-weight: bold">{{ g.show_name }}</span></div>
<div style="margin-top: 5px"><span>{{ g.show_price }}</span>&nbsp&nbsp<span
style="font-weight: bold">{{ g.show_type }}</span></div>
</el-checkbox-button>
</el-col>
<el-col :span="6">
<el-input-number v-model="g['buy_num']" :min="0" style="margin-top: 15px"
:disabled="g['is_select']" @change="numChange(g.id, g['buy_num'])"></el-input-number>
</el-col>
</el-row>
</el-checkbox-group>
</el-form-item>
</el-form>
<PackageSelector v-if="goodsDialogVisible" @get_detail="getOptionalPackageDetail" :is_show="goodsDialogVisible"
:package="optionalPackageInfo"></PackageSelector>
<GoodsDiscount v-if="discountDialogVisible" @get_discount="getDiscountDetail" :is_show="discountDialogVisible"
:goods_array="selectGoods"></GoodsDiscount>
</template>
<style scoped>
#break_line {
margin-top: 30px;
margin-bottom: 30px;
background-color: rgba(144, 147, 153, 0.5);
height: 1px;
border: none
}
:deep(.el-checkbox-button) {
margin-bottom: 10px;
margin-right: 15px;
}
:deep(.el-checkbox-button__inner) {
width: 450px;
height: 60px;
background: #ebebeb;
color: #333;
border: 0 !important;
border-radius: 10px !important;
text-align: left;
}
</style>

@ -0,0 +1,147 @@
<script setup>
import {ref, reactive, computed, watch, onMounted, onBeforeMount} from 'vue'
import {ec_api_set_user_data, ec_api_clear_user_data} from '@/apis/ec_api.js'
import {ElMessage} from "element-plus";
// TabArea
const props = defineProps(['level', 'data', 'base_info'])
//
const selectLevel = ref('')
const levelList = reactive([])
//
async function handle_set_user_data() {
let selectLevelData = {}
props.level.forEach((item) => {
if (item['ecardLevelNo'] === selectLevel.value) {
selectLevelData = item
}
})
const req_data = {
api: props.data.path,
member_type: props.data.type,
format: props.data.format,
user_data: JSON.stringify(selectLevelData),
env: props.base_info.env,
cid: props.base_info.cinema,
pid: props.base_info.channel,
}
console.log('handle_set_user_data', req_data)
await ec_api_set_user_data(req_data).then(
(req) => {
if (req['result'] === 'success') {
ElMessage({message: '选择的联名卡级别已做为后续测试数据!', type: 'success'})
} else {
ElMessage({message: '设置用户选择联名卡级别数据失败!', type: 'error'})
}
}
).catch(
(err) => {
console.log(err)
ElMessage({message: '设置用户选择联名卡级别数据失败!', type: 'error'})
}
)
}
async function handle_clear_user_data() {
const req_data = {
api: props.data.path,
member_type: props.data.type,
env: props.base_info.env,
cid: props.base_info.cinema,
pid: props.base_info.channel,
}
console.log('handle_clear_user_data', req_data)
await ec_api_clear_user_data(req_data).then(
(req) => {
if (req['result'] === 'success') {
ElMessage({message: '选择的联名卡级别已清除,推荐参数将使用随机值!', type: 'success'})
} else {
ElMessage({message: '清除用户选择联名卡级别数据失败!', type: 'error'})
}
}
).catch(
(err) => {
console.log(err)
ElMessage({message: '清除用户选择联名卡级别数据失败!', type: 'error'})
}
)
}
onBeforeMount(() => {
console.log('EcardLevel onBeforeMount')
//
props.level.forEach((item) => {
levelList.push({
key: item['ecardLevelNo'],
name: item['ecardLevelName'],
fee: item['registerFee'],
available: item['status'] === '1' ? '有效' : '无效',
renew: item['allowRenew'] === '2' ? '不可续费' : `可续费 续费${item['renewFee']}`,
data: item
})
})
})
watch(() => selectLevel.value, () => {
console.log('selectLevel.value', selectLevel.value)
handle_set_user_data()
})
</script>
<template>
<hr id="break_line"/>
<div style="font-size: 16px; font-weight: bold; color: #909399; text-align: left; margin-bottom: 10px">选择场次
<el-tooltip
class="box-item"
effect="dark"
content="点击清除选择后会将后台服务器中记录的选择内容清空,其他接口将通过随机获取的方式从此接口返回的数据中模拟参数"
placement="right"
>
<el-button size="small" style="font-weight: bold;color: #909399" @click="handle_clear_user_data">清除选择
</el-button>
</el-tooltip>
</div>
<el-form style="max-width: 600px; margin-left: 20px">
<el-form-item>
<el-radio-group v-model="selectLevel">
<el-radio-button v-for="s in levelList" :label="s.key" :value="s.key" :key="s.key" :disabled="s.available === '无效'">
<div style="text-align: left">
<div style="margin-top: 5px"><span>{{ s.key }}</span> -- <span style="font-weight: bold">{{ s.name }}</span> -- <span>{{s.available}}</span>
</div>
<div style="margin-top: 5px"><span>开卡费 {{ s.fee }} </span><span>&nbsp&nbsp&nbsp&nbsp{{s.renew}}</span></div>
</div>
</el-radio-button>
</el-radio-group>
</el-form-item>
</el-form>
</template>
<style scoped>
#break_line {
margin-top: 30px;
margin-bottom: 30px;
background-color: rgba(144, 147, 153, 0.5);
height: 1px;
border: none
}
:deep(.el-radio-button) {
margin-bottom: 10px;
margin-right: 15px;
}
:deep(.el-radio-button__inner) {
width: 400px;
height: 60px;
background: #ebebeb;
color: #333;
border: 0 !important;
border-radius: 10px !important;
}
</style>

@ -0,0 +1,47 @@
<script setup>
const props = defineProps(['is_show', 'goods_array'])
const emits = defineEmits(['get_discount'])
function finish() {
const discount_goods = []
props.goods_array.forEach((goods) => {
if (goods.discount1 !== 0 || goods.discount2 !== 0) {
discount_goods.push(goods)
}
})
emits('get_discount', discount_goods)
}
</script>
<template>
<el-dialog v-model="props.is_show" :width="900">
<div style="text-align: left; margin-left: 20px">
<span style="font-weight: bold;">输入卖品折扣</span>&nbsp&nbsp
<span style="font-size: 12px">如果不设置则表示没有三方折扣最多允许设置两组折扣</span>
</div>
<div>
<el-row v-for="goods in props.goods_array" :key="goods.id" style="margin: 10px 0 0 80px">
<el-col :span="9" style="text-align: left"><span>{{ goods.id }}</span>&nbsp&nbsp<span>{{ goods.name }}</span>&nbsp&nbsp<span>{{
goods.final_price
}}</span></el-col>
<el-col :span="12">输入卖品三方折扣&nbsp&nbsp
<el-input-number :min="0" :max="parseFloat(goods.final_price)" :precision="2" size="small" :step="0.01"
v-model="goods.discount1"></el-input-number>
&nbsp
<el-input-number :min="0" :max="parseFloat(goods.final_price)" :precision="2" size="small" :step="0.01"
v-model="goods.discount2"></el-input-number>
</el-col>
</el-row>
</div>
<div v-if="props.goods_array.length === 0" style="font-size: 20px; margin-top: 50px; color: #909399">暂无数据</div>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="finish">完成</el-button>
</div>
</template>
</el-dialog>
</template>
<style scoped>
</style>

@ -0,0 +1,143 @@
<script setup>
import {ref, reactive, computed, watch, onMounted, onBeforeMount} from 'vue'
import {ec_api_set_user_data, ec_api_clear_user_data} from '@/apis/ec_api.js'
import {ElMessage} from "element-plus";
// TabArea
const props = defineProps(['show', 'data', 'base_info'])
//
const selectShow = ref('')
const showList = reactive([])
//
async function handle_set_user_data() {
let selectShowData = {}
props.show.forEach((item)=> {
if (item['id'] === selectShow.value) {
selectShowData = item
}
})
const req_data = {
api: props.data.path,
member_type: props.data.type,
format: props.data.format,
user_data: JSON.stringify(selectShowData),
env: props.base_info.env,
cid: props.base_info.cinema,
pid: props.base_info.channel,
}
console.log('handle_set_user_data', req_data)
await ec_api_set_user_data(req_data).then(
(req) => {
if (req['result'] === 'success') {
ElMessage({message: '选择的场次已做为后续测试数据!', type: 'success'})
} else {
ElMessage({message: '设置用户选择场次数据失败!', type: 'error'})
}
}
).catch(
(err) => {
console.log(err)
ElMessage({message: '设置用户选择场次数据失败!', type: 'error'})
}
)
}
async function handle_clear_user_data() {
const req_data = {
api: props.data.path,
member_type: props.data.type,
env: props.base_info.env,
cid: props.base_info.cinema,
pid: props.base_info.channel,
}
console.log('handle_clear_user_data', req_data)
await ec_api_clear_user_data(req_data).then(
(req) => {
if (req['result'] === 'success') {
ElMessage({message: '选择的场次已清除,推荐参数将使用随机值!', type: 'success'})
} else {
ElMessage({message: '清除用户选择场次数据失败!', type: 'error'})
}
}
).catch(
(err) => {
console.log(err)
ElMessage({message: '清除用户选择场次数据失败!', type: 'error'})
}
)
}
onBeforeMount(() => {
//
props.show.forEach((item) => {
showList.push({
key: item.id,
start: item['startTime'],
name: item['movieInfo'][0]['movieName'],
hall: item['hallName'],
data: item
})
})
})
watch(() => selectShow.value, () => {
console.log('selectShow.value', selectShow.value)
handle_set_user_data()
})
</script>
<template>
<hr id="break_line"/>
<div style="font-size: 16px; font-weight: bold; color: #909399; text-align: left; margin-bottom: 10px">选择场次
<el-tooltip
class="box-item"
effect="dark"
content="点击清除选择后会将后台服务器中记录的选择内容清空,其他接口将通过随机获取的方式从此接口返回的数据中模拟参数"
placement="right"
>
<el-button size="small" style="font-weight: bold;color: #909399" @click="handle_clear_user_data">清除选择</el-button>
</el-tooltip>
</div>
<el-form style="max-width: 600px; margin-left: 20px">
<el-form-item>
<el-radio-group v-model="selectShow">
<el-radio-button v-for="s in showList" :label="s.key" :value="s.key" :key="s.key">
<div style="text-align: left">
<span>{{ s.key }}</span> -- <span style="font-weight: bold">{{ s.name }}</span><br>
<span>{{ s.start }}</span><br><span>{{ s.hall }}</span>
</div>
</el-radio-button>
</el-radio-group>
</el-form-item>
</el-form>
</template>
<style scoped>
#break_line {
margin-top: 30px;
margin-bottom: 30px;
background-color: rgba(144, 147, 153, 0.5);
height: 1px;
border: none
}
:deep(.el-radio-button) {
margin-bottom: 10px;
margin-right: 15px;
}
:deep(.el-radio-button__inner) {
width: 400px;
height: 60px;
background: #ebebeb;
color: #333;
border: 0 !important;
border-radius: 10px !important;
}
</style>

@ -0,0 +1,117 @@
<script setup>
import {ref, onBeforeMount, computed, watch} from "vue";
//
const groupArray = ref([]) //
const activeGroup = ref(1) //
const selectGoods = ref({}) //
// props
const props = defineProps(['is_show', 'package'])
const packageDetail = props.package['optionalPackageDetail']
// emit
const emit = defineEmits(['get_detail'])
//
function addGoods(goods) {
if (selectGoods.value[activeGroup.value].data.length < selectGoods.value[activeGroup.value].num) {
selectGoods.value[activeGroup.value]['data'].push(goods)
selectGoods.value[activeGroup.value]['result'] = selectGoods.value[activeGroup.value]['data'].map((item) => item.name).join(', ')
} else {
alert('分组下卖品已完成选择!')
}
}
//
function reselect() {
selectGoods.value[activeGroup.value]['data'] = []
selectGoods.value[activeGroup.value]['result'] = ''
}
//
function checkResult() {
const failedGroup = []
Object.entries(selectGoods.value).forEach((group) => {
if (group[1].num !== group[1].data.length) {
failedGroup.push(group[0])
}
}
)
if (failedGroup.length > 0) {
alert(`分组${failedGroup.join(', ')}中含有未完成的选择!`)
return false
}
return true
}
//
function finish() {
if (checkResult()) {
props.package['user_select'] = selectGoods.value
emit('get_detail', props.package)
}
}
//
function beforeClose(done) {
if (!checkResult()) {
return false
}else{
return done(true)
}
}
//
onBeforeMount(() => {
console.log('PackageSelector onBeforeMount')
//
packageDetail.forEach((group) => {
// jsonintxmlstring
group.index = typeof group.index === "string" ? parseInt(group.index) : group.index
group.gnum = typeof group.gnum === "string" ? parseInt(group.gnum) : group.gnum
//
groupArray.value.push(group)
selectGoods.value[group['index']] = {
'num': group['gnum'],
'data': [],
'result': ''
}
//
if (group['members'].length === 1) {
for (let i = 0; i < selectGoods.value[group['index']]['num']; i++) {
selectGoods.value[group['index']]['data'].push(group['members'][0])
selectGoods.value[group['index']]['result'] = selectGoods.value[group['index']]['data'].map((item) => item.name).join(', ')
}
}
})
})
</script>
<template>
<el-dialog v-model="props.is_show" :width="500" @close="finish" :before-close="beforeClose">
<el-tabs v-model="activeGroup" type="border-card">
<el-tab-pane v-for="group in groupArray" :label="`分组${group['index']}`" :name="group['index']">
<div style="text-align: left; font-weight: bold">需要选择{{ group['gnum'] }}个卖品
<el-button @click="reselect" size="small">重选</el-button>
</div>
<div style="text-align: left; font-weight: bold; margin-top: 10px">
<span :key="group['index']">已选择{{ selectGoods[group['index']].result }}</span>
</div>
<div v-for="item in group['members']" style="margin-top: 10px">
<el-button @click="addGoods(item)">{{ item['name'] }} 附加费 {{ item['addPrice'] }}</el-button>
</div>
</el-tab-pane>
</el-tabs>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="finish">完成</el-button>
</div>
</template>
</el-dialog>
</template>
<style scoped>
</style>

@ -0,0 +1,282 @@
<script setup>
import {ref, reactive, computed, watch, onMounted, onBeforeMount} from 'vue'
import {ec_api_set_user_data, ec_api_clear_user_data} from '@/apis/ec_api.js'
import {ElMessage} from "element-plus";
import TicketDiscount from "@/components/ec_api/TicketDiscount.vue";
// TabArea
const props = defineProps(['seat', 'data', 'base_info'])
//
const selectSeats = ref([])
const seatList = reactive({})
const row_x = ref(0)
const col_y = ref(0)
const req_timer = ref(null)
//
const discountDialogVisible = ref(false)
const discountDetail = ref([])
const discountSeat = ref([])
//
async function handle_set_user_data() {
console.log('selectSeats.value', selectSeats.value)
let selectSeatData = []
props.seat.forEach((item) => {
if (selectSeats.value.indexOf(item['cineSeatId']) >= 0) {
selectSeatData.push(item)
}
})
const req_data = {
api: props.data.path,
member_type: props.data.type,
format: props.data.format,
user_data: JSON.stringify(selectSeatData),
env: props.base_info.env,
cid: props.base_info.cinema,
pid: props.base_info.channel,
}
console.log('handle_set_user_data', req_data)
await ec_api_set_user_data(req_data).then(
(req) => {
if (req['result'] === 'success') {
ElMessage({message: '选择的座位已做为后续测试数据!', type: 'success'})
} else {
ElMessage({message: '设置用户选择座位数据失败!', type: 'error'})
}
}
).catch(
(err) => {
console.log(err)
ElMessage({message: '设置用户选择座位数据失败!', type: 'error'})
}
)
clearTimeout(req_timer.value)
req_timer.value = null
}
function delay_handle_user_data() {
if (req_timer.value === null) {
req_timer.value = setTimeout(() => handle_set_user_data(), 1000)
}
}
// Redis
async function handle_clear_user_data() {
const req_data = {
api: props.data.path,
member_type: props.data.type,
env: props.base_info.env,
cid: props.base_info.cinema,
pid: props.base_info.channel,
}
console.log('handle_clear_user_data', req_data)
await ec_api_clear_user_data(req_data).then(
(req) => {
if (req['result'] === 'success') {
ElMessage({message: '选择的座位已清除,推荐参数将使用随机值!', type: 'success'})
} else {
ElMessage({message: '清除用户选择座位数据失败!', type: 'error'})
}
}
).catch(
(err) => {
console.log(err)
ElMessage({message: '清除用户选择座位数据失败!', type: 'error'})
}
)
}
onBeforeMount(() => {
console.log('onBeforeMount')
handleSeatData()
})
//
function handleSeatData() {
let q = 1 //
let m = 1 //
let pairValueShuangTemp = ''
let pairValueMultiTemp = ''
row_x.value = parseInt(props.seat.slice(-1)[0]['x'])
//
props.seat.forEach((item) => {
item['key'] = item['cineSeatId']
item['disable'] = item['seatStatus'] !== 'ok' || item['type'] === 'road' //
// discount
item['ticketDiscount'] = 0
item['serviceDiscount'] = 0
//
if (item['type'] === 'road') {
item['label'] = ''
item['id'] = ''
} else {
item['label'] = item['rowValue'] + '-' + item['columnValue']
item['id'] = item['cineSeatId']
}
//
switch (item['type']) {
case 'danren':
item['name'] = '单'
break;
case 'baoliu':
item['name'] = '保'
break;
case 'zhendong':
item['name'] = '震'
break;
case 'vip':
item['name'] = 'vip'
break;
case 'shuangren':
item['name'] = '情'
break;
case 'canji':
item['name'] = '残'
break;
case 'multi':
item['name'] = '多'
break;
}
//
if (item['pairValue'] !== '') {
if (item['type'] === 'shuangren') {
if (pairValueShuangTemp === '') {
pairValueShuangTemp = item['pairValue']
item['name'] = item['name'] + '-' + q
} else {
if (item['pairValue'] === pairValueShuangTemp) {
item['name'] = item['name'] + '-' + q
} else {
q++
pairValueShuangTemp = item['pairValue']
item['name'] = item['name'] + '-' + q
}
}
}
if (item['type'] === 'multi') {
if (pairValueMultiTemp === '') {
pairValueMultiTemp = item['pairValue']
item['name'] = item['name'] + '-' + m
} else {
if (item['pairValue'] === pairValueMultiTemp) {
item['name'] = item['name'] + '-' + m
} else {
m++
pairValueMultiTemp = item['pairValue']
item['name'] = item['name'] + '-' + m
}
}
}
}
if (!seatList.hasOwnProperty(item['x'])) {
seatList[item['x']] = []
}
seatList[item['x']].push(item)
})
console.log('seatList', seatList)
}
const getDiscountDetail = (discount) => {
console.log('getDiscountDetail', discount)
discountDialogVisible.value = false
discount.forEach((item) => {
selectSeats.value.forEach((seat) => {
if (seat.cineSeatId === item.cineSeatId) {
seat.ticketDiscount = item.ticketDiscount
seat.serviceDiscount = item.serviceDiscount
}
})
})
console.log('getDiscountDetail-selectSeats.value', selectSeats.value)
handle_set_user_data()
}
function getDiscountSeat() {
discountSeat.value = []
props.seat.forEach((item) => {
if (selectSeats.value.indexOf(item['cineSeatId']) >= 0) {
discountSeat.value.push(item)
}
})
}
watch(() => selectSeats.value, () => {
getDiscountSeat()
clearTimeout(req_timer.value)
req_timer.value = null
delay_handle_user_data()
})
</script>
<template>
<hr id="break_line"/>
<div style="font-size: 16px; font-weight: bold; color: #909399; text-align: left; margin-bottom: 10px">选择座位
<el-button size="small" type="primary" @click="discountDialogVisible=true">设置影票折扣</el-button>
<el-tooltip
class="box-item"
effect="dark"
content="点击清除选择后会将后台服务器中记录的选择内容清空,其他接口将通过随机获取的方式从此接口返回的数据中模拟参数"
placement="right"
>
<el-button size="small" style="font-weight: bold;color: #909399" @click="handle_clear_user_data">清除选择
</el-button>
</el-tooltip>
</div>
<div style="max-width: 1240px; overflow: auto">
<el-form style="max-width: 600px; margin-left: 20px">
<el-form-item>
<el-checkbox-group v-model="selectSeats">
<div class="seat-row" v-for="r in row_x">
<el-checkbox-button v-for="seat in seatList[r]" :label="seat['key']" :key="seat['key']"
:disabled="seat['disable']">
<span style="font-weight: bold">{{ seat['label'] }}</span>
<span style="font-size: 12px; margin-top: 5px">{{ seat['id'] }}</span>
<span style="font-size: 12px">{{ seat['name'] }}</span>
</el-checkbox-button>
</div>
</el-checkbox-group>
</el-form-item>
</el-form>
</div>
<TicketDiscount v-if="discountDialogVisible" @get_discount="getDiscountDetail" :is_show="discountDialogVisible"
:ticket_data="discountSeat"></TicketDiscount>
</template>
<style scoped>
#break_line {
margin-top: 30px;
margin-bottom: 30px;
background-color: rgba(144, 147, 153, 0.5);
height: 1px;
border: none
}
:deep(.el-checkbox-button) {
margin-bottom: 10px;
margin-right: 15px;
}
:deep(.el-checkbox-button__inner) {
width: 60px;
height: 60px;
align-content: center;
background: #ebebeb;
color: #333;
border: 0 !important;
border-radius: 10px !important;
display: inline-grid !important;
padding: 0 !important;
}
.seat-row {
display: flex;
}
</style>

@ -0,0 +1,702 @@
<script setup>
import {ref, reactive, onBeforeMount, onMounted, onUnmounted, watch, computed} from "vue";
import Sortable from "sortablejs";
import {useStore, mapState} from "vuex";
import JsonEditorVue from "json-editor-vue3";
import {
ec_api_send_request,
get_ec_api_request_url,
ec_api_get_suggest,
ec_api_get_suggest_timestamp
} from "@/apis/ec_api.js";
import {Eleme, Refresh} from "@element-plus/icons-vue";
import "@/VueAceEditor/aceConfig"
import {VAceEditor} from "vue3-ace-editor";
import {ElMessage} from "element-plus";
import MovieShow from "@/components/ec_api/MovieShow.vue";
import SeatStatus from "@/components/ec_api/SeatStatus.vue";
import CinemaGoods from "@/components/ec_api/CinemaGoods.vue";
import EcardLevel from "@/components/ec_api/EcardLevel.vue";
import CheckQuan from "@/components/ec_api/CheckQuan.vue";
import ApiLockBuySelector from "@/components/ec_api/ApiLockBuySelector.vue";
// store
const store = useStore()
//
const tabsRef = ref(null); // tabsRef
const activeTab = ref(store.state.ecApiModule.first_tab_api_id); // api_id
//
const ApiTableRef = ref(null) // Ref
// const multipleSelection = ref([]) // checkbox
//
const UserApiData = ref({api: {}, base_info: {}, tab: {}})
// loading
const req_loading = ref(false)
const send_btn = ref('发送')
//
const saleType = ref('ticket')
//
const payType = ref('cash')
//
//
function handleParamsChange(newCheckedResult) {
// console.log('handleParamsChange', newCheckedResult)
// console.log('activeTab.value', activeTab.value)
// console.log('UserApiData.value.api[activeTab.value]', UserApiData.value.api[activeTab.value])
}
// is_checkedtrue
function handleParamsSelect(val) {
UserApiData.value.api[activeTab.value].params.forEach(param => {
param['is_checked'] = val.indexOf(param) >= 0;
})
}
// is_checkedtrue
function markIsChecked() {
if (UserApiData.value.hasOwnProperty('api') || UserApiData.value.api.length > 0) {
UserApiData.value.api[activeTab.value].params.forEach(item => {
if (item['is_checked'] === true) {
ApiTableRef.value[UserApiData.value.tab[activeTab.value]].toggleRowSelection(item, true)
} else {
ApiTableRef.value[UserApiData.value.tab[activeTab.value]].toggleRowSelection(item, false)
}
})
}
}
// url'format', 'pid', '_sig'
function checkboxFilter(row) {
const special_params = ['format', 'pid', '_sig']
return special_params.indexOf(row.param) < 0;
}
//
function initApiData() {
//
UserApiData.value['base_info'] = {
env: store.state.ecApiModule.ec_api_data.env,
cinema: store.state.ecApiModule.ec_api_data.cinema,
channel: store.state.ecApiModule.ec_api_data.channel,
}
// store.state.ecApiModule.ec_api_data.api
let api_id_array = []
let api_tab = {}
if (store.state.ecApiModule.ec_api_data.api) {
store.state.ecApiModule.ec_api_data.api.forEach((item, index) => {
api_id_array.push(item.id)
api_tab[item.id] = index
if (!UserApiData.value['api'].hasOwnProperty(item.id)) {
UserApiData.value['api'][item.id] = {
'id': item.id,
'description': item.description,
'path': item.path,
'type': item.type,
'url': '',
'response': '{"root": "root"}',
'handled': '',
'sig': '',
'format': 'json',
'reload': true,
'timestamp': 0,
'params': store.state.ecApiModule.ec_api_data.api_params[item.id]
}
}
})
// UserApiData
Object.values(UserApiData.value['api']).forEach((api) => {
if (api_id_array.indexOf(api['id']) < 0) {
delete UserApiData.value['api'][api['id']]
}
})
// cidpid
Object.keys(UserApiData.value['api']).forEach(api_id => {
UserApiData.value['api'][api_id]['params'].forEach(
param_item => {
if (param_item['param'] === 'cid') {
param_item['value'] = UserApiData.value['base_info']['cinema']
}
if (param_item['param'] === 'pid') {
param_item['value'] = UserApiData.value['base_info']['channel']
}
//
param_item['default'] = param_item['value']
}
)
})
// UserApiData
UserApiData.value.tab = api_tab
}
}
//
function addNewParams() {
UserApiData.value.api[activeTab.value].params.push({
id: Date.now(),
api_id: activeTab.value,
param: '',
value: '',
is_request: false,
is_checked: false,
is_preset: false
})
}
//
function loadDefault(param) {
console.log(param)
UserApiData.value.api[activeTab.value].reload = true
get_suggest()
}
//
function changeFormat() {
UserApiData.value.api[activeTab.value]['params'].forEach(p => {
if (p['param'] === 'format') {
if (['json', 'xml'].indexOf(p['value']) < 0) {
alert('format参数值支持json和xml')
return
}
if (p['value'] === 'json') {
UserApiData.value.api[activeTab.value]['format'] = 'json'
p['response'] = '{"root": "root"}'
}
if (p['value'] === 'xml') {
UserApiData.value.api[activeTab.value]['format'] = 'html'
UserApiData.value.api[activeTab.value]['response'] = '<root></root>'
}
}
})
}
// url
function handle_request_data() {
let data = {}
let req_data = {}
UserApiData.value.api[activeTab.value]['params'].forEach(
p => {
if (p['param'] !== '_sig' && p['is_checked'] === true) {
req_data[p['param']] = p['value']
}
}
)
data['env'] = UserApiData.value.base_info['env']
data['type'] = UserApiData.value.api[activeTab.value]['type']
data['api'] = UserApiData.value.api[activeTab.value]['path']
data['pid'] = UserApiData.value.base_info['channel']
data['cid'] = UserApiData.value.base_info['cinema']
data['params'] = JSON.stringify(req_data)
return data
}
// url
function handle_request_url() {
console.log('UserApiData.value', UserApiData.value)
if (UserApiData.value.base_info['cinema'] === '' || UserApiData.value.base_info['channel'] === '') {
alert('请选择影院和渠道!')
return
}
const data = handle_request_data()
get_ec_api_request_url(data).then(res => {
console.log('handle_update_url', res)
UserApiData.value.api[activeTab.value]['url'] = res['url']
UserApiData.value.api[activeTab.value]['params'].forEach(p => {
if (p['param'] === '_sig') {
p['value'] = res['sig']
}
})
}).catch(err => console.log(err))
}
// api
function send_request() {
//
req_loading.value = true
send_btn.value = '请求中'
//
if (UserApiData.value.api[activeTab.value].format === 'json') {
UserApiData.value.api[activeTab.value].response = '{"root": "root"}'
}
if (UserApiData.value.api[activeTab.value].format === 'html' || UserApiData.value.api[activeTab.value].format === 'xml') {
UserApiData.value.api[activeTab.value].response = '<root></root>'
}
const data = handle_request_data()
ec_api_send_request(data).then(res => {
UserApiData.value.api[activeTab.value].handled = JSON.parse(res.handled)
if (res.format === 'json') {
UserApiData.value.api[activeTab.value].response = JSON.stringify(JSON.parse(res.data), null, 2)
}
if (res.format === 'xml') {
const xmlDoc = new DOMParser().parseFromString(res.data, 'application/xml');
const serializer = new XMLSerializer();
UserApiData.value.api[activeTab.value].response = serializer.serializeToString(xmlDoc);
}
//
req_loading.value = false
send_btn.value = '发送'
}
).catch(err => {
req_loading.value = false
send_btn.value = '发送'
ElMessage.error('获取请求结果失败!')
})
}
async function get_suggest(options = {sale_type: saleType.value, pay_type: payType.value}) {
if (UserApiData.value.api[activeTab.value].reload === true) {
const api_type = UserApiData.value.api[activeTab.value].type
const api = UserApiData.value.api[activeTab.value].path
const env = UserApiData.value.base_info['env']
const cid = UserApiData.value.base_info['cinema']
const pid = UserApiData.value.base_info['channel']
await ec_api_get_suggest(api_type, api, env, cid, pid, options).then(
(res) => {
console.log('get_suggest', api, res)
let result = true
if (res.length === 0) {
result = true
}
res.forEach((suggest) => {
UserApiData.value.api[activeTab.value].params.forEach((param) => {
if (suggest.result === false) {
result = false
}
if (param.param === suggest.param) {
param['value'] = suggest['value']
param['default'] = suggest['value']
param['is_checked'] = suggest['is_checked']
}
})
})
UserApiData.value.api[activeTab.value].reload = !result
}
).catch((err) => {
console.log(err)
})
}
}
async function get_timestamp(options = {sale_type: saleType.value, pay_type: payType.value}) {
const api_type = UserApiData.value.api[activeTab.value].type
const api = UserApiData.value.api[activeTab.value].path
const env = UserApiData.value.base_info['env']
const cid = UserApiData.value.base_info['cinema']
const pid = UserApiData.value.base_info['channel']
await ec_api_get_suggest_timestamp(api_type, api, env, cid, pid, options).then(
res => {
console.log('get_timestamp', res['timestamp'])
if (res['timestamp'] > UserApiData.value.api[activeTab.value].timestamp) {
UserApiData.value.api[activeTab.value].reload = true
UserApiData.value.api[activeTab.value].timestamp = res['timestamp']
}
}
).catch((err) => {
console.log(err)
})
}
//
function check_params(checked, unchecked) {
UserApiData.value.api[activeTab.value].params.forEach(param => {
if (checked.indexOf(param.param) >= 0) {
param.is_checked = true
}
if (unchecked.indexOf(param.param) >= 0) {
param.is_checked = false
}
})
}
//
function get_sale_type(sale_type) {
console.log('sale_type', sale_type)
saleType.value = sale_type
if (UserApiData.value.api[activeTab.value].path === "seat/check-coupon") {
switch (saleType.value) {
case 'ticket':
check_params(["play_id", "price", "seat_num"], ["goods"]);
break;
case 'goods':
check_params(["goods"], ["play_id", "price", "seat_num"]);
break;
case 'all':
check_params(["play_id", "price", "seat_num", "goods"], []);
break;
}
}
if (UserApiData.value.api[activeTab.value].path === "seat/lock-buy") {
switch (saleType.value) {
case 'ticket':
check_params(["play_id", "play_update_time", "seat", "lock_flag"], ["goods"]);
break;
case 'goods':
check_params(["goods"], ["play_id", "play_update_time", "seat", "lock_flag"]);
break;
case 'all':
check_params(["play_id", "play_update_time", "seat", "lock_flag", "goods"], []);
break;
}
}
get_suggest()
markIsChecked()
}
//
function get_quan_detail(quan, cardQuan, quanType) {
console.log('quanType', quanType)
if (quanType === 'yushouquan') {
console.log('yushouquan')
UserApiData.value.api[activeTab.value].params.forEach(param => {
if (param['param'] === 'coupons') {
console.log('coupons', quan)
param['value'] = quan.join(',')
param['is_checked'] = true
}
if (param['param'] === 'card_coupons') {
param['value'] = null
param['is_checked'] = false
}
})
} else {
UserApiData.value.api[activeTab.value].params.forEach(param => {
if (param['param'] === 'card_coupons') {
param['value'] = JSON.stringify(cardQuan)
param['is_checked'] = true
}
if (param['param'] === 'coupons') {
param['value'] = null
param['is_checked'] = false
}
})
}
console.log('get_quan_detail - saleType.value', saleType.value)
get_suggest()
markIsChecked()
}
function get_pay_type(pay_type) {
console.log('pay_type', pay_type)
payType.value = pay_type
switch (pay_type) {
case 'cash':
check_params(["cash"], ["ecard_number", "coupons", "card_coupons"]);
break;
case 'ecard':
check_params(["cash", "ecard_number"], ["coupons", "card_coupons"]);
break;
case 'yushouquan':
check_params(["cash", "coupons"], ["ecard_number", "card_coupons"]);
break;
case 'equan':
check_params(["cash", "card_coupons"], ["ecard_number", "coupons"]);
break;
}
get_suggest()
markIsChecked()
}
//
function test() {
console.log('store.state.ecApiModule.ec_api_data', store.state.ecApiModule.ec_api_data)
console.log('UserApiData.value', UserApiData.value)
// console.log('activeTab.value', activeTab.value)
}
//
const showList = computed(() => {
const api = UserApiData.value.api[activeTab.value]
if (api.path === 'cinema/plays') {
if (api.format === 'json') {
if (api.response === '{"root": "root"}') {
return []
} else {
return api.handled['res']['data'] ? api.handled['res']['data'] : []
}
}
if (api.format === 'xml' || api.format === 'html') {
if (api.response === '<root></root>') {
return []
} else {
return api.handled['res']['data'] ? api.handled['res']['data'] : []
}
}
}
return []
})
//
const seatList = computed(() => {
const api = UserApiData.value.api[activeTab.value]
if (api.path === 'play/seat-status') {
if (api.format === 'json') {
if (api.response === '{"root": "root"}') {
return []
} else {
console.log("api.handled['res']['data']", api.handled['res']['data'])
return api.handled['res']['data'] ? api.handled['res']['data'] : []
}
}
if (api.format === 'xml' || api.format === 'html') {
if (api.response === '<root></root>') {
return []
} else {
console.log("api.handled['res']['data']", api.handled['res']['data'])
return api.handled['res']['data'] ? api.handled['res']['data'] : []
}
}
}
return []
})
//
const goodsList = computed(() => {
const api = UserApiData.value.api[activeTab.value]
if (api.path === 'cinema/goods') {
if (api.format === 'json') {
if (api.response === '{"root": "root"}') {
return []
} else if (String(api.handled['res']['status']) !== '1') {
console.log("api.handled['res']['data'] else-if", api.handled['res']['data'])
console.log("api.handled['res']['status']", api.handled['res']['status'])
console.log("typeof api.handled['res']['status']", typeof api.handled['res']['status'])
return []
} else {
console.log("api.handled['res']['data']", api.handled['res']['data'])
return api.handled['res']['data']
}
}
if (api.format === 'xml' || api.format === 'html') {
if (api.response === '<root></root>') {
return []
} else if (String(api.handled['res']['status']) !== '1') {
console.log("api.handled['res']['status']", api.handled['res']['status'])
console.log("typeof api.handled['res']['status']", typeof api.handled['res']['status'])
return []
} else {
console.log("api.handled['res']['data']", api.handled['res']['data'])
return api.handled['res']['data']
}
}
}
return []
})
const levelList = computed(() => {
const api = UserApiData.value.api[activeTab.value]
if (api.path === 'ecard/ecard-levels') {
if (api.format === 'json') {
if (api.response === '{"root": "root"}') {
return []
} else {
console.log("api.handled['res']['data']['ecardLevelData']", api.handled['res']['data']['ecardLevelData'])
return api.handled['res']['data']['ecardLevelData']
}
}
if (api.format === 'xml' || api.format === 'html') {
if (api.response === '<root></root>') {
return []
} else {
console.log("api.handled['res']['data']['ecardLevelData']", api.handled['res']['data']['ecardLevelData'])
return api.handled['res']['data']['ecardLevelData']
}
}
}
return []
})
// ec_select_api
watch(() => store.state.ecApiModule.ec_api_data.api, (oldValue, newValue) => {
console.log('watch store.state.ecApiModule.ec_api_data.api')
//
initApiData()
//
const select_api_id = store.getters['ecApiModule/ec_select_api_getter']
if (select_api_id.indexOf(activeTab.value) < 0) {
activeTab.value = select_api_id[0]
}
}, {deep: true})
// activeTab
watch(activeTab, () => {
markIsChecked()
get_timestamp()
get_suggest()
handle_request_url()
})
// url
watch(UserApiData.value, () => {
console.log('watch UserApiData', UserApiData.value)
console.log('store.state.ecApiModule.ec_api_data', store.state.ecApiModule.ec_api_data)
get_suggest()
handle_request_url()
}, {deep: true, flush: "post"})
/*
生命周期逻辑
*/
onBeforeMount(
() => {
// console.log('TabArea onBeforeMount')
//
initApiData()
}
)
//
onMounted(() => {
// console.log('TabArea onMounted')
// is_checked
markIsChecked()
//
const elTabsHeader = tabsRef.value.$el.querySelector('.el-tabs__header .el-tabs__nav');
const sortTabs = new Sortable(elTabsHeader, {
animation: 150,
ghostClass: 'dragging',
draggable: '.el-tabs__item',
onEnd: (evt) => {
store.commit('ecApiModule/handle_sort_ec_select_api', {'newIndex': evt.newIndex, 'oldIndex': evt.oldIndex})
},
});
});
// vue3-ace-editor
const ace_options = {
useWorker: false, // ,true
enableBasicAutocompletion: false, //
enableLiveAutocompletion: false, //
enableSnippets: true, //
showPrintMargin: false, // 线printMarginColumn
highlightActiveLine: true, //
highlightSelectedWord: true, //
tabSize: 2, // tab
fontSize: 14, //
wrap: false, //
readonly: true, //
minLines: 30, // minLinesmaxLineseditor
maxLines: 30, //
}
</script>
<template>
<el-tabs ref="tabsRef" v-model="activeTab" type="border-card">
<el-tab-pane
v-for="(api, index) in store.state.ecApiModule.ec_api_data.api"
:key="api['id']"
:label="api['description']"
:name="api['id']"
:disabled="req_loading"
>
<CheckQuan v-if="api['path'] === 'seat/check-coupon'" @getQuan="get_quan_detail" @getSaleType="get_sale_type"
:cid="UserApiData['base_info']['cinema']"></CheckQuan>
<ApiLockBuySelector v-if="api['path'] === 'seat/lock-buy'" @getSaleType="get_sale_type"
@getPayType="get_pay_type"></ApiLockBuySelector>
<el-table
ref='ApiTableRef'
:data="UserApiData.api[api['id']].params"
@selection-change="handleParamsChange"
@select="handleParamsSelect"
>
<el-table-column type="selection" width="50" :selectable="checkboxFilter"/>
<el-table-column label="字段名" width="200">
<template v-slot="scope">
<span v-if="scope.row.is_preset">{{ scope.row.param }}</span>
<span v-else><el-input type="text" placeholder="输入字段名" v-model="scope.row.param"></el-input></span>
</template>
</el-table-column>
<el-table-column label="字段值" width="800">
<template v-slot="scope">
<el-input type="textarea" placeholder="输入字段值" v-model="scope.row.value" rows="1"
@blur="changeFormat()"></el-input>
</template>
</el-table-column>
<el-table-column label="刷新推荐值" width="100" align="center">
<template v-slot="scope">
<el-button @click="loadDefault(scope.row.param)">
<el-icon>
<Refresh/>
</el-icon>
</el-button>
</template>
</el-table-column>
<el-table-column label="必选" width="80" align="center">
<template v-slot="scope">
<span>{{ scope.row.is_request ? '是' : '否' }}</span>
</template>
</el-table-column>
<el-table-column prop="description" label="描述" show-overflow-tooltip/>
</el-table>
<el-row class="BtnRow" style="width: 100%">
<el-col :span="2">
<el-button type="primary" @click="addNewParams">添加新字段</el-button>
</el-col>
</el-row>
<hr id="break_line"/>
<el-row class="BtnRow" style="width: 100%" :gutter="10" align="middle">
<el-col :span="2"><span style="font-weight: bold; color: #909399">请求地址</span></el-col>
<el-col :span="12">
<el-input type="text" v-model="UserApiData.api[api['id']].url" :style="{'font-size': '18px'}"></el-input>
</el-col>
<el-col :span="2">
<el-button type="primary" @click="send_request" :loading="req_loading" :disabled="req_loading">
{{ send_btn }}
</el-button>
</el-col>
<el-col :span="8">
</el-col>
</el-row>
<v-ace-editor v-model:value="UserApiData.api[api['id']].response" :lang="UserApiData.api[api['id']]['format']"
theme="chrome" :options="ace_options" class="vue-ace-editor" :wrap="true" style="width: 1200px"/>
<MovieShow v-if="showList.length > 0" :show="showList" :data="UserApiData.api[activeTab]" :base_info="UserApiData.base_info"/>
<SeatStatus v-if="seatList.length > 0" :seat="seatList" :data="UserApiData.api[activeTab]" :base_info="UserApiData.base_info"/>
<CinemaGoods v-if="goodsList.length > 0" :goods="goodsList" :data="UserApiData.api[activeTab]" :base_info="UserApiData.base_info"/>
<EcardLevel v-if="levelList.length > 0" :level="levelList" :data="UserApiData.api[activeTab]" :base_info="UserApiData.base_info"/>
</el-tab-pane>
</el-tabs>
<el-backtop :right="100" :bottom="100" :visibility-height="200"/>
</template>
<style scoped>
.BtnRow {
margin-top: 10px;
}
.editor {
margin-top: 20px;
margin-bottom: 20px;
}
.vue-ace-editor {
/* ace-editor默认没有高度,所以必须设置高度,或者同时设置最小行和最大行使编辑器的高度自动增高 */
margin-top: 20px;
margin-left: 20px;
border: 1px solid rgba(144, 147, 153, 0.5);
border-radius: 10px;
}
#break_line {
margin-top: 30px;
margin-bottom: 30px;
background-color: rgba(144, 147, 153, 0.5);
height: 1px;
border: none
}
</style>

@ -0,0 +1,48 @@
<script setup>
const props = defineProps(['is_show', 'ticket_data'])
const emits = defineEmits(['get_discount'])
function finish() {
const discount_seats = []
props.ticket_data.forEach((seat) => {
if (seat.ticketDiscount !==0 || seat.serviceDiscount !== 0) {
discount_seats.push(seat)
}
})
emits('get_discount', discount_seats)
}
</script>
<template>
<el-dialog v-model="props.is_show" :width="1000">
<div style="text-align: left; margin-left: 20px">
<span style="font-weight: bold;">输入影票折扣</span>&nbsp&nbsp
<span style="font-size: 12px">如果不输入则表示不使用三方折扣此处应小于票价和服务费</span>
</div>
<div>
<el-row v-for="seat in props.ticket_data" :key="seat.cineSeatId" style="margin: 10px 0 0 80px">
<el-col :span="3" style="text-align: left">
<span>{{ seat.rowValue }}-{{ seat.columnValue }}: {{ seat.name }}</span></el-col>
<el-col :span="8">输入影票折扣&nbsp&nbsp
<el-input-number :min="0" :precision="2" size="small" :step="0.01"
v-model="seat.ticketDiscount"></el-input-number>
</el-col>
<el-col :span="8">输入服务费折扣&nbsp&nbsp
<el-input-number :min="0" :precision="2" size="small" :step="0.01"
v-model="seat.serviceDiscount"></el-input-number>
</el-col>
</el-row>
</div>
<div v-if="props.ticket_data.length === 0" style="font-size: 20px; margin-top: 50px; color: #909399">暂无数据</div>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="finish">完成</el-button>
</div>
</template>
</el-dialog>
</template>
<style scoped>
</style>

@ -29,7 +29,7 @@ let showStatusTips = ref(false)
// //
const handleShowStatusTips = () => { const handleShowStatusTips = () => {
if (store.state.update_status[props.ip]) { if (store.state.updateModule.update_status[props.ip]) {
showStatusTips.value = true showStatusTips.value = true
} }
} }
@ -119,7 +119,7 @@ const stopWsGetStatus = function () {
} }
const handleWsOpen = () => { const handleWsOpen = () => {
if (store.state.update_status[props.ip] === true) { if (store.state.updateModule.update_status[props.ip] === true) {
createWs() createWs()
wsGetStatus() wsGetStatus()
} else { } else {
@ -127,14 +127,14 @@ const handleWsOpen = () => {
} }
} }
// const handleWsClose = () => { // const handleWsClose = () => {
// if (store.state.update_status[props.ip] === false) { // if (store.state.updateModule.update_status[props.ip] === false) {
// ws.send(JSON.stringify({"msg": "finish"})) // ws.send(JSON.stringify({"msg": "finish"}))
// wsClose() // wsClose()
// } // }
// } // }
const handleWsClear = (ip) => { const handleWsClear = (ip) => {
if (store.state.update_status[ip] === false) { if (store.state.updateModule.update_status[ip] === false) {
wsSend(JSON.stringify({"finish": ip})) wsSend(JSON.stringify({"finish": ip}))
updateStatus.value = {} updateStatus.value = {}
} }
@ -257,10 +257,10 @@ const handleUpdateAlter = () => {
// region // region
let updateBtn = ref("更新") let updateBtn = ref("更新")
const handleBtnName = (ip) => { const handleBtnName = (ip) => {
if (store.state.update_status[ip] === false) { if (store.state.updateModule.update_status[ip] === false) {
updateBtn.value = "更新" updateBtn.value = "更新"
} }
if (store.state.update_status[ip] === true) { if (store.state.updateModule.update_status[ip] === true) {
updateBtn.value = "更新中" updateBtn.value = "更新中"
} }
} }
@ -270,32 +270,32 @@ const handleBtnName = (ip) => {
const disableAll = ref(false) const disableAll = ref(false)
const handleDisable = (ip) => { const handleDisable = (ip) => {
disableAll.value = store.state.update_status[ip] === true; disableAll.value = store.state.updateModule.update_status[ip] === true;
} }
// endregion // endregion
// region // region
const changUpdateStatus = (ip) => { const changUpdateStatus = (ip) => {
store.commit("change_update_status", ip) store.commit("updateModule/change_update_status", ip)
} }
// endregion // endregion
// region opened // region opened
// ipstore // ipstore
const addUpdateStatus = () => { const addUpdateStatus = () => {
if (!store.state.update_status.hasOwnProperty(props.ip)) { if (!store.state.updateModule.update_status.hasOwnProperty(props.ip)) {
let data = { let data = {
"ip": props.ip, "ip": props.ip,
"status": false // true false "status": false // true false
} }
store.commit("add_update_status", data) store.commit("updateModule/add_update_status", data)
} }
} }
const getCurrentConfig = () => { const getCurrentConfig = () => {
if (store.state.update_config.hasOwnProperty(props.ip)) { if (store.state.updateModule.update_config.hasOwnProperty(props.ip)) {
selectedVersion.value = store.state.update_config[props.ip].version selectedVersion.value = store.state.updateModule.update_config[props.ip].version
checkedCmd.value = store.state.update_config[props.ip].selected checkedCmd.value = store.state.updateModule.update_config[props.ip].selected
} else { } else {
selectedVersion.value = '' selectedVersion.value = ''
} }
@ -317,7 +317,7 @@ const handleClose = () => {
handleWsClear(props.ip) handleWsClear(props.ip)
// handleWsClose() // handleWsClose()
showStatusTips.value = false showStatusTips.value = false
store.state.update_dialog_show = false store.state.updateModule.update_dialog_show = false
} }
// endregion // endregion
@ -327,12 +327,12 @@ const checkedCmd = ref([])
// //
const handleRep = (ip) => { const handleRep = (ip) => {
console.log(store.state.update_status[ip]) console.log(store.state.updateModule.update_status[ip])
changUpdateStatus(ip) // changUpdateStatus(ip) //
handleBtnName(props.ip) // handleBtnName(props.ip) //
handleDisable(props.ip) // handleDisable(props.ip) //
handleShowStatusTips() handleShowStatusTips()
console.log(store.state.update_status[ip]) console.log(store.state.updateModule.update_status[ip])
} }
const handleUpdate = async () => { const handleUpdate = async () => {
@ -354,7 +354,7 @@ const handleUpdate = async () => {
"ip": props.ip, "ip": props.ip,
"config": {'version': selectedVersion.value, 'selected': checkedCmd.value} "config": {'version': selectedVersion.value, 'selected': checkedCmd.value}
} }
store.commit("add_update_cine", data) store.commit("updateModule/add_update_cine", data)
// //
let cmd_array = [] let cmd_array = []
@ -373,18 +373,18 @@ const handleUpdate = async () => {
// //
if (res_data["result"] === "success") { if (res_data["result"] === "success") {
handleRep(res_ip) handleRep(res_ip)
store.commit("clear_update_status", res_ip) // store.commit("updateModule/clear_update_status", res_ip) //
} }
if (res_data["result"] === "fail") { if (res_data["result"] === "fail") {
alert(res_ip + ' 升级失败:' + res_data["msg"]) alert(res_ip + ' 升级失败:' + res_data["msg"])
handleRep(res_ip) handleRep(res_ip)
store.commit("clear_update_status", res_ip) // store.commit("updateModule/clear_update_status", res_ip) //
} }
stopWsGetStatus() // ws stopWsGetStatus() // ws
}).catch(err => { }).catch(err => {
const ip = err.config.params.ip const ip = err.config.params.ip
handleRep(ip) handleRep(ip)
store.commit("clear_update_status", ip) // store.commit("updateModule/clear_update_status", ip) //
stopWsGetStatus() // ws stopWsGetStatus() // ws
alert(ip + " 升级失败,请重试!") alert(ip + " 升级失败,请重试!")
}) })
@ -395,7 +395,7 @@ const handleUpdate = async () => {
<template> <template>
<el-dialog v-model="store.state.update_dialog_show" title="更新影院" :modal="true" width="720px" <el-dialog v-model="store.state.updateModule.update_dialog_show" title="更新影院" :modal="true" width="720px"
:close-on-click-modal="false" @opened="handleOpened" @close="handleClose"> :close-on-click-modal="false" @opened="handleOpened" @close="handleClose">
<div><span class="update">更新单机</span><span class="ip">{{ ip }}</span><span>目标版本</span> <div><span class="update">更新单机</span><span class="ip">{{ ip }}</span><span>目标版本</span>

@ -3,11 +3,11 @@
import {InfoFilled} from "@element-plus/icons-vue"; import {InfoFilled} from "@element-plus/icons-vue";
const props = defineProps({ const props = defineProps({
title: { title:{
type: String, type: String,
default: '说明' default: '说明'
}, },
width: { width:{
type: Number, type: Number,
default: 400 default: 400
}, },
@ -26,6 +26,7 @@ const props = defineProps({
:width=props.width :width=props.width
trigger="hover" trigger="hover"
:content=props.content :content=props.content
:popper-style="props.content.length > 600 ? 'height: 200px; overflow: auto;' : ''"
> >
<template #reference> <template #reference>
<el-icon> <el-icon>
@ -36,8 +37,4 @@ const props = defineProps({
</template> </template>
<style> <style>
.el-popover {
height: 200px;
overflow: auto;
}
</style> </style>

@ -32,6 +32,12 @@ const route = useRoute()
</el-icon> </el-icon>
<span>专资接口模拟</span> <span>专资接口模拟</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="ec_api">
<el-icon>
<icon-menu/>
</el-icon>
<span>网售接口测试</span>
</el-menu-item>
</el-menu> </el-menu>
</el-col> </el-col>
</el-row> </el-row>

@ -3,6 +3,9 @@
import Index from "@/views/update/index.vue"; import Index from "@/views/update/index.vue";
import PageHeader from "@/layout/components/PageHeader.vue"; import PageHeader from "@/layout/components/PageHeader.vue";
import PageAside from "@/layout/components/PageAside.vue"; import PageAside from "@/layout/components/PageAside.vue";
import {useRoute} from 'vue-router'
const route = useRoute()
</script> </script>
<template> <template>
@ -16,7 +19,12 @@ import PageAside from "@/layout/components/PageAside.vue";
<!-- <PageHeader/>--> <!-- <PageHeader/>-->
<!-- </el-header>--> <!-- </el-header>-->
<el-main> <el-main>
<router-view/> <router-view v-slot="{Component}">
<keep-alive>
<component :is="Component" :key="route.name" v-if="route.meta.keepAlive"/>
</keep-alive>
<component :is="Component" :key="route.name" v-if="!route.meta.keepAlive"/>
</router-view>
</el-main> </el-main>
</el-container> </el-container>
</el-container> </el-container>

@ -12,6 +12,18 @@ import "element-plus/theme-chalk/el-message.css";
import "element-plus/theme-chalk/el-notification.css"; import "element-plus/theme-chalk/el-notification.css";
import 'element-plus/dist/index.css' import 'element-plus/dist/index.css'
// 引入Ace Editor
import 'ace-builds/src-noconflict/ace';
import 'ace-builds/src-noconflict/mode-json';
import 'ace-builds/src-noconflict/mode-html';
import 'ace-builds/src-noconflict/theme-chrome';
import 'ace-builds/src-noconflict/worker-base';
import 'ace-builds/src-noconflict/worker-json';
import 'ace-builds/src-noconflict/worker-html';
import 'ace-builds/src-noconflict/snippets/json';
import 'ace-builds/src-noconflict/snippets/html';
import 'ace-builds/src-noconflict/ext-searchbox';
const app = createApp(App) const app = createApp(App)
for (const name in ELIcons) { for (const name in ELIcons) {

@ -1,10 +1,10 @@
export default { export default {
// method: 'get', // method: 'get',
baseURL: 'http://172.16.1.63:8000', // baseURL: 'http://172.16.1.63:8000',
// baseURL: 'http://172.16.1.114:8000', baseURL: 'http://172.16.1.168:8000',
// baseURL: 'http://127.0.0.1:8000', // baseURL: 'http://127.0.0.1:8000',
baseWS: 'ws://172.16.1.63:8000', // baseWS: 'ws://172.16.1.63:8000',
// baseWS: 'ws://172.16.1.114:8000', baseWS: 'ws://172.16.1.168:8000',
// baseWS: 'ws://127.0.0.1:8000', // baseWS: 'ws://127.0.0.1:8000',
headers: { headers: {
'Content-Type': 'application/json;charset=UTF-8', 'Content-Type': 'application/json;charset=UTF-8',

@ -5,11 +5,9 @@ import config from "@/request/config.js";
// import router from "@/router"; // import router from "@/router";
function request(options) { function request(options) {
console.log(options)
const instance = axios.create({...config}) const instance = axios.create({...config})
options = {...options, instance} // 使用创建的实例 options = {...options, instance} // 使用创建的实例
console.log(options)
// 请求拦截器 // 请求拦截器
instance.interceptors.request.use( instance.interceptors.request.use(
config => { config => {

@ -6,21 +6,41 @@ const routes = [
path: '/', path: '/',
name: 'Home', name: 'Home',
component: Layout, component: Layout,
meta:{
keepAlive: true,
},
children: [ children: [
{ {
path: '/', path: '/',
name: 'hello', name: 'hello',
component: () => import('@/components/HelloWorld.vue') component: () => import('@/components/HelloWorld.vue'),
meta:{
keepAlive: true,
}
}, },
{ {
path: 'update', path: 'update',
name: 'Update', name: 'Update',
component: () => import('@/views/update/index.vue') component: () => import('@/views/update/index.vue'),
meta:{
keepAlive: false,
}
}, },
{ {
path: 'mock', path: 'mock',
name: 'Mock', name: 'Mock',
component: () => import('@/views/mock/index.vue'), component: () => import('@/views/mock/index.vue'),
meta:{
keepAlive: false,
}
},
{
path: 'ec_api',
name: 'EcApi',
component: () => import('@/views/ec_api/index.vue'),
meta:{
keepAlive: true,
}
} }
] ]
} }

@ -1,17 +1,18 @@
import {createStore} from 'vuex'; import {createStore} from 'vuex';
import {toValue} from 'vue'
export default createStore({ const updateModule = {
modules: {}, namespaced: true,
state: { state: {
update_dialog_show: false, update_dialog_show: false,
update_config: {}, update_config: {},
update_status: {}, update_status: {},
}, },
getters: { getter: {
dialog_change: state => { dialog_change: state => {
state.update_dialog_show = !state.update_dialog_show state.update_dialog_show = !state.update_dialog_show
return state.update_dialog_show return state.update_dialog_show
} },
}, },
mutations: { mutations: {
add_update_cine: (state, payload) => { add_update_cine: (state, payload) => {
@ -29,7 +30,62 @@ export default createStore({
if (state.update_status[ip]) { if (state.update_status[ip]) {
delete state.update_status[ip] delete state.update_status[ip]
} }
},
},
actions: {},
}
const ecApiModule = {
namespaced: true,
state: {
ec_api_data: {api:[]}, // 所有api数据
// ec_select_api: [], // 默认选中的api
first_tab_api_id: 1
},
getters: {
ec_api_data_getter: state => {
return state.ec_api_data
},
ec_select_api_getter: state => {
let select_api_id = []
state.ec_api_data.api.forEach(item => {
select_api_id.push(item.id)
})
return select_api_id
},
},
mutations: {
change_ec_select_api: (state, payload) => {
// console.log('payload', payload)
// console.log('state.ec_api_data.api', state.ec_api_data.api)
payload.forEach((item) => {
if (state.ec_api_data.api.indexOf(item) === -1) {
state.ec_api_data.api.push(item)
}
})
state.ec_api_data.api.forEach((item) => {
if (payload.indexOf(item) === -1) {
state.ec_api_data.api.splice(state.ec_api_data.api.indexOf(item), 1)
}
})
// console.log('state.ec_api_data.api', state.ec_api_data.api)
},
handle_sort_ec_select_api: (state, payload) => {
const movedTab = state.ec_api_data.api.splice(payload.oldIndex-1, 1)[0];
state.ec_api_data.api.splice(payload.newIndex-1, 0, movedTab);
},
add_ec_api_data: (state, payload) => {
// console.log('payload', payload)
state.ec_api_data = payload
} }
}, },
actions: {}, actions: {},
}
export default createStore({
modules: {
updateModule,
ecApiModule,
},
}) })

@ -0,0 +1,16 @@
<script setup>
import BasicConfig from "@/components/ec_api/BasicConfig.vue";
import TabArea from "@/components/ec_api/TabArea.vue";
import {useStore} from "vuex";
const store = useStore();
</script>
<template>
<BasicConfig></BasicConfig>
<TabArea v-if="store.state.ecApiModule.ec_api_data.api.length > 0"></TabArea>
</template>
<style scoped>
</style>

@ -158,7 +158,7 @@ const update_ip = ref('')
const ver_id = ref(0) const ver_id = ref(0)
const changeDialogStatus = (ip, ver) => { const changeDialogStatus = (ip, ver) => {
store.state.update_dialog_show = true store.state.updateModule.update_dialog_show = true
update_ip.value = ip update_ip.value = ip
ver_id.value = ver ver_id.value = ver
} }

@ -22,120 +22,125 @@
resolved "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz" resolved "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz"
integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg== integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==
"@esbuild/android-arm64@0.19.8": "@esbuild/aix-ppc64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz#fb7130103835b6d43ea499c3f30cfb2b2ed58456" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537"
integrity sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA== integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==
"@esbuild/android-arm@0.19.8": "@esbuild/android-arm64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.8.tgz#b46e4d9e984e6d6db6c4224d72c86b7757e35bcb" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9"
integrity sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA== integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==
"@esbuild/android-x64@0.19.8": "@esbuild/android-arm@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.8.tgz#a13db9441b5a4f4e4fec4a6f8ffacfea07888db7" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995"
integrity sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A== integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==
"@esbuild/darwin-arm64@0.19.8": "@esbuild/android-x64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz#49f5718d36541f40dd62bfdf84da9c65168a0fc2" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98"
integrity sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw== integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==
"@esbuild/darwin-x64@0.19.8": "@esbuild/darwin-arm64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz#75c5c88371eea4bfc1f9ecfd0e75104c74a481ac" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb"
integrity sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q== integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==
"@esbuild/freebsd-arm64@0.19.8": "@esbuild/darwin-x64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz#9d7259fea4fd2b5f7437b52b542816e89d7c8575" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0"
integrity sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw== integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==
"@esbuild/freebsd-x64@0.19.8": "@esbuild/freebsd-arm64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz#abac03e1c4c7c75ee8add6d76ec592f46dbb39e3" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911"
integrity sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg== integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==
"@esbuild/linux-arm64@0.19.8": "@esbuild/freebsd-x64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz#c577932cf4feeaa43cb9cec27b89cbe0df7d9098" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c"
integrity sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ== integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==
"@esbuild/linux-arm@0.19.8": "@esbuild/linux-arm64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz#d6014d8b98b5cbc96b95dad3d14d75bb364fdc0f" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5"
integrity sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ== integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==
"@esbuild/linux-ia32@0.19.8": "@esbuild/linux-arm@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz#2379a0554307d19ac4a6cdc15b08f0ea28e7a40d" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c"
integrity sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ== integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==
"@esbuild/linux-ia32@0.20.2":
version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa"
integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==
"@esbuild/linux-loong64@0.14.54": "@esbuild/linux-loong64@0.14.54":
version "0.14.54" version "0.14.54"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028"
integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==
"@esbuild/linux-loong64@0.19.8": "@esbuild/linux-loong64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz#e2a5bbffe15748b49356a6cd7b2d5bf60c5a7123" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5"
integrity sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ== integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==
"@esbuild/linux-mips64el@0.19.8": "@esbuild/linux-mips64el@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz#1359331e6f6214f26f4b08db9b9df661c57cfa24" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa"
integrity sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q== integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==
"@esbuild/linux-ppc64@0.19.8": "@esbuild/linux-ppc64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz#9ba436addc1646dc89dae48c62d3e951ffe70951" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20"
integrity sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg== integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==
"@esbuild/linux-riscv64@0.19.8": "@esbuild/linux-riscv64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz#fbcf0c3a0b20f40b5fc31c3b7695f0769f9de66b" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300"
integrity sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg== integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==
"@esbuild/linux-s390x@0.19.8": "@esbuild/linux-s390x@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz#989e8a05f7792d139d5564ffa7ff898ac6f20a4a" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685"
integrity sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg== integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==
"@esbuild/linux-x64@0.19.8": "@esbuild/linux-x64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz#b187295393a59323397fe5ff51e769ec4e72212b" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff"
integrity sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg== integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==
"@esbuild/netbsd-x64@0.19.8": "@esbuild/netbsd-x64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz#c1ec0e24ea82313cb1c7bae176bd5acd5bde7137" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6"
integrity sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw== integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==
"@esbuild/openbsd-x64@0.19.8": "@esbuild/openbsd-x64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz#0c5b696ac66c6d70cf9ee17073a581a28af9e18d" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf"
integrity sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ== integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==
"@esbuild/sunos-x64@0.19.8": "@esbuild/sunos-x64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz#2a697e1f77926ff09fcc457d8f29916d6cd48fb1" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f"
integrity sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w== integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==
"@esbuild/win32-arm64@0.19.8": "@esbuild/win32-arm64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz#ec029e62a2fca8c071842ecb1bc5c2dd20b066f1" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90"
integrity sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg== integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==
"@esbuild/win32-ia32@0.19.8": "@esbuild/win32-ia32@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz#cbb9a3146bde64dc15543e48afe418c7a3214851" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23"
integrity sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw== integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==
"@esbuild/win32-x64@0.19.8": "@esbuild/win32-x64@0.20.2":
version "0.19.8" version "0.20.2"
resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz" resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz"
integrity sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA== integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==
"@floating-ui/core@^1.4.2": "@floating-ui/core@^1.4.2":
version "1.5.2" version "1.5.2"
@ -204,72 +209,92 @@
estree-walker "^2.0.2" estree-walker "^2.0.2"
picomatch "^2.3.1" picomatch "^2.3.1"
"@rollup/rollup-android-arm-eabi@4.6.1": "@rollup/rollup-android-arm-eabi@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.1.tgz#0ea289f68ff248b50fea5716ca9f65f7d4dba3ae" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27"
integrity sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA== integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==
"@rollup/rollup-android-arm64@4.6.1": "@rollup/rollup-android-arm64@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.1.tgz#27c8c67fc5de574874085a1b480ac65b3e18378e" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203"
integrity sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA== integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==
"@rollup/rollup-darwin-arm64@4.6.1": "@rollup/rollup-darwin-arm64@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.1.tgz#c5735c042980c85495411af7183dd20294763bd8" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096"
integrity sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw== integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==
"@rollup/rollup-darwin-x64@4.6.1": "@rollup/rollup-darwin-x64@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.1.tgz#af844bd54abb73ca3c9cf89a31eec17861d1375d" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c"
integrity sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg== integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==
"@rollup/rollup-linux-arm-gnueabihf@4.6.1": "@rollup/rollup-linux-arm-gnueabihf@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.1.tgz#5e972f63c441eaf859551039b3f18db9b035977d" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8"
integrity sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ== integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==
"@rollup/rollup-linux-arm64-gnu@4.6.1": "@rollup/rollup-linux-arm-musleabihf@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.1.tgz#f4cfbc71e3b6fdb395b28b1472414e181515c72d" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549"
integrity sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw== integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==
"@rollup/rollup-linux-arm64-musl@4.6.1": "@rollup/rollup-linux-arm64-gnu@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.1.tgz#6a94c691830dc29bf708de7c640f494996130893" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577"
integrity sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw== integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==
"@rollup/rollup-linux-x64-gnu@4.6.1": "@rollup/rollup-linux-arm64-musl@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.1.tgz#f07bae3f7dc532d9ea5ab36c9071db329f9a1efb" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c"
integrity sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA== integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==
"@rollup/rollup-linux-x64-musl@4.6.1": "@rollup/rollup-linux-powerpc64le-gnu@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.1.tgz#357a34fdbf410af88ce48bd802bea6462bb9a8bc" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf"
integrity sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ== integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==
"@rollup/rollup-win32-arm64-msvc@4.6.1": "@rollup/rollup-linux-riscv64-gnu@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.1.tgz#b6e97fd38281667e35297033393cd1101f4a31be" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9"
integrity sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ== integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==
"@rollup/rollup-win32-ia32-msvc@4.6.1": "@rollup/rollup-linux-s390x-gnu@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.1.tgz#a95db026c640c8128bfd38546d85342f2329beaf" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec"
integrity sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw== integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==
"@rollup/rollup-win32-x64-msvc@4.6.1": "@rollup/rollup-linux-x64-gnu@4.18.0":
version "4.6.1" version "4.18.0"
resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.1.tgz" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942"
integrity sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A== integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==
"@rollup/rollup-linux-x64-musl@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d"
integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==
"@rollup/rollup-win32-arm64-msvc@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf"
integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==
"@rollup/rollup-win32-ia32-msvc@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54"
integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==
"@rollup/rollup-win32-x64-msvc@4.18.0":
version "4.18.0"
resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz"
integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==
"@sphinxxxx/color-conversion@^2.2.2": "@sphinxxxx/color-conversion@^2.2.2":
version "2.2.2" version "2.2.2"
resolved "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz" resolved "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz"
integrity sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw== integrity sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==
"@types/estree@^1.0.0": "@types/estree@1.0.5", "@types/estree@^1.0.0":
version "1.0.5" version "1.0.5"
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz"
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
@ -425,6 +450,11 @@ ace-builds@^1.31.1:
resolved "https://registry.npmjs.org/ace-builds/-/ace-builds-1.32.2.tgz" resolved "https://registry.npmjs.org/ace-builds/-/ace-builds-1.32.2.tgz"
integrity sha512-mnJAc803p+7eeDt07r6XI7ufV7VdkpPq4gJZT8Jb3QsowkaBTVy4tdBgPrVT0WbXLm0toyEQXURKSVNj/7dfJQ== integrity sha512-mnJAc803p+7eeDt07r6XI7ufV7VdkpPq4gJZT8Jb3QsowkaBTVy4tdBgPrVT0WbXLm0toyEQXURKSVNj/7dfJQ==
ace-builds@^1.35.4:
version "1.35.4"
resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.35.4.tgz#f41d7ef57c3a7d424cd7e3300bef0cbef905c84f"
integrity sha512-r0KQclhZ/uk5a4zOqRYQkJuQuu4vFMiA6VTj54Tk4nI1TUR3iEMMppZkWbNoWEgWwv4ciDloObb9Rf4V55Qgjw==
acorn@^8.10.0, acorn@^8.11.2, acorn@^8.8.2: acorn@^8.10.0, acorn@^8.11.2, acorn@^8.8.2:
version "8.11.2" version "8.11.2"
resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz" resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz"
@ -485,11 +515,11 @@ brace-expansion@^2.0.1:
balanced-match "^1.0.0" balanced-match "^1.0.0"
braces@^3.0.2, braces@~3.0.2: braces@^3.0.2, braces@~3.0.2:
version "3.0.2" version "3.0.3"
resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies: dependencies:
fill-range "^7.0.1" fill-range "^7.1.1"
"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
version "3.5.3" version "3.5.3"
@ -688,33 +718,34 @@ esbuild@^0.14.14:
esbuild-windows-64 "0.14.54" esbuild-windows-64 "0.14.54"
esbuild-windows-arm64 "0.14.54" esbuild-windows-arm64 "0.14.54"
esbuild@^0.19.3: esbuild@^0.20.1:
version "0.19.8" version "0.20.2"
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz" resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz"
integrity sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w== integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==
optionalDependencies: optionalDependencies:
"@esbuild/android-arm" "0.19.8" "@esbuild/aix-ppc64" "0.20.2"
"@esbuild/android-arm64" "0.19.8" "@esbuild/android-arm" "0.20.2"
"@esbuild/android-x64" "0.19.8" "@esbuild/android-arm64" "0.20.2"
"@esbuild/darwin-arm64" "0.19.8" "@esbuild/android-x64" "0.20.2"
"@esbuild/darwin-x64" "0.19.8" "@esbuild/darwin-arm64" "0.20.2"
"@esbuild/freebsd-arm64" "0.19.8" "@esbuild/darwin-x64" "0.20.2"
"@esbuild/freebsd-x64" "0.19.8" "@esbuild/freebsd-arm64" "0.20.2"
"@esbuild/linux-arm" "0.19.8" "@esbuild/freebsd-x64" "0.20.2"
"@esbuild/linux-arm64" "0.19.8" "@esbuild/linux-arm" "0.20.2"
"@esbuild/linux-ia32" "0.19.8" "@esbuild/linux-arm64" "0.20.2"
"@esbuild/linux-loong64" "0.19.8" "@esbuild/linux-ia32" "0.20.2"
"@esbuild/linux-mips64el" "0.19.8" "@esbuild/linux-loong64" "0.20.2"
"@esbuild/linux-ppc64" "0.19.8" "@esbuild/linux-mips64el" "0.20.2"
"@esbuild/linux-riscv64" "0.19.8" "@esbuild/linux-ppc64" "0.20.2"
"@esbuild/linux-s390x" "0.19.8" "@esbuild/linux-riscv64" "0.20.2"
"@esbuild/linux-x64" "0.19.8" "@esbuild/linux-s390x" "0.20.2"
"@esbuild/netbsd-x64" "0.19.8" "@esbuild/linux-x64" "0.20.2"
"@esbuild/openbsd-x64" "0.19.8" "@esbuild/netbsd-x64" "0.20.2"
"@esbuild/sunos-x64" "0.19.8" "@esbuild/openbsd-x64" "0.20.2"
"@esbuild/win32-arm64" "0.19.8" "@esbuild/sunos-x64" "0.20.2"
"@esbuild/win32-ia32" "0.19.8" "@esbuild/win32-arm64" "0.20.2"
"@esbuild/win32-x64" "0.19.8" "@esbuild/win32-ia32" "0.20.2"
"@esbuild/win32-x64" "0.20.2"
escape-html@^1.0.3: escape-html@^1.0.3:
version "1.0.3" version "1.0.3"
@ -759,17 +790,17 @@ fastq@^1.6.0:
dependencies: dependencies:
reusify "^1.0.4" reusify "^1.0.4"
fill-range@^7.0.1: fill-range@^7.1.1:
version "7.0.1" version "7.1.1"
resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies: dependencies:
to-regex-range "^5.0.1" to-regex-range "^5.0.1"
follow-redirects@^1.15.0: follow-redirects@^1.15.0:
version "1.15.3" version "1.15.6"
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz"
integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
form-data@^4.0.0: form-data@^4.0.0:
version "4.0.0" version "4.0.0"
@ -1038,14 +1069,14 @@ pkg-types@^1.0.3:
mlly "^1.2.0" mlly "^1.2.0"
pathe "^1.1.0" pathe "^1.1.0"
postcss@^8.4.32: postcss@^8.4.32, postcss@^8.4.38:
version "8.4.32" version "8.4.38"
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz"
integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
dependencies: dependencies:
nanoid "^3.3.7" nanoid "^3.3.7"
picocolors "^1.0.0" picocolors "^1.0.0"
source-map-js "^1.0.2" source-map-js "^1.2.0"
proxy-from-env@^1.1.0: proxy-from-env@^1.1.0:
version "1.1.0" version "1.1.0"
@ -1069,6 +1100,11 @@ readdirp@~3.6.0:
dependencies: dependencies:
picomatch "^2.2.1" picomatch "^2.2.1"
resize-observer-polyfill@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
resolve@^1.22.4: resolve@^1.22.4:
version "1.22.8" version "1.22.8"
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz"
@ -1083,23 +1119,29 @@ reusify@^1.0.4:
resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rollup@^4.2.0: rollup@^4.13.0:
version "4.6.1" version "4.18.0"
resolved "https://registry.npmjs.org/rollup/-/rollup-4.6.1.tgz" resolved "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz"
integrity sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ== integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==
dependencies:
"@types/estree" "1.0.5"
optionalDependencies: optionalDependencies:
"@rollup/rollup-android-arm-eabi" "4.6.1" "@rollup/rollup-android-arm-eabi" "4.18.0"
"@rollup/rollup-android-arm64" "4.6.1" "@rollup/rollup-android-arm64" "4.18.0"
"@rollup/rollup-darwin-arm64" "4.6.1" "@rollup/rollup-darwin-arm64" "4.18.0"
"@rollup/rollup-darwin-x64" "4.6.1" "@rollup/rollup-darwin-x64" "4.18.0"
"@rollup/rollup-linux-arm-gnueabihf" "4.6.1" "@rollup/rollup-linux-arm-gnueabihf" "4.18.0"
"@rollup/rollup-linux-arm64-gnu" "4.6.1" "@rollup/rollup-linux-arm-musleabihf" "4.18.0"
"@rollup/rollup-linux-arm64-musl" "4.6.1" "@rollup/rollup-linux-arm64-gnu" "4.18.0"
"@rollup/rollup-linux-x64-gnu" "4.6.1" "@rollup/rollup-linux-arm64-musl" "4.18.0"
"@rollup/rollup-linux-x64-musl" "4.6.1" "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0"
"@rollup/rollup-win32-arm64-msvc" "4.6.1" "@rollup/rollup-linux-riscv64-gnu" "4.18.0"
"@rollup/rollup-win32-ia32-msvc" "4.6.1" "@rollup/rollup-linux-s390x-gnu" "4.18.0"
"@rollup/rollup-win32-x64-msvc" "4.6.1" "@rollup/rollup-linux-x64-gnu" "4.18.0"
"@rollup/rollup-linux-x64-musl" "4.18.0"
"@rollup/rollup-win32-arm64-msvc" "4.18.0"
"@rollup/rollup-win32-ia32-msvc" "4.18.0"
"@rollup/rollup-win32-x64-msvc" "4.18.0"
fsevents "~2.3.2" fsevents "~2.3.2"
run-parallel@^1.1.9: run-parallel@^1.1.9:
@ -1123,10 +1165,15 @@ scule@^1.1.1:
resolved "https://registry.npmjs.org/scule/-/scule-1.1.1.tgz" resolved "https://registry.npmjs.org/scule/-/scule-1.1.1.tgz"
integrity sha512-sHtm/SsIK9BUBI3EFT/Gnp9VoKfY6QLvlkvAE6YK7454IF8FSgJEAnJpVdSC7K5/pjI5NfxhzBLW2JAfYA/shQ== integrity sha512-sHtm/SsIK9BUBI3EFT/Gnp9VoKfY6QLvlkvAE6YK7454IF8FSgJEAnJpVdSC7K5/pjI5NfxhzBLW2JAfYA/shQ==
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: sortablejs@^1.15.2:
version "1.0.2" version "1.15.2"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== integrity sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA==
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2, source-map-js@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
strip-literal@^1.3.0: strip-literal@^1.3.0:
version "1.3.0" version "1.3.0"
@ -1249,13 +1296,13 @@ vite-plugin-dynamic-import@^1.5.0:
magic-string "^0.30.1" magic-string "^0.30.1"
vite@^5.0.0: vite@^5.0.0:
version "5.0.6" version "5.2.13"
resolved "https://registry.npmjs.org/vite/-/vite-5.0.6.tgz" resolved "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz"
integrity sha512-MD3joyAEBtV7QZPl2JVVUai6zHms3YOmLR+BpMzLlX2Yzjfcc4gTgNi09d/Rua3F4EtC8zdwPU8eQYyib4vVMQ== integrity sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==
dependencies: dependencies:
esbuild "^0.19.3" esbuild "^0.20.1"
postcss "^8.4.32" postcss "^8.4.38"
rollup "^4.2.0" rollup "^4.13.0"
optionalDependencies: optionalDependencies:
fsevents "~2.3.3" fsevents "~2.3.3"
@ -1271,6 +1318,13 @@ vue-router@^4.0.13:
dependencies: dependencies:
"@vue/devtools-api" "^6.0.0" "@vue/devtools-api" "^6.0.0"
vue3-ace-editor@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/vue3-ace-editor/-/vue3-ace-editor-2.2.4.tgz#1f2a787f91cf7979f27fab29e0e0604bb3ee1c17"
integrity sha512-FZkEyfpbH068BwjhMyNROxfEI8135Sc+x8ouxkMdCNkuj/Tuw83VP/gStFQqZHqljyX9/VfMTCdTqtOnJZGN8g==
dependencies:
resize-observer-polyfill "^1.5.1"
vue@^3.3.8: vue@^3.3.8:
version "3.3.10" version "3.3.10"
resolved "https://registry.npmjs.org/vue/-/vue-3.3.10.tgz" resolved "https://registry.npmjs.org/vue/-/vue-3.3.10.tgz"
@ -1300,6 +1354,6 @@ webpack-virtual-modules@^0.6.0:
integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==
ws@^8.16.0: ws@^8.16.0:
version "8.16.0" version "8.17.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" resolved "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz"
integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==

Loading…
Cancel
Save